{"version":3,"file":"product.min.js","sources":["Pages/Root/deferred/issueLogger.ts","Pages/Product/StockLevel.ts","Pages/Product/ProductClass.ts","Pages/Product/SelectorUI/ClickableSelector.ts","Pages/Main/basketCommon.ts","Pages/Main/QuickAdd.ts","Pages/Product/Product.ts","Pages/Product/magiczoomplus.js"],"sourcesContent":["// Import the type but not the module, to avoid bundling Sentry.\r\nimport type * as SentryType from \"@sentry/browser\";\r\nconst Sentry = (window as any).Sentry as typeof SentryType;\r\n\r\nexport class IssueLogger {\r\n public static log(message: string, tag?: string, context?: any): void {\r\n try {\r\n if (!Sentry) {\r\n return;\r\n }\r\n\r\n Sentry.withScope(function (scope) {\r\n if (context) {\r\n scope.setExtra(\"additional\", context);\r\n }\r\n\r\n if (tag) {\r\n scope.setTag(\"operation\", tag);\r\n }\r\n\r\n Sentry.captureMessage(message);\r\n });\r\n } catch (e) {\r\n // Sentry not loaded, probably due to ad blockers.\r\n }\r\n }\r\n}\r\n","export enum StockLevel {\r\n Stock_NotSelected = 0,\r\n Stock_InStock = 1,\r\n Stock_LowStock = 2,\r\n Stock_Enquiries = 3,\r\n Stock_Unavailable = 4\r\n}\r\n","export enum ProductClass {\r\n PhysicalProduct = 0,\r\n GiftCard = 1\r\n}\r\n","import { IssueLogger } from \"../../Root/deferred/issueLogger\";\r\nimport { IProductPage } from \"../Interfaces/IProductPage\";\r\nimport { StockLevel } from \"../StockLevel\";\r\nimport { IColourSizeSelector } from \"./IColourSizeSelector\";\r\n\r\nexport class ClickableSelector implements IColourSizeSelector {\r\n private stockLegendContainer: HTMLElement;\r\n private currentColourId: number = NaN;\r\n private currentSizeCode: string = \"\";\r\n\r\n constructor(private colours: { [key: string]: string }, private sizes: { [key: string]: string }, private productPage: IProductPage) {\r\n this.wireUpHandlers();\r\n this.initialiseUi();\r\n }\r\n\r\n private wireUpHandlers(): void {\r\n this.WireUpColourChanged();\r\n this.WireUpSizeChanged();\r\n this.WireUpSizeGroupSelected();\r\n }\r\n\r\n private initialiseUi(): void {\r\n // Find the colour radio button that is checked, if any.\r\n let checkedColourRadio = document.querySelector(\"input[name='colour']:checked\") as HTMLInputElement;\r\n\r\n if (checkedColourRadio?.value) {\r\n this.currentColourId = parseInt(checkedColourRadio.value);\r\n }\r\n\r\n // Find the size radio button that is checked, if any.\r\n let checkedSizeRadio = document.querySelector(\"input[name='size']:checked\") as HTMLInputElement;\r\n if (checkedSizeRadio?.value) {\r\n this.currentSizeCode = checkedSizeRadio.value;\r\n }\r\n\r\n this.stockLegendContainer = document.getElementById('stock-legend-container');\r\n }\r\n\r\n private WireUpSizeChanged() {\r\n let sizeRadios = document.getElementsByName(\"size\");\r\n\r\n for (const sizeRadio of sizeRadios) {\r\n sizeRadio.addEventListener(\"change\", (e) => this.onSizeChanged(e));\r\n }\r\n }\r\n\r\n private WireUpSizeGroupSelected() {\r\n let sizeGroupRadios = document.getElementsByName(\"size-group\");\r\n\r\n for (const sizeGroupRadio of sizeGroupRadios) {\r\n sizeGroupRadio.addEventListener(\"change\", (e) => this.onSizeGroupChanged(e));\r\n }\r\n }\r\n\r\n private WireUpColourChanged() {\r\n let colourRadios = document.getElementsByName(\"colour\");\r\n\r\n for (const colourRadio of colourRadios) {\r\n colourRadio.addEventListener(\"change\", (e) => this.onColourChanged(e));\r\n }\r\n }\r\n\r\n public SelectedSizeAndColour(): ISelectedSizeAndColour {\r\n return {\r\n colourId: this.currentColourId,\r\n size: this.currentSizeCode\r\n };\r\n }\r\n\r\n private onSizeChanged(e: Event): void {\r\n let clickedSize = e.currentTarget;\r\n\r\n let posCode = clickedSize.value;\r\n\r\n if (!posCode) {\r\n IssueLogger.log(\"posCode was null\", \"onSizeChanged\", clickedSize);\r\n return;\r\n }\r\n\r\n this.currentSizeCode = posCode;\r\n this.updateColourStockStatus(this.currentSizeCode);\r\n this.productPage.ProductSelectionChanged(this.SelectedSizeAndColour());\r\n }\r\n\r\n private updateColourStockStatus(selectedSize: string): void {\r\n for (let colourId in this.colours) {\r\n let itemInfo = this.productPage.StockInfoForSizeAndColour(parseInt(colourId), selectedSize);\r\n\r\n if (!itemInfo) {\r\n continue;\r\n }\r\n\r\n let stockText = this.cssClassAndTextForStockStatus(itemInfo.availability);\r\n let colourRadio = document.querySelector(\"input[name='colour'][value='\" + colourId + \"']\") as HTMLInputElement;\r\n let colourLi = colourRadio?.closest(\"li\");\r\n\r\n if (colourLi) {\r\n colourLi.classList.remove(\"instock\", \"discontinued\", \"requestemail\");\r\n colourLi.classList.add(stockText.cssClass);\r\n colourLi.attributes[\"alt\"] = stockText.text;\r\n }\r\n }\r\n this.updateLegendVisibility();\r\n }\r\n\r\n /**\r\n * Shows or hides the 'out of stock' legend depending on if there are out of stock sizes in the UI.\r\n */\r\n private updateLegendVisibility(): void {\r\n let outOfStockSizes = document.querySelectorAll('#size-list > li.requestemail');\r\n if (outOfStockSizes.length > 0) {\r\n this.stockLegendContainer.classList.remove('hidden');\r\n }\r\n else {\r\n this.stockLegendContainer.classList.add('hidden');\r\n }\r\n }\r\n\r\n private cssClassAndTextForStockStatus(status: StockLevel): ISelectedStockStatus {\r\n\r\n if (StockLevel.Stock_InStock === status || StockLevel.Stock_LowStock === status) {\r\n return {\r\n cssClass: 'instock',\r\n text: 'Order Now'\r\n };\r\n }\r\n else if (StockLevel.Stock_Unavailable === status) {\r\n return {\r\n cssClass: 'discontinued',\r\n text: 'Discontinued and Sold Out'\r\n };\r\n }\r\n return {\r\n cssClass: 'requestemail',\r\n text: 'Out of Stock (Request Email Alert)'\r\n };\r\n\r\n }\r\n\r\n private onSizeGroupChanged(e: Event): void {\r\n let csg = e.currentTarget as HTMLElement;\r\n let currentSizeGroup = csg.closest(\"li\").dataset.sizeGroupId;\r\n\r\n //csg.classList.add('active');\r\n\r\n // Change all sizes to the text for the group selected.\r\n let sizeRadios = document.getElementsByName(\"size\");\r\n\r\n for (const sizeRadio of sizeRadios) {\r\n let sizeSpanElement = sizeRadio.nextElementSibling as HTMLElement;\r\n\r\n if (currentSizeGroup === 'EU') {\r\n sizeSpanElement.textContent = sizeRadio.dataset.eu;\r\n }\r\n else if (currentSizeGroup === 'US') {\r\n sizeSpanElement.textContent = sizeRadio.dataset.us;\r\n }\r\n else {\r\n sizeSpanElement.textContent = sizeRadio.dataset.uk;\r\n }\r\n }\r\n }\r\n\r\n private onColourChanged(e: Event): void {\r\n let clickedElement = e.currentTarget;\r\n\r\n this.currentColourId = parseInt(clickedElement.value);\r\n this.productPage.FindAndClickThumbnail(this.currentColourId);\r\n this.LoadSizes();\r\n }\r\n\r\n private LoadSizes(): void {\r\n\r\n for (let sizeCode in this.sizes) {\r\n let itemInfo = this.productPage.StockInfoForSizeAndColour(this.currentColourId, sizeCode);\r\n\r\n if (!itemInfo) {\r\n continue;\r\n }\r\n\r\n let stockText = this.cssClassAndTextForStockStatus(itemInfo.availability);\r\n\r\n let sizeRadio = document.querySelector(\"input[name='size'][value='\" + sizeCode + \"']\") as HTMLInputElement;\r\n\r\n if (sizeRadio) {\r\n let sizeLi = sizeRadio.closest(\"li\");\r\n\r\n sizeLi.classList.remove(\"instock\", \"discontinued\", \"requestemail\");\r\n sizeLi.classList.add(stockText.cssClass);\r\n sizeLi.attributes[\"alt\"] = stockText.text;\r\n }\r\n }\r\n\r\n this.updateLegendVisibility();\r\n\r\n // Tell the product page that it should clear linked products etc as no product is selected.\r\n this.productPage.ProductSelectionChanged(this.SelectedSizeAndColour());\r\n }\r\n}\r\n","import { IAddCartResult } from \"../Product/Interfaces/IAddCartResult.js\";\r\nimport { IEmarsys } from \"../Product/Interfaces/IEmarsys.js\";\r\nimport { ILinkedProductModel } from \"../Product/Interfaces/ILinkedProductModel.js\";\r\n\r\ndeclare const ScarabQueue: IEmarsys;\r\n\r\nexport class BasketCommon {\r\n private localeUrlPrefix = document.body.dataset.localeUrlPrefix;\r\n\r\n public AddToBasket(productId: number, price: number): void {\r\n let postData = { productId: productId, price: null as number | null };\r\n\r\n if (price) { // For gift cards only, the customer sets the price.\r\n postData.price = price;\r\n }\r\n\r\n fetch(this.localeUrlPrefix + \"/ws/add-item\",\r\n {\r\n body: JSON.stringify(postData),\r\n headers: { \"Content-Type\": \"application/json\" },\r\n method: \"POST\",\r\n })\r\n .then(response => {\r\n if (response?.ok || response?.status === 400) {\r\n // 400 errors will contain error messages in the response body.\r\n return response.json();\r\n }\r\n throw new Error(\"Add to basket failed.\");\r\n })\r\n .then((data: IAddCartResult) => {\r\n if (data.errors && data.errors.length > 0) {\r\n this.addTocartFailed(data);\r\n }\r\n else {\r\n this.basketSuccess(data);\r\n }\r\n })\r\n .catch((error: Error) => {\r\n window.IssueLogger.log(error.message, \"addToBasket\", error);\r\n this.addTocartFailed();\r\n });\r\n }\r\n\r\n\r\n public WireUpPriceEditMonitoring(onGiftCardPriceChanged: () => void): void {\r\n // Catch enter, filter non numeric, on key press, if less than 5 or not numeric, disable button.\r\n let giftVoucherPriceElement = document.getElementById(\"gift-voucher-price\");\r\n\r\n if (giftVoucherPriceElement) {\r\n giftVoucherPriceElement.addEventListener(\"keydown\", (e) => this.filterGiftCardInput(e));\r\n giftVoucherPriceElement.addEventListener(\"keyup\", () => onGiftCardPriceChanged());\r\n }\r\n }\r\n\r\n public giftCardValue(): number | null {\r\n let priceElement = document.getElementById('gift-voucher-price') as HTMLInputElement;\r\n let priceAsText = priceElement.value;\r\n\r\n if (isNaN(parseFloat(priceAsText)) || !isFinite(parseFloat(priceAsText))) {\r\n return null;\r\n }\r\n\r\n return parseInt(priceAsText, 10);\r\n }\r\n\r\n private filterGiftCardInput(e: KeyboardEvent): void {\r\n if (e.key === \"Enter\" || e.key === \"Delete\" || e.key === \".\") {\r\n e.preventDefault();\r\n }\r\n }\r\n\r\n private basketSuccess(cartResult: IAddCartResult) {\r\n let dialog = document.getElementById(\"PopupDialog\") as HTMLDivElement;\r\n let itemCountElement = document.querySelector(\".item-count\");\r\n\r\n // Add active to the parent div as it won't have it if this is the first item being added dynamically.\r\n itemCountElement.parentElement.classList.add(\"active\");\r\n itemCountElement.textContent = cartResult.itemCount.toString();\r\n dialog.querySelector(\".QuickAdd_Name\").textContent = cartResult.mostRecentProductName;\r\n\r\n if (cartResult.colour) {\r\n dialog.querySelector(\".QuickAdd_Colour\").textContent = \"Colour: \" + cartResult.colour;\r\n }\r\n else {\r\n dialog.querySelector(\".QuickAdd_Colour\").textContent = \"\";\r\n }\r\n\r\n if (cartResult.size) {\r\n dialog.querySelector(\".QuickAdd_Size\").textContent = \"Size: \" + cartResult.size;\r\n }\r\n else {\r\n dialog.querySelector(\".QuickAdd_Size\").textContent = \"\";\r\n }\r\n\r\n dialog.querySelector(\".QuickAdd_Image\").setAttribute(\"src\", cartResult.imageUrl);\r\n\r\n const bvRatingElement = dialog.querySelector(\".bazaarvoice\");\r\n\r\n if (bvRatingElement) {\r\n // Use setAttr as JS will interpret casing as a dash char.\r\n bvRatingElement.dataset.bvProductid = cartResult.styleColourCode;\r\n bvRatingElement.dataset.bvRedirectUrl = cartResult.styleUrl;\r\n bvRatingElement.dataset.bvShow = \"inline_rating\";\r\n }\r\n\r\n dialog.querySelector(\".item-price\").textContent = cartResult.mostRecentProductPrice;\r\n\r\n let quickAddInner = dialog.querySelector(\".linked-results\") as HTMLDivElement;\r\n\r\n if (cartResult.linkedProducts.length === 0) {\r\n quickAddInner.classList.add(\"hidden\");\r\n }\r\n else {\r\n quickAddInner.classList.remove(\"hidden\");\r\n }\r\n quickAddInner.innerHTML = \"

Would you also like to add these recommended accessories?

\";\r\n\r\n for (let i = 0; i < cartResult.linkedProducts.length; i++) {\r\n let html = this.createLinkedProductHtml(cartResult.linkedProducts[i]);\r\n\r\n quickAddInner.insertAdjacentElement(\"beforeend\", html);\r\n }\r\n\r\n window.Modal.OpenModal(dialog, () => { });\r\n\r\n this.pushToEmarsys(cartResult);\r\n this.pushToGoogle(cartResult);\r\n }\r\n\r\n private pushToEmarsys(cartResult: IAddCartResult): void {\r\n\r\n if (cartResult.errors && cartResult.errors.length > 0) {\r\n return;\r\n }\r\n\r\n ScarabQueue.push(['cart', [\r\n { item: cartResult.styleCode, price: cartResult.priceGbp, quantity: 1 }\r\n ]]);\r\n\r\n ScarabQueue.push(['go']);\r\n }\r\n\r\n private pushToGoogle(cartResult: IAddCartResult): void {\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n \"event\": \"add_to_cart\",\r\n \"ecommerce\": {\r\n \"currency\": document.body.dataset.currency,\r\n \"items\": [\r\n {\r\n item_id: cartResult.productId,\r\n item_poscode: cartResult.posCode,\r\n item_stylecolour: cartResult.styleColourCode,\r\n item_name: cartResult.mostRecentProductName,\r\n item_brand: cartResult.brandName,\r\n item_category: cartResult.categoryLevel1,\r\n item_category2: cartResult.categoryLevel2,\r\n item_category3: cartResult.categoryLevel3,\r\n item_category4: cartResult.categoryLevel4,\r\n \"price\": cartResult.price,\r\n \"quantity\": 1\r\n }\r\n ]\r\n }\r\n });\r\n }\r\n\r\n private createLinkedProductHtml(product: ILinkedProductModel): HTMLDivElement {\r\n const para = document.createElement(\"p\");\r\n para.classList.add(\"QuickAdd_Info\");\r\n\r\n const productNameLink = document.createElement(\"a\");\r\n productNameLink.setAttribute(\"href\", product.styleUrl);\r\n productNameLink.classList.add(\"QuickAdd_Name\");\r\n productNameLink.textContent = product.name;\r\n para.appendChild(productNameLink);\r\n\r\n const descriptionSpan = document.createElement(\"span\");\r\n descriptionSpan.textContent = product.description;\r\n para.appendChild(descriptionSpan);\r\n\r\n const spanPrice = document.createElement(\"span\");\r\n spanPrice.classList.add(\"QuickAdd_Price\");\r\n spanPrice.textContent = product.formattedPrice;\r\n\r\n const control = document.createElement(\"div\");\r\n control.classList.add(\"control-box\");\r\n\r\n const basketAddLink = document.createElement(\"a\");\r\n basketAddLink.classList.add(\"btn\");\r\n basketAddLink.textContent = \"Yes please\";\r\n basketAddLink.addEventListener(\"click\", (e) => {\r\n e.preventDefault();\r\n this.AddToBasket(product.productId, null);\r\n });\r\n\r\n control.appendChild(spanPrice);\r\n control.appendChild(basketAddLink);\r\n\r\n const relatedImage = document.createElement(\"img\");\r\n relatedImage.setAttribute(\"src\", product.imageUrl);\r\n relatedImage.setAttribute(\"height\", \"64\");\r\n relatedImage.setAttribute(\"width\", \"64\");\r\n\r\n const linkBox = document.createElement(\"div\");\r\n linkBox.classList.add(\"linked-result\");\r\n linkBox.appendChild(relatedImage);\r\n linkBox.appendChild(para);\r\n linkBox.appendChild(control);\r\n\r\n return linkBox;\r\n }\r\n\r\n private addTocartFailed(data?: IAddCartResult): void {\r\n let modal = document.getElementById(\"product-add-error-modal\");\r\n let errorList = modal.querySelector(\".error-list\");\r\n\r\n if (data?.errors && data.errors.length > 0) {\r\n errorList.innerHTML = \"\";\r\n\r\n data.errors.forEach((error) => {\r\n let li = document.createElement(\"li\");\r\n li.textContent = error;\r\n errorList.appendChild(li);\r\n });\r\n }\r\n else {\r\n errorList.innerHTML = \"
  • This might be due to a temporary network problem, please try again soon.
  • \";\r\n }\r\n\r\n window.Modal.OpenModal(modal, () => { });\r\n }\r\n}\r\n","import { IProductPageStockModel } from \"../Product/Interfaces/IProductPageStock\";\r\nimport { ProductClass } from \"../Product/ProductClass\";\r\nimport { StockLevel } from \"../Product/StockLevel\";\r\nimport { BasketCommon } from \"./basketCommon\";\r\n\r\ndeclare let ga: Function;\r\nexport interface IStyleDetail {\r\n availability: HashTable;\r\n brandName: string;\r\n brandNameImageUrl: string;\r\n code: string;\r\n colours: ISelectedColourInfo[];\r\n description: string;\r\n formattedPrice: string;\r\n images: IQuickAddImage[];\r\n lifestyleShortDescription: string;\r\n lifestyleLongDescription: string;\r\n name: string;\r\n posCodeToIdLookup: HashTable;\r\n pricing: IProductPriceViewModel;\r\n productClass: ProductClass;\r\n productLink: string;\r\n productStyleId: number;\r\n productStylePosCode: string;\r\n sizes: HashTable;\r\n splitColourPricing: boolean;\r\n styleColourCode: string;\r\n}\r\n\r\nexport interface IProductPriceViewModel {\r\n priceWithoutVat: string;\r\n}\r\n\r\nexport interface ISelectedColourInfo {\r\n colourId: number;\r\n colourPosCode: string;\r\n description: string;\r\n formattedPrice: string;\r\n}\r\n\r\ninterface HashTable {\r\n [key: string]: T;\r\n}\r\n\r\ninterface IQuickAddImage {\r\n colour: string;\r\n colourId?: number;\r\n imageUrl: string;\r\n}\r\n\r\nexport class QuickAdd {\r\n\r\n private readonly basketCommon: BasketCommon = new BasketCommon();\r\n private quickAddElementId = 'QuickAdd_Dialog';\r\n private quickAddModalElement: HTMLDivElement;\r\n private currentStyleDetail: IStyleDetail;\r\n private localeUrlPrefix = document.body.dataset.localeUrlPrefix;\r\n\r\n constructor() {\r\n if (!document.getElementById(this.quickAddElementId)) {\r\n return; // Do not initialise if popup for QA is not there.\r\n }\r\n this.associateQuickAddLinks();\r\n }\r\n\r\n private onQuickAddClicked(e: MouseEvent): boolean {\r\n e.preventDefault();\r\n\r\n let element = e.target as HTMLElement;\r\n let styleId = parseInt(element.dataset.id);\r\n\r\n this.showQuickAdd(styleId);\r\n\r\n return false;\r\n }\r\n\r\n private showQuickAdd(styleId: number): void {\r\n this.quickAddModalElement = this.createQuickAdd(styleId);\r\n this.requestQuickAddData(styleId);\r\n }\r\n\r\n public showTheLook(childStyleId: number): void {\r\n this.quickAddModalElement = this.createQuickAdd(childStyleId);\r\n this.requestQuickAddData(childStyleId);\r\n }\r\n\r\n private createQuickAdd(styleId: number): HTMLDivElement {\r\n\r\n if (this.quickAddModalElement) {\r\n return;\r\n }\r\n\r\n this.quickAddModalElement = document.getElementById(this.quickAddElementId) as HTMLDivElement;\r\n\r\n this.addListener(\".QuickAdd_Sizes\", \"change\", () => this.quickAddSizeChanged());\r\n this.addListener(\".QuickAdd_Colours\", \"change\", () => this.quickAddColourChanged());\r\n this.addListener(\"#QuickAddToBasket\", \"click\", () => this.onQuickAddToBasketClicked());\r\n\r\n this.logQuickViewOperation('click');\r\n this.basketCommon.WireUpPriceEditMonitoring(() => this.onGiftCardPriceChanged());\r\n\r\n return this.quickAddModalElement;\r\n }\r\n\r\n private addListener(selector: string, eventName: string, callback: () => void) {\r\n let element = this.quickAddModalElement.querySelector(selector);\r\n\r\n if (element === null) {\r\n return;\r\n }\r\n\r\n element.addEventListener(eventName, () => { callback(); });\r\n }\r\n\r\n private associateQuickAddLinks(): void {\r\n // Need to use body as the target as the links are dynamically added.\r\n document.querySelector(\"body\").addEventListener(\"click\", (e) => {\r\n let element = e.target as HTMLElement;\r\n\r\n if (element.classList.contains(\"QuickAdd_Show\")) {\r\n this.onQuickAddClicked(e);\r\n }\r\n });\r\n\r\n }\r\n\r\n private requestQuickAddData(styleId: number): void {\r\n\r\n fetch(`${this.localeUrlPrefix}/ws/style-info/${styleId}`, { method: \"POST\" })\r\n .then(response => {\r\n if (!response || !response.ok) {\r\n throw new Error(\"Request quick add data failed.\");\r\n }\r\n return response.json();\r\n })\r\n .then((data: IStyleDetail) => {\r\n this.requestQuickAddDataComplete(data);\r\n })\r\n .catch((error: Error) => {\r\n window.IssueLogger.log(error.message, \"QuickAddRequest\", error);\r\n });\r\n }\r\n\r\n private requestQuickAddDataComplete(data: IStyleDetail): void {\r\n this.currentStyleDetail = data;\r\n this.quickAddModalElement.querySelector(\".product-name\").textContent = data.name;\r\n this.quickAddModalElement.querySelector(\".QuickAdd_ProductLink\").setAttribute('href', data.productLink);\r\n\r\n let lifestyle = this.quickAddModalElement.querySelector(\".sub-name\");\r\n\r\n if (data.lifestyleShortDescription !== \"\" || data.lifestyleLongDescription !== \"\") {\r\n lifestyle.textContent = data.lifestyleShortDescription;\r\n lifestyle.setAttribute(\"data-balloon\", data.lifestyleLongDescription); // Setting via data won't work, has to be attribute.\r\n\r\n if (data.lifestyleLongDescription !== '') {\r\n lifestyle.classList.add(\"data-balloon\");\r\n }\r\n else {\r\n lifestyle.classList.remove(\"data-balloon\");\r\n }\r\n lifestyle.classList.remove(\"hidden\");\r\n }\r\n else {\r\n lifestyle.classList.add(\"hidden\");\r\n }\r\n\r\n let supplierImageElement = this.quickAddModalElement.querySelector(\"#SupplierImage\");\r\n supplierImageElement.setAttribute('src', data.brandNameImageUrl);\r\n supplierImageElement.setAttribute('alt', data.brandName);\r\n\r\n let productCodeElement = this.quickAddModalElement.querySelector(\"#product-code\");\r\n productCodeElement.textContent = \"Product Code: \" + data.code;\r\n\r\n let priceSpanElement = this.quickAddModalElement.querySelector(\".item-price\");\r\n let sizeAndColourContainer = this.quickAddModalElement.querySelector(\"#size-and-colour-container\");\r\n let giftcardContainer = this.quickAddModalElement.querySelector(\"#giftcard-amount-container\");\r\n\r\n if (data.productClass === ProductClass.GiftCard) {\r\n giftcardContainer.classList.remove(\"hidden\");\r\n sizeAndColourContainer.classList.add(\"hidden\");\r\n priceSpanElement.classList.add(\"hidden\");\r\n }\r\n else {\r\n giftcardContainer.classList.add(\"hidden\");\r\n sizeAndColourContainer.classList.remove(\"hidden\");\r\n priceSpanElement.classList.remove(\"hidden\");\r\n }\r\n\r\n this.PopulateThumbnails(data.images);\r\n this.populateQuickAddSizes(data);\r\n\r\n const bvRatingElement = this.quickAddModalElement.querySelector(\".bazaarvoice\");\r\n\r\n if (bvRatingElement) {\r\n bvRatingElement.dataset.bvProductid = data.styleColourCode;\r\n bvRatingElement.dataset.bvRedirectUrl = data.productLink;\r\n bvRatingElement.dataset.bvShow = \"inline_rating\";\r\n }\r\n\r\n this.setQuickAddButtonState();\r\n\r\n this.updateSelectedColourDependencies();\r\n\r\n window.Modal.OpenModal(this.quickAddModalElement, () => { });\r\n }\r\n\r\n private updatePriceWithoutVat(text: string): void {\r\n let element = this.quickAddModalElement.querySelector(\".exvatmessage\");\r\n\r\n if (text) {\r\n let innerPriceElement = this.quickAddModalElement.querySelector(\"#PriceWithoutVAT\");\r\n innerPriceElement.innerHTML = text;\r\n element.classList.remove(\"hidden\");\r\n }\r\n else {\r\n element.classList.add(\"hidden\");\r\n }\r\n }\r\n\r\n private setElementTextOrHide(element: HTMLSpanElement, text: string): void {\r\n\r\n element.innerHTML = text;\r\n\r\n if (text === '') {\r\n element.classList.add(\"hidden\");\r\n }\r\n else {\r\n element.classList.remove(\"hidden\");\r\n }\r\n }\r\n\r\n private PopulateThumbnails(images: IQuickAddImage[]): void {\r\n\r\n if (MagicScroll.running('quick-view-images') === true) {\r\n MagicScroll.stop('quick-view-images');\r\n }\r\n\r\n let container = this.quickAddModalElement.querySelector(\".product-list-new\");\r\n container.innerHTML = '';\r\n\r\n for (const image in images) {\r\n const imageElement = this.CreateScrollImageElement(images[image]);\r\n\r\n container.append(imageElement);\r\n }\r\n container.classList.add(\"MagicScroll\");\r\n MagicScroll.refresh(\"quick-view-images\");\r\n MagicScroll.start(\"quick-view-images\");\r\n }\r\n\r\n private CreateScrollImageElement(image: IQuickAddImage): HTMLElement {\r\n\r\n let productImg = document.createElement(\"img\");\r\n productImg.src = image.imageUrl;\r\n productImg.alt = image.colour;\r\n\r\n return productImg;\r\n }\r\n\r\n private populateQuickAddSizes(stock: IStyleDetail): void {\r\n let selectListElem = this.quickAddModalElement.querySelector(\".QuickAdd_Sizes\");\r\n\r\n // Clear all existing options from the select list.\r\n selectListElem.options.length = 0;\r\n\r\n // Create and append the default \"Select Size\" option.\r\n let defaultOption = document.createElement(\"option\");\r\n defaultOption.value = \"\";\r\n defaultOption.textContent = \"Select Size\";\r\n selectListElem.appendChild(defaultOption);\r\n\r\n // Iterate over the sizes and append them as options\r\n let sizes = stock.sizes;\r\n for (let sizePosCode in sizes) {\r\n let option = document.createElement(\"option\");\r\n option.value = sizePosCode;\r\n option.textContent = sizes[sizePosCode];\r\n selectListElem.appendChild(option);\r\n }\r\n\r\n this.resetQuickAddColours(\"(Colour) Select Size First\");\r\n this.setQuickAddButtonState();\r\n }\r\n\r\n private resetQuickAddColours(notSelectedText: string): HTMLSelectElement {\r\n let selectListElem = this.quickAddModalElement.querySelector(\".QuickAdd_Colours\");\r\n\r\n selectListElem.options.length = 0;\r\n let option = document.createElement('option');\r\n option.innerHTML = notSelectedText;\r\n selectListElem.options.add(option);\r\n\r\n return selectListElem;\r\n }\r\n\r\n private selectedColourPosCode(): string {\r\n let colourDropdown = this.quickAddModalElement.querySelector(\".QuickAdd_Colours\");\r\n let selectedColourPosCode = colourDropdown.selectedOptions.length === 1 ? colourDropdown.selectedOptions[0].value : \"\";\r\n\r\n return selectedColourPosCode;\r\n }\r\n\r\n private selectedSizePosCode(): string {\r\n let sizeDropdown = this.quickAddModalElement.querySelector(\".QuickAdd_Sizes\");\r\n let selectedSizePosCode = sizeDropdown.selectedOptions.length === 1 ? sizeDropdown.selectedOptions[0].value : \"\";\r\n\r\n return selectedSizePosCode;\r\n }\r\n\r\n private populateQuickAddColours(): void {\r\n let selectList = this.resetQuickAddColours(\"Select Colour\");\r\n let stock = this.currentStyleDetail;\r\n let selectedSizePosCode = this.selectedSizePosCode();\r\n\r\n if (selectedSizePosCode === \"\") {\r\n // Reset the state of the text stock indicators.\r\n this.updateSelectedColourDependencies();\r\n return;\r\n }\r\n\r\n for (const colour of stock.colours) {\r\n let posCode = stock.productStylePosCode + colour.colourPosCode + selectedSizePosCode;\r\n let stockText;\r\n let cssClass = '';\r\n\r\n switch (stock.availability[posCode]) {\r\n case StockLevel.Stock_InStock:\r\n case StockLevel.Stock_LowStock:\r\n stockText = 'Order Now';\r\n cssClass = 'instock';\r\n break;\r\n case StockLevel.Stock_Enquiries:\r\n stockText = 'Out of Stock (Request Email Alert)';\r\n cssClass = 'requestemail';\r\n break;\r\n default:\r\n stockText = 'Discontinued and Sold Out';\r\n cssClass = 'discontinued';\r\n }\r\n\r\n let colourOptionText = colour.description + \" - \" + stockText;\r\n\r\n if (stock.splitColourPricing) {\r\n if (colour.formattedPrice !== null && colour.formattedPrice !== '') {\r\n colourOptionText += \" (\" + colour.formattedPrice + \")\";\r\n }\r\n else {\r\n colourOptionText += \" (\" + stock.formattedPrice + \")\";\r\n }\r\n }\r\n\r\n let option = document.createElement('option');\r\n option.className = cssClass;\r\n option.value = colour.colourPosCode;\r\n option.innerHTML = colourOptionText;\r\n selectList.options.add(option);\r\n }\r\n\r\n let colourCount = selectList.options.length;\r\n if (colourCount == 2) {\r\n selectList.selectedIndex = 1;\r\n selectList.dispatchEvent(new Event(\"change\"));\r\n }\r\n\r\n this.setQuickAddButtonState();\r\n }\r\n\r\n private quickAddSizeChanged(): void {\r\n this.populateQuickAddColours();\r\n }\r\n\r\n private onGiftCardPriceChanged(): void {\r\n this.setQuickAddButtonState();\r\n }\r\n\r\n private onQuickAddToBasketClicked(): void {\r\n let stockInfo = this.getQuickAddSelectedStockInfo();\r\n\r\n this.logQuickViewOperation('Add To Basket');\r\n switch (stockInfo.availability) {\r\n case StockLevel.Stock_InStock:\r\n case StockLevel.Stock_LowStock:\r\n let price: number = null;\r\n\r\n if (stockInfo.productClass === ProductClass.GiftCard) {\r\n price = this.basketCommon.giftCardValue();\r\n\r\n if (price === null) {\r\n alert('Please enter a gift card value of at least £5.');\r\n return;\r\n }\r\n }\r\n else {\r\n price = stockInfo.priceGbp;\r\n }\r\n this.basketCommon.AddToBasket(stockInfo.productId, price);\r\n break;\r\n case StockLevel.Stock_Enquiries:\r\n case StockLevel.Stock_Unavailable:\r\n window.location.href = \"/out-of-stock?ProductId=\" + stockInfo.productId;\r\n break;\r\n default:\r\n alert('You need to select a size and colour combination first.');\r\n }\r\n }\r\n\r\n private logQuickViewOperation(eventAction): void {\r\n if (typeof ga != \"undefined\") {\r\n ga('send', 'event', 'QuickView', eventAction);\r\n }\r\n }\r\n\r\n public addToWishList(productId: number, clickedButton: HTMLButtonElement): void {\r\n\r\n if (clickedButton.dataset.fetching) {\r\n // Not returned from a previous add to wishlist, ignore this click for now.\r\n return;\r\n }\r\n clickedButton.dataset.fetching = \"true\";\r\n\r\n let postData = { productId: productId };\r\n\r\n fetch(\"/add-to-wishlist\",\r\n {\r\n body: JSON.stringify(postData),\r\n headers: { \"Content-Type\": \"application/json\" },\r\n method: \"POST\",\r\n })\r\n .then(response => {\r\n // Remove flag that prevents double posting.\r\n delete clickedButton.dataset.fetching;\r\n\r\n if (!response || !response.ok) {\r\n if (response.status === 401) {\r\n this.showWishlistLoginRequired();\r\n return;\r\n }\r\n else {\r\n throw new Error(\"Add to wishlist failed.\");\r\n }\r\n }\r\n this.showAddToWishListSuccess();\r\n })\r\n .catch((error: Error) => {\r\n window.IssueLogger.log(error.message, \"addToWishList\", error);\r\n this.showAddToWishListFailed();\r\n\r\n // Remove flag that prevents double posting.\r\n delete clickedButton.dataset.fetching;\r\n });\r\n }\r\n\r\n private showAddToWishListSuccess(): void {\r\n let dialog = document.getElementById(\"wishlist-success\") as HTMLDivElement;\r\n\r\n window.Modal.OpenModal(dialog, () => { });\r\n }\r\n\r\n private showWishlistLoginRequired(): void {\r\n let dialog = document.getElementById(\"wishlist-login\") as HTMLDivElement;\r\n\r\n window.Modal.OpenModal(dialog, () => { });\r\n }\r\n\r\n private showAddToWishListFailed(): void {\r\n let dialog = document.getElementById(\"wishlist-error-modal\") as HTMLDivElement;\r\n\r\n window.Modal.OpenModal(dialog, () => { });\r\n }\r\n\r\n private quickAddColourChanged(): void {\r\n this.updateSelectedColourDependencies()\r\n }\r\n\r\n private updateSelectedColourDependencies(): void {\r\n let data = this.currentStyleDetail;\r\n\r\n this.setQuickAddButtonState();\r\n\r\n let stockInfo = this.getQuickAddSelectedStockInfo();\r\n let selectedColour = this.getQuickAddSelectedColour();\r\n\r\n // Use style price by default unless colour is selected and the colour has a price.\r\n let exVatPrice = data.pricing.priceWithoutVat;\r\n let price = data.formattedPrice;\r\n if (selectedColour && stockInfo.price) {\r\n exVatPrice = stockInfo.priceExVat;\r\n price = stockInfo.price;\r\n\r\n }\r\n this.updatePriceWithoutVat(exVatPrice);\r\n this.quickAddModalElement.querySelector('.item-price').innerHTML = price;\r\n\r\n let stockMessageElement = this.quickAddModalElement.querySelector(\".stock-message\");\r\n let zoomCaptionElement = this.quickAddModalElement.querySelector(\"#quickViewZoomCaption\");\r\n\r\n if (selectedColour === null) {\r\n stockMessageElement.textContent = \"Select size and colour above to view live stock availability\";\r\n zoomCaptionElement.classList.add(\"hidden\");\r\n }\r\n else if (stockInfo.stockLevelMessage) {\r\n stockMessageElement.textContent = stockInfo.stockLevelMessage;\r\n zoomCaptionElement.textContent = selectedColour.description;\r\n zoomCaptionElement.classList.remove(\"hidden\");\r\n } else {\r\n stockMessageElement.textContent = \"Discontinued and Sold Out\";\r\n zoomCaptionElement.textContent = selectedColour.description;\r\n zoomCaptionElement.classList.remove(\"hidden\");\r\n }\r\n\r\n let percentageOffElement = this.quickAddModalElement.querySelector('.percentage-off');\r\n this.setElementTextOrHide(percentageOffElement, stockInfo.percentageSaving);\r\n }\r\n\r\n private getQuickAddSelectedStockInfo(): IProductPageStockModel {\r\n\r\n if (this.currentStyleDetail.productClass === ProductClass.GiftCard) {\r\n if (this.basketCommon.giftCardValue() === null) {\r\n return this.NotAvailable(ProductClass.GiftCard);\r\n }\r\n\r\n let firstProductPosCode = Object.keys(this.currentStyleDetail.posCodeToIdLookup)[0];\r\n return this.CreateStockInfo(ProductClass.GiftCard, this.currentStyleDetail.posCodeToIdLookup[firstProductPosCode]);\r\n }\r\n\r\n let selectedSizePosCode = this.selectedSizePosCode();\r\n let selectedColourPosCode = this.selectedColourPosCode();\r\n let posCode = this.currentStyleDetail.productStylePosCode + selectedColourPosCode + selectedSizePosCode;\r\n\r\n let stockInfo = this.currentStyleDetail.posCodeToIdLookup[posCode];\r\n\r\n if (stockInfo) {\r\n return this.CreateStockInfo(ProductClass.PhysicalProduct, stockInfo);\r\n }\r\n\r\n return this.NotAvailable(ProductClass.PhysicalProduct);\r\n }\r\n\r\n private CreateStockInfo(productClass: ProductClass, stockData: IProductPageStockModel): IProductPageStockModel {\r\n stockData[\"ProductClass\"] = productClass;\r\n return stockData;\r\n }\r\n\r\n private NotAvailable(productClass: ProductClass): IProductPageStockModel {\r\n return {\r\n availability: StockLevel.Stock_NotSelected,\r\n percentageSaving: '',\r\n posCode: '',\r\n priceHeading: '',\r\n price: \"\",\r\n priceExVat: \"\",\r\n priceGbp: 0,\r\n productClass: productClass,\r\n productId: 0,\r\n stockLevelMessage: '',\r\n };\r\n }\r\n\r\n private getQuickAddSelectedColour(): ISelectedColourInfo {\r\n let stock = this.currentStyleDetail;\r\n let selectedColourPos = this.selectedColourPosCode();\r\n\r\n for (let i in stock.colours) {\r\n let col = stock.colours[i];\r\n\r\n if (col.colourPosCode == selectedColourPos) {\r\n return col;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private setQuickAddButtonState(): void {\r\n let buttonClass;\r\n let buttonText;\r\n let buttonDisabled = false;\r\n let buttonRef = this.quickAddModalElement.querySelector(\"#QuickAddToBasket\");\r\n let stockInfo = this.getQuickAddSelectedStockInfo();\r\n\r\n switch (stockInfo.availability) {\r\n case StockLevel.Stock_InStock:\r\n case StockLevel.Stock_LowStock:\r\n buttonClass = \"btn btn-primary on\";\r\n buttonText = \"Add to Basket\";\r\n break;\r\n case StockLevel.Stock_Enquiries:\r\n case StockLevel.Stock_Unavailable:\r\n buttonClass = \"btn btn-primary outofstock notice\";\r\n buttonText = \"Email me when in stock\";\r\n break;\r\n default:\r\n buttonClass = \"btn btn-primary off\";\r\n buttonText = 'Add to Basket';\r\n buttonDisabled = true;\r\n }\r\n\r\n // Find the last element in the button which is a text node.\r\n let buttonTextNode = buttonRef.childNodes[buttonRef.childNodes.length - 1];\r\n buttonTextNode.nodeValue = buttonText;\r\n\r\n buttonRef.setAttribute('class', buttonClass);\r\n buttonRef.disabled = buttonDisabled;\r\n }\r\n}\r\n","import { QuickAdd } from \"../Main/QuickAdd\";\r\nimport { BasketCommon } from \"../Main/basketCommon\";\r\nimport { ILinkedProductModel } from \"./Interfaces/ILinkedProductModel\";\r\nimport { IProductRecommendations } from \"./Interfaces/IProductRecommendations\";\r\nimport { ClickableSelector } from \"./SelectorUI/ClickableSelector\";\r\nimport { IColourSizeSelector } from \"./SelectorUI/IColourSizeSelector\";\r\nimport { IProductPageStockModel } from \"./Interfaces/IProductPageStock\";\r\nimport { IProductPage } from \"./Interfaces/IProductPage\";\r\nimport { StockLevel } from \"./StockLevel\";\r\nimport { ProductClass } from \"./ProductClass\";\r\n\r\n// Functions and vars output on the page and from non TypeScript libs.\r\ndeclare var stockInfo: { [key: string]: IProductPageStockModel };\r\ndeclare var Colours: { [key: string]: string };\r\ndeclare var Sizes: { [key: string]: string };\r\n\r\ninterface ISlideCaptionAndIndex {\r\n caption: string;\r\n index: number;\r\n isNewColour: boolean;\r\n isVideo: boolean;\r\n}\r\n\r\nexport class Product implements IProductPage {\r\n private currentThumbnailIndex: number = 0;\r\n private deliveryTimerHander: number = 0;\r\n private productClass: ProductClass = ProductClass.PhysicalProduct;\r\n private styleId: number = 0;\r\n private priceElement: HTMLElement;\r\n private priceExVatElement: HTMLElement;\r\n private percentageOffElement: HTMLElement;\r\n private selectorUi: IColourSizeSelector;\r\n private lastRequestTime: number;\r\n private localeUrlPrefix = document.body.dataset.localeUrlPrefix;\r\n\r\n private readonly addToBasketButton = document.getElementById(\"AddToBasket\") as HTMLButtonElement;\r\n private readonly addToWishlistButton = document.getElementById(\"AddToWishListButton\") as HTMLButtonElement;\r\n private readonly basketCommon: BasketCommon = new BasketCommon();\r\n // Optional on some tenants, always check for existence before use.\r\n private readonly checkStoreStockElement = document.getElementById(\"check-store-stock\");\r\n\r\n private readonly desktopZoom1Id = \"productzoom-1\";\r\n private readonly desktopZoom2Id = \"productzoom-2\";\r\n private readonly desktopVideoId = \"video-left\";\r\n private readonly mobileZoomId = \"productmobilezoom\";\r\n private readonly mobileVideoId = \"videomobilezoom\";\r\n\r\n private readonly desktopTheLookContainerId = \"TheLookResults\";\r\n private readonly mobileTheLookContainerId = \"TheLookMobile\";\r\n private readonly desktopTheLookMagicScrollId = \"the-look-ms\";\r\n private readonly mobileTheLookMagicScrollId = \"the-look-ms-mobile\";\r\n\r\n private readonly magicZoomThumbSelectedClass = \"mz-thumb-selected\";\r\n public readonly quickAdd: QuickAdd;\r\n\r\n public static Init(): Product {\r\n return new Product();\r\n }\r\n\r\n constructor() {\r\n\r\n this.configureMagicZoom();\r\n\r\n this.priceElement = document.getElementById('item-price');\r\n this.priceExVatElement = document.getElementById('PriceWithoutVAT');\r\n this.percentageOffElement = document.getElementById('PercentageOff');\r\n this.productClass = ProductClass.PhysicalProduct;\r\n\r\n let styleIdElement = document.getElementById(\"StyleId\") as HTMLInputElement;\r\n if (styleIdElement) { // Styleid and product class elements are not output if no stock.\r\n this.styleId = parseInt(styleIdElement.value);\r\n this.productClass = parseInt((document.getElementById(\"ProductClass\")).value);\r\n\r\n if (this.productClass === ProductClass.GiftCard) {\r\n this.basketCommon.WireUpPriceEditMonitoring(() => this.onGiftCardPriceChanged());\r\n }\r\n }\r\n\r\n this.UpdateDelivery(this.selectedProductId, false);\r\n\r\n if (this.slideCount() <= 1) {\r\n this.HideDesktopImagePaging();\r\n }\r\n\r\n this.selectorUi = new ClickableSelector(Colours, Sizes, this);\r\n\r\n this.WireUpImagePaging();\r\n this.WireUpThumbnailClicks();\r\n this.wireUpStoreStock();\r\n this.WireUpBazaar();\r\n this.WireUpAddToBasket();\r\n this.WireUpAddToWishlist();\r\n this.WireUpStoreStockCheck();\r\n this.quickAdd = new QuickAdd();\r\n }\r\n\r\n private configureMagicZoom(): void {\r\n\r\n (window as any).mzOptions = {\r\n onZoomReady: function () {\r\n },\r\n onUpdate: (zoom_id, previous_image_selector, new_image_selector) => {\r\n // We have two MagicScroll / MagicZooms (left and right) and this ensures the 2nd tracks the first.\r\n this.SetCurrentThumbIndex(zoom_id, new_image_selector);\r\n },\r\n onZoomIn: function () {\r\n },\r\n onZoomOut: function () {\r\n }\r\n };\r\n }\r\n\r\n public SetCurrentThumbIndex(zoom_id: string, new_image_selector: HTMLAnchorElement): void {\r\n if (zoom_id === this.desktopZoom1Id) {\r\n let slideIndex = parseInt(new_image_selector.dataset[\"imageIndex\"]);\r\n this.currentThumbnailIndex = slideIndex;\r\n this.updateZoomWindows();\r\n }\r\n else if (zoom_id === this.mobileZoomId) {\r\n let slideInfo = this.slideInfoFromLink(new_image_selector);\r\n this.updateZoomCaption(\"3\", slideInfo.caption);\r\n }\r\n }\r\n\r\n private HideDesktopImagePaging() {\r\n let previousImage = document.getElementById(\"c-previous-image\");\r\n let nextImage = document.getElementById(\"c-next-image\");\r\n\r\n if (previousImage) {\r\n previousImage.classList.add(\"hidden\");\r\n }\r\n if (nextImage) {\r\n nextImage.classList.add(\"hidden\");\r\n }\r\n }\r\n\r\n private WireUpBazaar(): void {\r\n // bvCallback must be used when interacting with BV via JavaScript and using the `async` attribute. \r\n (window).bvCallback = (BV) => this.bazaarCallback(BV);\r\n }\r\n\r\n private bazaarCallback(BV: any): void {\r\n\r\n if (!BV) {\r\n return;\r\n }\r\n\r\n if (BV.reviews) {\r\n // Register a function to be called when a BV feature needs to display the R&R element, such as Rating Summary's stars\r\n BV.reviews.on('show', () => {\r\n let tabLink = document.querySelector(\"BazaarReviewsTab\");\r\n tabLink.click();\r\n });\r\n }\r\n\r\n if (BV.questions) {\r\n // Register a function to be called when a BV feature needs to \r\n // display the Q&A element, such as when clicking on the number of questions link\r\n BV.questions.on('show', function () {\r\n let tabLink = document.getElementById(\"BazaarQAndATab\");\r\n tabLink.click();\r\n });\r\n }\r\n }\r\n\r\n private WireUpAddToBasket(): void {\r\n this.addToBasketButton.addEventListener(\"click\", (e) => { this.onAddToBasketClicked(e); return false; });\r\n }\r\n\r\n private WireUpStoreStockCheck(): void {\r\n if (this.checkStoreStockElement) {\r\n this.checkStoreStockElement.addEventListener(\"click\", (e) => { this.onStoreStockCheckClicked(e); return false; });\r\n }\r\n }\r\n\r\n private WireUpAddToWishlist(): void {\r\n this.addToWishlistButton.addEventListener(\"click\", (e) => { this.onAddToWishlistClicked(e); return false; });\r\n }\r\n\r\n private onGiftCardPriceChanged(): void {\r\n let price = this.basketCommon.giftCardValue();\r\n\r\n if (price == null) {\r\n this.SetButtonState(StockLevel.Stock_NotSelected);\r\n return;\r\n }\r\n\r\n this.SetButtonState(StockLevel.Stock_InStock);\r\n }\r\n\r\n private WireUpThumbnailClicks(): void {\r\n // zoom-1-thumb is the class applied to all the thumbnails (video and static images) that show on the left hand pane for desktop (not mobile).\r\n let elements = >document.getElementsByClassName(\"zoom-1-thumb\");\r\n\r\n for (const element of elements) {\r\n element.addEventListener(\"click\", (e) => this.onDesktopMagicScrollThumbClicked(e));\r\n }\r\n }\r\n\r\n private onDesktopMagicScrollThumbClicked(e: MouseEvent): boolean {\r\n e.preventDefault();\r\n let thumbClickedElement = e.target;\r\n\r\n this.setPaneVisibility(thumbClickedElement, this.desktopZoom1Id, this.desktopVideoId);\r\n this.triggerSlideTwoUpdate(thumbClickedElement);\r\n\r\n return false;\r\n }\r\n\r\n private setPaneVisibility(thumbClickedElement: HTMLAnchorElement, imageZoomId: string, videoDivId: string): void {\r\n let isVideo = thumbClickedElement.dataset[\"isVideo\"];\r\n let imageZoom = document.getElementById(imageZoomId);\r\n let videoDiv = document.getElementById(videoDivId);\r\n\r\n if (isVideo && isVideo.toLowerCase() === \"true\") {\r\n let mediaUrl = thumbClickedElement.dataset[\"image\"];\r\n this.recreateVideo(videoDiv, mediaUrl);\r\n\r\n // Remove all of the 'selected' CSS classes from the MagicScrolls as MagicX does not handle video, we have to do it.\r\n let allSelectedThumbs = >document.getElementsByClassName(this.magicZoomThumbSelectedClass);\r\n Product.removeClassFromElements(allSelectedThumbs, this.magicZoomThumbSelectedClass);\r\n // Mark our video anchor as active / selected.\r\n thumbClickedElement.classList.add(this.magicZoomThumbSelectedClass);\r\n\r\n if (imageZoom) {\r\n imageZoom.classList.add(\"hidden\");\r\n }\r\n if (videoDiv) {\r\n videoDiv.classList.remove(\"hidden\");\r\n }\r\n\r\n return;\r\n }\r\n\r\n // Again, MagicX does not handle video so we need to deselect the active element on the videos when an image is clicked.\r\n let selectedNodes = document.querySelectorAll(`a.${this.magicZoomThumbSelectedClass}[data-is-video='True']`) as any;\r\n let selectedVideoThumbs = >selectedNodes;\r\n Product.removeClassFromElements(selectedVideoThumbs, this.magicZoomThumbSelectedClass);\r\n\r\n // When the click has come from MagicScroll, it will handle updating the current image so we don't set it here.\r\n if (imageZoom) {\r\n imageZoom.classList.remove('hidden');\r\n }\r\n if (videoDiv) {\r\n videoDiv.classList.add('hidden');\r\n }\r\n }\r\n\r\n private static removeClassFromElements(elements: HTMLCollectionOf, cls: string): void {\r\n for (const element of elements) {\r\n element.classList.remove(cls);\r\n }\r\n }\r\n\r\n private recreateVideo(containingDiv: HTMLElement, mediaUrl: string): void {\r\n let videoElement = document.createElement('video');\r\n\r\n containingDiv.innerHTML = \"\";\r\n\r\n videoElement.width = 402;\r\n videoElement.height = 482;\r\n videoElement.muted = true;\r\n videoElement.autoplay = true;\r\n videoElement.controls = true;\r\n videoElement.loop = false;\r\n\r\n let sourceMP4 = document.createElement(\"source\");\r\n sourceMP4.type = \"video/mp4\";\r\n sourceMP4.src = mediaUrl;\r\n\r\n videoElement.appendChild(sourceMP4);\r\n containingDiv.appendChild(videoElement);\r\n }\r\n\r\n /**\r\n * Listens on the body class for clicks on a store stock popup.\r\n * The store stock popup is only loaded when clicked.\r\n */\r\n private wireUpStoreStock(): void {\r\n document.body.addEventListener('click', (e: MouseEvent) => {\r\n const blockHeader = (e.target as HTMLElement).closest('.blockHeader');\r\n\r\n if (blockHeader) {\r\n e.preventDefault();\r\n\r\n const blockContents = blockHeader.nextElementSibling as HTMLElement;\r\n\r\n if (blockHeader.classList.contains('active')) {\r\n blockHeader.classList.remove('active');\r\n blockContents.classList.remove('active');\r\n } else {\r\n blockHeader.classList.add('active');\r\n blockContents.classList.add('active');\r\n\r\n // Remove active from all other blocks.\r\n let stockPopup = document.getElementById(\"StoreStock\");\r\n const allBlockHeaders = stockPopup.querySelectorAll(\".blockHeader\");\r\n allBlockHeaders.forEach((otherBlockHeader) => {\r\n // But not the one we just opened.\r\n if (otherBlockHeader !== blockHeader) {\r\n const otherBlockContents = otherBlockHeader.nextElementSibling as HTMLElement;\r\n\r\n otherBlockHeader.classList.remove('active');\r\n otherBlockContents.classList.remove('active');\r\n }\r\n });\r\n }\r\n }\r\n });\r\n }\r\n\r\n private WireUpImagePaging() {\r\n document.getElementById(\"mobile-previous-image\")?.addEventListener(\"click\", (e) => this.onMobileImagePreviousClicked(e));\r\n document.getElementById(\"mobile-next-image\")?.addEventListener(\"click\", (e) => this.onMobileImageNextClicked(e));\r\n document.getElementById(\"c-previous-image\")?.addEventListener(\"click\", (e) => this.onDesktopImagePreviousClicked(e));\r\n document.getElementById(\"c-next-image\")?.addEventListener(\"click\", (e) => this.onDesktopImageNextClicked(e));\r\n }\r\n\r\n private onMobileImagePreviousClicked(e: MouseEvent): void {\r\n e.preventDefault();\r\n this.pageImage(-1, \"mobilethumbList\", this.mobileZoomId, this.mobileVideoId);\r\n }\r\n\r\n private onMobileImageNextClicked(e: MouseEvent): void {\r\n e.preventDefault();\r\n this.pageImage(+1, \"mobilethumbList\", this.mobileZoomId, this.mobileVideoId);\r\n }\r\n\r\n private onDesktopImagePreviousClicked(e: MouseEvent): void {\r\n e.preventDefault();\r\n let newSlide = this.pageImage(-1, \"thumbList\", this.desktopZoom1Id, this.desktopVideoId);\r\n if (newSlide) {\r\n this.triggerSlideTwoUpdate(newSlide);\r\n }\r\n }\r\n\r\n private onDesktopImageNextClicked(e: MouseEvent): void {\r\n e.preventDefault();\r\n let newSlide = this.pageImage(+1, \"thumbList\", this.desktopZoom1Id, this.desktopVideoId);\r\n if (newSlide) {\r\n this.triggerSlideTwoUpdate(newSlide);\r\n }\r\n }\r\n\r\n private triggerSlideTwoUpdate(slideLink: HTMLAnchorElement): void {\r\n let slideInfo = this.slideInfoFromLink(slideLink);\r\n\r\n if (slideInfo.isVideo) {\r\n // We've just loaded a video into the left pane. When we load an image via MagicScroll an event is\r\n // triggered which then updates the second pane. We have to trigger that event manually here.\r\n this.SetCurrentThumbIndex(this.desktopZoom1Id, slideLink);\r\n }\r\n }\r\n\r\n private pageImage(slideIncrement: number, thumblistId: string, imageZoomId: string, videoDivId: string): HTMLAnchorElement {\r\n let selectedThumb = document.querySelector(`div#${thumblistId} .${this.magicZoomThumbSelectedClass}`);\r\n\r\n if (!selectedThumb) {\r\n return;\r\n }\r\n\r\n let slideInfo = this.slideInfoFromLink(selectedThumb);\r\n\r\n let newSlideIndex = slideInfo.index + slideIncrement;\r\n if (newSlideIndex >= this.slideCount()) {\r\n newSlideIndex = 0;\r\n }\r\n else if (newSlideIndex < 0) {\r\n newSlideIndex = this.slideCount() - 1;\r\n }\r\n\r\n let newSlide = document.querySelectorAll(`div#${thumblistId} a`)[newSlideIndex];\r\n\r\n // Clear mz-thumb-selected and reapply to the new active anchor.\r\n selectedThumb.classList.remove(this.magicZoomThumbSelectedClass);\r\n newSlide.classList.add(this.magicZoomThumbSelectedClass);\r\n\r\n // Show / hide mobile image / video pane as required.\r\n this.setPaneVisibility(newSlide, imageZoomId, videoDivId);\r\n\r\n // Because we are not using MagicScroll for the thumbs (hidden on mobile) we need to set the zoom image ourselves.\r\n if (!slideInfo.isVideo) {\r\n // Switch to the new slide using the element (not the slide index) as MagicZoom gets the index wrong as it does not count the videos.\r\n MagicZoom.switchTo(imageZoomId, newSlide);\r\n }\r\n\r\n return newSlide;\r\n }\r\n\r\n public SetButtonState(stockLevel: StockLevel): void {\r\n this.setStockAvailableText(\"Select size and colour above to view live stock availability\");\r\n\r\n let iconSpan = this.addToBasketButton.querySelector(\"span\");\r\n\r\n // Find the last element in the button which is a text node.\r\n let buttonTextNode = this.addToBasketButton.childNodes[this.addToBasketButton.childNodes.length - 1];\r\n\r\n let stockAvailable = false;\r\n\r\n this.addToBasketButton.classList.remove(\"outofstock\");\r\n this.addToBasketButton.classList.remove(\"notice\");\r\n this.addToBasketButton.classList.remove(\"off\");\r\n this.addToBasketButton.classList.remove(\"on\");\r\n\r\n if (StockLevel.Stock_Unavailable === stockLevel || StockLevel.Stock_Enquiries === stockLevel) {\r\n this.addToBasketButton.classList.add(\"outofstock\");\r\n this.addToBasketButton.classList.add(\"notice\");\r\n iconSpan.className = \"\";\r\n buttonTextNode.nodeValue = 'Email me when in stock';\r\n }\r\n else if (StockLevel.Stock_LowStock == stockLevel || StockLevel.Stock_InStock == stockLevel) {\r\n this.addToBasketButton.classList.add(\"on\");\r\n stockAvailable = true;\r\n iconSpan.className = \"icons icon-bag\";\r\n buttonTextNode.nodeValue = 'Add to Basket';\r\n }\r\n else {\r\n this.addToBasketButton.classList.add(\"off\");\r\n iconSpan.className = \"icons icon-bag\";\r\n buttonTextNode.nodeValue = 'Add to Basket';\r\n }\r\n\r\n if (this.checkStoreStockElement) {\r\n let checkStoreStockContainer = this.checkStoreStockElement.parentElement;\r\n\r\n if (stockAvailable) {\r\n checkStoreStockContainer.classList.add(\"available\");\r\n }\r\n else {\r\n checkStoreStockContainer.classList.remove(\"available\");\r\n }\r\n }\r\n }\r\n\r\n private onStoreStockCheckClicked(e: MouseEvent): void {\r\n e.preventDefault();\r\n\r\n let selectedProduct = this.StockInfoForCurrentSizeAndColour();\r\n\r\n if (!selectedProduct || StockLevel.Stock_NotSelected === selectedProduct.availability) {\r\n alert('You need to select a size and colour combination first.');\r\n return;\r\n }\r\n\r\n document.getElementById(\"check-store-stock\").classList.add(\"working\");\r\n\r\n let url = `${this.localeUrlPrefix}/ws/store-stock/${selectedProduct.productId}`;\r\n fetch(url, { method: \"POST\" })\r\n .then(response => response.text())\r\n .then(html => this.StoreStockCheckSuccess(html))\r\n .catch(() => this.StoreStockCheckFailed());\r\n }\r\n\r\n private StoreStockCheckSuccess(html: string): void {\r\n document.getElementById(\"check-store-stock\").classList.remove(\"working\");\r\n\r\n let contentElement = document.getElementById(\"store-stock-content\");\r\n contentElement.innerHTML = html;\r\n\r\n let storeModal = document.getElementById(\"store-stock-popup\");\r\n window.Modal.OpenModal(storeModal, () => { });\r\n }\r\n\r\n private StoreStockCheckFailed(): void {\r\n document.getElementById(\"check-store-stock\").classList.remove(\"working\");\r\n\r\n let contentElement = document.getElementById(\"store-stock-content\");\r\n let html = \"
    \"\r\n + \"

    Sorry, we could not check the store stock levels at the moment.

    \"\r\n + \"

    Please contact the store directly to reserve stock.

    \"\r\n + \"\"\r\n + \"
    \";\r\n contentElement.innerHTML = html;\r\n\r\n let storeModal = document.getElementById(\"store-stock-popup\");\r\n window.Modal.OpenModal(storeModal, () => { });\r\n }\r\n\r\n private onAddToBasketClicked(e: MouseEvent): void {\r\n e.preventDefault();\r\n\r\n let price: number = null;\r\n let selectedProduct = this.StockInfoForCurrentSizeAndColour();\r\n\r\n if (!selectedProduct || StockLevel.Stock_NotSelected === selectedProduct.availability) {\r\n alert('You need to select a size and colour combination first.');\r\n return;\r\n }\r\n else if (StockLevel.Stock_Unavailable === selectedProduct.availability || StockLevel.Stock_Enquiries === selectedProduct.availability) {\r\n window.location.href = \"/out-of-stock?ProductId=\" + selectedProduct.productId;\r\n return;\r\n }\r\n\r\n if (this.productClass === ProductClass.GiftCard) {\r\n price = this.basketCommon.giftCardValue();\r\n\r\n if (price === null) {\r\n alert('Please enter a gift card value.');\r\n return;\r\n }\r\n }\r\n else {\r\n price = selectedProduct.priceGbp;\r\n }\r\n\r\n this.basketCommon.AddToBasket(selectedProduct.productId, price);\r\n }\r\n\r\n // Because the MagicX js libs don't handle videos we need to calculate the thumbnail index minus\r\n // any previous videos when passing the current slide to show.\r\n private countOfVideosBeforeSlide(activeIndex: number): number {\r\n let videoCount = 0;\r\n\r\n let elements = document.getElementsByClassName(\"zoom-1-thumb\");\r\n for (const element of elements) {\r\n let slideLink = element;\r\n let slideInfo = this.slideInfoFromLink(slideLink);\r\n\r\n if (slideInfo.index < activeIndex) {\r\n if (slideInfo.isVideo) {\r\n videoCount++;\r\n }\r\n }\r\n }\r\n\r\n return videoCount;\r\n }\r\n\r\n private findLowestSlideLink(slideLinks: HTMLCollectionOf): HTMLAnchorElement {\r\n let lowest: HTMLAnchorElement;\r\n let lowestIndex = 999;\r\n\r\n for (const slideLink of slideLinks) {\r\n let slideInfo = this.slideInfoFromLink(slideLink);\r\n\r\n if (slideInfo.index < lowestIndex) {\r\n lowest = slideLink;\r\n lowestIndex = slideInfo.index;\r\n }\r\n }\r\n\r\n if (!lowest) {\r\n lowest = slideLinks[0];\r\n }\r\n\r\n return lowest;\r\n }\r\n\r\n private slideInfoFromLink(slideLink: HTMLAnchorElement): ISlideCaptionAndIndex {\r\n let isVideo = slideLink.dataset[\"isVideo\"];\r\n\r\n return {\r\n caption: slideLink.dataset[\"colour\"],\r\n index: parseInt(slideLink.dataset[\"imageIndex\"]),\r\n isNewColour: (slideLink.dataset[\"isNewColour\"] && slideLink.dataset[\"isNewColour\"].toLowerCase() === \"true\"),\r\n isVideo: (isVideo && isVideo.toLowerCase() === \"true\")\r\n };\r\n }\r\n\r\n public FindAndClickThumbnail(colourId: number): void {\r\n let imgLinks = document.getElementsByClassName(\"c-colour-image-\" + colourId) as HTMLCollectionOf;\r\n\r\n if (imgLinks.length > 0) {\r\n // Find the lowest slideIndex as they are in priority order, but MagicScroll moves them around in the DOM.\r\n let slideLink = this.findLowestSlideLink(imgLinks);\r\n let slideInfo = this.slideInfoFromLink(slideLink);\r\n\r\n slideInfo.index -= this.countOfVideosBeforeSlide(slideInfo.index);\r\n\r\n if (this.currentThumbnailIndex !== slideInfo.index) {\r\n MagicZoom.switchTo(this.desktopZoom1Id, slideInfo.index);\r\n MagicZoom.switchTo(this.mobileZoomId, slideInfo.index);\r\n this.currentThumbnailIndex = slideInfo.index;\r\n }\r\n\r\n // When we call MagicZoom.switchTo above, it selects the correct thumb but does not move the scroll which is why we do it here. \r\n let thumbListElement = document.getElementById(\"thumbList\");\r\n if (this.isVisible(thumbListElement)) {\r\n if (slideInfo.index + 2 <= this.slideCount()) { // The thumbs have 5 items, this puts the selected one at the top instead of the middle.\r\n slideInfo.index += 2;\r\n }\r\n MagicScroll.jump('thumbList', slideInfo.index);\r\n }\r\n\r\n this.updateZoomCaption(\"1\", slideInfo.caption);\r\n this.updateZoomCaption(\"3\", slideInfo.caption);\r\n this.updateIsNewColourFlash(slideInfo.isNewColour);\r\n\r\n this.setPaneVisibility(slideLink, this.desktopZoom1Id, this.desktopVideoId);\r\n }\r\n }\r\n\r\n private updateIsNewColourFlash(isNewColour: boolean): void {\r\n // Find all li elements with a class of 'new-colour' that are contained within the product hints ul.\r\n const newFlashes = document.querySelectorAll(\"ul.product-flag li.new-colour\");\r\n\r\n newFlashes.forEach((flash) => {\r\n if (isNewColour) {\r\n flash.classList.remove(\"hidden\");\r\n }\r\n else {\r\n flash.classList.add(\"hidden\");\r\n }\r\n });\r\n }\r\n\r\n private isVisible(el: HTMLElement): boolean {\r\n let style = window.getComputedStyle(el);\r\n return style.display !== 'none';\r\n }\r\n\r\n private slideCount(): number {\r\n // Extract the number of slides from the data attribute of the slide container. More reliable than asking MagicScroll.\r\n let tl = document.getElementById(\"thumbList\");\r\n let slideCount = parseInt(tl.dataset[\"imageCount\"]);\r\n\r\n return slideCount;\r\n }\r\n\r\n public updateZoomWindows(): void {\r\n let imageList = >document.querySelectorAll(\"div.mcs-item>a\");\r\n\r\n if (imageList.length === 0) {\r\n return; // Don't run on mobile as no magic scroll loaded.\r\n }\r\n\r\n let imageCount = this.slideCount();\r\n\r\n if (imageCount <= 1) {\r\n // Not enough images, second one is a placeholder that we should leave alone.\r\n return;\r\n }\r\n\r\n // Ensure the slide index is within the image array bounds.\r\n if (this.currentThumbnailIndex < 0) {\r\n this.currentThumbnailIndex = imageCount - 1;\r\n }\r\n else if (this.currentThumbnailIndex >= imageCount) {\r\n this.currentThumbnailIndex = 0;\r\n }\r\n\r\n let firstImageAnchorElement = this.findImageInList(imageList, this.currentThumbnailIndex);\r\n let secondImageIndex = this.currentThumbnailIndex + 1;\r\n\r\n // If the left hand image is the last in the list, wrap around to the start.\r\n if (secondImageIndex > imageCount - 1) {\r\n secondImageIndex = 0;\r\n }\r\n\r\n let firstImageColourDescription = firstImageAnchorElement.dataset[\"colour\"];\r\n this.updateZoomCaption(\"1\", firstImageColourDescription);\r\n\r\n // Find the second thumbnail by index.\r\n let secondImageAnchorElement = this.findImageInList(imageList, secondImageIndex);\r\n let secondImageColourDescription = secondImageAnchorElement.dataset[\"colour\"];\r\n let secondImageMediumUrl = secondImageAnchorElement.dataset[\"image\"];\r\n let secondImageThumbElement = secondImageAnchorElement.firstChild;\r\n let secondMagicZoomAnchor = document.getElementById(this.desktopZoom2Id);\r\n let secondMagicZoomImage = secondMagicZoomAnchor.firstChild;\r\n\r\n //**************************\r\n let isVideo = secondImageAnchorElement.dataset[\"isVideo\"];\r\n let videoDiv = document.getElementById(\"video-right\");\r\n\r\n if (isVideo && isVideo.toLowerCase() === \"true\") {\r\n let mediaUrl = secondImageAnchorElement.dataset[\"image\"];\r\n this.recreateVideo(videoDiv, mediaUrl);\r\n\r\n secondMagicZoomAnchor.classList.add('hidden');\r\n videoDiv.classList.remove('hidden');\r\n }\r\n else {\r\n MagicZoom.update(this.desktopZoom2Id, secondImageAnchorElement.href, secondImageMediumUrl);\r\n\r\n secondMagicZoomAnchor.classList.remove('hidden');\r\n videoDiv.classList.add('hidden');\r\n }\r\n //**************************\r\n\r\n this.updateZoomCaption(\"2\", secondImageColourDescription);\r\n secondMagicZoomAnchor.title = secondImageAnchorElement.title;\r\n secondMagicZoomImage.alt = secondImageThumbElement.alt;\r\n\r\n // MagicZoom won't let us update the title tags for this.desktopZoom2Id so we update it in the DOM directly.\r\n let zoomWindowTitles = document.getElementsByClassName(\"mz-caption\"); // Zoom window captions created by MagicZoom.\r\n for (var i = 0; i < zoomWindowTitles.length; i++) {\r\n let zoomWindowTitle = zoomWindowTitles[i];\r\n\r\n // Only update the title text for elements that are not the first zoom (we have 3 on the page).\r\n if (zoomWindowTitle.innerText !== firstImageAnchorElement.title) {\r\n zoomWindowTitle.innerText = secondMagicZoomAnchor.title;\r\n }\r\n }\r\n }\r\n\r\n private findImageInList(imageList: NodeListOf, slideIndex: number): HTMLAnchorElement {\r\n\r\n for (var i = 0; i < imageList.length; i++) {\r\n let thumbSlideInfo = this.slideInfoFromLink(imageList[i]);\r\n\r\n if (thumbSlideInfo.index === slideIndex) {\r\n return imageList[i];\r\n }\r\n }\r\n\r\n return imageList[0];\r\n }\r\n\r\n private onAddToWishlistClicked(e: MouseEvent): boolean {\r\n e.preventDefault();\r\n\r\n let selectedProduct = this.StockInfoForCurrentSizeAndColour();\r\n\r\n if (!selectedProduct || StockLevel.Stock_NotSelected === selectedProduct.availability) {\r\n alert('Please select a size and colour first in order to add to your wish list.');\r\n return false;\r\n }\r\n\r\n // Call the web service to add the item which will then ping back and call the success / fail function.\r\n this.quickAdd.addToWishList(selectedProduct.productId, this.addToWishlistButton);\r\n\r\n return false;\r\n }\r\n\r\n private UpdateDelivery(productId: number, silentUpdate: boolean): void {\r\n if (productId === 0) {\r\n this.SetDeliveryText('Select the size and colour (above) to view currently available delivery options for this product.', false);\r\n return;\r\n }\r\n if (!silentUpdate) {\r\n this.SetDeliveryText('Calculating delivery, please wait.', false);\r\n }\r\n\r\n const urlStub = this.urlStubFromPath();\r\n\r\n let postData = {\r\n productId: productId,\r\n urlStub: urlStub,\r\n };\r\n\r\n let url = this.localeUrlPrefix + \"/ws/delivery\";\r\n fetch(url,\r\n {\r\n body: JSON.stringify(postData),\r\n headers: {\r\n \"Content-Type\": \"application/json\"\r\n },\r\n method: \"POST\",\r\n })\r\n .then(response => response.json())\r\n .then(json => this.UpdateDeliverySuccess(json))\r\n .catch(() => this.UpdateDeliveryFailed());\r\n }\r\n\r\n private urlStubFromPath(): string {\r\n // 1. Get the path (e.g. \"/de/url-stub\" or \"/de/url-stub.html\").\r\n const path = window.location.pathname;\r\n\r\n // 2. Split on \"/\" and remove empty segments\r\n const segments = path.split(\"/\").filter(Boolean); // e.g. [\"de\", \"url-stub\"].\r\n\r\n // 3. Get the last segment (this is the \"stub\" part, which might have an extension).\r\n let lastSegment = segments[segments.length - 1] || \"\";\r\n\r\n // 4. If there's a dot, remove everything from the dot to the end.\r\n const dotIndex = lastSegment.indexOf(\".\");\r\n\r\n if (dotIndex !== -1) {\r\n lastSegment = lastSegment.slice(0, dotIndex);\r\n }\r\n\r\n return lastSegment;\r\n }\r\n\r\n private SetDeliveryText(text, success) {\r\n document.getElementById(\"DeliveryMessage\").textContent = text;\r\n let deliveryTable = document.getElementById(\"DeliveryTable\");\r\n\r\n if (success) {\r\n deliveryTable.classList.remove(\"hidden\");\r\n }\r\n else {\r\n deliveryTable.classList.add(\"hidden\");\r\n }\r\n }\r\n\r\n private UpdateDeliverySuccess(shippingOptions: IShippingOption[]) {\r\n if (shippingOptions === null || shippingOptions.length !== 3) {\r\n this.SetDeliveryText(\"A delivery cost could not be calculated.\", false);\r\n this.hideExpressDeliveryTime();\r\n return;\r\n }\r\n\r\n if (this.UpdateShippingUiRow(\"ShipExpressRow\", \"ShipExpressChargeLabel\", shippingOptions[0])) {\r\n this.showExpressDeliveryTime(shippingOptions[0]);\r\n }\r\n else {\r\n this.hideExpressDeliveryTime();\r\n }\r\n this.UpdateShippingUiRow(\"ShipStandardRow\", \"ShipStandardChargeLabel\", shippingOptions[1]);\r\n let economyAvailable = this.UpdateShippingUiRow(\"ShipEconomyRow\", \"ShipEconomyChargeLabel\", shippingOptions[2]);\r\n\r\n let showFreeDeliveryText = false;\r\n let selectedProduct = this.StockInfoForCurrentSizeAndColour();\r\n if (selectedProduct && selectedProduct.priceGbp >= 45) {\r\n // Hide if not available or not free.\r\n if (!economyAvailable || (shippingOptions[2].formattedCharge != null && shippingOptions[2].formattedCharge.indexOf(\"Free\") === -1)) {\r\n showFreeDeliveryText = false;\r\n }\r\n else {\r\n showFreeDeliveryText = true;\r\n }\r\n }\r\n let freeDeliveryContainer = document.querySelector(\".delivery-text-container\");\r\n let deliveryTextPlaceHolder = document.querySelector(\".delivery-text-placeholder\");\r\n if (showFreeDeliveryText) {\r\n freeDeliveryContainer.classList.remove(\"hidden\");\r\n deliveryTextPlaceHolder.classList.add(\"hidden\");\r\n }\r\n else {\r\n freeDeliveryContainer.classList.add(\"hidden\");\r\n deliveryTextPlaceHolder.classList.remove(\"hidden\");\r\n }\r\n\r\n this.SetDeliveryText(\"The delivery options for all selected items are shown below. Default delivery pricing and timescale are based on delivery to UK mainland destinations, alternative destinations can be selected on the basket page or by logging into your account.\", true);\r\n this.setDeliveryUpdateTimer(60, () => {\r\n if (selectedProduct) {\r\n this.UpdateDelivery(selectedProduct.productId, false);\r\n }\r\n });\r\n }\r\n\r\n private UpdateShippingUiRow(tableRowId: string, labelId: string, shipOption: IShippingOption) {\r\n let tableRowRef = document.getElementById(tableRowId);\r\n let labelRef = document.getElementById(labelId);\r\n\r\n if (shipOption.formattedCharge == null || shipOption.formattedCharge == \"\") {\r\n tableRowRef.classList.add(\"hidden\");\r\n labelRef.classList.add(\"hidden\");\r\n return false; // Indicate row is not visible.\r\n }\r\n tableRowRef.classList.remove(\"hidden\");\r\n labelRef.classList.remove(\"hidden\");\r\n labelRef.textContent = shipOption.formattedCharge;\r\n let countryDescription = tableRowRef.querySelector(\".country-description\");\r\n if (countryDescription) {\r\n countryDescription.innerHTML = shipOption.countrySpecificDescription;\r\n }\r\n return true; // Indicate row is visible.\r\n }\r\n\r\n private UpdateDeliveryFailed() {\r\n this.SetDeliveryText('Sorry, we could not calculate delivery as an error occurred.', false);\r\n this.stopDeliveryUpdateTimer();\r\n this.hideExpressDeliveryTime();\r\n }\r\n\r\n private UpdateLinked(productId: number, styleId: number, colourId: number): void {\r\n this.ClearLinkedProductsTab();\r\n\r\n if (productId === 0 || isNaN(colourId)) {\r\n return;\r\n }\r\n this.setLinkedProductsText(\"Checking for compatible products, please wait...\");\r\n\r\n this.lastRequestTime = Date.now();\r\n\r\n let postData = {\r\n productId: productId,\r\n styleId: styleId,\r\n colourId: colourId,\r\n lastRequestTime: this.lastRequestTime\r\n };\r\n\r\n let url = this.localeUrlPrefix + \"/ws/linked\";\r\n\r\n fetch(url,\r\n {\r\n body: JSON.stringify(postData),\r\n headers: {\r\n \"Content-Type\": \"application/json\"\r\n },\r\n method: \"POST\",\r\n })\r\n .then(response => response.json())\r\n .then(json => this.UpdateLinkedSuccess(json))\r\n .catch(() => this.UpdateLinkedFailed());\r\n }\r\n\r\n private setLinkedProductsText(text: string): void {\r\n let lpm = document.getElementById(\"LinkedProductsMessage\");\r\n\r\n if (lpm) {\r\n lpm.textContent = text;\r\n }\r\n }\r\n\r\n private UpdateLinkedSuccess(recommendations: IProductRecommendations): void {\r\n\r\n if (this.lastRequestTime !== recommendations.lastRequestTime) {\r\n // Too many requests at once, only load the last one.\r\n return;\r\n }\r\n\r\n if (recommendations === null || recommendations.compatibles.length === 0) {\r\n this.setLinkedProductsText(\"We don't have any in stock compatible items for this product.\");\r\n }\r\n else {\r\n let compatibleProductsTable = document.getElementById(\"LinkedProductsTable\");\r\n\r\n for (const product of recommendations.compatibles) {\r\n let html = this.CreateCompatibleProductHtml(product);\r\n compatibleProductsTable.insertAdjacentElement(\"beforeend\", html);\r\n }\r\n\r\n compatibleProductsTable.classList.remove(\"hidden\");\r\n this.setLinkedProductsText(\"Based on the selected item, these are the available accessories:\");\r\n }\r\n\r\n this.loadTheLook(recommendations.theLook, this.desktopTheLookContainerId, this.desktopTheLookMagicScrollId);\r\n this.loadTheLook(recommendations.theLook, this.mobileTheLookContainerId, this.mobileTheLookMagicScrollId);\r\n }\r\n\r\n private loadTheLook(products: ITheLookLinkModel[], containerId: string, magicScrollId: string) {\r\n MagicScroll.stop(magicScrollId);\r\n\r\n let theLookProducts = this.ClearTheLookRecommendations(containerId, magicScrollId);\r\n\r\n if (!theLookProducts) {\r\n return;\r\n }\r\n\r\n if (products && products.length >= 2) {\r\n for (const product of products) {\r\n theLookProducts.append(this.CreateTheLookProductHtml(product));\r\n }\r\n }\r\n else {\r\n // No products, show the cached version of recommendations instead.\r\n window.scrollProducts?.restoreTheLookCache(containerId, magicScrollId);\r\n }\r\n\r\n MagicScroll.refresh(magicScrollId);\r\n MagicScroll.start(magicScrollId);\r\n this.setTheLookVisibility(true, containerId);\r\n }\r\n\r\n private setTheLookVisibility(visible: boolean, containerId: string): void {\r\n let theLookContainer = document.getElementById(containerId);\r\n\r\n if (theLookContainer) {\r\n if (visible) {\r\n theLookContainer.classList.remove(\"hidden\");\r\n }\r\n else {\r\n theLookContainer.classList.add(\"hidden\");\r\n }\r\n }\r\n }\r\n\r\n private CreateCompatibleProductHtml(product: ILinkedProductModel): HTMLElement {\r\n let containingTableRow = document.createElement(\"tr\");\r\n containingTableRow.className = \"related\";\r\n\r\n let containingTableCell = document.createElement(\"td\");\r\n containingTableRow.appendChild(containingTableCell);\r\n\r\n let titleDiv = document.createElement(\"div\");\r\n titleDiv.className = \"title-box\";\r\n\r\n let productImg = document.createElement(\"img\");\r\n productImg.src = product.imageUrl;\r\n productImg.height = 90;\r\n productImg.width = 90;\r\n titleDiv.appendChild(productImg);\r\n\r\n let nameContainer = document.createElement(\"span\");\r\n nameContainer.className = \"name\";\r\n\r\n let productLink = document.createElement(\"a\");\r\n productLink.href = product.styleUrl;\r\n productLink.innerText = product.name;\r\n nameContainer.appendChild(productLink);\r\n\r\n let productDescription = document.createElement(\"p\");\r\n productDescription.className = \"bottom description\";\r\n productDescription.innerText = product.description;\r\n\r\n titleDiv.appendChild(nameContainer);\r\n titleDiv.appendChild(productDescription);\r\n\r\n let controlDiv = document.createElement(\"div\");\r\n controlDiv.className = \"control-box\";\r\n\r\n this.appendHtml(controlDiv, product.formattedPrice);\r\n\r\n let basketLink = document.createElement(\"a\");\r\n basketLink.className = \"btn\";\r\n basketLink.onclick = () => this.basketCommon.AddToBasket(product.productId, null);\r\n basketLink.innerText = \"Add to Basket\";\r\n controlDiv.appendChild(basketLink);\r\n\r\n containingTableCell.appendChild(titleDiv);\r\n containingTableCell.appendChild(controlDiv);\r\n\r\n return containingTableRow;\r\n }\r\n\r\n private appendHtml(el, str) {\r\n var div = document.createElement(\"div\");\r\n div.innerHTML = str;\r\n while (div.children.length > 0) {\r\n el.appendChild(div.children[0]);\r\n }\r\n }\r\n\r\n private CreateTheLookProductHtml(product: ITheLookLinkModel): HTMLElement {\r\n var containingDiv = document.createElement(\"div\");\r\n containingDiv.className = \"item\";\r\n\r\n var productLink = document.createElement(\"a\");\r\n productLink.href = product.styleUrl;\r\n productLink.className = \"image\";\r\n containingDiv.appendChild(productLink);\r\n\r\n var productImg = document.createElement(\"img\");\r\n productImg.src = product.imageUrl;\r\n productLink.appendChild(productImg);\r\n\r\n var productTitle = document.createElement(\"a\");\r\n productTitle.href = product.styleUrl;\r\n productTitle.className = \"name\";\r\n productTitle.innerText = product.name;\r\n containingDiv.appendChild(productTitle);\r\n\r\n var priceContainer = document.createElement(\"p\");\r\n priceContainer.className = \"price\";\r\n containingDiv.appendChild(priceContainer);\r\n\r\n var productPrice = document.createElement(\"span\");\r\n productPrice.className = \"new-price\";\r\n productPrice.innerHTML = product.formattedPrice;\r\n priceContainer.appendChild(productPrice);\r\n\r\n var basketLink = document.createElement(\"a\");\r\n basketLink.className = \"looksAddToBasket btn\";\r\n basketLink.onclick = () => this.quickAdd.showTheLook(product.styleId);\r\n basketLink.innerText = \"Add to Basket\";\r\n containingDiv.appendChild(basketLink);\r\n\r\n return containingDiv;\r\n }\r\n\r\n private UpdateLinkedFailed() {\r\n this.setLinkedProductsText(\"Sorry, we could not find any compatible products.\");\r\n }\r\n\r\n private ClearTheLookRecommendations(containerId: string, magicScrollId: string): HTMLElement {\r\n this.setTheLookVisibility(false, containerId);\r\n\r\n let theLooksList = document.getElementById(magicScrollId);\r\n\r\n if (theLooksList) {\r\n theLooksList.innerHTML = \"\";\r\n }\r\n\r\n return theLooksList;\r\n }\r\n\r\n private ClearLinkedProductsTab() {\r\n this.setLinkedProductsText(\"Select the product size and colour (above) to view current accessories.\");\r\n\r\n let linkedProductsTable = document.getElementById(\"LinkedProductsTable\");\r\n\r\n if (linkedProductsTable) {\r\n linkedProductsTable.innerHTML = \"\";\r\n linkedProductsTable.classList.add(\"hidden\");\r\n }\r\n }\r\n\r\n public ProductSelectionChanged(selectedProduct: ISelectedSizeAndColour): void {\r\n let available = false;\r\n\r\n if (selectedProduct !== null) {\r\n let stock = this.StockInfoForSizeAndColour(selectedProduct.colourId, selectedProduct.size);\r\n\r\n if (stock) {\r\n this.SetButtonState(stock.availability);\r\n\r\n this.setStockAvailableText(stock.stockLevelMessage);\r\n // Remember the productId for postback and add to basket / wish list.\r\n this.selectedProductId = stock.productId;\r\n\r\n this.updateUiPrices(stock, selectedProduct.colourId);\r\n\r\n available = true;\r\n }\r\n else if (selectedProduct.colourId) {\r\n let colourStock = this.StockInfoForColour(selectedProduct.colourId);\r\n\r\n if (colourStock) {\r\n this.updateUiPrices(colourStock, selectedProduct.colourId);\r\n }\r\n\r\n //ScarabQueue.push(['view', colourStock.code.substring(0, 10) + \"-\" + this.styleId.toString()]);\r\n }\r\n }\r\n if (!available) {\r\n this.SetButtonState(StockLevel.Stock_NotSelected);\r\n this.ClearLinkedProductsTab();\r\n this.setStockAvailableText(\"\");\r\n this.selectedProductId = 0;\r\n }\r\n }\r\n\r\n private updateUiPrices(stock: IProductPageStockModel, colourId: number): void {\r\n // Fire off a call to the web service to calculate how much the delivery options will be if this item is added.\r\n this.UpdateDelivery(stock.productId, false);\r\n this.UpdateLinked(stock.productId, this.styleId, colourId);\r\n\r\n this.FindAndClickThumbnail(colourId);\r\n\r\n let percentageOffHtml = '';\r\n\r\n if (stock.percentageSaving !== null) {\r\n percentageOffHtml = stock.percentageSaving;\r\n }\r\n\r\n if (this.priceExVatElement) {\r\n this.priceExVatElement.innerHTML = stock.priceExVat;\r\n }\r\n\r\n if (this.priceElement) {\r\n this.priceElement.innerHTML = stock.priceHeading;\r\n }\r\n\r\n // Percentage off is only output on physical products so will be missing for gift cards.\r\n if (this.percentageOffElement) {\r\n this.percentageOffElement.innerHTML = percentageOffHtml;\r\n\r\n if (percentageOffHtml) {\r\n this.percentageOffElement.classList.remove('hidden');\r\n } else {\r\n this.percentageOffElement.classList.add('hidden');\r\n }\r\n }\r\n }\r\n\r\n private endsWith(text, suffix): boolean {\r\n return text.indexOf(suffix, text.length - suffix.length) !== -1;\r\n };\r\n\r\n public StockInfoForColour(colourId: number): IProductPageStockModel {\r\n\r\n for (let key in stockInfo) {\r\n if (this.endsWith(key, colourId.toString())) {\r\n return stockInfo[key];\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public StockInfoForSizeAndColour(colourId: number, size: string): IProductPageStockModel {\r\n if (this.productClass === ProductClass.GiftCard) {\r\n // Product is a gift card which does not have a size list, return the first stock item.\r\n return this.firstStockItem();\r\n }\r\n\r\n if (isNaN(colourId) || !size) {\r\n return null;\r\n }\r\n\r\n return stockInfo[this.keyForStockLookup(colourId, size)];\r\n }\r\n\r\n private firstStockItem(): IProductPageStockModel {\r\n let posCode = Object.keys(stockInfo)[0];\r\n return stockInfo[posCode];\r\n }\r\n\r\n private StockInfoForCurrentSizeAndColour(): IProductPageStockModel {\r\n if (this.productClass === ProductClass.GiftCard) {\r\n // Product is a gift card which does not have a size list, return the first stock item.\r\n return this.firstStockItem();\r\n }\r\n\r\n let selected = this.selectorUi.SelectedSizeAndColour();\r\n if (selected === null) {\r\n return null;\r\n }\r\n\r\n return this.StockInfoForSizeAndColour(selected.colourId, selected.size);\r\n }\r\n\r\n private keyForStockLookup(colourId: number, sizeCode: string): string {\r\n return sizeCode.toLowerCase() + '-' + colourId;\r\n }\r\n\r\n private get selectedProductId(): number {\r\n let el = document.getElementById(\"SelectedProductId\") as HTMLInputElement;\r\n\r\n if (!el) {\r\n return 0;\r\n }\r\n\r\n let selectedProductId = parseInt(el.value);\r\n return selectedProductId;\r\n }\r\n\r\n private set selectedProductId(val: number) {\r\n let el = document.getElementById(\"SelectedProductId\") as HTMLInputElement;\r\n\r\n if (el) {\r\n el.value = val.toString();\r\n }\r\n }\r\n\r\n private showExpressDeliveryTime(shipOption: IShippingOption): void {\r\n if (!shipOption.deliveryCutOff || !shipOption.nextDeliverySlot) {\r\n this.hideExpressDeliveryTime();\r\n return;\r\n }\r\n let container = this.findDeliveryContainer();\r\n\r\n let textOrderWithin = document.createTextNode('Order within ');\r\n let spanTimescale = document.createElement('span');\r\n spanTimescale.innerText = shipOption.deliveryCutOff;\r\n let initalTextForDelivery = document.createTextNode(' for UK delivery on ');\r\n let spanDate = document.createElement('span');\r\n spanDate.innerText = shipOption.nextDeliverySlot;\r\n let finalTextForDelivery = document.createTextNode(' by selecting Express delivery');\r\n\r\n this.clearElementChildren(container);\r\n container.appendChild(textOrderWithin);\r\n container.appendChild(spanTimescale);\r\n container.appendChild(initalTextForDelivery);\r\n container.appendChild(spanDate);\r\n container.appendChild(finalTextForDelivery);\r\n }\r\n\r\n private hideExpressDeliveryTime(): void {\r\n let anchor = document.createElement('a');\r\n\r\n //anchor.className = \"left promo-text\" ;\r\n anchor.href = \"/returns-policy\";\r\n anchor.innerText = \"90 day satisfaction guarantee with free UK returns and excellent customer service\";\r\n\r\n let container = this.findDeliveryContainer();\r\n this.clearElementChildren(container);\r\n container.appendChild(anchor);\r\n }\r\n\r\n private clearElementChildren(node): void {\r\n while (node.hasChildNodes()) {\r\n node.removeChild(node.lastChild);\r\n }\r\n }\r\n\r\n private findDeliveryContainer(): HTMLDivElement {\r\n return (document.getElementsByClassName('express-delivery')[0]);\r\n }\r\n\r\n private setDeliveryUpdateTimer(seconds, func): void {\r\n this.stopDeliveryUpdateTimer();\r\n if (seconds > 0) {\r\n this.deliveryTimerHander = setTimeout(func, seconds * 1000);\r\n }\r\n }\r\n\r\n private stopDeliveryUpdateTimer(): void {\r\n if (this.deliveryTimerHander != 0) {\r\n clearTimeout(this.deliveryTimerHander);\r\n }\r\n this.deliveryTimerHander = 0;\r\n }\r\n\r\n private updateZoomCaption(captionId: string, text: string) {\r\n let element = document.getElementById(\"zoomcaption-\" + captionId);\r\n\r\n if (element) {\r\n element.innerText = text;\r\n }\r\n }\r\n\r\n private setStockAvailableText(text: string) {\r\n let stockAvailableTextElement = document.getElementById(\"stockAvailableMessage\") as HTMLSpanElement;\r\n\r\n if (stockAvailableTextElement) {\r\n stockAvailableTextElement.textContent = text;\r\n }\r\n }\r\n}\r\n\r\nif (document.body.dataset.pageInit == \"product\") {\r\n Product.Init();\r\n}\r\n","/*\r\n\r\n\r\n Magic Zoom Plus v5.3.7 \r\n Copyright 2021 Magic Toolbox\r\n Buy a license: https://www.magictoolbox.com/magiczoomplus/\r\n License agreement: https://www.magictoolbox.com/license/\r\n\r\n\r\n*/\r\neval(function(m,a,g,i,c,k){c=function(e){return(e35?String.fromCharCode(e+29):e.toString(36))};if(!''.replace(/^/,String)){while(g--){k[c(g)]=i[g]||c(g)}i=[function(e){return k[e]}];c=function(){return'\\\\w+'};g=1};while(g--){if(i[g]){m=m.replace(new RegExp('\\\\b'+c(g)+'\\\\b','g'),i[g])}}return m}('1n.aZ=(17(){1a B,q;B=q=(17(){1a W={4L:\"jf.3.6\",ek:0,8Q:{},$cH:17(aa){1b(aa.$6A||(aa.$6A=++Q.ek))},9L:17(aa){1b(Q.8Q[aa]||(Q.8Q[aa]={}))},$F:17(){},$1k:17(){1b 1k},$1s:17(){1b 1s},e5:\"e6-\"+1q.52(1q.6f()*1v cE().ee()),3D:17(aa){1b(aa!=1h)},b5:17(ab,aa){1b(ab!=1h)?ab:aa},aL:17(aa){1b!!(aa)},1U:17(ac){1a aa=gJ;17 ab(ad){1b 89 ad===\"6m\"&&ad>-1&&ad%1===0&&ad<=aa}if(!Q.3D(ac)){1b 1k}if(ac.$4Q){1b ac.$4Q}if(!!ac.6Q){if(ac.6Q===1){1b\"6r\"}if(ac.6Q===3){1b\"ec\"}}if(ac===1n){1b\"1n\"}if(ac===1p){1b\"1p\"}if(ac 3T 1n.cl){1b\"17\"}if(ac 3T 1n.6F){1b\"1S\"}if(ac 3T 1n.4R){1b\"4E\"}if(ac 3T 1n.cE){1b\"eb\"}if(ac 3T 1n.f4){1b\"gI\"}if(ab(ac.1J)&&ac.eg){1b\"gG\"}if(ab(ac.1J)&&ac.9R){1b\"2i\"}if((ac 3T 1n.7t||ac 3T 1n.cl)&&ac.5H===Q.3U){1b\"4h\"}if(Q.1f.5e){if(Q.3D(ac.dB)){1b\"1t\"}}1j{if(ac===1n.1t||ac.5H===1n.1u||ac.5H===1n.f8||ac.5H===1n.eD||ac.5H===1n.gr||ac.5H===1n.gs){1b\"1t\"}}1b 89(ac)},2c:17(af,ae){if(!(af 3T 1n.4R)){af=[af]}if(!ae){1b af[0]}1V(1a ad=0,ab=af.1J;ad-1}});W.9M(cl,{$4Q:\"17\",1D:17(){1a ab=Q.$A(2i),aa=13,ac=ab.7o();1b 17(){1b aa.6S(ac||1h,ab.6c(Q.$A(2i)))}},2H:17(){1a ab=Q.$A(2i),aa=13,ac=ab.7o();1b 17(ad){1b aa.6S(ac||1h,Q.$([ad||(Q.1f.2M?1n.1t:1h)]).6c(ab))}},2G:17(){1a ab=Q.$A(2i),aa=13,ac=ab.7o();1b 1n.4y(17(){1b aa.6S(aa,ab)},ac||0)},dT:17(){1a ab=Q.$A(2i),aa=13;1b 17(){1b aa.2G.6S(aa,ab)}},eK:17(){1a ab=Q.$A(2i),aa=13,ac=ab.7o();1b 1n.fK(17(){1b aa.6S(aa,ab)},ac||0)}});1a X={};1a P=3N.hb.5j();1a O=P.3M(/(3R|7y|5e|bI)\\\\/(\\\\d+\\\\.?\\\\d*)/i);1a T=P.3M(/(hc|bN)\\\\/(\\\\d+\\\\.?\\\\d*)/i)||P.3M(/(f2|6p|9I|eB|74|bN)\\\\/(\\\\d+\\\\.?\\\\d*)/i);1a V=P.3M(/4L\\\\/(\\\\d+\\\\.?\\\\d*)/i);1a K=1p.59.2k;17 L(ab){1a aa=ab.aP(0).80()+ab.7U(1);1b ab in K||(\"fO\"+aa)in K||(\"f0\"+aa)in K||(\"6D\"+aa)in K||(\"O\"+aa)in K}Q.1f={2O:{hd:!!(1p.hf),hg:!!(1n.9P),cT:!!(1p.bo),5k:!!(1p.gC||1p.gD||1p.a3||1p.fN||1p.gF||1p.gH||1p.iJ||1p.je||1p.iG),eS:!!(1n.iC)&&!!(1n.iA)&&(1n.b2&&\"iy\"in 1v b2),2a:L(\"2a\"),2q:L(\"2q\"),9E:L(\"9E\"),ev:L(\"ev\"),5o:1k,fS:1k,9g:1k,5Q:1k,7I:(17(){1b 1p.ix.hk(\"bh://bf.c1.b6/j9/j8/j7#j6\",\"1.1\")}())},9J:(17(){1b\"iT\"in 1n||(1n.d4&&1p 3T d4)||(3N.hN>0)||(3N.hx>0)}()),2J:!!P.3M(/(7P|bb\\\\d+|hw).+|hu|hs\\\\/|ho|hn|hM|ig|ic|ia|i9|ip(fs|fr|ad)|i8|i0|hX |hW|hU|hS|2J.+eB|hR|74 m(hQ|in)i|iw( hT)?|ff|p(hO|i3)\\\\/|i4|i6|i7|ib(4|6)0|hL|hp|hq\\\\.(1f|3S)|hr|ht|hD (ce|ff)|hH|ih/),64:(O&&O[1])?O[1].5j():(1n.74)?\"bI\":!!(1n.iW)?\"5e\":(1p.iY!==2P||1n.ir!==1h)?\"7y\":(1n.is!==1h||!3N.iD)?\"3R\":\"iH\",4L:(O&&O[2])?2B(O[2]):0,4B:(T&&T[1])?T[1].5j():\"\",7x:(T&&T[2])?2B(T[2]):0,9m:\"\",bm:\"\",5g:\"\",2M:0,4z:P.3M(/ip(?:ad|fr|fs)/)?\"7Q\":(P.3M(/(?:gO|7P)/)||3N.4z.3M(/fB|b3|gp/i)||[\"gw\"])[0].5j(),fG:1p.9Z&&1p.9Z.5j()===\"fH\",fV:0,4n:17(){1b(1p.9Z&&1p.9Z.5j()===\"fH\")?1p.3k:1p.59},5o:1n.5o||1n.he||1n.gR||1n.gY||1n.gP||2P,a9:1n.a9||1n.fR||1n.fR||1n.h7||1n.gU||1n.h0||2P,2p:1k,8c:17(){if(Q.1f.2p){1b}1a ad;1a ac;Q.1f.2p=1s;Q.3k=Q.$(1p.3k);Q.b3=Q.$(1n);3c{1a ab=Q.$1v(\"2Z\").1z({1e:2Q,1g:2Q,81:\"6y\",2n:\"67\",1H:-h1}).29(1p.3k);Q.1f.fV=ab.dK-ab.cY;ab.2R()}3o(aa){}3c{ad=Q.$1v(\"2Z\");ac=ad.2k;ac.fX=\"fZ:1Y(cS://),1Y(cS://),gQ 1Y(cS://)\";Q.1f.2O.fS=(/(1Y\\\\s*\\\\(.*?){3}/).3h(ac.fZ);ac=1h;ad=1h}3o(aa){}if(!Q.1f.7Y){Q.1f.7Y=Q.b0(\"2q\").aW()}3c{ad=Q.$1v(\"2Z\");ad.2k.fX=Q.b0(\"38\").aW()+\":5F(gW);\";Q.1f.2O.9g=!!ad.2k.1J&&(!Q.1f.2M||Q.1f.2M>9);ad=1h}3o(aa){}if(!Q.1f.2O.9g){Q.$(1p.59).1B(\"5U-gv-2Y\")}3c{Q.1f.2O.5Q=(17(){1a ae=Q.$1v(\"5Q\");1b!!(ae.fk&&ae.fk(\"2d\"))}())}3o(aa){}if(1n.gT===2P&&1n.gV!==2P){X.2W=\"gX\"}Q.3L.36.2f(Q.$(1p),\"9Y\")}};(17(){1a ab=[],ae,ad,af;17 aa(){1b!!(2i.9R.bq)}4A(Q.1f.64){1E\"5e\":if(!Q.1f.4L){Q.1f.4L=!!(1n.b2)?3:2}1I;1E\"7y\":Q.1f.4L=(T&&T[2])?2B(T[2]):0;1I}Q.1f[Q.1f.64]=1s;if(T&&T[1]===\"f2\"){Q.1f.4B=\"6p\"}if(!!1n.6p){Q.1f.6p=1s}if(T&&T[1]===\"bN\"){Q.1f.4B=\"74\";Q.1f.74=1s}if(Q.1f.4B===\"9I\"&&(V&&V[1])){Q.1f.7x=2B(V[1])}if(Q.1f.4z===\"7P\"&&Q.1f.3R&&(V&&V[1])){Q.1f.8P=1s}ae=({7y:[\"-fD-\",\"f0\",\"fD\"],3R:[\"-3R-\",\"fO\",\"3R\"],5e:[\"-6D-\",\"6D\",\"6D\"],bI:[\"-o-\",\"O\",\"o\"]})[Q.1f.64]||[\"\",\"\",\"\"];Q.1f.9m=ae[0];Q.1f.bm=ae[1];Q.1f.5g=ae[2];Q.1f.2M=!Q.1f.5e?2P:(1p.fL)?1p.fL:(17(){1a ag=0;if(Q.1f.fG){1b 5}4A(Q.1f.4L){1E 2:ag=6;1I;1E 3:ag=7;1I}1b ag}());if(!Q.1f.2J&&Q.1f.4z===\"fB\"&&Q.1f.9J){Q.1f.2J=1s;Q.1f.4z=\"7Q\"}ab.33(Q.1f.4z+\"-2Y\");if(Q.1f.2J){ab.33(\"2J-2Y\")}if(Q.1f.8P){ab.33(\"7P-1f-2Y\")}if(Q.1f.2M){Q.1f.4B=\"ie\";Q.1f.7x=Q.1f.2M;ab.33(\"ie\"+Q.1f.2M+\"-2Y\");1V(ad=11;ad>Q.1f.2M;ad--){ab.33(\"lt-ie\"+ad+\"-2Y\")}}if(Q.1f.3R&&Q.1f.4L-1){ab.8D(ac,1)}}13.71=af?ab.7w(\" \"):\"\";1b 13},hY:17(aa){1b 13.dq(aa)?13.1R(aa):13.1B(aa)},3F:17(ab){1a ac=ab.5P(),aa=1h;ab=S[ac]||(S[ac]=Y(ac));aa=M(13,ab);if(\"2A\"===aa){aa=1h}if(1h!==aa){if(\"2y\"==ab){1b Q.3D(aa)?2B(aa):1}if(N.3h(ab)){aa=6e(aa,10)?aa:\"6H\"}}1b aa},3V:17(ab,aa){1a ad=ab.5P();3c{if(\"2y\"==ab){13.dm(aa);1b 13}ab=S[ad]||(S[ad]=Y(ad));13.2k[ab]=aa+((\"6m\"==Q.1U(aa)&&!U[ad])?\"2C\":\"\")}3o(ac){}1b 13},1z:17(ab){1V(1a aa in ab){13.3V(aa,ab[aa])}1b 13},hZ:17(){1a aa={};Q.$A(2i).3e(17(ab){aa[ab]=13.3F(ab)},13);1b aa},dm:17(ac,aa){1a ab;aa=aa||1k;13.2k.2y=ac;ac=6e(2B(ac)*2Q);if(aa){if(0===ac){if(\"3q\"!=13.2k.5a){13.2k.5a=\"3q\"}}1j{if(\"5E\"!=13.2k.5a){13.2k.5a=\"5E\"}}}if(Q.1f.2M&&Q.1f.2M<9){if(!aO(ac)){if(!~13.2k.38.4S(\"bQ\")){13.2k.38+=\" dk:di.df.bQ(aB=\"+ac+\")\"}1j{13.2k.38=13.2k.38.4J(/aB=\\\\d*/i,\"aB=\"+ac)}}1j{13.2k.38=13.2k.38.4J(/dk:di.df.bQ\\\\(aB=\\\\d*\\\\)/i,\"\").5n();if(\"\"===13.2k.38){13.2k.5m(\"38\")}}}1b 13},91:17(aa){1V(1a ab in aa){if(\"4h\"===ab){13.1B(\"\"+aa[ab])}1j{13.3m(ab,\"\"+aa[ab])}}1b 13},hz:17(){1a ab=0,aa=0;ab=13.3F(\"2a-5G\");aa=13.3F(\"2a-cd\");ab=ab.4S(\"6D\")>-1?2B(ab):ab.4S(\"s\")>-1?2B(ab)*bG:0;aa=aa.4S(\"6D\")>-1?2B(aa):aa.4S(\"s\")>-1?2B(aa)*bG:0;1b ab+aa},4f:17(){1b 13.1z({6Y:\"3a\",5a:\"3q\"})},5t:17(){1b 13.1z({6Y:\"\",5a:\"5E\"})},1F:17(){1b{1e:13.dK,1g:13.hm}},97:17(ab){1a aa=13.1F();aa.1e-=(2B(13.3F(\"41-1P-1e\")||0)+2B(13.3F(\"41-2L-1e\")||0));aa.1g-=(2B(13.3F(\"41-1H-1e\")||0)+2B(13.3F(\"41-2K-1e\")||0));if(!ab){aa.1e-=(2B(13.3F(\"7X-1P\")||0)+2B(13.3F(\"7X-2L\")||0));aa.1g-=(2B(13.3F(\"7X-1H\")||0)+2B(13.3F(\"7X-2K\")||0))}1b aa},7k:17(){1b{1H:13.8u,1P:13.8r}},hy:17(){1a aa=13,ab={1H:0,1P:0};do{ab.1P+=aa.8r||0;ab.1H+=aa.8u||0;aa=aa.4g}5z(aa);1b ab},9l:17(){1a ae=13,ab=0,ad=0;if(Q.3D(1p.59.6I)){1a aa=13.6I(),ac=Q.$(1p).7k(),af=Q.1f.4n();1b{1H:aa.1H+ac.y-af.hC,1P:aa.1P+ac.x-af.hE}}do{ab+=ae.dA||0;ad+=ae.dv||0;ae=ae.d2}5z(ae&&!(/^(?:3k|9W)$/i).3h(ae.9c));1b{1H:ad,1P:ab}},hF:17(){1a aa=13;1a ac=0;1a ab=0;do{ac+=aa.dA||0;ab+=aa.dv||0;aa=aa.d2}5z(aa&&!(/^(?:3k|9W)$/i).3h(aa.9c));1b{1H:ab,1P:ac}},8k:17(){1a ab=13.9l();1a aa=13.1F();1b{1H:ab.1H,2K:ab.1H+aa.1g,1P:ab.1P,2L:ab.1P+aa.1e}},6h:17(ab){3c{13.hI=ab}3o(aa){13.hJ=ab}1b 13},2R:17(){1b(13.4g)?13.4g.bn(13):13},5d:17(){Q.$A(13.hK).3e(17(aa){if(3==aa.6Q||8==aa.6Q){1b}Q.$(aa).5d()});13.2R();13.cx();if(13.$6A){Q.8Q[13.$6A]=1h;4V Q.8Q[13.$6A]}1b 1h},3d:17(ac,ab){ab=ab||\"2K\";1a aa=13.4D;(\"1H\"==ab&&aa)?13.ii(ac,aa):13.cP(ac);1b 13},29:17(ac,ab){1a aa=Q.$(ac).3d(13,ab);1b 13},g1:17(aa){13.3d(aa.4g.7K(13,aa));1b 13},9s:17(aa){if(\"6r\"!==Q.1U(\"1S\"==Q.1U(aa)?aa=1p.cW(aa):aa)){1b 1k}1b(13==aa)?1k:(13.4t&&!(Q.1f.d3))?(13.4t(aa)):(13.cZ)?!!(13.cZ(aa)&16):Q.$A(13.8V(aa.9c)).4t(aa)}};Q.4k.iR=Q.4k.3F;Q.4k.iS=Q.4k.1z;if(!1n.4k){1n.4k=Q.$F;if(Q.1f.64.3R){1n.1p.8O(\"iU\")}1n.4k.2t=(Q.1f.64.3R)?1n[\"[[iV.2t]]\"]:{}}Q.9M(1n.4k,{$4Q:\"6r\"});Q.3L={1F:17(){if(Q.1f.9J||Q.1f.iX||Q.1f.d3){1b{1e:1n.5N,1g:1n.4O}}1b{1e:Q.1f.4n().cY,1g:Q.1f.4n().iO}},7k:17(){1b{x:1n.j0||Q.1f.4n().8r,y:1n.j2||Q.1f.4n().8u}},j3:17(){1a aa=13.1F();1b{1e:1q.26(Q.1f.4n().j4,aa.1e),1g:1q.26(Q.1f.4n().j5,aa.1g)}}};Q.2c(1p,{$4Q:\"1p\"});Q.2c(1n,{$4Q:\"1n\"});Q.2c([Q.4k,Q.3L],{1Q:17(ad,ab){1a aa=Q.9L(13.$6A),ac=aa[ad];if(2P!==ab&&2P===ac){ac=aa[ad]=ab}1b(Q.3D(ac)?ac:1h)},2N:17(ac,ab){1a aa=Q.9L(13.$6A);aa[ac]=ab;1b 13},2z:17(ab){1a aa=Q.9L(13.$6A);4V aa[ab];1b 13}});if(!(1n.bA&&1n.bA.2t&&1n.bA.2t.bS)){Q.2c([Q.4k,Q.3L],{bS:17(aa){1b Q.$A(13.az(\"*\")).38(17(ac){3c{1b(1==ac.6Q&&ac.71.3y(aa,\" \"))}3o(ab){}})}})}Q.2c([Q.4k,Q.3L],{aY:17(){1b 13.bS(2i[0])},8V:17(){1b 13.az(2i[0])}});if(Q.1f.5k.9z&&!1p.cV){Q.4k.cV=17(){Q.1f.5k.cw(13)}}Q.1u={$4Q:\"1t\",6u:Q.$1k,2h:17(){1b 13.5L().4W()},5L:17(){if(13.dN){13.dN()}1j{13.dB=1s}1b 13},4W:17(){if(13.dP){13.dP()}1j{13.j1=1k}1b 13},4u:17(){13.6u=Q.$1s;1b 13},7M:17(){1a aa=(/3v/i).3h(13.1x)?13.4P[0]:13;1b!Q.3D(aa)?{x:0,y:0}:{x:aa.3B,y:aa.3A}},6a:17(){1a aa=(/3v/i).3h(13.1x)?13.4P[0]:13;1b!Q.3D(aa)?{x:0,y:0}:{x:aa.3I||aa.3B+Q.1f.4n().8r,y:aa.3Q||aa.3A+Q.1f.4n().8u}},b9:17(){1a aa=13.3X||13.iM;5z(aa&&aa.6Q===3){aa=aa.4g}1b aa},8s:17(){1a ab=1h;4A(13.1x){1E\"8j\":1E\"iz\":1E\"iL\":ab=13.9Q||13.il;1I;1E\"8M\":1E\"cs\":1E\"fm\":ab=13.9Q||13.im;1I;1T:1b ab}3c{5z(ab&&ab.6Q===3){ab=ab.4g}}3o(aa){ab=1h}1b ab},76:17(){if(!13.er&&13.2v!==2P){1b(13.2v&1?1:(13.2v&2?3:(13.2v&4?2:0)))}1b 13.er},6B:17(){1b(13.2r&&(13.2r===\"3v\"||13.2r===13.6V))||(/3v/i).3h(13.1x)},5f:17(){if(13.2r){1b(13.2r===\"3v\"||13.6V===13.2r)&&13.8d}1j{if(13 3T 1n.8f){1b 13.4P.1J===1&&(13.6T.1J?13.6T.1J===1&&13.6T[0].6j===13.4P[0].6j:1s)}}1b 1k},6M:17(){if(13.2r){1b 13.8d&&(13.2r===\"3v\"||13.6V===13.2r)?13:1h}1j{if(13 3T 1n.8f){1b 13.4P[0]}}1b 1h},8J:17(){if(13.2r){1b 13.8d&&(13.2r===\"3v\"||13.6V===13.2r)?13.4j:1h}1j{if(13 3T 1n.8f){1b 13.4P[0].6j}}1b 1h}};Q.bd=\"es\";Q.bV=\"iq\";Q.9F=\"\";if(!1p.es){Q.bd=\"it\";Q.bV=\"iv\";Q.9F=\"8I\"}Q.1u.1w={1x:\"\",x:1h,y:1h,2U:1h,2v:1h,3X:1h,9Q:1h,$4Q:\"1t.4v\",6u:Q.$1k,6X:Q.$([]),4M:17(aa){1a ab=aa;13.6X.33(ab)},2h:17(){1b 13.5L().4W()},5L:17(){13.6X.3e(17(ab){3c{ab.5L()}3o(aa){}});1b 13},4W:17(){13.6X.3e(17(ab){3c{ab.4W()}3o(aa){}});1b 13},4u:17(){13.6u=Q.$1s;1b 13},7M:17(){1b{x:13.3B,y:13.3A}},6a:17(){1b{x:13.x,y:13.y}},b9:17(){1b 13.3X},8s:17(){1b 13.9Q},76:17(){1b 13.2v},eo:17(){1b 13.6X.1J>0?13.6X[0].b9():2P},6B:17(){1b(13.2r&&(13.2r===\"3v\"||13.2r===13.6V))||(/3v/i).3h(13.1x)},5f:17(){if(13.2r){1b(13.2r===\"3v\"||13.6V===13.2r)&&13.8d}1j{if(13 3T 1n.8f){1b 13.4P.1J===1&&(13.6T.1J?13.6T[0].6j===13.4P[0].6j:1s)}}1b 1k},6M:17(){if(13.2r){1b 13.8d&&(13.2r===\"3v\"||13.6V===13.2r)?13:1h}1j{if(13 3T 1n.8f){1b 13.4P[0]}}1b 1h},8J:17(){if(13.2r){1b 13.8d&&(13.2r===\"3v\"||13.6V===13.2r)?13.4j:1h}1j{if(13 3T 1n.8f){1b 13.4P[0].6j}}1b 1h}};Q.2c([Q.4k,Q.3L],{1C:17(ac,ae,af,ai){1a ah,aa,ad,ag,ab;if(Q.1U(ac)===\"1S\"){ab=ac.9b(\" \");if(ab.1J>1){ac=ab}}if(Q.1U(ac)===\"4E\"){Q.$(ac).3e(13.1C.2H(13,ae,af,ai));1b 13}ac=X[ac]||ac;if(!ac||!ae||Q.1U(ac)!==\"1S\"||Q.1U(ae)!==\"17\"){1b 13}if(ac===\"9Y\"&&Q.1f.2p){ae.2f(13);1b 13}af=6e(af||50,10);if(!ae.$9A){ae.$9A=1q.52(1q.6f()*Q.63())}ah=Q.3L.1Q.2f(13,\"8v\",{});aa=ah[ac];if(!aa){ah[ac]=aa=Q.$([]);ad=13;if(Q.1u.1w[ac]){Q.1u.1w[ac].1L.6o.2f(13,ai)}1j{aa.3p=17(aj){aj=Q.2c(aj||1n.e,{$4Q:\"1t\"});Q.3L.36.2f(ad,ac,Q.$(aj))};13[Q.bd](Q.9F+ac,aa.3p,1k)}}ag={1x:ac,fn:ae,bv:af,ew:ae.$9A};aa.33(ag);aa.iE(17(ak,aj){1b ak.bv-aj.bv});1b 13},1O:17(ag){1a ae=Q.3L.1Q.2f(13,\"8v\",{});1a ac;1a aa;1a ab;1a ah;1a af;1a ad;af=2i.1J>1?2i[1]:-2Q;if(Q.1U(ag)===\"1S\"){ad=ag.9b(\" \");if(ad.1J>1){ag=ad}}if(Q.1U(ag)===\"4E\"){Q.$(ag).3e(13.1O.2H(13,af));1b 13}ag=X[ag]||ag;if(!ag||Q.1U(ag)!==\"1S\"||!ae||!ae[ag]){1b 13}ac=ae[ag]||[];1V(ab=0;abaa){ad.5M=1s;13.36(\"2w\",ad)}if(!ad.5M){1b}ad=1v ac.1u.1w.2w(13,ae,\"e7\");13.36(\"2w\",ad)}}}(W));(17(ad){1a ah=ad.$;1a ae=1h;17 aa(aq,ap){1a ao=ap.x-aq.x;1a ar=ap.y-aq.y;1b 1q.9K(ao*ao+ar*ar)}17 aj(av,aw){1a au=4R.2t.7U.2f(av);1a at=1q.3b(au[1].3I-au[0].3I);1a aq=1q.3b(au[1].3Q-au[0].3Q);1a ar=1q.2g(au[1].3I,au[0].3I)+at/2;1a ap=1q.2g(au[1].3Q,au[0].3Q)+aq/2;1a ao=0;aw.6K=[au[0],au[1]];ao=1q.5u(aa({x:au[0].3I,y:au[0].3Q},{x:au[1].3I,y:au[1].3Q}),2);aw.6N={x:ar,y:ap};aw.x=aw.6N.x;aw.y=aw.6N.y;1b ao}17 am(ao){1b ao/ae}17 ab(aq,ap){1a ao;if(aq.6T&&aq.4P){if(aq.6T){ao=aq.6T}1j{ao=aq.4P}ao=4R.2t.7U.2f(ao)}1j{ao=[];if(ap){ap.9q(17(ar){ao.33(ar)})}}1b ao}17 ac(ar,aq,ap){1a ao=1k;if(ar.4j&&ar.2r===\"3v\"&&(!ap||aq.3y(ar.4j))){aq.79(ar.4j,ar);ao=1s}1b ao}17 ai(ap,ao){if(ap.4j&&ap.2r===\"3v\"&&ao&&ao.3y(ap.4j)){ao[\"4V\"](ap.4j)}}17 al(ap){1a ao;if(ap.4j&&ap.2r===\"3v\"){ao=ap.4j}1j{ao=ap.6j}1b ao}17 ag(ar,ap){1a aq;1a at;1a ao=1k;1V(aq=0;aq1){aq.5v=aj(ap,aq);if(!aq.bL){aq.bL=aq.5v}if(ao>aq.5v){aq.1l=-1}1j{if(ao1){ap=\"dg\"}1j{au.3X.1O([\"48\",\"4d\"],13.1Q(\"1t:1N:3j:48\"));if(aq){aq.ej()}13.2z(\"1t:1N:5W\");13.2z(\"1t:1N:6n\");13.2z(\"1t:1N:7f\");13.2z(\"1t:1N:7F\")}ad.1u.1w.1N.1L.9O(af(at,av),aw);ar=1v ad.1u.1w.1N(13,au,ap,aw);13.36(\"1N\",ar)}}}(W));(17(af){1a ad=af.$;af.1u.1w.5c=1v af.3U(af.2c(af.1u.1w,{1x:\"5c\",3Z:17(al,ak,an,ah,ag,am,ai){1a aj=ak.6a();13.x=aj.x;13.y=aj.y;13.2U=ak.2U;13.3X=al;13.lh=an||0;13.bw=ah||0;13.8y=ag||0;13.lj=am||0;13.lk=ai||0;13.bJ=ak.bJ||0;13.cM=1k;13.4M(ak)}}));1a ae,ab;17 aa(){ae=1h}17 ac(ag,ah){1b(ag>50)||(1===ah&&!(\"b3\"==af.1f.4z&&ag<1))||(0===ag%12)||(0==ag%4.ll)}af.1u.1w.5c.1L={9x:\"lm\"in 1p||af.1f.2M>8?\"ln\":\"lo\",6o:17(){13.1C(af.1u.1w.5c.1L.9x,af.1u.1w.5c.1L.3p,1)},2R:17(){13.1O(af.1u.1w.5c.1L.9x,af.1u.1w.5c.1L.3p,1)},3p:17(al){1a am=0,aj=0,ah=0,ag=0,ak,ai;if(al.e4){ah=al.e4*-1}if(al.e3!==2P){ah=al.e3}if(al.e2!==2P){ah=al.e2}if(al.e1!==2P){aj=al.e1*-1}if(al.8y){ah=-1*al.8y}if(al.bw){aj=al.bw}if(0===ah&&0===aj){1b}am=0===ah?aj:ah;ag=1q.26(1q.3b(ah),1q.3b(aj));if(!ae||ag0?\"52\":\"4c\";am=1q[ak](am/ae);aj=1q[ak](aj/ae);ah=1q[ak](ah/ae);if(ab){3u(ab)}ab=4y(aa,8b);ai=1v af.1u.1w.5c(13,al,am,aj,ah,0,ae);ai.cM=ac(ae,al.bJ||0);13.36(\"5c\",ai)}}})(W);Q.b3=Q.$(1n);Q.7W=Q.$(1p);1b W})();(17(M){if(!M){66\"7d 5Y 7c\"}1a L=M.$;1a K=1n.lq||1n.lg||1h;B.bR=1v M.3U({24:1h,2p:1k,1y:{aX:M.$F,6U:M.$F,bB:M.$F,6q:M.$F,7N:M.$F,en:M.$F,aM:1k,dU:1s},1A:1h,9f:1h,bT:0,7D:{aX:17(N){if(N.3X&&(8b===N.3X.aD||eG===N.3X.aD)&&N.lr){13.1y.aX.1D(1h,(N.2j-(13.1y.dU?13.bT:0))/N.lu).2G(1);13.bT=N.2j}},6U:17(N){if(N){L(N).2h()}13.9d();if(13.2p){1b}13.2p=1s;13.8Z();!13.1y.aM&&13.1y.aX.1D(1h,1).2G(1);13.1y.6U.1D(1h,13).2G(1);13.1y.7N.1D(1h,13).2G(1)},bB:17(N){if(N){L(N).2h()}13.9d();13.2p=1k;13.8Z();13.1y.bB.1D(1h,13).2G(1);13.1y.7N.1D(1h,13).2G(1)},6q:17(N){if(N){L(N).2h()}13.9d();13.2p=1k;13.8Z();13.1y.6q.1D(1h,13).2G(1);13.1y.7N.1D(1h,13).2G(1)}},a1:17(){L([\"5w\",\"bz\",\"dS\"]).3e(17(N){13.24.1C(N,13.7D[\"8I\"+N].2H(13).dT(1))},13)},9d:17(){if(13.9f){3c{3u(13.9f)}3o(N){}13.9f=1h}L([\"5w\",\"bz\",\"dS\"]).3e(17(O){13.24.1O(O)},13)},8Z:17(){13.1F();if(13.24.1Q(\"1v\")){1a N=13.24.4g;13.24.2R().2z(\"1v\").1z({2n:\"lv\",1H:\"2A\"});N.5d()}},eQ:17(O){1a P=1v b2(),N;L([\"bz\",\"lw\"]).3e(17(Q){P[\"8I\"+Q]=L(17(R){13.7D[\"8I\"+Q].2f(13,R)}).1D(13)},13);P.6q=L(17(){13.1y.en.1D(1h,13).2G(1);13.1y.aM=1k;13.a1();13.24.1Z=O}).1D(13);P.6U=L(17(){if(8b!==P.aD&&eG!==P.aD){13.7D.6q.2f(13);1b}N=P.lx;13.a1();if(K&&!M.1f.5e&&!(\"7Q\"===M.1f.4z&&M.1f.4L0):(N.9j)?(\"8Y\"==N.9j):N.1e>0},1F:17(){1b 13.1A||(13.1A={1e:13.24.aK||13.24.1e,1g:13.24.g3||13.24.1g})}})})(B);(17(L){if(!L){66\"7d 5Y 7c\"}if(L.62){1b}1a K=L.$;L.62=1v L.3U({3Z:17(N,M){1a O;13.el=L.$(N);13.1y=L.2c(13.1y,M);13.5T=1k;13.8l=13.bM;O=L.62.8N[13.1y.2a]||13.1y.2a;if(\"17\"===L.1U(O)){13.8l=O}1j{13.65=13.8S(O)||13.8S(\"6E\")}if(\"1S\"==L.1U(13.1y.8i)){13.1y.8i=\"l3\"===13.1y.8i?6k:6e(13.1y.8i)||1}},1y:{eI:60,5G:9T,2a:\"6E\",8i:1,5r:\"ld\",eL:L.$F,7z:L.$F,cu:L.$F,dO:L.$F,a2:1k,kU:1k},4K:1h,65:1h,8l:1h,kV:17(M){13.1y.2a=M;M=L.62.8N[13.1y.2a]||13.1y.2a;if(\"17\"===L.1U(M)){13.8l=M}1j{13.8l=13.bM;13.65=13.8S(M)||13.8S(\"6E\")}},4I:17(O){1a M=/\\\\%$/,N;13.4K=O||{};13.be=0;13.2e=0;13.kW=0;13.aR={};13.8m=\"8m\"===13.1y.5r||\"8m-5b\"===13.1y.5r;13.8o=\"8o\"===13.1y.5r||\"8o-5b\"===13.1y.5r;1V(N in 13.4K){M.3h(13.4K[N][0])&&(13.aR[N]=1s);if(\"5b\"===13.1y.5r||\"8m-5b\"===13.1y.5r||\"8o-5b\"===13.1y.5r){13.4K[N].5b()}}13.bx=L.63();13.eF=13.bx+13.1y.5G;13.1y.eL.2f();if(0===13.1y.5G){13.73(1);13.1y.7z.2f()}1j{13.b1=13.eH.1D(13);if(!13.1y.a2&&L.1f.2O.5o){13.5T=L.1f.5o.2f(1n,13.b1)}1j{13.5T=13.b1.eK(1q.5A(bG/13.1y.eI))}}1b 13},ba:17(){if(13.5T){if(!13.1y.a2&&L.1f.2O.5o&&L.1f.a9){L.1f.a9.2f(1n,13.5T)}1j{dI(13.5T)}13.5T=1k}},2h:17(M){M=L.3D(M)?M:1k;13.ba();if(M){13.73(1);13.1y.7z.2G(10)}1b 13},bX:17(O,N,M){O=2B(O);N=2B(N);1b(N-O)*M+O},eH:17(){1a N=L.63(),M=(N-13.bx)/13.1y.5G,O=1q.52(M);if(N>=13.eF&&O>=13.1y.8i){13.ba();13.73(1);13.1y.7z.2G(10);1b 13}if(13.8m&&13.be=0;N--){O[N]=2B(O[N])}}}1b K(O)},bM:17(Y){1a M=0,X=0,U=0,Z=0,W=0,S=0,T=13.1y.5G;17 R(aa){1b((M*aa+X)*aa+U)*aa}17 Q(aa){1b((Z*aa+W)*aa+S)*aa}17 O(aa){1b(3*M*aa+2*X)*aa+U}17 V(aa){1b 1/(8b*aa)}17 N(aa,ab){1b Q(P(aa,ab))}17 P(ah,ai){1a ag,af,ae,ab,aa,ad;17 ac(aj){if(aj>=0){1b aj}1j{1b 0-aj}}1V(ae=ah,ad=0;ad<8;ad++){ab=R(ae)-ah;if(ac(ab)af){1b af}5z(agab){ag=ae}1j{af=ae}ae=(af-ag)*0.5+ag}1b ae}U=3*13.65[0];X=3*(13.65[2]-13.65[0])-U;M=1-U-X;S=3*13.65[1];W=3*(13.65[3]-13.65[1])-S;Z=1-S-W;1b N(Y,V(T))}});L.62.8N={9U:\"9U\",kS:\"da\",k4:\"d0\",kQ:\"d6\",jH:\"d9\",jI:\"d5\",jJ:\"dc\",jK:\"dz\",jL:\"db\",jM:\"dC\",jN:\"dD\",dE:17(N,M){M=M||[];1b 1q.5u(2,10*--N)*1q.fp(20*N*1q.fl*(M[0]||1)/3)},jO:17(N,M){1b 1-L.62.8N.dE(1-N,M)},dF:17(O){1V(1a N=0,M=1;1;N+=M,M/=2){if(O>=(7-4*N)/11){1b M*M-1q.5u((11-6*N-11*O)/4,2)}}},jG:17(M){1b 1-L.62.8N.dF(1-M)},3a:17(M){1b 0}}})(B);(17(L){if(!L){66\"7d 5Y 7c\"}if(L.9H){1b}1a K=L.$;L.9H=1v L.3U(L.62,{3Z:17(M,N){13.by=M;13.1y=L.2c(13.1y,N);13.5T=1k;13.$40.3Z()},4I:17(Q){1a M=/\\\\%$/,P,O,N=Q.1J;13.bZ=Q;13.a4=1v 4R(N);1V(O=0;O(Y+W)/2)?(X-W):(Y-W)/2)}M.1z({1P:U.x+P(Q.1e,R.1e+2*V,S.x-U.x)+V,1H:U.y+P(Q.1g,R.1g+2*V,S.y-U.y)+V})});13.aF(O)};L.bO.2t.aF=17(M){13.8e.4D&&13.8e.bn(13.8e.4D);13.8e.3d(1p.9V(M))}})(B);(17(L){if(!L){66\"7d 5Y 7c\";1b}if(L.jS){1b}1a K=L.$;L.aI=17(P,O,N,M){13.aE=1h;13.5x=L.$1v(\"cp\",1h,{2n:\"67\",\"z-8t\":dG,5a:\"3q\",2y:0.8}).1B(M||\"\").29(N||1p.3k);13.dl(P);13.5t(O)};L.aI.2t.5t=17(M){13.5x.5t();13.aE=13.4f.1D(13).2G(L.b5(M,jT))};L.aI.2t.4f=17(M){3u(13.aE);13.aE=1h;if(13.5x&&!13.b8){13.b8=1v B.62(13.5x,{5G:L.b5(M,cc),7z:17(){13.5x.5d();4V 13.5x;13.b8=1h}.1D(13)}).4I({2y:[13.5x.3F(\"2y\"),0]})}};L.aI.2t.dl=17(M){13.5x.4D&&13.8e.bn(13.5x.4D);13.5x.3d(1p.9V(M))}})(B);(17(L){if(!L){66\"7d 5Y 7c\"}if(L.7A){1b}1a O=L.$,K=1h,S={\"3g\":1,4E:2,6m:3,\"17\":4,1S:2Q},M={\"3g\":17(V,U,T){if(\"3g\"!=L.1U(U)){if(T||\"1S\"!=L.1U(U)){1b 1k}1j{if(!/^(1s|1k)$/.3h(U)){1b 1k}1j{U=U.de()}}}if(V.4b(\"2E\")&&!O(V[\"2E\"]).4t(U)){1b 1k}K=U;1b 1s},1S:17(V,U,T){if(\"1S\"!==L.1U(U)){1b 1k}1j{if(V.4b(\"2E\")&&!O(V[\"2E\"]).4t(U)){1b 1k}1j{K=\"\"+U;1b 1s}}},6m:17(W,V,U){1a T=1k,Y=/%$/,X=(L.1U(V)==\"1S\"&&Y.3h(V));if(U&&!\"6m\"==89 V){1b 1k}V=2B(V);if(aO(V)){1b 1k}if(aO(W.7S)){W.7S=dh.jU}if(aO(W.bp)){W.bp=dh.kR}if(W.4b(\"2E\")&&!O(W[\"2E\"]).4t(V)){1b 1k}if(W.7S>V||V>W.bp){1b 1k}K=X?(V+\"%\"):V;1b 1s},4E:17(W,U,T){if(\"1S\"===L.1U(U)){3c{U=1n.jW.jX(U)}3o(V){1b 1k}}if(L.1U(U)===\"4E\"){K=U;1b 1s}1j{1b 1k}},\"17\":17(V,U,T){if(L.1U(U)===\"17\"){K=U;1b 1s}1j{1b 1k}}},N=17(Y,X,U){1a W;W=Y.4b(\"3f\")?Y.3f:[Y];if(\"4E\"!=L.1U(W)){1b 1k}1V(1a V=0,T=W.1J-1;V<=T;V++){if(M[W[V].1x](W[V],X,U)){1b 1s}}1b 1k},Q=17(Y){1a W,V,X,T,U;if(Y.4b(\"3f\")){T=Y.3f.1J;1V(W=0;WS[Y.3f[V].1x]){U=Y.3f[W];Y.3f[W]=Y.3f[V];Y.3f[V]=U}}}}1b Y},R=17(W){1a V;V=W.4b(\"3f\")?W.3f:[W];if(\"4E\"!=L.1U(V)){1b 1k}1V(1a U=V.1J-1;U>=0;U--){if(!V[U].1x||!S.4b(V[U].1x)){1b 1k}if(L.3D(V[U][\"2E\"])){if(\"4E\"!==L.1U(V[U][\"2E\"])){1b 1k}1V(1a T=V[U][\"2E\"].1J-1;T>=0;T--){if(!M[V[U].1x]({1x:V[U].1x},V[U][\"2E\"][T],1s)){1b 1k}}}}if(W.4b(\"1T\")&&!N(W,W[\"1T\"],1s)){1b 1k}1b 1s},P=17(T){13.4Y={};13.1y={};13.dn(T)};L.2c(P.2t,{dn:17(V){1a U,T,W;1V(U in V){if(!V.4b(U)){9h}T=(U+\"\").5n().5P();if(!13.4Y.4b(T)){13.4Y[T]=Q(V[U]);if(!R(13.4Y[T])){66\"jY jZ k0 k1 \\'\"+U+\"\\' jR in \"+V}13.1y[T]=2P}}},79:17(U,T){U=(U+\"\").5n().5P();if(L.1U(T)==\"1S\"){T=T.5n()}if(13.4Y.4b(U)){K=T;if(N(13.4Y[U],T)){13.1y[U]=K}K=1h}},fj:17(T){T=(T+\"\").5n().5P();if(13.4Y.4b(T)){1b L.3D(13.1y[T])?13.1y[T]:13.4Y[T][\"1T\"]}},8W:17(U){1V(1a T in U){13.79(T,U[T])}},gm:17(){1a U=L.2c({},13.1y);1V(1a T in U){if(2P===U[T]&&2P!==13.4Y[T][\"1T\"]){U[T]=13.4Y[T][\"1T\"]}}1b U},9N:17(T){O(T.9b(\";\")).3e(O(17(U){U=U.9b(\":\");13.79(U.7o().5n(),U.7w(\":\"))}).1D(13))},aL:17(T){T=(T+\"\").5n().5P();1b 13.4Y.4b(T)},jE:17(T){T=(T+\"\").5n().5P();1b 13.aL(T)&&L.3D(13.1y[T])},2R:17(T){T=(T+\"\").5n().5P();if(13.aL(T)){4V 13.1y[T];4V 13.4Y[T]}}});L.7A=P})(B);(17(O){if(!O){66\"7d 5Y 7c\";1b}1a N=O.$;if(O.aQ){1b}1a M=\"bh://bf.c1.b6/js/7I\",L=\"bh://bf.c1.b6/jD/ji\";1a K=17(P){13.7a={};13.7V=N(P);13.5Q=N(1p.aH(M,\"7I\"));13.5Q.3m(\"1e\",13.7V.aK||13.7V.1e);13.5Q.3m(\"1g\",13.7V.g3||13.7V.1g);13.1i=N(1p.aH(M,\"1i\"));13.1i.jj(L,\"7e\",13.7V.2o(\"1Z\"));13.1i.3m(\"1e\",\"2Q%\");13.1i.3m(\"1g\",\"2Q%\");13.1i.29(13.5Q)};K.2t.7j=17(){1b 13.5Q};K.2t.5F=17(P){if(1q.5A(P)<1){1b}if(!13.7a.5F){13.7a.5F=N(1p.aH(M,\"38\"));13.7a.5F.3m(\"id\",\"fY\");13.7a.5F.cP(N(1p.aH(M,\"jk\")).91({\"in\":\"jl\",gg:P}));13.7a.5F.29(13.5Q);13.1i.3m(\"38\",\"1Y(#fY)\")}1j{13.7a.5F.4D.3m(\"gg\",P)}1b 13};O.aQ=K}(B));1a E=(17(M){1a L=M.$;1a K=17(O,N){13.3x={9m:\"2Y\",3K:\"8H\",2n:\"2K\",1A:{jm:\"2C\",1e:\"2A\",1g:\"2A\"},jn:[\"1g\",\"1e\"]};13.40=O;13.56=1h;13.7u=1h;13.2X=1h;13.2u={};13.gi=[];13.6z=1h;13.bt=1h;13.6g=1h;13.3x=M.2c(13.3x,N);13.3z=13.3x.9m+\"-c6\";13.9n=13.3x.9m+\"-75\";13.gf()};K.2t={gf:17(){13.56=M.$1v(\"2Z\").1B(13.3z).1B(13.3z+\"-\"+13.3x.3K).1z({5a:\"3q\"});13.7u=M.$1v(\"2Z\").1B(13.3z+\"-7u\").29(13.56);13.56.29(13.40);L([\"4q\",\"4m\"]).3e(17(N){13.2u[N]=M.$1v(\"2v\").1B(13.3z+\"-2v\").1B(13.3z+\"-2v-\"+N).29(13.56).1C(\"1X 2b\",(17(P,O){L(P).6X[0].2h().4u();L(P).5L();13.6y(O)}).2H(13,N))}.1D(13));13.2u.4q.1B(13.3z+\"-2v-4i\");13.2X=M.$1v(\"jo\").1C(\"1X 2b\",17(N){N.2h()})},dL:17(O){1a N=M.$1v(\"li\").1B(13.9n).3d(O).29(13.2X);1v M.bR(O,{7N:13.a7.1D(13)});13.gi.33(N);1b N},fE:17(O){1a N=13.6z||13.2X.aY(13.9n+\"-78\")[0];if(N){L(N).1R(13.9n+\"-78\")}13.6z=L(O);if(!13.6z){1b}13.6z.1B(13.9n+\"-78\");13.6y(13.6z)},cG:17(){if(13.7u!==13.2X.4g){L(13.2X).29(13.7u);13.go();L(1n).1C(\"7s\",13.6g=13.a7.1D(13));13.cG.1D(13).2G(1);1b}1a N=13.40.1F();if(N.1g>0&&N.1g>N.1e){13.8w(\"5i\")}1j{13.8w(\"8H\")}13.a7();13.56.1z({5a:\"\"})},2h:17(){if(13.6g){L(1n).1O(\"7s\",13.6g)}13.56.5d()},6y:17(aa,Q){1a S={x:0,y:0},ad=\"5i\"==13.3x.3K?\"1H\":\"1P\",V=\"5i\"==13.3x.3K?\"1g\":\"1e\",R=\"5i\"==13.3x.3K?\"y\":\"x\",Z=13.2X.4g.1F()[V],W=13.2X.4g.9l(),P=13.2X.1F()[V],Y,N,ac,T,O,X,U,ab=[];if(13.bt){13.bt.2h()}1j{13.2X.1z(\"2a\",M.1f.7Y+6F.83(32)+\"a5\")}if(2P===Q){Q=9T}Y=13.2X.9l();if(\"1S\"==M.1U(aa)){S[R]=(\"4m\"==aa)?1q.26(Y[ad]-W[ad]-Z,Z-P):1q.2g(Y[ad]-W[ad]+Z,0)}1j{if(\"6r\"==M.1U(aa)){N=aa.1F();ac=aa.9l();S[R]=1q.2g(0,1q.26(Z-P,Y[ad]+Z/2-ac[ad]-N[V]/2))}1j{1b}}if(M.1f.7y&&\"7P\"==M.1f.4z||M.1f.2M&&M.1f.2M<10){if(\"1S\"==M.1U(aa)&&S[R]==Y[ad]-W[ad]){Y[ad]+=0===Y[ad]-W[ad]?30:-30}S[\"9e-\"+ad]=[((P<=Z)?0:(Y[ad]-W[ad])),S[R]];4V S.x;4V S.y;if(!13.bk){13.bk=1v M.9H([13.2X],{5G:cc})}ab.33(S);13.bk.4I(ab);U=S[\"9e-\"+ad][1]}1j{13.2X.1z({2a:M.1f.7Y+6F.83(32)+Q+\"6D 6E\",2q:\"4H(\"+S.x+\"2C, \"+S.y+\"2C, 0)\"});U=S[R]}if(U>=0){13.2u.4q.1B(13.3z+\"-2v-4i\");13.2u.4q.4i=1s}1j{13.2u.4q.1R(13.3z+\"-2v-4i\");13.2u.4q.4i=1k}if(U<=Z-P){13.2u.4m.1B(13.3z+\"-2v-4i\");13.2u.4m.4i=1s}1j{13.2u.4m.1R(13.3z+\"-2v-4i\");13.2u.4m.4i=1k}U=1h},go:17(){1a P,O,Q,X,W,Z,R,V,U,Y,ae,ab,ac,aa={x:0,y:0},N,T,S=bY,ad=17(ah){1a ag,af=0;1V(ag=1.5;ag<=90;ag+=1.5){af+=(ah*1q.fp(ag/1q.fl/2))}(X<0)&&(af*=(-1));1b af};W=L(17(af){aa={x:0,y:0};N=\"5i\"==13.3x.3K?\"1H\":\"1P\";T=\"5i\"==13.3x.3K?\"1g\":\"1e\";P=\"5i\"==13.3x.3K?\"y\":\"x\";ab=13.2X.4g.1F()[T];ae=13.2X.1F()[T];Q=ab-ae;if(Q>=0){1b}if(af.2e==\"3Y\"){if(2P===ac){ac=0}13.2X.3V(\"2a\",M.1f.7Y+6F.83(32)+\"fx\");Z=af[P];U=af.y;V=af.x;Y=1k}1j{if(\"aJ\"==af.2e){if(Y){1b}R=ad(1q.3b(X));ac+=R;(ac<=Q)&&(ac=Q);(ac>=0)&&(ac=0);aa[P]=ac;13.2X.3V(\"2a\",M.1f.7Y+6F.83(32)+S+\"6D 6b-6d(.0, .0, .0, 1)\");13.2X.3V(\"2q\",\"4H(\"+aa.x+\"2C, \"+aa.y+\"2C, 6H)\");X=0}1j{if(Y){1b}if(\"8H\"==13.3x.3K&&1q.3b(af.x-V)>1q.3b(af.y-U)||\"5i\"==13.3x.3K&&1q.3b(af.x-V)<1q.3b(af.y-U)){af.2h();X=af[P]-Z;ac+=X;aa[P]=ac;13.2X.3V(\"2q\",\"4H(\"+aa.x+\"2C, \"+aa.y+\"2C, 6H)\");if(ac>=0){13.2u.4q.1B(13.3z+\"-2v-4i\")}1j{13.2u.4q.1R(13.3z+\"-2v-4i\")}if(ac<=Q){13.2u.4m.1B(13.3z+\"-2v-4i\")}1j{13.2u.4m.1R(13.3z+\"-2v-4i\")}}1j{Y=1s}}Z=af[P]}}).1D(13);13.2X.1C(\"2w\",W)},a7:17(){1a Q,P,N,O=13.40.1F();if(O.1g>0&&O.1g>O.1e){13.8w(\"5i\")}1j{13.8w(\"8H\")}Q=\"5i\"==13.3x.3K?\"1g\":\"1e\";P=13.2X.1F()[Q];N=13.56.1F()[Q];if(P<=N){13.56.1B(\"5U-2u\");13.2X.3V(\"2a\",\"\").1F();13.2X.3V(\"2q\",\"4H(0,0,0)\");13.2u.4q.1B(13.3z+\"-2v-4i\");13.2u.4m.1R(13.3z+\"-2v-4i\")}1j{13.56.1R(\"5U-2u\")}if(13.6z){13.6y(13.6z,0)}},8w:17(N){if(\"5i\"!==N&&\"8H\"!==N||N==13.3x.3K){1b}13.56.1R(13.3z+\"-\"+13.3x.3K);13.3x.3K=N;13.56.1B(13.3z+\"-\"+13.3x.3K);13.2X.3V(\"2a\",\"3a\").1F();13.2X.3V(\"2q\",\"\").3V(\"9e\",\"\")}};1b K})(B);1a v=q.$;if(89 7t.bP!==\"17\"){7t.bP=17(N){if(N==1h){66 1v jq(\"jh jr 2P c0 1h 6Z 8K\")}N=7t(N);1V(1a K=1;K<2i.1J;K++){1a M=2i[K];if(M!=1h){1V(1a L in M){if(7t.2t.4b.2f(M,L)){N[L]=M[L]}}}}1b N}}if(!q.1f.ay){q.1f.ay=q.b0(\"2q\").aW()}1a b={4C:{1x:\"1S\",\"2E\":[\"2I\",\"8g\"],\"1T\":\"8g\"},4p:{3f:[{1x:\"1S\",\"2E\":[\"1l\",\"2D\",\"4N\",\"4a\"],\"1T\":\"1l\"},{1x:\"3g\",\"2E\":[1k]}],\"1T\":\"1l\"},fi:{3f:[{1x:\"1S\",\"2E\":[\"2A\"]},{1x:\"6m\",7S:1}],\"1T\":\"2A\"},fh:{3f:[{1x:\"1S\",\"2E\":[\"2A\"]},{1x:\"6m\",7S:1}],\"1T\":\"2A\"},bs:{1x:\"1S\",\"1T\":\"2L\"},jt:{1x:\"6m\",7S:0,\"1T\":15},8G:{3f:[{1x:\"1S\",\"2E\":[\"2K\",\"1H\",\"4a\"],\"1T\":\"4a\"},{1x:\"3g\",\"2E\":[1k]}],\"1T\":\"4a\"},2l:{3f:[{1x:\"1S\",\"2E\":[\"1n\",\"eM\",\"4a\"]},{1x:\"3g\",\"2E\":[1k]}],\"1T\":\"1n\"},4U:{3f:[{1x:\"1S\",\"2E\":[\"1l\",\"2D\",\"4a\"],\"1T\":\"1l\"},{1x:\"3g\",\"2E\":[1k]}],\"1T\":\"1l\"},3i:{1x:\"1S\",\"2E\":[\"2I\",\"2T\"],\"1T\":\"2I\"},3W:{1x:\"3g\",\"1T\":1s},cU:{1x:\"3g\",\"1T\":1s},5q:{1x:\"3g\",\"1T\":1s},3r:{3f:[{1x:\"1S\",\"2E\":[\"bl\",\"2T\",\"4a\"]},{1x:\"3g\",\"2E\":[1k]}],\"1T\":\"bl\"},fg:{1x:\"3g\",\"1T\":1s},ft:{1x:\"3g\",\"1T\":1s},eY:{1x:\"3g\",\"1T\":1k},87:{1x:\"3g\",\"1T\":1k},c5:{1x:\"3g\",\"1T\":1s},g2:{1x:\"3g\",\"1T\":1k},fI:{1x:\"3g\",\"1T\":1s},cj:{1x:\"1S\",\"2E\":[\"2I\",\"8g\"],\"1T\":\"2I\"},5X:{1x:\"1S\"},aC:{1x:\"3g\",\"1T\":1k},cy:{1x:\"1S\",\"1T\":\"ju 6Z 1l\"},9r:{1x:\"1S\",\"1T\":\"fq 6Z 1l\"},jv:{1x:\"1S\",\"1T\":\"jw\"},jx:{1x:\"1S\",\"1T\":\"jy\"},jz:{1x:\"1S\",\"1T\":\"jA\"},9S:{1x:\"1S\",\"1T\":\"fq 6Z 2l\"}};1a D={4p:{3f:[{1x:\"1S\",\"2E\":[\"1l\",\"2D\",\"4a\"],\"1T\":\"1l\"},{1x:\"3g\",\"2E\":[1k]}],\"1T\":\"1l\"},3i:{1x:\"1S\",\"2E\":[\"2I\",\"2T\"],\"1T\":\"2I\"},9S:{1x:\"1S\",\"1T\":\"jB c0 1N 6Z 2l\"},cy:{1x:\"1S\",\"1T\":\"jC 6Z 1l\"},9r:{1x:\"1S\",\"1T\":\"k2 2b c0 1N 6Z 1l\"}};1a a=\"aZ\";1a j=\"1m\";1a k=20;1a u=[\"c7\",\"f9\",\"cB\",\"fd\",\"ex\",\"eE\"];1a w=9T;1a x=1.1;1a c=0.5;1a e;1a F={};1a t=v([]);1a r;1a f=1n.jF||1;1a p;1a l=1s;1a d=q.1f.2O.9E?\"4H(\":\"aS(\";1a C=q.1f.2O.9E?\",0)\":\")\";1a h=1h;1a G;1a H=(17(){1a L,O,N,M,K;1b K})();1a y=17(){1b\"k3$jg\"+\"p\".80()+\" kt$\"+\"dR.3.7\".4J(\"v\",\"\")+\" kv$\"+\"c\".80()+((1n.bj$bc&&q.1U(1n.bj$bc)===\"1S\")?\" kw$\"+1n.bj$bc.5j():\"\")};17 i(M){1a L,K;L=\"\";1V(K=0;K .1m-5J > 24\",{2a:\"3a\",2q:\"3a\"},\"1m-9P-4T\",1s);q.5V(L.7w(\" \")+\":5Y(.1m-5U-fF-1e-4T)> .1m-5J:5Y(.1m-5U-fF-1e-4T) > 24\",{1e:\"2Q% !2m;\"},\"1m-9P-4T\",1s)}3o(M){}}17 J(){1a L=1h,M=1h,K=17(){1n.kz(1p.3k.8r,1p.3k.8u);1n.bF(1v 1u(\"7s\"))};M=fK(17(){1a P=1n.3K===90||1n.3K===-90;1a O=1n.4O;1a N=(P?fM.kA:fM.kB)*0.85;if((L===1h||L===1k)&&((P&&ON)||(!P&&O>N))){L=1k;K()}}},kC);1b M}17 A(){q.5V(\".2Y-3q-7u, .2Y-7h-24\",{6Y:\"fa !2m\",\"2g-1g\":\"0 !2m\",\"2g-1e\":\"0 !2m\",\"26-1g\":\"3a !2m\",\"26-1e\":\"3a !2m\",1e:\"fo !2m\",1g:\"fo !2m\",2n:\"67 !2m\",1H:\"-br !2m\",1P:\"0 !2m\",81:\"3q !2m\",\"-3R-2q\":\"3a !2m\",2q:\"3a !2m\",\"-3R-2a\":\"3a !2m\",2a:\"3a !2m\"},\"8A-8B-4T\");q.5V(\".2Y-7h-24 24, .2Y-7h-24 bK\",{6Y:\"cR-fa !2m\",41:\"0 !2m\",7X:\"0 !2m\",\"2g-1g\":\"0 !2m\",\"2g-1e\":\"0 !2m\",\"26-1g\":\"3a !2m\",\"26-1e\":\"3a !2m\",\"-3R-2q\":\"3a !2m\",2q:\"3a !2m\",\"-3R-2a\":\"3a !2m\",2a:\"3a !2m\"},\"8A-8B-4T\");q.5V(\".2Y-7h-24 bK, .2Y-7h-24 bK > 24\",{1e:\"2A !2m\",1g:\"2A !2m\"},\"8A-8B-4T\");if(q.1f.8P){q.5V(\".2J-2Y .1m-2l .1m-2l-bg\",{6Y:\"3a !2m\"},\"8A-8B-4T\")}if(q.1f.8P&&(q.1f.4B!==\"6p\"||q.1f.7x===44)){q.5V(\".2J-2Y .1m-1l-1n.1m-2D, .2J-2Y .1m-1l-1n.1m-2D:kD\",{\"41-ku\":\"0 !2m\"},\"8A-8B-4T\")}}1a o=17(N,O,L,M,K){13.1M={1Z:1h,1Y:1h,6P:1,1d:1h,2e:0,1A:{1e:0,1g:0},2j:1k};13.1l={1Z:1h,1Y:1h,6P:1,1d:1h,2e:0,1A:{1e:0,1g:0},2j:1k};if(q.1U(N)===\"8K\"){13.1M=N}1j{if(q.1U(N)===\"1S\"){13.1M.1Y=q.6R(N)}}if(q.1U(O)===\"8K\"){13.1l=O}1j{if(q.1U(O)===\"1S\"){13.1l.1Y=q.6R(O)}}13.3P=\"\";13.3t=L;13.1y=M;13.4w=K;13.7T=1h;13.3S=1h;13.1d=1h};o.2t={as:17(M,L,K){1a N=M.8V(\"24\")[0];if(K){13.1M.1d=N||q.$1v(\"24\").29(M)}if(f>1){13.1M.1Y=M.2o(\"3l-1i-2x\");if(13.1M.1Y){13.1M.6P=2}13.1l.1Y=M.2o(\"3l-1l-1i-2x\");if(13.1l.1Y){13.1l.6P=2}}13.1M.1Z=M.2o(\"3l-1i\")||M.2o(\"kG\")||(N?N.7O||N.2o(\"1Z\"):1h);if(13.1M.1Z){13.1M.1Z=q.6R(13.1M.1Z)}13.1M.1Y=13.1M.1Y||13.1M.1Z;if(13.1M.1Y){13.1M.1Y=q.6R(13.1M.1Y)}13.1l.1Z=M.2o(\"3l-1l-1i\")||M.2o(\"7e\");if(13.1l.1Z){13.1l.1Z=q.6R(13.1l.1Z)}13.1l.1Y=13.1l.1Y||13.1l.1Z;if(13.1l.1Y){13.1l.1Y=q.6R(13.1l.1Y)}13.3t=M.2o(\"3l-3t\")||M.2o(\"7g\")||L;13.3S=M.2o(\"3l-3S\");13.4w=M;if(N){13.3P=N.2o(\"3P\")||\"\"}1b 13},bU:17(K){1a L=1h;if(2i.1J>1&&q.1U(2i[1])===\"17\"){L=2i[1]}if(13[K].2e!==0){if(13[K].2j){13.6U(L)}1b}if(13[K].1Y&&13[K].1d&&!13[K].1d.2o(\"1Z\")&&!13[K].1d.2o(\"cn\")){13[K].1d.3m(\"1Z\",13[K].1Y)}13[K].2e=1;1v q.bR(13[K].1d||13[K].1Y,{7N:v(17(M){13[K].2j=1s;13[K].2e=M.2p?2:-1;if(M.2p){if(13[K].1A.1e===0&&13[K].1A.1g===0){13[K].1A=M.1F()}if(!13[K].1d){13[K].1d=v(M.24);13[K].1d.2o(\"2k\");13[K].1d.5m(\"2k\");13[K].1d.3P=13.3P;13[K].1A.1e/=13[K].6P;13[K].1A.1g/=13[K].6P}1j{13[K].1d.1z({5S:13[K].1A.1e,6J:13[K].1A.1g});if(13[K].1d.7O&&13[K].1d.7O!==13[K].1d.1Z){13[K].1Y=13[K].1d.7O}1j{if(q.6R(13[K].1d.2o(\"1Z\")||\"\")!==13[K].1Y){13[K].1d.3m(\"1Z\",13[K].1Y)}}}}13.6U(L)}).1D(13)})},8q:17(){13.bU(\"1M\",2i[0])},cf:17(){13.bU(\"1l\",2i[0])},5w:17(){13.7T=1h;if(2i.1J>0&&q.1U(2i[0])===\"17\"){13.7T=2i[0]}13.8q();13.cf()},6U:17(K){if(K){K.2f(1h,13)}if(13.7T&&13.1M.2j&&13.1l.2j){13.7T.2f(1h,13);13.7T=1h;1b}},2j:17(){1b(13.1M.2j&&13.1l.2j)},2p:17(){1b(13.1M.2e===2&&13.1l.2e===2)},6L:17(L){1a K=L===\"1M\"?\"1l\":\"1M\";if(!13[L].2j||(13[L].2j&&13[L].2e===2)){1b 13[L].1Y}1j{if(!13[K].2j||(13[K].2j&&13[K].2e===2)){1b 13[K].1Y}}1b 1h},7j:17(L){1a K=L===\"1M\"?\"1l\":\"1M\";if(!13[L].2j||(13[L].2j&&13[L].2e===2)){1b 13[L].1d}1j{if(!13[K].2j||(13[K].2j&&13[K].2e===2)){1b 13[K].1d}}1b 1h},1F:17(L){1a K=L===\"1M\"?\"1l\":\"1M\";if(!13[L].2j||(13[L].2j&&13[L].2e===2)){1b 13[L].1A}1j{if(!13[K].2j||(13[K].2j&&13[K].2e===2)){1b 13[K].1A}}1b{1e:0,1g:0}},6l:17(L,K){13[L].1A=K},cm:17(L){1a K=L===\"1M\"?\"1l\":\"1M\";if(!13[L].2j||(13[L].2j&&13[L].2e===2)){1b 13[L].6P}1j{if(!13[K].2j||(13[K].2j&&13[K].2e===2)){1b 13[K].6P}}1b 1},7i:17(K){13.1d=13.7j(K)}};1a z=17(L,K){13.1y=1v q.7A(b);13.1o=v(17(){if(2i.1J>1){1b 13.79(2i[0],2i[1])}1b 13.fj(2i[0])}).1D(13.1y);13.gl=1v q.7A(D);13.3G=[];13.1i=1h;13.7m=1h;13.3H=v(L).1C(\"3Y kH 2I\",17(M){M.2h()});13.id=1h;13.1d=1h;13.8T=1h;13.4e=1h;13.8U=1h;13.72=1h;13.7H={1e:0,1g:0};13.1A={1e:0,1g:0};13.1K={1e:0,1g:0};13.3w={1e:0,1g:0};13.21={1H:0,1P:0,2K:0,2L:0};13.2p=1k;13.1G=1k;13.5O=1h;13.b7=1h;13.6g=v(17(){if(13.1G){if(G){13.3n.1z({1g:1n.4O,1H:1q.3b(G.6I().1H)})}13.1i.1d.1z({\"26-1g\":1q.2g(13.1i.1F(\"1l\").1g,13.7b())});13.1i.1d.1z({\"26-1e\":1q.2g(13.1i.1F(\"1l\").1e,13.7L())})}13.8h(2i[0])}).1D(13);13.ck=v(17(M){3u(13.b7);13.b7=v(13.6g).2G(10,M.1x===\"6y\")}).2H(13);13.cz=v(17(M){if(!M.2e&&13.1G){13.51()}if(M.2e&&M.2e.9X===13.id&&!13.1G){13.2l()}}).2H(13);if(y){r.3d(q.$1v(\"2Z\",{},{6Y:\"3a\",5a:\"3q\"}).3d(1p.9V(y)));y=2P}13.1r=1h;13.1c=1h;13.3r=1h;13.cg=1h;13.6W=0;13.9a=1s;13.6w=1h;13.5p=1h;13.75=1h;13.3n=1h;13.49=1h;13.3W=1h;13.5D=1h;13.6G=1h;13.5I=1h;13.7E=1h;13.5C=1h;13.4F=1h;13.57=[];13.2u={};13.9v=0;13.c4=1h;13.4I(K)};z.2t={gn:17(K){13.1y.8W(1n[j+\"7A\"]||{});13.1y.9N(13.3H.2o(\"3l-1y\")||\"\");if(!q.1f.9J){13.1o(\"aC\",1k)}if(q.1f.2J||13.1o(\"aC\")){13.1y.8W(13.gl.gm());13.1y.8W(1n[j+\"kI\"]||{});13.1y.9N(13.3H.2o(\"3l-2J-1y\")||\"\")}if(q.1U(K)===\"1S\"){13.1y.9N(K||\"\")}1j{13.1y.8W(K||{})}if(13.1o(\"5X\")){13.1o(\"5X\",13.1o(\"5X\").4J(\",\",\" \"))}if(13.1o(\"8G\")===1k){13.1o(\"8G\",\"4a\")}if(13.1o(\"3r\")===1k){13.1o(\"3r\",\"4a\")}4A(13.1o(\"3r\")){1E\"4a\":13.6W=0;1I;1E\"2T\":13.6W=6k;1I;1E\"bl\":1T:13.6W=2;1I}if(13.1o(\"4p\")===\"4a\"){13.1o(\"4p\",1k)}if(13.1o(\"2l\")===\"4a\"){13.1o(\"2l\",1k)}if(13.1o(\"4U\")===\"4a\"){13.1o(\"4U\",1k)}if(q.1f.2J&&13.1o(\"4p\")===\"1l\"&&13.1o(\"bs\")===\"2F\"){if(13.1o(\"2l\")){13.1o(\"4p\",1k)}1j{13.1o(\"4C\",\"2I\")}}},4I:17(N){1a L;1a K=13;1a M;if(13.9v<1){13.gn(N);if(l&&!13.1o(\"c5\")){1b}13.4e=13.3H.bo(\"24\");13.8U=13.4e?13.4e.2o(\"1Z\"):1h;13.72=v(13.3H).2o(\"7g\");v(13.3H).5m(\"7g\");if(13.4e&&13.4e.4g.9c===\"kJ\"){13.8U=1h;1a R=q.$1v(\"2Z\").1B(\"2Y-7h-24\").29(1p.3k);1a P=13.4e.4g.ca(1s);P.2o(\"2k\");P.5m(\"2k\");1a O=P.bo(\"24\");O.2o(\"2k\");O.5m(\"2k\");v(O).1C(\"5w\",17(){K.1A=v(O).1F();R.5d();1a S=K.4e.ca(1k);v(S).1z({5S:K.1A.1e,6J:K.1A.1g}).3m(\"1Z\",K.4e.7O||K.4e.1Z);K.4e=K.3H.7K(S,K.4e.4g);K.4I()});R.3d(P);++13.9v;1b}}M=1v o().as(13.3H,13.72,1s);M.6l(\"1M\",13.1A);if(!M.1M.1Y){if(++13.9v<=w){13.c4=4y(17(){K.4I()},2Q)}1b}13.7m=M;13.1i=13.7m;g(13.3H);13.id=13.3H.2o(\"id\")||\"1m-\"+1q.52(1q.6f()*q.63());13.3H.3m(\"id\",13.id);13.1d=q.$1v(\"5J\").1B(\"1m-5J\");13.1d.g1(13.1i.1M.1d).1B(13.1o(\"5X\"));if(13.1o(\"g2\")!==1s){13.1d.1C(\"kK\",17(S){S.2h();1b 1k})}13.1d.1B(\"1m-\"+13.1o(\"4C\")+\"-1l\");if(!13.1o(\"2l\")){13.1d.1B(\"1m-5U-2l\")}13.1r={1d:q.$1v(\"2Z\",{\"4h\":\"1m-1r\"},{1H:0}).29(13.1d),1i:q.$1v(\"24\",{1Z:\"3l:1i/g6;g8,ga/gc=\"},{2n:\"67\",1H:0,1P:0}),1e:0,1g:0,34:{x:0,y:0},4l:{x:0,y:0},1A:{1e:0,1g:0},41:{x:0,y:0},dx:0,dy:0,69:1k,4f:17(){if(q.1f.2O.2q){13.1d.1z({2q:\"aS(-br, -br)\"})}1j{13.1d.1z({1H:-g5})}}};13.1r.4f();13.1r.1d.3d(13.1r.1i);13.1c={1d:q.$1v(\"2Z\",{\"4h\":\"1m-1l-1n\"},{1H:-eW}).1B(13.1o(\"5X\")).29(r),1i:q.$1v(\"24\",{1Z:\"3l:1i/g6;g8,ga/gc=\"},{2n:\"67\"}),cD:0,1e:0,1g:0,5N:0,4O:0,1A:{1e:\"2A\",7r:\"2C\",1g:\"2A\",7q:\"2C\"},1W:13.1o(\"4p\"),2n:13.1o(\"bs\"),7J:13.1o(\"4C\"),4v:1k,2s:1k,2V:1k,4X:1k,6x:v(17(){13.1c.4X=2i[0]!==1k;13.1d[13.1c.4X?\"1R\":\"1B\"](\"1m-5U-1l\")}).1D(13),4f:v(17(){1a S=v(13.1d).1Q(\"cr\");13.1c.1d.1O(\"2W\");13.1c.1d.1z({1H:-eW}).29(r);13.1c.1d.1R(\"1m-93 1m-p-\"+(13.1c.1W===\"1l\"?13.1c.2n:13.1c.1W));if(!13.1G&&S){S.2R()}13.1c.1i.2o(\"2k\");13.1c.1i.5m(\"2k\")}).1D(13),9y:v(17(S){13.1d[S===1k?\"1B\":\"1R\"](\"1m-5U-1l\");13.1d[S===\"2D\"?\"1B\":\"1R\"](\"1m-2D-1l\");13.1c.1d[S===\"2D\"?\"1B\":\"1R\"](\"1m-2D\");13.1c.1d[S===\"4N\"?\"1B\":\"1R\"](\"1m-4N\");if(S!==\"1l\"){13.1d.1R(\"1m-2F-1l\");13.1c.1d.1R(\"1m-2F\")}13.1c.1W=S;if(S===1k){13.1c.6x(1k)}}).1D(13)};13.1c.1d.3d(13.1c.1i);13.1c.9y(13.1o(\"4p\"));13.1c.1i.5m(\"1e\");13.1c.1i.5m(\"1g\");if(89(H)!==\"2P\"){1a Q=1q.52(1q.6f()*q.63());v(13.1d).2N(\"cr\",q.$1v(((1q.52(1q.6f()*cI)+1)%2)?\"cp\":\"2Z\").91({id:\"8X\"+Q}).1z({6Y:\"cR\",81:\"3q\",5a:\"5E\",gk:H[1],kL:H[2],ge:H[3],kM:\"kN-kO\",2n:\"67\",1H:8,1P:8,9e:\"2A\",1e:\"2A\",kP:\"2L\",fT:\"kF\",gj:fP}).6h(i(H[0])));if(v(v(13.1d).1Q(\"cr\")).8V(\"a\")[0]){v(v(v(13.1d).1Q(\"cr\")).8V(\"a\")[0]).1C(\"2b 1X\",17(S){S.5L();1n.8E(13.7e)}).91({id:\"cO\"+Q})}q.5V(\"#\"+13.id+\" > 5J.1m-5J > #\"+(\"8X\"+Q)+\",#\"+13.id+\" > 5J.1m-5J > #\"+(\"8X\"+Q)+\" > #\"+(\"cO\"+Q)+\",9W 3k .1m-2l > #\"+(\"8X\"+Q)+\",9W 3k .1m-2l > #\"+(\"8X\"+Q)+\" > #\"+(\"cO\"+Q),{6Y:\"cR !2m;\",5a:\"5E !2m;\",gk:H[1]+\" !2m;\",\"ks-1A\":H[2]+\"2C !2m;\",\"z-8t\":\"fP !2m;\"},\"1m-9P-4T\",1s)}if((L=(\"\"+13.1o(\"fi\")).3M(/^([0-9]+)?(2C|%)?$/))){13.1c.1A.7r=L[2]||\"2C\";13.1c.1A.1e=(2B(L[1])||\"2A\")}if((L=(\"\"+13.1o(\"fh\")).3M(/^([0-9]+)?(2C|%)?$/))){13.1c.1A.7q=L[2]||\"2C\";13.1c.1A.1g=(2B(L[1])||\"2A\")}if(13.1c.1W===\"2D\"){13.1d.1B(\"1m-2D-1l\");13.1c.1d.1B(\"1m-2D\");if(13.1c.1A.1e===\"2A\"){13.1c.1A.7r=\"%\";13.1c.1A.1e=70}if(13.1c.1A.1g===\"2A\"){13.1c.1A.7q=\"%\"}}1j{if(13.1o(\"1l-2n\").3M(/^#/)){if(13.1c.4v=v(13.1o(\"1l-2n\").4J(/^#/,\"\"))){if(v(13.1c.4v).1F().1g>50){if(13.1c.1A.1e===\"2A\"){13.1c.1A.7r=\"%\";13.1c.1A.1e=2Q}if(13.1c.1A.1g===\"2A\"){13.1c.1A.7q=\"%\";13.1c.1A.1g=2Q}}}1j{13.1o(\"1l-2n\",\"2L\")}}if(13.1c.1W===\"4N\"){if(13.1c.1A.1e===\"2A\"){13.1c.1A.7r=\"2C\"}if(13.1c.1A.1g===\"2A\"){13.1c.1A.7q=\"2C\"}}if(13.1c.1W===\"1l\"){if(13.1c.1A.1e===\"2A\"||13.1o(\"1l-2n\")===\"2F\"){13.1c.1A.7r=\"%\";13.1c.1A.1e=2Q}if(13.1c.1A.1g===\"2A\"||13.1o(\"1l-2n\")===\"2F\"){13.1c.1A.7q=\"%\";13.1c.1A.1g=2Q}}if(13.1o(\"1l-2n\")===\"2F\"){13.1d.1B(\"1m-2F-1l\")}}13.1c.2n=13.1c.4v?\"4v\":13.1o(\"1l-2n\");13.1r.41.x=2B(13.1r.1d.3F(\"41-1P-1e\")||\"0\");13.1r.41.y=2B(13.1r.1d.3F(\"41-1H-1e\")||\"0\");13.1i.8q(17(){if(13.1i.1M.2e!==2){1b}13.1i.7i(\"1M\");13.1A=13.1i.1d.1F();13.f1();13.2p=1s;if(13.1o(\"87\")===1s){I(\"c7\",13.id);if(q.1f.2J){13.8h()}1j{13.5B()}}}.1D(13));if(13.1o(\"87\")!==1s||13.1o(\"4C\")===\"2T\"){13.1i.5w(v(17(S){13.7p(S,1s)}).1D(13));13.5p=v(13.8a).1D(13).2G(8z)}13.f7();13.du()},2h:17(){3u(13.c4);13.fc();if(13.1c){13.1c.1d.5d()}if(13.4F){13.4F.2h();13.4F=1h}if(13.3n){13.3n.5d()}if(13.1G){v(q.1f.4n()).1z({81:\"\"})}v(13.3G).3e(17(K){v(K.4w).1R(\"1m-75-78\").1R(13.1o(\"5X\")||\"1m-$kr-4T-4h-6Z-2R$\")},13);if(13.4e){13.3H.3d(13.4e);if(13.8U){13.4e.3m(\"1Z\",13.8U)}}if(13.72){13.3H.3m(\"7g\",13.72)}if(13.1d){13.1d.5d()}},7p:17(L,M){1a K=13.1i;if(L.1l.2e!==2){13.1i=L;13.2p=1s;13.1c.6x(1k);1b}13.1i=L;13.1i.7i(13.1G?\"1l\":\"1M\");13.1c.1i.1Z=13.1i.6L(\"1l\");13.1c.1i.3P=13.1i.3P;13.1c.1d.1R(\"1m-4N\");13.1c.1i.2o(\"2k\");13.1c.1i.5m(\"2k\");13.1c.1d.1F();4y(v(17(){1a O=13.1c.1i.1F();1a N;13.3w=13.1i.1F(\"1l\");if(O.1e*O.1g>1&&O.1e*O.1g<13.3w.1e*13.3w.1g){13.3w=O}13.1K=q.3C(13.3w);if(13.1c.1W===\"4N\"){13.1c.1d.1B(\"1m-4N\")}13.fC();13.1r.1i.1Z=13.1i.1d.7O||13.1i.1d.1Z;13.1r.1i.3P=13.1i.3P;13.1c.6x(13.1c.1W&&!(13.1G&&13.1c.1W===\"4N\"));13.2p=1s;13.5O=1h;13.6g();13.1d.1B(\"1m-2p\");13.c8();if(K!==13.1i){I(\"f9\",13.id,K.4w,13.1i.4w);if(13.9t){N=13.9t;13.9t=1h;13.4x(N.1i,N.eZ)}}1j{if(!!M){I(\"c7\",13.id)}}if(13.5l){13.1d.36(13.5l.1x,13.5l)}1j{if(13.1G&&13.1o(\"3i\")===\"2T\"){13.4Z()}1j{if(!!M){13.5B()}}}}).1D(13),k6)},f7:17(){1a L=13.id;1a K;1a M;M=1v f4(\"1l\\\\\\\\-id(\\\\\\\\s+)?:(\\\\\\\\s+)?\"+L+\"($|;)\");if(q.1f.2O.cT){K=q.$A(1p.c2(\\'[3l-1l-id=\"\\'+13.id+\\'\"]\\'));K=v(K).6c(q.$A(1p.c2(\\'[cb*=\"1l-id\"]\\')).38(17(N){1b M.3h(N.2o(\"cb\")||\"\")}))}1j{K=q.$A(1p.az(\"A\")).38(17(N){1b L===N.2o(\"3l-1l-id\")||M.3h(N.2o(\"cb\")||\"\")})}v(K).3e(17(O){1a N;1a P;v(O).1C(\"2I\",17(Q){Q.4W()});N=1v o().as(O,13.72);if((13.1i.1l.1Z.3y(N.1l.1Y)||13.1i.1l.1Y.3y(N.1l.1Y))&&(13.1i.1M.1Z.3y(N.1M.1Y)||13.1i.1M.1Y.3y(N.1M.1Y))){v(N.4w).1B(\"1m-75-78\");N=13.1i;N.4w=O}if(!N.3S&&13.1i.3S){N.3S=13.1i.3S}P=v(17(){13.4x(N)}).1D(13);v(O).1C(\"7l\",17(Q){if(\"f3\"in Q){Q.f3()}},5);v(O).1C(\"2b \"+(13.1o(\"cj\")===\"8g\"?\"8j 8M\":\"1X\"),v(17(R,Q){if(13.6v){3u(13.6v)}13.6v=1k;if(R.1x===\"8j\"){13.6v=v(P).2G(Q)}1j{if(R.1x===\"2b\"||R.1x===\"1X\"){P()}}}).2H(13,60)).1B(13.1o(\"5X\")).1B(\"1m-75\");if(13.1o(\"87\")!==1s){N.8q();N.cf()}13.3G.33(N)},13)},4x:17(K,M){if(!13.2p){13.9t={1i:K,eZ:M};1b}if(!K||K===13.1i){1b 1k}13.43(1h,1s);13.2p=1k;13.1d.1R(\"1m-2p\");13.5p=v(13.8a).1D(13).2G(8z);1a L=v(17(T){1a N,U,S,P,O,R,Q=(q.1f.2M<10)?\"1F\":\"6I\";13.c8();T.7i(\"1M\");if(!T.1d){13.2p=1s;13.1d.1B(\"1m-2p\");1b}13.9w(T);N=13.1i.1d[Q]();if(13.1G){T.7i(\"1l\");S=q.$1v(\"2Z\").1B(\"1m-2l-bg\");if(q.1f.2O.9g||q.1f.2M<10){S.3d(q.$1v(\"24\",{cn:T.6L(\"1l\")+\" \"+T.cm(\"1l\")+\"x\",1Z:T.6L(\"1l\"),3P:T.3P}).1z({2y:0}))}1j{S.3d(1v q.aQ(T.1d).5F(k).7j().1z({2y:0}))}v(S).1z({\"z-8t\":-99}).29(13.3n)}if(13.1G&&13.1c.1W===\"1l\"&&13.1o(\"3i\")===\"2T\"){v(T.1d).1z({2y:0}).29(13.1d);U=N;O=[T.1d,13.1i.1d];R=[{2y:[0,1]},{2y:[1,0]}];v(T.1d).1z({\"26-1e\":1q.2g(T.1F(\"1l\").1e,13.7L()),\"26-1g\":1q.2g(T.1F(\"1l\").1g,13.7b())})}1j{13.1d.1z({1g:13.1d[Q]().1g});13.1i.1d.1z({2n:\"67\",1H:0,1P:0,2K:0,2L:0,1e:\"2Q%\",1g:\"2Q%\",\"26-1e\":\"\",\"26-1g\":\"\"});v(T.1d).1z({\"26-1e\":1q.2g(T.1F(13.1G?\"1l\":\"1M\").1e,13.1G?13.7L():6k),\"26-1g\":1q.2g(T.1F(13.1G?\"1l\":\"1M\").1g,13.1G?13.7b():6k),2n:\"k8\",1H:0,1P:0,2y:0,2q:\"\"}).29(13.1d);U=v(T.1d)[Q]();if(!M){v(T.1d).1z({\"2g-1e\":N.1e,1g:N.1g,\"26-1e\":N.1e,\"26-1g\":\"\"})}13.1d.1z({1g:\"\",81:\"\"}).1F();v(T.1d).1F();O=[T.1d,13.1i.1d];R=[q.2c({2y:[0,1]},M?{3J:[0.6,1]}:{\"2g-1e\":[N.1e,U.1e],\"26-1e\":[N.1e,U.1e],1g:[N.1g,U.1g]}),{2y:[1,0]}]}if(13.1G){if(13.49.4D&&S.4D){P=v(13.49.4D).3F(\"2y\");if(q.1f.7y){O=O.6c([S.4D]);R=R.6c([{2y:[0.co,P]}])}1j{O=O.6c([S.4D,13.49.4D]);R=R.6c([{2y:[0.co,P]},{2y:[P,0.co]}])}}}1v q.9H(O,{5G:(M||13.1o(\"fI\"))?M?k9:ka:0,2a:M?\"6b-6d(0.a8, 0.ch, 0.eT, 1)\":(N.1e===U.1e)?\"9U\":\"6b-6d(0.25, .1, .1, 1)\",7z:v(17(){13.1i.1d.2R().2o(\"2k\");13.1i.1d.5m(\"2k\");v(T.1d).1z(13.1G?{1e:\"2A\",1g:\"2A\"}:{1e:\"\",1g:\"\"}).1z({\"2g-1e\":\"\",\"2g-1g\":\"\",2y:\"\",\"26-1e\":1q.2g(T.1F(13.1G?\"1l\":\"1M\").1e,13.1G?13.7L():6k),\"26-1g\":1q.2g(T.1F(13.1G?\"1l\":\"1M\").1g,13.1G?13.7b():6k)});if(13.1G){13.49.2R();13.49=2P;13.49=S.3V(\"z-8t\",-2Q);v(13.49.4D).1z({2y:\"\"});if(13.3W){if(T.3t){if(T.3S){13.3W.6h(\"\").3d(q.$1v(\"a\",{7e:T.3S}).1C(\"2b 1X\",13.aT.1D(13)).6h(T.3t))}1j{13.3W.6h(T.3t).1B(\"1m-5t\")}}1j{13.3W.1R(\"1m-5t\")}}}13.7p(T)}).1D(13),cu:v(17(V,W){if(2P!==V.3J){W.3V(\"2q\",\"3J(\"+V.3J+\")\")}})}).4I(R)}).1D(13);if(13.1G){K.5w(L)}1j{K.8q(L)}},9w:17(L){1a K=1k;v(13.3G).3e(17(M){v(M.4w).1R(\"1m-75-78\");if(M===L){K=1s}});if(K&&L.4w){v(L.4w).1B(\"1m-75-78\")}if(13.4F){13.4F.fE(L.dM)}},fC:17(K){if(13.1i.3t&&13.1o(\"8G\")!==\"4a\"&&13.1c.1W!==\"2D\"){if(!13.1c.3t){13.1c.3t=q.$1v(\"2Z\",{\"4h\":\"1m-3t\"}).29(13.1c.1d.1B(\"3t-\"+13.1o(\"8G\")))}13.1c.3t.6h(13.1i.3t)}},5B:17(K,N,L){1a M;if(!13.1G){if(13.6W<=0){1b}if(L!==1s){13.6W--}}if(N===2P||N===1h){if(!13.1c.2s&&!13.1c.2V){if(13.1o(\"4p\")&&(13.1c.4X||!13.1i.2j())&&!(q.1f.2J&&13.1o(\"2l\")&&13.1c.1W===\"1l\"&&13.1c.2n===\"2F\")){if(13.1c.7J===\"8g\"){N=13.1o(\"cy\")}1j{if(13.1c.7J===\"2I\"){N=13.1o(\"9r\")}}}1j{N=13.1o(\"2l\")?13.1o(\"9S\"):\"\"}}1j{N=13.1o(\"2l\")?13.1o(\"9S\"):\"\"}}if(!N){13.cC();1b}M=13.1d;if(!13.3r){13.3r=q.$1v(\"2Z\",{\"4h\":\"1m-3r\"});13.cg=q.$1v(\"cp\",{\"4h\":\"1m-3r-kc\"}).3d(1p.9V(N)).29(13.3r);v(13.3r).29(13.1d)}1j{v(13.cg).6h(N)}13.3r.1z({\"2a-cd\":\"\"}).1R(\"1m-3r-3q\");if(13.1G){M=13.5I}1j{if((13.1c.2s||13.1c.2V)&&13.1c.1W!==\"2D\"&&13.1c.2n===\"2F\"){M=13.1c.1d}}if(K===1s){4y(v(17(){13.3r.1B(\"1m-3r-3q\")}).1D(13),16)}13.3r.29(M)},cC:17(){if(13.3r){13.3r.1z({\"2a-cd\":\"fx\"}).1B(\"1m-3r-3q\")}},8a:17(){if(!13.6w){13.6w=q.$1v(\"2Z\",{\"4h\":\"1m-kd\"});13.1d.3d(13.6w);13.6w.1F()}13.6w.1B(\"fw\")},c8:17(){3u(13.5p);13.5p=1h;if(13.6w){v(13.6w).1R(\"fw\")}},6l:17(M,Q){1a P=q.3C(13.1c.1A),O=(!13.1G&&13.1c.4v)?v(13.1c.4v).1F():{1e:0,1g:0},L,K,N=13.1A,R={x:0,y:0};Q=Q||13.1c.2n;13.7H=13.1i.1d.1F();13.1A=13.1i.1d.1F();13.21=13.1i.1d.6I();if(!O.1g){O=13.1A}if(13.1o(\"ft\")===1k||13.1c.1W===1k||13.1c.1W===\"4N\"){M=1k}if(13.1c.1W===\"4N\"){if(P.1e===\"2A\"){P.1e=13.3w.1e}if(P.1g===\"2A\"){P.1g=13.3w.1g}}if(13.1G&&13.1c.1W===\"2D\"){P.1e=70;P.1g=\"2A\"}if(13.1c.1W===\"2D\"&&P.1g===\"2A\"){13.1c.1e=2B(P.1e/2Q)*1q.2g(O.1e,O.1g);13.1c.1g=13.1c.1e}1j{if(13.1c.1W===\"1l\"&&Q===\"2F\"){13.1A=13.1d.1F();O=13.1A;13.21=13.1d.6I();13.1c.1e=O.1e;13.1c.1g=O.1g}1j{13.1c.1e=(P.7r===\"%\")?2B(P.1e/2Q)*O.1e:6e(P.1e);13.1c.1g=(P.7q===\"%\")?2B(P.1g/2Q)*O.1g:6e(P.1g)}}if(13.1c.1W===\"4N\"){K=1q.2g(1q.2g(13.1c.1e/13.3w.1e,13.1c.1g/13.3w.1g),1);13.1c.1e=13.3w.1e*K;13.1c.1g=13.3w.1g*K}13.1c.1e=1q.4c(13.1c.1e);13.1c.1g=1q.4c(13.1c.1g);13.1c.cD=13.1c.1e/13.1c.1g;13.1c.1d.1z({1e:13.1c.1e,1g:13.1c.1g});if(M){O=13.1G?13.3n.1F():13.1c.1d.1F();if(!13.1G&&(13.7H.1e*13.7H.1g)/(13.3w.1e*13.3w.1g)>0.8){13.1K.1e=1.5*13.3w.1e;13.1K.1g=1.5*13.3w.1g}1j{13.1K=q.3C(13.3w)}}if(13.1c.1W!==1k&&!13.1c.2s&&!(13.1G&&13.1o(\"3i\")===\"2T\")){if((13.7H.1e*13.7H.1g)/(13.1K.1e*13.1K.1g)>0.8){13.1K=q.3C(13.3w);13.1c.6x(1k)}1j{13.1c.6x(1s)}}13.1c.1i.1z({1e:13.1K.1e,1g:13.1K.1g});13.1K.5S=13.1K.1e;13.1K.6J=13.1K.1g;L=13.1c.1d.97();13.1c.5N=1q.4c(L.1e);13.1c.4O=1q.4c(L.1g);13.1r.1e=1q.4c(13.1c.5N/(13.1K.1e/13.1A.1e));13.1r.1g=1q.4c(13.1c.4O/(13.1K.1g/13.1A.1g));13.1r.1d.1z({1e:13.1r.1e,1g:13.1r.1g});13.1r.1i.1z(13.1A);q.2c(13.1r,13.1r.1d.1F());if(13.1c.2s){3u(13.3O);13.3O=1h;if(13.1r.69){13.1r.34.x*=(13.1A.1e/N.1e);13.1r.34.y*=(13.1A.1g/N.1g);R.x=13.1r.4l.x;R.y=13.1r.4l.y}1j{R.x=13.21.1P+13.1r.1e/2+(13.1r.34.x*(13.1A.1e/N.1e));R.y=13.21.1H+13.1r.1g/2+(13.1r.34.y*(13.1A.1g/N.1g))}13.5y(1h,R)}},8h:17(O){1a R;1a Q;1a K;1a P;1a N;1a M;1a L=v(13.1d).1Q(\"cr\");K=s(5);N=13.1c.2n;P=13.1G?\"2F\":13.1c.4v?\"4v\":13.1o(\"1l-2n\");M=13.1G&&13.1c.1W===\"1l\"?13.6G:1p.3k;if(13.1G){K.y=0;K.x=0}if(!O){13.6l(1s,P)}R=13.21.1H;if(13.1c.1W!==\"2D\"){if(O){13.6l(1k);1b}4A(P){1E\"2F\":1E\"4v\":R=0;Q=0;1I;1E\"1H\":R=13.21.1H-13.1c.1g-13.1o(\"1l-5K\");if(K.1H>R){R=13.21.2K+13.1o(\"1l-5K\");P=\"2K\"}Q=13.21.1P;1I;1E\"2K\":R=13.21.2K+13.1o(\"1l-5K\");if(K.2KQ&&K.2L>=13.21.2L+13.1o(\"1l-5K\")+13.1c.1e){Q=13.21.2L+13.1o(\"1l-5K\");P=\"2L\"}1I;1E\"2L\":1T:Q=13.21.2L+13.1o(\"1l-5K\");if(K.2LR||K.2KQ||K.2L13.21.2L||N.y<13.21.1H||N.y>13.21.2K){13.43(O);1b}}1j{if(13.1c.1d!==O.8s()&&!((13.1c.2n===\"2F\"||13.1c.1W===\"2D\")&&13.1c.1d.9s(O.8s()))&&!13.1d.9s(O.8s())){13.43(O);1b}}}).2H(13));13.1d.2N(\"1m:4o:43:1t\",K).1C(K,M,20)},9C:17(){1a K=13.1d.1Q(\"1m:4o:43:1t\");1a L=13.1d.1Q(\"1m:4o:43:fn\");13.1d.1O(K,L);13.1d.2z(\"1m:4o:43:fn\")},aN:17(){1a K=\"6t\";if(q.1f.4z!==\"7P\"){if(1n.3N.7n){K+=\" 4G\"}1j{if(1n.3N.8L){K+=\" aV\"}1j{K+=\" 7v\"}}}1a L=13.1d.1Q(\"1m:4o:5y:fn\",v(13.5y).2H(13));13.1d.2N(\"1m:4o:5y:1t\",K).1C(K,L)},dd:17(){1a K=13.1d.1Q(\"1m:4o:5y:1t\");1a L=13.1d.1Q(\"1m:4o:5y:fn\");13.1d.1O(K,L)},f1:17(){13.gh=13.5R.1D(13);13.1d.1C([\"5s\",1n.3N.7n?\"5Z\":\"f5\"],v(17(K){if((q.1f.8P)&&13.1o(\"4p\")&&13.1o(\"4C\")!==\"2I\"&&K.1x===\"5s\"){K.4W();if(q.1f.7y){K.5L()}}if(!13.1c.2s){1b}if(13.1c.2n===\"2F\"&&K.5f()){13.1r.4l=K.7M()}}).2H(13),10);13.1d.1C([\"48\",1n.3N.7n?\"4d\":\"f6\"],v(17(K){if(K.6B()&&K.5f()){13.1r.7Z=1k}}).2H(13),10);13.aN();if(13.1o(\"4p\")){13.8p(13.1o(\"4C\")===\"2I\");13.9k(13.1o(\"4C\")===\"2I\")}13.1d.1C(\"7l\",17(K){K.5L()},10).1C(\"1X\",v(17(K){13.1d.cA(\"f8\",\"2I\");if(13.1G){13.3n.36(\"1X\",K)}}).1D(13),15);if(13.1o(\"2l\")){13.1d.1C(\"2b 1X\",v(13.2l).2H(13),15)}1j{13.1d.1C(\"2b 1X\",v(13.aT).2H(13),15)}if(13.3G.1J>1){13.cJ()}if(!q.1f.2J&&13.1o(\"eY\")){13.1d.1C(\"5c\",13.fb.2H(13))}if(q.1f.2J){13.dr()}v(1n).1C(q.1f.2J?\"7s\":\"7s 6y\",13.ck);if(13.1o(\"5q\")){v(1n).1C(\"fQ\",13.cz)}},fc:17(){if(13.1d){13.1d.1O(\"5c\")}v(1n).1O(\"7s 6y\",13.ck);if(13.1o(\"5q\")){v(1n).1O(\"fQ\",13.cz)}v(13.3G).3e(17(K){v(K.4w).cx()})},4Z:17(Q){1a R;1a P;1a N;1a O;1a K;1a L=0;1a M=0;if(!13.1i.2j()||!13.2p||!13.1c.4X||13.1c.2s||13.1c.2V){if(!13.1i.2j()&&!13.5l){if(Q){13.5l=m(Q);Q.4u()}13.1i.5w(13.7p.1D(13));if(!13.5p){13.5p=v(13.8a).1D(13).2G(8z)}}1b}if(Q&&Q.1x===\"4G\"&&Q.2r===\"3v\"){1b}if(!13.1o(\"4p\")&&13.1o(\"2l\")&&!13.1G){13.1c.2s=1s;1b}13.1c.2V=1s;if(13.1G&&13.1c.1W===\"1l\"){O=13.1i.1d.8k();13.5D.1B(\"1m-1l-in\");K=13.5I.8k();M=((O.1P+O.2L)/2-(K.1P+K.2L)/2);L=((O.1H+O.2K)/2-(K.1H+K.2K)/2)}13.1c.1i.1O(\"2W\");13.1c.1d.1R(\"1m-93\").1O(\"2W\");13.1c.1d.1B(\"1m-2V\");13.1d.1B(\"1m-2V\");13.8h();P=(13.1c.1W===\"1l\")?13.1c.2n:13.1c.1W;if(q.1f.2O.2a&&!(13.1G&&13.1o(\"3i\")===\"2T\")){if(P===\"2F\"){N=13.1i.1d.1F();13.1c.1i.1z({2q:\"4H(0,\"+L+\"2C, 0) 3J(\"+N.1e/13.1K.1e+\", \"+N.1g/13.1K.1g+\")\"}).1F();13.1c.1i.1C(\"2W\",v(17(){13.1c.1i.1O(\"2W\");13.1c.1d.1R(\"1m-2V 1m-p-\"+P);13.1c.2V=1k;13.1c.2s=1s}).1D(13));13.1c.1d.1B(\"1m-p-\"+P).1F();if(!q.1f.2J&&q.1f.6p&&(q.1f.4B===\"6p\"||q.1f.4B===\"74\")){13.1c.2V=1k;13.1c.2s=1s}}1j{13.1c.1d.1C(\"2W\",v(17(){13.1c.1d.1O(\"2W\");13.1c.1d.1R(\"1m-2V 1m-p-\"+P)}).1D(13));13.1c.1d.1z({2a:\"3a\"});13.1c.1d.1B(\"1m-p-\"+P).1F();13.1c.1d.1z({2a:\"\"}).1F();13.1c.1d.1R(\"1m-p-\"+P);13.1c.2V=1k;13.1c.2s=1s}}1j{13.1c.1d.1R(\"1m-2V\");13.1c.2V=1k;13.1c.2s=1s}if(!13.1G){13.5B(1s)}if(Q){Q.2h().4u();R=Q.7M();if(13.1c.1W===\"2D\"&&(/2b/i).3h(Q.1x)){R.y-=13.1c.1g/2+10}if(P===\"2F\"&&((/2b/i).3h(Q.1x)||Q.6B())){13.1r.34={x:0,y:0};R.x=-(R.x-13.21.1P-13.1A.1e/2)*(13.1K.1e/13.1A.1e);R.y=-(R.y-13.21.1H-13.1A.1g/2)*(13.1K.1g/13.1A.1g)}}1j{R={x:13.21.1P+(13.21.2L-13.21.1P)/2,y:13.21.1H+(13.21.2K-13.21.1H)/2};if(q.1f.2J&&13.1G&&13.1o(\"3i\")===\"2T\"){13.1r.69=1s;13.1r.34={x:0,y:0};R.x=-(R.x-13.21.1P-13.1A.1e/2)*(13.1K.1e/13.1A.1e);R.y=-(R.y-13.21.1H-13.1A.1g/2)*(13.1K.1g/13.1A.1g)}}13.1d.1R(\"1m-2V\").1B(\"1m-2s\");R.x+=-M;R.y+=-L;13.1r.4l={x:0,y:0};13.1r.dx=0;13.1r.dy=0;13.5y(Q,R,1s);I(\"cB\",13.id)},43:17(M,R){1a P;1a N;1a K;1a L;1a O=0;1a Q=0;1a S=13.1c.2s;13.5l=1h;if(!13.2p){1b}if(M&&M.1x===\"cs\"&&M.2r===\"3v\"){1b}3u(13.3O);13.3O=1h;3u(13.5O);13.5O=1h;13.1c.2V=1k;13.1c.2s=1k;if(R!==1s&&!13.1G){if(S){if(q.1f.2J&&!13.1G&&13.1c.1W===\"1l\"){13.8h()}1j{13.5B()}}}if(!13.1c.4X){1b}if(M){M.2h()}13.1c.1i.1O(\"2W\");13.1c.1d.1R(\"1m-2V\").1O(\"2W\");if(13.1G){L=13.5I.8k();if(13.1o(\"3i\")!==\"2T\"){13.5D.1R(\"1m-1l-in\")}13.1i.1d.1z({\"26-1g\":13.7b()});K=13.1i.1d.8k();Q=((K.1P+K.2L)/2-(L.1P+L.2L)/2);O=((K.1H+K.2K)/2-(L.1H+L.2K)/2)}P=(13.1c.1W===\"1l\")?13.1c.2n:13.1c.1W;if(q.1f.2O.2a&&M&&!(13.1G&&13.1o(\"3i\")===\"2T\")){if(P===\"2F\"){13.1c.1i.1C(\"2W\",v(17(){13.1c.1i.1O(\"2W\");13.1d.1R(\"1m-2s\");4y(v(17(){13.1c.4f()}).1D(13),32)}).1D(13));N=13.1i.1d.1F();13.1c.1d.1B(\"1m-93 1m-p-\"+P).1F();13.1c.1i.1z({2q:\"4H(0,\"+O+\"2C,0) 3J(\"+N.1e/13.1K.5S+\", \"+N.1g/13.1K.6J+\")\"})}1j{13.1c.1d.1C(\"2W\",v(17(){13.1c.4f();13.1d.1R(\"1m-2s\")}).1D(13));13.1c.1d.3F(\"2y\");13.1c.1d.1B(\"1m-93 1m-p-\"+P);13.1d.1R(\"1m-2s\")}}1j{13.1c.4f();13.1d.1R(\"1m-2s\")}13.1r.dx=0;13.1r.dy=0;13.1r.4l={x:0,y:0};13.1r.4f();if(S){I(\"fd\",13.id)}},5y:17(U,T,S){1a M=T;1a O;1a N;1a Q=0;1a L;1a P=0;1a K;1a V;1a R=1k;if(!13.1c.2s&&!S){1b}if(U){v(U).4W().5L();if(U.6B()&&!U.5f()){1b}R=(/2b/i).3h(U.1x)||U.6B();if(R&&!13.1r.7Z){13.1r.7Z=R}if(!M){M=U.7M()}}if(13.1c.1W===\"4N\"){1b}if(13.1c.1W===\"1l\"&&13.1c.2n===\"2F\"&&(U&&R||!U&&13.1r.69)){13.1r.69=1s;O=13.1r.34.x+(M.x-13.1r.4l.x);N=13.1r.34.y+(M.y-13.1r.4l.y);13.1r.4l=M;Q=1q.2g(0,13.1c.5N-13.1K.1e)/2;L=-Q;P=1q.2g(0,13.1c.4O-13.1K.1g)/2;K=-P}1j{13.1r.69=1k;if(13.1c.1W===\"2D\"){M.y=1q.26(13.21.1H,1q.2g(M.y,13.21.2K));M.x=1q.26(13.21.1P,1q.2g(M.x,13.21.2L))}O=M.x-13.21.1P;N=M.y-13.21.1H;L=13.1A.1e-13.1r.1e;K=13.1A.1g-13.1r.1g;O-=13.1r.1e/2;N-=13.1r.1g/2}if(13.1c.1W!==\"2D\"){O=1q.26(Q,1q.2g(O,L));N=1q.26(P,1q.2g(N,K))}13.1r.34.x=O;13.1r.34.y=N;if(13.1c.1W===\"1l\"){if(q.1f.2O.2q){13.1r.1d.1z({2q:\"aS(\"+13.1r.34.x+\"2C,\"+13.1r.34.y+\"2C)\"});13.1r.1i.1z({2q:\"aS(\"+-(13.1r.34.x+13.1r.41.x)+\"2C, \"+-(13.1r.34.y+13.1r.41.y)+\"2C)\"})}1j{13.1r.1d.1z({1H:13.1r.34.y,1P:13.1r.34.x});13.1r.1i.1z({1H:-(13.1r.34.y+13.1r.41.y),1P:-(13.1r.34.x+13.1r.41.x)})}}if(13.1c.1W===\"2D\"){if(13.1r.7Z&&!(U&&U.1x===\"3E\")){M.y-=13.1c.1g/2+10}13.1c.1d.1z({1H:M.y-13.21.1H-13.1c.1g/2,1P:M.x-13.21.1P-13.1c.1e/2})}if(!13.3O){13.1r.dx=0;13.1r.dy=0;13.5R(1)}},5R:17(P){1a N;1a L;1a K;1a Q;1a O;1a M;if(!ki(P)){if(13.1r.69){P=13.1r.7Z?0.4:0.16}1j{P=13.1o(\"fg\")?0.2:13.1r.7Z?0.4:0.8}}N=((13.1r.34.x-13.1r.dx)*P);L=((13.1r.34.y-13.1r.dy)*P);13.1r.dx+=N;13.1r.dy+=L;if(!13.3O||1q.3b(N)>0.c9||1q.3b(L)>0.c9){if(13.1r.69){K=13.1r.dx;Q=13.1r.dy}1j{K=(13.1r.dx*(13.1K.1e/13.1A.1e)-1q.26(0,13.1K.1e-13.1c.5N)/2);Q=(13.1r.dy*(13.1K.1g/13.1A.1g)-1q.26(0,13.1K.1g-13.1c.4O)/2);if(13.1c.1W===\"2D\"){K=1q.5A(K);Q=1q.5A(Q)}K=-K;Q=-Q}O=13.1K.1e/13.1K.5S;M=13.1K.1g/13.1K.6J;13.1c.1i.1z(q.1f.2O.2q?{2q:d+K+\"2C,\"+Q+\"2C\"+C+\" 3J(\"+O+\",\"+M+\")\"}:{1e:13.1K.1e,1g:13.1K.1g,1P:-(13.1r.dx*(13.1K.1e/13.1A.1e)+1q.2g(0,13.1K.1e-13.1c.5N)/2),1H:-(13.1r.dy*(13.1K.1g/13.1A.1g)+1q.2g(0,13.1K.1g-13.1c.4O)/2)})}if(13.1c.1W===\"2D\"){1b}13.3O=4y(13.gh,16)},cJ:17(){1a W;1a M;1a R=30;1a O=km;1a T;1a U=\"\";1a L={};1a K;1a Q;1a V=0;1a X={2a:q.1f.ay+6F.83(32)+\"eV 6b-6d(.18,.35,.58,1)\"};1a N;1a S;1a P=v(17(Y){if(!13.2p||13.1c.2s){1b}if(Y.2e===\"3Y\"){3u(13.5O);13.5O=1h;V=0;L={x:Y.x,y:Y.y,g7:Y.2U};W=13.1A.1e;M=W/2;13.1i.1d.1O(\"2W\");13.1i.1d.3V(\"2a\",\"\");13.1i.1d.3V(\"2q\",\"4H(0, 0, 0)\");S=1h}1j{K=(Y.x-L.x);Q={x:0,y:0,z:0};if(S===1h){S=(1q.3b(Y.x-L.x)<1q.3b(Y.y-L.y))}if(S){1b}Y.2h();if(Y.2e===\"aJ\"){V=0;N=1h;T=Y.2U-L.g7;if(1q.3b(K)>M||(TR)){if((U=(K>0)?\"eX\":(K<=0)?\"kq\":\"\")){if(U===\"eX\"){N=13.8F();V+=W*10}1j{N=13.8R();V-=W*10}}}Q.x=V;Q.ds=-90*(Q.x/W);13.1i.1d.1C(\"2W\",v(17(Z){13.1i.1d.1O(\"2W\");13.1i.1d.3V(\"2a\",\"\");if(N){13.1i.1d.1z({2q:\"4H(\"+Q.x+\"2C, 6H, 6H)\"});13.4x(N,1s)}}).1D(13));13.1i.1d.1z(X);13.1i.1d.1z({\"2a-5G\":Q.x?\"jV\":\"eV\",2y:1-0.2*1q.3b(Q.x/W),2q:\"4H(\"+Q.x+\"2C, 6H, 6H)\"});K=0;1b}Q.x=K;Q.z=-50*1q.3b(Q.x/M);Q.ds=-60*(Q.x/M);13.1i.1d.1z({2y:1-0.2*1q.3b(Q.x/M),2q:\"4H(\"+Q.x+\"2C, 6H, \"+Q.z+\"2C)\"})}}).1D(13);13.1d.1C(\"2w\",P)},dr:17(){1a M={1e:0,1g:0};1a O=1k;1a N;1a L=v(17(T,P,S){1a Q;1a R;if(!13.1c.2s&&!S){1b}1a U=q.3C(13.1K);Q=1q.26(N.1e,1q.5A(M.1e*T));Q=1q.2g(Q,13.1K.5S);R=Q/(13.1K.5S/13.1K.6J);13.1K.1e=1q.52(Q);13.1K.1g=1q.52(R);13.1r.1e=1q.4c(13.1c.5N/(13.1K.1e/N.1e));13.1r.1g=1q.4c(13.1c.4O/(13.1K.1g/N.1g));13.1r.1d.1z({1e:13.1r.1e,1g:13.1r.1g});q.2c(13.1r,13.1r.1d.1F());3u(13.3O);13.3O=1h;P.x=13.1r.4l.x*(13.1K.1e/U.1e)+(P.x-13.21.1P-13.1A.1e/2)*(1-(13.1K.1e/U.1e));P.y=13.1r.4l.y*(13.1K.1g/U.1g)+(P.y-13.21.1H-13.1A.1g/2)*(1-(13.1K.1g/U.1g));13.1r.4l={x:0,y:0};13.1r.34={x:0,y:0};13.1r.69=1s;13.5y(1h,{x:P.x,y:P.y});3u(13.3O);13.3O=1h}).1D(13);1a K=v(17(R){if(!O&&R.2e!==\"5W\"&&!R.dp){1b}R.2h();1a Q=v(1n).7k();1a P=1k;1a S={x:R.6N.x-Q.x,y:R.6N.y-Q.y};4A(R.2e){1E\"5W\":13.dd();M=q.3C(13.1K);if(13.1G){N=13.1i.1d.1F()}1j{N=13.1A}3u(13.3O);13.3O=1h;if(13.1c.2s){13.1r.4l=q.3C(13.1r.34)}O=1s;1I;1E\"dj\":O=1k;if(13.1c.2s){if(13.1o(\"3i\")!==\"2T\"&&13.1K.1e<=N.1e&&13.1K.1g<=N.1g){O=1k;13.43(1h)}1j{if(R.6K.1J>0){13.1r.4l={x:R.6K[0].3B,y:R.6K[0].3A}}}}13.aN();1I;1E\"dg\":1I;1E\"dt\":if(13.1G&&R.1l===-1&&(!13.1c.2s||13.1o(\"3i\")===\"2T\")){if(R.3Jx){O=1k;13.aN();13.2l(R);1b}}1j{if(R.1l===1&&!13.1c.2s){if(!13.1i.2j()||!13.2p||!13.1c.4X){if(!13.1i.2j()&&!13.5l){if(R){13.5l=m(R);R.4u()}13.1i.5w(13.7p.1D(13));if(!13.5p){13.5p=v(13.8a).1D(13).2G(8z)}}1b}13.1c.2V=1s;if(13.1G&&13.1c.1W===\"1l\"){13.5D.1B(\"1m-1l-in\")}13.1c.1i.1O(\"2W\");13.1c.1d.1R(\"1m-93\").1O(\"2W\");13.1c.1d.1B(\"1m-2V\");13.1d.1B(\"1m-2V\");13.8h();13.1K.1e=N.1e;13.1K.1g=N.1g;13.1c.2V=1k;13.1c.2s=1s;M=q.3C(13.1K);13.1c.1d.1R(\"1m-2V\");13.1d.1R(\"1m-2V\").1B(\"1m-2s\");13.1r.4l={x:0,y:0};13.1r.34={x:0,y:0};P=1s;if(!13.1G){13.5B(1s)}}L(R.3J,S,P);if(P){I(\"cB\",13.id)}}}}1I}}).1D(13);13.1d.1C(\"1N\",K)},du:17(){1a K=1p.kp();v([\"4q\",\"4m\",\"51\"]).3e(17(M){1a L=\"1m-2v\";13.2u[M]=q.$1v(\"2v\",{1x:\"2v\",7g:13.1o(\"aF-ko-\"+M)}).1B(L).1B(L+\"-\"+M);K.cP(13.2u[M]);4A(M){1E\"4q\":13.2u[M].1C(\"2b 1X\",17(N){N.2h();13.4x(13.8F())}.2H(13));1I;1E\"4m\":13.2u[M].1C(\"2b 1X\",17(N){N.2h();13.4x(13.8R())}.2H(13));1I;1E\"51\":13.2u[M].1C(\"2b 1X\",17(N){N.2h();13.51()}.2H(13)).4f();1I;1T:}},13);13.b4(13.3G.1J>1);13.7E=q.$1v(\"2Z\").1B(\"1m-kn-ci\").3d(K).29(13.1d)},b4:17(K){if(K){13.2u.4m.5t();13.2u.4q.5t()}1j{13.2u.4m.4f();13.2u.4q.4f()}},eJ:17(){1a L;1a K;if(13.3G.1J){13.57=13.3G}1j{L=13.3H.2o(\"3l-ax\");if(L){if(q.1f.2O.cT){K=q.$A(1p.c2(\\'.aZ[3l-ax=\"\\'+L+\\'\"], .9D[3l-ax=\"\\'+L+\\'\"]\\'))}1j{K=q.$A(1p.az(\"A\")).38(17(M){1b L===M.2o(\"3l-ax\")})}v(K).3e(17(N){1a M;1a O;M=n(N);if(M&&M.3G.1J>0){1b}if(M){O=1v o(M.1i.1M.1Y,M.1i.1l.1Y,M.1i.3t,1h,M.1i.4w);O.3S=M.1i.3S;O.3P=M.1i.3P}1j{O=1v o().as(N,M?M.72:1h)}if((13.1i.1l.1Z.3y(O.1l.1Y)||13.1i.1l.1Y.3y(O.1l.1Y))&&(13.1i.1M.1Z.3y(O.1M.1Y)||13.1i.1M.1Y.3y(O.1M.1Y))){O=13.1i}13.57.33(O)},13);13.7m=13.1i}}if(!13.8n){13.8n=1q.52(1q.6f()*q.63())}if(13.57.1J>1){13.5D.1B(\"dJ-c6\");13.5C=q.$1v(\"2Z\",{\"4h\":\"1m-2l-kl\"}).29(13.5D);13.4F=1v E(13.5C);v(13.57).3e(17(M){1a N=v(17(O){13.9w(M);13.4x(M)}).1D(13);M.dM=13.4F.dL(q.$1v(\"24\",{1Z:M.6L(\"1M\"),3P:M.3P}).1C(\"2b 1X\",17(O){O.2h()}).1C(\"2b \"+(13.1o(\"cj\")===\"8g\"?\"8j 8M\":\"1X\"),v(17(P,O){if(13.6v){3u(13.6v)}13.6v=1k;if(P.1x===\"8j\"){13.6v=v(N).2G(O)}1j{if(P.1x===\"2b\"||P.1x===\"1X\"){N()}}}).2H(13,60)))},13)}1j{13.5D.1R(\"dJ-c6\")}13.b4(13.57.1J>1);13.2u.51.5t()},ey:17(){1a K;if(13.4F){13.4F.2h();13.4F=1h}if(13.5C){13.5C.2R();13.5C=1h}13.b4(13.3G.1J>1);13.2u.51.4f();if(13.57.1J>1&&!13.3G.1J){13.1d.1O(\"2w\");13.1i.1d.2R().2o(\"2k\");13.1i.1d.5m(\"2k\");13.7m.1d.29(13.1d);13.7p(13.7m);5z(K=13.57.kk()){if(K!==13.7m){if(K.1M.1d){K.1M.1d.5d();K.1M.1d=1h}if(K.1l.1d){K.1l.1d.5d();K.1l.1d=1h}K=1h}}}13.57=[]},51:17(){if(!13.2p||!13.1G){1b}if(q.1f.4z===\"7Q\"&&q.1f.4B===\"9I\"&&6e(q.1f.7x)===7){dI(h);h=1h}v(1p).1O(\"cL\",13.9G);13.43(1h,1s);13.2p=1k;if(q.1f.5k.9z&&q.1f.5k.4X()){q.1f.5k.dH()}1j{if(q.1f.2O.2a){13.1d.1O(\"2W\").1z({2a:\"\"});13.1d.1C(\"2W\",13.9o);if(q.1f.3R){4y(v(17(){13.9o()}).1D(13),kj)}13.49.1O(\"2W\").1z({2a:\"\"});13.49.1z({2a:\"d1 0.6s 6b-6d(0.dw, 0.kh, 0.d7, 0.kf) 0.a5\"}).1F();13.1d.1z({2a:\"d1 .3s 6b-6d(0.9T, 0, 0.d8, 0.cK) a5\"}).1F();if(13.1c.1W!==1k&&13.1o(\"3i\")===\"2T\"&&13.1o(\"4U\")!==\"2D\"){13.1i.1d.1z({\"26-1g\":13.1i.1F(\"1l\").1g});13.1i.1d.1z({\"26-1e\":13.1i.1F(\"1l\").1e})}13.49.1z({2y:0.4});13.1d.1z({2y:0.k5,2q:\"3J(0.4)\"})}1j{13.9o()}}},2l:17(L){if(!13.1i.2j()||!13.2p||13.1G){if(!13.1i.2j()&&!13.5l){if(L){13.5l=m(L);L.4u();if(L.1x===\"2b\"){L.6X[1].4u()}}13.1i.5w(13.7p.1D(13));if(!13.5p){13.5p=v(13.8a).1D(13).2G(8z)}}1b}if(L){L.4u()}1a K=v(13.1d).1Q(\"cr\");13.cC();13.6W--;13.43(1h,1s);13.9B();13.9C();13.2p=1k;if(!13.3n){13.3n=q.$1v(\"2Z\").1B(\"1m-2l\").1B(13.1o(\"5X\")).1z({2y:0});13.5D=q.$1v(\"2Z\").1B(\"1m-2l-ep\").29(13.3n);13.3n.1C(\"5c 5s 3E\",v(17(M){v(M).2h()}));if(13.1o(\"cU\")){13.3n.1C(\"2b 1X\",17(O){1a N=O.6a();1a M=v(13.1o(\"4U\")===\"2D\"?13.1c.1d:13.1c.1i).8k();if(13.1o(\"3i\")!==\"2T\"&&M.1H<=N.y&&N.y<=M.2K&&M.1P<=N.x&&N.x<=M.2L){O.4u();13.43(O);1b}if(13.1o(\"3i\")!==\"2T\"&&13.1d.9s(O.eo())){1b}O.2h();13.51()}.2H(13))}13.9G=v(17(N){1a M=1h;if(N.9p!==27&&N.9p!==37&&N.9p!==39){1b}v(N).2h();if(N.9p===27){13.51()}1j{M=(N.9p===37)?13.8F():13.8R();if(M){13.4x(M)}}}).2H(13);13.8C=v(17(){1a O;13.1d.1O(\"2W\").1z({2a:\"\",2q:\"4H(0, 0, 0)\"});if(13.1G){1b}13.1G=1s;if(13.1o(\"5q\")){3c{1a M=\"#1m-1G-aG-\"+13.8n;if(1n.eA.eC!==M){if(5q.2e&&5q.2e.cF&&5q.2e.9X){5q.kb({cF:13.8n,9X:13.id},1p.7g,M)}1j{5q.k7({cF:13.8n,9X:13.id},1p.7g,M)}}}3o(N){}}13.3n.1R(\"1m-2l-kg\").1z({2y:1});13.1c.9y(13.1o(\"4U\"));13.1K=q.3C(13.3w);13.6g();if(13.3W&&13.1i.3t){13.3W.1B(\"1m-5t\")}if(13.1o(\"3i\")!==\"2T\"){13.8p(1s);13.9k(1s)}13.2p=1s;if(13.1o(\"3i\")===\"2T\"){if(13.1c.1W!==1k){13.1c.6x(1s)}if(q.1f.2J&&13.9a){13.9a=1k}13.4Z()}if((q.1f.2J||13.1o(\"aC\"))&&13.9a&&13.1c.4X){13.5B(1s,13.1o(\"9r\"));if(13.6W!==6k){13.9a=1k}}13.7E.1R(\"1m-3q\").1B(\"1m-92 1m-5E\");if(13.5C){13.5C.1R(\"1m-3q\").1B(\"1m-92 1m-5E\")}if(13.4F){13.4F.cG();13.9w(13.1i)}if(K){K.29(13.3n,((1q.52(1q.6f()*cI)+1)%2)?\"1H\":\"2K\")}if(13.57.1J>1&&!13.3G.1J){13.cJ()}v(1p).1C(\"cL\",13.9G);if(q.1f.4z===\"7Q\"&&q.1f.4B===\"9I\"&&6e(q.1f.7x)===7){h=J()}I(\"ex\",13.id)}).1D(13);13.9o=v(17(){13.1d.1O(\"2W\");if(!13.1G){1b}if(13.1G){v(1p).1O(\"cL\",13.9G);13.43(1h,1s)}13.6l(1s);13.ey();13.1G=1k;if(13.1o(\"5q\")){if(1n.eA.eC===\"#1m-1G-aG-\"+13.8n){5q.kE()}}13.1c.9y(13.1o(\"4p\"));13.1d.7K(13.1i.7j(\"1M\"),13.1i.1d);13.1i.7i(\"1M\");v(13.1i.1d).1z({1e:\"\",1g:\"\",\"26-1e\":1q.2g(13.1i.1F(\"1M\").1e),\"26-1g\":1q.2g(13.1i.1F(\"1M\").1g)});13.1r.1i.1Z=13.1i.6L(\"1M\");13.1d.1z({2y:\"\",2a:\"\"});13.1d.1z({2q:\"4H(0, 0, 0)\"});v(13.3H).7K(13.1d,13.8T);13.7E.1R(\"1m-2l-ci\").1R(\"1m-3q\").1B(\"1m-92 1m-5E\").29(13.1d);13.6l(1s);if(13.3W){13.3W.2R();13.3W=1h}13.9B();13.9C();if(13.1o(\"4C\")===\"2T\"){13.4Z()}1j{if(13.1o(\"4p\")!==1k){13.8p(13.1o(\"4C\")===\"2I\");13.9k(13.1o(\"4C\")===\"2I\")}}13.5B();13.49.1O(\"2W\");13.3n.2R();13.49.2R();13.49=1h;if(G){G.2R()}v(q.1f.4n()).1R(\"1m-1G-aG-8E\");13.2p=1s;if(q.1f.2M<10){13.6g()}1j{v(1n).cA(\"eD\",\"7s\")}I(\"eE\",13.id)}).1D(13);13.6G=q.$1v(\"2Z\",{\"4h\":\"1m-1i-ep\"}).29(13.5D);13.5I=q.$1v(\"5J\").29(13.6G);13.8T=13.1d.ca(1k)}13.7E.1B(\"1m-2l-ci\").29(13.6G);13.eJ();if(G){G.29(1p.3k)}v(q.1f.4n()).1B(\"1m-1G-aG-8E\");v(1p.3k).1F();if(13.1o(\"2l\")===\"eM\"){13.cq();q.1f.5k.cw(13.3n,{cv:v(17(){13.8C()}).1D(13),ct:13.9o,9i:v(17(){13.c3()}).1D(13)})}1j{4y(v(17(){13.cq();13.c3()}).1D(13),96)}},cq:17(){1a L;1a K;L=q.$1v(\"24\",{cn:13.1i.6L(\"1l\")+\" \"+13.1i.cm(\"1l\")+\"x\",1Z:13.1i.6L(\"1l\"),3P:13.1i.3P});13.49=q.$1v(\"2Z\").1B(\"1m-2l-bg\").3d((q.1f.2O.9g||q.1f.2M<10)?L:1v q.aQ(L).5F(k).7j()).29(13.3n);if(13.1o(\"3i\")===\"2T\"&&13.1o(\"4U\")!==1k){13.5D.1B(\"1m-2T-1l\"+(13.1o(\"4U\")===\"1l\"?\" 1m-1l-in\":\"\")).1F()}K=v(13.1d)[(q.1f.2M<10)?\"1F\":\"6I\"]();v(13.8T).1z({1e:K.1e,1g:K.1g});13.1d.7K(13.1i.7j(\"1l\"),13.1i.1d);13.1i.7i(\"1l\");13.3n.29(1p.3k);if(G){13.3n.1z({1g:1n.4O,6J:\"ef\",1H:1q.3b(G.6I().1H)})}13.7L=17(){1a M=13.6G;if(v(13.5I).1F().1e>50){M=13.5I}1b 17(){1b 13.1o(\"3i\")===\"2T\"&&13.1o(\"4U\")!==1k&&13.1o(\"4U\")!==\"2D\"?6k:1q.5A(v(M).97().1e)}}.2f(13);13.7b=17(){1a M=13.6G;if(v(13.5I).1F().1g>50){M=13.5I}1b 17(){1b 13.1o(\"3i\")===\"2T\"&&13.1o(\"4U\")!==1k&&13.1o(\"4U\")!==\"2D\"?6k:1q.5A(v(M).97().1g)}}.2f(13);13.7E.1R(\"1m-92 1m-5E\").1B(\"1m-3q\");if(13.5C){13.5C.1R(\"1m-92 1m-5E\").1B(\"1m-3q\")}if(13.1o(\"3W\")){13.3W=q.$1v(\"eR\",{\"4h\":\"1m-3t\"}).29(13.6G);if(13.3W&&13.1i.3t){if(13.1i.3S){13.3W.3d(q.$1v(\"a\",{7e:13.1i.3S}).1C(\"2b 1X\",13.aT.1D(13)).6h(13.1i.3t))}1j{13.3W.6h(13.1i.3t)}}}13.1i.1d.1z({\"26-1g\":1q.2g(13.1i.1F(\"1l\").1g,13.7b())});13.1i.1d.1z({\"26-1e\":1q.2g(13.1i.1F(\"1l\").1e,13.7L())});13.5I.3d(v(13.3H).7K(13.8T,13.1d))},c3:17(){13.1d.1z({2a:\"\"});13.1d.1z({2q:\"3J(0.6)\"}).1F();13.1d.1z({2a:q.1f.ay+\" 0.4s 6b-6d(0.a8, 0.ch, 0.eT, 1) a5\"});if(q.1f.2O.2a){13.1d.1C(\"2W\",13.8C);if(q.1f.6p&&(q.1f.4B===\"6p\"||q.1f.4B===\"74\")){4y(v(17(){13.8C()}).1D(13),cc)}}1j{13.8C.2G(16,13)}13.3n.1z({2y:1});13.1d.1z({2q:\"3J(1)\"})},aT:17(){if(13.1i.3S){1n.8E(13.1i.3S,\"jp\")}},8R:17(){1a K=(13.1G?13.57:13.3G).38(17(N){1b(N.1M.2e!==-1||N.1l.2e!==-1)});1a L=K.1J;1a M=v(K).4S(13.1i)+1;1b(L<=1)?1h:K[(M>=L)?0:M]},8F:17(){1a K=(13.1G?13.57:13.3G).38(17(N){1b(N.1M.2e!==-1||N.1l.2e!==-1)});1a L=K.1J;1a M=v(K).4S(13.1i)-1;1b(L<=1)?1h:K[(M<0)?L-1:M]},dV:17(L,M){1a K=13.3G.38(17(N){1b((N.1l.1Z.3y(L)||N.1l.1Y.3y(L))&&(N.1M.1Z.3y(M)||N.1M.1Y.3y(M)))})||[];1b K[0]||((M&&L&&q.1U(M)===\"1S\"&&q.1U(L)===\"1S\")?1v o(M,L):1h)},cQ:17(L){1a K=13.3G.38(17(M){1b(M.4w===L)})||[];1b K[0]},dY:17(K){1b 13.3G[K]}};e={4L:\"dR.3.7 (jP)\",4I:17(N,L){1a M=1h;1a K=[];q.$A((N?[v(N)]:q.$A(1p.aY(\"aZ\")).6c(q.$A(1p.aY(\"9D\"))))).3e(v(17(O){if(v(O)){if(!n(O)){M=1v z(O,L);if(l&&!M.1o(\"c5\")){M.2h();M=1h}1j{t.33(M);K.33(M)}}}}).1D(13));1b N?K[0]:K},2h:17(N){1a L,M,K;if(N){(M=n(N))&&(M=t.8D(t.4S(M),1))&&M[0].2h()&&(4V M[0]);1b}5z(L=t.1J){M=t.8D(L-1,1);M[0].2h();4V M[0]}},lJ:17(K){13.2h(K);1b 13.4I(K)},4x:17(P,O,N,L){1a M=n(P);1a K;if(M){K=q.1U(O)===\"6r\"?M.cQ(O):M.dV(O,N);if(K){M.4x(K)}}},lX:17(N,M){1a L=n(N);1a K;if(L){4A(q.1U(M)){1E\"6r\":K=L.cQ(M);1I;1E\"6m\":K=L.dY(M);1I;1T:}if(K){L.4x(K)}}},4q:17(L){1a K;(K=n(L))&&K.4x(K.8F())},4m:17(L){1a K;(K=n(L))&&K.4x(K.8R())},lP:17(L){1a K;(K=n(L))&&K.4Z()},lN:17(L){1a K;(K=n(L))&&K.43()},2l:17(L){1a K;(K=n(L))&&K.2l()},51:17(L){1a K;(K=n(L))&&K.51()},ei:17(K,L){if(!F[K]){F[K]=[]}if(q.1U(L)===\"17\"){F[K].33(L)}},m1:17(K){1b!!n(K)}};v(1p).1C(\"9Y\",17(){1a L=1n[j+\"7A\"]||{};y=y();A();r=q.$1v(\"2Z\",{\"4h\":\"2Y-3q-7u\"}).29(1p.3k);p=(q.1f.2J&&1n.e8&&1n.e8(\"(26-e9-1e: ea), (26-e9-1g: ea)\").l2);if(q.1f.2J){q.2c(b,D)}if(p&&q.1f.4z===\"7Q\"){G=q.$1v(\"2Z\").1z({2n:\"lp\",1H:0,1e:0,1g:\"ef\"})}1V(1a K=0;K