{"version":3,"file":"ubs-3b278210.js","sources":["../../../../app/frontend/components/ubs/services/stateService.js","../../../../node_modules/flatpickr/dist/esm/types/options.js","../../../../node_modules/flatpickr/dist/esm/l10n/default.js","../../../../node_modules/flatpickr/dist/esm/utils/index.js","../../../../node_modules/flatpickr/dist/esm/utils/dom.js","../../../../node_modules/flatpickr/dist/esm/utils/formatting.js","../../../../node_modules/flatpickr/dist/esm/utils/dates.js","../../../../node_modules/flatpickr/dist/esm/utils/polyfills.js","../../../../node_modules/flatpickr/dist/esm/index.js","../../../../app/frontend/components/ubs/elementUtils.js","../../../../app/frontend/components/ubs/controllers/datepickerController.js","../../../../app/frontend/components/ubs/dateUtilities.js","../../../../app/frontend/components/ubs/segmentTrackingUtils.js","../../../../app/frontend/components/ubs/controllers/filterButtonsController.js","../../../../app/frontend/components/ubs/bookingTimes.js","../../../../app/frontend/components/ubs/controllers/tabsController.js","../../../../app/frontend/components/ubs/components/MapboxMap.js","../../../../app/frontend/components/ubs/controllers/dropdownController.js","../../../../app/frontend/components/ubs/controllers/showHideMapButtonController.js","../../../../app/frontend/components/ubs/locationPersistenceUtils.js","../../../../app/frontend/components/ubs/controllers/searchCallbacks.js","../../../../app/frontend/components/ubs/controllers/ubsSearchController.js","../../../../app/frontend/components/ubs/controllers/mobileSearchController.js","../../../../app/frontend/components/ubs/controllers/searchSetup.js","../../../../app/frontend/components/ubs/app.js","../../../../app/frontend/components/ubs/loadUbs.js"],"sourcesContent":["class StateService {\n constructor() {\n if (!StateService.instance) {\n this.state = {};\n StateService.instance = this;\n }\n return StateService.instance;\n }\n\n setState(key, value) {\n this.state[key] = value;\n }\n\n getState(key) {\n return this.state[key];\n }\n}\n\nconst instance = new StateService();\nObject.freeze(instance);\n\nexport default instance;\n","export var HOOKS = [\n \"onChange\",\n \"onClose\",\n \"onDayCreate\",\n \"onDestroy\",\n \"onKeyDown\",\n \"onMonthChange\",\n \"onOpen\",\n \"onParseConfig\",\n \"onReady\",\n \"onValueUpdate\",\n \"onYearChange\",\n \"onPreCalendarPosition\",\n];\nexport var defaults = {\n _disable: [],\n allowInput: false,\n allowInvalidPreload: false,\n altFormat: \"F j, Y\",\n altInput: false,\n altInputClass: \"form-control input\",\n animate: typeof window === \"object\" &&\n window.navigator.userAgent.indexOf(\"MSIE\") === -1,\n ariaDateFormat: \"F j, Y\",\n autoFillDefaultTime: true,\n clickOpens: true,\n closeOnSelect: true,\n conjunction: \", \",\n dateFormat: \"Y-m-d\",\n defaultHour: 12,\n defaultMinute: 0,\n defaultSeconds: 0,\n disable: [],\n disableMobile: false,\n enableSeconds: false,\n enableTime: false,\n errorHandler: function (err) {\n return typeof console !== \"undefined\" && console.warn(err);\n },\n getWeek: function (givenDate) {\n var date = new Date(givenDate.getTime());\n date.setHours(0, 0, 0, 0);\n date.setDate(date.getDate() + 3 - ((date.getDay() + 6) % 7));\n var week1 = new Date(date.getFullYear(), 0, 4);\n return (1 +\n Math.round(((date.getTime() - week1.getTime()) / 86400000 -\n 3 +\n ((week1.getDay() + 6) % 7)) /\n 7));\n },\n hourIncrement: 1,\n ignoredFocusElements: [],\n inline: false,\n locale: \"default\",\n minuteIncrement: 5,\n mode: \"single\",\n monthSelectorType: \"dropdown\",\n nextArrow: \"\",\n noCalendar: false,\n now: new Date(),\n onChange: [],\n onClose: [],\n onDayCreate: [],\n onDestroy: [],\n onKeyDown: [],\n onMonthChange: [],\n onOpen: [],\n onParseConfig: [],\n onReady: [],\n onValueUpdate: [],\n onYearChange: [],\n onPreCalendarPosition: [],\n plugins: [],\n position: \"auto\",\n positionElement: undefined,\n prevArrow: \"\",\n shorthandCurrentMonth: false,\n showMonths: 1,\n static: false,\n time_24hr: false,\n weekNumbers: false,\n wrap: false,\n};\n","export var english = {\n weekdays: {\n shorthand: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n longhand: [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n ],\n },\n months: {\n shorthand: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ],\n longhand: [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ],\n },\n daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n firstDayOfWeek: 0,\n ordinal: function (nth) {\n var s = nth % 100;\n if (s > 3 && s < 21)\n return \"th\";\n switch (s % 10) {\n case 1:\n return \"st\";\n case 2:\n return \"nd\";\n case 3:\n return \"rd\";\n default:\n return \"th\";\n }\n },\n rangeSeparator: \" to \",\n weekAbbreviation: \"Wk\",\n scrollTitle: \"Scroll to increment\",\n toggleTitle: \"Click to toggle\",\n amPM: [\"AM\", \"PM\"],\n yearAriaLabel: \"Year\",\n monthAriaLabel: \"Month\",\n hourAriaLabel: \"Hour\",\n minuteAriaLabel: \"Minute\",\n time_24hr: false,\n};\nexport default english;\n","export var pad = function (number, length) {\n if (length === void 0) { length = 2; }\n return (\"000\" + number).slice(length * -1);\n};\nexport var int = function (bool) { return (bool === true ? 1 : 0); };\nexport function debounce(fn, wait) {\n var t;\n return function () {\n var _this = this;\n var args = arguments;\n clearTimeout(t);\n t = setTimeout(function () { return fn.apply(_this, args); }, wait);\n };\n}\nexport var arrayify = function (obj) {\n return obj instanceof Array ? obj : [obj];\n};\n","export function toggleClass(elem, className, bool) {\n if (bool === true)\n return elem.classList.add(className);\n elem.classList.remove(className);\n}\nexport function createElement(tag, className, content) {\n var e = window.document.createElement(tag);\n className = className || \"\";\n content = content || \"\";\n e.className = className;\n if (content !== undefined)\n e.textContent = content;\n return e;\n}\nexport function clearNode(node) {\n while (node.firstChild)\n node.removeChild(node.firstChild);\n}\nexport function findParent(node, condition) {\n if (condition(node))\n return node;\n else if (node.parentNode)\n return findParent(node.parentNode, condition);\n return undefined;\n}\nexport function createNumberInput(inputClassName, opts) {\n var wrapper = createElement(\"div\", \"numInputWrapper\"), numInput = createElement(\"input\", \"numInput \" + inputClassName), arrowUp = createElement(\"span\", \"arrowUp\"), arrowDown = createElement(\"span\", \"arrowDown\");\n if (navigator.userAgent.indexOf(\"MSIE 9.0\") === -1) {\n numInput.type = \"number\";\n }\n else {\n numInput.type = \"text\";\n numInput.pattern = \"\\\\d*\";\n }\n if (opts !== undefined)\n for (var key in opts)\n numInput.setAttribute(key, opts[key]);\n wrapper.appendChild(numInput);\n wrapper.appendChild(arrowUp);\n wrapper.appendChild(arrowDown);\n return wrapper;\n}\nexport function getEventTarget(event) {\n try {\n if (typeof event.composedPath === \"function\") {\n var path = event.composedPath();\n return path[0];\n }\n return event.target;\n }\n catch (error) {\n return event.target;\n }\n}\n","import { int, pad } from \"../utils\";\nvar doNothing = function () { return undefined; };\nexport var monthToStr = function (monthNumber, shorthand, locale) { return locale.months[shorthand ? \"shorthand\" : \"longhand\"][monthNumber]; };\nexport var revFormat = {\n D: doNothing,\n F: function (dateObj, monthName, locale) {\n dateObj.setMonth(locale.months.longhand.indexOf(monthName));\n },\n G: function (dateObj, hour) {\n dateObj.setHours((dateObj.getHours() >= 12 ? 12 : 0) + parseFloat(hour));\n },\n H: function (dateObj, hour) {\n dateObj.setHours(parseFloat(hour));\n },\n J: function (dateObj, day) {\n dateObj.setDate(parseFloat(day));\n },\n K: function (dateObj, amPM, locale) {\n dateObj.setHours((dateObj.getHours() % 12) +\n 12 * int(new RegExp(locale.amPM[1], \"i\").test(amPM)));\n },\n M: function (dateObj, shortMonth, locale) {\n dateObj.setMonth(locale.months.shorthand.indexOf(shortMonth));\n },\n S: function (dateObj, seconds) {\n dateObj.setSeconds(parseFloat(seconds));\n },\n U: function (_, unixSeconds) { return new Date(parseFloat(unixSeconds) * 1000); },\n W: function (dateObj, weekNum, locale) {\n var weekNumber = parseInt(weekNum);\n var date = new Date(dateObj.getFullYear(), 0, 2 + (weekNumber - 1) * 7, 0, 0, 0, 0);\n date.setDate(date.getDate() - date.getDay() + locale.firstDayOfWeek);\n return date;\n },\n Y: function (dateObj, year) {\n dateObj.setFullYear(parseFloat(year));\n },\n Z: function (_, ISODate) { return new Date(ISODate); },\n d: function (dateObj, day) {\n dateObj.setDate(parseFloat(day));\n },\n h: function (dateObj, hour) {\n dateObj.setHours((dateObj.getHours() >= 12 ? 12 : 0) + parseFloat(hour));\n },\n i: function (dateObj, minutes) {\n dateObj.setMinutes(parseFloat(minutes));\n },\n j: function (dateObj, day) {\n dateObj.setDate(parseFloat(day));\n },\n l: doNothing,\n m: function (dateObj, month) {\n dateObj.setMonth(parseFloat(month) - 1);\n },\n n: function (dateObj, month) {\n dateObj.setMonth(parseFloat(month) - 1);\n },\n s: function (dateObj, seconds) {\n dateObj.setSeconds(parseFloat(seconds));\n },\n u: function (_, unixMillSeconds) {\n return new Date(parseFloat(unixMillSeconds));\n },\n w: doNothing,\n y: function (dateObj, year) {\n dateObj.setFullYear(2000 + parseFloat(year));\n },\n};\nexport var tokenRegex = {\n D: \"\",\n F: \"\",\n G: \"(\\\\d\\\\d|\\\\d)\",\n H: \"(\\\\d\\\\d|\\\\d)\",\n J: \"(\\\\d\\\\d|\\\\d)\\\\w+\",\n K: \"\",\n M: \"\",\n S: \"(\\\\d\\\\d|\\\\d)\",\n U: \"(.+)\",\n W: \"(\\\\d\\\\d|\\\\d)\",\n Y: \"(\\\\d{4})\",\n Z: \"(.+)\",\n d: \"(\\\\d\\\\d|\\\\d)\",\n h: \"(\\\\d\\\\d|\\\\d)\",\n i: \"(\\\\d\\\\d|\\\\d)\",\n j: \"(\\\\d\\\\d|\\\\d)\",\n l: \"\",\n m: \"(\\\\d\\\\d|\\\\d)\",\n n: \"(\\\\d\\\\d|\\\\d)\",\n s: \"(\\\\d\\\\d|\\\\d)\",\n u: \"(.+)\",\n w: \"(\\\\d\\\\d|\\\\d)\",\n y: \"(\\\\d{2})\",\n};\nexport var formats = {\n Z: function (date) { return date.toISOString(); },\n D: function (date, locale, options) {\n return locale.weekdays.shorthand[formats.w(date, locale, options)];\n },\n F: function (date, locale, options) {\n return monthToStr(formats.n(date, locale, options) - 1, false, locale);\n },\n G: function (date, locale, options) {\n return pad(formats.h(date, locale, options));\n },\n H: function (date) { return pad(date.getHours()); },\n J: function (date, locale) {\n return locale.ordinal !== undefined\n ? date.getDate() + locale.ordinal(date.getDate())\n : date.getDate();\n },\n K: function (date, locale) { return locale.amPM[int(date.getHours() > 11)]; },\n M: function (date, locale) {\n return monthToStr(date.getMonth(), true, locale);\n },\n S: function (date) { return pad(date.getSeconds()); },\n U: function (date) { return date.getTime() / 1000; },\n W: function (date, _, options) {\n return options.getWeek(date);\n },\n Y: function (date) { return pad(date.getFullYear(), 4); },\n d: function (date) { return pad(date.getDate()); },\n h: function (date) { return (date.getHours() % 12 ? date.getHours() % 12 : 12); },\n i: function (date) { return pad(date.getMinutes()); },\n j: function (date) { return date.getDate(); },\n l: function (date, locale) {\n return locale.weekdays.longhand[date.getDay()];\n },\n m: function (date) { return pad(date.getMonth() + 1); },\n n: function (date) { return date.getMonth() + 1; },\n s: function (date) { return date.getSeconds(); },\n u: function (date) { return date.getTime(); },\n w: function (date) { return date.getDay(); },\n y: function (date) { return String(date.getFullYear()).substring(2); },\n};\n","import { tokenRegex, revFormat, formats, } from \"./formatting\";\nimport { defaults } from \"../types/options\";\nimport { english } from \"../l10n/default\";\nexport var createDateFormatter = function (_a) {\n var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c, _d = _a.isMobile, isMobile = _d === void 0 ? false : _d;\n return function (dateObj, frmt, overrideLocale) {\n var locale = overrideLocale || l10n;\n if (config.formatDate !== undefined && !isMobile) {\n return config.formatDate(dateObj, frmt, locale);\n }\n return frmt\n .split(\"\")\n .map(function (c, i, arr) {\n return formats[c] && arr[i - 1] !== \"\\\\\"\n ? formats[c](dateObj, locale, config)\n : c !== \"\\\\\"\n ? c\n : \"\";\n })\n .join(\"\");\n };\n};\nexport var createDateParser = function (_a) {\n var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c;\n return function (date, givenFormat, timeless, customLocale) {\n if (date !== 0 && !date)\n return undefined;\n var locale = customLocale || l10n;\n var parsedDate;\n var dateOrig = date;\n if (date instanceof Date)\n parsedDate = new Date(date.getTime());\n else if (typeof date !== \"string\" &&\n date.toFixed !== undefined)\n parsedDate = new Date(date);\n else if (typeof date === \"string\") {\n var format = givenFormat || (config || defaults).dateFormat;\n var datestr = String(date).trim();\n if (datestr === \"today\") {\n parsedDate = new Date();\n timeless = true;\n }\n else if (config && config.parseDate) {\n parsedDate = config.parseDate(date, format);\n }\n else if (/Z$/.test(datestr) ||\n /GMT$/.test(datestr)) {\n parsedDate = new Date(date);\n }\n else {\n var matched = void 0, ops = [];\n for (var i = 0, matchIndex = 0, regexStr = \"\"; i < format.length; i++) {\n var token = format[i];\n var isBackSlash = token === \"\\\\\";\n var escaped = format[i - 1] === \"\\\\\" || isBackSlash;\n if (tokenRegex[token] && !escaped) {\n regexStr += tokenRegex[token];\n var match = new RegExp(regexStr).exec(date);\n if (match && (matched = true)) {\n ops[token !== \"Y\" ? \"push\" : \"unshift\"]({\n fn: revFormat[token],\n val: match[++matchIndex],\n });\n }\n }\n else if (!isBackSlash)\n regexStr += \".\";\n }\n parsedDate =\n !config || !config.noCalendar\n ? new Date(new Date().getFullYear(), 0, 1, 0, 0, 0, 0)\n : new Date(new Date().setHours(0, 0, 0, 0));\n ops.forEach(function (_a) {\n var fn = _a.fn, val = _a.val;\n return (parsedDate = fn(parsedDate, val, locale) || parsedDate);\n });\n parsedDate = matched ? parsedDate : undefined;\n }\n }\n if (!(parsedDate instanceof Date && !isNaN(parsedDate.getTime()))) {\n config.errorHandler(new Error(\"Invalid date provided: \" + dateOrig));\n return undefined;\n }\n if (timeless === true)\n parsedDate.setHours(0, 0, 0, 0);\n return parsedDate;\n };\n};\nexport function compareDates(date1, date2, timeless) {\n if (timeless === void 0) { timeless = true; }\n if (timeless !== false) {\n return (new Date(date1.getTime()).setHours(0, 0, 0, 0) -\n new Date(date2.getTime()).setHours(0, 0, 0, 0));\n }\n return date1.getTime() - date2.getTime();\n}\nexport function compareTimes(date1, date2) {\n return (3600 * (date1.getHours() - date2.getHours()) +\n 60 * (date1.getMinutes() - date2.getMinutes()) +\n date1.getSeconds() -\n date2.getSeconds());\n}\nexport var isBetween = function (ts, ts1, ts2) {\n return ts > Math.min(ts1, ts2) && ts < Math.max(ts1, ts2);\n};\nexport var calculateSecondsSinceMidnight = function (hours, minutes, seconds) {\n return hours * 3600 + minutes * 60 + seconds;\n};\nexport var parseSeconds = function (secondsSinceMidnight) {\n var hours = Math.floor(secondsSinceMidnight / 3600), minutes = (secondsSinceMidnight - hours * 3600) / 60;\n return [hours, minutes, secondsSinceMidnight - hours * 3600 - minutes * 60];\n};\nexport var duration = {\n DAY: 86400000,\n};\nexport function getDefaultHours(config) {\n var hours = config.defaultHour;\n var minutes = config.defaultMinute;\n var seconds = config.defaultSeconds;\n if (config.minDate !== undefined) {\n var minHour = config.minDate.getHours();\n var minMinutes = config.minDate.getMinutes();\n var minSeconds = config.minDate.getSeconds();\n if (hours < minHour) {\n hours = minHour;\n }\n if (hours === minHour && minutes < minMinutes) {\n minutes = minMinutes;\n }\n if (hours === minHour && minutes === minMinutes && seconds < minSeconds)\n seconds = config.minDate.getSeconds();\n }\n if (config.maxDate !== undefined) {\n var maxHr = config.maxDate.getHours();\n var maxMinutes = config.maxDate.getMinutes();\n hours = Math.min(hours, maxHr);\n if (hours === maxHr)\n minutes = Math.min(maxMinutes, minutes);\n if (hours === maxHr && minutes === maxMinutes)\n seconds = config.maxDate.getSeconds();\n }\n return { hours: hours, minutes: minutes, seconds: seconds };\n}\n","\"use strict\";\nif (typeof Object.assign !== \"function\") {\n Object.assign = function (target) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (!target) {\n throw TypeError(\"Cannot convert undefined or null to object\");\n }\n var _loop_1 = function (source) {\n if (source) {\n Object.keys(source).forEach(function (key) { return (target[key] = source[key]); });\n }\n };\n for (var _a = 0, args_1 = args; _a < args_1.length; _a++) {\n var source = args_1[_a];\n _loop_1(source);\n }\n return target;\n };\n}\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\nimport { defaults as defaultOptions, HOOKS, } from \"./types/options\";\nimport English from \"./l10n/default\";\nimport { arrayify, debounce, int, pad } from \"./utils\";\nimport { clearNode, createElement, createNumberInput, findParent, toggleClass, getEventTarget, } from \"./utils/dom\";\nimport { compareDates, createDateParser, createDateFormatter, duration, isBetween, getDefaultHours, calculateSecondsSinceMidnight, parseSeconds, } from \"./utils/dates\";\nimport { tokenRegex, monthToStr } from \"./utils/formatting\";\nimport \"./utils/polyfills\";\nvar DEBOUNCED_CHANGE_MS = 300;\nfunction FlatpickrInstance(element, instanceConfig) {\n var self = {\n config: __assign(__assign({}, defaultOptions), flatpickr.defaultConfig),\n l10n: English,\n };\n self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });\n self._handlers = [];\n self.pluginElements = [];\n self.loadedPlugins = [];\n self._bind = bind;\n self._setHoursFromDate = setHoursFromDate;\n self._positionCalendar = positionCalendar;\n self.changeMonth = changeMonth;\n self.changeYear = changeYear;\n self.clear = clear;\n self.close = close;\n self.onMouseOver = onMouseOver;\n self._createElement = createElement;\n self.createDay = createDay;\n self.destroy = destroy;\n self.isEnabled = isEnabled;\n self.jumpToDate = jumpToDate;\n self.updateValue = updateValue;\n self.open = open;\n self.redraw = redraw;\n self.set = set;\n self.setDate = setDate;\n self.toggle = toggle;\n function setupHelperFunctions() {\n self.utils = {\n getDaysInMonth: function (month, yr) {\n if (month === void 0) { month = self.currentMonth; }\n if (yr === void 0) { yr = self.currentYear; }\n if (month === 1 && ((yr % 4 === 0 && yr % 100 !== 0) || yr % 400 === 0))\n return 29;\n return self.l10n.daysInMonth[month];\n },\n };\n }\n function init() {\n self.element = self.input = element;\n self.isOpen = false;\n parseConfig();\n setupLocale();\n setupInputs();\n setupDates();\n setupHelperFunctions();\n if (!self.isMobile)\n build();\n bindEvents();\n if (self.selectedDates.length || self.config.noCalendar) {\n if (self.config.enableTime) {\n setHoursFromDate(self.config.noCalendar ? self.latestSelectedDateObj : undefined);\n }\n updateValue(false);\n }\n setCalendarWidth();\n var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n if (!self.isMobile && isSafari) {\n positionCalendar();\n }\n triggerEvent(\"onReady\");\n }\n function getClosestActiveElement() {\n var _a;\n return (((_a = self.calendarContainer) === null || _a === void 0 ? void 0 : _a.getRootNode())\n .activeElement || document.activeElement);\n }\n function bindToInstance(fn) {\n return fn.bind(self);\n }\n function setCalendarWidth() {\n var config = self.config;\n if (config.weekNumbers === false && config.showMonths === 1) {\n return;\n }\n else if (config.noCalendar !== true) {\n window.requestAnimationFrame(function () {\n if (self.calendarContainer !== undefined) {\n self.calendarContainer.style.visibility = \"hidden\";\n self.calendarContainer.style.display = \"block\";\n }\n if (self.daysContainer !== undefined) {\n var daysWidth = (self.days.offsetWidth + 1) * config.showMonths;\n self.daysContainer.style.width = daysWidth + \"px\";\n self.calendarContainer.style.width =\n daysWidth +\n (self.weekWrapper !== undefined\n ? self.weekWrapper.offsetWidth\n : 0) +\n \"px\";\n self.calendarContainer.style.removeProperty(\"visibility\");\n self.calendarContainer.style.removeProperty(\"display\");\n }\n });\n }\n }\n function updateTime(e) {\n if (self.selectedDates.length === 0) {\n var defaultDate = self.config.minDate === undefined ||\n compareDates(new Date(), self.config.minDate) >= 0\n ? new Date()\n : new Date(self.config.minDate.getTime());\n var defaults = getDefaultHours(self.config);\n defaultDate.setHours(defaults.hours, defaults.minutes, defaults.seconds, defaultDate.getMilliseconds());\n self.selectedDates = [defaultDate];\n self.latestSelectedDateObj = defaultDate;\n }\n if (e !== undefined && e.type !== \"blur\") {\n timeWrapper(e);\n }\n var prevValue = self._input.value;\n setHoursFromInputs();\n updateValue();\n if (self._input.value !== prevValue) {\n self._debouncedChange();\n }\n }\n function ampm2military(hour, amPM) {\n return (hour % 12) + 12 * int(amPM === self.l10n.amPM[1]);\n }\n function military2ampm(hour) {\n switch (hour % 24) {\n case 0:\n case 12:\n return 12;\n default:\n return hour % 12;\n }\n }\n function setHoursFromInputs() {\n if (self.hourElement === undefined || self.minuteElement === undefined)\n return;\n var hours = (parseInt(self.hourElement.value.slice(-2), 10) || 0) % 24, minutes = (parseInt(self.minuteElement.value, 10) || 0) % 60, seconds = self.secondElement !== undefined\n ? (parseInt(self.secondElement.value, 10) || 0) % 60\n : 0;\n if (self.amPM !== undefined) {\n hours = ampm2military(hours, self.amPM.textContent);\n }\n var limitMinHours = self.config.minTime !== undefined ||\n (self.config.minDate &&\n self.minDateHasTime &&\n self.latestSelectedDateObj &&\n compareDates(self.latestSelectedDateObj, self.config.minDate, true) ===\n 0);\n var limitMaxHours = self.config.maxTime !== undefined ||\n (self.config.maxDate &&\n self.maxDateHasTime &&\n self.latestSelectedDateObj &&\n compareDates(self.latestSelectedDateObj, self.config.maxDate, true) ===\n 0);\n if (self.config.maxTime !== undefined &&\n self.config.minTime !== undefined &&\n self.config.minTime > self.config.maxTime) {\n var minBound = calculateSecondsSinceMidnight(self.config.minTime.getHours(), self.config.minTime.getMinutes(), self.config.minTime.getSeconds());\n var maxBound = calculateSecondsSinceMidnight(self.config.maxTime.getHours(), self.config.maxTime.getMinutes(), self.config.maxTime.getSeconds());\n var currentTime = calculateSecondsSinceMidnight(hours, minutes, seconds);\n if (currentTime > maxBound && currentTime < minBound) {\n var result = parseSeconds(minBound);\n hours = result[0];\n minutes = result[1];\n seconds = result[2];\n }\n }\n else {\n if (limitMaxHours) {\n var maxTime = self.config.maxTime !== undefined\n ? self.config.maxTime\n : self.config.maxDate;\n hours = Math.min(hours, maxTime.getHours());\n if (hours === maxTime.getHours())\n minutes = Math.min(minutes, maxTime.getMinutes());\n if (minutes === maxTime.getMinutes())\n seconds = Math.min(seconds, maxTime.getSeconds());\n }\n if (limitMinHours) {\n var minTime = self.config.minTime !== undefined\n ? self.config.minTime\n : self.config.minDate;\n hours = Math.max(hours, minTime.getHours());\n if (hours === minTime.getHours() && minutes < minTime.getMinutes())\n minutes = minTime.getMinutes();\n if (minutes === minTime.getMinutes())\n seconds = Math.max(seconds, minTime.getSeconds());\n }\n }\n setHours(hours, minutes, seconds);\n }\n function setHoursFromDate(dateObj) {\n var date = dateObj || self.latestSelectedDateObj;\n if (date && date instanceof Date) {\n setHours(date.getHours(), date.getMinutes(), date.getSeconds());\n }\n }\n function setHours(hours, minutes, seconds) {\n if (self.latestSelectedDateObj !== undefined) {\n self.latestSelectedDateObj.setHours(hours % 24, minutes, seconds || 0, 0);\n }\n if (!self.hourElement || !self.minuteElement || self.isMobile)\n return;\n self.hourElement.value = pad(!self.config.time_24hr\n ? ((12 + hours) % 12) + 12 * int(hours % 12 === 0)\n : hours);\n self.minuteElement.value = pad(minutes);\n if (self.amPM !== undefined)\n self.amPM.textContent = self.l10n.amPM[int(hours >= 12)];\n if (self.secondElement !== undefined)\n self.secondElement.value = pad(seconds);\n }\n function onYearInput(event) {\n var eventTarget = getEventTarget(event);\n var year = parseInt(eventTarget.value) + (event.delta || 0);\n if (year / 1000 > 1 ||\n (event.key === \"Enter\" && !/[^\\d]/.test(year.toString()))) {\n changeYear(year);\n }\n }\n function bind(element, event, handler, options) {\n if (event instanceof Array)\n return event.forEach(function (ev) { return bind(element, ev, handler, options); });\n if (element instanceof Array)\n return element.forEach(function (el) { return bind(el, event, handler, options); });\n element.addEventListener(event, handler, options);\n self._handlers.push({\n remove: function () { return element.removeEventListener(event, handler, options); },\n });\n }\n function triggerChange() {\n triggerEvent(\"onChange\");\n }\n function bindEvents() {\n if (self.config.wrap) {\n [\"open\", \"close\", \"toggle\", \"clear\"].forEach(function (evt) {\n Array.prototype.forEach.call(self.element.querySelectorAll(\"[data-\" + evt + \"]\"), function (el) {\n return bind(el, \"click\", self[evt]);\n });\n });\n }\n if (self.isMobile) {\n setupMobile();\n return;\n }\n var debouncedResize = debounce(onResize, 50);\n self._debouncedChange = debounce(triggerChange, DEBOUNCED_CHANGE_MS);\n if (self.daysContainer && !/iPhone|iPad|iPod/i.test(navigator.userAgent))\n bind(self.daysContainer, \"mouseover\", function (e) {\n if (self.config.mode === \"range\")\n onMouseOver(getEventTarget(e));\n });\n bind(self._input, \"keydown\", onKeyDown);\n if (self.calendarContainer !== undefined) {\n bind(self.calendarContainer, \"keydown\", onKeyDown);\n }\n if (!self.config.inline && !self.config.static)\n bind(window, \"resize\", debouncedResize);\n if (window.ontouchstart !== undefined)\n bind(window.document, \"touchstart\", documentClick);\n else\n bind(window.document, \"mousedown\", documentClick);\n bind(window.document, \"focus\", documentClick, { capture: true });\n if (self.config.clickOpens === true) {\n bind(self._input, \"focus\", self.open);\n bind(self._input, \"click\", self.open);\n }\n if (self.daysContainer !== undefined) {\n bind(self.monthNav, \"click\", onMonthNavClick);\n bind(self.monthNav, [\"keyup\", \"increment\"], onYearInput);\n bind(self.daysContainer, \"click\", selectDate);\n }\n if (self.timeContainer !== undefined &&\n self.minuteElement !== undefined &&\n self.hourElement !== undefined) {\n var selText = function (e) {\n return getEventTarget(e).select();\n };\n bind(self.timeContainer, [\"increment\"], updateTime);\n bind(self.timeContainer, \"blur\", updateTime, { capture: true });\n bind(self.timeContainer, \"click\", timeIncrement);\n bind([self.hourElement, self.minuteElement], [\"focus\", \"click\"], selText);\n if (self.secondElement !== undefined)\n bind(self.secondElement, \"focus\", function () { return self.secondElement && self.secondElement.select(); });\n if (self.amPM !== undefined) {\n bind(self.amPM, \"click\", function (e) {\n updateTime(e);\n });\n }\n }\n if (self.config.allowInput) {\n bind(self._input, \"blur\", onBlur);\n }\n }\n function jumpToDate(jumpDate, triggerChange) {\n var jumpTo = jumpDate !== undefined\n ? self.parseDate(jumpDate)\n : self.latestSelectedDateObj ||\n (self.config.minDate && self.config.minDate > self.now\n ? self.config.minDate\n : self.config.maxDate && self.config.maxDate < self.now\n ? self.config.maxDate\n : self.now);\n var oldYear = self.currentYear;\n var oldMonth = self.currentMonth;\n try {\n if (jumpTo !== undefined) {\n self.currentYear = jumpTo.getFullYear();\n self.currentMonth = jumpTo.getMonth();\n }\n }\n catch (e) {\n e.message = \"Invalid date supplied: \" + jumpTo;\n self.config.errorHandler(e);\n }\n if (triggerChange && self.currentYear !== oldYear) {\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n if (triggerChange &&\n (self.currentYear !== oldYear || self.currentMonth !== oldMonth)) {\n triggerEvent(\"onMonthChange\");\n }\n self.redraw();\n }\n function timeIncrement(e) {\n var eventTarget = getEventTarget(e);\n if (~eventTarget.className.indexOf(\"arrow\"))\n incrementNumInput(e, eventTarget.classList.contains(\"arrowUp\") ? 1 : -1);\n }\n function incrementNumInput(e, delta, inputElem) {\n var target = e && getEventTarget(e);\n var input = inputElem ||\n (target && target.parentNode && target.parentNode.firstChild);\n var event = createEvent(\"increment\");\n event.delta = delta;\n input && input.dispatchEvent(event);\n }\n function build() {\n var fragment = window.document.createDocumentFragment();\n self.calendarContainer = createElement(\"div\", \"flatpickr-calendar\");\n self.calendarContainer.tabIndex = -1;\n if (!self.config.noCalendar) {\n fragment.appendChild(buildMonthNav());\n self.innerContainer = createElement(\"div\", \"flatpickr-innerContainer\");\n if (self.config.weekNumbers) {\n var _a = buildWeeks(), weekWrapper = _a.weekWrapper, weekNumbers = _a.weekNumbers;\n self.innerContainer.appendChild(weekWrapper);\n self.weekNumbers = weekNumbers;\n self.weekWrapper = weekWrapper;\n }\n self.rContainer = createElement(\"div\", \"flatpickr-rContainer\");\n self.rContainer.appendChild(buildWeekdays());\n if (!self.daysContainer) {\n self.daysContainer = createElement(\"div\", \"flatpickr-days\");\n self.daysContainer.tabIndex = -1;\n }\n buildDays();\n self.rContainer.appendChild(self.daysContainer);\n self.innerContainer.appendChild(self.rContainer);\n fragment.appendChild(self.innerContainer);\n }\n if (self.config.enableTime) {\n fragment.appendChild(buildTime());\n }\n toggleClass(self.calendarContainer, \"rangeMode\", self.config.mode === \"range\");\n toggleClass(self.calendarContainer, \"animate\", self.config.animate === true);\n toggleClass(self.calendarContainer, \"multiMonth\", self.config.showMonths > 1);\n self.calendarContainer.appendChild(fragment);\n var customAppend = self.config.appendTo !== undefined &&\n self.config.appendTo.nodeType !== undefined;\n if (self.config.inline || self.config.static) {\n self.calendarContainer.classList.add(self.config.inline ? \"inline\" : \"static\");\n if (self.config.inline) {\n if (!customAppend && self.element.parentNode)\n self.element.parentNode.insertBefore(self.calendarContainer, self._input.nextSibling);\n else if (self.config.appendTo !== undefined)\n self.config.appendTo.appendChild(self.calendarContainer);\n }\n if (self.config.static) {\n var wrapper = createElement(\"div\", \"flatpickr-wrapper\");\n if (self.element.parentNode)\n self.element.parentNode.insertBefore(wrapper, self.element);\n wrapper.appendChild(self.element);\n if (self.altInput)\n wrapper.appendChild(self.altInput);\n wrapper.appendChild(self.calendarContainer);\n }\n }\n if (!self.config.static && !self.config.inline)\n (self.config.appendTo !== undefined\n ? self.config.appendTo\n : window.document.body).appendChild(self.calendarContainer);\n }\n function createDay(className, date, _dayNumber, i) {\n var dateIsEnabled = isEnabled(date, true), dayElement = createElement(\"span\", className, date.getDate().toString());\n dayElement.dateObj = date;\n dayElement.$i = i;\n dayElement.setAttribute(\"aria-label\", self.formatDate(date, self.config.ariaDateFormat));\n if (className.indexOf(\"hidden\") === -1 &&\n compareDates(date, self.now) === 0) {\n self.todayDateElem = dayElement;\n dayElement.classList.add(\"today\");\n dayElement.setAttribute(\"aria-current\", \"date\");\n }\n if (dateIsEnabled) {\n dayElement.tabIndex = -1;\n if (isDateSelected(date)) {\n dayElement.classList.add(\"selected\");\n self.selectedDateElem = dayElement;\n if (self.config.mode === \"range\") {\n toggleClass(dayElement, \"startRange\", self.selectedDates[0] &&\n compareDates(date, self.selectedDates[0], true) === 0);\n toggleClass(dayElement, \"endRange\", self.selectedDates[1] &&\n compareDates(date, self.selectedDates[1], true) === 0);\n if (className === \"nextMonthDay\")\n dayElement.classList.add(\"inRange\");\n }\n }\n }\n else {\n dayElement.classList.add(\"flatpickr-disabled\");\n }\n if (self.config.mode === \"range\") {\n if (isDateInRange(date) && !isDateSelected(date))\n dayElement.classList.add(\"inRange\");\n }\n if (self.weekNumbers &&\n self.config.showMonths === 1 &&\n className !== \"prevMonthDay\" &&\n i % 7 === 6) {\n self.weekNumbers.insertAdjacentHTML(\"beforeend\", \"\" + self.config.getWeek(date) + \"\");\n }\n triggerEvent(\"onDayCreate\", dayElement);\n return dayElement;\n }\n function focusOnDayElem(targetNode) {\n targetNode.focus();\n if (self.config.mode === \"range\")\n onMouseOver(targetNode);\n }\n function getFirstAvailableDay(delta) {\n var startMonth = delta > 0 ? 0 : self.config.showMonths - 1;\n var endMonth = delta > 0 ? self.config.showMonths : -1;\n for (var m = startMonth; m != endMonth; m += delta) {\n var month = self.daysContainer.children[m];\n var startIndex = delta > 0 ? 0 : month.children.length - 1;\n var endIndex = delta > 0 ? month.children.length : -1;\n for (var i = startIndex; i != endIndex; i += delta) {\n var c = month.children[i];\n if (c.className.indexOf(\"hidden\") === -1 && isEnabled(c.dateObj))\n return c;\n }\n }\n return undefined;\n }\n function getNextAvailableDay(current, delta) {\n var givenMonth = current.className.indexOf(\"Month\") === -1\n ? current.dateObj.getMonth()\n : self.currentMonth;\n var endMonth = delta > 0 ? self.config.showMonths : -1;\n var loopDelta = delta > 0 ? 1 : -1;\n for (var m = givenMonth - self.currentMonth; m != endMonth; m += loopDelta) {\n var month = self.daysContainer.children[m];\n var startIndex = givenMonth - self.currentMonth === m\n ? current.$i + delta\n : delta < 0\n ? month.children.length - 1\n : 0;\n var numMonthDays = month.children.length;\n for (var i = startIndex; i >= 0 && i < numMonthDays && i != (delta > 0 ? numMonthDays : -1); i += loopDelta) {\n var c = month.children[i];\n if (c.className.indexOf(\"hidden\") === -1 &&\n isEnabled(c.dateObj) &&\n Math.abs(current.$i - i) >= Math.abs(delta))\n return focusOnDayElem(c);\n }\n }\n self.changeMonth(loopDelta);\n focusOnDay(getFirstAvailableDay(loopDelta), 0);\n return undefined;\n }\n function focusOnDay(current, offset) {\n var activeElement = getClosestActiveElement();\n var dayFocused = isInView(activeElement || document.body);\n var startElem = current !== undefined\n ? current\n : dayFocused\n ? activeElement\n : self.selectedDateElem !== undefined && isInView(self.selectedDateElem)\n ? self.selectedDateElem\n : self.todayDateElem !== undefined && isInView(self.todayDateElem)\n ? self.todayDateElem\n : getFirstAvailableDay(offset > 0 ? 1 : -1);\n if (startElem === undefined) {\n self._input.focus();\n }\n else if (!dayFocused) {\n focusOnDayElem(startElem);\n }\n else {\n getNextAvailableDay(startElem, offset);\n }\n }\n function buildMonthDays(year, month) {\n var firstOfMonth = (new Date(year, month, 1).getDay() - self.l10n.firstDayOfWeek + 7) % 7;\n var prevMonthDays = self.utils.getDaysInMonth((month - 1 + 12) % 12, year);\n var daysInMonth = self.utils.getDaysInMonth(month, year), days = window.document.createDocumentFragment(), isMultiMonth = self.config.showMonths > 1, prevMonthDayClass = isMultiMonth ? \"prevMonthDay hidden\" : \"prevMonthDay\", nextMonthDayClass = isMultiMonth ? \"nextMonthDay hidden\" : \"nextMonthDay\";\n var dayNumber = prevMonthDays + 1 - firstOfMonth, dayIndex = 0;\n for (; dayNumber <= prevMonthDays; dayNumber++, dayIndex++) {\n days.appendChild(createDay(\"flatpickr-day \" + prevMonthDayClass, new Date(year, month - 1, dayNumber), dayNumber, dayIndex));\n }\n for (dayNumber = 1; dayNumber <= daysInMonth; dayNumber++, dayIndex++) {\n days.appendChild(createDay(\"flatpickr-day\", new Date(year, month, dayNumber), dayNumber, dayIndex));\n }\n for (var dayNum = daysInMonth + 1; dayNum <= 42 - firstOfMonth &&\n (self.config.showMonths === 1 || dayIndex % 7 !== 0); dayNum++, dayIndex++) {\n days.appendChild(createDay(\"flatpickr-day \" + nextMonthDayClass, new Date(year, month + 1, dayNum % daysInMonth), dayNum, dayIndex));\n }\n var dayContainer = createElement(\"div\", \"dayContainer\");\n dayContainer.appendChild(days);\n return dayContainer;\n }\n function buildDays() {\n if (self.daysContainer === undefined) {\n return;\n }\n clearNode(self.daysContainer);\n if (self.weekNumbers)\n clearNode(self.weekNumbers);\n var frag = document.createDocumentFragment();\n for (var i = 0; i < self.config.showMonths; i++) {\n var d = new Date(self.currentYear, self.currentMonth, 1);\n d.setMonth(self.currentMonth + i);\n frag.appendChild(buildMonthDays(d.getFullYear(), d.getMonth()));\n }\n self.daysContainer.appendChild(frag);\n self.days = self.daysContainer.firstChild;\n if (self.config.mode === \"range\" && self.selectedDates.length === 1) {\n onMouseOver();\n }\n }\n function buildMonthSwitch() {\n if (self.config.showMonths > 1 ||\n self.config.monthSelectorType !== \"dropdown\")\n return;\n var shouldBuildMonth = function (month) {\n if (self.config.minDate !== undefined &&\n self.currentYear === self.config.minDate.getFullYear() &&\n month < self.config.minDate.getMonth()) {\n return false;\n }\n return !(self.config.maxDate !== undefined &&\n self.currentYear === self.config.maxDate.getFullYear() &&\n month > self.config.maxDate.getMonth());\n };\n self.monthsDropdownContainer.tabIndex = -1;\n self.monthsDropdownContainer.innerHTML = \"\";\n for (var i = 0; i < 12; i++) {\n if (!shouldBuildMonth(i))\n continue;\n var month = createElement(\"option\", \"flatpickr-monthDropdown-month\");\n month.value = new Date(self.currentYear, i).getMonth().toString();\n month.textContent = monthToStr(i, self.config.shorthandCurrentMonth, self.l10n);\n month.tabIndex = -1;\n if (self.currentMonth === i) {\n month.selected = true;\n }\n self.monthsDropdownContainer.appendChild(month);\n }\n }\n function buildMonth() {\n var container = createElement(\"div\", \"flatpickr-month\");\n var monthNavFragment = window.document.createDocumentFragment();\n var monthElement;\n if (self.config.showMonths > 1 ||\n self.config.monthSelectorType === \"static\") {\n monthElement = createElement(\"span\", \"cur-month\");\n }\n else {\n self.monthsDropdownContainer = createElement(\"select\", \"flatpickr-monthDropdown-months\");\n self.monthsDropdownContainer.setAttribute(\"aria-label\", self.l10n.monthAriaLabel);\n bind(self.monthsDropdownContainer, \"change\", function (e) {\n var target = getEventTarget(e);\n var selectedMonth = parseInt(target.value, 10);\n self.changeMonth(selectedMonth - self.currentMonth);\n triggerEvent(\"onMonthChange\");\n });\n buildMonthSwitch();\n monthElement = self.monthsDropdownContainer;\n }\n var yearInput = createNumberInput(\"cur-year\", { tabindex: \"-1\" });\n var yearElement = yearInput.getElementsByTagName(\"input\")[0];\n yearElement.setAttribute(\"aria-label\", self.l10n.yearAriaLabel);\n if (self.config.minDate) {\n yearElement.setAttribute(\"min\", self.config.minDate.getFullYear().toString());\n }\n if (self.config.maxDate) {\n yearElement.setAttribute(\"max\", self.config.maxDate.getFullYear().toString());\n yearElement.disabled =\n !!self.config.minDate &&\n self.config.minDate.getFullYear() === self.config.maxDate.getFullYear();\n }\n var currentMonth = createElement(\"div\", \"flatpickr-current-month\");\n currentMonth.appendChild(monthElement);\n currentMonth.appendChild(yearInput);\n monthNavFragment.appendChild(currentMonth);\n container.appendChild(monthNavFragment);\n return {\n container: container,\n yearElement: yearElement,\n monthElement: monthElement,\n };\n }\n function buildMonths() {\n clearNode(self.monthNav);\n self.monthNav.appendChild(self.prevMonthNav);\n if (self.config.showMonths) {\n self.yearElements = [];\n self.monthElements = [];\n }\n for (var m = self.config.showMonths; m--;) {\n var month = buildMonth();\n self.yearElements.push(month.yearElement);\n self.monthElements.push(month.monthElement);\n self.monthNav.appendChild(month.container);\n }\n self.monthNav.appendChild(self.nextMonthNav);\n }\n function buildMonthNav() {\n self.monthNav = createElement(\"div\", \"flatpickr-months\");\n self.yearElements = [];\n self.monthElements = [];\n self.prevMonthNav = createElement(\"span\", \"flatpickr-prev-month\");\n self.prevMonthNav.innerHTML = self.config.prevArrow;\n self.nextMonthNav = createElement(\"span\", \"flatpickr-next-month\");\n self.nextMonthNav.innerHTML = self.config.nextArrow;\n buildMonths();\n Object.defineProperty(self, \"_hidePrevMonthArrow\", {\n get: function () { return self.__hidePrevMonthArrow; },\n set: function (bool) {\n if (self.__hidePrevMonthArrow !== bool) {\n toggleClass(self.prevMonthNav, \"flatpickr-disabled\", bool);\n self.__hidePrevMonthArrow = bool;\n }\n },\n });\n Object.defineProperty(self, \"_hideNextMonthArrow\", {\n get: function () { return self.__hideNextMonthArrow; },\n set: function (bool) {\n if (self.__hideNextMonthArrow !== bool) {\n toggleClass(self.nextMonthNav, \"flatpickr-disabled\", bool);\n self.__hideNextMonthArrow = bool;\n }\n },\n });\n self.currentYearElement = self.yearElements[0];\n updateNavigationCurrentMonth();\n return self.monthNav;\n }\n function buildTime() {\n self.calendarContainer.classList.add(\"hasTime\");\n if (self.config.noCalendar)\n self.calendarContainer.classList.add(\"noCalendar\");\n var defaults = getDefaultHours(self.config);\n self.timeContainer = createElement(\"div\", \"flatpickr-time\");\n self.timeContainer.tabIndex = -1;\n var separator = createElement(\"span\", \"flatpickr-time-separator\", \":\");\n var hourInput = createNumberInput(\"flatpickr-hour\", {\n \"aria-label\": self.l10n.hourAriaLabel,\n });\n self.hourElement = hourInput.getElementsByTagName(\"input\")[0];\n var minuteInput = createNumberInput(\"flatpickr-minute\", {\n \"aria-label\": self.l10n.minuteAriaLabel,\n });\n self.minuteElement = minuteInput.getElementsByTagName(\"input\")[0];\n self.hourElement.tabIndex = self.minuteElement.tabIndex = -1;\n self.hourElement.value = pad(self.latestSelectedDateObj\n ? self.latestSelectedDateObj.getHours()\n : self.config.time_24hr\n ? defaults.hours\n : military2ampm(defaults.hours));\n self.minuteElement.value = pad(self.latestSelectedDateObj\n ? self.latestSelectedDateObj.getMinutes()\n : defaults.minutes);\n self.hourElement.setAttribute(\"step\", self.config.hourIncrement.toString());\n self.minuteElement.setAttribute(\"step\", self.config.minuteIncrement.toString());\n self.hourElement.setAttribute(\"min\", self.config.time_24hr ? \"0\" : \"1\");\n self.hourElement.setAttribute(\"max\", self.config.time_24hr ? \"23\" : \"12\");\n self.hourElement.setAttribute(\"maxlength\", \"2\");\n self.minuteElement.setAttribute(\"min\", \"0\");\n self.minuteElement.setAttribute(\"max\", \"59\");\n self.minuteElement.setAttribute(\"maxlength\", \"2\");\n self.timeContainer.appendChild(hourInput);\n self.timeContainer.appendChild(separator);\n self.timeContainer.appendChild(minuteInput);\n if (self.config.time_24hr)\n self.timeContainer.classList.add(\"time24hr\");\n if (self.config.enableSeconds) {\n self.timeContainer.classList.add(\"hasSeconds\");\n var secondInput = createNumberInput(\"flatpickr-second\");\n self.secondElement = secondInput.getElementsByTagName(\"input\")[0];\n self.secondElement.value = pad(self.latestSelectedDateObj\n ? self.latestSelectedDateObj.getSeconds()\n : defaults.seconds);\n self.secondElement.setAttribute(\"step\", self.minuteElement.getAttribute(\"step\"));\n self.secondElement.setAttribute(\"min\", \"0\");\n self.secondElement.setAttribute(\"max\", \"59\");\n self.secondElement.setAttribute(\"maxlength\", \"2\");\n self.timeContainer.appendChild(createElement(\"span\", \"flatpickr-time-separator\", \":\"));\n self.timeContainer.appendChild(secondInput);\n }\n if (!self.config.time_24hr) {\n self.amPM = createElement(\"span\", \"flatpickr-am-pm\", self.l10n.amPM[int((self.latestSelectedDateObj\n ? self.hourElement.value\n : self.config.defaultHour) > 11)]);\n self.amPM.title = self.l10n.toggleTitle;\n self.amPM.tabIndex = -1;\n self.timeContainer.appendChild(self.amPM);\n }\n return self.timeContainer;\n }\n function buildWeekdays() {\n if (!self.weekdayContainer)\n self.weekdayContainer = createElement(\"div\", \"flatpickr-weekdays\");\n else\n clearNode(self.weekdayContainer);\n for (var i = self.config.showMonths; i--;) {\n var container = createElement(\"div\", \"flatpickr-weekdaycontainer\");\n self.weekdayContainer.appendChild(container);\n }\n updateWeekdays();\n return self.weekdayContainer;\n }\n function updateWeekdays() {\n if (!self.weekdayContainer) {\n return;\n }\n var firstDayOfWeek = self.l10n.firstDayOfWeek;\n var weekdays = __spreadArrays(self.l10n.weekdays.shorthand);\n if (firstDayOfWeek > 0 && firstDayOfWeek < weekdays.length) {\n weekdays = __spreadArrays(weekdays.splice(firstDayOfWeek, weekdays.length), weekdays.splice(0, firstDayOfWeek));\n }\n for (var i = self.config.showMonths; i--;) {\n self.weekdayContainer.children[i].innerHTML = \"\\n \\n \" + weekdays.join(\"\") + \"\\n \\n \";\n }\n }\n function buildWeeks() {\n self.calendarContainer.classList.add(\"hasWeeks\");\n var weekWrapper = createElement(\"div\", \"flatpickr-weekwrapper\");\n weekWrapper.appendChild(createElement(\"span\", \"flatpickr-weekday\", self.l10n.weekAbbreviation));\n var weekNumbers = createElement(\"div\", \"flatpickr-weeks\");\n weekWrapper.appendChild(weekNumbers);\n return {\n weekWrapper: weekWrapper,\n weekNumbers: weekNumbers,\n };\n }\n function changeMonth(value, isOffset) {\n if (isOffset === void 0) { isOffset = true; }\n var delta = isOffset ? value : value - self.currentMonth;\n if ((delta < 0 && self._hidePrevMonthArrow === true) ||\n (delta > 0 && self._hideNextMonthArrow === true))\n return;\n self.currentMonth += delta;\n if (self.currentMonth < 0 || self.currentMonth > 11) {\n self.currentYear += self.currentMonth > 11 ? 1 : -1;\n self.currentMonth = (self.currentMonth + 12) % 12;\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n buildDays();\n triggerEvent(\"onMonthChange\");\n updateNavigationCurrentMonth();\n }\n function clear(triggerChangeEvent, toInitial) {\n if (triggerChangeEvent === void 0) { triggerChangeEvent = true; }\n if (toInitial === void 0) { toInitial = true; }\n self.input.value = \"\";\n if (self.altInput !== undefined)\n self.altInput.value = \"\";\n if (self.mobileInput !== undefined)\n self.mobileInput.value = \"\";\n self.selectedDates = [];\n self.latestSelectedDateObj = undefined;\n if (toInitial === true) {\n self.currentYear = self._initialDate.getFullYear();\n self.currentMonth = self._initialDate.getMonth();\n }\n if (self.config.enableTime === true) {\n var _a = getDefaultHours(self.config), hours = _a.hours, minutes = _a.minutes, seconds = _a.seconds;\n setHours(hours, minutes, seconds);\n }\n self.redraw();\n if (triggerChangeEvent)\n triggerEvent(\"onChange\");\n }\n function close() {\n self.isOpen = false;\n if (!self.isMobile) {\n if (self.calendarContainer !== undefined) {\n self.calendarContainer.classList.remove(\"open\");\n }\n if (self._input !== undefined) {\n self._input.classList.remove(\"active\");\n }\n }\n triggerEvent(\"onClose\");\n }\n function destroy() {\n if (self.config !== undefined)\n triggerEvent(\"onDestroy\");\n for (var i = self._handlers.length; i--;) {\n self._handlers[i].remove();\n }\n self._handlers = [];\n if (self.mobileInput) {\n if (self.mobileInput.parentNode)\n self.mobileInput.parentNode.removeChild(self.mobileInput);\n self.mobileInput = undefined;\n }\n else if (self.calendarContainer && self.calendarContainer.parentNode) {\n if (self.config.static && self.calendarContainer.parentNode) {\n var wrapper = self.calendarContainer.parentNode;\n wrapper.lastChild && wrapper.removeChild(wrapper.lastChild);\n if (wrapper.parentNode) {\n while (wrapper.firstChild)\n wrapper.parentNode.insertBefore(wrapper.firstChild, wrapper);\n wrapper.parentNode.removeChild(wrapper);\n }\n }\n else\n self.calendarContainer.parentNode.removeChild(self.calendarContainer);\n }\n if (self.altInput) {\n self.input.type = \"text\";\n if (self.altInput.parentNode)\n self.altInput.parentNode.removeChild(self.altInput);\n delete self.altInput;\n }\n if (self.input) {\n self.input.type = self.input._type;\n self.input.classList.remove(\"flatpickr-input\");\n self.input.removeAttribute(\"readonly\");\n }\n [\n \"_showTimeInput\",\n \"latestSelectedDateObj\",\n \"_hideNextMonthArrow\",\n \"_hidePrevMonthArrow\",\n \"__hideNextMonthArrow\",\n \"__hidePrevMonthArrow\",\n \"isMobile\",\n \"isOpen\",\n \"selectedDateElem\",\n \"minDateHasTime\",\n \"maxDateHasTime\",\n \"days\",\n \"daysContainer\",\n \"_input\",\n \"_positionElement\",\n \"innerContainer\",\n \"rContainer\",\n \"monthNav\",\n \"todayDateElem\",\n \"calendarContainer\",\n \"weekdayContainer\",\n \"prevMonthNav\",\n \"nextMonthNav\",\n \"monthsDropdownContainer\",\n \"currentMonthElement\",\n \"currentYearElement\",\n \"navigationCurrentMonth\",\n \"selectedDateElem\",\n \"config\",\n ].forEach(function (k) {\n try {\n delete self[k];\n }\n catch (_) { }\n });\n }\n function isCalendarElem(elem) {\n return self.calendarContainer.contains(elem);\n }\n function documentClick(e) {\n if (self.isOpen && !self.config.inline) {\n var eventTarget_1 = getEventTarget(e);\n var isCalendarElement = isCalendarElem(eventTarget_1);\n var isInput = eventTarget_1 === self.input ||\n eventTarget_1 === self.altInput ||\n self.element.contains(eventTarget_1) ||\n (e.path &&\n e.path.indexOf &&\n (~e.path.indexOf(self.input) ||\n ~e.path.indexOf(self.altInput)));\n var lostFocus = !isInput &&\n !isCalendarElement &&\n !isCalendarElem(e.relatedTarget);\n var isIgnored = !self.config.ignoredFocusElements.some(function (elem) {\n return elem.contains(eventTarget_1);\n });\n if (lostFocus && isIgnored) {\n if (self.config.allowInput) {\n self.setDate(self._input.value, false, self.config.altInput\n ? self.config.altFormat\n : self.config.dateFormat);\n }\n if (self.timeContainer !== undefined &&\n self.minuteElement !== undefined &&\n self.hourElement !== undefined &&\n self.input.value !== \"\" &&\n self.input.value !== undefined) {\n updateTime();\n }\n self.close();\n if (self.config &&\n self.config.mode === \"range\" &&\n self.selectedDates.length === 1)\n self.clear(false);\n }\n }\n }\n function changeYear(newYear) {\n if (!newYear ||\n (self.config.minDate && newYear < self.config.minDate.getFullYear()) ||\n (self.config.maxDate && newYear > self.config.maxDate.getFullYear()))\n return;\n var newYearNum = newYear, isNewYear = self.currentYear !== newYearNum;\n self.currentYear = newYearNum || self.currentYear;\n if (self.config.maxDate &&\n self.currentYear === self.config.maxDate.getFullYear()) {\n self.currentMonth = Math.min(self.config.maxDate.getMonth(), self.currentMonth);\n }\n else if (self.config.minDate &&\n self.currentYear === self.config.minDate.getFullYear()) {\n self.currentMonth = Math.max(self.config.minDate.getMonth(), self.currentMonth);\n }\n if (isNewYear) {\n self.redraw();\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n }\n function isEnabled(date, timeless) {\n var _a;\n if (timeless === void 0) { timeless = true; }\n var dateToCheck = self.parseDate(date, undefined, timeless);\n if ((self.config.minDate &&\n dateToCheck &&\n compareDates(dateToCheck, self.config.minDate, timeless !== undefined ? timeless : !self.minDateHasTime) < 0) ||\n (self.config.maxDate &&\n dateToCheck &&\n compareDates(dateToCheck, self.config.maxDate, timeless !== undefined ? timeless : !self.maxDateHasTime) > 0))\n return false;\n if (!self.config.enable && self.config.disable.length === 0)\n return true;\n if (dateToCheck === undefined)\n return false;\n var bool = !!self.config.enable, array = (_a = self.config.enable) !== null && _a !== void 0 ? _a : self.config.disable;\n for (var i = 0, d = void 0; i < array.length; i++) {\n d = array[i];\n if (typeof d === \"function\" &&\n d(dateToCheck))\n return bool;\n else if (d instanceof Date &&\n dateToCheck !== undefined &&\n d.getTime() === dateToCheck.getTime())\n return bool;\n else if (typeof d === \"string\") {\n var parsed = self.parseDate(d, undefined, true);\n return parsed && parsed.getTime() === dateToCheck.getTime()\n ? bool\n : !bool;\n }\n else if (typeof d === \"object\" &&\n dateToCheck !== undefined &&\n d.from &&\n d.to &&\n dateToCheck.getTime() >= d.from.getTime() &&\n dateToCheck.getTime() <= d.to.getTime())\n return bool;\n }\n return !bool;\n }\n function isInView(elem) {\n if (self.daysContainer !== undefined)\n return (elem.className.indexOf(\"hidden\") === -1 &&\n elem.className.indexOf(\"flatpickr-disabled\") === -1 &&\n self.daysContainer.contains(elem));\n return false;\n }\n function onBlur(e) {\n var isInput = e.target === self._input;\n var valueChanged = self._input.value.trimEnd() !== getDateStr();\n if (isInput &&\n valueChanged &&\n !(e.relatedTarget && isCalendarElem(e.relatedTarget))) {\n self.setDate(self._input.value, true, e.target === self.altInput\n ? self.config.altFormat\n : self.config.dateFormat);\n }\n }\n function onKeyDown(e) {\n var eventTarget = getEventTarget(e);\n var isInput = self.config.wrap\n ? element.contains(eventTarget)\n : eventTarget === self._input;\n var allowInput = self.config.allowInput;\n var allowKeydown = self.isOpen && (!allowInput || !isInput);\n var allowInlineKeydown = self.config.inline && isInput && !allowInput;\n if (e.keyCode === 13 && isInput) {\n if (allowInput) {\n self.setDate(self._input.value, true, eventTarget === self.altInput\n ? self.config.altFormat\n : self.config.dateFormat);\n self.close();\n return eventTarget.blur();\n }\n else {\n self.open();\n }\n }\n else if (isCalendarElem(eventTarget) ||\n allowKeydown ||\n allowInlineKeydown) {\n var isTimeObj = !!self.timeContainer &&\n self.timeContainer.contains(eventTarget);\n switch (e.keyCode) {\n case 13:\n if (isTimeObj) {\n e.preventDefault();\n updateTime();\n focusAndClose();\n }\n else\n selectDate(e);\n break;\n case 27:\n e.preventDefault();\n focusAndClose();\n break;\n case 8:\n case 46:\n if (isInput && !self.config.allowInput) {\n e.preventDefault();\n self.clear();\n }\n break;\n case 37:\n case 39:\n if (!isTimeObj && !isInput) {\n e.preventDefault();\n var activeElement = getClosestActiveElement();\n if (self.daysContainer !== undefined &&\n (allowInput === false ||\n (activeElement && isInView(activeElement)))) {\n var delta_1 = e.keyCode === 39 ? 1 : -1;\n if (!e.ctrlKey)\n focusOnDay(undefined, delta_1);\n else {\n e.stopPropagation();\n changeMonth(delta_1);\n focusOnDay(getFirstAvailableDay(1), 0);\n }\n }\n }\n else if (self.hourElement)\n self.hourElement.focus();\n break;\n case 38:\n case 40:\n e.preventDefault();\n var delta = e.keyCode === 40 ? 1 : -1;\n if ((self.daysContainer &&\n eventTarget.$i !== undefined) ||\n eventTarget === self.input ||\n eventTarget === self.altInput) {\n if (e.ctrlKey) {\n e.stopPropagation();\n changeYear(self.currentYear - delta);\n focusOnDay(getFirstAvailableDay(1), 0);\n }\n else if (!isTimeObj)\n focusOnDay(undefined, delta * 7);\n }\n else if (eventTarget === self.currentYearElement) {\n changeYear(self.currentYear - delta);\n }\n else if (self.config.enableTime) {\n if (!isTimeObj && self.hourElement)\n self.hourElement.focus();\n updateTime(e);\n self._debouncedChange();\n }\n break;\n case 9:\n if (isTimeObj) {\n var elems = [\n self.hourElement,\n self.minuteElement,\n self.secondElement,\n self.amPM,\n ]\n .concat(self.pluginElements)\n .filter(function (x) { return x; });\n var i = elems.indexOf(eventTarget);\n if (i !== -1) {\n var target = elems[i + (e.shiftKey ? -1 : 1)];\n e.preventDefault();\n (target || self._input).focus();\n }\n }\n else if (!self.config.noCalendar &&\n self.daysContainer &&\n self.daysContainer.contains(eventTarget) &&\n e.shiftKey) {\n e.preventDefault();\n self._input.focus();\n }\n break;\n default:\n break;\n }\n }\n if (self.amPM !== undefined && eventTarget === self.amPM) {\n switch (e.key) {\n case self.l10n.amPM[0].charAt(0):\n case self.l10n.amPM[0].charAt(0).toLowerCase():\n self.amPM.textContent = self.l10n.amPM[0];\n setHoursFromInputs();\n updateValue();\n break;\n case self.l10n.amPM[1].charAt(0):\n case self.l10n.amPM[1].charAt(0).toLowerCase():\n self.amPM.textContent = self.l10n.amPM[1];\n setHoursFromInputs();\n updateValue();\n break;\n }\n }\n if (isInput || isCalendarElem(eventTarget)) {\n triggerEvent(\"onKeyDown\", e);\n }\n }\n function onMouseOver(elem, cellClass) {\n if (cellClass === void 0) { cellClass = \"flatpickr-day\"; }\n if (self.selectedDates.length !== 1 ||\n (elem &&\n (!elem.classList.contains(cellClass) ||\n elem.classList.contains(\"flatpickr-disabled\"))))\n return;\n var hoverDate = elem\n ? elem.dateObj.getTime()\n : self.days.firstElementChild.dateObj.getTime(), initialDate = self.parseDate(self.selectedDates[0], undefined, true).getTime(), rangeStartDate = Math.min(hoverDate, self.selectedDates[0].getTime()), rangeEndDate = Math.max(hoverDate, self.selectedDates[0].getTime());\n var containsDisabled = false;\n var minRange = 0, maxRange = 0;\n for (var t = rangeStartDate; t < rangeEndDate; t += duration.DAY) {\n if (!isEnabled(new Date(t), true)) {\n containsDisabled =\n containsDisabled || (t > rangeStartDate && t < rangeEndDate);\n if (t < initialDate && (!minRange || t > minRange))\n minRange = t;\n else if (t > initialDate && (!maxRange || t < maxRange))\n maxRange = t;\n }\n }\n var hoverableCells = Array.from(self.rContainer.querySelectorAll(\"*:nth-child(-n+\" + self.config.showMonths + \") > .\" + cellClass));\n hoverableCells.forEach(function (dayElem) {\n var date = dayElem.dateObj;\n var timestamp = date.getTime();\n var outOfRange = (minRange > 0 && timestamp < minRange) ||\n (maxRange > 0 && timestamp > maxRange);\n if (outOfRange) {\n dayElem.classList.add(\"notAllowed\");\n [\"inRange\", \"startRange\", \"endRange\"].forEach(function (c) {\n dayElem.classList.remove(c);\n });\n return;\n }\n else if (containsDisabled && !outOfRange)\n return;\n [\"startRange\", \"inRange\", \"endRange\", \"notAllowed\"].forEach(function (c) {\n dayElem.classList.remove(c);\n });\n if (elem !== undefined) {\n elem.classList.add(hoverDate <= self.selectedDates[0].getTime()\n ? \"startRange\"\n : \"endRange\");\n if (initialDate < hoverDate && timestamp === initialDate)\n dayElem.classList.add(\"startRange\");\n else if (initialDate > hoverDate && timestamp === initialDate)\n dayElem.classList.add(\"endRange\");\n if (timestamp >= minRange &&\n (maxRange === 0 || timestamp <= maxRange) &&\n isBetween(timestamp, initialDate, hoverDate))\n dayElem.classList.add(\"inRange\");\n }\n });\n }\n function onResize() {\n if (self.isOpen && !self.config.static && !self.config.inline)\n positionCalendar();\n }\n function open(e, positionElement) {\n if (positionElement === void 0) { positionElement = self._positionElement; }\n if (self.isMobile === true) {\n if (e) {\n e.preventDefault();\n var eventTarget = getEventTarget(e);\n if (eventTarget) {\n eventTarget.blur();\n }\n }\n if (self.mobileInput !== undefined) {\n self.mobileInput.focus();\n self.mobileInput.click();\n }\n triggerEvent(\"onOpen\");\n return;\n }\n else if (self._input.disabled || self.config.inline) {\n return;\n }\n var wasOpen = self.isOpen;\n self.isOpen = true;\n if (!wasOpen) {\n self.calendarContainer.classList.add(\"open\");\n self._input.classList.add(\"active\");\n triggerEvent(\"onOpen\");\n positionCalendar(positionElement);\n }\n if (self.config.enableTime === true && self.config.noCalendar === true) {\n if (self.config.allowInput === false &&\n (e === undefined ||\n !self.timeContainer.contains(e.relatedTarget))) {\n setTimeout(function () { return self.hourElement.select(); }, 50);\n }\n }\n }\n function minMaxDateSetter(type) {\n return function (date) {\n var dateObj = (self.config[\"_\" + type + \"Date\"] = self.parseDate(date, self.config.dateFormat));\n var inverseDateObj = self.config[\"_\" + (type === \"min\" ? \"max\" : \"min\") + \"Date\"];\n if (dateObj !== undefined) {\n self[type === \"min\" ? \"minDateHasTime\" : \"maxDateHasTime\"] =\n dateObj.getHours() > 0 ||\n dateObj.getMinutes() > 0 ||\n dateObj.getSeconds() > 0;\n }\n if (self.selectedDates) {\n self.selectedDates = self.selectedDates.filter(function (d) { return isEnabled(d); });\n if (!self.selectedDates.length && type === \"min\")\n setHoursFromDate(dateObj);\n updateValue();\n }\n if (self.daysContainer) {\n redraw();\n if (dateObj !== undefined)\n self.currentYearElement[type] = dateObj.getFullYear().toString();\n else\n self.currentYearElement.removeAttribute(type);\n self.currentYearElement.disabled =\n !!inverseDateObj &&\n dateObj !== undefined &&\n inverseDateObj.getFullYear() === dateObj.getFullYear();\n }\n };\n }\n function parseConfig() {\n var boolOpts = [\n \"wrap\",\n \"weekNumbers\",\n \"allowInput\",\n \"allowInvalidPreload\",\n \"clickOpens\",\n \"time_24hr\",\n \"enableTime\",\n \"noCalendar\",\n \"altInput\",\n \"shorthandCurrentMonth\",\n \"inline\",\n \"static\",\n \"enableSeconds\",\n \"disableMobile\",\n ];\n var userConfig = __assign(__assign({}, JSON.parse(JSON.stringify(element.dataset || {}))), instanceConfig);\n var formats = {};\n self.config.parseDate = userConfig.parseDate;\n self.config.formatDate = userConfig.formatDate;\n Object.defineProperty(self.config, \"enable\", {\n get: function () { return self.config._enable; },\n set: function (dates) {\n self.config._enable = parseDateRules(dates);\n },\n });\n Object.defineProperty(self.config, \"disable\", {\n get: function () { return self.config._disable; },\n set: function (dates) {\n self.config._disable = parseDateRules(dates);\n },\n });\n var timeMode = userConfig.mode === \"time\";\n if (!userConfig.dateFormat && (userConfig.enableTime || timeMode)) {\n var defaultDateFormat = flatpickr.defaultConfig.dateFormat || defaultOptions.dateFormat;\n formats.dateFormat =\n userConfig.noCalendar || timeMode\n ? \"H:i\" + (userConfig.enableSeconds ? \":S\" : \"\")\n : defaultDateFormat + \" H:i\" + (userConfig.enableSeconds ? \":S\" : \"\");\n }\n if (userConfig.altInput &&\n (userConfig.enableTime || timeMode) &&\n !userConfig.altFormat) {\n var defaultAltFormat = flatpickr.defaultConfig.altFormat || defaultOptions.altFormat;\n formats.altFormat =\n userConfig.noCalendar || timeMode\n ? \"h:i\" + (userConfig.enableSeconds ? \":S K\" : \" K\")\n : defaultAltFormat + (\" h:i\" + (userConfig.enableSeconds ? \":S\" : \"\") + \" K\");\n }\n Object.defineProperty(self.config, \"minDate\", {\n get: function () { return self.config._minDate; },\n set: minMaxDateSetter(\"min\"),\n });\n Object.defineProperty(self.config, \"maxDate\", {\n get: function () { return self.config._maxDate; },\n set: minMaxDateSetter(\"max\"),\n });\n var minMaxTimeSetter = function (type) { return function (val) {\n self.config[type === \"min\" ? \"_minTime\" : \"_maxTime\"] = self.parseDate(val, \"H:i:S\");\n }; };\n Object.defineProperty(self.config, \"minTime\", {\n get: function () { return self.config._minTime; },\n set: minMaxTimeSetter(\"min\"),\n });\n Object.defineProperty(self.config, \"maxTime\", {\n get: function () { return self.config._maxTime; },\n set: minMaxTimeSetter(\"max\"),\n });\n if (userConfig.mode === \"time\") {\n self.config.noCalendar = true;\n self.config.enableTime = true;\n }\n Object.assign(self.config, formats, userConfig);\n for (var i = 0; i < boolOpts.length; i++)\n self.config[boolOpts[i]] =\n self.config[boolOpts[i]] === true ||\n self.config[boolOpts[i]] === \"true\";\n HOOKS.filter(function (hook) { return self.config[hook] !== undefined; }).forEach(function (hook) {\n self.config[hook] = arrayify(self.config[hook] || []).map(bindToInstance);\n });\n self.isMobile =\n !self.config.disableMobile &&\n !self.config.inline &&\n self.config.mode === \"single\" &&\n !self.config.disable.length &&\n !self.config.enable &&\n !self.config.weekNumbers &&\n /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n for (var i = 0; i < self.config.plugins.length; i++) {\n var pluginConf = self.config.plugins[i](self) || {};\n for (var key in pluginConf) {\n if (HOOKS.indexOf(key) > -1) {\n self.config[key] = arrayify(pluginConf[key])\n .map(bindToInstance)\n .concat(self.config[key]);\n }\n else if (typeof userConfig[key] === \"undefined\")\n self.config[key] = pluginConf[key];\n }\n }\n if (!userConfig.altInputClass) {\n self.config.altInputClass =\n getInputElem().className + \" \" + self.config.altInputClass;\n }\n triggerEvent(\"onParseConfig\");\n }\n function getInputElem() {\n return self.config.wrap\n ? element.querySelector(\"[data-input]\")\n : element;\n }\n function setupLocale() {\n if (typeof self.config.locale !== \"object\" &&\n typeof flatpickr.l10ns[self.config.locale] === \"undefined\")\n self.config.errorHandler(new Error(\"flatpickr: invalid locale \" + self.config.locale));\n self.l10n = __assign(__assign({}, flatpickr.l10ns.default), (typeof self.config.locale === \"object\"\n ? self.config.locale\n : self.config.locale !== \"default\"\n ? flatpickr.l10ns[self.config.locale]\n : undefined));\n tokenRegex.D = \"(\" + self.l10n.weekdays.shorthand.join(\"|\") + \")\";\n tokenRegex.l = \"(\" + self.l10n.weekdays.longhand.join(\"|\") + \")\";\n tokenRegex.M = \"(\" + self.l10n.months.shorthand.join(\"|\") + \")\";\n tokenRegex.F = \"(\" + self.l10n.months.longhand.join(\"|\") + \")\";\n tokenRegex.K = \"(\" + self.l10n.amPM[0] + \"|\" + self.l10n.amPM[1] + \"|\" + self.l10n.amPM[0].toLowerCase() + \"|\" + self.l10n.amPM[1].toLowerCase() + \")\";\n var userConfig = __assign(__assign({}, instanceConfig), JSON.parse(JSON.stringify(element.dataset || {})));\n if (userConfig.time_24hr === undefined &&\n flatpickr.defaultConfig.time_24hr === undefined) {\n self.config.time_24hr = self.l10n.time_24hr;\n }\n self.formatDate = createDateFormatter(self);\n self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });\n }\n function positionCalendar(customPositionElement) {\n if (typeof self.config.position === \"function\") {\n return void self.config.position(self, customPositionElement);\n }\n if (self.calendarContainer === undefined)\n return;\n triggerEvent(\"onPreCalendarPosition\");\n var positionElement = customPositionElement || self._positionElement;\n var calendarHeight = Array.prototype.reduce.call(self.calendarContainer.children, (function (acc, child) { return acc + child.offsetHeight; }), 0), calendarWidth = self.calendarContainer.offsetWidth, configPos = self.config.position.split(\" \"), configPosVertical = configPos[0], configPosHorizontal = configPos.length > 1 ? configPos[1] : null, inputBounds = positionElement.getBoundingClientRect(), distanceFromBottom = window.innerHeight - inputBounds.bottom, showOnTop = configPosVertical === \"above\" ||\n (configPosVertical !== \"below\" &&\n distanceFromBottom < calendarHeight &&\n inputBounds.top > calendarHeight);\n var top = window.pageYOffset +\n inputBounds.top +\n (!showOnTop ? positionElement.offsetHeight + 2 : -calendarHeight - 2);\n toggleClass(self.calendarContainer, \"arrowTop\", !showOnTop);\n toggleClass(self.calendarContainer, \"arrowBottom\", showOnTop);\n if (self.config.inline)\n return;\n var left = window.pageXOffset + inputBounds.left;\n var isCenter = false;\n var isRight = false;\n if (configPosHorizontal === \"center\") {\n left -= (calendarWidth - inputBounds.width) / 2;\n isCenter = true;\n }\n else if (configPosHorizontal === \"right\") {\n left -= calendarWidth - inputBounds.width;\n isRight = true;\n }\n toggleClass(self.calendarContainer, \"arrowLeft\", !isCenter && !isRight);\n toggleClass(self.calendarContainer, \"arrowCenter\", isCenter);\n toggleClass(self.calendarContainer, \"arrowRight\", isRight);\n var right = window.document.body.offsetWidth -\n (window.pageXOffset + inputBounds.right);\n var rightMost = left + calendarWidth > window.document.body.offsetWidth;\n var centerMost = right + calendarWidth > window.document.body.offsetWidth;\n toggleClass(self.calendarContainer, \"rightMost\", rightMost);\n if (self.config.static)\n return;\n self.calendarContainer.style.top = top + \"px\";\n if (!rightMost) {\n self.calendarContainer.style.left = left + \"px\";\n self.calendarContainer.style.right = \"auto\";\n }\n else if (!centerMost) {\n self.calendarContainer.style.left = \"auto\";\n self.calendarContainer.style.right = right + \"px\";\n }\n else {\n var doc = getDocumentStyleSheet();\n if (doc === undefined)\n return;\n var bodyWidth = window.document.body.offsetWidth;\n var centerLeft = Math.max(0, bodyWidth / 2 - calendarWidth / 2);\n var centerBefore = \".flatpickr-calendar.centerMost:before\";\n var centerAfter = \".flatpickr-calendar.centerMost:after\";\n var centerIndex = doc.cssRules.length;\n var centerStyle = \"{left:\" + inputBounds.left + \"px;right:auto;}\";\n toggleClass(self.calendarContainer, \"rightMost\", false);\n toggleClass(self.calendarContainer, \"centerMost\", true);\n doc.insertRule(centerBefore + \",\" + centerAfter + centerStyle, centerIndex);\n self.calendarContainer.style.left = centerLeft + \"px\";\n self.calendarContainer.style.right = \"auto\";\n }\n }\n function getDocumentStyleSheet() {\n var editableSheet = null;\n for (var i = 0; i < document.styleSheets.length; i++) {\n var sheet = document.styleSheets[i];\n if (!sheet.cssRules)\n continue;\n try {\n sheet.cssRules;\n }\n catch (err) {\n continue;\n }\n editableSheet = sheet;\n break;\n }\n return editableSheet != null ? editableSheet : createStyleSheet();\n }\n function createStyleSheet() {\n var style = document.createElement(\"style\");\n document.head.appendChild(style);\n return style.sheet;\n }\n function redraw() {\n if (self.config.noCalendar || self.isMobile)\n return;\n buildMonthSwitch();\n updateNavigationCurrentMonth();\n buildDays();\n }\n function focusAndClose() {\n self._input.focus();\n if (window.navigator.userAgent.indexOf(\"MSIE\") !== -1 ||\n navigator.msMaxTouchPoints !== undefined) {\n setTimeout(self.close, 0);\n }\n else {\n self.close();\n }\n }\n function selectDate(e) {\n e.preventDefault();\n e.stopPropagation();\n var isSelectable = function (day) {\n return day.classList &&\n day.classList.contains(\"flatpickr-day\") &&\n !day.classList.contains(\"flatpickr-disabled\") &&\n !day.classList.contains(\"notAllowed\");\n };\n var t = findParent(getEventTarget(e), isSelectable);\n if (t === undefined)\n return;\n var target = t;\n var selectedDate = (self.latestSelectedDateObj = new Date(target.dateObj.getTime()));\n var shouldChangeMonth = (selectedDate.getMonth() < self.currentMonth ||\n selectedDate.getMonth() >\n self.currentMonth + self.config.showMonths - 1) &&\n self.config.mode !== \"range\";\n self.selectedDateElem = target;\n if (self.config.mode === \"single\")\n self.selectedDates = [selectedDate];\n else if (self.config.mode === \"multiple\") {\n var selectedIndex = isDateSelected(selectedDate);\n if (selectedIndex)\n self.selectedDates.splice(parseInt(selectedIndex), 1);\n else\n self.selectedDates.push(selectedDate);\n }\n else if (self.config.mode === \"range\") {\n if (self.selectedDates.length === 2) {\n self.clear(false, false);\n }\n self.latestSelectedDateObj = selectedDate;\n self.selectedDates.push(selectedDate);\n if (compareDates(selectedDate, self.selectedDates[0], true) !== 0)\n self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });\n }\n setHoursFromInputs();\n if (shouldChangeMonth) {\n var isNewYear = self.currentYear !== selectedDate.getFullYear();\n self.currentYear = selectedDate.getFullYear();\n self.currentMonth = selectedDate.getMonth();\n if (isNewYear) {\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n triggerEvent(\"onMonthChange\");\n }\n updateNavigationCurrentMonth();\n buildDays();\n updateValue();\n if (!shouldChangeMonth &&\n self.config.mode !== \"range\" &&\n self.config.showMonths === 1)\n focusOnDayElem(target);\n else if (self.selectedDateElem !== undefined &&\n self.hourElement === undefined) {\n self.selectedDateElem && self.selectedDateElem.focus();\n }\n if (self.hourElement !== undefined)\n self.hourElement !== undefined && self.hourElement.focus();\n if (self.config.closeOnSelect) {\n var single = self.config.mode === \"single\" && !self.config.enableTime;\n var range = self.config.mode === \"range\" &&\n self.selectedDates.length === 2 &&\n !self.config.enableTime;\n if (single || range) {\n focusAndClose();\n }\n }\n triggerChange();\n }\n var CALLBACKS = {\n locale: [setupLocale, updateWeekdays],\n showMonths: [buildMonths, setCalendarWidth, buildWeekdays],\n minDate: [jumpToDate],\n maxDate: [jumpToDate],\n positionElement: [updatePositionElement],\n clickOpens: [\n function () {\n if (self.config.clickOpens === true) {\n bind(self._input, \"focus\", self.open);\n bind(self._input, \"click\", self.open);\n }\n else {\n self._input.removeEventListener(\"focus\", self.open);\n self._input.removeEventListener(\"click\", self.open);\n }\n },\n ],\n };\n function set(option, value) {\n if (option !== null && typeof option === \"object\") {\n Object.assign(self.config, option);\n for (var key in option) {\n if (CALLBACKS[key] !== undefined)\n CALLBACKS[key].forEach(function (x) { return x(); });\n }\n }\n else {\n self.config[option] = value;\n if (CALLBACKS[option] !== undefined)\n CALLBACKS[option].forEach(function (x) { return x(); });\n else if (HOOKS.indexOf(option) > -1)\n self.config[option] = arrayify(value);\n }\n self.redraw();\n updateValue(true);\n }\n function setSelectedDate(inputDate, format) {\n var dates = [];\n if (inputDate instanceof Array)\n dates = inputDate.map(function (d) { return self.parseDate(d, format); });\n else if (inputDate instanceof Date || typeof inputDate === \"number\")\n dates = [self.parseDate(inputDate, format)];\n else if (typeof inputDate === \"string\") {\n switch (self.config.mode) {\n case \"single\":\n case \"time\":\n dates = [self.parseDate(inputDate, format)];\n break;\n case \"multiple\":\n dates = inputDate\n .split(self.config.conjunction)\n .map(function (date) { return self.parseDate(date, format); });\n break;\n case \"range\":\n dates = inputDate\n .split(self.l10n.rangeSeparator)\n .map(function (date) { return self.parseDate(date, format); });\n break;\n default:\n break;\n }\n }\n else\n self.config.errorHandler(new Error(\"Invalid date supplied: \" + JSON.stringify(inputDate)));\n self.selectedDates = (self.config.allowInvalidPreload\n ? dates\n : dates.filter(function (d) { return d instanceof Date && isEnabled(d, false); }));\n if (self.config.mode === \"range\")\n self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });\n }\n function setDate(date, triggerChange, format) {\n if (triggerChange === void 0) { triggerChange = false; }\n if (format === void 0) { format = self.config.dateFormat; }\n if ((date !== 0 && !date) || (date instanceof Array && date.length === 0))\n return self.clear(triggerChange);\n setSelectedDate(date, format);\n self.latestSelectedDateObj =\n self.selectedDates[self.selectedDates.length - 1];\n self.redraw();\n jumpToDate(undefined, triggerChange);\n setHoursFromDate();\n if (self.selectedDates.length === 0) {\n self.clear(false);\n }\n updateValue(triggerChange);\n if (triggerChange)\n triggerEvent(\"onChange\");\n }\n function parseDateRules(arr) {\n return arr\n .slice()\n .map(function (rule) {\n if (typeof rule === \"string\" ||\n typeof rule === \"number\" ||\n rule instanceof Date) {\n return self.parseDate(rule, undefined, true);\n }\n else if (rule &&\n typeof rule === \"object\" &&\n rule.from &&\n rule.to)\n return {\n from: self.parseDate(rule.from, undefined),\n to: self.parseDate(rule.to, undefined),\n };\n return rule;\n })\n .filter(function (x) { return x; });\n }\n function setupDates() {\n self.selectedDates = [];\n self.now = self.parseDate(self.config.now) || new Date();\n var preloadedDate = self.config.defaultDate ||\n ((self.input.nodeName === \"INPUT\" ||\n self.input.nodeName === \"TEXTAREA\") &&\n self.input.placeholder &&\n self.input.value === self.input.placeholder\n ? null\n : self.input.value);\n if (preloadedDate)\n setSelectedDate(preloadedDate, self.config.dateFormat);\n self._initialDate =\n self.selectedDates.length > 0\n ? self.selectedDates[0]\n : self.config.minDate &&\n self.config.minDate.getTime() > self.now.getTime()\n ? self.config.minDate\n : self.config.maxDate &&\n self.config.maxDate.getTime() < self.now.getTime()\n ? self.config.maxDate\n : self.now;\n self.currentYear = self._initialDate.getFullYear();\n self.currentMonth = self._initialDate.getMonth();\n if (self.selectedDates.length > 0)\n self.latestSelectedDateObj = self.selectedDates[0];\n if (self.config.minTime !== undefined)\n self.config.minTime = self.parseDate(self.config.minTime, \"H:i\");\n if (self.config.maxTime !== undefined)\n self.config.maxTime = self.parseDate(self.config.maxTime, \"H:i\");\n self.minDateHasTime =\n !!self.config.minDate &&\n (self.config.minDate.getHours() > 0 ||\n self.config.minDate.getMinutes() > 0 ||\n self.config.minDate.getSeconds() > 0);\n self.maxDateHasTime =\n !!self.config.maxDate &&\n (self.config.maxDate.getHours() > 0 ||\n self.config.maxDate.getMinutes() > 0 ||\n self.config.maxDate.getSeconds() > 0);\n }\n function setupInputs() {\n self.input = getInputElem();\n if (!self.input) {\n self.config.errorHandler(new Error(\"Invalid input element specified\"));\n return;\n }\n self.input._type = self.input.type;\n self.input.type = \"text\";\n self.input.classList.add(\"flatpickr-input\");\n self._input = self.input;\n if (self.config.altInput) {\n self.altInput = createElement(self.input.nodeName, self.config.altInputClass);\n self._input = self.altInput;\n self.altInput.placeholder = self.input.placeholder;\n self.altInput.disabled = self.input.disabled;\n self.altInput.required = self.input.required;\n self.altInput.tabIndex = self.input.tabIndex;\n self.altInput.type = \"text\";\n self.input.setAttribute(\"type\", \"hidden\");\n if (!self.config.static && self.input.parentNode)\n self.input.parentNode.insertBefore(self.altInput, self.input.nextSibling);\n }\n if (!self.config.allowInput)\n self._input.setAttribute(\"readonly\", \"readonly\");\n updatePositionElement();\n }\n function updatePositionElement() {\n self._positionElement = self.config.positionElement || self._input;\n }\n function setupMobile() {\n var inputType = self.config.enableTime\n ? self.config.noCalendar\n ? \"time\"\n : \"datetime-local\"\n : \"date\";\n self.mobileInput = createElement(\"input\", self.input.className + \" flatpickr-mobile\");\n self.mobileInput.tabIndex = 1;\n self.mobileInput.type = inputType;\n self.mobileInput.disabled = self.input.disabled;\n self.mobileInput.required = self.input.required;\n self.mobileInput.placeholder = self.input.placeholder;\n self.mobileFormatStr =\n inputType === \"datetime-local\"\n ? \"Y-m-d\\\\TH:i:S\"\n : inputType === \"date\"\n ? \"Y-m-d\"\n : \"H:i:S\";\n if (self.selectedDates.length > 0) {\n self.mobileInput.defaultValue = self.mobileInput.value = self.formatDate(self.selectedDates[0], self.mobileFormatStr);\n }\n if (self.config.minDate)\n self.mobileInput.min = self.formatDate(self.config.minDate, \"Y-m-d\");\n if (self.config.maxDate)\n self.mobileInput.max = self.formatDate(self.config.maxDate, \"Y-m-d\");\n if (self.input.getAttribute(\"step\"))\n self.mobileInput.step = String(self.input.getAttribute(\"step\"));\n self.input.type = \"hidden\";\n if (self.altInput !== undefined)\n self.altInput.type = \"hidden\";\n try {\n if (self.input.parentNode)\n self.input.parentNode.insertBefore(self.mobileInput, self.input.nextSibling);\n }\n catch (_a) { }\n bind(self.mobileInput, \"change\", function (e) {\n self.setDate(getEventTarget(e).value, false, self.mobileFormatStr);\n triggerEvent(\"onChange\");\n triggerEvent(\"onClose\");\n });\n }\n function toggle(e) {\n if (self.isOpen === true)\n return self.close();\n self.open(e);\n }\n function triggerEvent(event, data) {\n if (self.config === undefined)\n return;\n var hooks = self.config[event];\n if (hooks !== undefined && hooks.length > 0) {\n for (var i = 0; hooks[i] && i < hooks.length; i++)\n hooks[i](self.selectedDates, self.input.value, self, data);\n }\n if (event === \"onChange\") {\n self.input.dispatchEvent(createEvent(\"change\"));\n self.input.dispatchEvent(createEvent(\"input\"));\n }\n }\n function createEvent(name) {\n var e = document.createEvent(\"Event\");\n e.initEvent(name, true, true);\n return e;\n }\n function isDateSelected(date) {\n for (var i = 0; i < self.selectedDates.length; i++) {\n var selectedDate = self.selectedDates[i];\n if (selectedDate instanceof Date &&\n compareDates(selectedDate, date) === 0)\n return \"\" + i;\n }\n return false;\n }\n function isDateInRange(date) {\n if (self.config.mode !== \"range\" || self.selectedDates.length < 2)\n return false;\n return (compareDates(date, self.selectedDates[0]) >= 0 &&\n compareDates(date, self.selectedDates[1]) <= 0);\n }\n function updateNavigationCurrentMonth() {\n if (self.config.noCalendar || self.isMobile || !self.monthNav)\n return;\n self.yearElements.forEach(function (yearElement, i) {\n var d = new Date(self.currentYear, self.currentMonth, 1);\n d.setMonth(self.currentMonth + i);\n if (self.config.showMonths > 1 ||\n self.config.monthSelectorType === \"static\") {\n self.monthElements[i].textContent =\n monthToStr(d.getMonth(), self.config.shorthandCurrentMonth, self.l10n) + \" \";\n }\n else {\n self.monthsDropdownContainer.value = d.getMonth().toString();\n }\n yearElement.value = d.getFullYear().toString();\n });\n self._hidePrevMonthArrow =\n self.config.minDate !== undefined &&\n (self.currentYear === self.config.minDate.getFullYear()\n ? self.currentMonth <= self.config.minDate.getMonth()\n : self.currentYear < self.config.minDate.getFullYear());\n self._hideNextMonthArrow =\n self.config.maxDate !== undefined &&\n (self.currentYear === self.config.maxDate.getFullYear()\n ? self.currentMonth + 1 > self.config.maxDate.getMonth()\n : self.currentYear > self.config.maxDate.getFullYear());\n }\n function getDateStr(specificFormat) {\n var format = specificFormat ||\n (self.config.altInput ? self.config.altFormat : self.config.dateFormat);\n return self.selectedDates\n .map(function (dObj) { return self.formatDate(dObj, format); })\n .filter(function (d, i, arr) {\n return self.config.mode !== \"range\" ||\n self.config.enableTime ||\n arr.indexOf(d) === i;\n })\n .join(self.config.mode !== \"range\"\n ? self.config.conjunction\n : self.l10n.rangeSeparator);\n }\n function updateValue(triggerChange) {\n if (triggerChange === void 0) { triggerChange = true; }\n if (self.mobileInput !== undefined && self.mobileFormatStr) {\n self.mobileInput.value =\n self.latestSelectedDateObj !== undefined\n ? self.formatDate(self.latestSelectedDateObj, self.mobileFormatStr)\n : \"\";\n }\n self.input.value = getDateStr(self.config.dateFormat);\n if (self.altInput !== undefined) {\n self.altInput.value = getDateStr(self.config.altFormat);\n }\n if (triggerChange !== false)\n triggerEvent(\"onValueUpdate\");\n }\n function onMonthNavClick(e) {\n var eventTarget = getEventTarget(e);\n var isPrevMonth = self.prevMonthNav.contains(eventTarget);\n var isNextMonth = self.nextMonthNav.contains(eventTarget);\n if (isPrevMonth || isNextMonth) {\n changeMonth(isPrevMonth ? -1 : 1);\n }\n else if (self.yearElements.indexOf(eventTarget) >= 0) {\n eventTarget.select();\n }\n else if (eventTarget.classList.contains(\"arrowUp\")) {\n self.changeYear(self.currentYear + 1);\n }\n else if (eventTarget.classList.contains(\"arrowDown\")) {\n self.changeYear(self.currentYear - 1);\n }\n }\n function timeWrapper(e) {\n e.preventDefault();\n var isKeyDown = e.type === \"keydown\", eventTarget = getEventTarget(e), input = eventTarget;\n if (self.amPM !== undefined && eventTarget === self.amPM) {\n self.amPM.textContent =\n self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n }\n var min = parseFloat(input.getAttribute(\"min\")), max = parseFloat(input.getAttribute(\"max\")), step = parseFloat(input.getAttribute(\"step\")), curValue = parseInt(input.value, 10), delta = e.delta ||\n (isKeyDown ? (e.which === 38 ? 1 : -1) : 0);\n var newValue = curValue + step * delta;\n if (typeof input.value !== \"undefined\" && input.value.length === 2) {\n var isHourElem = input === self.hourElement, isMinuteElem = input === self.minuteElement;\n if (newValue < min) {\n newValue =\n max +\n newValue +\n int(!isHourElem) +\n (int(isHourElem) && int(!self.amPM));\n if (isMinuteElem)\n incrementNumInput(undefined, -1, self.hourElement);\n }\n else if (newValue > max) {\n newValue =\n input === self.hourElement ? newValue - max - int(!self.amPM) : min;\n if (isMinuteElem)\n incrementNumInput(undefined, 1, self.hourElement);\n }\n if (self.amPM &&\n isHourElem &&\n (step === 1\n ? newValue + curValue === 23\n : Math.abs(newValue - curValue) > step)) {\n self.amPM.textContent =\n self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n }\n input.value = pad(newValue);\n }\n }\n init();\n return self;\n}\nfunction _flatpickr(nodeList, config) {\n var nodes = Array.prototype.slice\n .call(nodeList)\n .filter(function (x) { return x instanceof HTMLElement; });\n var instances = [];\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n try {\n if (node.getAttribute(\"data-fp-omit\") !== null)\n continue;\n if (node._flatpickr !== undefined) {\n node._flatpickr.destroy();\n node._flatpickr = undefined;\n }\n node._flatpickr = FlatpickrInstance(node, config || {});\n instances.push(node._flatpickr);\n }\n catch (e) {\n console.error(e);\n }\n }\n return instances.length === 1 ? instances[0] : instances;\n}\nif (typeof HTMLElement !== \"undefined\" &&\n typeof HTMLCollection !== \"undefined\" &&\n typeof NodeList !== \"undefined\") {\n HTMLCollection.prototype.flatpickr = NodeList.prototype.flatpickr = function (config) {\n return _flatpickr(this, config);\n };\n HTMLElement.prototype.flatpickr = function (config) {\n return _flatpickr([this], config);\n };\n}\nvar flatpickr = function (selector, config) {\n if (typeof selector === \"string\") {\n return _flatpickr(window.document.querySelectorAll(selector), config);\n }\n else if (selector instanceof Node) {\n return _flatpickr([selector], config);\n }\n else {\n return _flatpickr(selector, config);\n }\n};\nflatpickr.defaultConfig = {};\nflatpickr.l10ns = {\n en: __assign({}, English),\n default: __assign({}, English),\n};\nflatpickr.localize = function (l10n) {\n flatpickr.l10ns.default = __assign(__assign({}, flatpickr.l10ns.default), l10n);\n};\nflatpickr.setDefaults = function (config) {\n flatpickr.defaultConfig = __assign(__assign({}, flatpickr.defaultConfig), config);\n};\nflatpickr.parseDate = createDateParser({});\nflatpickr.formatDate = createDateFormatter({});\nflatpickr.compareDates = compareDates;\nif (typeof jQuery !== \"undefined\" && typeof jQuery.fn !== \"undefined\") {\n jQuery.fn.flatpickr = function (config) {\n return _flatpickr(this, config);\n };\n}\nDate.prototype.fp_incr = function (days) {\n return new Date(this.getFullYear(), this.getMonth(), this.getDate() + (typeof days === \"string\" ? parseInt(days, 10) : days));\n};\nif (typeof window !== \"undefined\") {\n window.flatpickr = flatpickr;\n}\nexport default flatpickr;\n","/**\n * Constant that contains the value of the hide class on the UBS\n * This is to improve DRY in this file\n * @type {string}\n */\nconst HIDE_CLASS = 'ubs-page--hidden';\n\nfunction getLocationsListingsTabButton() {\n return document.querySelector('[data-view-clinics-button]');\n}\n\nfunction getProvidersListingsTabButton() {\n return document.querySelector('[data-view-providers-button]');\n}\n\nfunction getLocationsListingsTab() {\n return document.querySelector('[data-ubs-listings-tab=\"locations\"]');\n}\n\nfunction getProvidersListingsTab() {\n return document.querySelector('[data-ubs-listings-tab=\"practitioners\"]');\n}\n\nfunction getListingsContainers() {\n return document.querySelectorAll('[data-card-container]');\n}\n\nfunction getListingsContainerByName(container) {\n return document.querySelector(`[data-ubs-listings-container=\"${container}\"]`);\n}\n\nfunction getCurrentlyVisibleListingsContainer() {\n const containers = getListingsContainers();\n\n containers.forEach((container) => {\n if (!container.classList.contains(HIDE_CLASS)) {\n return container;\n }\n });\n\n return containers[0];\n}\n\nfunction getCurrentlyVisibleTab() {\n const controllers = getCardsControllers();\n\n controllers.forEach((controller) => {\n if (controller.classList.contains(HIDE_CLASS)) {\n return controller;\n }\n });\n return controllers[0];\n}\n\nfunction getCurrentlyVisibleTabName() {\n let container = getCurrentlyVisibleListingsContainer();\n if (container) {\n return container.dataset.ubsListingsContainer;\n }\n container = getCurrentlyVisibleTab();\n return container.dataset.ubsListingsTab;\n}\n\nfunction getCurrentlyVisibleListingsTab() {\n const tabName = getCurrentlyVisibleTabName();\n return document.querySelector(`[data-ubs-listings-tab=\"${tabName}\"]`);\n}\n\nfunction getSearchSubmitBtn() {\n return document.querySelector('[data-ubs-search-submit]');\n}\n\nfunction getCardsControllers(parent = document) {\n return parent.querySelectorAll('[data-ubs-cards-controller]');\n}\n\nfunction getCitySearchFields() {\n return document.querySelectorAll('[data-ubs-city-search-field]');\n}\n\nfunction getCityIdField() {\n return document.querySelector('[data-ubs-city-search-id-field]');\n}\n\nfunction getCitySelectOptions() {\n return document.querySelectorAll('[data-ubs-city-select-option]');\n}\n\nfunction getVisitTypeMenuOptions() {\n return document.querySelectorAll('[data-ubs-visit-type-option]');\n}\n\nfunction getVisitTypeInputFields() {\n return document.querySelectorAll('[data-ubs-visit-type]');\n}\n\nfunction getVisitTypeHiddenField() {\n return document.querySelector('[data-ubs-visit-type-target]');\n}\n\nfunction getVisitTypeIdHiddenField() {\n return document.querySelector('[data-ubs-visit-type-id-target]');\n}\n\nfunction getRevealFiltersButtons(parent = document) {\n return parent.querySelectorAll('[data-ubs-reveal-filters]');\n}\n\nfunction getMapContainer() {\n return document.querySelector('[data-map-container]');\n}\n\nfunction getMapComponent() {\n return document.querySelector('mapbox-map');\n}\n\nfunction getSeeMoreWrapper(tabName) {\n return document.querySelector(`[data-ubs-see-more-wrapper=${tabName}]`);\n}\n\nfunction getMobileSearchController() {\n return document.querySelector('[data-mobile-search-controller]');\n}\n\nfunction getMobilePopupControllers(parent = document) {\n return parent.querySelectorAll('[data-ubs-mobile-popup-controller]');\n}\n\nfunction getPopupControllerById(id) {\n return document.querySelector(`[data-ubs-mobile-popup-id=\"${id}\"]`);\n}\n\nfunction getMobilePopup() {\n return document.querySelector('[data-ubs-mobile-search-popup]');\n}\n\nfunction getMobilePopupCloseButton() {\n return document.querySelector('[data-ubs-mobile-search-popup-close]');\n}\n\nfunction getMobileMapButtons(parent = document) {\n return parent.querySelectorAll('[data-ubs-map-button]');\n}\n\nfunction getAllSearchLabels() {\n return document.querySelectorAll('[data-ubs-mobile-search-label]');\n}\n\nfunction getAllSearchSelects() {\n return document.querySelectorAll('[data-ubs-mobile-search-select]');\n}\n\nfunction getMobileSearchLabel(formId) {\n return document.querySelector(\n `[data-ubs-mobile-search-label-id=\"${formId}\"]`,\n );\n}\n\nfunction getMobileSearchSelect(formId) {\n return document.querySelector(\n `[data-ubs-mobile-search-select-id=\"${formId}\"]`,\n );\n}\n\nfunction hideOtherMobileSearchForms(formId) {\n getAllSearchLabels().forEach((label) => {\n if (label.dataset.ubsMobileSearchLabelId !== formId) {\n label.classList.add(HIDE_CLASS);\n }\n });\n getAllSearchSelects().forEach((select) => {\n if (select.dataset.ubsMobileSearchSelectId !== formId) {\n select.classList.add(HIDE_CLASS);\n }\n });\n}\n\n/**\n * Shows the form, consisting of the label and the select menu\n * Hides the other ones that do not pertain to it\n * @param formId {string}\n */\nfunction showMobilePopupForm(formId) {\n const searchLabel = getMobileSearchLabel(formId);\n const searchSelect = getMobileSearchSelect(formId);\n searchLabel.classList.remove(HIDE_CLASS);\n searchSelect.classList.remove(HIDE_CLASS);\n hideOtherMobileSearchForms(formId);\n}\n\nfunction getDatepickerControllers() {\n return document.querySelectorAll('[data-ubs-page-datepicker-controller]');\n}\n\nfunction getDateSearchFields() {\n return document.querySelectorAll('[data-ubs-date-field]');\n}\n\nfunction getDateHiddenFields() {\n return document.querySelectorAll('[data-ubs-date-target]');\n}\n\nfunction getUbsMain() {\n return document.querySelector('[data-ubs-main]');\n}\n\n/**\n * @param arg {string}\n */\nfunction argPresent(arg) {\n return !(\n arg === '' ||\n arg === null ||\n arg === undefined ||\n arg === 'null' ||\n arg === 'undefined'\n );\n}\n\n/**\n *\n * @param url\n * @param paramKey\n * @return {string}\n */\nfunction getParamFromURL(paramKey) {\n const params = new URLSearchParams(window.location.search);\n return params.get(paramKey);\n}\n\n/**\n *\n * @param dateString {string}\n */\nfunction formatDate(dateString) {\n let parts = dateString.split('-');\n const date = new Date(parts[0], parts[1] - 1, parts[2]).toDateString();\n const todaysDate = new Date().toDateString();\n if (date === todaysDate) {\n return 'Today';\n }\n parts = date.split(' ');\n return `${parts[1]} ${parts[2].replace(/\\b0/g, '')}`;\n}\n\nfunction getFooter(card) {\n return card.querySelector('.ubs-widget-card__footer-content');\n}\n\nfunction isProviderCard(card) {\n return (\n card.dataset.providerId !== undefined && card.dataset.providerId !== null\n );\n}\n\nfunction getListingsUrl() {\n return document.querySelector('[data-ubs-main]').dataset.ubsListingsUrl;\n}\n\nfunction urlHasParam(url, param) {\n return (\n url.searchParams.get(param) !== null &&\n url.searchParams.get(param) !== undefined\n );\n}\n\nfunction currentWindowHasLocationParams() {\n const currentUrl = new URL(window.location.href);\n return (\n urlHasParam(currentUrl, 'lat') ||\n urlHasParam(currentUrl, 'lng') ||\n urlHasParam(currentUrl, 'city_id')\n );\n}\n\nfunction appendParam(url, paramKey, paramVal) {\n if (urlHasParam(url, paramKey)) {\n url.searchParams.set(paramKey, paramVal);\n } else {\n url.searchParams.append(paramKey, paramVal);\n }\n}\n\n/**\n *\n * @param params {}\n */\nfunction updateCurrentUrl(params) {\n const keysToRefresh = ['lat', 'lng', 'city_id'];\n let currentHref = window.location.href;\n let currentUrl = new URL(currentHref);\n for (const key of currentUrl.searchParams.keys()) {\n if (keysToRefresh.includes(key)) {\n currentUrl.searchParams.delete(key);\n }\n }\n for (const [key, value] of Object.entries(params)) {\n if (value === null || value === undefined) {\n continue;\n }\n appendParam(currentUrl, key, value);\n }\n history.pushState({}, null, currentUrl);\n}\n\nfunction getCurrentSearchDate() {\n let date;\n if (window.innerWidth > 750) {\n date = getDateHiddenFields()[0].value;\n } else {\n date = getDateHiddenFields()[1].value;\n }\n\n return date;\n}\n\nfunction getHeader() {\n return document.querySelector('[data-ubs-header]');\n}\n\nfunction getTabsContainer() {\n return document.querySelector('[data-ubs-tabs-container]');\n}\n\nfunction getVisitTypeSearch() {\n return document.querySelector('[data-ubs-visit-type-search]');\n}\n\nfunction openInSameTab() {\n const urlParams = new URLSearchParams(window.location.search);\n const sameTab = urlParams.get('open_in_same_tab');\n return sameTab === 'true';\n}\n\nexport {\n getCitySearchFields,\n getCityIdField,\n getCitySelectOptions,\n getSearchSubmitBtn,\n getCardsControllers,\n getVisitTypeMenuOptions,\n getVisitTypeInputFields,\n getVisitTypeHiddenField,\n getVisitTypeIdHiddenField,\n getLocationsListingsTab,\n getProvidersListingsTab,\n getLocationsListingsTabButton,\n getProvidersListingsTabButton,\n getCurrentlyVisibleListingsContainer,\n getSeeMoreWrapper,\n getRevealFiltersButtons,\n getMapContainer,\n getCurrentlyVisibleTabName,\n getListingsContainers,\n getListingsContainerByName,\n getMobileSearchController,\n getMobilePopupControllers,\n getMobilePopup,\n getMobilePopupCloseButton,\n getMobileMapButtons,\n getCurrentlyVisibleListingsTab,\n showMobilePopupForm,\n getDatepickerControllers,\n getDateSearchFields,\n getDateHiddenFields,\n getPopupControllerById,\n argPresent,\n formatDate,\n getFooter,\n isProviderCard,\n getListingsUrl,\n urlHasParam,\n currentWindowHasLocationParams,\n appendParam,\n updateCurrentUrl,\n getParamFromURL,\n getUbsMain,\n getCurrentSearchDate,\n getHeader,\n getTabsContainer,\n getVisitTypeSearch,\n openInSameTab,\n getMapComponent,\n};\n","import flatpickr from 'flatpickr';\nimport 'flatpickr/dist/flatpickr.css';\nimport {\n getDateHiddenFields,\n getDatepickerControllers,\n} from '@/components/ubs/elementUtils';\n\nconst DATEPICKER_IDS = ['#ubsDesktopPicker', '#ubsMobilePicker'];\n// global variabl to store the picker instances\nwindow.datePickers = [];\n\n/**\n * Flatpickr by default ships with the month and year indicators that are inputs which we don't want to have active.\n * This function disables them\n */\nfunction disableMonthYearInputs() {\n const yearInputs = document.querySelectorAll('.numInput.cur-year');\n yearInputs.forEach((input) => {\n input.disabled = true;\n });\n const monthInputs = document.querySelectorAll('.cur-month');\n monthInputs.forEach((input) => {\n input.disabled = true;\n });\n}\n\nfunction createDatePicker(controller) {\n const id = controller.dataset.ubsDatepickerId;\n let pickerId;\n\n if (id === 'mobile-search') {\n pickerId = DATEPICKER_IDS[1];\n } else {\n pickerId = DATEPICKER_IDS[0];\n }\n\n const instance = flatpickr(pickerId, {\n enableTime: false,\n inline: true,\n monthSelectorType: 'static',\n enable: [],\n });\n\n return instance;\n}\n\nfunction setInitialDateValue() {\n getDateHiddenFields().forEach((field) => {\n field.value = field.dataset.ubsInitialValue;\n });\n}\n\nfunction createDatepickers() {\n const datePickerControllers = getDatepickerControllers();\n\n datePickerControllers.forEach((controller) => {\n const pickerInstance = createDatePicker(controller);\n window.datePickers.push(pickerInstance);\n });\n disableMonthYearInputs();\n setInitialDateValue();\n}\n\nfunction getDatePickerInstances() {\n return window.datePickers;\n}\n\nfunction parseDatesData(slots) {\n let dates = [];\n let alreadyAddedDates = [];\n for (let i = 0; i < slots.length; i++) {\n const newDate = new Date(slots[i]);\n const newDateStr = newDate.toDateString();\n if (alreadyAddedDates.includes(newDateStr)) {\n continue;\n }\n dates.push(newDate);\n alreadyAddedDates.push(newDateStr);\n }\n return dates;\n}\n\nfunction resetDaysOnPicker() {\n const pickers = getDatePickerInstances();\n pickers.forEach((picker) => {\n picker.set('enable', []);\n });\n}\n\nfunction updateDatePickers(slots) {\n const dates = parseDatesData(slots);\n const pickers = getDatePickerInstances();\n pickers.forEach((picker) => {\n if (dates) {\n const currentEnabledDates = picker.config.enable;\n const newDates = currentEnabledDates.concat(dates);\n\n picker.set('enable', newDates);\n }\n });\n}\n\nfunction setUpDatepickers() {\n createDatepickers();\n}\n\nexport { updateDatePickers, setUpDatepickers, resetDaysOnPicker };\n","export const ONE_MINUTE = 60 * 1000;\nexport const ONE_HOUR = 60 * ONE_MINUTE;\nexport const ONE_DAY = 24 * ONE_HOUR;\n\nconst shortTime = new Intl.DateTimeFormat('en', {\n timeStyle: 'short',\n});\n\nconst shortRelativeTime = (timezone) =>\n new Intl.DateTimeFormat('en', {\n timeStyle: 'short',\n timeZone: timezone,\n });\n\nconst parseTime = (dateString) => {\n const date = new Date(dateString);\n return shortTime.format(date).toLowerCase();\n};\n\nconst convertTZ = (date, tzString) => {\n return new Date(\n (typeof date === 'string' ? new Date(date) : date).toLocaleString('en-US', {\n timeZone: tzString,\n }),\n );\n};\n\nconst parseToRelativeTime = (dateString, timezone) => {\n const date = new Date(dateString);\n return shortRelativeTime(timezone).format(date).toLowerCase();\n};\n\nconst getUTCStamp = (dateString) => {\n const date = new Date(dateString);\n return date.getTime();\n};\n\nfunction getUTCDate(date) {\n return new Date(\n date.getUTCFullYear(),\n date.getUTCMonth(),\n date.getUTCDate(),\n date.getUTCHours(),\n date.getUTCMinutes(),\n date.getUTCSeconds(),\n );\n}\n\n// combine a date and a time\nconst combineDateTime = (date, timestring) => {\n if (!date || !timestring) {\n return null;\n }\n const resultDate = new Date(date);\n const [time, suffix] = timestring.split(' ');\n let [hours, minutes] = time.split(':').map((d) => parseInt(d, 10));\n if (suffix === 'pm') {\n hours = 12 + (hours % 12);\n }\n resultDate.setHours(hours);\n resultDate.setMinutes(minutes);\n resultDate.setSeconds(0, 0);\n return resultDate;\n};\n\n// Get a new date by adding time to the given date. Time must be in ms\nconst addTime = (timeToAdd, date = new Date()) =>\n new Date(date.getTime() + timeToAdd);\n\n// Get datestring in YYYY-MM-DD from a date object\nconst getDatestring = (date = new Date()) => date.toISOString().substr(0, 10);\n\n// Format time in HH:MM am/pm format\nconst formatTime = (time) =>\n time.toLocaleTimeString('en-US', { timeStyle: 'short' }).toLowerCase();\n\nexport {\n parseTime,\n parseToRelativeTime,\n getUTCStamp,\n combineDateTime,\n addTime,\n getDatestring,\n formatTime,\n getUTCDate,\n convertTZ,\n};\n","import {\n getUbsMain,\n getCitySearchFields,\n getVisitTypeInputFields,\n getDateSearchFields,\n getCurrentSearchDate,\n} from '@/components/ubs/elementUtils';\nimport { getSegmentGlobbedProperties } from '@/components/shared/tracking/globalTracking';\nimport { trackSegmentEvent } from '@/components/shared/tracking/segmentAnalytics';\n\n/**\n *\n * @param props\n * @return {string}\n */\nfunction convertSegmentPropsToString(props) {\n let string = '';\n for (const [key, value] of Object.entries(props)) {\n const line = `${key}=\"${value}\"\\n`;\n string += line;\n }\n return string;\n}\n\nfunction bookingButtonSegmentProps() {\n return {\n 'data-segment-event': 'Universal Booking Site Clicked',\n 'data-segment-click-type': 'appointment_time_slot',\n 'data-additional-segment-props-element': '[data-ubs-main]',\n };\n}\n\nfunction viewMoreSegmentProps() {\n return {\n 'data-segment-event': 'Universal Booking Site Clicked',\n 'data-segment-click-type': 'view_availability',\n 'data-additional-segment-props-element': '[data-ubs-main]',\n };\n}\n\nfunction nextAvailableSegmentProps() {\n return {\n 'data-segment-event': 'Universal Booking Site Clicked',\n 'data-segment-click-type': 'next_availability',\n 'data-additional-segment-props-element': '[data-ubs-main]',\n };\n}\n\nfunction noAvailableBookingSegmentProps() {\n return {\n 'data-segment-event': 'Universal Booking Site Clicked',\n 'data-segment-click-type': 'no_availability',\n 'data-additional-segment-props-element': '[data-ubs-main]',\n };\n}\n\nfunction setMainSegmentProperties(properties = null) {\n const main = getUbsMain();\n const citySearchFields = getCitySearchFields();\n const visitTypeInputFields = getVisitTypeInputFields();\n const dateSearchFields = getDateSearchFields();\n const currentSearchDate = getCurrentSearchDate();\n let searchDaysFromToday = 0;\n if (\n currentSearchDate !== '' &&\n currentSearchDate !== undefined &&\n currentSearchDate !== null\n ) {\n searchDaysFromToday = Math.ceil(\n (new Date(currentSearchDate) - new Date()) / (1000 * 60 * 60 * 24),\n );\n }\n\n const initialLoad = main.dataset.loadEventTracked === undefined;\n\n main.dataset.segmentSearchDaysFromToday = searchDaysFromToday;\n main.dataset.segmentLocationInput = citySearchFields[0].innerText;\n if (visitTypeInputFields[0]) {\n main.dataset.segmentUbsVisitType = visitTypeInputFields[0].innerText;\n }\n main.dataset.segmentSearchDate = dateSearchFields[0].innerText;\n\n if (properties) {\n if (properties.total_count) {\n main.dataset.segmentTotalCount = properties.total_count;\n }\n\n if (properties.count_with_same_day_availability) {\n main.dataset.segmentCountWithSameDayAvailability =\n properties.count_with_same_day_availability;\n }\n\n if (properties.top_3_count_with_same_day_availability && initialLoad) {\n main.dataset['segmentTop-3CountWithSameDayAvailability'] =\n properties.top_3_count_with_same_day_availability;\n }\n\n if (properties.top_5_count_with_same_day_availability && initialLoad) {\n main.dataset['segmentTop-5CountWithSameDayAvailability'] =\n properties.top_5_count_with_same_day_availability;\n }\n\n if (properties.top_10_count_with_same_day_availability && initialLoad) {\n main.dataset['segmentTop-10CountWithSameDayAvailability'] =\n properties.top_10_count_with_same_day_availability;\n }\n }\n\n if (main.dataset.loadEventTracked === undefined) {\n const properties = getSegmentGlobbedProperties(main);\n trackSegmentEvent('Universal Booking Site Slots Loaded', properties);\n main.dataset.loadEventTracked = true;\n }\n}\n\n/**\n * manually track segement events. Used for the select actions in the search menus.\n * @param properties {Object}\n */\nfunction manuallyTrackSegmentEvent(properties) {\n setMainSegmentProperties();\n const main = getUbsMain();\n const mainProps = getSegmentGlobbedProperties(main);\n\n if (properties.selectDate) {\n const segmentProps = { ...mainProps, ...{ click_type: 'date_selected' } };\n trackSegmentEvent('Universal Booking Site Clicked', segmentProps);\n }\n\n if (properties.selectVisitType) {\n const segmentProps = {\n ...mainProps,\n ...{ click_type: 'visit_type_selected' },\n };\n trackSegmentEvent('Universal Booking Site Clicked', segmentProps);\n }\n\n if (properties.selectLocation) {\n const segmentProps = {\n ...mainProps,\n ...{ click_type: 'location_selected' },\n };\n trackSegmentEvent('Universal Booking Site Clicked', segmentProps);\n }\n}\n\nexport {\n bookingButtonSegmentProps,\n viewMoreSegmentProps,\n nextAvailableSegmentProps,\n convertSegmentPropsToString,\n setMainSegmentProperties,\n manuallyTrackSegmentEvent,\n noAvailableBookingSegmentProps,\n};\n","import {\n getCardsControllers,\n getRevealFiltersButtons,\n} from '@/components/ubs/elementUtils';\n\nconst propAccessor = (cardEl, sortProp) => {\n let prop = cardEl.dataset[sortProp];\n if (sortProp === 'distance') {\n prop = parseFloat(prop);\n }\n return prop;\n};\n\nconst sortCards = (cards, sortProp) => {\n return cards.slice().sort((a, b) => {\n const aProp = propAccessor(a, sortProp);\n const bProp = propAccessor(b, sortProp);\n if (aProp > bProp) {\n return 1;\n } else if (aProp < bProp) {\n return -1;\n }\n return 0;\n });\n};\n\n/**\n *\n * @param sortProp\n * @param container\n */\nfunction sortCardsContainer(sortProp, container) {\n if (!container) {\n return;\n }\n\n const cards = [...container.childNodes];\n\n let sortedCards = sortCards(cards, sortProp);\n sortedCards = sortCards(sortedCards, 'availabilityPriority');\n\n const frag = document.createDocumentFragment();\n sortedCards.forEach((card) => {\n frag.appendChild(card);\n });\n container.appendChild(frag);\n}\n\nfunction setUpFilterButtons() {\n const filterRevealButtons = getRevealFiltersButtons();\n const cardsControllers = getCardsControllers();\n\n filterRevealButtons.forEach((revealBtn) => {\n const tabId = revealBtn.dataset.tabName;\n revealBtn.addEventListener('click', (e) => {\n revealBtn.classList.toggle('active');\n document\n .querySelector(`[data-ubs-filter-buttons=\"${tabId}\"]`)\n .classList.toggle('ubs-page--hidden');\n });\n });\n\n cardsControllers.forEach((controller) => {\n const cardsContainer = controller.querySelector('[data-card-container]');\n\n controller.querySelectorAll('.micrositeFilterButton').forEach((button) => {\n button.addEventListener('click', () => {\n sortCardsContainer(button.dataset.value, cardsContainer);\n // set the current filter value in the controller\n controller.dataset.currentFilter = button.dataset.value;\n\n button.classList.add('active');\n\n controller\n .querySelectorAll('.micrositeFilterButton')\n .forEach((other_button) => {\n if (other_button !== button) {\n other_button.classList.remove('active');\n }\n });\n });\n });\n\n controller\n .querySelectorAll('[data-ubs-filter-option]')\n .forEach((option) => {\n option.addEventListener('change', () => {\n const name = controller.querySelector('[data-filter-name]');\n if (option.dataset.value === 'distance') {\n name.innerText = 'Distance';\n } else if (option.dataset.value === 'soonest') {\n name.innerText = 'Earliest';\n }\n // set the current filter value in the controller\n controller.dataset.currentFilter = option.dataset.value;\n\n sortCardsContainer(option.dataset.value, cardsContainer);\n });\n });\n });\n}\n\nexport { setUpFilterButtons, sortCardsContainer };\n","import { updateDatePickers } from '@/components/ubs/controllers/datepickerController';\nimport { setUpDomEvents } from '@/components/shared/tracking/globalTracking';\nimport {\n getAnonymousId,\n getDistinctId,\n} from '@/components/shared/tracking/segmentAnalytics';\nimport { getUTCDate, parseToRelativeTime, convertTZ } from './dateUtilities';\nimport {\n argPresent,\n formatDate,\n getCardsControllers,\n getDateHiddenFields,\n getFooter,\n getUbsMain,\n openInSameTab,\n} from '@/components/ubs/elementUtils';\nimport {\n bookingButtonSegmentProps,\n convertSegmentPropsToString,\n nextAvailableSegmentProps,\n noAvailableBookingSegmentProps,\n viewMoreSegmentProps,\n} from '@/components/ubs/segmentTrackingUtils';\nimport { sortCardsContainer } from '@/components/ubs/controllers/filterButtonsController';\n\n/**\n * Sort the cards by the currently active filter\n */\nfunction sortCardsbyCurrentFilter() {\n const controllers = getCardsControllers();\n controllers.forEach((controller) => {\n const listingContainer = controller.querySelector('[data-card-container]');\n if (listingContainer) {\n const sortProp = controller.dataset.currentFilter;\n sortCardsContainer(sortProp, listingContainer);\n }\n });\n}\n\n/**\n * Creates an anchor tag element based on specified params\n * @param card\n * @param href {string}\n * @param linkText {string}\n * @param classes {string}\n * @param segmentProps {Object}\n * @return {`\n ${string}\n `}\n */\nconst buildLink = (href, linkText, classes, segmentProps) => {\n const props = convertSegmentPropsToString(segmentProps);\n const target = openInSameTab() ? '_self' : '_blank';\n return `\n ${linkText}\n `;\n};\n\n/**\n * Checks if two dates are the same\n * @param date1\n * @param date2\n * @return {boolean}\n */\nfunction isDate(date1, date2) {\n return date1.toDateString() === date2.toDateString();\n}\n\n/**\n * checks if date2 is less than date1\n * @param date1\n * @param date2\n * @return {boolean}\n */\nfunction dateIsLessThan(date1, date2) {\n if (date1.getFullYear() !== date2.getFullYear()) {\n return date1.getFullYear() < date2.getFullYear();\n } else if (date1.getMonth() !== date2.getMonth()) {\n return date1.getMonth() < date2.getMonth();\n }\n return date1.getDate() < date2.getDate();\n}\n\n/**\n * Helper function that filters the slots that are on a particular day\n * @param slots {Array[{object}]}\n * @param date {date}\n * @param card {element}\n * @return {Array[{object}]}\n */\nconst slotsOnDate = (slots, date, card) => {\n const timezone = card.dataset.timezoneName;\n const filtered_slots = [];\n const maxSlots = 4;\n let count = 0;\n\n for (let i = 0; i < slots.length; i++) {\n let slotDate = new Date(slots[i]);\n if (slotDate.getUTCDate() == date.getUTCDate()) {\n slotDate = convertTZ(slotDate, timezone);\n }\n if (isDate(slotDate, date)) {\n filtered_slots.push(slots[i]);\n count++;\n }\n\n // this is to limit to only 4 slots, we don't want to iterate through the entire array of slots because it's huge\n if (count === maxSlots) {\n break;\n // once we reach a date that is greater, break\n } else if (dateIsLessThan(date, slotDate)) {\n break;\n }\n }\n\n return filtered_slots;\n};\n\n/**\n * Get all the slots for today\n * @param slots {Array[{Object}]}\n * @return {Array[{Object}]}\n */\nconst slotsToday = (slots, card) => {\n const todaysDate = new Date();\n return slotsOnDate(slots, todaysDate, card);\n};\n\n/**\n * Get all the slots for tomorrow\n * @param slots {Array[{Object}]}\n * @param card {element}\n * @return {Array[{Object}]}\n */\nconst slotsTomorrow = (slots, card) => {\n const today = new Date();\n const tomorrow = new Date(\n today.getFullYear(),\n today.getMonth(),\n today.getDate() + 1,\n );\n return slotsOnDate(slots, tomorrow, card);\n};\n\n/**\n * Get the next available date from the slots if none are available\n * @param slots\n * @param card\n * @return {*}\n */\nconst nextAvailableSlot = (slots, card) => {\n const today = new Date();\n const tomorrow = new Date(\n today.getFullYear(),\n today.getMonth(),\n today.getDate() + 2,\n );\n\n for (let i = 0; i < slots.length; i++) {\n const slotDate = new Date(slots[i]);\n\n if (slotDate > tomorrow) {\n return slots[i];\n }\n }\n return slots[0];\n};\n\n/**\n * @param url {URL}\n * @param key {string}\n * @param value {string}\n */\nexport function setParam(url, key, value) {\n if (url.searchParams.has(key)) {\n url.searchParams.set(key, value);\n } else {\n url.searchParams.append(key, value);\n }\n}\n\n/**\n * checks if a string is a url or not\n * uses the URL constructor to try and create a URL object\n * if successful, the string is a url\n * @param string {String}\n * @return {Boolean}\n */\nfunction isValidUrl(string) {\n let url;\n try {\n url = new URL(string);\n } catch (_) {\n return false;\n }\n return url.protocol === 'http:' || url.protocol === 'https:';\n}\n\n/**\n * Creates a booking url for each link on the cards\n * @param href\n * @param card\n * @param slot\n * @return {module:url.URL}\n */\nexport const buildBookingUrl = (href, card, slot) => {\n const returnUrl = encodeURIComponent(window.location.href);\n let url;\n\n // need to check if valid url\n // this is because some of the hrefs taken from anchor tags are already urls\n if (isValidUrl(href)) {\n url = new URL(href);\n } else {\n url = new URL(window.location.origin + href);\n }\n\n if (argPresent(slot)) {\n setParam(url, 'slot', slot);\n } else if (card.dataset.soonest) {\n setParam(url, 'preferredDate', card.dataset.soonest.slice(0, 10));\n }\n\n const anonymousId = getAnonymousId();\n if (argPresent(anonymousId)) {\n setParam(url, 'anonymousId', anonymousId);\n }\n\n const distinctId = getDistinctId();\n if (argPresent(distinctId)) {\n setParam(url, 'distinctId', distinctId);\n }\n\n setParam(url, 'returnUrl', returnUrl);\n\n return url;\n};\n\nconst buildTimeSlotButtons = (card, slots) => {\n let buttons = '';\n\n // this is necessary because for now we are not limiting the number of slots returned (api changes)\n let maxSlots;\n if (slots.length > 4) {\n maxSlots = 4;\n } else {\n maxSlots = slots.length;\n }\n\n const buttonSegmentProps = bookingButtonSegmentProps();\n\n for (let i = 0; i < maxSlots; i++) {\n const timezone = card.dataset.timezoneName;\n const time = parseToRelativeTime(slots[i], timezone);\n const url = buildBookingUrl(card.dataset.bookingLink, card, slots[i]);\n const button = buildLink(\n url.toString(),\n time,\n 'ubs-widget-card__slot-time',\n buttonSegmentProps,\n );\n buttons += button;\n }\n\n const viewMoreProps = viewMoreSegmentProps();\n const button = buildLink(\n buildBookingUrl(card.dataset.bookingLink, card, null),\n 'view more',\n 'ubs-widget-card__more-times',\n viewMoreProps,\n );\n buttons += button;\n\n return buttons;\n};\n\nfunction addBookingParamsToCardLink(card) {\n const primaryContent = card.querySelector(\n '.ubs-widget-card__primary-content',\n );\n primaryContent.href = buildBookingUrl(primaryContent.href, card, null);\n}\n\nconst insertTimeSlots = (card, slots, wrapperEl, message) => {\n const telemed_icon = card.dataset.telemedIcon;\n setSoonestAttribute(card, slots[0]);\n\n const availabilityTitles = `
${telemed_icon}

${message}

`;\n let content = availabilityTitles;\n content += `
\n ${buildTimeSlotButtons(card, slots)}\n
`;\n wrapperEl.innerHTML = content;\n card.dataset.slotsLoaded = 'true';\n};\n\nconst insertNextAvailableDateMessage = (\n card,\n slot,\n wrapperEl,\n isTomorrow = false,\n) => {\n setSoonestAttribute(card, slot);\n const url = buildBookingUrl(card.dataset.bookingLink, card, null);\n let slotDay = '';\n\n if (isTomorrow) {\n slotDay = 'Tomorrow';\n } else {\n slotDay = new Date(slot).toDateString();\n const parts = slotDay.split(' ');\n slotDay = `${parts[1]} ${parts[2].replace(/\\b0/g, '')}`;\n }\n\n const linkText = `${card.dataset.calendarIcon}

Next available: ${slotDay}

`;\n\n const segmentProps = nextAvailableSegmentProps();\n wrapperEl.innerHTML = buildLink(\n url,\n linkText,\n 'ubs-widget-card__next-available-wrapper',\n segmentProps,\n );\n card.dataset.slotsLoaded = 'true';\n setSoonestAttribute(card, slot);\n};\n\nconst insertNoAvailabilityMessage = (card, wrapperEl) => {\n const today = new Date().toISOString().split('T')[0];\n setSoonestAttribute(card, today);\n const url = buildBookingUrl(card.dataset.bookingLink, card, null);\n const linkText = `${card.dataset.calendarIcon}

No online booking available

`;\n const segmentProps = noAvailableBookingSegmentProps();\n wrapperEl.innerHTML = buildLink(\n url,\n linkText,\n 'ubs-widget-card__next-available-wrapper',\n segmentProps,\n );\n card.dataset.slotsLoaded = 'true';\n};\n\nfunction setSoonestAttribute(card, time) {\n card.dataset.soonest = time;\n}\n\nfunction setAvailabilityPriorityAttribute(card, priority) {\n card.dataset.availabilityPriority = priority;\n}\n\nexport const loadSlots = (ignore_times = false) => {\n const already_loaded = [];\n const searchDate = getSearchDate();\n const cards = document.querySelectorAll('[data-booking-times-card]');\n cards.forEach(async (card) => {\n const location_data = {};\n location_data.hash = card.dataset.uniqHash;\n location_data.slots = JSON.parse(card.dataset.slots);\n location_data.waitListAvailability = card.dataset.waitListAvailability;\n location_data.waitListLength = card.dataset.waitListLength;\n\n if (ignore_times) {\n if (!already_loaded.includes(location_data.hash)) {\n already_loaded.push(location_data.hash);\n loadSlotToDom(location_data, ignore_times, searchDate);\n }\n } else {\n loadSlotToDom(location_data, ignore_times, searchDate);\n }\n });\n sortCardsbyCurrentFilter();\n removeInitialSearchDate();\n setUpDomEvents();\n};\n\n/**\n * This is necessary in order to account for the date passed in through the params.\n * @return {string}\n */\nfunction getSearchDate() {\n const hiddenDateFields = getDateHiddenFields();\n const main = getUbsMain();\n const initialDateFromParams = main.dataset.ubsParamDate;\n\n const searchDate = {};\n if (\n initialDateFromParams !== '' &&\n initialDateFromParams !== null &&\n initialDateFromParams !== undefined\n ) {\n searchDate.value = initialDateFromParams;\n } else {\n if (window.innerWidth > 750) {\n searchDate.value = hiddenDateFields[0].value;\n } else {\n searchDate.value = hiddenDateFields[1].value;\n }\n }\n\n return searchDate;\n}\n\nfunction removeInitialSearchDate() {\n const main = getUbsMain();\n main.dataset.ubsParamDate = '';\n}\n\nfunction dateValuePresent(dateObj) {\n return (\n dateObj !== undefined &&\n dateObj !== null &&\n Object.entries(dateObj).length > 0 &&\n dateObj.value !== '' &&\n dateObj.value !== undefined\n );\n}\n\n/**\n *\n * @param date {Object}\n * @return {Date}\n */\nfunction dateValueToDateString(date) {\n const parts = date.value.split('-');\n return new Date(parts[0], parts[1] - 1, parts[2]).toDateString();\n}\n\nconst insertWaitlistCTA = (card, waitlistLength, wrapperEl) => {\n const message = `

This location is still accepting walk-ins.

`;\n const waitlistMessage =\n waitlistLength === '1'\n ? `${waitlistLength} patient in line now.`\n : `${waitlistLength} patients in line now.`;\n const availabilityTitles = `

Today's availability

`;\n\n const moreTimesLink = buildBookingUrl(card.dataset.bookingLink, card, null);\n const moreTimesText = 'view more';\n const moreTimesClasses = 'wait-list-cta-more-times';\n const moreTimesSegmentProps = {\n 'data-segment-event': 'Universal Booking Site Clicked',\n 'data-segment-click-type': 'view_availability',\n 'data-additional-segment-props-element': '[data-ubs-main]',\n };\n const moreTimesButton = buildLink(\n moreTimesLink.href,\n moreTimesText,\n moreTimesClasses,\n moreTimesSegmentProps,\n );\n\n const buttonHref = buildBookingUrl(\n card.dataset.bookingLink,\n card,\n 'online_waitlist',\n );\n const buttonClasses = 'get-in-line-btn';\n const buttonText = 'Get in line';\n const buttomSegmentProps = {\n 'data-segment-event': 'Universal Booking Site Clicked',\n 'data-segment-click-type': 'online_waitlist',\n 'data-additional-segment-props-element': '[data-ubs-main]',\n };\n const button = buildLink(\n buttonHref,\n buttonText,\n buttonClasses,\n buttomSegmentProps,\n );\n\n wrapperEl.innerHTML = `
\n ${availabilityTitles}\n
\n ${button}\n
\n ${message}\n ${waitlistMessage}\n \n
\n
\n ${moreTimesButton}\n
`;\n};\n\n/**\n *\n * @param slots {Array}\n * @param card {Element}\n * @param calendarSelect {Boolean}\n * @param waitListPresent {Boolean}\n * @param waitListLength {Number}\n * @param footerEl {Element}\n */\nfunction setSlots(\n slots,\n card,\n calendarSelect,\n waitListPresent,\n waitListLength,\n footerEl,\n) {\n const todaysSlots = slotsToday(slots, card);\n const tomorrowsSlots = slotsTomorrow(slots, card);\n if (todaysSlots.length > 0) {\n insertTimeSlots(card, todaysSlots, footerEl, \"Today's availability\");\n setAvailabilityPriorityAttribute(card, 1);\n } else if (waitListPresent) {\n insertWaitlistCTA(card, waitListLength, footerEl);\n setAvailabilityPriorityAttribute(card, 2);\n } else if (tomorrowsSlots.length > 0) {\n if (calendarSelect) {\n insertTimeSlots(\n card,\n tomorrowsSlots,\n footerEl,\n \"Tomorrow's availability\",\n );\n } else {\n insertNextAvailableDateMessage(card, tomorrowsSlots[0], footerEl, true);\n }\n setAvailabilityPriorityAttribute(card, 2);\n } else if (slots.length > 0) {\n const nextSlot = nextAvailableSlot(slots, card);\n insertNextAvailableDateMessage(card, nextSlot, footerEl);\n setAvailabilityPriorityAttribute(card, 3);\n } else {\n insertNoAvailabilityMessage(card, footerEl);\n setAvailabilityPriorityAttribute(card, 4);\n }\n}\n\n/**\n *\n * @param slots {Array}\n * @param card {Element}\n * @param searchDate {Object}\n * @param footerEl {Element}\n */\nfunction setSearchedSlots(slots, card, searchDate, footerEl) {\n const searchDateValue = getUTCDate(new Date(searchDate.value));\n const searchDateSlots = slotsOnDate(slots, searchDateValue, card);\n if (searchDateSlots.length > 0) {\n insertTimeSlots(\n card,\n searchDateSlots,\n footerEl,\n `${formatDate(searchDate.value)}`,\n );\n setAvailabilityPriorityAttribute(card, 1);\n } else if (slots.length > 0) {\n const nextSlot = nextAvailableSlot(slots, card);\n insertNextAvailableDateMessage(card, nextSlot, footerEl);\n setAvailabilityPriorityAttribute(card, 2);\n } else {\n insertNoAvailabilityMessage(card, footerEl);\n setAvailabilityPriorityAttribute(card, 4);\n }\n}\n\nexport const loadSlotToDom = (data, ignore_times, searchDate) => {\n const card = document.querySelector(\n `.ubs-widget-card[data-uniq-hash=\"${data.hash}\"]`,\n );\n\n if (!card) {\n return;\n }\n\n if (!(card.dataset.slotsLoaded === 'true') || ignore_times) {\n const slots = data.slots;\n const waitListAvailability = data.waitListAvailability === 'true';\n const waitListLength = data.waitListLength;\n\n if (!ignore_times) {\n updateDatePickers(slots);\n }\n const footerEl = getFooter(card);\n\n if (slots) {\n const todaysDate = new Date().toDateString();\n if (getUbsMain().dataset.displayCalendar === 'false') {\n setSlots(\n slots,\n card,\n false,\n waitListAvailability,\n waitListLength,\n footerEl,\n );\n } else if (\n dateValuePresent(searchDate) &&\n todaysDate !== dateValueToDateString(searchDate)\n ) {\n setSearchedSlots(slots, card, searchDate, footerEl);\n } else {\n setSlots(\n slots,\n card,\n true,\n waitListAvailability,\n waitListLength,\n footerEl,\n );\n }\n } else {\n insertNoAvailabilityMessage(card, footerEl);\n setAvailabilityPriorityAttribute(card, 4);\n }\n\n if (card) {\n addBookingParamsToCardLink(card, footerEl);\n }\n }\n};\n","import {\n getLocationsListingsTab,\n getLocationsListingsTabButton,\n getProvidersListingsTab,\n getProvidersListingsTabButton,\n getUbsMain,\n} from '@/components/ubs/elementUtils';\n\nconst viewClinicsTabButton = getLocationsListingsTabButton();\nconst viewProvidersTabButton = getProvidersListingsTabButton();\nconst clinicsTab = getLocationsListingsTab();\nconst providersTab = getProvidersListingsTab();\n\n/**\n * Updates the data-segment-tab-view attribute on ubs main depending on which tab is currently active\n * @param tab {string}\n */\nfunction setTabViewAttribute(tab) {\n const main = getUbsMain();\n main.dataset.segmentTabView = tab;\n}\n\nfunction showClinics() {\n if (!viewClinicsTabButton || !viewProvidersTabButton) {\n return;\n }\n providersTab.classList.add('ubs-page--hidden');\n clinicsTab.classList.remove('ubs-page--hidden');\n viewClinicsTabButton.classList.add('active');\n viewProvidersTabButton.classList.remove('active');\n setTabViewAttribute('clinics');\n}\n\nfunction showProviders() {\n if (!viewClinicsTabButton || !viewProvidersTabButton) {\n return;\n }\n clinicsTab.classList.add('ubs-page--hidden');\n providersTab.classList.remove('ubs-page--hidden');\n viewProvidersTabButton.classList.add('active');\n viewClinicsTabButton.classList.remove('active');\n setTabViewAttribute('providers');\n}\n\nfunction setUpTabsButtons() {\n if (!viewClinicsTabButton || !viewProvidersTabButton) {\n return;\n }\n viewProvidersTabButton.addEventListener('click', (e) => {\n showProviders();\n });\n\n viewClinicsTabButton.addEventListener('click', (e) => {\n showClinics();\n });\n}\n\nexport { setUpTabsButtons, showClinics, showProviders };\n","import { setParam } from '@/components/ubs/bookingTimes';\nimport { getAnonymousId } from '@/components/shared/tracking/segmentAnalytics';\nimport {\n getListingsContainerByName,\n isProviderCard,\n} from '@/components/ubs/elementUtils';\nimport { setUpDomEvents } from '@/components/shared/tracking/globalTracking';\nimport { showClinics } from '@/components/ubs/controllers/tabsController';\n\nclass MapboxMap extends HTMLElement {\n ACCESS_TOKEN = document.getElementById('envKeys').dataset.mapboxKey;\n markers = [];\n\n constructor() {\n super();\n\n const coords = JSON.parse(this.getAttribute('data-center'));\n if (coords) {\n this._center = coords.reverse();\n } else {\n this._center = [0, 0];\n }\n }\n\n connectedCallback() {\n this.innerHTML = '
';\n mapboxgl.accessToken = this.ACCESS_TOKEN;\n this.map = new mapboxgl.Map({\n container: 'map',\n style: 'mapbox://styles/mapbox/streets-v11?optimize=true', // style URL\n center: this._center,\n zoom: 10,\n cooperativeGestures: true,\n });\n }\n\n set locations(locations) {\n this.renderMarkers(locations);\n }\n\n set center(center) {\n this._center = center;\n this.addCenter();\n }\n\n get center() {\n return this._center;\n }\n\n get mapObject() {\n return this.map;\n }\n\n getLocationCards() {\n return document.querySelectorAll('.ubs-widget-card');\n }\n\n renderMarkers(locations) {\n // Remove the markers if there are any to repaint\n this.clearMarkers();\n\n const bounds = this.map.getBounds();\n\n locations.forEach((locationCard) => {\n const locData = locationCard.dataset;\n const lngLat = [\n parseFloat(locData.longitude),\n parseFloat(locData.latitude),\n ];\n const markerElement = this.createMarkerFromCard(locationCard);\n if (this.showOnMap(locationCard)) {\n const marker = new mapboxgl.Marker({ element: markerElement })\n .setLngLat(lngLat)\n .setPopup(this.createPopupFromCard(locationCard))\n .addTo(this.map);\n\n // Add markers to the instance variable to keep track of them\n this.markers.push(marker);\n\n // TODO: these blocks of code could be split up into methods\n // when marker is clicked open the infowindow and set the card active\n marker._element.addEventListener('click', () => {\n // only allow a single window to be open at once\n this.removeClassFromNodes(locations, 'active');\n locationCard.classList.add('active');\n\n const idHash = locationCard.dataset.uniqHash;\n this.focusListingCard(idHash);\n });\n\n const providerCards = document.querySelectorAll(\n `.ubs-widget-card--provider[data-id-hash=\"${locData.idHash}\"]`,\n );\n const eventCards = Array.from(providerCards);\n eventCards.push(locationCard);\n eventCards.forEach((card) => {\n // when a card is hovered, open the popup\n card.addEventListener('mouseenter', () =>\n this.highlightMarker(marker, locationCard),\n );\n // when a card is focused, open the popup\n card.addEventListener('click', () =>\n this.highlightMarker(marker, locationCard),\n );\n card.addEventListener('mouseleave', () =>\n this.unHighlightMarker(marker),\n );\n });\n }\n });\n\n this.map.fitBounds(bounds, { padding: 20 });\n }\n\n focusListingCard(idHash) {\n // TODO: refactor this so that we are not managing another components state from this component\n showClinics();\n this.removeOutlineFromListingCards();\n\n // highlight listing card\n const listingCard = getListingsContainerByName('locations').querySelector(\n `[data-uniq-hash=\"${idHash}\"]`,\n );\n listingCard.classList.add('ubs-widget-card--highlighted');\n\n this.scrollToListingCard(listingCard);\n }\n\n // TODO: move this elsewhere for single responsibility\n scrollToListingCard(listingCard) {\n listingCard.scrollIntoView({\n behavior: 'smooth',\n });\n }\n\n // TODO: move this elsewhere for single responsibility\n removeOutlineFromListingCards() {\n const cards = document.querySelectorAll('.ubs-widget-card');\n cards.forEach((card) => {\n card.classList.remove('ubs-widget-card--highlighted');\n });\n }\n\n clearMarkers() {\n if (!this.markers) {\n return;\n }\n\n this.markers.forEach((marker) => {\n if (marker.getPopup() && marker.getPopup().isOpen()) {\n marker.getPopup().remove();\n }\n marker.remove();\n });\n this.markers = [];\n }\n\n addCenter() {\n // create the marker\n const markerWrapper = document.createElement('div');\n const el = document.createElement('div');\n el.classList.add('map-marker');\n el.classList.add('map-marker--center');\n markerWrapper.appendChild(el);\n const marker = new mapboxgl.Marker({\n element: markerWrapper,\n });\n\n marker.setLngLat(this._center);\n marker.addTo(this.map);\n this.markers.push(marker);\n }\n\n showOnMap(card) {\n if (!card) {\n return false;\n }\n const isTelemedOnly = card.dataset.telemed === 'true';\n const providerCard = isProviderCard(card);\n return !isTelemedOnly && !providerCard;\n }\n\n createMarkerFromCard(locationCard) {\n // create the marker\n const markerWrapper = document.createElement('div');\n const markerElement = document.createElement('div');\n markerElement.classList.add(...this.markerClasses());\n markerElement.style = `--background-image: url(\"${this.createMarkerImage(locationCard.dataset.markerColor)}\");`;\n markerWrapper.appendChild(markerElement);\n return markerWrapper;\n }\n\n createMarkerImage(color) {\n const urlSVGHeader = 'data:image/svg+xml;charset=utf-8,';\n const markerSVG =\n encodeURIComponent(`\n \n \n \n \n \n \n \n `);\n return urlSVGHeader + markerSVG;\n }\n\n markerClasses() {\n return ['map-marker', 'map-marker--featured'];\n }\n\n createPopupFromCard(locationCard) {\n const locationCardNode = locationCard.cloneNode(true);\n const hrefs = locationCardNode.querySelectorAll('a');\n hrefs.forEach((a) => {\n if (a.dataset.listeningForClick) {\n delete a.dataset.listeningForClick;\n }\n });\n locationCardNode.querySelectorAll('[data-src]').forEach((el) => {\n el.src = el.dataset.src;\n });\n\n this.updateBookingUrl(locationCardNode);\n const popup = new mapboxgl.Popup({\n focusAfterOpen: false,\n offset: [0, -18],\n closeButton: false,\n });\n popup.setDOMContent(locationCardNode);\n popup.setMaxWidth('unset');\n\n popup.on('open', () => {\n setUpDomEvents();\n });\n\n return popup;\n }\n\n updateBookingUrl(card) {\n const bookingButton = card.querySelector('.ubs-widget-card__map-button');\n const bookingUrl = new URL(bookingButton.href);\n\n if (card.dataset.soonest) {\n setParam(bookingUrl, 'preferredDate', card.dataset.soonest.slice(0, 10));\n }\n\n const anonymousId = getAnonymousId();\n if (anonymousId) {\n setParam(bookingUrl, 'anonymousId', anonymousId);\n }\n\n bookingButton.href = bookingUrl;\n }\n\n highlightMarker(marker, locationCard) {\n if (!marker.getPopup().isOpen()) {\n marker.togglePopup();\n }\n const markerElement = marker._element.children[0];\n const locations = this.getLocationCards();\n markerElement.classList.add('map-marker--grow');\n this.removeClassFromNodes(locations, 'active');\n locationCard.classList.add('active');\n }\n\n unHighlightMarker(marker) {\n if (marker.getPopup().isOpen()) {\n marker.togglePopup();\n }\n const markerElement = marker._element.children[0];\n markerElement.classList.remove('map-marker--grow');\n }\n\n removeClassFromNodes(nodes, className) {\n nodes.forEach((el) => {\n el.classList.remove(className);\n });\n }\n}\n\ncustomElements.define('mapbox-map', MapboxMap);\n","export default function setUpDropdownMenus(dropDownId = '') {\n let dropdownMenuControllers = [];\n\n if (dropDownId === '') {\n dropdownMenuControllers = document.querySelectorAll(\n '[data-ubs-dropdown-controller]',\n );\n } else {\n dropdownMenuControllers = document.querySelectorAll(\n `[data-dropdown-controller-id=\"${dropDownId}\"]`,\n );\n }\n\n dropdownMenuControllers.forEach((controllerElement) => {\n const id = controllerElement.dataset.dropdownControllerId;\n const menu = document.querySelector(`[data-ubs-dropdown-menu=\"${id}\"]`);\n\n if (!menu) {\n console.error(`Dropdown menu with id ${id} not found`);\n return;\n }\n\n const activators = document.querySelectorAll(\n `[data-ubs-dropdown-activator=\"${id}\"]`,\n );\n\n const isOpen = () => {\n return !menu.classList.contains('ubs-page--hidden');\n };\n\n const closeMenu = () => {\n menu.classList.add('ubs-page--hidden');\n };\n\n const activatorsContainTarget = (target) => {\n for (let i = 0; i < activators.length; i++) {\n if (activators[i].contains(target) || activators[i] === target) {\n return true;\n }\n }\n return false;\n };\n\n const calenderBtnsContainTarget = (target) => {\n return (\n target.classList.contains('flatpickr-next-month') ||\n target.classList.contains('flatpickr-prev-month') ||\n target.tagName === 'svg' ||\n target.tagName === 'path'\n );\n };\n\n const onClickOutside = (e) => {\n if (isOpen()) {\n if (\n menu !== e.target &&\n !activatorsContainTarget(e.target) &&\n !calenderBtnsContainTarget(e.target)\n ) {\n document.removeEventListener('click', onClickOutside);\n closeMenu();\n }\n }\n };\n\n const openMenu = () => {\n menu.classList.remove('ubs-page--hidden');\n document.addEventListener('click', (e) => {\n onClickOutside(e);\n });\n };\n\n activators.forEach((activator) => {\n activator.addEventListener('click', (e) => {\n if (!activator.classList.contains('disabled')) {\n if (isOpen()) {\n closeMenu();\n } else {\n openMenu();\n }\n }\n });\n });\n\n // special case for datepicker dropdown\n if (menu.dataset.ubsDropdownMenu === 'date') {\n const dateInput = menu.querySelector('input.date-picker');\n dateInput.addEventListener('change', (e) => {\n closeMenu();\n });\n }\n\n controllerElement.addEventListener('keyup', (e) => {\n if (e.key === 'Escape') {\n closeMenu();\n }\n });\n });\n}\n","// set up map show/hide functionality for mobile\nimport {\n getCurrentlyVisibleListingsContainer,\n getCurrentlyVisibleListingsTab,\n getCurrentlyVisibleTabName,\n getHeader,\n getMapContainer,\n getMobileMapButtons,\n getRevealFiltersButtons,\n getSeeMoreWrapper,\n getTabsContainer,\n} from '@/components/ubs/elementUtils';\n\nfunction setUpShowHideMapButton(providerOnly = false) {\n const mapContainer = getMapContainer();\n const listContainer = getCurrentlyVisibleListingsContainer();\n const header = getHeader();\n const tabs = getTabsContainer();\n const filtersButtons = getRevealFiltersButtons();\n const hideClass = 'ubs-page--hidden';\n const noTabs = document\n .querySelector('[data-ubs-layout-wrapper]')\n .classList.contains('no-tabs');\n\n let buttons = [];\n\n // this is for only initializing the providers dropdown once that has gotten lazy loaded in\n if (providerOnly) {\n const practitionersTab = document.querySelector(\n '[data-dropdown-controller-id=\"filters-menu-practitioners\"]',\n );\n buttons = getMobileMapButtons(practitionersTab);\n } else {\n buttons = getMobileMapButtons();\n }\n\n buttons.forEach((btnEl) => {\n // return if the button doesn't exist. This will only happen if there are no locations\n if (!btnEl) {\n return;\n }\n\n btnEl.addEventListener('click', (e) => {\n e.preventDefault();\n toggleMapView(btnEl);\n });\n });\n window.addEventListener('resize', (e) => {\n if (\n window.innerWidth > 750 &&\n listContainer.classList.contains(hideClass)\n ) {\n listContainer.classList.remove(hideClass);\n const currentTabName = getCurrentlyVisibleTabName();\n const seeMoreWrapper = getSeeMoreWrapper(currentTabName);\n if (seeMoreWrapper) {\n seeMoreWrapper.classList.remove(hideClass);\n }\n mapContainer.classList.remove('show');\n header.classList.remove(hideClass);\n if (!noTabs) {\n tabs.classList.remove(hideClass);\n }\n document.body.classList.remove('ubs-page--disable-scroll');\n\n // ios fix\n const wrappers = document.querySelectorAll('[data-ubs-filters]');\n wrappers.forEach((wrapper) => {\n wrapper.classList.remove('hide-overflow');\n });\n\n // unhide the filters buttons\n filtersButtons.forEach((button) => {\n button.classList.remove(hideClass);\n });\n }\n });\n}\n\nfunction toggleMapView(btnEl = null) {\n if (btnEl) {\n btnEl.classList.toggle('active');\n }\n const mapContainer = getMapContainer();\n const currentListingsTab = getCurrentlyVisibleListingsTab();\n const listContainer = getCurrentlyVisibleListingsContainer();\n const hideClass = 'ubs-page--hidden';\n const currentTabName = getCurrentlyVisibleTabName();\n const seeMoreWrapper = getSeeMoreWrapper(currentTabName);\n const header = getHeader();\n const noTabs = document\n .querySelector('[data-ubs-layout-wrapper]')\n .classList.contains('no-tabs');\n const tabs = getTabsContainer();\n const filtersButtons = getRevealFiltersButtons();\n\n mapContainer.classList.toggle('show');\n currentListingsTab.classList.toggle('map-present');\n listContainer.classList.toggle(hideClass);\n if (seeMoreWrapper) {\n seeMoreWrapper.classList.toggle(hideClass);\n }\n header.classList.toggle(hideClass);\n if (!noTabs) {\n tabs.classList.toggle(hideClass);\n }\n document.body.classList.toggle('ubs-page--disable-scroll');\n\n // ios fix\n const wrappers = document.querySelectorAll('[data-ubs-filters]');\n wrappers.forEach((wrapper) => {\n wrapper.classList.toggle('hide-overflow');\n });\n\n // hide the filters buttons when we open the map\n filtersButtons.forEach((button) => {\n button.classList.toggle(hideClass);\n });\n}\n\nexport { toggleMapView, setUpShowHideMapButton };\n","import { getUbsMain } from '@/components/ubs/elementUtils';\n\nconst UBS_USER_LOCATION_KEY = 'ubsUserLocation';\nconst UBS_GEOLOCATION_KEY = 'ubsGeolocation';\nconst EXPIRY_TIME = 60 * 60 * 1000; // 60 minutes in milliseconds\n\nfunction userLocationKey() {\n const groupId = getUbsMain().dataset.ubsGroupId;\n return `${UBS_USER_LOCATION_KEY}-${groupId}`;\n}\n\nfunction geolocationKey() {\n const groupId = getUbsMain().dataset.ubsGroupId;\n return `${UBS_GEOLOCATION_KEY}-${groupId}`;\n}\n\n/**\n * Updates localstorage with the user's most recent search location\n */\nfunction setStoredUserLocation(latitude, longitude, cityId) {\n const locationInfo = {\n lat: latitude,\n lng: longitude,\n cityId,\n timestamp: Date.now(),\n };\n\n window.localStorage.setItem(userLocationKey(), JSON.stringify(locationInfo));\n}\n\nfunction deleteStoredUserLocation() {\n window.localStorage.removeItem(userLocationKey());\n}\n\n/**\n * Returns the user\n * @return {{}}\n */\nfunction getStoredUserLocation() {\n let userLocationInfo = window.localStorage.getItem(userLocationKey());\n\n userLocationInfo = JSON.parse(userLocationInfo);\n\n if (userLocationInfo === null || userLocationInfo === undefined) {\n return {};\n }\n\n return userLocationInfo;\n}\n\n/**\n * Checks if the stored user location has expired\n * @return {boolean}\n */\nfunction isUserLocationExpired() {\n const userLocationInfo = getStoredUserLocation();\n if (!userLocationInfo) {\n return true;\n }\n if (!userLocationInfo.timestamp) {\n return true;\n }\n const currentTime = Date.now();\n return currentTime - userLocationInfo.timestamp > EXPIRY_TIME;\n}\n\nfunction storeGeolocationData(latitude, longitude) {\n const locationInfo = {\n lat: latitude,\n lng: longitude,\n };\n window.localStorage.setItem(geolocationKey(), JSON.stringify(locationInfo));\n}\n\nfunction getGeolocationData() {\n let userLocationInfo = window.localStorage.getItem(geolocationKey());\n userLocationInfo = JSON.parse(userLocationInfo);\n\n if (userLocationInfo === null || userLocationInfo === undefined) {\n return {};\n }\n\n return userLocationInfo;\n}\n\nexport {\n setStoredUserLocation,\n getStoredUserLocation,\n deleteStoredUserLocation,\n storeGeolocationData,\n getGeolocationData,\n isUserLocationExpired,\n};\n","import {\n getMapComponent,\n getSearchSubmitBtn,\n getTabsContainer,\n getUbsMain,\n} from '@/components/ubs/elementUtils';\n\nexport function removeAllMapMarkers() {\n const map = getMapComponent();\n map.clearMarkers();\n}\n\nexport function displayCalendar() {\n const calendar = document.querySelector('.ubs-page__search');\n if (calendar) {\n calendar.classList.remove('ubs-page__search--no-calendar');\n }\n const mobileCalendar = document.querySelector('.ubs-page__mobile-search');\n if (mobileCalendar) {\n mobileCalendar.classList.remove('ubs-page__mobile-search--no-calendar');\n }\n}\n\nexport function hideCalendar() {\n const calendar = document.querySelector('.ubs-page__search');\n if (calendar) {\n calendar.classList.add('ubs-page__search--no-calendar');\n }\n const mobileCalendar = document.querySelector('.ubs-page__mobile-search');\n if (mobileCalendar) {\n mobileCalendar.classList.add('ubs-page__mobile-search--no-calendar');\n }\n}\n\nexport function hideSearchButton() {\n const button = getSearchSubmitBtn();\n button.classList.add('ubs-page--hidden');\n}\n\nexport function showTabsContainer() {\n const tabsContainer = getTabsContainer();\n if (tabsContainer) {\n tabsContainer.classList.remove('ubs-page--hidden');\n }\n}\n\nexport function hideTabsContainer() {\n const tabsContainer = getTabsContainer();\n if (tabsContainer) {\n tabsContainer.classList.add('ubs-page--hidden');\n }\n}\n\nexport function isInitialLoad() {\n const initialLoad = getUbsMain().dataset.ubsInitialLoad;\n return !!initialLoad;\n}\n\nexport function unsetInitialLoad() {\n getUbsMain().dataset.ubsInitialLoad = false;\n}\n","import { loadSlots } from '@/components/ubs/bookingTimes';\nimport {\n getCityIdField,\n getCitySearchFields,\n getCurrentSearchDate,\n getListingsUrl,\n getLocationsListingsTab,\n getMapContainer,\n getParamFromURL,\n getProvidersListingsTab,\n getSearchSubmitBtn,\n getVisitTypeIdHiddenField,\n updateCurrentUrl,\n getUbsMain,\n argPresent,\n getVisitTypeSearch,\n getHeader,\n openInSameTab,\n} from '@/components/ubs/elementUtils';\nimport setUpDropdownMenus from '@/components/ubs/controllers/dropdownController';\nimport { setUpFilterButtons } from '@/components/ubs/controllers/filterButtonsController';\nimport {\n showClinics,\n showProviders,\n} from '@/components/ubs/controllers/tabsController';\nimport {\n setUpShowHideMapButton,\n toggleMapView,\n} from '@/components/ubs/controllers/showHideMapButtonController';\nimport { resetDaysOnPicker } from '@/components/ubs/controllers/datepickerController';\nimport {\n getStoredUserLocation,\n isUserLocationExpired,\n} from '@/components/ubs/locationPersistenceUtils';\nimport { setMainSegmentProperties } from '@/components/ubs/segmentTrackingUtils';\n\nimport {\n removeAllMapMarkers,\n displayCalendar,\n isInitialLoad,\n unsetInitialLoad,\n hideSearchButton,\n showTabsContainer,\n hideCalendar,\n hideTabsContainer,\n} from '@/components/ubs/controllers/searchCallbacks';\n\nconst submitBtn = getSearchSubmitBtn();\nconst visitTypeSearch = getVisitTypeSearch();\nconst visitTypeIdHiddenField = getVisitTypeIdHiddenField();\nconst cityFields = getCitySearchFields();\nconst cityIdField = getCityIdField();\n\nexport const submitSearch = async () => {\n const searchUrl = buildSearchUrl();\n preparePageForSearch();\n const resp = await fetch(searchUrl, {\n method: 'GET',\n });\n const json = await resp.json();\n preparePageToRenderListings();\n renderListings(json);\n updatePageAfterListingRender(json);\n setMainSegmentProperties(json.properties);\n};\n\n/**\n *\n * @param message {string}\n * @return {string}\n */\nexport function progressWrapper(message) {\n return `
\n
\n
\n
\n

${message}

\n
`;\n}\n\nfunction buildSearchUrl() {\n const searchParams = getSearchParams();\n const searchUrl = new URL(getListingsUrl());\n for (const [key, value] of Object.entries(searchParams)) {\n if (argPresent(value)) {\n searchUrl.searchParams.append(key, value);\n }\n }\n return searchUrl;\n}\n\nfunction getSearchParams() {\n let searchParams = {};\n\n addUserLocationToParams(searchParams);\n // update the current url to maintain state.\n updateCurrentUrl(searchParams);\n\n const ubsMain = getUbsMain();\n\n const cityName = cityFields[0].innerText;\n const date = getCurrentSearchDate();\n let visitTypeId = ubsMain.dataset.ubsVisitTypeId;\n\n if (visitTypeIdHiddenField && visitTypeSearch) {\n visitTypeId = visitTypeIdHiddenField.value;\n }\n\n return {\n ...searchParams,\n searchQuery: cityName,\n visitTypeId: visitTypeId,\n reasonForVisit: ubsMain.dataset.reason,\n date: date,\n gaSessionId: ubsMain.dataset.gaSessionId,\n gaClientId: ubsMain.dataset.gaClientId,\n bypass_cache: getParamFromURL('bypass_cache'),\n lang: getParamFromURL('lang'),\n initialLoad: isInitialLoad(),\n openInSameTab: openInSameTab(),\n };\n}\n\nfunction addUserLocationToParams(params) {\n const storedUserLocationInfo = getStoredUserLocation();\n let cityLat = getParamFromURL('lat');\n let cityLng = getParamFromURL('lng');\n const cityId = cityIdField.value;\n\n if (\n storedUserLocationInfo.lat &&\n storedUserLocationInfo.lng &&\n !isUserLocationExpired()\n ) {\n cityLat = storedUserLocationInfo.lat;\n cityLng = storedUserLocationInfo.lng;\n }\n\n params.lat = cityLat;\n params.lng = cityLng;\n\n if (cityId !== '' && cityId !== undefined) {\n params.city_id = cityId;\n }\n params;\n}\n\nfunction preparePageForSearch() {\n // remove the initial load status\n if (isInitialLoad()) {\n unsetInitialLoad();\n }\n\n submitBtn.classList.add('loading');\n submitBtn.innerText = '';\n submitBtn.disabled = true;\n\n getLocationsListingsTab().innerHTML = progressWrapper(\n 'Searching for clinics...',\n );\n getProvidersListingsTab().innerHTML = progressWrapper(\n 'Searching for providers...',\n );\n removeAllMapMarkers();\n\n const mapContainer = getMapContainer();\n\n if (window.innerWidth < 750 && mapContainer.classList.contains('show')) {\n mapContainer.classList.remove('show');\n }\n}\n\nfunction preparePageToRenderListings() {\n submitBtn.classList.remove('loading');\n submitBtn.innerText = 'Search';\n submitBtn.disabled = false;\n}\n\nfunction renderListings(json) {\n if (!json) {\n console.error('Could not return locations');\n return;\n }\n\n getLocationsListingsTab().innerHTML = json.locations.data;\n\n // hide practitioners tab if there are none\n if (json.practitioners.practitioners_present) {\n showTabsContainer();\n // remove the border bottom from the header\n getHeader().classList.remove('header-border');\n const wrapper = document.querySelector('[data-ubs-layout-wrapper]');\n wrapper.classList.remove('no-tabs');\n getProvidersListingsTab().innerHTML = json.practitioners.data;\n } else {\n hideTabsContainer();\n // remove the border bottom from the header\n getHeader().classList.add('header-border');\n const wrapper = document.querySelector('[data-ubs-layout-wrapper]');\n wrapper.classList.add('no-tabs');\n getProvidersListingsTab().innerHTML = json.practitioners.data;\n showClinics();\n }\n\n if (json.display_calendar) {\n displayCalendar();\n getUbsMain().dataset.displayCalendar = true;\n } else {\n hideCalendar();\n getUbsMain().dataset.displayCalendar = false;\n }\n\n const citiesDropdownActivator = document.querySelector(\n '[data-ubs-dropdown-activator=\"cities-search\"]',\n );\n const citiesMobileMenuActivator = document.querySelector(\n '[data-ubs-mobile-popup-id=\"city\"]',\n );\n if (json.show_cities_dropdown) {\n // enable the activators\n citiesDropdownActivator.classList.remove('disabled');\n citiesMobileMenuActivator.classList.remove('disabled');\n } else {\n const citiesDropdownMenu = document.querySelector(\n '[data-ubs-dropdown-menu=\"cities-search\"]',\n );\n citiesDropdownMenu.classList.add('ubs-page--hidden');\n // disable the activators\n citiesDropdownActivator.classList.add('disabled');\n citiesMobileMenuActivator.classList.add('disabled');\n }\n\n if (\n !json.practitioners.practitioners_present &&\n !json.show_cities_dropdown &&\n !json.display_calendar\n ) {\n // if we don't have any menus, don't show the search\n hideSearchButton();\n }\n}\n\nfunction updatePageAfterListingRender(json) {\n const newCityCoords = json.city_data.latlng;\n const slot = document.querySelector('.ubs-widget-card');\n\n if (slot) {\n // reinit the buttons and dropdowns for the filters, as well as the current location options\n setUpFilterButtons();\n setUpDropdownMenus('filters-menu-locations');\n setUpDropdownMenus('filters-menu-practitioners');\n setUpShowHideMapButton();\n }\n\n resetDaysOnPicker();\n\n //set up the js for the listing cards like the pagination buttons\n if (slot) {\n loadSlots();\n }\n\n const cards = document.querySelectorAll('.ubs-widget-card');\n if (cards) {\n const mapboxMap = document.querySelector('mapbox-map');\n const map = mapboxMap.mapObject;\n mapboxMap.clearMarkers();\n mapboxMap.locations = cards;\n\n // set the center\n mapboxMap.center = newCityCoords;\n\n if (json.set_page_to_provider_tab) {\n showProviders();\n map.flyTo({\n center: newCityCoords,\n essential: true,\n zoom: 5,\n });\n } else {\n map.flyTo({\n center: newCityCoords,\n essential: true,\n zoom: 10,\n });\n }\n // If we are on mobile, we check to see if we want to default to map view\n if (\n getUbsMain().dataset.ubsMobileMap == 'true' &&\n window.innerWidth < 766\n ) {\n const tabs = document.querySelectorAll('[data-ubs-listings-tab]');\n const visibleTab = Array.from(tabs).filter(\n (tab) => tab.classList.contains('ubs-page--hidden') === false,\n )[0];\n const buttonToToggle = visibleTab.querySelector('[data-ubs-map-button]');\n toggleMapView(buttonToToggle);\n const marker = markers[0];\n marker.togglePopup();\n }\n }\n}\n","import {\n getMobilePopup,\n getMobilePopupCloseButton,\n getMobilePopupControllers,\n showMobilePopupForm,\n} from '@/components/ubs/elementUtils';\n\nfunction disableScroll() {\n document.body.classList.add('ubs-page--disable-scroll');\n}\n\nfunction enableScroll() {\n document.body.classList.remove('ubs-page--disable-scroll');\n}\n\n/**\n * Opens the mobile search modal\n * @param mobileFormId {string} the form id.\n * There are three different forms: cities, type of visit, and date. This param indicates which form to show.\n */\nfunction openPopup(mobileFormId) {\n const popup = getMobilePopup();\n popup.showModal();\n disableScroll();\n showMobilePopupForm(mobileFormId);\n // this is to remove some weird behavior for focus when we open the modal, focus on first button in the form\n popup.querySelector('.dropdown-wrapper').querySelector('button').focus();\n}\n\n/**\n * Closes the search modal\n */\nfunction closePopup() {\n const popup = getMobilePopup();\n enableScroll();\n popup.close();\n}\n\n/**\n * Set up the close, hide and show behaviors of the different parts of the modal\n */\nfunction setUpModalBehavior() {\n const popupCloseBtn = getMobilePopupCloseButton();\n const mobilePopupControllers = getMobilePopupControllers();\n\n mobilePopupControllers.forEach((popupController) => {\n popupController.addEventListener('click', (e) => {\n // this conditional is here because of the \"where to find us\" link needs to open the mobile search menu if on mobile or the dropdown if on desktop\n if (\n window.innerWidth <= 750 &&\n !popupController.classList.contains('disabled')\n ) {\n const mobileFormId = popupController.dataset.ubsMobilePopupId;\n openPopup(mobileFormId);\n }\n });\n });\n\n popupCloseBtn.addEventListener('click', (e) => {\n closePopup();\n });\n\n window.addEventListener('resize', (e) => {\n if (window.innerWidth >= 750) {\n closePopup();\n }\n });\n}\n\nfunction setUpMobileSearch() {\n setUpModalBehavior();\n}\n\nexport { setUpMobileSearch, closePopup };\n","import { submitSearch } from '@/components/ubs/controllers/ubsSearchController';\nimport {\n formatDate,\n getCitySelectOptions,\n getDateHiddenFields,\n getDateSearchFields,\n getPopupControllerById,\n getVisitTypeHiddenField,\n getVisitTypeInputFields,\n getVisitTypeMenuOptions,\n updateCurrentUrl,\n getUbsMain,\n getVisitTypeSearch,\n getSearchSubmitBtn,\n getCitySearchFields,\n getVisitTypeIdHiddenField,\n getCityIdField,\n} from '@/components/ubs/elementUtils';\nimport { closePopup } from '@/components/ubs/controllers/mobileSearchController';\nimport {\n setStoredUserLocation,\n deleteStoredUserLocation,\n getGeolocationData,\n} from '@/components/ubs/locationPersistenceUtils';\nimport { manuallyTrackSegmentEvent } from '@/components/ubs/segmentTrackingUtils';\nimport { loadSlots } from '@/components/ubs/bookingTimes';\n\nconst visitTypeSearch = getVisitTypeSearch();\nconst visitTypeHiddenField = getVisitTypeHiddenField();\nconst submitBtn = getSearchSubmitBtn();\nconst cityFields = getCitySearchFields();\nconst cityIdField = getCityIdField();\n\nexport function setUpSearch() {\n setUpCitySearch();\n if (visitTypeSearch) {\n setUpTypeOfVisit();\n }\n setUpDateSelect();\n\n submitBtn.addEventListener('click', (e) => {\n if (submitBtn.disabled === false) {\n e.preventDefault();\n submitSearch();\n }\n });\n}\n\n/**\n * Sets the values of the date fields on desktop and mobile searches to the value selected on the datepicker\n */\nfunction setUpDateSelect() {\n const hiddenDateFields = getDateHiddenFields();\n hiddenDateFields.forEach((field) => {\n field.addEventListener('change', (e) => {\n const parsedDate = formatDate(e.target.value);\n updateDateSearchFields(parsedDate);\n // when a user clicks on the option, automatically submit the search, but only on mobile\n if (field.dataset.picker === 'mobile-search') {\n closePopup();\n }\n loadSlots(true);\n manuallyTrackSegmentEvent({ selectDate: true });\n });\n });\n}\n\n/**\n *\n * @param date {string}\n */\nfunction updateDateSearchFields(date) {\n const fields = getDateSearchFields();\n fields.forEach((field) => {\n field.innerText = date;\n field.classList.add('input-info');\n });\n\n const mobileSearchField = getPopupControllerById('date');\n mobileSearchField.innerText = date;\n}\n\n/**\n * Set up the type of visit options in the dropdown\n * Invokes the setUpVisitOption function for setting up the options\n */\nfunction setUpTypeOfVisit() {\n const visitTypeOptions = getVisitTypeMenuOptions();\n const visitTypeFields = getVisitTypeInputFields();\n visitTypeOptions.forEach((option) => {\n const isMobile =\n option.dataset.ubsMobileSearchVisitTypeOption !== undefined;\n setUpVisitOption(option, visitTypeFields, isMobile);\n });\n}\n\n/**\n * Set up the city search\n * When the user selects one of the city options, a few things happen:\n * The inner text for the city field gets updated along with its color by adding a class\n * The inner text on the mobile search bar gets updated\n * The value of the hidden field containing the city id is updated\n */\nfunction setUpCitySearch() {\n const citySelectOptions = getCitySelectOptions();\n citySelectOptions.forEach((option) => {\n option.addEventListener('click', (e) => {\n cityFields.forEach((field) => {\n field.innerText = option.dataset.cityName;\n field.classList.add('input-info');\n });\n const mobileSearchField = getPopupControllerById('city');\n mobileSearchField.innerText = option.dataset.cityName;\n\n const cityId = option.dataset.cityId;\n\n // If cityId is present, set the user's location to the city. If no cityId is present, they have selected \"Current Location\"\n if (cityId && cityId !== '' && cityId !== undefined) {\n cityIdField.value = cityId;\n const cityLat = option.dataset.cityLat;\n const cityLng = option.dataset.cityLng;\n setStoredUserLocation(cityLat, cityLng, cityId);\n } else {\n const geolocationData = getGeolocationData();\n if (geolocationData.lat && geolocationData.lng) {\n updateCurrentUrl(geolocationData);\n } else {\n updateCurrentUrl({});\n }\n\n deleteStoredUserLocation();\n cityIdField.value = '';\n }\n\n // close the mobile search popup only on mobile\n if (option.dataset.ubsMobileCitySelectOption !== undefined) {\n closePopup();\n }\n\n manuallyTrackSegmentEvent({ selectLocation: true });\n\n // when a user clicks on the option, automatically submit the search\n submitSearch();\n });\n });\n}\n\n/**\n * When the user selects one of the radio buttons, a few things happen:\n * The visit type's search field inner text updates to match the selection\n * The hidden fields that hold the values of the name and id of the visit type get updated\n * The color of the text is changed by adding a css class to the search field\n * Submits the form upon selecting an option on both desktop and mobile\n * @param option {}\n * @param visitTypeFields {}\n * @param isMobile {boolean}\n */\nfunction setUpVisitOption(option, visitTypeFields, isMobile) {\n let eventName = 'input';\n if (isMobile) {\n eventName = 'click';\n }\n const visitTypeIdHiddenField = getVisitTypeIdHiddenField();\n\n option.addEventListener(eventName, (e) => {\n visitTypeFields.forEach((field) => {\n field.innerText = option.dataset.visitTypeName;\n field.classList.add('input-info');\n });\n\n visitTypeIdHiddenField.value = option.dataset.visitTypeId;\n visitTypeHiddenField.value = option.dataset.visitTypeName;\n\n const mobileSearchField = getPopupControllerById('visit-type');\n mobileSearchField.innerText = option.dataset.visitTypeName;\n\n if (isMobile) {\n closePopup();\n }\n\n delete getUbsMain().dataset.reason;\n manuallyTrackSegmentEvent({ selectVisitType: true });\n\n // when a user clicks on the option, automatically submit the search\n submitSearch();\n });\n}\n","import StateService from '@/components/ubs/services/stateService';\n\n// import components\nimport './components/MapboxMap.js';\n\nimport setUpDropdownMenus from '@/components/ubs/controllers/dropdownController';\nimport { setUpFilterButtons } from '@/components/ubs/controllers/filterButtonsController';\nimport { setUpTabsButtons } from '@/components/ubs/controllers/tabsController';\nimport { setUpSearch } from '@/components/ubs/controllers/searchSetup';\nimport { setUpMobileSearch } from '@/components/ubs/controllers/mobileSearchController';\nimport { setUpDatepickers } from '@/components/ubs/controllers/datepickerController';\nimport {\n progressWrapper,\n submitSearch,\n} from '@/components/ubs/controllers/ubsSearchController';\nimport {\n appendParam,\n currentWindowHasLocationParams,\n getCardsControllers,\n getMapComponent,\n} from '@/components/ubs/elementUtils';\nimport {\n getStoredUserLocation,\n isUserLocationExpired,\n storeGeolocationData,\n} from '@/components/ubs/locationPersistenceUtils';\n\nconst GEOLOCATION_PENDING = 'UbsGeolocationPending';\n\nclass App {\n constructor() {\n // register services here\n // TODO: refactor controllers into service classes\n this.stateService = StateService;\n }\n\n async initialize() {\n this.updateHeaderLogos();\n this.browserHasGeolocation = 'geolocation' in navigator;\n\n // TODO: refactor these for their own respective classes\n setUpDropdownMenus();\n setUpFilterButtons();\n setUpTabsButtons();\n setUpSearch();\n setUpMobileSearch();\n setUpDatepickers();\n\n // TODO: refactor because ugly\n const mapViewEl = getMapComponent();\n const lookup = mapViewEl.dataset.lookup != 'false';\n if (this.browserHasGeolocation && lookup) {\n this.stateService.setState(GEOLOCATION_PENDING, true);\n } else {\n console.log(\n 'Browser does not support geolocation or location is already set',\n );\n this.stateService.setState(GEOLOCATION_PENDING, false);\n }\n\n // lookup is true if there is no lat / lng or city_id in the url params\n const cardsContainers = getCardsControllers();\n cardsContainers.forEach((container) => {\n container.innerHTML = progressWrapper('Getting clinics nearest to you');\n });\n\n const storedUserLocation = getStoredUserLocation();\n\n if (\n storedUserLocation &&\n storedUserLocation.lat &&\n storedUserLocation.lng &&\n !currentWindowHasLocationParams() &&\n !isUserLocationExpired()\n ) {\n const lat = storedUserLocation.lat;\n const lng = storedUserLocation.lng;\n this.redirectToUserLocation(lat, lng);\n } else {\n this.initiateGeolocation();\n }\n\n if (this.stateService.getState(GEOLOCATION_PENDING) === false) {\n submitSearch();\n }\n }\n\n updateHeaderLogos() {\n const logo = document.querySelector('[data-ubs-group-logo]');\n const bookAVisit = document.querySelector('[data-ubs-book-visit-headline]');\n\n if (this.isIframed()) {\n if (logo) {\n logo.classList.remove('ubs-page--hidden');\n bookAVisit.remove();\n }\n } else {\n if (logo) {\n logo.classList.add('ubs-page--hidden');\n bookAVisit.classList.remove('ubs-page--hidden');\n }\n }\n }\n\n isIframed() {\n return window.location === window.parent.location;\n }\n\n initiateGeolocation() {\n if (this.browserHasGeolocation && this.mapLookup) {\n // Geolocate and update page on page load\n this.usePreciseLocation();\n } else {\n this.stateService.setState(GEOLOCATION_PENDING, false);\n }\n }\n\n /**\n * Geolocates user and updates page based off user's location preferences.\n *\n * @returns { void }\n */\n usePreciseLocation() {\n this.getLocation()\n .then(async (data) => {\n // reload the page to get the new location as center with closest locations\n const { latitude, longitude } = data.coords;\n storeGeolocationData(latitude, longitude);\n this.redirectToUserLocation(latitude, longitude);\n })\n .catch((err) => {\n submitSearch();\n });\n }\n\n /**\n * Redirect the user based on the coordinates from their geolocation or most recent search, stored in localstorage\n * @param lat\n * @param lng\n */\n redirectToUserLocation(lat, lng) {\n const redirectUrl = new URL(window.location.href);\n appendParam(redirectUrl, 'lat', lat);\n appendParam(redirectUrl, 'lng', lng);\n appendParam(redirectUrl, 'geo', true);\n window.location.href = redirectUrl;\n }\n\n /**\n * Initializes browser's geolocation request and resolve/reject with the response\n *\n * @returns { Promise } The response from getCurrentPosition()\n */\n getLocation = () =>\n new Promise((res, rej) => {\n navigator.geolocation.getCurrentPosition(\n (success) => res(success),\n (error) => rej(error),\n { enableHighAccuracy: true },\n );\n });\n}\n\nexport default App;\n","import App from '@/components/ubs/app';\n\ndocument.addEventListener('DOMContentLoaded', () => {\n const app = new App();\n app.initialize();\n});\n"],"names":["StateService","key","value","instance","HOOKS","defaults","err","givenDate","date","week1","english","nth","s","pad","number","length","int","bool","debounce","fn","wait","t","_this","args","arrayify","obj","toggleClass","elem","className","createElement","tag","content","e","clearNode","node","findParent","condition","createNumberInput","inputClassName","opts","wrapper","numInput","arrowUp","arrowDown","getEventTarget","event","path","doNothing","monthToStr","monthNumber","shorthand","locale","revFormat","dateObj","monthName","hour","day","amPM","shortMonth","seconds","_","unixSeconds","weekNum","weekNumber","year","ISODate","minutes","month","unixMillSeconds","tokenRegex","formats","options","createDateFormatter","_a","_b","config","_c","l10n","_d","isMobile","frmt","overrideLocale","c","i","arr","createDateParser","givenFormat","timeless","customLocale","parsedDate","dateOrig","format","datestr","matched","ops","matchIndex","regexStr","token","isBackSlash","escaped","match","val","compareDates","date1","date2","isBetween","ts","ts1","ts2","calculateSecondsSinceMidnight","hours","parseSeconds","secondsSinceMidnight","duration","getDefaultHours","minHour","minMinutes","minSeconds","maxHr","maxMinutes","target","_i","_loop_1","source","args_1","__assign","this","n","p","__spreadArrays","il","k","a","j","jl","DEBOUNCED_CHANGE_MS","FlatpickrInstance","element","instanceConfig","self","defaultOptions","flatpickr","English","bind","setHoursFromDate","positionCalendar","changeMonth","changeYear","clear","close","onMouseOver","createDay","destroy","isEnabled","jumpToDate","updateValue","open","redraw","set","setDate","toggle","setupHelperFunctions","yr","init","parseConfig","setupLocale","setupInputs","setupDates","build","bindEvents","setCalendarWidth","isSafari","triggerEvent","getClosestActiveElement","bindToInstance","daysWidth","updateTime","defaultDate","timeWrapper","prevValue","setHoursFromInputs","ampm2military","military2ampm","limitMinHours","limitMaxHours","minBound","maxBound","currentTime","result","maxTime","minTime","setHours","onYearInput","eventTarget","handler","ev","el","triggerChange","evt","setupMobile","debouncedResize","onResize","onKeyDown","documentClick","onMonthNavClick","selectDate","selText","timeIncrement","onBlur","jumpDate","jumpTo","oldYear","oldMonth","buildMonthSwitch","incrementNumInput","delta","inputElem","input","createEvent","fragment","buildMonthNav","buildWeeks","weekWrapper","weekNumbers","buildWeekdays","buildDays","buildTime","customAppend","_dayNumber","dateIsEnabled","dayElement","isDateSelected","isDateInRange","focusOnDayElem","targetNode","getFirstAvailableDay","startMonth","endMonth","m","startIndex","endIndex","getNextAvailableDay","current","givenMonth","loopDelta","numMonthDays","focusOnDay","offset","activeElement","dayFocused","isInView","startElem","buildMonthDays","firstOfMonth","prevMonthDays","daysInMonth","days","isMultiMonth","prevMonthDayClass","nextMonthDayClass","dayNumber","dayIndex","dayNum","dayContainer","frag","d","shouldBuildMonth","buildMonth","container","monthNavFragment","monthElement","selectedMonth","yearInput","yearElement","currentMonth","buildMonths","updateNavigationCurrentMonth","separator","hourInput","minuteInput","secondInput","updateWeekdays","firstDayOfWeek","weekdays","isOffset","triggerChangeEvent","toInitial","isCalendarElem","eventTarget_1","isCalendarElement","isInput","lostFocus","isIgnored","newYear","newYearNum","isNewYear","dateToCheck","array","parsed","valueChanged","getDateStr","allowInput","allowKeydown","allowInlineKeydown","isTimeObj","focusAndClose","delta_1","elems","x","cellClass","hoverDate","initialDate","rangeStartDate","rangeEndDate","containsDisabled","minRange","maxRange","hoverableCells","dayElem","timestamp","outOfRange","positionElement","wasOpen","minMaxDateSetter","type","inverseDateObj","boolOpts","userConfig","dates","parseDateRules","timeMode","defaultDateFormat","defaultAltFormat","minMaxTimeSetter","hook","pluginConf","getInputElem","customPositionElement","calendarHeight","acc","child","calendarWidth","configPos","configPosVertical","configPosHorizontal","inputBounds","distanceFromBottom","showOnTop","top","left","isCenter","isRight","right","rightMost","centerMost","doc","getDocumentStyleSheet","bodyWidth","centerLeft","centerBefore","centerAfter","centerIndex","centerStyle","editableSheet","sheet","createStyleSheet","style","isSelectable","selectedDate","shouldChangeMonth","selectedIndex","b","single","range","CALLBACKS","updatePositionElement","option","setSelectedDate","inputDate","rule","preloadedDate","inputType","data","hooks","name","specificFormat","dObj","isPrevMonth","isNextMonth","isKeyDown","min","max","step","curValue","newValue","isHourElem","isMinuteElem","_flatpickr","nodeList","nodes","instances","selector","HIDE_CLASS","getLocationsListingsTabButton","getProvidersListingsTabButton","getLocationsListingsTab","getProvidersListingsTab","getListingsContainers","getListingsContainerByName","getCurrentlyVisibleListingsContainer","containers","getCurrentlyVisibleTab","controllers","getCardsControllers","controller","getCurrentlyVisibleTabName","getCurrentlyVisibleListingsTab","tabName","getSearchSubmitBtn","parent","getCitySearchFields","getCityIdField","getCitySelectOptions","getVisitTypeMenuOptions","getVisitTypeInputFields","getVisitTypeHiddenField","getVisitTypeIdHiddenField","getRevealFiltersButtons","getMapContainer","getMapComponent","getSeeMoreWrapper","getMobilePopupControllers","getPopupControllerById","id","getMobilePopup","getMobilePopupCloseButton","getMobileMapButtons","getAllSearchLabels","getAllSearchSelects","getMobileSearchLabel","formId","getMobileSearchSelect","hideOtherMobileSearchForms","label","select","showMobilePopupForm","searchLabel","searchSelect","getDatepickerControllers","getDateSearchFields","getDateHiddenFields","getUbsMain","argPresent","arg","getParamFromURL","paramKey","formatDate","dateString","parts","todaysDate","getFooter","card","isProviderCard","getListingsUrl","urlHasParam","url","param","currentWindowHasLocationParams","currentUrl","appendParam","paramVal","updateCurrentUrl","params","keysToRefresh","currentHref","getCurrentSearchDate","getHeader","getTabsContainer","getVisitTypeSearch","openInSameTab","DATEPICKER_IDS","disableMonthYearInputs","createDatePicker","pickerId","setInitialDateValue","field","createDatepickers","pickerInstance","getDatePickerInstances","parseDatesData","slots","alreadyAddedDates","newDate","newDateStr","resetDaysOnPicker","picker","updateDatePickers","newDates","setUpDatepickers","shortRelativeTime","timezone","convertTZ","tzString","parseToRelativeTime","getUTCDate","convertSegmentPropsToString","props","string","line","bookingButtonSegmentProps","viewMoreSegmentProps","nextAvailableSegmentProps","noAvailableBookingSegmentProps","setMainSegmentProperties","properties","main","citySearchFields","visitTypeInputFields","dateSearchFields","currentSearchDate","searchDaysFromToday","initialLoad","getSegmentGlobbedProperties","trackSegmentEvent","manuallyTrackSegmentEvent","mainProps","segmentProps","propAccessor","cardEl","sortProp","prop","sortCards","cards","aProp","bProp","sortCardsContainer","sortedCards","setUpFilterButtons","filterRevealButtons","cardsControllers","revealBtn","tabId","cardsContainer","button","other_button","sortCardsbyCurrentFilter","listingContainer","buildLink","href","linkText","classes","isDate","dateIsLessThan","slotsOnDate","filtered_slots","maxSlots","count","slotDate","slotsToday","slotsTomorrow","today","tomorrow","nextAvailableSlot","setParam","isValidUrl","buildBookingUrl","slot","returnUrl","anonymousId","getAnonymousId","distinctId","getDistinctId","buildTimeSlotButtons","buttons","buttonSegmentProps","time","viewMoreProps","addBookingParamsToCardLink","primaryContent","insertTimeSlots","wrapperEl","message","telemed_icon","setSoonestAttribute","insertNextAvailableDateMessage","isTomorrow","slotDay","insertNoAvailabilityMessage","setAvailabilityPriorityAttribute","priority","loadSlots","ignore_times","already_loaded","searchDate","getSearchDate","location_data","loadSlotToDom","removeInitialSearchDate","setUpDomEvents","hiddenDateFields","initialDateFromParams","dateValuePresent","dateValueToDateString","insertWaitlistCTA","waitlistLength","waitlistMessage","availabilityTitles","moreTimesLink","moreTimesText","moreTimesClasses","moreTimesSegmentProps","moreTimesButton","buttonHref","setSlots","calendarSelect","waitListPresent","waitListLength","footerEl","todaysSlots","tomorrowsSlots","nextSlot","setSearchedSlots","searchDateValue","searchDateSlots","waitListAvailability","viewClinicsTabButton","viewProvidersTabButton","clinicsTab","providersTab","setTabViewAttribute","tab","showClinics","showProviders","setUpTabsButtons","MapboxMap","__publicField","coords","locations","center","bounds","locationCard","locData","lngLat","markerElement","marker","idHash","providerCards","eventCards","listingCard","markerWrapper","isTelemedOnly","providerCard","color","urlSVGHeader","markerSVG","locationCardNode","popup","bookingButton","bookingUrl","setUpDropdownMenus","dropDownId","dropdownMenuControllers","controllerElement","menu","activators","isOpen","closeMenu","activatorsContainTarget","calenderBtnsContainTarget","onClickOutside","openMenu","activator","setUpShowHideMapButton","providerOnly","mapContainer","listContainer","header","tabs","filtersButtons","hideClass","noTabs","practitionersTab","btnEl","toggleMapView","currentTabName","seeMoreWrapper","currentListingsTab","UBS_USER_LOCATION_KEY","UBS_GEOLOCATION_KEY","EXPIRY_TIME","userLocationKey","groupId","geolocationKey","setStoredUserLocation","latitude","longitude","cityId","locationInfo","deleteStoredUserLocation","getStoredUserLocation","userLocationInfo","isUserLocationExpired","storeGeolocationData","getGeolocationData","removeAllMapMarkers","displayCalendar","calendar","mobileCalendar","hideCalendar","hideSearchButton","showTabsContainer","tabsContainer","hideTabsContainer","isInitialLoad","unsetInitialLoad","submitBtn","visitTypeSearch","visitTypeIdHiddenField","cityFields","cityIdField","submitSearch","searchUrl","buildSearchUrl","preparePageForSearch","json","preparePageToRenderListings","renderListings","updatePageAfterListingRender","progressWrapper","searchParams","getSearchParams","addUserLocationToParams","ubsMain","cityName","visitTypeId","storedUserLocationInfo","cityLat","cityLng","citiesDropdownActivator","citiesMobileMenuActivator","newCityCoords","mapboxMap","map","buttonToToggle","disableScroll","enableScroll","openPopup","mobileFormId","closePopup","setUpModalBehavior","popupCloseBtn","popupController","setUpMobileSearch","visitTypeHiddenField","setUpSearch","setUpCitySearch","setUpTypeOfVisit","setUpDateSelect","updateDateSearchFields","mobileSearchField","visitTypeOptions","visitTypeFields","setUpVisitOption","geolocationData","eventName","GEOLOCATION_PENDING","App","res","rej","success","error","lookup","storedUserLocation","lat","lng","logo","bookAVisit","redirectUrl"],"mappings":"2SAAA,MAAMA,EAAa,CACjB,aAAc,CACZ,OAAKA,GAAa,WAChB,KAAK,MAAQ,GACbA,GAAa,SAAW,MAEnBA,GAAa,QACrB,CAED,SAASC,EAAKC,EAAO,CACnB,KAAK,MAAMD,CAAG,EAAIC,CACnB,CAED,SAASD,EAAK,CACZ,OAAO,KAAK,MAAMA,CAAG,CACtB,CACH,CAEA,MAAME,GAAW,IAAIH,GACrB,OAAO,OAAOG,EAAQ,ECnBf,IAAIC,GAAQ,CACf,WACA,UACA,cACA,YACA,YACA,gBACA,SACA,gBACA,UACA,gBACA,eACA,uBACJ,EACWC,GAAW,CAClB,SAAU,CAAE,EACZ,WAAY,GACZ,oBAAqB,GACrB,UAAW,SACX,SAAU,GACV,cAAe,qBACf,QAAS,OAAO,QAAW,UACvB,OAAO,UAAU,UAAU,QAAQ,MAAM,IAAM,GACnD,eAAgB,SAChB,oBAAqB,GACrB,WAAY,GACZ,cAAe,GACf,YAAa,KACb,WAAY,QACZ,YAAa,GACb,cAAe,EACf,eAAgB,EAChB,QAAS,CAAE,EACX,cAAe,GACf,cAAe,GACf,WAAY,GACZ,aAAc,SAAUC,EAAK,CACzB,OAAO,OAAO,QAAY,KAAe,QAAQ,KAAKA,CAAG,CAC5D,EACD,QAAS,SAAUC,EAAW,CAC1B,IAAIC,EAAO,IAAI,KAAKD,EAAU,QAAS,CAAA,EACvCC,EAAK,SAAS,EAAG,EAAG,EAAG,CAAC,EACxBA,EAAK,QAAQA,EAAK,QAAS,EAAG,GAAMA,EAAK,OAAQ,EAAG,GAAK,CAAE,EAC3D,IAAIC,EAAQ,IAAI,KAAKD,EAAK,cAAe,EAAG,CAAC,EAC7C,MAAQ,GACJ,KAAK,QAAQA,EAAK,QAAO,EAAKC,EAAM,QAAO,GAAM,MAC7C,GACEA,EAAM,SAAW,GAAK,GACxB,CAAC,CACZ,EACD,cAAe,EACf,qBAAsB,CAAE,EACxB,OAAQ,GACR,OAAQ,UACR,gBAAiB,EACjB,KAAM,SACN,kBAAmB,WACnB,UAAW,yOACX,WAAY,GACZ,IAAK,IAAI,KACT,SAAU,CAAE,EACZ,QAAS,CAAE,EACX,YAAa,CAAE,EACf,UAAW,CAAE,EACb,UAAW,CAAE,EACb,cAAe,CAAE,EACjB,OAAQ,CAAE,EACV,cAAe,CAAE,EACjB,QAAS,CAAE,EACX,cAAe,CAAE,EACjB,aAAc,CAAE,EAChB,sBAAuB,CAAE,EACzB,QAAS,CAAE,EACX,SAAU,OACV,gBAAiB,OACjB,UAAW,uOACX,sBAAuB,GACvB,WAAY,EACZ,OAAQ,GACR,UAAW,GACX,YAAa,GACb,KAAM,EACV,EClFWC,GAAU,CACjB,SAAU,CACN,UAAW,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,EAC3D,SAAU,CACN,SACA,SACA,UACA,YACA,WACA,SACA,UACH,CACJ,EACD,OAAQ,CACJ,UAAW,CACP,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACH,EACD,SAAU,CACN,UACA,WACA,QACA,QACA,MACA,OACA,OACA,SACA,YACA,UACA,WACA,UACH,CACJ,EACD,YAAa,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAC5D,eAAgB,EAChB,QAAS,SAAUC,EAAK,CACpB,IAAIC,EAAID,EAAM,IACd,GAAIC,EAAI,GAAKA,EAAI,GACb,MAAO,KACX,OAAQA,EAAI,GAAE,CACV,IAAK,GACD,MAAO,KACX,IAAK,GACD,MAAO,KACX,IAAK,GACD,MAAO,KACX,QACI,MAAO,IACd,CACJ,EACD,eAAgB,OAChB,iBAAkB,KAClB,YAAa,sBACb,YAAa,kBACb,KAAM,CAAC,KAAM,IAAI,EACjB,cAAe,OACf,eAAgB,QAChB,cAAe,OACf,gBAAiB,SACjB,UAAW,EACf,ECtEWC,EAAM,SAAUC,EAAQC,EAAQ,CACvC,OAAIA,IAAW,SAAUA,EAAS,IAC1B,MAAQD,GAAQ,MAAMC,EAAS,EAAE,CAC7C,EACWC,EAAM,SAAUC,EAAM,CAAE,OAAQA,IAAS,GAAO,EAAI,GACxD,SAASC,GAASC,EAAIC,EAAM,CAC/B,IAAIC,EACJ,OAAO,UAAY,CACf,IAAIC,EAAQ,KACRC,EAAO,UACX,aAAaF,CAAC,EACdA,EAAI,WAAW,UAAY,CAAE,OAAOF,EAAG,MAAMG,EAAOC,CAAI,GAAMH,CAAI,CAC1E,CACA,CACO,IAAII,GAAW,SAAUC,EAAK,CACjC,OAAOA,aAAe,MAAQA,EAAM,CAACA,CAAG,CAC5C,EChBO,SAASC,EAAYC,EAAMC,EAAWX,EAAM,CAC/C,GAAIA,IAAS,GACT,OAAOU,EAAK,UAAU,IAAIC,CAAS,EACvCD,EAAK,UAAU,OAAOC,CAAS,CACnC,CACO,SAASC,EAAcC,EAAKF,EAAWG,EAAS,CACnD,IAAIC,EAAI,OAAO,SAAS,cAAcF,CAAG,EACzC,OAAAF,EAAYA,GAAa,GACzBG,EAAUA,GAAW,GACrBC,EAAE,UAAYJ,EACVG,IAAY,SACZC,EAAE,YAAcD,GACbC,CACX,CACO,SAASC,GAAUC,EAAM,CAC5B,KAAOA,EAAK,YACRA,EAAK,YAAYA,EAAK,UAAU,CACxC,CACO,SAASC,GAAWD,EAAME,EAAW,CACxC,GAAIA,EAAUF,CAAI,EACd,OAAOA,EACN,GAAIA,EAAK,WACV,OAAOC,GAAWD,EAAK,WAAYE,CAAS,CAEpD,CACO,SAASC,GAAkBC,EAAgBC,EAAM,CACpD,IAAIC,EAAUX,EAAc,MAAO,iBAAiB,EAAGY,EAAWZ,EAAc,QAAS,YAAcS,CAAc,EAAGI,EAAUb,EAAc,OAAQ,SAAS,EAAGc,EAAYd,EAAc,OAAQ,WAAW,EAQjN,GAPI,UAAU,UAAU,QAAQ,UAAU,IAAM,GAC5CY,EAAS,KAAO,UAGhBA,EAAS,KAAO,OAChBA,EAAS,QAAU,QAEnBF,IAAS,OACT,QAAStC,KAAOsC,EACZE,EAAS,aAAaxC,EAAKsC,EAAKtC,CAAG,CAAC,EAC5C,OAAAuC,EAAQ,YAAYC,CAAQ,EAC5BD,EAAQ,YAAYE,CAAO,EAC3BF,EAAQ,YAAYG,CAAS,EACtBH,CACX,CACO,SAASI,EAAeC,EAAO,CAClC,GAAI,CACA,GAAI,OAAOA,EAAM,cAAiB,WAAY,CAC1C,IAAIC,EAAOD,EAAM,eACjB,OAAOC,EAAK,CAAC,CAChB,CACD,OAAOD,EAAM,MAChB,MACa,CACV,OAAOA,EAAM,MAChB,CACL,CCpDA,IAAIE,GAAY,UAAY,GACjBC,GAAa,SAAUC,EAAaC,EAAWC,EAAQ,CAAE,OAAOA,EAAO,OAAOD,EAAY,YAAc,UAAU,EAAED,CAAW,CAAE,EACjIG,GAAY,CACnB,EAAGL,GACH,EAAG,SAAUM,EAASC,EAAWH,EAAQ,CACrCE,EAAQ,SAASF,EAAO,OAAO,SAAS,QAAQG,CAAS,CAAC,CAC7D,EACD,EAAG,SAAUD,EAASE,EAAM,CACxBF,EAAQ,UAAUA,EAAQ,SAAU,GAAI,GAAK,GAAK,GAAK,WAAWE,CAAI,CAAC,CAC1E,EACD,EAAG,SAAUF,EAASE,EAAM,CACxBF,EAAQ,SAAS,WAAWE,CAAI,CAAC,CACpC,EACD,EAAG,SAAUF,EAASG,EAAK,CACvBH,EAAQ,QAAQ,WAAWG,CAAG,CAAC,CAClC,EACD,EAAG,SAAUH,EAASI,EAAMN,EAAQ,CAChCE,EAAQ,SAAUA,EAAQ,SAAU,EAAG,GACnC,GAAKrC,EAAI,IAAI,OAAOmC,EAAO,KAAK,CAAC,EAAG,GAAG,EAAE,KAAKM,CAAI,CAAC,CAAC,CAC3D,EACD,EAAG,SAAUJ,EAASK,EAAYP,EAAQ,CACtCE,EAAQ,SAASF,EAAO,OAAO,UAAU,QAAQO,CAAU,CAAC,CAC/D,EACD,EAAG,SAAUL,EAASM,EAAS,CAC3BN,EAAQ,WAAW,WAAWM,CAAO,CAAC,CACzC,EACD,EAAG,SAAUC,EAAGC,EAAa,CAAE,OAAO,IAAI,KAAK,WAAWA,CAAW,EAAI,GAAI,CAAI,EACjF,EAAG,SAAUR,EAASS,EAASX,EAAQ,CACnC,IAAIY,EAAa,SAASD,CAAO,EAC7BtD,EAAO,IAAI,KAAK6C,EAAQ,YAAW,EAAI,EAAG,GAAKU,EAAa,GAAK,EAAG,EAAG,EAAG,EAAG,CAAC,EAClF,OAAAvD,EAAK,QAAQA,EAAK,QAAS,EAAGA,EAAK,OAAQ,EAAG2C,EAAO,cAAc,EAC5D3C,CACV,EACD,EAAG,SAAU6C,EAASW,EAAM,CACxBX,EAAQ,YAAY,WAAWW,CAAI,CAAC,CACvC,EACD,EAAG,SAAUJ,EAAGK,EAAS,CAAE,OAAO,IAAI,KAAKA,CAAO,CAAI,EACtD,EAAG,SAAUZ,EAASG,EAAK,CACvBH,EAAQ,QAAQ,WAAWG,CAAG,CAAC,CAClC,EACD,EAAG,SAAUH,EAASE,EAAM,CACxBF,EAAQ,UAAUA,EAAQ,SAAU,GAAI,GAAK,GAAK,GAAK,WAAWE,CAAI,CAAC,CAC1E,EACD,EAAG,SAAUF,EAASa,EAAS,CAC3Bb,EAAQ,WAAW,WAAWa,CAAO,CAAC,CACzC,EACD,EAAG,SAAUb,EAASG,EAAK,CACvBH,EAAQ,QAAQ,WAAWG,CAAG,CAAC,CAClC,EACD,EAAGT,GACH,EAAG,SAAUM,EAASc,EAAO,CACzBd,EAAQ,SAAS,WAAWc,CAAK,EAAI,CAAC,CACzC,EACD,EAAG,SAAUd,EAASc,EAAO,CACzBd,EAAQ,SAAS,WAAWc,CAAK,EAAI,CAAC,CACzC,EACD,EAAG,SAAUd,EAASM,EAAS,CAC3BN,EAAQ,WAAW,WAAWM,CAAO,CAAC,CACzC,EACD,EAAG,SAAUC,EAAGQ,EAAiB,CAC7B,OAAO,IAAI,KAAK,WAAWA,CAAe,CAAC,CAC9C,EACD,EAAGrB,GACH,EAAG,SAAUM,EAASW,EAAM,CACxBX,EAAQ,YAAY,IAAO,WAAWW,CAAI,CAAC,CAC9C,CACL,EACWK,EAAa,CACpB,EAAG,GACH,EAAG,GACH,EAAG,eACH,EAAG,eACH,EAAG,mBACH,EAAG,GACH,EAAG,GACH,EAAG,eACH,EAAG,OACH,EAAG,eACH,EAAG,WACH,EAAG,OACH,EAAG,eACH,EAAG,eACH,EAAG,eACH,EAAG,eACH,EAAG,GACH,EAAG,eACH,EAAG,eACH,EAAG,eACH,EAAG,OACH,EAAG,eACH,EAAG,UACP,EACWC,GAAU,CACjB,EAAG,SAAU9D,EAAM,CAAE,OAAOA,EAAK,YAAa,CAAG,EACjD,EAAG,SAAUA,EAAM2C,EAAQoB,EAAS,CAChC,OAAOpB,EAAO,SAAS,UAAUmB,GAAQ,EAAE9D,EAAM2C,EAAQoB,CAAO,CAAC,CACpE,EACD,EAAG,SAAU/D,EAAM2C,EAAQoB,EAAS,CAChC,OAAOvB,GAAWsB,GAAQ,EAAE9D,EAAM2C,EAAQoB,CAAO,EAAI,EAAG,GAAOpB,CAAM,CACxE,EACD,EAAG,SAAU3C,EAAM2C,EAAQoB,EAAS,CAChC,OAAO1D,EAAIyD,GAAQ,EAAE9D,EAAM2C,EAAQoB,CAAO,CAAC,CAC9C,EACD,EAAG,SAAU/D,EAAM,CAAE,OAAOK,EAAIL,EAAK,SAAU,CAAA,CAAI,EACnD,EAAG,SAAUA,EAAM2C,EAAQ,CACvB,OAAOA,EAAO,UAAY,OACpB3C,EAAK,QAAO,EAAK2C,EAAO,QAAQ3C,EAAK,SAAS,EAC9CA,EAAK,QAAO,CACrB,EACD,EAAG,SAAUA,EAAM2C,EAAQ,CAAE,OAAOA,EAAO,KAAKnC,EAAIR,EAAK,SAAQ,EAAK,EAAE,CAAC,CAAI,EAC7E,EAAG,SAAUA,EAAM2C,EAAQ,CACvB,OAAOH,GAAWxC,EAAK,SAAU,EAAE,GAAM2C,CAAM,CAClD,EACD,EAAG,SAAU3C,EAAM,CAAE,OAAOK,EAAIL,EAAK,WAAY,CAAA,CAAI,EACrD,EAAG,SAAUA,EAAM,CAAE,OAAOA,EAAK,QAAO,EAAK,GAAO,EACpD,EAAG,SAAUA,EAAMoD,EAAGW,EAAS,CAC3B,OAAOA,EAAQ,QAAQ/D,CAAI,CAC9B,EACD,EAAG,SAAUA,EAAM,CAAE,OAAOK,EAAIL,EAAK,YAAW,EAAI,CAAC,CAAI,EACzD,EAAG,SAAUA,EAAM,CAAE,OAAOK,EAAIL,EAAK,QAAS,CAAA,CAAI,EAClD,EAAG,SAAUA,EAAM,CAAE,OAAQA,EAAK,SAAQ,EAAK,GAAKA,EAAK,SAAQ,EAAK,GAAK,EAAM,EACjF,EAAG,SAAUA,EAAM,CAAE,OAAOK,EAAIL,EAAK,WAAY,CAAA,CAAI,EACrD,EAAG,SAAUA,EAAM,CAAE,OAAOA,EAAK,QAAS,CAAG,EAC7C,EAAG,SAAUA,EAAM2C,EAAQ,CACvB,OAAOA,EAAO,SAAS,SAAS3C,EAAK,OAAQ,CAAA,CAChD,EACD,EAAG,SAAUA,EAAM,CAAE,OAAOK,EAAIL,EAAK,SAAQ,EAAK,CAAC,CAAI,EACvD,EAAG,SAAUA,EAAM,CAAE,OAAOA,EAAK,SAAQ,EAAK,CAAI,EAClD,EAAG,SAAUA,EAAM,CAAE,OAAOA,EAAK,WAAY,CAAG,EAChD,EAAG,SAAUA,EAAM,CAAE,OAAOA,EAAK,QAAS,CAAG,EAC7C,EAAG,SAAUA,EAAM,CAAE,OAAOA,EAAK,OAAQ,CAAG,EAC5C,EAAG,SAAUA,EAAM,CAAE,OAAO,OAAOA,EAAK,YAAW,CAAE,EAAE,UAAU,CAAC,CAAI,CAC1E,EClIWgE,GAAsB,SAAUC,EAAI,CAC3C,IAAIC,EAAKD,EAAG,OAAQE,EAASD,IAAO,OAASrE,GAAWqE,EAAIE,EAAKH,EAAG,KAAMI,EAAOD,IAAO,OAASlE,GAAUkE,EAAIE,EAAKL,EAAG,SAAUM,EAAWD,IAAO,OAAS,GAAQA,EACpK,OAAO,SAAUzB,EAAS2B,EAAMC,EAAgB,CAC5C,IAAI9B,EAAS8B,GAAkBJ,EAC/B,OAAIF,EAAO,aAAe,QAAa,CAACI,EAC7BJ,EAAO,WAAWtB,EAAS2B,EAAM7B,CAAM,EAE3C6B,EACF,MAAM,EAAE,EACR,IAAI,SAAUE,EAAGC,EAAGC,EAAK,CAC1B,OAAOd,GAAQY,CAAC,GAAKE,EAAID,EAAI,CAAC,IAAM,KAC9Bb,GAAQY,CAAC,EAAE7B,EAASF,EAAQwB,CAAM,EAClCO,IAAM,KACFA,EACA,EACtB,CAAS,EACI,KAAK,EAAE,CACpB,CACA,EACWG,GAAmB,SAAUZ,EAAI,CACxC,IAAIC,EAAKD,EAAG,OAAQE,EAASD,IAAO,OAASrE,GAAWqE,EAAIE,EAAKH,EAAG,KAAMI,EAAOD,IAAO,OAASlE,GAAUkE,EAC3G,OAAO,SAAUpE,EAAM8E,EAAaC,EAAUC,EAAc,CACxD,GAAI,EAAAhF,IAAS,GAAK,CAACA,GAEnB,KAAI2C,EAASqC,GAAgBX,EACzBY,EACAC,EAAWlF,EACf,GAAIA,aAAgB,KAChBiF,EAAa,IAAI,KAAKjF,EAAK,QAAS,CAAA,UAC/B,OAAOA,GAAS,UACrBA,EAAK,UAAY,OACjBiF,EAAa,IAAI,KAAKjF,CAAI,UACrB,OAAOA,GAAS,SAAU,CAC/B,IAAImF,EAASL,IAAgBX,GAAUtE,IAAU,WAC7CuF,EAAU,OAAOpF,CAAI,EAAE,KAAI,EAC/B,GAAIoF,IAAY,QACZH,EAAa,IAAI,KACjBF,EAAW,WAENZ,GAAUA,EAAO,UACtBc,EAAad,EAAO,UAAUnE,EAAMmF,CAAM,UAErC,KAAK,KAAKC,CAAO,GACtB,OAAO,KAAKA,CAAO,EACnBH,EAAa,IAAI,KAAKjF,CAAI,MAEzB,CAED,QADIqF,GAAU,OAAQC,EAAM,CAAA,EACnBX,EAAI,EAAGY,GAAa,EAAGC,EAAW,GAAIb,EAAIQ,EAAO,OAAQR,IAAK,CACnE,IAAIc,EAAQN,EAAOR,CAAC,EAChBe,EAAcD,IAAU,KACxBE,GAAUR,EAAOR,EAAI,CAAC,IAAM,MAAQe,EACxC,GAAI7B,EAAW4B,CAAK,GAAK,CAACE,GAAS,CAC/BH,GAAY3B,EAAW4B,CAAK,EAC5B,IAAIG,EAAQ,IAAI,OAAOJ,CAAQ,EAAE,KAAKxF,CAAI,EACtC4F,IAAUP,GAAU,KACpBC,EAAIG,IAAU,IAAM,OAAS,SAAS,EAAE,CACpC,GAAI7C,GAAU6C,CAAK,EACnB,IAAKG,EAAM,EAAEL,EAAU,CACvD,CAA6B,CAER,MACSG,IACNF,GAAY,IACnB,CACDP,EACI,CAACd,GAAU,CAACA,EAAO,WACb,IAAI,KAAK,IAAI,KAAM,EAAC,YAAa,EAAE,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EACnD,IAAI,KAAK,IAAI,KAAI,EAAG,SAAS,EAAG,EAAG,EAAG,CAAC,CAAC,EAClDmB,EAAI,QAAQ,SAAUrB,EAAI,CACtB,IAAItD,EAAKsD,EAAG,GAAI4B,GAAM5B,EAAG,IACzB,OAAQgB,EAAatE,EAAGsE,EAAYY,GAAKlD,CAAM,GAAKsC,CACxE,CAAiB,EACDA,EAAaI,GAAUJ,EAAa,MACvC,CACJ,CACD,GAAI,EAAEA,aAAsB,MAAQ,CAAC,MAAMA,EAAW,QAAS,CAAA,GAAI,CAC/Dd,EAAO,aAAa,IAAI,MAAM,0BAA4Be,CAAQ,CAAC,EACnE,MACH,CACD,OAAIH,IAAa,IACbE,EAAW,SAAS,EAAG,EAAG,EAAG,CAAC,EAC3BA,EACf,CACA,EACO,SAASa,EAAaC,EAAOC,EAAOjB,EAAU,CAEjD,OADIA,IAAa,SAAUA,EAAW,IAClCA,IAAa,GACL,IAAI,KAAKgB,EAAM,QAAS,CAAA,EAAE,SAAS,EAAG,EAAG,EAAG,CAAC,EACjD,IAAI,KAAKC,EAAM,SAAS,EAAE,SAAS,EAAG,EAAG,EAAG,CAAC,EAE9CD,EAAM,QAAO,EAAKC,EAAM,QAAO,CAC1C,CAOO,IAAIC,GAAY,SAAUC,EAAIC,EAAKC,EAAK,CAC3C,OAAOF,EAAK,KAAK,IAAIC,EAAKC,CAAG,GAAKF,EAAK,KAAK,IAAIC,EAAKC,CAAG,CAC5D,EACWC,GAAgC,SAAUC,EAAO5C,EAASP,EAAS,CAC1E,OAAOmD,EAAQ,KAAO5C,EAAU,GAAKP,CACzC,EACWoD,GAAe,SAAUC,EAAsB,CACtD,IAAIF,EAAQ,KAAK,MAAME,EAAuB,IAAI,EAAG9C,GAAW8C,EAAuBF,EAAQ,MAAQ,GACvG,MAAO,CAACA,EAAO5C,EAAS8C,EAAuBF,EAAQ,KAAO5C,EAAU,EAAE,CAC9E,EACW+C,GAAW,CAClB,IAAK,KACT,EACO,SAASC,GAAgBvC,EAAQ,CACpC,IAAImC,EAAQnC,EAAO,YACfT,EAAUS,EAAO,cACjBhB,EAAUgB,EAAO,eACrB,GAAIA,EAAO,UAAY,OAAW,CAC9B,IAAIwC,EAAUxC,EAAO,QAAQ,SAAQ,EACjCyC,EAAazC,EAAO,QAAQ,WAAU,EACtC0C,EAAa1C,EAAO,QAAQ,WAAU,EACtCmC,EAAQK,IACRL,EAAQK,GAERL,IAAUK,GAAWjD,EAAUkD,IAC/BlD,EAAUkD,GAEVN,IAAUK,GAAWjD,IAAYkD,GAAczD,EAAU0D,IACzD1D,EAAUgB,EAAO,QAAQ,aAChC,CACD,GAAIA,EAAO,UAAY,OAAW,CAC9B,IAAI2C,EAAQ3C,EAAO,QAAQ,SAAQ,EAC/B4C,EAAa5C,EAAO,QAAQ,WAAU,EAC1CmC,EAAQ,KAAK,IAAIA,EAAOQ,CAAK,EACzBR,IAAUQ,IACVpD,EAAU,KAAK,IAAIqD,EAAYrD,CAAO,GACtC4C,IAAUQ,GAASpD,IAAYqD,IAC/B5D,EAAUgB,EAAO,QAAQ,aAChC,CACD,MAAO,CAAE,MAAOmC,EAAO,QAAS5C,EAAS,QAASP,EACtD,CC7II,OAAO,OAAO,QAAW,aACzB,OAAO,OAAS,SAAU6D,EAAQ,CAE9B,QADIjG,EAAO,CAAA,EACFkG,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACpClG,EAAKkG,EAAK,CAAC,EAAI,UAAUA,CAAE,EAE/B,GAAI,CAACD,EACD,MAAM,UAAU,4CAA4C,EAOhE,QALIE,EAAU,SAAUC,EAAQ,CACxBA,GACA,OAAO,KAAKA,CAAM,EAAE,QAAQ,SAAU1H,EAAK,CAAE,OAAQuH,EAAOvH,CAAG,EAAI0H,EAAO1H,CAAG,CAAK,CAAA,CAElG,EACiBwE,EAAK,EAAGmD,EAASrG,EAAMkD,EAAKmD,EAAO,OAAQnD,IAAM,CACtD,IAAIkD,EAASC,EAAOnD,CAAE,EACtBiD,EAAQC,CAAM,CACjB,CACD,OAAOH,CACf,GCpBA,IAAIK,EAAYC,YAAQA,WAAK,UAAa,UAAY,CAClD,OAAAD,EAAW,OAAO,QAAU,SAAS,EAAG,CACpC,QAASjH,EAAGuE,EAAI,EAAG4C,EAAI,UAAU,OAAQ5C,EAAI4C,EAAG5C,IAAK,CACjDvE,EAAI,UAAUuE,CAAC,EACf,QAAS6C,KAAKpH,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGoH,CAAC,IAC1D,EAAEA,CAAC,EAAIpH,EAAEoH,CAAC,EACjB,CACD,OAAO,CACf,EACWH,EAAS,MAAM,KAAM,SAAS,CACzC,EACII,GAAkBH,YAAQA,WAAK,gBAAmB,UAAY,CAC9D,QAASlH,EAAI,EAAGuE,EAAI,EAAG+C,EAAK,UAAU,OAAQ/C,EAAI+C,EAAI/C,IAAKvE,GAAK,UAAUuE,CAAC,EAAE,OAC7E,QAAS,EAAI,MAAMvE,CAAC,EAAGuH,EAAI,EAAGhD,EAAI,EAAGA,EAAI+C,EAAI/C,IACzC,QAASiD,EAAI,UAAUjD,CAAC,EAAGkD,EAAI,EAAGC,EAAKF,EAAE,OAAQC,EAAIC,EAAID,IAAKF,IAC1D,EAAEA,CAAC,EAAIC,EAAEC,CAAC,EAClB,OAAO,CACX,EAQIE,GAAsB,IAC1B,SAASC,GAAkBC,EAASC,EAAgB,CAChD,IAAIC,EAAO,CACP,OAAQd,EAASA,EAAS,CAAA,EAAIe,EAAc,EAAGC,EAAU,aAAa,EACtE,KAAMC,EACd,EACIH,EAAK,UAAYtD,GAAiB,CAAE,OAAQsD,EAAK,OAAQ,KAAMA,EAAK,IAAI,CAAE,EAC1EA,EAAK,UAAY,GACjBA,EAAK,eAAiB,GACtBA,EAAK,cAAgB,GACrBA,EAAK,MAAQI,EACbJ,EAAK,kBAAoBK,EACzBL,EAAK,kBAAoBM,GACzBN,EAAK,YAAcO,GACnBP,EAAK,WAAaQ,GAClBR,EAAK,MAAQS,GACbT,EAAK,MAAQU,GACbV,EAAK,YAAcW,GACnBX,EAAK,eAAiB9G,EACtB8G,EAAK,UAAYY,EACjBZ,EAAK,QAAUa,GACfb,EAAK,UAAYc,EACjBd,EAAK,WAAae,EAClBf,EAAK,YAAcgB,EACnBhB,EAAK,KAAOiB,GACZjB,EAAK,OAASkB,GACdlB,EAAK,IAAMmB,GACXnB,EAAK,QAAUoB,GACfpB,EAAK,OAASqB,GACd,SAASC,GAAuB,CAC5BtB,EAAK,MAAQ,CACT,eAAgB,SAAUxE,EAAO+F,EAAI,CAGjC,OAFI/F,IAAU,SAAUA,EAAQwE,EAAK,cACjCuB,IAAO,SAAUA,EAAKvB,EAAK,aAC3BxE,IAAU,IAAO+F,EAAK,IAAM,GAAKA,EAAK,MAAQ,GAAMA,EAAK,MAAQ,GAC1D,GACJvB,EAAK,KAAK,YAAYxE,CAAK,CACrC,CACb,CACK,CACD,SAASgG,GAAO,CACZxB,EAAK,QAAUA,EAAK,MAAQF,EAC5BE,EAAK,OAAS,GACdyB,KACAC,KACAC,KACAC,KACAN,IACKtB,EAAK,UACN6B,KACJC,MACI9B,EAAK,cAAc,QAAUA,EAAK,OAAO,cACrCA,EAAK,OAAO,YACZK,EAAiBL,EAAK,OAAO,WAAaA,EAAK,sBAAwB,MAAS,EAEpFgB,EAAY,EAAK,GAErBe,IACA,IAAIC,EAAW,iCAAiC,KAAK,UAAU,SAAS,EACpE,CAAChC,EAAK,UAAYgC,GAClB1B,KAEJ2B,EAAa,SAAS,CACzB,CACD,SAASC,GAA0B,CAC/B,IAAIpG,EACJ,QAAUA,EAAKkE,EAAK,qBAAuB,MAAQlE,IAAO,OAAS,OAASA,EAAG,YAAa,GACvF,eAAiB,SAAS,aAClC,CACD,SAASqG,EAAe3J,EAAI,CACxB,OAAOA,EAAG,KAAKwH,CAAI,CACtB,CACD,SAAS+B,GAAmB,CACxB,IAAI/F,EAASgE,EAAK,OACdhE,EAAO,cAAgB,IAASA,EAAO,aAAe,GAGjDA,EAAO,aAAe,IAC3B,OAAO,sBAAsB,UAAY,CAKrC,GAJIgE,EAAK,oBAAsB,SAC3BA,EAAK,kBAAkB,MAAM,WAAa,SAC1CA,EAAK,kBAAkB,MAAM,QAAU,SAEvCA,EAAK,gBAAkB,OAAW,CAClC,IAAIoC,GAAapC,EAAK,KAAK,YAAc,GAAKhE,EAAO,WACrDgE,EAAK,cAAc,MAAM,MAAQoC,EAAY,KAC7CpC,EAAK,kBAAkB,MAAM,MACzBoC,GACKpC,EAAK,cAAgB,OAChBA,EAAK,YAAY,YACjB,GACN,KACRA,EAAK,kBAAkB,MAAM,eAAe,YAAY,EACxDA,EAAK,kBAAkB,MAAM,eAAe,SAAS,CACxD,CACjB,CAAa,CAER,CACD,SAASqC,EAAWhJ,EAAG,CACnB,GAAI2G,EAAK,cAAc,SAAW,EAAG,CACjC,IAAIsC,EAActC,EAAK,OAAO,UAAY,QACtCrC,EAAa,IAAI,KAAQqC,EAAK,OAAO,OAAO,GAAK,EAC/C,IAAI,KACJ,IAAI,KAAKA,EAAK,OAAO,QAAQ,QAAS,CAAA,EACxCtI,EAAW6G,GAAgByB,EAAK,MAAM,EAC1CsC,EAAY,SAAS5K,EAAS,MAAOA,EAAS,QAASA,EAAS,QAAS4K,EAAY,gBAAiB,CAAA,EACtGtC,EAAK,cAAgB,CAACsC,CAAW,EACjCtC,EAAK,sBAAwBsC,CAChC,CACGjJ,IAAM,QAAaA,EAAE,OAAS,QAC9BkJ,GAAYlJ,CAAC,EAEjB,IAAImJ,EAAYxC,EAAK,OAAO,MAC5ByC,IACAzB,IACIhB,EAAK,OAAO,QAAUwC,GACtBxC,EAAK,iBAAgB,CAE5B,CACD,SAAS0C,EAAc9H,EAAME,EAAM,CAC/B,OAAQF,EAAO,GAAM,GAAKvC,EAAIyC,IAASkF,EAAK,KAAK,KAAK,CAAC,CAAC,CAC3D,CACD,SAAS2C,EAAc/H,EAAM,CACzB,OAAQA,EAAO,GAAE,CACb,IAAK,GACL,IAAK,IACD,MAAO,IACX,QACI,OAAOA,EAAO,EACrB,CACJ,CACD,SAAS6H,GAAqB,CAC1B,GAAI,EAAAzC,EAAK,cAAgB,QAAaA,EAAK,gBAAkB,QAE7D,KAAI7B,GAAS,SAAS6B,EAAK,YAAY,MAAM,MAAM,EAAE,EAAG,EAAE,GAAK,GAAK,GAAIzE,GAAW,SAASyE,EAAK,cAAc,MAAO,EAAE,GAAK,GAAK,GAAIhF,EAAUgF,EAAK,gBAAkB,QAChK,SAASA,EAAK,cAAc,MAAO,EAAE,GAAK,GAAK,GAChD,EACFA,EAAK,OAAS,SACd7B,EAAQuE,EAAcvE,EAAO6B,EAAK,KAAK,WAAW,GAEtD,IAAI4C,EAAgB5C,EAAK,OAAO,UAAY,QACvCA,EAAK,OAAO,SACTA,EAAK,gBACLA,EAAK,uBACLrC,EAAaqC,EAAK,sBAAuBA,EAAK,OAAO,QAAS,EAAI,IAC9D,EACR6C,EAAgB7C,EAAK,OAAO,UAAY,QACvCA,EAAK,OAAO,SACTA,EAAK,gBACLA,EAAK,uBACLrC,EAAaqC,EAAK,sBAAuBA,EAAK,OAAO,QAAS,EAAI,IAC9D,EACZ,GAAIA,EAAK,OAAO,UAAY,QACxBA,EAAK,OAAO,UAAY,QACxBA,EAAK,OAAO,QAAUA,EAAK,OAAO,QAAS,CAC3C,IAAI8C,EAAW5E,GAA8B8B,EAAK,OAAO,QAAQ,SAAQ,EAAIA,EAAK,OAAO,QAAQ,WAAU,EAAIA,EAAK,OAAO,QAAQ,WAAU,CAAE,EAC3I+C,EAAW7E,GAA8B8B,EAAK,OAAO,QAAQ,SAAQ,EAAIA,EAAK,OAAO,QAAQ,WAAU,EAAIA,EAAK,OAAO,QAAQ,WAAU,CAAE,EAC3IgD,EAAc9E,GAA8BC,EAAO5C,EAASP,CAAO,EACvE,GAAIgI,EAAcD,GAAYC,EAAcF,EAAU,CAClD,IAAIG,EAAS7E,GAAa0E,CAAQ,EAClC3E,EAAQ8E,EAAO,CAAC,EAChB1H,EAAU0H,EAAO,CAAC,EAClBjI,EAAUiI,EAAO,CAAC,CACrB,CACJ,KACI,CACD,GAAIJ,EAAe,CACf,IAAIK,EAAUlD,EAAK,OAAO,UAAY,OAChCA,EAAK,OAAO,QACZA,EAAK,OAAO,QAClB7B,EAAQ,KAAK,IAAIA,EAAO+E,EAAQ,SAAQ,CAAE,EACtC/E,IAAU+E,EAAQ,SAAU,IAC5B3H,EAAU,KAAK,IAAIA,EAAS2H,EAAQ,WAAU,CAAE,GAChD3H,IAAY2H,EAAQ,WAAY,IAChClI,EAAU,KAAK,IAAIA,EAASkI,EAAQ,WAAU,CAAE,EACvD,CACD,GAAIN,EAAe,CACf,IAAIO,EAAUnD,EAAK,OAAO,UAAY,OAChCA,EAAK,OAAO,QACZA,EAAK,OAAO,QAClB7B,EAAQ,KAAK,IAAIA,EAAOgF,EAAQ,SAAQ,CAAE,EACtChF,IAAUgF,EAAQ,SAAU,GAAI5H,EAAU4H,EAAQ,WAAY,IAC9D5H,EAAU4H,EAAQ,cAClB5H,IAAY4H,EAAQ,WAAY,IAChCnI,EAAU,KAAK,IAAIA,EAASmI,EAAQ,WAAU,CAAE,EACvD,CACJ,CACDC,EAASjF,EAAO5C,EAASP,CAAO,EACnC,CACD,SAASqF,EAAiB3F,EAAS,CAC/B,IAAI7C,EAAO6C,GAAWsF,EAAK,sBACvBnI,GAAQA,aAAgB,MACxBuL,EAASvL,EAAK,WAAYA,EAAK,aAAcA,EAAK,WAAU,CAAE,CAErE,CACD,SAASuL,EAASjF,EAAO5C,EAASP,EAAS,CACnCgF,EAAK,wBAA0B,QAC/BA,EAAK,sBAAsB,SAAS7B,EAAQ,GAAI5C,EAASP,GAAW,EAAG,CAAC,EAExE,GAACgF,EAAK,aAAe,CAACA,EAAK,eAAiBA,EAAK,YAErDA,EAAK,YAAY,MAAQ9H,EAAK8H,EAAK,OAAO,UAEpC7B,GADE,GAAKA,GAAS,GAAM,GAAK9F,EAAI8F,EAAQ,KAAO,CAAC,CAC1C,EACX6B,EAAK,cAAc,MAAQ9H,EAAIqD,CAAO,EAClCyE,EAAK,OAAS,SACdA,EAAK,KAAK,YAAcA,EAAK,KAAK,KAAK3H,EAAI8F,GAAS,EAAE,CAAC,GACvD6B,EAAK,gBAAkB,SACvBA,EAAK,cAAc,MAAQ9H,EAAI8C,CAAO,GAC7C,CACD,SAASqI,GAAYnJ,EAAO,CACxB,IAAIoJ,EAAcrJ,EAAeC,CAAK,EAClCmB,EAAO,SAASiI,EAAY,KAAK,GAAKpJ,EAAM,OAAS,IACrDmB,EAAO,IAAO,GACbnB,EAAM,MAAQ,SAAW,CAAC,QAAQ,KAAKmB,EAAK,SAAU,CAAA,IACvDmF,GAAWnF,CAAI,CAEtB,CACD,SAAS+E,EAAKN,EAAS5F,EAAOqJ,EAAS3H,EAAS,CAC5C,GAAI1B,aAAiB,MACjB,OAAOA,EAAM,QAAQ,SAAUsJ,EAAI,CAAE,OAAOpD,EAAKN,EAAS0D,EAAID,EAAS3H,CAAO,CAAI,CAAA,EACtF,GAAIkE,aAAmB,MACnB,OAAOA,EAAQ,QAAQ,SAAU2D,EAAI,CAAE,OAAOrD,EAAKqD,EAAIvJ,EAAOqJ,EAAS3H,CAAO,CAAI,CAAA,EACtFkE,EAAQ,iBAAiB5F,EAAOqJ,EAAS3H,CAAO,EAChDoE,EAAK,UAAU,KAAK,CAChB,OAAQ,UAAY,CAAE,OAAOF,EAAQ,oBAAoB5F,EAAOqJ,EAAS3H,CAAO,CAAI,CAChG,CAAS,CACJ,CACD,SAAS8H,GAAgB,CACrBzB,EAAa,UAAU,CAC1B,CACD,SAASH,IAAa,CAQlB,GAPI9B,EAAK,OAAO,MACZ,CAAC,OAAQ,QAAS,SAAU,OAAO,EAAE,QAAQ,SAAU2D,EAAK,CACxD,MAAM,UAAU,QAAQ,KAAK3D,EAAK,QAAQ,iBAAiB,SAAW2D,EAAM,GAAG,EAAG,SAAUF,EAAI,CAC5F,OAAOrD,EAAKqD,EAAI,QAASzD,EAAK2D,CAAG,CAAC,CACtD,CAAiB,CACjB,CAAa,EAED3D,EAAK,SAAU,CACf4D,KACA,MACH,CACD,IAAIC,EAAkBtL,GAASuL,GAAU,EAAE,EA2B3C,GA1BA9D,EAAK,iBAAmBzH,GAASmL,EAAe9D,EAAmB,EAC/DI,EAAK,eAAiB,CAAC,oBAAoB,KAAK,UAAU,SAAS,GACnEI,EAAKJ,EAAK,cAAe,YAAa,SAAU3G,EAAG,CAC3C2G,EAAK,OAAO,OAAS,SACrBW,GAAY1G,EAAeZ,CAAC,CAAC,CACjD,CAAa,EACL+G,EAAKJ,EAAK,OAAQ,UAAW+D,EAAS,EAClC/D,EAAK,oBAAsB,QAC3BI,EAAKJ,EAAK,kBAAmB,UAAW+D,EAAS,EAEjD,CAAC/D,EAAK,OAAO,QAAU,CAACA,EAAK,OAAO,QACpCI,EAAK,OAAQ,SAAUyD,CAAe,EACtC,OAAO,eAAiB,OACxBzD,EAAK,OAAO,SAAU,aAAc4D,EAAa,EAEjD5D,EAAK,OAAO,SAAU,YAAa4D,EAAa,EACpD5D,EAAK,OAAO,SAAU,QAAS4D,GAAe,CAAE,QAAS,EAAI,CAAE,EAC3DhE,EAAK,OAAO,aAAe,KAC3BI,EAAKJ,EAAK,OAAQ,QAASA,EAAK,IAAI,EACpCI,EAAKJ,EAAK,OAAQ,QAASA,EAAK,IAAI,GAEpCA,EAAK,gBAAkB,SACvBI,EAAKJ,EAAK,SAAU,QAASiE,EAAe,EAC5C7D,EAAKJ,EAAK,SAAU,CAAC,QAAS,WAAW,EAAGqD,EAAW,EACvDjD,EAAKJ,EAAK,cAAe,QAASkE,EAAU,GAE5ClE,EAAK,gBAAkB,QACvBA,EAAK,gBAAkB,QACvBA,EAAK,cAAgB,OAAW,CAChC,IAAImE,EAAU,SAAU9K,EAAG,CACvB,OAAOY,EAAeZ,CAAC,EAAE,QACzC,EACY+G,EAAKJ,EAAK,cAAe,CAAC,WAAW,EAAGqC,CAAU,EAClDjC,EAAKJ,EAAK,cAAe,OAAQqC,EAAY,CAAE,QAAS,EAAI,CAAE,EAC9DjC,EAAKJ,EAAK,cAAe,QAASoE,CAAa,EAC/ChE,EAAK,CAACJ,EAAK,YAAaA,EAAK,aAAa,EAAG,CAAC,QAAS,OAAO,EAAGmE,CAAO,EACpEnE,EAAK,gBAAkB,QACvBI,EAAKJ,EAAK,cAAe,QAAS,UAAY,CAAE,OAAOA,EAAK,eAAiBA,EAAK,cAAc,OAAQ,CAAG,CAAA,EAC3GA,EAAK,OAAS,QACdI,EAAKJ,EAAK,KAAM,QAAS,SAAU3G,EAAG,CAClCgJ,EAAWhJ,CAAC,CAChC,CAAiB,CAER,CACG2G,EAAK,OAAO,YACZI,EAAKJ,EAAK,OAAQ,OAAQqE,EAAM,CAEvC,CACD,SAAStD,EAAWuD,EAAUZ,EAAe,CACzC,IAAIa,EAASD,IAAa,OACpBtE,EAAK,UAAUsE,CAAQ,EACvBtE,EAAK,wBACFA,EAAK,OAAO,SAAWA,EAAK,OAAO,QAAUA,EAAK,IAC7CA,EAAK,OAAO,QACZA,EAAK,OAAO,SAAWA,EAAK,OAAO,QAAUA,EAAK,IAC9CA,EAAK,OAAO,QACZA,EAAK,KACnBwE,EAAUxE,EAAK,YACfyE,EAAWzE,EAAK,aACpB,GAAI,CACIuE,IAAW,SACXvE,EAAK,YAAcuE,EAAO,cAC1BvE,EAAK,aAAeuE,EAAO,WAElC,OACMlL,EAAG,CACNA,EAAE,QAAU,0BAA4BkL,EACxCvE,EAAK,OAAO,aAAa3G,CAAC,CAC7B,CACGqK,GAAiB1D,EAAK,cAAgBwE,IACtCvC,EAAa,cAAc,EAC3ByC,KAEAhB,IACC1D,EAAK,cAAgBwE,GAAWxE,EAAK,eAAiByE,IACvDxC,EAAa,eAAe,EAEhCjC,EAAK,OAAM,CACd,CACD,SAASoE,EAAc/K,EAAG,CACtB,IAAIiK,EAAcrJ,EAAeZ,CAAC,EAC9B,CAACiK,EAAY,UAAU,QAAQ,OAAO,GACtCqB,EAAkBtL,EAAGiK,EAAY,UAAU,SAAS,SAAS,EAAI,EAAI,EAAE,CAC9E,CACD,SAASqB,EAAkBtL,EAAGuL,EAAOC,EAAW,CAC5C,IAAIhG,EAASxF,GAAKY,EAAeZ,CAAC,EAC9ByL,EAAQD,GACPhG,GAAUA,EAAO,YAAcA,EAAO,WAAW,WAClD3E,EAAQ6K,GAAY,WAAW,EACnC7K,EAAM,MAAQ0K,EACdE,GAASA,EAAM,cAAc5K,CAAK,CACrC,CACD,SAAS2H,IAAQ,CACb,IAAImD,EAAW,OAAO,SAAS,uBAAsB,EAGrD,GAFAhF,EAAK,kBAAoB9G,EAAc,MAAO,oBAAoB,EAClE8G,EAAK,kBAAkB,SAAW,GAC9B,CAACA,EAAK,OAAO,WAAY,CAGzB,GAFAgF,EAAS,YAAYC,GAAa,CAAE,EACpCjF,EAAK,eAAiB9G,EAAc,MAAO,0BAA0B,EACjE8G,EAAK,OAAO,YAAa,CACzB,IAAIlE,EAAKoJ,GAAU,EAAIC,EAAcrJ,EAAG,YAAasJ,EAActJ,EAAG,YACtEkE,EAAK,eAAe,YAAYmF,CAAW,EAC3CnF,EAAK,YAAcoF,EACnBpF,EAAK,YAAcmF,CACtB,CACDnF,EAAK,WAAa9G,EAAc,MAAO,sBAAsB,EAC7D8G,EAAK,WAAW,YAAYqF,GAAe,CAAA,EACtCrF,EAAK,gBACNA,EAAK,cAAgB9G,EAAc,MAAO,gBAAgB,EAC1D8G,EAAK,cAAc,SAAW,IAElCsF,KACAtF,EAAK,WAAW,YAAYA,EAAK,aAAa,EAC9CA,EAAK,eAAe,YAAYA,EAAK,UAAU,EAC/CgF,EAAS,YAAYhF,EAAK,cAAc,CAC3C,CACGA,EAAK,OAAO,YACZgF,EAAS,YAAYO,GAAS,CAAE,EAEpCxM,EAAYiH,EAAK,kBAAmB,YAAaA,EAAK,OAAO,OAAS,OAAO,EAC7EjH,EAAYiH,EAAK,kBAAmB,UAAWA,EAAK,OAAO,UAAY,EAAI,EAC3EjH,EAAYiH,EAAK,kBAAmB,aAAcA,EAAK,OAAO,WAAa,CAAC,EAC5EA,EAAK,kBAAkB,YAAYgF,CAAQ,EAC3C,IAAIQ,EAAexF,EAAK,OAAO,WAAa,QACxCA,EAAK,OAAO,SAAS,WAAa,OACtC,IAAIA,EAAK,OAAO,QAAUA,EAAK,OAAO,UAClCA,EAAK,kBAAkB,UAAU,IAAIA,EAAK,OAAO,OAAS,SAAW,QAAQ,EACzEA,EAAK,OAAO,SACR,CAACwF,GAAgBxF,EAAK,QAAQ,WAC9BA,EAAK,QAAQ,WAAW,aAAaA,EAAK,kBAAmBA,EAAK,OAAO,WAAW,EAC/EA,EAAK,OAAO,WAAa,QAC9BA,EAAK,OAAO,SAAS,YAAYA,EAAK,iBAAiB,GAE3DA,EAAK,OAAO,QAAQ,CACpB,IAAInG,EAAUX,EAAc,MAAO,mBAAmB,EAClD8G,EAAK,QAAQ,YACbA,EAAK,QAAQ,WAAW,aAAanG,EAASmG,EAAK,OAAO,EAC9DnG,EAAQ,YAAYmG,EAAK,OAAO,EAC5BA,EAAK,UACLnG,EAAQ,YAAYmG,EAAK,QAAQ,EACrCnG,EAAQ,YAAYmG,EAAK,iBAAiB,CAC7C,CAED,CAACA,EAAK,OAAO,QAAU,CAACA,EAAK,OAAO,SACnCA,EAAK,OAAO,WAAa,OACpBA,EAAK,OAAO,SACZ,OAAO,SAAS,MAAM,YAAYA,EAAK,iBAAiB,CACrE,CACD,SAASY,EAAU3H,EAAWpB,EAAM4N,EAAYjJ,EAAG,CAC/C,IAAIkJ,EAAgB5E,EAAUjJ,EAAM,EAAI,EAAG8N,EAAazM,EAAc,OAAQD,EAAWpB,EAAK,QAAO,EAAG,SAAU,CAAA,EAClH,OAAA8N,EAAW,QAAU9N,EACrB8N,EAAW,GAAKnJ,EAChBmJ,EAAW,aAAa,aAAc3F,EAAK,WAAWnI,EAAMmI,EAAK,OAAO,cAAc,CAAC,EACnF/G,EAAU,QAAQ,QAAQ,IAAM,IAChC0E,EAAa9F,EAAMmI,EAAK,GAAG,IAAM,IACjCA,EAAK,cAAgB2F,EACrBA,EAAW,UAAU,IAAI,OAAO,EAChCA,EAAW,aAAa,eAAgB,MAAM,GAE9CD,GACAC,EAAW,SAAW,GAClBC,GAAe/N,CAAI,IACnB8N,EAAW,UAAU,IAAI,UAAU,EACnC3F,EAAK,iBAAmB2F,EACpB3F,EAAK,OAAO,OAAS,UACrBjH,EAAY4M,EAAY,aAAc3F,EAAK,cAAc,CAAC,GACtDrC,EAAa9F,EAAMmI,EAAK,cAAc,CAAC,EAAG,EAAI,IAAM,CAAC,EACzDjH,EAAY4M,EAAY,WAAY3F,EAAK,cAAc,CAAC,GACpDrC,EAAa9F,EAAMmI,EAAK,cAAc,CAAC,EAAG,EAAI,IAAM,CAAC,EACrD/G,IAAc,gBACd0M,EAAW,UAAU,IAAI,SAAS,KAK9CA,EAAW,UAAU,IAAI,oBAAoB,EAE7C3F,EAAK,OAAO,OAAS,SACjB6F,GAAchO,CAAI,GAAK,CAAC+N,GAAe/N,CAAI,GAC3C8N,EAAW,UAAU,IAAI,SAAS,EAEtC3F,EAAK,aACLA,EAAK,OAAO,aAAe,GAC3B/G,IAAc,gBACduD,EAAI,IAAM,GACVwD,EAAK,YAAY,mBAAmB,YAAa,+BAAiCA,EAAK,OAAO,QAAQnI,CAAI,EAAI,SAAS,EAE3HoK,EAAa,cAAe0D,CAAU,EAC/BA,CACV,CACD,SAASG,EAAeC,EAAY,CAChCA,EAAW,MAAK,EACZ/F,EAAK,OAAO,OAAS,SACrBW,GAAYoF,CAAU,CAC7B,CACD,SAASC,EAAqBpB,EAAO,CAGjC,QAFIqB,EAAarB,EAAQ,EAAI,EAAI5E,EAAK,OAAO,WAAa,EACtDkG,EAAWtB,EAAQ,EAAI5E,EAAK,OAAO,WAAa,GAC3CmG,EAAIF,EAAYE,GAAKD,EAAUC,GAAKvB,EAIzC,QAHIpJ,EAAQwE,EAAK,cAAc,SAASmG,CAAC,EACrCC,EAAaxB,EAAQ,EAAI,EAAIpJ,EAAM,SAAS,OAAS,EACrD6K,EAAWzB,EAAQ,EAAIpJ,EAAM,SAAS,OAAS,GAC1CgB,EAAI4J,EAAY5J,GAAK6J,EAAU7J,GAAKoI,EAAO,CAChD,IAAIrI,EAAIf,EAAM,SAASgB,CAAC,EACxB,GAAID,EAAE,UAAU,QAAQ,QAAQ,IAAM,IAAMuE,EAAUvE,EAAE,OAAO,EAC3D,OAAOA,CACd,CAGR,CACD,SAAS+J,GAAoBC,EAAS3B,EAAO,CAMzC,QALI4B,EAAaD,EAAQ,UAAU,QAAQ,OAAO,IAAM,GAClDA,EAAQ,QAAQ,SAAU,EAC1BvG,EAAK,aACPkG,EAAWtB,EAAQ,EAAI5E,EAAK,OAAO,WAAa,GAChDyG,EAAY7B,EAAQ,EAAI,EAAI,GACvBuB,EAAIK,EAAaxG,EAAK,aAAcmG,GAAKD,EAAUC,GAAKM,EAQ7D,QAPIjL,EAAQwE,EAAK,cAAc,SAASmG,CAAC,EACrCC,EAAaI,EAAaxG,EAAK,eAAiBmG,EAC9CI,EAAQ,GAAK3B,EACbA,EAAQ,EACJpJ,EAAM,SAAS,OAAS,EACxB,EACNkL,EAAelL,EAAM,SAAS,OACzBgB,EAAI4J,EAAY5J,GAAK,GAAKA,EAAIkK,GAAgBlK,IAAMoI,EAAQ,EAAI8B,EAAe,IAAKlK,GAAKiK,EAAW,CACzG,IAAIlK,EAAIf,EAAM,SAASgB,CAAC,EACxB,GAAID,EAAE,UAAU,QAAQ,QAAQ,IAAM,IAClCuE,EAAUvE,EAAE,OAAO,GACnB,KAAK,IAAIgK,EAAQ,GAAK/J,CAAC,GAAK,KAAK,IAAIoI,CAAK,EAC1C,OAAOkB,EAAevJ,CAAC,CAC9B,CAELyD,EAAK,YAAYyG,CAAS,EAC1BE,GAAWX,EAAqBS,CAAS,EAAG,CAAC,CAEhD,CACD,SAASE,GAAWJ,EAASK,EAAQ,CACjC,IAAIC,EAAgB3E,IAChB4E,EAAaC,GAASF,GAAiB,SAAS,IAAI,EACpDG,EAAYT,IAAY,OACtBA,EACAO,EACID,EACA7G,EAAK,mBAAqB,QAAa+G,GAAS/G,EAAK,gBAAgB,EACjEA,EAAK,iBACLA,EAAK,gBAAkB,QAAa+G,GAAS/G,EAAK,aAAa,EAC3DA,EAAK,cACLgG,EAAqBY,EAAS,EAAI,EAAI,EAAE,EACtDI,IAAc,OACdhH,EAAK,OAAO,QAEN8G,EAINR,GAAoBU,EAAWJ,CAAM,EAHrCd,EAAekB,CAAS,CAK/B,CACD,SAASC,GAAe5L,EAAMG,EAAO,CAKjC,QAJI0L,GAAgB,IAAI,KAAK7L,EAAMG,EAAO,CAAC,EAAE,OAAM,EAAKwE,EAAK,KAAK,eAAiB,GAAK,EACpFmH,EAAgBnH,EAAK,MAAM,gBAAgBxE,EAAQ,EAAI,IAAM,GAAIH,CAAI,EACrE+L,EAAcpH,EAAK,MAAM,eAAexE,EAAOH,CAAI,EAAGgM,EAAO,OAAO,SAAS,uBAAsB,EAAIC,EAAetH,EAAK,OAAO,WAAa,EAAGuH,EAAoBD,EAAe,sBAAwB,eAAgBE,EAAoBF,EAAe,sBAAwB,eACxRG,EAAYN,EAAgB,EAAID,EAAcQ,EAAW,EACtDD,GAAaN,EAAeM,IAAaC,IAC5CL,EAAK,YAAYzG,EAAU,iBAAmB2G,EAAmB,IAAI,KAAKlM,EAAMG,EAAQ,EAAGiM,CAAS,EAAGA,EAAWC,CAAQ,CAAC,EAE/H,IAAKD,EAAY,EAAGA,GAAaL,EAAaK,IAAaC,IACvDL,EAAK,YAAYzG,EAAU,gBAAiB,IAAI,KAAKvF,EAAMG,EAAOiM,CAAS,EAAGA,EAAWC,CAAQ,CAAC,EAEtG,QAASC,EAASP,EAAc,EAAGO,GAAU,GAAKT,IAC7ClH,EAAK,OAAO,aAAe,GAAK0H,EAAW,IAAM,GAAIC,IAAUD,IAChEL,EAAK,YAAYzG,EAAU,iBAAmB4G,EAAmB,IAAI,KAAKnM,EAAMG,EAAQ,EAAGmM,EAASP,CAAW,EAAGO,EAAQD,CAAQ,CAAC,EAEvI,IAAIE,EAAe1O,EAAc,MAAO,cAAc,EACtD,OAAA0O,EAAa,YAAYP,CAAI,EACtBO,CACV,CACD,SAAStC,IAAY,CACjB,GAAItF,EAAK,gBAAkB,OAG3B,CAAA1G,GAAU0G,EAAK,aAAa,EACxBA,EAAK,aACL1G,GAAU0G,EAAK,WAAW,EAE9B,QADI6H,EAAO,SAAS,yBACX,EAAI,EAAG,EAAI7H,EAAK,OAAO,WAAY,IAAK,CAC7C,IAAI8H,EAAI,IAAI,KAAK9H,EAAK,YAAaA,EAAK,aAAc,CAAC,EACvD8H,EAAE,SAAS9H,EAAK,aAAe,CAAC,EAChC6H,EAAK,YAAYZ,GAAea,EAAE,YAAW,EAAIA,EAAE,SAAU,CAAA,CAAC,CACjE,CACD9H,EAAK,cAAc,YAAY6H,CAAI,EACnC7H,EAAK,KAAOA,EAAK,cAAc,WAC3BA,EAAK,OAAO,OAAS,SAAWA,EAAK,cAAc,SAAW,GAC9DW,KAEP,CACD,SAAS+D,GAAmB,CACxB,GAAI,EAAA1E,EAAK,OAAO,WAAa,GACzBA,EAAK,OAAO,oBAAsB,YAEtC,KAAI+H,EAAmB,SAAUvM,EAAO,CACpC,OAAIwE,EAAK,OAAO,UAAY,QACxBA,EAAK,cAAgBA,EAAK,OAAO,QAAQ,YAAa,GACtDxE,EAAQwE,EAAK,OAAO,QAAQ,SAAQ,EAC7B,GAEJ,EAAEA,EAAK,OAAO,UAAY,QAC7BA,EAAK,cAAgBA,EAAK,OAAO,QAAQ,YAAa,GACtDxE,EAAQwE,EAAK,OAAO,QAAQ,SAAU,EACtD,EACQA,EAAK,wBAAwB,SAAW,GACxCA,EAAK,wBAAwB,UAAY,GACzC,QAAS,EAAI,EAAG,EAAI,GAAI,IACpB,GAAK+H,EAAiB,CAAC,EAEvB,KAAIvM,EAAQtC,EAAc,SAAU,+BAA+B,EACnEsC,EAAM,MAAQ,IAAI,KAAKwE,EAAK,YAAa,CAAC,EAAE,WAAW,WACvDxE,EAAM,YAAcnB,GAAW,EAAG2F,EAAK,OAAO,sBAAuBA,EAAK,IAAI,EAC9ExE,EAAM,SAAW,GACbwE,EAAK,eAAiB,IACtBxE,EAAM,SAAW,IAErBwE,EAAK,wBAAwB,YAAYxE,CAAK,GAErD,CACD,SAASwM,IAAa,CAClB,IAAIC,EAAY/O,EAAc,MAAO,iBAAiB,EAClDgP,EAAmB,OAAO,SAAS,uBAAsB,EACzDC,EACAnI,EAAK,OAAO,WAAa,GACzBA,EAAK,OAAO,oBAAsB,SAClCmI,EAAejP,EAAc,OAAQ,WAAW,GAGhD8G,EAAK,wBAA0B9G,EAAc,SAAU,gCAAgC,EACvF8G,EAAK,wBAAwB,aAAa,aAAcA,EAAK,KAAK,cAAc,EAChFI,EAAKJ,EAAK,wBAAyB,SAAU,SAAU3G,EAAG,CACtD,IAAIwF,EAAS5E,EAAeZ,CAAC,EACzB+O,EAAgB,SAASvJ,EAAO,MAAO,EAAE,EAC7CmB,EAAK,YAAYoI,EAAgBpI,EAAK,YAAY,EAClDiC,EAAa,eAAe,CAC5C,CAAa,EACDyC,IACAyD,EAAenI,EAAK,yBAExB,IAAIqI,EAAY3O,GAAkB,WAAY,CAAE,SAAU,IAAI,CAAE,EAC5D4O,EAAcD,EAAU,qBAAqB,OAAO,EAAE,CAAC,EAC3DC,EAAY,aAAa,aAActI,EAAK,KAAK,aAAa,EAC1DA,EAAK,OAAO,SACZsI,EAAY,aAAa,MAAOtI,EAAK,OAAO,QAAQ,YAAW,EAAG,SAAQ,CAAE,EAE5EA,EAAK,OAAO,UACZsI,EAAY,aAAa,MAAOtI,EAAK,OAAO,QAAQ,YAAW,EAAG,SAAQ,CAAE,EAC5EsI,EAAY,SACR,CAAC,CAACtI,EAAK,OAAO,SACVA,EAAK,OAAO,QAAQ,YAAW,IAAOA,EAAK,OAAO,QAAQ,eAEtE,IAAIuI,EAAerP,EAAc,MAAO,yBAAyB,EACjE,OAAAqP,EAAa,YAAYJ,CAAY,EACrCI,EAAa,YAAYF,CAAS,EAClCH,EAAiB,YAAYK,CAAY,EACzCN,EAAU,YAAYC,CAAgB,EAC/B,CACH,UAAWD,EACX,YAAaK,EACb,aAAcH,CAC1B,CACK,CACD,SAASK,IAAc,CACnBlP,GAAU0G,EAAK,QAAQ,EACvBA,EAAK,SAAS,YAAYA,EAAK,YAAY,EACvCA,EAAK,OAAO,aACZA,EAAK,aAAe,GACpBA,EAAK,cAAgB,IAEzB,QAASmG,EAAInG,EAAK,OAAO,WAAYmG,KAAM,CACvC,IAAI3K,EAAQwM,KACZhI,EAAK,aAAa,KAAKxE,EAAM,WAAW,EACxCwE,EAAK,cAAc,KAAKxE,EAAM,YAAY,EAC1CwE,EAAK,SAAS,YAAYxE,EAAM,SAAS,CAC5C,CACDwE,EAAK,SAAS,YAAYA,EAAK,YAAY,CAC9C,CACD,SAASiF,IAAgB,CACrB,OAAAjF,EAAK,SAAW9G,EAAc,MAAO,kBAAkB,EACvD8G,EAAK,aAAe,GACpBA,EAAK,cAAgB,GACrBA,EAAK,aAAe9G,EAAc,OAAQ,sBAAsB,EAChE8G,EAAK,aAAa,UAAYA,EAAK,OAAO,UAC1CA,EAAK,aAAe9G,EAAc,OAAQ,sBAAsB,EAChE8G,EAAK,aAAa,UAAYA,EAAK,OAAO,UAC1CwI,KACA,OAAO,eAAexI,EAAM,sBAAuB,CAC/C,IAAK,UAAY,CAAE,OAAOA,EAAK,oBAAuB,EACtD,IAAK,SAAU1H,EAAM,CACb0H,EAAK,uBAAyB1H,IAC9BS,EAAYiH,EAAK,aAAc,qBAAsB1H,CAAI,EACzD0H,EAAK,qBAAuB1H,EAEnC,CACb,CAAS,EACD,OAAO,eAAe0H,EAAM,sBAAuB,CAC/C,IAAK,UAAY,CAAE,OAAOA,EAAK,oBAAuB,EACtD,IAAK,SAAU1H,EAAM,CACb0H,EAAK,uBAAyB1H,IAC9BS,EAAYiH,EAAK,aAAc,qBAAsB1H,CAAI,EACzD0H,EAAK,qBAAuB1H,EAEnC,CACb,CAAS,EACD0H,EAAK,mBAAqBA,EAAK,aAAa,CAAC,EAC7CyI,KACOzI,EAAK,QACf,CACD,SAASuF,IAAY,CACjBvF,EAAK,kBAAkB,UAAU,IAAI,SAAS,EAC1CA,EAAK,OAAO,YACZA,EAAK,kBAAkB,UAAU,IAAI,YAAY,EACrD,IAAItI,EAAW6G,GAAgByB,EAAK,MAAM,EAC1CA,EAAK,cAAgB9G,EAAc,MAAO,gBAAgB,EAC1D8G,EAAK,cAAc,SAAW,GAC9B,IAAI0I,EAAYxP,EAAc,OAAQ,2BAA4B,GAAG,EACjEyP,EAAYjP,GAAkB,iBAAkB,CAChD,aAAcsG,EAAK,KAAK,aACpC,CAAS,EACDA,EAAK,YAAc2I,EAAU,qBAAqB,OAAO,EAAE,CAAC,EAC5D,IAAIC,EAAclP,GAAkB,mBAAoB,CACpD,aAAcsG,EAAK,KAAK,eACpC,CAAS,EAwBD,GAvBAA,EAAK,cAAgB4I,EAAY,qBAAqB,OAAO,EAAE,CAAC,EAChE5I,EAAK,YAAY,SAAWA,EAAK,cAAc,SAAW,GAC1DA,EAAK,YAAY,MAAQ9H,EAAI8H,EAAK,sBAC5BA,EAAK,sBAAsB,SAAU,EACrCA,EAAK,OAAO,UACRtI,EAAS,MACTiL,EAAcjL,EAAS,KAAK,CAAC,EACvCsI,EAAK,cAAc,MAAQ9H,EAAI8H,EAAK,sBAC9BA,EAAK,sBAAsB,WAAY,EACvCtI,EAAS,OAAO,EACtBsI,EAAK,YAAY,aAAa,OAAQA,EAAK,OAAO,cAAc,SAAQ,CAAE,EAC1EA,EAAK,cAAc,aAAa,OAAQA,EAAK,OAAO,gBAAgB,SAAQ,CAAE,EAC9EA,EAAK,YAAY,aAAa,MAAOA,EAAK,OAAO,UAAY,IAAM,GAAG,EACtEA,EAAK,YAAY,aAAa,MAAOA,EAAK,OAAO,UAAY,KAAO,IAAI,EACxEA,EAAK,YAAY,aAAa,YAAa,GAAG,EAC9CA,EAAK,cAAc,aAAa,MAAO,GAAG,EAC1CA,EAAK,cAAc,aAAa,MAAO,IAAI,EAC3CA,EAAK,cAAc,aAAa,YAAa,GAAG,EAChDA,EAAK,cAAc,YAAY2I,CAAS,EACxC3I,EAAK,cAAc,YAAY0I,CAAS,EACxC1I,EAAK,cAAc,YAAY4I,CAAW,EACtC5I,EAAK,OAAO,WACZA,EAAK,cAAc,UAAU,IAAI,UAAU,EAC3CA,EAAK,OAAO,cAAe,CAC3BA,EAAK,cAAc,UAAU,IAAI,YAAY,EAC7C,IAAI6I,EAAcnP,GAAkB,kBAAkB,EACtDsG,EAAK,cAAgB6I,EAAY,qBAAqB,OAAO,EAAE,CAAC,EAChE7I,EAAK,cAAc,MAAQ9H,EAAI8H,EAAK,sBAC9BA,EAAK,sBAAsB,WAAY,EACvCtI,EAAS,OAAO,EACtBsI,EAAK,cAAc,aAAa,OAAQA,EAAK,cAAc,aAAa,MAAM,CAAC,EAC/EA,EAAK,cAAc,aAAa,MAAO,GAAG,EAC1CA,EAAK,cAAc,aAAa,MAAO,IAAI,EAC3CA,EAAK,cAAc,aAAa,YAAa,GAAG,EAChDA,EAAK,cAAc,YAAY9G,EAAc,OAAQ,2BAA4B,GAAG,CAAC,EACrF8G,EAAK,cAAc,YAAY6I,CAAW,CAC7C,CACD,OAAK7I,EAAK,OAAO,YACbA,EAAK,KAAO9G,EAAc,OAAQ,kBAAmB8G,EAAK,KAAK,KAAK3H,GAAK2H,EAAK,sBACxEA,EAAK,YAAY,MACjBA,EAAK,OAAO,aAAe,EAAE,CAAC,CAAC,EACrCA,EAAK,KAAK,MAAQA,EAAK,KAAK,YAC5BA,EAAK,KAAK,SAAW,GACrBA,EAAK,cAAc,YAAYA,EAAK,IAAI,GAErCA,EAAK,aACf,CACD,SAASqF,IAAgB,CAChBrF,EAAK,iBAGN1G,GAAU0G,EAAK,gBAAgB,EAF/BA,EAAK,iBAAmB9G,EAAc,MAAO,oBAAoB,EAGrE,QAASsD,EAAIwD,EAAK,OAAO,WAAYxD,KAAM,CACvC,IAAIyL,EAAY/O,EAAc,MAAO,4BAA4B,EACjE8G,EAAK,iBAAiB,YAAYiI,CAAS,CAC9C,CACD,OAAAa,KACO9I,EAAK,gBACf,CACD,SAAS8I,IAAiB,CACtB,GAAK9I,EAAK,iBAGV,KAAI+I,EAAiB/I,EAAK,KAAK,eAC3BgJ,EAAW1J,GAAeU,EAAK,KAAK,SAAS,SAAS,EACtD+I,EAAiB,GAAKA,EAAiBC,EAAS,SAChDA,EAAW1J,GAAe0J,EAAS,OAAOD,EAAgBC,EAAS,MAAM,EAAGA,EAAS,OAAO,EAAGD,CAAc,CAAC,GAElH,QAASvM,EAAIwD,EAAK,OAAO,WAAYxD,KACjCwD,EAAK,iBAAiB,SAASxD,CAAC,EAAE,UAAY;AAAA;AAAA,UAAuDwM,EAAS,KAAK,yCAAyC,EAAI;AAAA;AAAA,QAEvK,CACD,SAAS9D,IAAa,CAClBlF,EAAK,kBAAkB,UAAU,IAAI,UAAU,EAC/C,IAAImF,EAAcjM,EAAc,MAAO,uBAAuB,EAC9DiM,EAAY,YAAYjM,EAAc,OAAQ,oBAAqB8G,EAAK,KAAK,gBAAgB,CAAC,EAC9F,IAAIoF,EAAclM,EAAc,MAAO,iBAAiB,EACxD,OAAAiM,EAAY,YAAYC,CAAW,EAC5B,CACH,YAAaD,EACb,YAAaC,CACzB,CACK,CACD,SAAS7E,GAAYhJ,EAAO0R,EAAU,CAC9BA,IAAa,SAAUA,EAAW,IACtC,IAAIrE,EAAQqE,EAAW1R,EAAQA,EAAQyI,EAAK,aACvC4E,EAAQ,GAAK5E,EAAK,sBAAwB,IAC1C4E,EAAQ,GAAK5E,EAAK,sBAAwB,KAE/CA,EAAK,cAAgB4E,GACjB5E,EAAK,aAAe,GAAKA,EAAK,aAAe,MAC7CA,EAAK,aAAeA,EAAK,aAAe,GAAK,EAAI,GACjDA,EAAK,cAAgBA,EAAK,aAAe,IAAM,GAC/CiC,EAAa,cAAc,EAC3ByC,KAEJY,KACArD,EAAa,eAAe,EAC5BwG,KACH,CACD,SAAShI,GAAMyI,EAAoBC,EAAW,CAc1C,GAbID,IAAuB,SAAUA,EAAqB,IACtDC,IAAc,SAAUA,EAAY,IACxCnJ,EAAK,MAAM,MAAQ,GACfA,EAAK,WAAa,SAClBA,EAAK,SAAS,MAAQ,IACtBA,EAAK,cAAgB,SACrBA,EAAK,YAAY,MAAQ,IAC7BA,EAAK,cAAgB,GACrBA,EAAK,sBAAwB,OACzBmJ,IAAc,KACdnJ,EAAK,YAAcA,EAAK,aAAa,YAAW,EAChDA,EAAK,aAAeA,EAAK,aAAa,SAAQ,GAE9CA,EAAK,OAAO,aAAe,GAAM,CACjC,IAAIlE,EAAKyC,GAAgByB,EAAK,MAAM,EAAG7B,EAAQrC,EAAG,MAAOP,EAAUO,EAAG,QAASd,EAAUc,EAAG,QAC5FsH,EAASjF,EAAO5C,EAASP,CAAO,CACnC,CACDgF,EAAK,OAAM,EACPkJ,GACAjH,EAAa,UAAU,CAC9B,CACD,SAASvB,IAAQ,CACbV,EAAK,OAAS,GACTA,EAAK,WACFA,EAAK,oBAAsB,QAC3BA,EAAK,kBAAkB,UAAU,OAAO,MAAM,EAE9CA,EAAK,SAAW,QAChBA,EAAK,OAAO,UAAU,OAAO,QAAQ,GAG7CiC,EAAa,SAAS,CACzB,CACD,SAASpB,IAAU,CACXb,EAAK,SAAW,QAChBiC,EAAa,WAAW,EAC5B,QAASzF,EAAIwD,EAAK,UAAU,OAAQxD,KAChCwD,EAAK,UAAUxD,CAAC,EAAE,OAAM,EAG5B,GADAwD,EAAK,UAAY,GACbA,EAAK,YACDA,EAAK,YAAY,YACjBA,EAAK,YAAY,WAAW,YAAYA,EAAK,WAAW,EAC5DA,EAAK,YAAc,eAEdA,EAAK,mBAAqBA,EAAK,kBAAkB,WACtD,GAAIA,EAAK,OAAO,QAAUA,EAAK,kBAAkB,WAAY,CACzD,IAAInG,EAAUmG,EAAK,kBAAkB,WAErC,GADAnG,EAAQ,WAAaA,EAAQ,YAAYA,EAAQ,SAAS,EACtDA,EAAQ,WAAY,CACpB,KAAOA,EAAQ,YACXA,EAAQ,WAAW,aAAaA,EAAQ,WAAYA,CAAO,EAC/DA,EAAQ,WAAW,YAAYA,CAAO,CACzC,CACJ,MAEGmG,EAAK,kBAAkB,WAAW,YAAYA,EAAK,iBAAiB,EAExEA,EAAK,WACLA,EAAK,MAAM,KAAO,OACdA,EAAK,SAAS,YACdA,EAAK,SAAS,WAAW,YAAYA,EAAK,QAAQ,EACtD,OAAOA,EAAK,UAEZA,EAAK,QACLA,EAAK,MAAM,KAAOA,EAAK,MAAM,MAC7BA,EAAK,MAAM,UAAU,OAAO,iBAAiB,EAC7CA,EAAK,MAAM,gBAAgB,UAAU,GAEzC,CACI,iBACA,wBACA,sBACA,sBACA,uBACA,uBACA,WACA,SACA,mBACA,iBACA,iBACA,OACA,gBACA,SACA,mBACA,iBACA,aACA,WACA,gBACA,oBACA,mBACA,eACA,eACA,0BACA,sBACA,qBACA,yBACA,mBACA,QACZ,EAAU,QAAQ,SAAUR,EAAG,CACnB,GAAI,CACA,OAAOQ,EAAKR,CAAC,CAChB,MACS,CAAG,CACzB,CAAS,CACJ,CACD,SAAS4J,GAAepQ,EAAM,CAC1B,OAAOgH,EAAK,kBAAkB,SAAShH,CAAI,CAC9C,CACD,SAASgL,GAAc3K,EAAG,CACtB,GAAI2G,EAAK,QAAU,CAACA,EAAK,OAAO,OAAQ,CACpC,IAAIqJ,EAAgBpP,EAAeZ,CAAC,EAChCiQ,EAAoBF,GAAeC,CAAa,EAChDE,EAAUF,IAAkBrJ,EAAK,OACjCqJ,IAAkBrJ,EAAK,UACvBA,EAAK,QAAQ,SAASqJ,CAAa,GAClChQ,EAAE,MACCA,EAAE,KAAK,UACN,CAACA,EAAE,KAAK,QAAQ2G,EAAK,KAAK,GACvB,CAAC3G,EAAE,KAAK,QAAQ2G,EAAK,QAAQ,GACrCwJ,EAAY,CAACD,GACb,CAACD,GACD,CAACF,GAAe/P,EAAE,aAAa,EAC/BoQ,EAAY,CAACzJ,EAAK,OAAO,qBAAqB,KAAK,SAAUhH,EAAM,CACnE,OAAOA,EAAK,SAASqQ,CAAa,CAClD,CAAa,EACGG,GAAaC,IACTzJ,EAAK,OAAO,YACZA,EAAK,QAAQA,EAAK,OAAO,MAAO,GAAOA,EAAK,OAAO,SAC7CA,EAAK,OAAO,UACZA,EAAK,OAAO,UAAU,EAE5BA,EAAK,gBAAkB,QACvBA,EAAK,gBAAkB,QACvBA,EAAK,cAAgB,QACrBA,EAAK,MAAM,QAAU,IACrBA,EAAK,MAAM,QAAU,QACrBqC,IAEJrC,EAAK,MAAK,EACNA,EAAK,QACLA,EAAK,OAAO,OAAS,SACrBA,EAAK,cAAc,SAAW,GAC9BA,EAAK,MAAM,EAAK,EAE3B,CACJ,CACD,SAASQ,GAAWkJ,EAAS,CACzB,GAAI,GAACA,GACA1J,EAAK,OAAO,SAAW0J,EAAU1J,EAAK,OAAO,QAAQ,eACrDA,EAAK,OAAO,SAAW0J,EAAU1J,EAAK,OAAO,QAAQ,eAE1D,KAAI2J,EAAaD,EAASE,EAAY5J,EAAK,cAAgB2J,EAC3D3J,EAAK,YAAc2J,GAAc3J,EAAK,YAClCA,EAAK,OAAO,SACZA,EAAK,cAAgBA,EAAK,OAAO,QAAQ,YAAW,EACpDA,EAAK,aAAe,KAAK,IAAIA,EAAK,OAAO,QAAQ,SAAQ,EAAIA,EAAK,YAAY,EAEzEA,EAAK,OAAO,SACjBA,EAAK,cAAgBA,EAAK,OAAO,QAAQ,YAAW,IACpDA,EAAK,aAAe,KAAK,IAAIA,EAAK,OAAO,QAAQ,SAAQ,EAAIA,EAAK,YAAY,GAE9E4J,IACA5J,EAAK,OAAM,EACXiC,EAAa,cAAc,EAC3ByC,KAEP,CACD,SAAS5D,EAAUjJ,EAAM+E,EAAU,CAC/B,IAAId,EACAc,IAAa,SAAUA,EAAW,IACtC,IAAIiN,EAAc7J,EAAK,UAAUnI,EAAM,OAAW+E,CAAQ,EAC1D,GAAKoD,EAAK,OAAO,SACb6J,GACAlM,EAAakM,EAAa7J,EAAK,OAAO,QAASpD,IAAa,OAAYA,EAAW,CAACoD,EAAK,cAAc,EAAI,GAC1GA,EAAK,OAAO,SACT6J,GACAlM,EAAakM,EAAa7J,EAAK,OAAO,QAASpD,IAAa,OAAYA,EAAW,CAACoD,EAAK,cAAc,EAAI,EAC/G,MAAO,GACX,GAAI,CAACA,EAAK,OAAO,QAAUA,EAAK,OAAO,QAAQ,SAAW,EACtD,MAAO,GACX,GAAI6J,IAAgB,OAChB,MAAO,GAEX,QADIvR,EAAO,CAAC,CAAC0H,EAAK,OAAO,OAAQ8J,GAAShO,EAAKkE,EAAK,OAAO,UAAY,MAAQlE,IAAO,OAASA,EAAKkE,EAAK,OAAO,QACvGxD,EAAI,EAAGsL,EAAI,OAAQtL,EAAIsN,EAAM,OAAQtN,IAAK,CAE/C,GADAsL,EAAIgC,EAAMtN,CAAC,EACP,OAAOsL,GAAM,YACbA,EAAE+B,CAAW,EACb,OAAOvR,EACN,GAAIwP,aAAa,MAClB+B,IAAgB,QAChB/B,EAAE,QAAO,IAAO+B,EAAY,QAAS,EACrC,OAAOvR,EACN,GAAI,OAAOwP,GAAM,SAAU,CAC5B,IAAIiC,EAAS/J,EAAK,UAAU8H,EAAG,OAAW,EAAI,EAC9C,OAAOiC,GAAUA,EAAO,QAAO,IAAOF,EAAY,QAAS,EACrDvR,EACA,CAACA,CACV,SACQ,OAAOwP,GAAM,UAClB+B,IAAgB,QAChB/B,EAAE,MACFA,EAAE,IACF+B,EAAY,QAAS,GAAI/B,EAAE,KAAK,QAAS,GACzC+B,EAAY,QAAS,GAAI/B,EAAE,GAAG,QAAS,EACvC,OAAOxP,CACd,CACD,MAAO,CAACA,CACX,CACD,SAASyO,GAAS/N,EAAM,CACpB,OAAIgH,EAAK,gBAAkB,OACfhH,EAAK,UAAU,QAAQ,QAAQ,IAAM,IACzCA,EAAK,UAAU,QAAQ,oBAAoB,IAAM,IACjDgH,EAAK,cAAc,SAAShH,CAAI,EACjC,EACV,CACD,SAASqL,GAAOhL,EAAG,CACf,IAAIkQ,EAAUlQ,EAAE,SAAW2G,EAAK,OAC5BgK,EAAehK,EAAK,OAAO,MAAM,QAAO,IAAOiK,KAC/CV,GACAS,GACA,EAAE3Q,EAAE,eAAiB+P,GAAe/P,EAAE,aAAa,IACnD2G,EAAK,QAAQA,EAAK,OAAO,MAAO,GAAM3G,EAAE,SAAW2G,EAAK,SAClDA,EAAK,OAAO,UACZA,EAAK,OAAO,UAAU,CAEnC,CACD,SAAS+D,GAAU1K,EAAG,CAClB,IAAIiK,EAAcrJ,EAAeZ,CAAC,EAC9BkQ,EAAUvJ,EAAK,OAAO,KACpBF,EAAQ,SAASwD,CAAW,EAC5BA,IAAgBtD,EAAK,OACvBkK,EAAalK,EAAK,OAAO,WACzBmK,EAAenK,EAAK,SAAW,CAACkK,GAAc,CAACX,GAC/Ca,EAAqBpK,EAAK,OAAO,QAAUuJ,GAAW,CAACW,EAC3D,GAAI7Q,EAAE,UAAY,IAAMkQ,EAAS,CAC7B,GAAIW,EACA,OAAAlK,EAAK,QAAQA,EAAK,OAAO,MAAO,GAAMsD,IAAgBtD,EAAK,SACrDA,EAAK,OAAO,UACZA,EAAK,OAAO,UAAU,EAC5BA,EAAK,MAAK,EACHsD,EAAY,OAGnBtD,EAAK,KAAI,CAEhB,SACQoJ,GAAe9F,CAAW,GAC/B6G,GACAC,EAAoB,CACpB,IAAIC,EAAY,CAAC,CAACrK,EAAK,eACnBA,EAAK,cAAc,SAASsD,CAAW,EAC3C,OAAQjK,EAAE,QAAO,CACb,IAAK,IACGgR,GACAhR,EAAE,eAAc,EAChBgJ,IACAiI,MAGApG,GAAW7K,CAAC,EAChB,MACJ,IAAK,IACDA,EAAE,eAAc,EAChBiR,KACA,MACJ,IAAK,GACL,IAAK,IACGf,GAAW,CAACvJ,EAAK,OAAO,aACxB3G,EAAE,eAAc,EAChB2G,EAAK,MAAK,GAEd,MACJ,IAAK,IACL,IAAK,IACD,GAAI,CAACqK,GAAa,CAACd,EAAS,CACxBlQ,EAAE,eAAc,EAChB,IAAIwN,EAAgB3E,IACpB,GAAIlC,EAAK,gBAAkB,SACtBkK,IAAe,IACXrD,GAAiBE,GAASF,CAAa,GAAK,CACjD,IAAI0D,EAAUlR,EAAE,UAAY,GAAK,EAAI,GAChCA,EAAE,SAGHA,EAAE,gBAAe,EACjBkH,GAAYgK,CAAO,EACnB5D,GAAWX,EAAqB,CAAC,EAAG,CAAC,GAJrCW,GAAW,OAAW4D,CAAO,CAMpC,CACJ,MACQvK,EAAK,aACVA,EAAK,YAAY,QACrB,MACJ,IAAK,IACL,IAAK,IACD3G,EAAE,eAAc,EAChB,IAAIuL,EAAQvL,EAAE,UAAY,GAAK,EAAI,GAC9B2G,EAAK,eACNsD,EAAY,KAAO,QACnBA,IAAgBtD,EAAK,OACrBsD,IAAgBtD,EAAK,SACjB3G,EAAE,SACFA,EAAE,gBAAe,EACjBmH,GAAWR,EAAK,YAAc4E,CAAK,EACnC+B,GAAWX,EAAqB,CAAC,EAAG,CAAC,GAE/BqE,GACN1D,GAAW,OAAW/B,EAAQ,CAAC,EAE9BtB,IAAgBtD,EAAK,mBAC1BQ,GAAWR,EAAK,YAAc4E,CAAK,EAE9B5E,EAAK,OAAO,aACb,CAACqK,GAAarK,EAAK,aACnBA,EAAK,YAAY,QACrBqC,EAAWhJ,CAAC,EACZ2G,EAAK,iBAAgB,GAEzB,MACJ,IAAK,GACD,GAAIqK,EAAW,CACX,IAAIG,EAAQ,CACRxK,EAAK,YACLA,EAAK,cACLA,EAAK,cACLA,EAAK,IACR,EACI,OAAOA,EAAK,cAAc,EAC1B,OAAO,SAAUyK,EAAG,CAAE,OAAOA,CAAI,CAAA,EAClCjO,EAAIgO,EAAM,QAAQlH,CAAW,EACjC,GAAI9G,IAAM,GAAI,CACV,IAAIqC,EAAS2L,EAAMhO,GAAKnD,EAAE,SAAW,GAAK,EAAE,EAC5CA,EAAE,eAAc,GACfwF,GAAUmB,EAAK,QAAQ,MAAK,CAChC,CACJ,KACQ,CAACA,EAAK,OAAO,YAClBA,EAAK,eACLA,EAAK,cAAc,SAASsD,CAAW,GACvCjK,EAAE,WACFA,EAAE,eAAc,EAChB2G,EAAK,OAAO,SAEhB,KAGP,CACJ,CACD,GAAIA,EAAK,OAAS,QAAasD,IAAgBtD,EAAK,KAChD,OAAQ3G,EAAE,IAAG,CACT,KAAK2G,EAAK,KAAK,KAAK,CAAC,EAAE,OAAO,CAAC,EAC/B,KAAKA,EAAK,KAAK,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,YAAa,EAC1CA,EAAK,KAAK,YAAcA,EAAK,KAAK,KAAK,CAAC,EACxCyC,IACAzB,IACA,MACJ,KAAKhB,EAAK,KAAK,KAAK,CAAC,EAAE,OAAO,CAAC,EAC/B,KAAKA,EAAK,KAAK,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,YAAa,EAC1CA,EAAK,KAAK,YAAcA,EAAK,KAAK,KAAK,CAAC,EACxCyC,IACAzB,IACA,KACP,EAEDuI,GAAWH,GAAe9F,CAAW,IACrCrB,EAAa,YAAa5I,CAAC,CAElC,CACD,SAASsH,GAAY3H,EAAM0R,EAAW,CAElC,GADIA,IAAc,SAAUA,EAAY,iBACpC,EAAA1K,EAAK,cAAc,SAAW,GAC7BhH,IACI,CAACA,EAAK,UAAU,SAAS0R,CAAS,GAC/B1R,EAAK,UAAU,SAAS,oBAAoB,IAOxD,SALI2R,EAAY3R,EACVA,EAAK,QAAQ,QAAS,EACtBgH,EAAK,KAAK,kBAAkB,QAAQ,QAAS,EAAE4K,EAAc5K,EAAK,UAAUA,EAAK,cAAc,CAAC,EAAG,OAAW,EAAI,EAAE,QAAO,EAAI6K,EAAiB,KAAK,IAAIF,EAAW3K,EAAK,cAAc,CAAC,EAAE,QAAO,CAAE,EAAG8K,EAAe,KAAK,IAAIH,EAAW3K,EAAK,cAAc,CAAC,EAAE,QAAO,CAAE,EAC1Q+K,EAAmB,GACnBC,EAAW,EAAGC,EAAW,EACpBvS,EAAImS,EAAgBnS,EAAIoS,EAAcpS,GAAK4F,GAAS,IACpDwC,EAAU,IAAI,KAAKpI,CAAC,EAAG,EAAI,IAC5BqS,EACIA,GAAqBrS,EAAImS,GAAkBnS,EAAIoS,EAC/CpS,EAAIkS,IAAgB,CAACI,GAAYtS,EAAIsS,GACrCA,EAAWtS,EACNA,EAAIkS,IAAgB,CAACK,GAAYvS,EAAIuS,KAC1CA,EAAWvS,IAGvB,IAAIwS,EAAiB,MAAM,KAAKlL,EAAK,WAAW,iBAAiB,kBAAoBA,EAAK,OAAO,WAAa,QAAU0K,CAAS,CAAC,EAClIQ,EAAe,QAAQ,SAAUC,EAAS,CACtC,IAAItT,EAAOsT,EAAQ,QACfC,EAAYvT,EAAK,UACjBwT,GAAcL,EAAW,GAAKI,EAAYJ,GACzCC,EAAW,GAAKG,EAAYH,EACjC,GAAII,GAAY,CACZF,EAAQ,UAAU,IAAI,YAAY,EAClC,CAAC,UAAW,aAAc,UAAU,EAAE,QAAQ,SAAU5O,EAAG,CACvD4O,EAAQ,UAAU,OAAO5O,CAAC,CAC9C,CAAiB,EACD,MACH,SACQwO,GAAoB,CAACM,GAC1B,OACJ,CAAC,aAAc,UAAW,WAAY,YAAY,EAAE,QAAQ,SAAU9O,EAAG,CACrE4O,EAAQ,UAAU,OAAO5O,CAAC,CAC1C,CAAa,EACGvD,IAAS,SACTA,EAAK,UAAU,IAAI2R,GAAa3K,EAAK,cAAc,CAAC,EAAE,QAAS,EACzD,aACA,UAAU,EACZ4K,EAAcD,GAAaS,IAAcR,EACzCO,EAAQ,UAAU,IAAI,YAAY,EAC7BP,EAAcD,GAAaS,IAAcR,GAC9CO,EAAQ,UAAU,IAAI,UAAU,EAChCC,GAAaJ,IACZC,IAAa,GAAKG,GAAaH,IAChCnN,GAAUsN,EAAWR,EAAaD,CAAS,GAC3CQ,EAAQ,UAAU,IAAI,SAAS,EAEnD,CAAS,EACJ,CACD,SAASrH,IAAW,CACZ9D,EAAK,QAAU,CAACA,EAAK,OAAO,QAAU,CAACA,EAAK,OAAO,QACnDM,IACP,CACD,SAASW,GAAK5H,EAAGiS,EAAiB,CAE9B,GADIA,IAAoB,SAAUA,EAAkBtL,EAAK,kBACrDA,EAAK,WAAa,GAAM,CACxB,GAAI3G,EAAG,CACHA,EAAE,eAAc,EAChB,IAAIiK,EAAcrJ,EAAeZ,CAAC,EAC9BiK,GACAA,EAAY,KAAI,CAEvB,CACGtD,EAAK,cAAgB,SACrBA,EAAK,YAAY,QACjBA,EAAK,YAAY,SAErBiC,EAAa,QAAQ,EACrB,MACH,SACQjC,EAAK,OAAO,UAAYA,EAAK,OAAO,OACzC,OAEJ,IAAIuL,EAAUvL,EAAK,OACnBA,EAAK,OAAS,GACTuL,IACDvL,EAAK,kBAAkB,UAAU,IAAI,MAAM,EAC3CA,EAAK,OAAO,UAAU,IAAI,QAAQ,EAClCiC,EAAa,QAAQ,EACrB3B,GAAiBgL,CAAe,GAEhCtL,EAAK,OAAO,aAAe,IAAQA,EAAK,OAAO,aAAe,IAC1DA,EAAK,OAAO,aAAe,KAC1B3G,IAAM,QACH,CAAC2G,EAAK,cAAc,SAAS3G,EAAE,aAAa,IAChD,WAAW,UAAY,CAAE,OAAO2G,EAAK,YAAY,QAAS,EAAI,EAAE,CAG3E,CACD,SAASwL,GAAiBC,EAAM,CAC5B,OAAO,SAAU5T,EAAM,CACnB,IAAI6C,EAAWsF,EAAK,OAAO,IAAMyL,EAAO,MAAM,EAAIzL,EAAK,UAAUnI,EAAMmI,EAAK,OAAO,UAAU,EACzF0L,EAAiB1L,EAAK,OAAO,KAAOyL,IAAS,MAAQ,MAAQ,OAAS,MAAM,EAC5E/Q,IAAY,SACZsF,EAAKyL,IAAS,MAAQ,iBAAmB,gBAAgB,EACrD/Q,EAAQ,SAAQ,EAAK,GACjBA,EAAQ,WAAU,EAAK,GACvBA,EAAQ,WAAY,EAAG,GAE/BsF,EAAK,gBACLA,EAAK,cAAgBA,EAAK,cAAc,OAAO,SAAU8H,EAAG,CAAE,OAAOhH,EAAUgH,CAAC,CAAI,CAAA,EAChF,CAAC9H,EAAK,cAAc,QAAUyL,IAAS,OACvCpL,EAAiB3F,CAAO,EAC5BsG,KAEAhB,EAAK,gBACLkB,KACIxG,IAAY,OACZsF,EAAK,mBAAmByL,CAAI,EAAI/Q,EAAQ,YAAW,EAAG,WAEtDsF,EAAK,mBAAmB,gBAAgByL,CAAI,EAChDzL,EAAK,mBAAmB,SACpB,CAAC,CAAC0L,GACEhR,IAAY,QACZgR,EAAe,YAAW,IAAOhR,EAAQ,YAAW,EAE5E,CACK,CACD,SAAS+G,IAAc,CACnB,IAAIkK,EAAW,CACX,OACA,cACA,aACA,sBACA,aACA,YACA,aACA,aACA,WACA,wBACA,SACA,SACA,gBACA,eACZ,EACYC,EAAa1M,EAASA,EAAS,CAAA,EAAI,KAAK,MAAM,KAAK,UAAUY,EAAQ,SAAW,CAAA,CAAE,CAAC,CAAC,EAAGC,CAAc,EACrGpE,EAAU,CAAA,EACdqE,EAAK,OAAO,UAAY4L,EAAW,UACnC5L,EAAK,OAAO,WAAa4L,EAAW,WACpC,OAAO,eAAe5L,EAAK,OAAQ,SAAU,CACzC,IAAK,UAAY,CAAE,OAAOA,EAAK,OAAO,OAAU,EAChD,IAAK,SAAU6L,EAAO,CAClB7L,EAAK,OAAO,QAAU8L,GAAeD,CAAK,CAC7C,CACb,CAAS,EACD,OAAO,eAAe7L,EAAK,OAAQ,UAAW,CAC1C,IAAK,UAAY,CAAE,OAAOA,EAAK,OAAO,QAAW,EACjD,IAAK,SAAU6L,EAAO,CAClB7L,EAAK,OAAO,SAAW8L,GAAeD,CAAK,CAC9C,CACb,CAAS,EACD,IAAIE,EAAWH,EAAW,OAAS,OACnC,GAAI,CAACA,EAAW,aAAeA,EAAW,YAAcG,GAAW,CAC/D,IAAIC,EAAoB9L,EAAU,cAAc,YAAcD,GAAe,WAC7EtE,EAAQ,WACJiQ,EAAW,YAAcG,EACnB,OAASH,EAAW,cAAgB,KAAO,IAC3CI,EAAoB,QAAUJ,EAAW,cAAgB,KAAO,GAC7E,CACD,GAAIA,EAAW,WACVA,EAAW,YAAcG,IAC1B,CAACH,EAAW,UAAW,CACvB,IAAIK,EAAmB/L,EAAU,cAAc,WAAaD,GAAe,UAC3EtE,EAAQ,UACJiQ,EAAW,YAAcG,EACnB,OAASH,EAAW,cAAgB,OAAS,MAC7CK,GAAoB,QAAUL,EAAW,cAAgB,KAAO,IAAM,KACnF,CACD,OAAO,eAAe5L,EAAK,OAAQ,UAAW,CAC1C,IAAK,UAAY,CAAE,OAAOA,EAAK,OAAO,QAAW,EACjD,IAAKwL,GAAiB,KAAK,CACvC,CAAS,EACD,OAAO,eAAexL,EAAK,OAAQ,UAAW,CAC1C,IAAK,UAAY,CAAE,OAAOA,EAAK,OAAO,QAAW,EACjD,IAAKwL,GAAiB,KAAK,CACvC,CAAS,EACD,IAAIU,EAAmB,SAAUT,EAAM,CAAE,OAAO,SAAU/N,EAAK,CAC3DsC,EAAK,OAAOyL,IAAS,MAAQ,WAAa,UAAU,EAAIzL,EAAK,UAAUtC,EAAK,OAAO,CACtF,GACD,OAAO,eAAesC,EAAK,OAAQ,UAAW,CAC1C,IAAK,UAAY,CAAE,OAAOA,EAAK,OAAO,QAAW,EACjD,IAAKkM,EAAiB,KAAK,CACvC,CAAS,EACD,OAAO,eAAelM,EAAK,OAAQ,UAAW,CAC1C,IAAK,UAAY,CAAE,OAAOA,EAAK,OAAO,QAAW,EACjD,IAAKkM,EAAiB,KAAK,CACvC,CAAS,EACGN,EAAW,OAAS,SACpB5L,EAAK,OAAO,WAAa,GACzBA,EAAK,OAAO,WAAa,IAE7B,OAAO,OAAOA,EAAK,OAAQrE,EAASiQ,CAAU,EAC9C,QAASpP,EAAI,EAAGA,EAAImP,EAAS,OAAQnP,IACjCwD,EAAK,OAAO2L,EAASnP,CAAC,CAAC,EACnBwD,EAAK,OAAO2L,EAASnP,CAAC,CAAC,IAAM,IACzBwD,EAAK,OAAO2L,EAASnP,CAAC,CAAC,IAAM,OACzC/E,GAAM,OAAO,SAAU0U,EAAM,CAAE,OAAOnM,EAAK,OAAOmM,CAAI,IAAM,MAAU,CAAE,EAAE,QAAQ,SAAUA,EAAM,CAC9FnM,EAAK,OAAOmM,CAAI,EAAItT,GAASmH,EAAK,OAAOmM,CAAI,GAAK,CAAE,CAAA,EAAE,IAAIhK,CAAc,CACpF,CAAS,EACDnC,EAAK,SACD,CAACA,EAAK,OAAO,eACT,CAACA,EAAK,OAAO,QACbA,EAAK,OAAO,OAAS,UACrB,CAACA,EAAK,OAAO,QAAQ,QACrB,CAACA,EAAK,OAAO,QACb,CAACA,EAAK,OAAO,aACb,iEAAiE,KAAK,UAAU,SAAS,EACjG,QAASxD,EAAI,EAAGA,EAAIwD,EAAK,OAAO,QAAQ,OAAQxD,IAAK,CACjD,IAAI4P,EAAapM,EAAK,OAAO,QAAQxD,CAAC,EAAEwD,CAAI,GAAK,GACjD,QAAS1I,KAAO8U,EACR3U,GAAM,QAAQH,CAAG,EAAI,GACrB0I,EAAK,OAAO1I,CAAG,EAAIuB,GAASuT,EAAW9U,CAAG,CAAC,EACtC,IAAI6K,CAAc,EAClB,OAAOnC,EAAK,OAAO1I,CAAG,CAAC,EAEvB,OAAOsU,EAAWtU,CAAG,EAAM,MAChC0I,EAAK,OAAO1I,CAAG,EAAI8U,EAAW9U,CAAG,EAE5C,CACIsU,EAAW,gBACZ5L,EAAK,OAAO,cACRqM,GAAY,EAAG,UAAY,IAAMrM,EAAK,OAAO,eAErDiC,EAAa,eAAe,CAC/B,CACD,SAASoK,IAAe,CACpB,OAAOrM,EAAK,OAAO,KACbF,EAAQ,cAAc,cAAc,EACpCA,CACT,CACD,SAAS4B,IAAc,CACf,OAAO1B,EAAK,OAAO,QAAW,UAC9B,OAAOE,EAAU,MAAMF,EAAK,OAAO,MAAM,EAAM,KAC/CA,EAAK,OAAO,aAAa,IAAI,MAAM,6BAA+BA,EAAK,OAAO,MAAM,CAAC,EACzFA,EAAK,KAAOd,EAASA,EAAS,CAAE,EAAEgB,EAAU,MAAM,OAAO,EAAI,OAAOF,EAAK,OAAO,QAAW,SACrFA,EAAK,OAAO,OACZA,EAAK,OAAO,SAAW,UACnBE,EAAU,MAAMF,EAAK,OAAO,MAAM,EAClC,QACVtE,EAAW,EAAI,IAAMsE,EAAK,KAAK,SAAS,UAAU,KAAK,GAAG,EAAI,IAC9DtE,EAAW,EAAI,IAAMsE,EAAK,KAAK,SAAS,SAAS,KAAK,GAAG,EAAI,IAC7DtE,EAAW,EAAI,IAAMsE,EAAK,KAAK,OAAO,UAAU,KAAK,GAAG,EAAI,IAC5DtE,EAAW,EAAI,IAAMsE,EAAK,KAAK,OAAO,SAAS,KAAK,GAAG,EAAI,IAC3DtE,EAAW,EAAI,IAAMsE,EAAK,KAAK,KAAK,CAAC,EAAI,IAAMA,EAAK,KAAK,KAAK,CAAC,EAAI,IAAMA,EAAK,KAAK,KAAK,CAAC,EAAE,YAAa,EAAG,IAAMA,EAAK,KAAK,KAAK,CAAC,EAAE,YAAW,EAAK,IACnJ,IAAI4L,EAAa1M,EAASA,EAAS,CAAA,EAAIa,CAAc,EAAG,KAAK,MAAM,KAAK,UAAUD,EAAQ,SAAW,CAAE,CAAA,CAAC,CAAC,EACrG8L,EAAW,YAAc,QACzB1L,EAAU,cAAc,YAAc,SACtCF,EAAK,OAAO,UAAYA,EAAK,KAAK,WAEtCA,EAAK,WAAanE,GAAoBmE,CAAI,EAC1CA,EAAK,UAAYtD,GAAiB,CAAE,OAAQsD,EAAK,OAAQ,KAAMA,EAAK,IAAI,CAAE,CAC7E,CACD,SAASM,GAAiBgM,EAAuB,CAC7C,GAAI,OAAOtM,EAAK,OAAO,UAAa,WAChC,OAAO,KAAKA,EAAK,OAAO,SAASA,EAAMsM,CAAqB,EAEhE,GAAItM,EAAK,oBAAsB,OAE/B,CAAAiC,EAAa,uBAAuB,EACpC,IAAIqJ,EAAkBgB,GAAyBtM,EAAK,iBAChDuM,EAAiB,MAAM,UAAU,OAAO,KAAKvM,EAAK,kBAAkB,SAAW,SAAUwM,GAAKC,GAAO,CAAE,OAAOD,GAAMC,GAAM,YAAe,EAAG,CAAC,EAAGC,EAAgB1M,EAAK,kBAAkB,YAAa2M,EAAY3M,EAAK,OAAO,SAAS,MAAM,GAAG,EAAG4M,EAAoBD,EAAU,CAAC,EAAGE,EAAsBF,EAAU,OAAS,EAAIA,EAAU,CAAC,EAAI,KAAMG,EAAcxB,EAAgB,sBAAqB,EAAIyB,EAAqB,OAAO,YAAcD,EAAY,OAAQE,EAAYJ,IAAsB,SAC3eA,IAAsB,SACnBG,EAAqBR,GACrBO,EAAY,IAAMP,EACtBU,EAAM,OAAO,YACbH,EAAY,KACVE,EAA+C,CAACT,EAAiB,EAArDjB,EAAgB,aAAe,GAGjD,GAFAvS,EAAYiH,EAAK,kBAAmB,WAAY,CAACgN,CAAS,EAC1DjU,EAAYiH,EAAK,kBAAmB,cAAegN,CAAS,EACxD,CAAAhN,EAAK,OAAO,OAEhB,KAAIkN,EAAO,OAAO,YAAcJ,EAAY,KACxCK,EAAW,GACXC,EAAU,GACVP,IAAwB,UACxBK,IAASR,EAAgBI,EAAY,OAAS,EAC9CK,EAAW,IAENN,IAAwB,UAC7BK,GAAQR,EAAgBI,EAAY,MACpCM,EAAU,IAEdrU,EAAYiH,EAAK,kBAAmB,YAAa,CAACmN,GAAY,CAACC,CAAO,EACtErU,EAAYiH,EAAK,kBAAmB,cAAemN,CAAQ,EAC3DpU,EAAYiH,EAAK,kBAAmB,aAAcoN,CAAO,EACzD,IAAIC,GAAQ,OAAO,SAAS,KAAK,aAC5B,OAAO,YAAcP,EAAY,OAClCQ,EAAYJ,EAAOR,EAAgB,OAAO,SAAS,KAAK,YACxDa,GAAaF,GAAQX,EAAgB,OAAO,SAAS,KAAK,YAE9D,GADA3T,EAAYiH,EAAK,kBAAmB,YAAasN,CAAS,EACtD,CAAAtN,EAAK,OAAO,OAGhB,GADAA,EAAK,kBAAkB,MAAM,IAAMiN,EAAM,KACrC,CAACK,EACDtN,EAAK,kBAAkB,MAAM,KAAOkN,EAAO,KAC3ClN,EAAK,kBAAkB,MAAM,MAAQ,eAEhC,CAACuN,GACNvN,EAAK,kBAAkB,MAAM,KAAO,OACpCA,EAAK,kBAAkB,MAAM,MAAQqN,GAAQ,SAE5C,CACD,IAAIG,GAAMC,KACV,GAAID,KAAQ,OACR,OACJ,IAAIE,GAAY,OAAO,SAAS,KAAK,YACjCC,GAAa,KAAK,IAAI,EAAGD,GAAY,EAAIhB,EAAgB,CAAC,EAC1DkB,GAAe,wCACfC,GAAc,uCACdC,GAAcN,GAAI,SAAS,OAC3BO,GAAc,SAAWjB,EAAY,KAAO,kBAChD/T,EAAYiH,EAAK,kBAAmB,YAAa,EAAK,EACtDjH,EAAYiH,EAAK,kBAAmB,aAAc,EAAI,EACtDwN,GAAI,WAAWI,GAAe,IAAMC,GAAcE,GAAaD,EAAW,EAC1E9N,EAAK,kBAAkB,MAAM,KAAO2N,GAAa,KACjD3N,EAAK,kBAAkB,MAAM,MAAQ,MACxC,GACJ,CACD,SAASyN,IAAwB,CAE7B,QADIO,EAAgB,KACX,EAAI,EAAG,EAAI,SAAS,YAAY,OAAQ,IAAK,CAClD,IAAIC,EAAQ,SAAS,YAAY,CAAC,EAClC,GAAKA,EAAM,SAEX,IAAI,CACAA,EAAM,QACT,MACW,CACR,QACH,CACDD,EAAgBC,EAChB,MACH,CACD,OAAOD,GAAwCE,GAAgB,CAClE,CACD,SAASA,IAAmB,CACxB,IAAIC,EAAQ,SAAS,cAAc,OAAO,EAC1C,gBAAS,KAAK,YAAYA,CAAK,EACxBA,EAAM,KAChB,CACD,SAASjN,IAAS,CACVlB,EAAK,OAAO,YAAcA,EAAK,WAEnC0E,IACA+D,KACAnD,KACH,CACD,SAASgF,IAAgB,CACrBtK,EAAK,OAAO,QACR,OAAO,UAAU,UAAU,QAAQ,MAAM,IAAM,IAC/C,UAAU,mBAAqB,OAC/B,WAAWA,EAAK,MAAO,CAAC,EAGxBA,EAAK,MAAK,CAEjB,CACD,SAASkE,GAAW7K,EAAG,CACnBA,EAAE,eAAc,EAChBA,EAAE,gBAAe,EACjB,IAAI+U,EAAe,SAAUvT,EAAK,CAC9B,OAAOA,EAAI,WACPA,EAAI,UAAU,SAAS,eAAe,GACtC,CAACA,EAAI,UAAU,SAAS,oBAAoB,GAC5C,CAACA,EAAI,UAAU,SAAS,YAAY,CACpD,EACYnC,EAAIc,GAAWS,EAAeZ,CAAC,EAAG+U,CAAY,EAClD,GAAI1V,IAAM,OAEV,KAAImG,EAASnG,EACT2V,EAAgBrO,EAAK,sBAAwB,IAAI,KAAKnB,EAAO,QAAQ,QAAS,CAAA,EAC9EyP,GAAqBD,EAAa,SAAU,EAAGrO,EAAK,cACpDqO,EAAa,SAAU,EACnBrO,EAAK,aAAeA,EAAK,OAAO,WAAa,IACjDA,EAAK,OAAO,OAAS,QAEzB,GADAA,EAAK,iBAAmBnB,EACpBmB,EAAK,OAAO,OAAS,SACrBA,EAAK,cAAgB,CAACqO,CAAY,UAC7BrO,EAAK,OAAO,OAAS,WAAY,CACtC,IAAIuO,EAAgB3I,GAAeyI,CAAY,EAC3CE,EACAvO,EAAK,cAAc,OAAO,SAASuO,CAAa,EAAG,CAAC,EAEpDvO,EAAK,cAAc,KAAKqO,CAAY,CAC3C,MACQrO,EAAK,OAAO,OAAS,UACtBA,EAAK,cAAc,SAAW,GAC9BA,EAAK,MAAM,GAAO,EAAK,EAE3BA,EAAK,sBAAwBqO,EAC7BrO,EAAK,cAAc,KAAKqO,CAAY,EAChC1Q,EAAa0Q,EAAcrO,EAAK,cAAc,CAAC,EAAG,EAAI,IAAM,GAC5DA,EAAK,cAAc,KAAK,SAAUP,EAAG+O,EAAG,CAAE,OAAO/O,EAAE,QAAO,EAAK+O,EAAE,QAAS,CAAG,CAAA,GAGrF,GADA/L,IACI6L,EAAmB,CACnB,IAAI1E,EAAY5J,EAAK,cAAgBqO,EAAa,YAAW,EAC7DrO,EAAK,YAAcqO,EAAa,cAChCrO,EAAK,aAAeqO,EAAa,WAC7BzE,IACA3H,EAAa,cAAc,EAC3ByC,KAEJzC,EAAa,eAAe,CAC/B,CAcD,GAbAwG,KACAnD,KACAtE,IACI,CAACsN,GACDtO,EAAK,OAAO,OAAS,SACrBA,EAAK,OAAO,aAAe,EAC3B8F,EAAejH,CAAM,EAChBmB,EAAK,mBAAqB,QAC/BA,EAAK,cAAgB,QACrBA,EAAK,kBAAoBA,EAAK,iBAAiB,MAAK,EAEpDA,EAAK,cAAgB,QACrBA,EAAK,cAAgB,QAAaA,EAAK,YAAY,MAAK,EACxDA,EAAK,OAAO,cAAe,CAC3B,IAAIyO,EAASzO,EAAK,OAAO,OAAS,UAAY,CAACA,EAAK,OAAO,WACvD0O,EAAQ1O,EAAK,OAAO,OAAS,SAC7BA,EAAK,cAAc,SAAW,GAC9B,CAACA,EAAK,OAAO,YACbyO,GAAUC,IACVpE,IAEP,CACD5G,IACH,CACD,IAAIiL,GAAY,CACZ,OAAQ,CAACjN,GAAaoH,EAAc,EACpC,WAAY,CAACN,GAAazG,EAAkBsD,EAAa,EACzD,QAAS,CAACtE,CAAU,EACpB,QAAS,CAACA,CAAU,EACpB,gBAAiB,CAAC6N,EAAqB,EACvC,WAAY,CACR,UAAY,CACJ5O,EAAK,OAAO,aAAe,IAC3BI,EAAKJ,EAAK,OAAQ,QAASA,EAAK,IAAI,EACpCI,EAAKJ,EAAK,OAAQ,QAASA,EAAK,IAAI,IAGpCA,EAAK,OAAO,oBAAoB,QAASA,EAAK,IAAI,EAClDA,EAAK,OAAO,oBAAoB,QAASA,EAAK,IAAI,EAEzD,CACJ,CACT,EACI,SAASmB,GAAI0N,EAAQtX,EAAO,CACxB,GAAIsX,IAAW,MAAQ,OAAOA,GAAW,SAAU,CAC/C,OAAO,OAAO7O,EAAK,OAAQ6O,CAAM,EACjC,QAASvX,KAAOuX,EACRF,GAAUrX,CAAG,IAAM,QACnBqX,GAAUrX,CAAG,EAAE,QAAQ,SAAUmT,EAAG,CAAE,OAAOA,GAAI,CAAE,CAE9D,MAEGzK,EAAK,OAAO6O,CAAM,EAAItX,EAClBoX,GAAUE,CAAM,IAAM,OACtBF,GAAUE,CAAM,EAAE,QAAQ,SAAUpE,EAAG,CAAE,OAAOA,GAAI,CAAE,EACjDhT,GAAM,QAAQoX,CAAM,EAAI,KAC7B7O,EAAK,OAAO6O,CAAM,EAAIhW,GAAStB,CAAK,GAE5CyI,EAAK,OAAM,EACXgB,EAAY,EAAI,CACnB,CACD,SAAS8N,GAAgBC,EAAW/R,EAAQ,CACxC,IAAI6O,EAAQ,CAAA,EACZ,GAAIkD,aAAqB,MACrBlD,EAAQkD,EAAU,IAAI,SAAUjH,EAAG,CAAE,OAAO9H,EAAK,UAAU8H,EAAG9K,CAAM,CAAI,CAAA,UACnE+R,aAAqB,MAAQ,OAAOA,GAAc,SACvDlD,EAAQ,CAAC7L,EAAK,UAAU+O,EAAW/R,CAAM,CAAC,UACrC,OAAO+R,GAAc,SAC1B,OAAQ/O,EAAK,OAAO,KAAI,CACpB,IAAK,SACL,IAAK,OACD6L,EAAQ,CAAC7L,EAAK,UAAU+O,EAAW/R,CAAM,CAAC,EAC1C,MACJ,IAAK,WACD6O,EAAQkD,EACH,MAAM/O,EAAK,OAAO,WAAW,EAC7B,IAAI,SAAUnI,EAAM,CAAE,OAAOmI,EAAK,UAAUnI,EAAMmF,CAAM,CAAE,CAAE,EACjE,MACJ,IAAK,QACD6O,EAAQkD,EACH,MAAM/O,EAAK,KAAK,cAAc,EAC9B,IAAI,SAAUnI,EAAM,CAAE,OAAOmI,EAAK,UAAUnI,EAAMmF,CAAM,CAAE,CAAE,EACjE,KAGP,MAGDgD,EAAK,OAAO,aAAa,IAAI,MAAM,0BAA4B,KAAK,UAAU+O,CAAS,CAAC,CAAC,EAC7F/O,EAAK,cAAiBA,EAAK,OAAO,oBAC5B6L,EACAA,EAAM,OAAO,SAAU/D,EAAG,CAAE,OAAOA,aAAa,MAAQhH,EAAUgH,EAAG,EAAK,CAAE,CAAE,EAChF9H,EAAK,OAAO,OAAS,SACrBA,EAAK,cAAc,KAAK,SAAUP,EAAG+O,EAAG,CAAE,OAAO/O,EAAE,QAAO,EAAK+O,EAAE,QAAS,CAAG,CAAA,CACpF,CACD,SAASpN,GAAQvJ,EAAM6L,EAAe1G,EAAQ,CAG1C,GAFI0G,IAAkB,SAAUA,EAAgB,IAC5C1G,IAAW,SAAUA,EAASgD,EAAK,OAAO,YACzCnI,IAAS,GAAK,CAACA,GAAUA,aAAgB,OAASA,EAAK,SAAW,EACnE,OAAOmI,EAAK,MAAM0D,CAAa,EACnCoL,GAAgBjX,EAAMmF,CAAM,EAC5BgD,EAAK,sBACDA,EAAK,cAAcA,EAAK,cAAc,OAAS,CAAC,EACpDA,EAAK,OAAM,EACXe,EAAW,OAAW2C,CAAa,EACnCrD,IACIL,EAAK,cAAc,SAAW,GAC9BA,EAAK,MAAM,EAAK,EAEpBgB,EAAY0C,CAAa,EACrBA,GACAzB,EAAa,UAAU,CAC9B,CACD,SAAS6J,GAAerP,EAAK,CACzB,OAAOA,EACF,MAAO,EACP,IAAI,SAAUuS,EAAM,CACrB,OAAI,OAAOA,GAAS,UAChB,OAAOA,GAAS,UAChBA,aAAgB,KACThP,EAAK,UAAUgP,EAAM,OAAW,EAAI,EAEtCA,GACL,OAAOA,GAAS,UAChBA,EAAK,MACLA,EAAK,GACE,CACH,KAAMhP,EAAK,UAAUgP,EAAK,KAAM,MAAS,EACzC,GAAIhP,EAAK,UAAUgP,EAAK,GAAI,MAAS,CACzD,EACmBA,CACnB,CAAS,EACI,OAAO,SAAUvE,EAAG,CAAE,OAAOA,CAAI,CAAA,CACzC,CACD,SAAS7I,IAAa,CAClB5B,EAAK,cAAgB,GACrBA,EAAK,IAAMA,EAAK,UAAUA,EAAK,OAAO,GAAG,GAAK,IAAI,KAClD,IAAIiP,EAAgBjP,EAAK,OAAO,eAC1BA,EAAK,MAAM,WAAa,SACtBA,EAAK,MAAM,WAAa,aACxBA,EAAK,MAAM,aACXA,EAAK,MAAM,QAAUA,EAAK,MAAM,YAC9B,KACAA,EAAK,MAAM,OACjBiP,GACAH,GAAgBG,EAAejP,EAAK,OAAO,UAAU,EACzDA,EAAK,aACDA,EAAK,cAAc,OAAS,EACtBA,EAAK,cAAc,CAAC,EACpBA,EAAK,OAAO,SACVA,EAAK,OAAO,QAAQ,QAAS,EAAGA,EAAK,IAAI,QAAS,EAChDA,EAAK,OAAO,QACZA,EAAK,OAAO,SACVA,EAAK,OAAO,QAAQ,QAAS,EAAGA,EAAK,IAAI,QAAS,EAChDA,EAAK,OAAO,QACZA,EAAK,IACvBA,EAAK,YAAcA,EAAK,aAAa,YAAW,EAChDA,EAAK,aAAeA,EAAK,aAAa,SAAQ,EAC1CA,EAAK,cAAc,OAAS,IAC5BA,EAAK,sBAAwBA,EAAK,cAAc,CAAC,GACjDA,EAAK,OAAO,UAAY,SACxBA,EAAK,OAAO,QAAUA,EAAK,UAAUA,EAAK,OAAO,QAAS,KAAK,GAC/DA,EAAK,OAAO,UAAY,SACxBA,EAAK,OAAO,QAAUA,EAAK,UAAUA,EAAK,OAAO,QAAS,KAAK,GACnEA,EAAK,eACD,CAAC,CAACA,EAAK,OAAO,UACTA,EAAK,OAAO,QAAQ,SAAU,EAAG,GAC9BA,EAAK,OAAO,QAAQ,WAAY,EAAG,GACnCA,EAAK,OAAO,QAAQ,WAAY,EAAG,GAC/CA,EAAK,eACD,CAAC,CAACA,EAAK,OAAO,UACTA,EAAK,OAAO,QAAQ,SAAU,EAAG,GAC9BA,EAAK,OAAO,QAAQ,WAAY,EAAG,GACnCA,EAAK,OAAO,QAAQ,WAAY,EAAG,EAClD,CACD,SAAS2B,IAAc,CAEnB,GADA3B,EAAK,MAAQqM,KACT,CAACrM,EAAK,MAAO,CACbA,EAAK,OAAO,aAAa,IAAI,MAAM,iCAAiC,CAAC,EACrE,MACH,CACDA,EAAK,MAAM,MAAQA,EAAK,MAAM,KAC9BA,EAAK,MAAM,KAAO,OAClBA,EAAK,MAAM,UAAU,IAAI,iBAAiB,EAC1CA,EAAK,OAASA,EAAK,MACfA,EAAK,OAAO,WACZA,EAAK,SAAW9G,EAAc8G,EAAK,MAAM,SAAUA,EAAK,OAAO,aAAa,EAC5EA,EAAK,OAASA,EAAK,SACnBA,EAAK,SAAS,YAAcA,EAAK,MAAM,YACvCA,EAAK,SAAS,SAAWA,EAAK,MAAM,SACpCA,EAAK,SAAS,SAAWA,EAAK,MAAM,SACpCA,EAAK,SAAS,SAAWA,EAAK,MAAM,SACpCA,EAAK,SAAS,KAAO,OACrBA,EAAK,MAAM,aAAa,OAAQ,QAAQ,EACpC,CAACA,EAAK,OAAO,QAAUA,EAAK,MAAM,YAClCA,EAAK,MAAM,WAAW,aAAaA,EAAK,SAAUA,EAAK,MAAM,WAAW,GAE3EA,EAAK,OAAO,YACbA,EAAK,OAAO,aAAa,WAAY,UAAU,EACnD4O,IACH,CACD,SAASA,IAAwB,CAC7B5O,EAAK,iBAAmBA,EAAK,OAAO,iBAAmBA,EAAK,MAC/D,CACD,SAAS4D,IAAc,CACnB,IAAIsL,EAAYlP,EAAK,OAAO,WACtBA,EAAK,OAAO,WACR,OACA,iBACJ,OACNA,EAAK,YAAc9G,EAAc,QAAS8G,EAAK,MAAM,UAAY,mBAAmB,EACpFA,EAAK,YAAY,SAAW,EAC5BA,EAAK,YAAY,KAAOkP,EACxBlP,EAAK,YAAY,SAAWA,EAAK,MAAM,SACvCA,EAAK,YAAY,SAAWA,EAAK,MAAM,SACvCA,EAAK,YAAY,YAAcA,EAAK,MAAM,YAC1CA,EAAK,gBACDkP,IAAc,iBACR,gBACAA,IAAc,OACV,QACA,QACVlP,EAAK,cAAc,OAAS,IAC5BA,EAAK,YAAY,aAAeA,EAAK,YAAY,MAAQA,EAAK,WAAWA,EAAK,cAAc,CAAC,EAAGA,EAAK,eAAe,GAEpHA,EAAK,OAAO,UACZA,EAAK,YAAY,IAAMA,EAAK,WAAWA,EAAK,OAAO,QAAS,OAAO,GACnEA,EAAK,OAAO,UACZA,EAAK,YAAY,IAAMA,EAAK,WAAWA,EAAK,OAAO,QAAS,OAAO,GACnEA,EAAK,MAAM,aAAa,MAAM,IAC9BA,EAAK,YAAY,KAAO,OAAOA,EAAK,MAAM,aAAa,MAAM,CAAC,GAClEA,EAAK,MAAM,KAAO,SACdA,EAAK,WAAa,SAClBA,EAAK,SAAS,KAAO,UACzB,GAAI,CACIA,EAAK,MAAM,YACXA,EAAK,MAAM,WAAW,aAAaA,EAAK,YAAaA,EAAK,MAAM,WAAW,CAClF,MACU,CAAG,CACdI,EAAKJ,EAAK,YAAa,SAAU,SAAU3G,EAAG,CAC1C2G,EAAK,QAAQ/F,EAAeZ,CAAC,EAAE,MAAO,GAAO2G,EAAK,eAAe,EACjEiC,EAAa,UAAU,EACvBA,EAAa,SAAS,CAClC,CAAS,CACJ,CACD,SAASZ,GAAOhI,EAAG,CACf,GAAI2G,EAAK,SAAW,GAChB,OAAOA,EAAK,QAChBA,EAAK,KAAK3G,CAAC,CACd,CACD,SAAS4I,EAAa/H,EAAOiV,EAAM,CAC/B,GAAInP,EAAK,SAAW,OAEpB,KAAIoP,EAAQpP,EAAK,OAAO9F,CAAK,EAC7B,GAAIkV,IAAU,QAAaA,EAAM,OAAS,EACtC,QAAS5S,EAAI,EAAG4S,EAAM5S,CAAC,GAAKA,EAAI4S,EAAM,OAAQ5S,IAC1C4S,EAAM5S,CAAC,EAAEwD,EAAK,cAAeA,EAAK,MAAM,MAAOA,EAAMmP,CAAI,EAE7DjV,IAAU,aACV8F,EAAK,MAAM,cAAc+E,GAAY,QAAQ,CAAC,EAC9C/E,EAAK,MAAM,cAAc+E,GAAY,OAAO,CAAC,GAEpD,CACD,SAASA,GAAYsK,EAAM,CACvB,IAAIhW,EAAI,SAAS,YAAY,OAAO,EACpC,OAAAA,EAAE,UAAUgW,EAAM,GAAM,EAAI,EACrBhW,CACV,CACD,SAASuM,GAAe/N,EAAM,CAC1B,QAAS,EAAI,EAAG,EAAImI,EAAK,cAAc,OAAQ,IAAK,CAChD,IAAIqO,EAAerO,EAAK,cAAc,CAAC,EACvC,GAAIqO,aAAwB,MACxB1Q,EAAa0Q,EAAcxW,CAAI,IAAM,EACrC,MAAO,GAAK,CACnB,CACD,MAAO,EACV,CACD,SAASgO,GAAchO,EAAM,CACzB,OAAImI,EAAK,OAAO,OAAS,SAAWA,EAAK,cAAc,OAAS,EACrD,GACHrC,EAAa9F,EAAMmI,EAAK,cAAc,CAAC,CAAC,GAAK,GACjDrC,EAAa9F,EAAMmI,EAAK,cAAc,CAAC,CAAC,GAAK,CACpD,CACD,SAASyI,IAA+B,CAChCzI,EAAK,OAAO,YAAcA,EAAK,UAAY,CAACA,EAAK,WAErDA,EAAK,aAAa,QAAQ,SAAUsI,EAAa,EAAG,CAChD,IAAIR,EAAI,IAAI,KAAK9H,EAAK,YAAaA,EAAK,aAAc,CAAC,EACvD8H,EAAE,SAAS9H,EAAK,aAAe,CAAC,EAC5BA,EAAK,OAAO,WAAa,GACzBA,EAAK,OAAO,oBAAsB,SAClCA,EAAK,cAAc,CAAC,EAAE,YAClB3F,GAAWyN,EAAE,SAAQ,EAAI9H,EAAK,OAAO,sBAAuBA,EAAK,IAAI,EAAI,IAG7EA,EAAK,wBAAwB,MAAQ8H,EAAE,SAAQ,EAAG,WAEtDQ,EAAY,MAAQR,EAAE,YAAa,EAAC,SAAQ,CACxD,CAAS,EACD9H,EAAK,oBACDA,EAAK,OAAO,UAAY,SACnBA,EAAK,cAAgBA,EAAK,OAAO,QAAQ,YAAa,EACjDA,EAAK,cAAgBA,EAAK,OAAO,QAAQ,SAAU,EACnDA,EAAK,YAAcA,EAAK,OAAO,QAAQ,YAAW,GAChEA,EAAK,oBACDA,EAAK,OAAO,UAAY,SACnBA,EAAK,cAAgBA,EAAK,OAAO,QAAQ,YAAa,EACjDA,EAAK,aAAe,EAAIA,EAAK,OAAO,QAAQ,SAAU,EACtDA,EAAK,YAAcA,EAAK,OAAO,QAAQ,YAAW,GACnE,CACD,SAASiK,GAAWqF,EAAgB,CAChC,IAAItS,EAASsS,IACRtP,EAAK,OAAO,SAAWA,EAAK,OAAO,UAAYA,EAAK,OAAO,YAChE,OAAOA,EAAK,cACP,IAAI,SAAUuP,EAAM,CAAE,OAAOvP,EAAK,WAAWuP,EAAMvS,CAAM,EAAI,EAC7D,OAAO,SAAU8K,EAAGtL,EAAGC,EAAK,CAC7B,OAAOuD,EAAK,OAAO,OAAS,SACxBA,EAAK,OAAO,YACZvD,EAAI,QAAQqL,CAAC,IAAMtL,CACnC,CAAS,EACI,KAAKwD,EAAK,OAAO,OAAS,QACzBA,EAAK,OAAO,YACZA,EAAK,KAAK,cAAc,CACjC,CACD,SAASgB,EAAY0C,EAAe,CAC5BA,IAAkB,SAAUA,EAAgB,IAC5C1D,EAAK,cAAgB,QAAaA,EAAK,kBACvCA,EAAK,YAAY,MACbA,EAAK,wBAA0B,OACzBA,EAAK,WAAWA,EAAK,sBAAuBA,EAAK,eAAe,EAChE,IAEdA,EAAK,MAAM,MAAQiK,GAAWjK,EAAK,OAAO,UAAU,EAChDA,EAAK,WAAa,SAClBA,EAAK,SAAS,MAAQiK,GAAWjK,EAAK,OAAO,SAAS,GAEtD0D,IAAkB,IAClBzB,EAAa,eAAe,CACnC,CACD,SAASgC,GAAgB5K,EAAG,CACxB,IAAIiK,EAAcrJ,EAAeZ,CAAC,EAC9BmW,EAAcxP,EAAK,aAAa,SAASsD,CAAW,EACpDmM,EAAczP,EAAK,aAAa,SAASsD,CAAW,EACpDkM,GAAeC,EACflP,GAAYiP,EAAc,GAAK,CAAC,EAE3BxP,EAAK,aAAa,QAAQsD,CAAW,GAAK,EAC/CA,EAAY,OAAM,EAEbA,EAAY,UAAU,SAAS,SAAS,EAC7CtD,EAAK,WAAWA,EAAK,YAAc,CAAC,EAE/BsD,EAAY,UAAU,SAAS,WAAW,GAC/CtD,EAAK,WAAWA,EAAK,YAAc,CAAC,CAE3C,CACD,SAASuC,GAAYlJ,EAAG,CACpBA,EAAE,eAAc,EAChB,IAAIqW,EAAYrW,EAAE,OAAS,UAAWiK,EAAcrJ,EAAeZ,CAAC,EAAGyL,EAAQxB,EAC3EtD,EAAK,OAAS,QAAasD,IAAgBtD,EAAK,OAChDA,EAAK,KAAK,YACNA,EAAK,KAAK,KAAK3H,EAAI2H,EAAK,KAAK,cAAgBA,EAAK,KAAK,KAAK,CAAC,CAAC,CAAC,GAEvE,IAAI2P,EAAM,WAAW7K,EAAM,aAAa,KAAK,CAAC,EAAG8K,EAAM,WAAW9K,EAAM,aAAa,KAAK,CAAC,EAAG+K,EAAO,WAAW/K,EAAM,aAAa,MAAM,CAAC,EAAGgL,EAAW,SAAShL,EAAM,MAAO,EAAE,EAAGF,EAAQvL,EAAE,QACxLqW,EAAarW,EAAE,QAAU,GAAK,EAAI,GAAM,GACzC0W,EAAWD,EAAWD,EAAOjL,EACjC,GAAI,OAAOE,EAAM,MAAU,KAAeA,EAAM,MAAM,SAAW,EAAG,CAChE,IAAIkL,EAAalL,IAAU9E,EAAK,YAAaiQ,EAAenL,IAAU9E,EAAK,cACvE+P,EAAWJ,GACXI,EACIH,EACIG,EACA1X,EAAI,CAAC2X,CAAU,GACd3X,EAAI2X,CAAU,GAAK3X,EAAI,CAAC2H,EAAK,IAAI,GACtCiQ,GACAtL,EAAkB,OAAW,GAAI3E,EAAK,WAAW,GAEhD+P,EAAWH,IAChBG,EACIjL,IAAU9E,EAAK,YAAc+P,EAAWH,EAAMvX,EAAI,CAAC2H,EAAK,IAAI,EAAI2P,EAChEM,GACAtL,EAAkB,OAAW,EAAG3E,EAAK,WAAW,GAEpDA,EAAK,MACLgQ,IACCH,IAAS,EACJE,EAAWD,IAAa,GACxB,KAAK,IAAIC,EAAWD,CAAQ,EAAID,KACtC7P,EAAK,KAAK,YACNA,EAAK,KAAK,KAAK3H,EAAI2H,EAAK,KAAK,cAAgBA,EAAK,KAAK,KAAK,CAAC,CAAC,CAAC,GAEvE8E,EAAM,MAAQ5M,EAAI6X,CAAQ,CAC7B,CACJ,CACD,OAAAvO,IACOxB,CACX,CACA,SAASkQ,GAAWC,EAAUnU,EAAQ,CAKlC,QAJIoU,EAAQ,MAAM,UAAU,MACvB,KAAKD,CAAQ,EACb,OAAO,SAAU1F,EAAG,CAAE,OAAOA,aAAa,WAAY,CAAE,EACzD4F,EAAY,CAAA,EACP7T,EAAI,EAAGA,EAAI4T,EAAM,OAAQ5T,IAAK,CACnC,IAAIjD,EAAO6W,EAAM5T,CAAC,EAClB,GAAI,CACA,GAAIjD,EAAK,aAAa,cAAc,IAAM,KACtC,SACAA,EAAK,aAAe,SACpBA,EAAK,WAAW,UAChBA,EAAK,WAAa,QAEtBA,EAAK,WAAasG,GAAkBtG,EAAMyC,GAAU,CAAE,CAAA,EACtDqU,EAAU,KAAK9W,EAAK,UAAU,CACjC,OACMF,EAAG,CACN,QAAQ,MAAMA,CAAC,CAClB,CACJ,CACD,OAAOgX,EAAU,SAAW,EAAIA,EAAU,CAAC,EAAIA,CACnD,CACI,OAAO,YAAgB,KACvB,OAAO,eAAmB,KAC1B,OAAO,SAAa,MACpB,eAAe,UAAU,UAAY,SAAS,UAAU,UAAY,SAAUrU,EAAQ,CAClF,OAAOkU,GAAW,KAAMlU,CAAM,CACtC,EACI,YAAY,UAAU,UAAY,SAAUA,EAAQ,CAChD,OAAOkU,GAAW,CAAC,IAAI,EAAGlU,CAAM,CACxC,GAEA,IAAIkE,EAAY,SAAUoQ,EAAUtU,EAAQ,CACxC,OAAI,OAAOsU,GAAa,SACbJ,GAAW,OAAO,SAAS,iBAAiBI,CAAQ,EAAGtU,CAAM,EAE/DsU,aAAoB,KAClBJ,GAAW,CAACI,CAAQ,EAAGtU,CAAM,EAG7BkU,GAAWI,EAAUtU,CAAM,CAE1C,EACAkE,EAAU,cAAgB,CAAA,EAC1BA,EAAU,MAAQ,CACd,GAAIhB,EAAS,CAAE,EAAEiB,EAAO,EACxB,QAASjB,EAAS,CAAE,EAAEiB,EAAO,CACjC,EACAD,EAAU,SAAW,SAAUhE,EAAM,CACjCgE,EAAU,MAAM,QAAUhB,EAASA,EAAS,GAAIgB,EAAU,MAAM,OAAO,EAAGhE,CAAI,CAClF,EACAgE,EAAU,YAAc,SAAUlE,EAAQ,CACtCkE,EAAU,cAAgBhB,EAASA,EAAS,CAAE,EAAEgB,EAAU,aAAa,EAAGlE,CAAM,CACpF,EACAkE,EAAU,UAAYxD,GAAiB,CAAA,CAAE,EACzCwD,EAAU,WAAarE,GAAoB,CAAA,CAAE,EAC7CqE,EAAU,aAAevC,EACrB,OAAO,OAAW,KAAe,OAAO,OAAO,GAAO,MACtD,OAAO,GAAG,UAAY,SAAU3B,EAAQ,CACpC,OAAOkU,GAAW,KAAMlU,CAAM,CACtC,GAEA,KAAK,UAAU,QAAU,SAAUqL,EAAM,CACrC,OAAO,IAAI,KAAK,KAAK,YAAa,EAAE,KAAK,SAAU,EAAE,KAAK,QAAS,GAAI,OAAOA,GAAS,SAAW,SAASA,EAAM,EAAE,EAAIA,EAAK,CAChI,EACI,OAAO,OAAW,MAClB,OAAO,UAAYnH,GCt/DvB,MAAMqQ,GAAa,mBAEnB,SAASC,IAAgC,CACvC,OAAO,SAAS,cAAc,4BAA4B,CAC5D,CAEA,SAASC,IAAgC,CACvC,OAAO,SAAS,cAAc,8BAA8B,CAC9D,CAEA,SAASC,IAA0B,CACjC,OAAO,SAAS,cAAc,qCAAqC,CACrE,CAEA,SAASC,IAA0B,CACjC,OAAO,SAAS,cAAc,yCAAyC,CACzE,CAEA,SAASC,IAAwB,CAC/B,OAAO,SAAS,iBAAiB,uBAAuB,CAC1D,CAEA,SAASC,GAA2B5I,EAAW,CAC7C,OAAO,SAAS,cAAc,iCAAiCA,CAAS,IAAI,CAC9E,CAEA,SAAS6I,IAAuC,CAC9C,MAAMC,EAAaH,KAEnB,OAAAG,EAAW,QAAS9I,GAAc,CAChC,GAAI,CAACA,EAAU,UAAU,SAASsI,EAAU,EAC1C,OAAOtI,CAEb,CAAG,EAEM8I,EAAW,CAAC,CACrB,CAEA,SAASC,IAAyB,CAChC,MAAMC,EAAcC,KAEpB,OAAAD,EAAY,QAASE,GAAe,CAClC,GAAIA,EAAW,UAAU,SAASZ,EAAU,EAC1C,OAAOY,CAEb,CAAG,EACMF,EAAY,CAAC,CACtB,CAEA,SAASG,IAA6B,CACpC,IAAInJ,EAAY6I,KAChB,OAAI7I,EACKA,EAAU,QAAQ,sBAE3BA,EAAY+I,GAAsB,EAC3B/I,EAAU,QAAQ,eAC3B,CAEA,SAASoJ,IAAiC,CACxC,MAAMC,EAAUF,KAChB,OAAO,SAAS,cAAc,2BAA2BE,CAAO,IAAI,CACtE,CAEA,SAASC,IAAqB,CAC5B,OAAO,SAAS,cAAc,0BAA0B,CAC1D,CAEA,SAASL,GAAoBM,EAAS,SAAU,CAC9C,OAAOA,EAAO,iBAAiB,6BAA6B,CAC9D,CAEA,SAASC,IAAsB,CAC7B,OAAO,SAAS,iBAAiB,8BAA8B,CACjE,CAEA,SAASC,IAAiB,CACxB,OAAO,SAAS,cAAc,iCAAiC,CACjE,CAEA,SAASC,IAAuB,CAC9B,OAAO,SAAS,iBAAiB,+BAA+B,CAClE,CAEA,SAASC,IAA0B,CACjC,OAAO,SAAS,iBAAiB,8BAA8B,CACjE,CAEA,SAASC,IAA0B,CACjC,OAAO,SAAS,iBAAiB,uBAAuB,CAC1D,CAEA,SAASC,IAA0B,CACjC,OAAO,SAAS,cAAc,8BAA8B,CAC9D,CAEA,SAASC,IAA4B,CACnC,OAAO,SAAS,cAAc,iCAAiC,CACjE,CAEA,SAASC,GAAwBR,EAAS,SAAU,CAClD,OAAOA,EAAO,iBAAiB,2BAA2B,CAC5D,CAEA,SAASS,IAAkB,CACzB,OAAO,SAAS,cAAc,sBAAsB,CACtD,CAEA,SAASC,IAAkB,CACzB,OAAO,SAAS,cAAc,YAAY,CAC5C,CAEA,SAASC,GAAkBb,EAAS,CAClC,OAAO,SAAS,cAAc,8BAA8BA,CAAO,GAAG,CACxE,CAMA,SAASc,GAA0BZ,EAAS,SAAU,CACpD,OAAOA,EAAO,iBAAiB,oCAAoC,CACrE,CAEA,SAASa,GAAuBC,EAAI,CAClC,OAAO,SAAS,cAAc,8BAA8BA,CAAE,IAAI,CACpE,CAEA,SAASC,IAAiB,CACxB,OAAO,SAAS,cAAc,gCAAgC,CAChE,CAEA,SAASC,IAA4B,CACnC,OAAO,SAAS,cAAc,sCAAsC,CACtE,CAEA,SAASC,GAAoBjB,EAAS,SAAU,CAC9C,OAAOA,EAAO,iBAAiB,uBAAuB,CACxD,CAEA,SAASkB,IAAqB,CAC5B,OAAO,SAAS,iBAAiB,gCAAgC,CACnE,CAEA,SAASC,IAAsB,CAC7B,OAAO,SAAS,iBAAiB,iCAAiC,CACpE,CAEA,SAASC,GAAqBC,EAAQ,CACpC,OAAO,SAAS,cACd,qCAAqCA,CAAM,IAC/C,CACA,CAEA,SAASC,GAAsBD,EAAQ,CACrC,OAAO,SAAS,cACd,sCAAsCA,CAAM,IAChD,CACA,CAEA,SAASE,GAA2BF,EAAQ,CAC1CH,GAAoB,EAAC,QAASM,GAAU,CAClCA,EAAM,QAAQ,yBAA2BH,GAC3CG,EAAM,UAAU,IAAIzC,EAAU,CAEpC,CAAG,EACDoC,GAAqB,EAAC,QAASM,GAAW,CACpCA,EAAO,QAAQ,0BAA4BJ,GAC7CI,EAAO,UAAU,IAAI1C,EAAU,CAErC,CAAG,CACH,CAOA,SAAS2C,GAAoBL,EAAQ,CACnC,MAAMM,EAAcP,GAAqBC,CAAM,EACzCO,EAAeN,GAAsBD,CAAM,EACjDM,EAAY,UAAU,OAAO5C,EAAU,EACvC6C,EAAa,UAAU,OAAO7C,EAAU,EACxCwC,GAA2BF,CAAM,CACnC,CAEA,SAASQ,IAA2B,CAClC,OAAO,SAAS,iBAAiB,uCAAuC,CAC1E,CAEA,SAASC,IAAsB,CAC7B,OAAO,SAAS,iBAAiB,uBAAuB,CAC1D,CAEA,SAASC,IAAsB,CAC7B,OAAO,SAAS,iBAAiB,wBAAwB,CAC3D,CAEA,SAASC,GAAa,CACpB,OAAO,SAAS,cAAc,iBAAiB,CACjD,CAKA,SAASC,GAAWC,EAAK,CACvB,MAAO,EACLA,IAAQ,IACRA,IAAQ,MACRA,IAAQ,QACRA,IAAQ,QACRA,IAAQ,YAEZ,CAQA,SAASC,GAAgBC,EAAU,CAEjC,OADe,IAAI,gBAAgB,OAAO,SAAS,MAAM,EAC3C,IAAIA,CAAQ,CAC5B,CAMA,SAASC,GAAWC,EAAY,CAC9B,IAAIC,EAAQD,EAAW,MAAM,GAAG,EAChC,MAAMjc,EAAO,IAAI,KAAKkc,EAAM,CAAC,EAAGA,EAAM,CAAC,EAAI,EAAGA,EAAM,CAAC,CAAC,EAAE,aAAY,EAC9DC,EAAa,IAAI,KAAM,EAAC,aAAY,EAC1C,OAAInc,IAASmc,EACJ,SAETD,EAAQlc,EAAK,MAAM,GAAG,EACf,GAAGkc,EAAM,CAAC,CAAC,IAAIA,EAAM,CAAC,EAAE,QAAQ,OAAQ,EAAE,CAAC,GACpD,CAEA,SAASE,GAAUC,EAAM,CACvB,OAAOA,EAAK,cAAc,kCAAkC,CAC9D,CAEA,SAASC,GAAeD,EAAM,CAC5B,OACEA,EAAK,QAAQ,aAAe,QAAaA,EAAK,QAAQ,aAAe,IAEzE,CAEA,SAASE,IAAiB,CACxB,OAAO,SAAS,cAAc,iBAAiB,EAAE,QAAQ,cAC3D,CAEA,SAASC,GAAYC,EAAKC,EAAO,CAC/B,OACED,EAAI,aAAa,IAAIC,CAAK,IAAM,MAChCD,EAAI,aAAa,IAAIC,CAAK,IAAM,MAEpC,CAEA,SAASC,IAAiC,CACxC,MAAMC,EAAa,IAAI,IAAI,OAAO,SAAS,IAAI,EAC/C,OACEJ,GAAYI,EAAY,KAAK,GAC7BJ,GAAYI,EAAY,KAAK,GAC7BJ,GAAYI,EAAY,SAAS,CAErC,CAEA,SAASC,GAAYJ,EAAKV,EAAUe,EAAU,CACxCN,GAAYC,EAAKV,CAAQ,EAC3BU,EAAI,aAAa,IAAIV,EAAUe,CAAQ,EAEvCL,EAAI,aAAa,OAAOV,EAAUe,CAAQ,CAE9C,CAMA,SAASC,GAAiBC,EAAQ,CAChC,MAAMC,EAAgB,CAAC,MAAO,MAAO,SAAS,EAC9C,IAAIC,EAAc,OAAO,SAAS,KAC9BN,EAAa,IAAI,IAAIM,CAAW,EACpC,UAAWzd,KAAOmd,EAAW,aAAa,KAAI,EACxCK,EAAc,SAASxd,CAAG,GAC5Bmd,EAAW,aAAa,OAAOnd,CAAG,EAGtC,SAAW,CAACA,EAAKC,CAAK,IAAK,OAAO,QAAQsd,CAAM,EAC1Ctd,GAAU,MAGdmd,GAAYD,EAAYnd,EAAKC,CAAK,EAEpC,QAAQ,UAAU,CAAA,EAAI,KAAMkd,CAAU,CACxC,CAEA,SAASO,IAAuB,CAC9B,IAAInd,EACJ,OAAI,OAAO,WAAa,IACtBA,EAAO0b,GAAmB,EAAG,CAAC,EAAE,MAEhC1b,EAAO0b,GAAmB,EAAG,CAAC,EAAE,MAG3B1b,CACT,CAEA,SAASod,IAAY,CACnB,OAAO,SAAS,cAAc,mBAAmB,CACnD,CAEA,SAASC,IAAmB,CAC1B,OAAO,SAAS,cAAc,2BAA2B,CAC3D,CAEA,SAASC,IAAqB,CAC5B,OAAO,SAAS,cAAc,8BAA8B,CAC9D,CAEA,SAASC,IAAgB,CAGvB,OAFkB,IAAI,gBAAgB,OAAO,SAAS,MAAM,EAClC,IAAI,kBAAkB,IAC7B,MACrB,CCrUA,MAAMC,GAAiB,CAAC,oBAAqB,kBAAkB,EAE/D,OAAO,YAAc,CAAA,EAMrB,SAASC,IAAyB,CACb,SAAS,iBAAiB,oBAAoB,EACtD,QAASxQ,GAAU,CAC5BA,EAAM,SAAW,EACrB,CAAG,EACmB,SAAS,iBAAiB,YAAY,EAC9C,QAASA,GAAU,CAC7BA,EAAM,SAAW,EACrB,CAAG,CACH,CAEA,SAASyQ,GAAiBpE,EAAY,CACpC,MAAMmB,EAAKnB,EAAW,QAAQ,gBAC9B,IAAIqE,EAEJ,OAAIlD,IAAO,gBACTkD,EAAWH,GAAe,CAAC,EAE3BG,EAAWH,GAAe,CAAC,EAGZnV,EAAUsV,EAAU,CACnC,WAAY,GACZ,OAAQ,GACR,kBAAmB,SACnB,OAAQ,CAAE,CACd,CAAG,CAGH,CAEA,SAASC,IAAsB,CAC7BlC,GAAqB,EAAC,QAASmC,GAAU,CACvCA,EAAM,MAAQA,EAAM,QAAQ,eAChC,CAAG,CACH,CAEA,SAASC,IAAoB,CACGtC,KAER,QAASlC,GAAe,CAC5C,MAAMyE,EAAiBL,GAAiBpE,CAAU,EAClD,OAAO,YAAY,KAAKyE,CAAc,CAC1C,CAAG,EACDN,KACAG,IACF,CAEA,SAASI,IAAyB,CAChC,OAAO,OAAO,WAChB,CAEA,SAASC,GAAeC,EAAO,CAC7B,IAAIlK,EAAQ,CAAA,EACRmK,EAAoB,CAAA,EACxB,QAASxZ,EAAI,EAAGA,EAAIuZ,EAAM,OAAQvZ,IAAK,CACrC,MAAMyZ,EAAU,IAAI,KAAKF,EAAMvZ,CAAC,CAAC,EAC3B0Z,EAAaD,EAAQ,eACvBD,EAAkB,SAASE,CAAU,IAGzCrK,EAAM,KAAKoK,CAAO,EAClBD,EAAkB,KAAKE,CAAU,EAClC,CACD,OAAOrK,CACT,CAEA,SAASsK,IAAoB,CACXN,KACR,QAASO,GAAW,CAC1BA,EAAO,IAAI,SAAU,CAAA,CAAE,CAC3B,CAAG,CACH,CAEA,SAASC,GAAkBN,EAAO,CAChC,MAAMlK,EAAQiK,GAAeC,CAAK,EAClBF,KACR,QAASO,GAAW,CAC1B,GAAIvK,EAAO,CAET,MAAMyK,EADsBF,EAAO,OAAO,OACL,OAAOvK,CAAK,EAEjDuK,EAAO,IAAI,SAAUE,CAAQ,CAC9B,CACL,CAAG,CACH,CAEA,SAASC,IAAmB,CAC1BZ,IACF,CChGA,MAAMa,GAAqBC,GACzB,IAAI,KAAK,eAAe,KAAM,CAC5B,UAAW,QACX,SAAUA,CACd,CAAG,EAOGC,GAAY,CAAC7e,EAAM8e,IAChB,IAAI,MACR,OAAO9e,GAAS,SAAW,IAAI,KAAKA,CAAI,EAAIA,GAAM,eAAe,QAAS,CACzE,SAAU8e,CAChB,CAAK,CACL,EAGMC,GAAsB,CAAC9C,EAAY2C,IAAa,CACpD,MAAM5e,EAAO,IAAI,KAAKic,CAAU,EAChC,OAAO0C,GAAkBC,CAAQ,EAAE,OAAO5e,CAAI,EAAE,aAClD,EAOA,SAASgf,GAAWhf,EAAM,CACxB,OAAO,IAAI,KACTA,EAAK,eAAgB,EACrBA,EAAK,YAAa,EAClBA,EAAK,WAAY,EACjBA,EAAK,YAAa,EAClBA,EAAK,cAAe,EACpBA,EAAK,cAAe,CACxB,CACA,CC/BA,SAASif,GAA4BC,EAAO,CAC1C,IAAIC,EAAS,GACb,SAAW,CAAC1f,EAAKC,CAAK,IAAK,OAAO,QAAQwf,CAAK,EAAG,CAChD,MAAME,EAAO,GAAG3f,CAAG,KAAKC,CAAK;AAAA,EAC7Byf,GAAUC,CACX,CACD,OAAOD,CACT,CAEA,SAASE,IAA4B,CACnC,MAAO,CACL,qBAAsB,iCACtB,0BAA2B,wBAC3B,wCAAyC,iBAC7C,CACA,CAEA,SAASC,IAAuB,CAC9B,MAAO,CACL,qBAAsB,iCACtB,0BAA2B,oBAC3B,wCAAyC,iBAC7C,CACA,CAEA,SAASC,IAA4B,CACnC,MAAO,CACL,qBAAsB,iCACtB,0BAA2B,oBAC3B,wCAAyC,iBAC7C,CACA,CAEA,SAASC,IAAiC,CACxC,MAAO,CACL,qBAAsB,iCACtB,0BAA2B,kBAC3B,wCAAyC,iBAC7C,CACA,CAEA,SAASC,GAAyBC,EAAa,KAAM,CACnD,MAAMC,EAAOhE,IACPiE,EAAmBhG,KACnBiG,EAAuB7F,KACvB8F,EAAmBrE,KACnBsE,EAAoB5C,KAC1B,IAAI6C,EAAsB,EAExBD,IAAsB,IACtBA,IAAsB,QACtBA,IAAsB,OAEtBC,EAAsB,KAAK,MACxB,IAAI,KAAKD,CAAiB,EAAI,IAAI,OAAW,IAAO,GAAK,GAAK,GACrE,GAGE,MAAME,EAAcN,EAAK,QAAQ,mBAAqB,OAmCtD,GAjCAA,EAAK,QAAQ,2BAA6BK,EAC1CL,EAAK,QAAQ,qBAAuBC,EAAiB,CAAC,EAAE,UACpDC,EAAqB,CAAC,IACxBF,EAAK,QAAQ,oBAAsBE,EAAqB,CAAC,EAAE,WAE7DF,EAAK,QAAQ,kBAAoBG,EAAiB,CAAC,EAAE,UAEjDJ,IACEA,EAAW,cACbC,EAAK,QAAQ,kBAAoBD,EAAW,aAG1CA,EAAW,mCACbC,EAAK,QAAQ,oCACXD,EAAW,kCAGXA,EAAW,wCAA0CO,IACvDN,EAAK,QAAQ,0CAA0C,EACrDD,EAAW,wCAGXA,EAAW,wCAA0CO,IACvDN,EAAK,QAAQ,0CAA0C,EACrDD,EAAW,wCAGXA,EAAW,yCAA2CO,IACxDN,EAAK,QAAQ,2CAA2C,EACtDD,EAAW,0CAIbC,EAAK,QAAQ,mBAAqB,OAAW,CAC/C,MAAMD,EAAaQ,GAA4BP,CAAI,EACnDQ,GAAkB,sCAAuCT,CAAU,EACnEC,EAAK,QAAQ,iBAAmB,EACjC,CACH,CAMA,SAASS,GAA0BV,EAAY,CAC7CD,KACA,MAAME,EAAOhE,IACP0E,EAAYH,GAA4BP,CAAI,EAElD,GAAID,EAAW,WAAY,CACzB,MAAMY,EAAe,CAAE,GAAGD,EAAgB,WAAY,iBACtDF,GAAkB,iCAAkCG,CAAY,CACjE,CAED,GAAIZ,EAAW,gBAAiB,CAC9B,MAAMY,EAAe,CACnB,GAAGD,EACE,WAAY,qBACvB,EACIF,GAAkB,iCAAkCG,CAAY,CACjE,CAED,GAAIZ,EAAW,eAAgB,CAC7B,MAAMY,EAAe,CACnB,GAAGD,EACE,WAAY,mBACvB,EACIF,GAAkB,iCAAkCG,CAAY,CACjE,CACH,CC3IA,MAAMC,GAAe,CAACC,EAAQC,IAAa,CACzC,IAAIC,EAAOF,EAAO,QAAQC,CAAQ,EAClC,OAAIA,IAAa,aACfC,EAAO,WAAWA,CAAI,GAEjBA,CACT,EAEMC,GAAY,CAACC,EAAOH,IACjBG,EAAM,MAAO,EAAC,KAAK,CAAChZ,EAAG+O,IAAM,CAClC,MAAMkK,EAAQN,GAAa3Y,EAAG6Y,CAAQ,EAChCK,EAAQP,GAAa5J,EAAG8J,CAAQ,EACtC,OAAII,EAAQC,EACH,EACED,EAAQC,EACV,GAEF,CACX,CAAG,EAQH,SAASC,GAAmBN,EAAUrQ,EAAW,CAC/C,GAAI,CAACA,EACH,OAGF,MAAMwQ,EAAQ,CAAC,GAAGxQ,EAAU,UAAU,EAEtC,IAAI4Q,EAAcL,GAAUC,EAAOH,CAAQ,EAC3CO,EAAcL,GAAUK,EAAa,sBAAsB,EAE3D,MAAMhR,EAAO,SAAS,yBACtBgR,EAAY,QAAS3E,GAAS,CAC5BrM,EAAK,YAAYqM,CAAI,CACzB,CAAG,EACDjM,EAAU,YAAYJ,CAAI,CAC5B,CAEA,SAASiR,IAAqB,CAC5B,MAAMC,EAAsB/G,KACtBgH,EAAmB9H,KAEzB6H,EAAoB,QAASE,GAAc,CACzC,MAAMC,EAAQD,EAAU,QAAQ,QAChCA,EAAU,iBAAiB,QAAU5f,GAAM,CACzC4f,EAAU,UAAU,OAAO,QAAQ,EACnC,SACG,cAAc,6BAA6BC,CAAK,IAAI,EACpD,UAAU,OAAO,kBAAkB,CAC5C,CAAK,CACL,CAAG,EAEDF,EAAiB,QAAS7H,GAAe,CACvC,MAAMgI,EAAiBhI,EAAW,cAAc,uBAAuB,EAEvEA,EAAW,iBAAiB,wBAAwB,EAAE,QAASiI,GAAW,CACxEA,EAAO,iBAAiB,QAAS,IAAM,CACrCR,GAAmBQ,EAAO,QAAQ,MAAOD,CAAc,EAEvDhI,EAAW,QAAQ,cAAgBiI,EAAO,QAAQ,MAElDA,EAAO,UAAU,IAAI,QAAQ,EAE7BjI,EACG,iBAAiB,wBAAwB,EACzC,QAASkI,GAAiB,CACrBA,IAAiBD,GACnBC,EAAa,UAAU,OAAO,QAAQ,CAEpD,CAAW,CACX,CAAO,CACP,CAAK,EAEDlI,EACG,iBAAiB,0BAA0B,EAC3C,QAAStC,GAAW,CACnBA,EAAO,iBAAiB,SAAU,IAAM,CACtC,MAAMQ,EAAO8B,EAAW,cAAc,oBAAoB,EACtDtC,EAAO,QAAQ,QAAU,WAC3BQ,EAAK,UAAY,WACRR,EAAO,QAAQ,QAAU,YAClCQ,EAAK,UAAY,YAGnB8B,EAAW,QAAQ,cAAgBtC,EAAO,QAAQ,MAElD+J,GAAmB/J,EAAO,QAAQ,MAAOsK,CAAc,CACjE,CAAS,CACT,CAAO,CACP,CAAG,CACH,CCxEA,SAASG,IAA2B,CACdpI,KACR,QAASC,GAAe,CAClC,MAAMoI,EAAmBpI,EAAW,cAAc,uBAAuB,EACzE,GAAIoI,EAAkB,CACpB,MAAMjB,EAAWnH,EAAW,QAAQ,cACpCyH,GAAmBN,EAAUiB,CAAgB,CAC9C,CACL,CAAG,CACH,CAkBA,MAAMC,GAAY,CAACC,EAAMC,EAAUC,EAASxB,IAAiB,CAC3D,MAAMpB,EAAQD,GAA4BqB,CAAY,EAChDtZ,EAASuW,KAAkB,QAAU,SAC3C,MAAO;AAAA,iBACQuE,CAAO;AAAA,gBACRF,CAAI;AAAA,kBACF5a,CAAM;AAAA,UACdkY,CAAK;AAAA;AAAA,cAED2C,CAAQ;AAAA,aAEtB,EAQA,SAASE,GAAOhc,EAAOC,EAAO,CAC5B,OAAOD,EAAM,aAAY,IAAOC,EAAM,aAAY,CACpD,CAQA,SAASgc,GAAejc,EAAOC,EAAO,CACpC,OAAID,EAAM,YAAW,IAAOC,EAAM,YAAW,EACpCD,EAAM,YAAW,EAAKC,EAAM,YAAW,EACrCD,EAAM,SAAU,IAAKC,EAAM,SAAQ,EACrCD,EAAM,SAAQ,EAAKC,EAAM,SAAQ,EAEnCD,EAAM,QAAO,EAAKC,EAAM,QAAO,CACxC,CASA,MAAMic,GAAc,CAAC/D,EAAOle,EAAMqc,IAAS,CACzC,MAAMuC,EAAWvC,EAAK,QAAQ,aACxB6F,EAAiB,CAAA,EACjBC,EAAW,EACjB,IAAIC,EAAQ,EAEZ,QAASzd,EAAI,EAAGA,EAAIuZ,EAAM,OAAQvZ,IAAK,CACrC,IAAI0d,EAAW,IAAI,KAAKnE,EAAMvZ,CAAC,CAAC,EAUhC,GATI0d,EAAS,WAAU,GAAMriB,EAAK,WAAU,IAC1CqiB,EAAWxD,GAAUwD,EAAUzD,CAAQ,GAErCmD,GAAOM,EAAUriB,CAAI,IACvBkiB,EAAe,KAAKhE,EAAMvZ,CAAC,CAAC,EAC5Byd,KAIEA,IAAUD,EACZ,MAEK,GAAIH,GAAehiB,EAAMqiB,CAAQ,EACtC,KAEH,CAED,OAAOH,CACT,EAOMI,GAAa,CAACpE,EAAO7B,IAElB4F,GAAY/D,EADA,IAAI,KACe7B,CAAI,EAStCkG,GAAgB,CAACrE,EAAO7B,IAAS,CACrC,MAAMmG,EAAQ,IAAI,KACZC,EAAW,IAAI,KACnBD,EAAM,YAAa,EACnBA,EAAM,SAAU,EAChBA,EAAM,QAAO,EAAK,CACtB,EACE,OAAOP,GAAY/D,EAAOuE,EAAUpG,CAAI,CAC1C,EAQMqG,GAAoB,CAACxE,EAAO7B,IAAS,CACzC,MAAMmG,EAAQ,IAAI,KACZC,EAAW,IAAI,KACnBD,EAAM,YAAa,EACnBA,EAAM,SAAU,EAChBA,EAAM,QAAO,EAAK,CACtB,EAEE,QAAS7d,EAAI,EAAGA,EAAIuZ,EAAM,OAAQvZ,IAGhC,GAFiB,IAAI,KAAKuZ,EAAMvZ,CAAC,CAAC,EAEnB8d,EACb,OAAOvE,EAAMvZ,CAAC,EAGlB,OAAOuZ,EAAM,CAAC,CAChB,EAOO,SAASyE,EAASlG,EAAKhd,EAAKC,EAAO,CACpC+c,EAAI,aAAa,IAAIhd,CAAG,EAC1Bgd,EAAI,aAAa,IAAIhd,EAAKC,CAAK,EAE/B+c,EAAI,aAAa,OAAOhd,EAAKC,CAAK,CAEtC,CASA,SAASkjB,GAAWzD,EAAQ,CAC1B,IAAI1C,EACJ,GAAI,CACFA,EAAM,IAAI,IAAI0C,CAAM,CACrB,MAAW,CACV,MAAO,EACR,CACD,OAAO1C,EAAI,WAAa,SAAWA,EAAI,WAAa,QACtD,CASO,MAAMoG,EAAkB,CAACjB,EAAMvF,EAAMyG,IAAS,CACnD,MAAMC,EAAY,mBAAmB,OAAO,SAAS,IAAI,EACzD,IAAItG,EAIAmG,GAAWhB,CAAI,EACjBnF,EAAM,IAAI,IAAImF,CAAI,EAElBnF,EAAM,IAAI,IAAI,OAAO,SAAS,OAASmF,CAAI,EAGzChG,GAAWkH,CAAI,EACjBH,EAASlG,EAAK,OAAQqG,CAAI,EACjBzG,EAAK,QAAQ,SACtBsG,EAASlG,EAAK,gBAAiBJ,EAAK,QAAQ,QAAQ,MAAM,EAAG,EAAE,CAAC,EAGlE,MAAM2G,EAAcC,KAChBrH,GAAWoH,CAAW,GACxBL,EAASlG,EAAK,cAAeuG,CAAW,EAG1C,MAAME,EAAaC,KACnB,OAAIvH,GAAWsH,CAAU,GACvBP,EAASlG,EAAK,aAAcyG,CAAU,EAGxCP,EAASlG,EAAK,YAAasG,CAAS,EAE7BtG,CACT,EAEM2G,GAAuB,CAAC/G,EAAM6B,IAAU,CAC5C,IAAImF,EAAU,GAGVlB,EACAjE,EAAM,OAAS,EACjBiE,EAAW,EAEXA,EAAWjE,EAAM,OAGnB,MAAMoF,EAAqBjE,KAE3B,QAAS1a,EAAI,EAAGA,EAAIwd,EAAUxd,IAAK,CACjC,MAAMia,EAAWvC,EAAK,QAAQ,aACxBkH,EAAOxE,GAAoBb,EAAMvZ,CAAC,EAAGia,CAAQ,EAC7CnC,EAAMoG,EAAgBxG,EAAK,QAAQ,YAAaA,EAAM6B,EAAMvZ,CAAC,CAAC,EAC9D4c,EAASI,GACblF,EAAI,SAAU,EACd8G,EACA,6BACAD,CACN,EACID,GAAW9B,CACZ,CAED,MAAMiC,EAAgBlE,KAChBiC,EAASI,GACbkB,EAAgBxG,EAAK,QAAQ,YAAaA,EAAM,IAAI,EACpD,YACA,8BACAmH,CACJ,EACE,OAAAH,GAAW9B,EAEJ8B,CACT,EAEA,SAASI,GAA2BpH,EAAM,CACxC,MAAMqH,EAAiBrH,EAAK,cAC1B,mCACJ,EACEqH,EAAe,KAAOb,EAAgBa,EAAe,KAAMrH,EAAM,IAAI,CACvE,CAEA,MAAMsH,GAAkB,CAACtH,EAAM6B,EAAO0F,EAAWC,IAAY,CAC3D,MAAMC,EAAezH,EAAK,QAAQ,YAClC0H,GAAoB1H,EAAM6B,EAAM,CAAC,CAAC,EAGlC,IAAI3c,EADuB,+CAA+CuiB,CAAY,kDAAkDD,CAAO,aAE/ItiB,GAAW;AAAA,kBACK6hB,GAAqB/G,EAAM6B,CAAK,CAAC;AAAA,sBAEjD0F,EAAU,UAAYriB,EACtB8a,EAAK,QAAQ,YAAc,MAC7B,EAEM2H,GAAiC,CACrC3H,EACAyG,EACAc,EACAK,EAAa,KACV,CACHF,GAAoB1H,EAAMyG,CAAI,EAC9B,MAAMrG,EAAMoG,EAAgBxG,EAAK,QAAQ,YAAaA,EAAM,IAAI,EAChE,IAAI6H,EAAU,GAEd,GAAID,EACFC,EAAU,eACL,CACLA,EAAU,IAAI,KAAKpB,CAAI,EAAE,aAAY,EACrC,MAAM5G,EAAQgI,EAAQ,MAAM,GAAG,EAC/BA,EAAU,GAAGhI,EAAM,CAAC,CAAC,IAAIA,EAAM,CAAC,EAAE,QAAQ,OAAQ,EAAE,CAAC,EACtD,CAED,MAAM2F,EAAW,GAAGxF,EAAK,QAAQ,YAAY,sBAAsB6H,CAAO,OAEpE5D,EAAef,KACrBqE,EAAU,UAAYjC,GACpBlF,EACAoF,EACA,0CACAvB,CACJ,EACEjE,EAAK,QAAQ,YAAc,OAC3B0H,GAAoB1H,EAAMyG,CAAI,CAChC,EAEMqB,GAA8B,CAAC9H,EAAMuH,IAAc,CACvD,MAAMpB,EAAQ,IAAI,OAAO,YAAa,EAAC,MAAM,GAAG,EAAE,CAAC,EACnDuB,GAAoB1H,EAAMmG,CAAK,EAC/B,MAAM/F,EAAMoG,EAAgBxG,EAAK,QAAQ,YAAaA,EAAM,IAAI,EAC1DwF,EAAW,GAAGxF,EAAK,QAAQ,YAAY,qCACvCiE,EAAed,KACrBoE,EAAU,UAAYjC,GACpBlF,EACAoF,EACA,0CACAvB,CACJ,EACEjE,EAAK,QAAQ,YAAc,MAC7B,EAEA,SAAS0H,GAAoB1H,EAAMkH,EAAM,CACvClH,EAAK,QAAQ,QAAUkH,CACzB,CAEA,SAASa,EAAiC/H,EAAMgI,EAAU,CACxDhI,EAAK,QAAQ,qBAAuBgI,CACtC,CAEO,MAAMC,GAAY,CAACC,EAAe,KAAU,CACjD,MAAMC,EAAiB,CAAA,EACjBC,EAAaC,KACL,SAAS,iBAAiB,2BAA2B,EAC7D,QAAQ,MAAOrI,GAAS,CAC5B,MAAMsI,EAAgB,CAAA,EACtBA,EAAc,KAAOtI,EAAK,QAAQ,SAClCsI,EAAc,MAAQ,KAAK,MAAMtI,EAAK,QAAQ,KAAK,EACnDsI,EAAc,qBAAuBtI,EAAK,QAAQ,qBAClDsI,EAAc,eAAiBtI,EAAK,QAAQ,eAExCkI,EACGC,EAAe,SAASG,EAAc,IAAI,IAC7CH,EAAe,KAAKG,EAAc,IAAI,EACtCC,GAAcD,EAAeJ,EAAcE,CAAU,GAGvDG,GAAcD,EAAeJ,EAAcE,CAAU,CAE3D,CAAG,EACDhD,KACAoD,KACAC,IACF,EAMA,SAASJ,IAAgB,CACvB,MAAMK,EAAmBrJ,KAEnBsJ,EADOrJ,IACsB,QAAQ,aAErC8I,EAAa,CAAA,EACnB,OACEO,IAA0B,IAC1BA,IAA0B,MAC1BA,IAA0B,OAE1BP,EAAW,MAAQO,EAEf,OAAO,WAAa,IACtBP,EAAW,MAAQM,EAAiB,CAAC,EAAE,MAEvCN,EAAW,MAAQM,EAAiB,CAAC,EAAE,MAIpCN,CACT,CAEA,SAASI,IAA0B,CACjC,MAAMlF,EAAOhE,IACbgE,EAAK,QAAQ,aAAe,EAC9B,CAEA,SAASsF,GAAiBpiB,EAAS,CACjC,OAEEA,GAAY,MACZ,OAAO,QAAQA,CAAO,EAAE,OAAS,GACjCA,EAAQ,QAAU,IAClBA,EAAQ,QAAU,MAEtB,CAOA,SAASqiB,GAAsBllB,EAAM,CACnC,MAAMkc,EAAQlc,EAAK,MAAM,MAAM,GAAG,EAClC,OAAO,IAAI,KAAKkc,EAAM,CAAC,EAAGA,EAAM,CAAC,EAAI,EAAGA,EAAM,CAAC,CAAC,EAAE,aAAY,CAChE,CAEA,MAAMiJ,GAAoB,CAAC9I,EAAM+I,EAAgBxB,IAAc,CAC7D,MAAMC,EAAU,4EACVwB,EACJD,IAAmB,IACf,GAAGA,CAAc,wBACjB,GAAGA,CAAc,yBACjBE,EAAqB,4EAErBC,EAAgB1C,EAAgBxG,EAAK,QAAQ,YAAaA,EAAM,IAAI,EACpEmJ,EAAgB,YAChBC,EAAmB,2BACnBC,EAAwB,CAC5B,qBAAsB,iCACtB,0BAA2B,oBAC3B,wCAAyC,iBAC7C,EACQC,EAAkBhE,GACtB4D,EAAc,KACdC,EACAC,EACAC,CACJ,EAEQE,EAAa/C,EACjBxG,EAAK,QAAQ,YACbA,EACA,iBACJ,EAQQkF,EAASI,GACbiE,EAPiB,cADG,kBAEK,CACzB,qBAAsB,iCACtB,0BAA2B,kBAC3B,wCAAyC,iBAC7C,CAMA,EAEEhC,EAAU,UAAY;AAAA,MAClB0B,CAAkB;AAAA;AAAA,QAEhB/D,CAAM;AAAA;AAAA,UAEJsC,CAAO;AAAA,6CAC4BwB,CAAe;AAAA;AAAA;AAAA;AAAA,MAItDM,CAAe;AAAA,SAErB,EAWA,SAASE,GACP3H,EACA7B,EACAyJ,EACAC,EACAC,EACAC,EACA,CACA,MAAMC,EAAc5D,GAAWpE,EAAO7B,CAAI,EACpC8J,EAAiB5D,GAAcrE,EAAO7B,CAAI,EAChD,GAAI6J,EAAY,OAAS,EACvBvC,GAAgBtH,EAAM6J,EAAaD,EAAU,sBAAsB,EACnE7B,EAAiC/H,EAAM,CAAC,UAC/B0J,EACTZ,GAAkB9I,EAAM2J,EAAgBC,CAAQ,EAChD7B,EAAiC/H,EAAM,CAAC,UAC/B8J,EAAe,OAAS,EAC7BL,EACFnC,GACEtH,EACA8J,EACAF,EACA,yBACR,EAEMjC,GAA+B3H,EAAM8J,EAAe,CAAC,EAAGF,EAAU,EAAI,EAExE7B,EAAiC/H,EAAM,CAAC,UAC/B6B,EAAM,OAAS,EAAG,CAC3B,MAAMkI,EAAW1D,GAAkBxE,CAAW,EAC9C8F,GAA+B3H,EAAM+J,EAAUH,CAAQ,EACvD7B,EAAiC/H,EAAM,CAAC,CAC5C,MACI8H,GAA4B9H,EAAM4J,CAAQ,EAC1C7B,EAAiC/H,EAAM,CAAC,CAE5C,CASA,SAASgK,GAAiBnI,EAAO7B,EAAMoI,EAAYwB,EAAU,CAC3D,MAAMK,EAAkBtH,GAAW,IAAI,KAAKyF,EAAW,KAAK,CAAC,EACvD8B,EAAkBtE,GAAY/D,EAAOoI,EAAiBjK,CAAI,EAChE,GAAIkK,EAAgB,OAAS,EAC3B5C,GACEtH,EACAkK,EACAN,EACA,GAAGjK,GAAWyI,EAAW,KAAK,CAAC,EACrC,EACIL,EAAiC/H,EAAM,CAAC,UAC/B6B,EAAM,OAAS,EAAG,CAC3B,MAAMkI,EAAW1D,GAAkBxE,CAAW,EAC9C8F,GAA+B3H,EAAM+J,EAAUH,CAAQ,EACvD7B,EAAiC/H,EAAM,CAAC,CAC5C,MACI8H,GAA4B9H,EAAM4J,CAAQ,EAC1C7B,EAAiC/H,EAAM,CAAC,CAE5C,CAEO,MAAMuI,GAAgB,CAACtN,EAAMiN,EAAcE,IAAe,CAC/D,MAAMpI,EAAO,SAAS,cACpB,oCAAoC/E,EAAK,IAAI,IACjD,EAEE,GAAK+E,IAICA,EAAK,QAAQ,cAAgB,QAAWkI,GAAc,CAC1D,MAAMrG,EAAQ5G,EAAK,MACbkP,EAAuBlP,EAAK,uBAAyB,OACrD0O,EAAiB1O,EAAK,eAEvBiN,GACH/F,GAAkBN,CAAK,EAEzB,MAAM+H,EAAW7J,GAAUC,CAAI,EAE/B,GAAI6B,EAAO,CACT,MAAM/B,EAAa,IAAI,KAAM,EAAC,aAAY,EACtCR,EAAY,EAAC,QAAQ,kBAAoB,QAC3CkK,GACE3H,EACA7B,EACA,GACAmK,EACAR,EACAC,CACV,EAEQhB,GAAiBR,CAAU,GAC3BtI,IAAe+I,GAAsBT,CAAU,EAE/C4B,GAAiBnI,EAAO7B,EAAMoI,EAAYwB,CAAQ,EAElDJ,GACE3H,EACA7B,EACA,GACAmK,EACAR,EACAC,CACV,CAEA,MACM9B,GAA4B9H,EAAM4J,CAAQ,EAC1C7B,EAAiC/H,EAAM,CAAC,EAGtCA,GACFoH,GAA2BpH,CAAc,CAE5C,CACH,ECtmBMoK,GAAuB9N,GAA6B,EACpD+N,GAAyB9N,GAA6B,EACtD+N,GAAa9N,GAAuB,EACpC+N,GAAe9N,GAAuB,EAM5C,SAAS+N,GAAoBC,EAAK,CAChC,MAAMnH,EAAOhE,IACbgE,EAAK,QAAQ,eAAiBmH,CAChC,CAEA,SAASC,IAAc,CACjB,CAACN,IAAwB,CAACC,KAG9BE,GAAa,UAAU,IAAI,kBAAkB,EAC7CD,GAAW,UAAU,OAAO,kBAAkB,EAC9CF,GAAqB,UAAU,IAAI,QAAQ,EAC3CC,GAAuB,UAAU,OAAO,QAAQ,EAChDG,GAAoB,SAAS,EAC/B,CAEA,SAASG,IAAgB,CACnB,CAACP,IAAwB,CAACC,KAG9BC,GAAW,UAAU,IAAI,kBAAkB,EAC3CC,GAAa,UAAU,OAAO,kBAAkB,EAChDF,GAAuB,UAAU,IAAI,QAAQ,EAC7CD,GAAqB,UAAU,OAAO,QAAQ,EAC9CI,GAAoB,WAAW,EACjC,CAEA,SAASI,IAAmB,CACtB,CAACR,IAAwB,CAACC,KAG9BA,GAAuB,iBAAiB,QAAUllB,GAAM,CACtDwlB,IACJ,CAAG,EAEDP,GAAqB,iBAAiB,QAAUjlB,GAAM,CACpDulB,IACJ,CAAG,EACH,CC9CA,MAAMG,WAAkB,WAAY,CAIlC,aAAc,CACZ,QAJFC,GAAA,oBAAe,SAAS,eAAe,SAAS,EAAE,QAAQ,WAC1DA,GAAA,eAAU,CAAA,GAKR,MAAMC,EAAS,KAAK,MAAM,KAAK,aAAa,aAAa,CAAC,EACtDA,EACF,KAAK,QAAUA,EAAO,UAEtB,KAAK,QAAU,CAAC,EAAG,CAAC,CAEvB,CAED,mBAAoB,CAClB,KAAK,UAAY,8CACjB,SAAS,YAAc,KAAK,aAC5B,KAAK,IAAM,IAAI,SAAS,IAAI,CAC1B,UAAW,MACX,MAAO,mDACP,OAAQ,KAAK,QACb,KAAM,GACN,oBAAqB,EAC3B,CAAK,CACF,CAED,IAAI,UAAUC,EAAW,CACvB,KAAK,cAAcA,CAAS,CAC7B,CAED,IAAI,OAAOC,EAAQ,CACjB,KAAK,QAAUA,EACf,KAAK,UAAS,CACf,CAED,IAAI,QAAS,CACX,OAAO,KAAK,OACb,CAED,IAAI,WAAY,CACd,OAAO,KAAK,GACb,CAED,kBAAmB,CACjB,OAAO,SAAS,iBAAiB,kBAAkB,CACpD,CAED,cAAcD,EAAW,CAEvB,KAAK,aAAY,EAEjB,MAAME,EAAS,KAAK,IAAI,UAAS,EAEjCF,EAAU,QAASG,GAAiB,CAClC,MAAMC,EAAUD,EAAa,QACvBE,EAAS,CACb,WAAWD,EAAQ,SAAS,EAC5B,WAAWA,EAAQ,QAAQ,CACnC,EACYE,EAAgB,KAAK,qBAAqBH,CAAY,EAC5D,GAAI,KAAK,UAAUA,CAAY,EAAG,CAChC,MAAMI,EAAS,IAAI,SAAS,OAAO,CAAE,QAASD,EAAe,EAC1D,UAAUD,CAAM,EAChB,SAAS,KAAK,oBAAoBF,CAAY,CAAC,EAC/C,MAAM,KAAK,GAAG,EAGjB,KAAK,QAAQ,KAAKI,CAAM,EAIxBA,EAAO,SAAS,iBAAiB,QAAS,IAAM,CAE9C,KAAK,qBAAqBP,EAAW,QAAQ,EAC7CG,EAAa,UAAU,IAAI,QAAQ,EAEnC,MAAMK,EAASL,EAAa,QAAQ,SACpC,KAAK,iBAAiBK,CAAM,CACtC,CAAS,EAED,MAAMC,EAAgB,SAAS,iBAC7B,4CAA4CL,EAAQ,MAAM,IACpE,EACcM,EAAa,MAAM,KAAKD,CAAa,EAC3CC,EAAW,KAAKP,CAAY,EAC5BO,EAAW,QAAS1L,GAAS,CAE3BA,EAAK,iBAAiB,aAAc,IAClC,KAAK,gBAAgBuL,EAAQJ,CAAY,CACrD,EAEUnL,EAAK,iBAAiB,QAAS,IAC7B,KAAK,gBAAgBuL,EAAQJ,CAAY,CACrD,EACUnL,EAAK,iBAAiB,aAAc,IAClC,KAAK,kBAAkBuL,CAAM,CACzC,CACA,CAAS,CACF,CACP,CAAK,EAED,KAAK,IAAI,UAAUL,EAAQ,CAAE,QAAS,EAAE,CAAE,CAC3C,CAED,iBAAiBM,EAAQ,CAEvBd,KACA,KAAK,8BAA6B,EAGlC,MAAMiB,EAAchP,GAA2B,WAAW,EAAE,cAC1D,oBAAoB6O,CAAM,IAChC,EACIG,EAAY,UAAU,IAAI,8BAA8B,EAExD,KAAK,oBAAoBA,CAAW,CACrC,CAGD,oBAAoBA,EAAa,CAC/BA,EAAY,eAAe,CACzB,SAAU,QAChB,CAAK,CACF,CAGD,+BAAgC,CAChB,SAAS,iBAAiB,kBAAkB,EACpD,QAAS3L,GAAS,CACtBA,EAAK,UAAU,OAAO,8BAA8B,CAC1D,CAAK,CACF,CAED,cAAe,CACR,KAAK,UAIV,KAAK,QAAQ,QAASuL,GAAW,CAC3BA,EAAO,SAAU,GAAIA,EAAO,SAAQ,EAAG,UACzCA,EAAO,WAAW,SAEpBA,EAAO,OAAM,CACnB,CAAK,EACD,KAAK,QAAU,GAChB,CAED,WAAY,CAEV,MAAMK,EAAgB,SAAS,cAAc,KAAK,EAC5Crc,EAAK,SAAS,cAAc,KAAK,EACvCA,EAAG,UAAU,IAAI,YAAY,EAC7BA,EAAG,UAAU,IAAI,oBAAoB,EACrCqc,EAAc,YAAYrc,CAAE,EAC5B,MAAMgc,EAAS,IAAI,SAAS,OAAO,CACjC,QAASK,CACf,CAAK,EAEDL,EAAO,UAAU,KAAK,OAAO,EAC7BA,EAAO,MAAM,KAAK,GAAG,EACrB,KAAK,QAAQ,KAAKA,CAAM,CACzB,CAED,UAAUvL,EAAM,CACd,GAAI,CAACA,EACH,MAAO,GAET,MAAM6L,EAAgB7L,EAAK,QAAQ,UAAY,OACzC8L,EAAe7L,GAAeD,CAAI,EACxC,MAAO,CAAC6L,GAAiB,CAACC,CAC3B,CAED,qBAAqBX,EAAc,CAEjC,MAAMS,EAAgB,SAAS,cAAc,KAAK,EAC5CN,EAAgB,SAAS,cAAc,KAAK,EAClD,OAAAA,EAAc,UAAU,IAAI,GAAG,KAAK,cAAe,CAAA,EACnDA,EAAc,MAAQ,4BAA4B,KAAK,kBAAkBH,EAAa,QAAQ,WAAW,CAAC,MAC1GS,EAAc,YAAYN,CAAa,EAChCM,CACR,CAED,kBAAkBG,EAAO,CACvB,MAAMC,EAAe,oCACfC,EACJ,mBAAmB;AAAA;AAAA;AAAA;AAAA,gTAIuRF,CAAK;AAAA;AAAA;AAAA;AAAA,WAI1S,EACP,OAAOC,EAAeC,CACvB,CAED,eAAgB,CACd,MAAO,CAAC,aAAc,sBAAsB,CAC7C,CAED,oBAAoBd,EAAc,CAChC,MAAMe,EAAmBf,EAAa,UAAU,EAAI,EACtCe,EAAiB,iBAAiB,GAAG,EAC7C,QAAS3gB,GAAM,CACfA,EAAE,QAAQ,mBACZ,OAAOA,EAAE,QAAQ,iBAEzB,CAAK,EACD2gB,EAAiB,iBAAiB,YAAY,EAAE,QAAS3c,GAAO,CAC9DA,EAAG,IAAMA,EAAG,QAAQ,GAC1B,CAAK,EAED,KAAK,iBAAiB2c,CAAgB,EACtC,MAAMC,EAAQ,IAAI,SAAS,MAAM,CAC/B,eAAgB,GAChB,OAAQ,CAAC,EAAG,GAAG,EACf,YAAa,EACnB,CAAK,EACD,OAAAA,EAAM,cAAcD,CAAgB,EACpCC,EAAM,YAAY,OAAO,EAEzBA,EAAM,GAAG,OAAQ,IAAM,CACrB1D,IACN,CAAK,EAEM0D,CACR,CAED,iBAAiBnM,EAAM,CACrB,MAAMoM,EAAgBpM,EAAK,cAAc,8BAA8B,EACjEqM,EAAa,IAAI,IAAID,EAAc,IAAI,EAEzCpM,EAAK,QAAQ,SACfsG,EAAS+F,EAAY,gBAAiBrM,EAAK,QAAQ,QAAQ,MAAM,EAAG,EAAE,CAAC,EAGzE,MAAM2G,EAAcC,KAChBD,GACFL,EAAS+F,EAAY,cAAe1F,CAAW,EAGjDyF,EAAc,KAAOC,CACtB,CAED,gBAAgBd,EAAQJ,EAAc,CAC/BI,EAAO,SAAU,EAAC,OAAM,GAC3BA,EAAO,YAAW,EAEpB,MAAMD,EAAgBC,EAAO,SAAS,SAAS,CAAC,EAC1CP,EAAY,KAAK,mBACvBM,EAAc,UAAU,IAAI,kBAAkB,EAC9C,KAAK,qBAAqBN,EAAW,QAAQ,EAC7CG,EAAa,UAAU,IAAI,QAAQ,CACpC,CAED,kBAAkBI,EAAQ,CACpBA,EAAO,WAAW,UACpBA,EAAO,YAAW,EAEEA,EAAO,SAAS,SAAS,CAAC,EAClC,UAAU,OAAO,kBAAkB,CAClD,CAED,qBAAqBrP,EAAOnX,EAAW,CACrCmX,EAAM,QAAS3M,GAAO,CACpBA,EAAG,UAAU,OAAOxK,CAAS,CACnC,CAAK,CACF,CACH,CAEA,eAAe,OAAO,aAAc8lB,EAAS,ECzR9B,SAASyB,GAAmBC,EAAa,GAAI,CAC1D,IAAIC,EAA0B,CAAA,EAE1BD,IAAe,GACjBC,EAA0B,SAAS,iBACjC,gCACN,EAEIA,EAA0B,SAAS,iBACjC,iCAAiCD,CAAU,IACjD,EAGEC,EAAwB,QAASC,GAAsB,CACrD,MAAMrO,EAAKqO,EAAkB,QAAQ,qBAC/BC,EAAO,SAAS,cAAc,4BAA4BtO,CAAE,IAAI,EAEtE,GAAI,CAACsO,EAAM,CACT,QAAQ,MAAM,yBAAyBtO,CAAE,YAAY,EACrD,MACD,CAED,MAAMuO,EAAa,SAAS,iBAC1B,iCAAiCvO,CAAE,IACzC,EAEUwO,EAAS,IACN,CAACF,EAAK,UAAU,SAAS,kBAAkB,EAG9CG,EAAY,IAAM,CACtBH,EAAK,UAAU,IAAI,kBAAkB,CAC3C,EAEUI,EAA2BniB,GAAW,CAC1C,QAASrC,EAAI,EAAGA,EAAIqkB,EAAW,OAAQrkB,IACrC,GAAIqkB,EAAWrkB,CAAC,EAAE,SAASqC,CAAM,GAAKgiB,EAAWrkB,CAAC,IAAMqC,EACtD,MAAO,GAGX,MAAO,EACb,EAEUoiB,EAA6BpiB,GAE/BA,EAAO,UAAU,SAAS,sBAAsB,GAChDA,EAAO,UAAU,SAAS,sBAAsB,GAChDA,EAAO,UAAY,OACnBA,EAAO,UAAY,OAIjBqiB,EAAkB7nB,GAAM,CACxBynB,EAAM,GAENF,IAASvnB,EAAE,QACX,CAAC2nB,EAAwB3nB,EAAE,MAAM,GACjC,CAAC4nB,EAA0B5nB,EAAE,MAAM,IAEnC,SAAS,oBAAoB,QAAS6nB,CAAc,EACpDH,IAGV,EAEUI,EAAW,IAAM,CACrBP,EAAK,UAAU,OAAO,kBAAkB,EACxC,SAAS,iBAAiB,QAAUvnB,GAAM,CACxC6nB,EAAe7nB,CAAC,CACxB,CAAO,CACP,EAEIwnB,EAAW,QAASO,GAAc,CAChCA,EAAU,iBAAiB,QAAU/nB,GAAM,CACpC+nB,EAAU,UAAU,SAAS,UAAU,IACtCN,EAAM,EACRC,IAEAI,IAGZ,CAAO,CACP,CAAK,EAGGP,EAAK,QAAQ,kBAAoB,QACjBA,EAAK,cAAc,mBAAmB,EAC9C,iBAAiB,SAAWvnB,GAAM,CAC1C0nB,GACR,CAAO,EAGHJ,EAAkB,iBAAiB,QAAUtnB,GAAM,CAC7CA,EAAE,MAAQ,UACZ0nB,GAER,CAAK,CACL,CAAG,CACH,CCrFA,SAASM,GAAuBC,EAAe,GAAO,CACpD,MAAMC,EAAetP,KACfuP,EAAgB1Q,KAChB2Q,EAASxM,KACTyM,EAAOxM,KACPyM,EAAiB3P,KACjB4P,EAAY,mBACZC,EAAS,SACZ,cAAc,2BAA2B,EACzC,UAAU,SAAS,SAAS,EAE/B,IAAI3G,EAAU,CAAA,EAGd,GAAIoG,EAAc,CAChB,MAAMQ,EAAmB,SAAS,cAChC,4DACN,EACI5G,EAAUzI,GAAoBqP,CAAgB,CAClD,MACI5G,EAAUzI,GAAmB,EAG/ByI,EAAQ,QAAS6G,GAAU,CAEpBA,GAILA,EAAM,iBAAiB,QAAU1oB,GAAM,CACrCA,EAAE,eAAc,EAChB2oB,GAAcD,CAAK,CACzB,CAAK,CACL,CAAG,EACD,OAAO,iBAAiB,SAAW1oB,GAAM,CACvC,GACE,OAAO,WAAa,KACpBmoB,EAAc,UAAU,SAASI,CAAS,EAC1C,CACAJ,EAAc,UAAU,OAAOI,CAAS,EACxC,MAAMK,EAAiB7Q,KACjB8Q,EAAiB/P,GAAkB8P,CAAc,EACnDC,GACFA,EAAe,UAAU,OAAON,CAAS,EAE3CL,EAAa,UAAU,OAAO,MAAM,EACpCE,EAAO,UAAU,OAAOG,CAAS,EAC5BC,GACHH,EAAK,UAAU,OAAOE,CAAS,EAEjC,SAAS,KAAK,UAAU,OAAO,0BAA0B,EAGxC,SAAS,iBAAiB,oBAAoB,EACtD,QAAS/nB,GAAY,CAC5BA,EAAQ,UAAU,OAAO,eAAe,CAChD,CAAO,EAGD8nB,EAAe,QAASvI,GAAW,CACjCA,EAAO,UAAU,OAAOwI,CAAS,CACzC,CAAO,CACF,CACL,CAAG,CACH,CAEA,SAASI,GAAcD,EAAQ,KAAM,CAC/BA,GACFA,EAAM,UAAU,OAAO,QAAQ,EAEjC,MAAMR,EAAetP,KACfkQ,EAAqB9Q,KACrBmQ,EAAgB1Q,KAChB8Q,EAAY,mBACZK,EAAiB7Q,KACjB8Q,EAAiB/P,GAAkB8P,CAAc,EACjDR,EAASxM,KACT4M,EAAS,SACZ,cAAc,2BAA2B,EACzC,UAAU,SAAS,SAAS,EACzBH,EAAOxM,KACPyM,EAAiB3P,KAEvBuP,EAAa,UAAU,OAAO,MAAM,EACpCY,EAAmB,UAAU,OAAO,aAAa,EACjDX,EAAc,UAAU,OAAOI,CAAS,EACpCM,GACFA,EAAe,UAAU,OAAON,CAAS,EAE3CH,EAAO,UAAU,OAAOG,CAAS,EAC5BC,GACHH,EAAK,UAAU,OAAOE,CAAS,EAEjC,SAAS,KAAK,UAAU,OAAO,0BAA0B,EAGxC,SAAS,iBAAiB,oBAAoB,EACtD,QAAS/nB,GAAY,CAC5BA,EAAQ,UAAU,OAAO,eAAe,CAC5C,CAAG,EAGD8nB,EAAe,QAASvI,GAAW,CACjCA,EAAO,UAAU,OAAOwI,CAAS,CACrC,CAAG,CACH,CCpHA,MAAMQ,GAAwB,kBACxBC,GAAsB,iBACtBC,GAAc,GAAK,GAAK,IAE9B,SAASC,IAAkB,CACzB,MAAMC,EAAUhP,IAAa,QAAQ,WACrC,MAAO,GAAG4O,EAAqB,IAAII,CAAO,EAC5C,CAEA,SAASC,IAAiB,CACxB,MAAMD,EAAUhP,IAAa,QAAQ,WACrC,MAAO,GAAG6O,EAAmB,IAAIG,CAAO,EAC1C,CAKA,SAASE,GAAsBC,EAAUC,EAAWC,EAAQ,CAC1D,MAAMC,EAAe,CACnB,IAAKH,EACL,IAAKC,EACL,OAAAC,EACA,UAAW,KAAK,IAAK,CACzB,EAEE,OAAO,aAAa,QAAQN,GAAe,EAAI,KAAK,UAAUO,CAAY,CAAC,CAC7E,CAEA,SAASC,IAA2B,CAClC,OAAO,aAAa,WAAWR,GAAiB,CAAA,CAClD,CAMA,SAASS,IAAwB,CAC/B,IAAIC,EAAmB,OAAO,aAAa,QAAQV,GAAiB,CAAA,EAIpE,OAFAU,EAAmB,KAAK,MAAMA,CAAgB,EAE1CA,GACK,EAIX,CAMA,SAASC,IAAwB,CAC/B,MAAMD,EAAmBD,KAIzB,MAHI,CAACC,GAGD,CAACA,EAAiB,UACb,GAEW,KAAK,MACJA,EAAiB,UAAYX,EACpD,CAEA,SAASa,GAAqBR,EAAUC,EAAW,CACjD,MAAME,EAAe,CACnB,IAAKH,EACL,IAAKC,CACT,EACE,OAAO,aAAa,QAAQH,GAAc,EAAI,KAAK,UAAUK,CAAY,CAAC,CAC5E,CAEA,SAASM,IAAqB,CAC5B,IAAIH,EAAmB,OAAO,aAAa,QAAQR,GAAgB,CAAA,EAGnE,OAFAQ,EAAmB,KAAK,MAAMA,CAAgB,EAE1CA,GACK,EAIX,CC5EO,SAASI,IAAsB,CACxBnR,KACR,aAAY,CAClB,CAEO,SAASoR,IAAkB,CAChC,MAAMC,EAAW,SAAS,cAAc,mBAAmB,EACvDA,GACFA,EAAS,UAAU,OAAO,+BAA+B,EAE3D,MAAMC,EAAiB,SAAS,cAAc,0BAA0B,EACpEA,GACFA,EAAe,UAAU,OAAO,sCAAsC,CAE1E,CAEO,SAASC,IAAe,CAC7B,MAAMF,EAAW,SAAS,cAAc,mBAAmB,EACvDA,GACFA,EAAS,UAAU,IAAI,+BAA+B,EAExD,MAAMC,EAAiB,SAAS,cAAc,0BAA0B,EACpEA,GACFA,EAAe,UAAU,IAAI,sCAAsC,CAEvE,CAEO,SAASE,IAAmB,CAClBnS,KACR,UAAU,IAAI,kBAAkB,CACzC,CAEO,SAASoS,IAAoB,CAClC,MAAMC,EAAgB1O,KAClB0O,GACFA,EAAc,UAAU,OAAO,kBAAkB,CAErD,CAEO,SAASC,IAAoB,CAClC,MAAMD,EAAgB1O,KAClB0O,GACFA,EAAc,UAAU,IAAI,kBAAkB,CAElD,CAEO,SAASE,IAAgB,CAE9B,MAAO,CAAC,CADYtQ,IAAa,QAAQ,cAE3C,CAEO,SAASuQ,IAAmB,CACjCvQ,IAAa,QAAQ,eAAiB,EACxC,CCbA,MAAMwQ,GAAYzS,GAAkB,EAC9B0S,GAAkB9O,GAAkB,EACpC+O,GAAyBnS,GAAyB,EAClDoS,GAAa1S,GAAmB,EAChC2S,GAAc1S,GAAc,EAErB2S,GAAe,SAAY,CACtC,MAAMC,EAAYC,KAClBC,KAIA,MAAMC,EAAO,MAHA,MAAM,MAAMH,EAAW,CAClC,OAAQ,KACZ,CAAG,GACuB,OACxBI,KACAC,GAAeF,CAAI,EACnBG,GAA6BH,CAAI,EACjCnN,GAAyBmN,EAAK,UAAU,CAC1C,EAOO,SAASI,GAAgBnJ,EAAS,CACvC,MAAO;AAAA;AAAA;AAAA;AAAA,iBAIQA,CAAO;AAAA,iBAExB,CAEA,SAAS6I,IAAiB,CACxB,MAAMO,EAAeC,KACfT,EAAY,IAAI,IAAIlQ,GAAgB,CAAA,EAC1C,SAAW,CAAC9c,EAAKC,CAAK,IAAK,OAAO,QAAQutB,CAAY,EAChDrR,GAAWlc,CAAK,GAClB+sB,EAAU,aAAa,OAAOhtB,EAAKC,CAAK,EAG5C,OAAO+sB,CACT,CAEA,SAASS,IAAkB,CACzB,IAAID,EAAe,CAAA,EAEnBE,GAAwBF,CAAY,EAEpClQ,GAAiBkQ,CAAY,EAE7B,MAAMG,EAAUzR,IAEV0R,EAAWf,GAAW,CAAC,EAAE,UACzBtsB,EAAOmd,KACb,IAAImQ,EAAcF,EAAQ,QAAQ,eAElC,OAAIf,IAA0BD,KAC5BkB,EAAcjB,GAAuB,OAGhC,CACL,GAAGY,EACH,YAAaI,EACb,YAAaC,EACb,eAAgBF,EAAQ,QAAQ,OAChC,KAAMptB,EACN,YAAaotB,EAAQ,QAAQ,YAC7B,WAAYA,EAAQ,QAAQ,WAC5B,aAActR,GAAgB,cAAc,EAC5C,KAAMA,GAAgB,MAAM,EAC5B,YAAamQ,GAAe,EAC5B,cAAe1O,GAAe,CAClC,CACA,CAEA,SAAS4P,GAAwBnQ,EAAQ,CACvC,MAAMuQ,EAAyBpC,KAC/B,IAAIqC,EAAU1R,GAAgB,KAAK,EAC/B2R,EAAU3R,GAAgB,KAAK,EACnC,MAAMkP,EAASuB,GAAY,MAGzBgB,EAAuB,KACvBA,EAAuB,KACvB,CAAClC,GAAuB,IAExBmC,EAAUD,EAAuB,IACjCE,EAAUF,EAAuB,KAGnCvQ,EAAO,IAAMwQ,EACbxQ,EAAO,IAAMyQ,EAETzC,IAAW,IAAMA,IAAW,SAC9BhO,EAAO,QAAUgO,EAGrB,CAEA,SAAS2B,IAAuB,CAE1BV,GAAa,GACfC,KAGFC,GAAU,UAAU,IAAI,SAAS,EACjCA,GAAU,UAAY,GACtBA,GAAU,SAAW,GAErBtT,GAAuB,EAAG,UAAYmU,GACpC,0BACJ,EACElU,GAAuB,EAAG,UAAYkU,GACpC,4BACJ,EACExB,KAEA,MAAM9B,EAAetP,KAEjB,OAAO,WAAa,KAAOsP,EAAa,UAAU,SAAS,MAAM,GACnEA,EAAa,UAAU,OAAO,MAAM,CAExC,CAEA,SAASmD,IAA8B,CACrCV,GAAU,UAAU,OAAO,SAAS,EACpCA,GAAU,UAAY,SACtBA,GAAU,SAAW,EACvB,CAEA,SAASW,GAAeF,EAAM,CAC5B,GAAI,CAACA,EAAM,CACT,QAAQ,MAAM,4BAA4B,EAC1C,MACD,CAED/T,GAAyB,EAAC,UAAY+T,EAAK,UAAU,KAGjDA,EAAK,cAAc,uBACrBd,KAEA1O,KAAY,UAAU,OAAO,eAAe,EAC5B,SAAS,cAAc,2BAA2B,EAC1D,UAAU,OAAO,SAAS,EAClCtE,GAAyB,EAAC,UAAY8T,EAAK,cAAc,OAEzDZ,KAEA5O,KAAY,UAAU,IAAI,eAAe,EACzB,SAAS,cAAc,2BAA2B,EAC1D,UAAU,IAAI,SAAS,EAC/BtE,GAAyB,EAAC,UAAY8T,EAAK,cAAc,KACzD7F,MAGE6F,EAAK,kBACPnB,KACA9P,IAAa,QAAQ,gBAAkB,KAEvCiQ,KACAjQ,IAAa,QAAQ,gBAAkB,IAGzC,MAAM+R,EAA0B,SAAS,cACvC,+CACJ,EACQC,EAA4B,SAAS,cACzC,mCACJ,EACMf,EAAK,sBAEPc,EAAwB,UAAU,OAAO,UAAU,EACnDC,EAA0B,UAAU,OAAO,UAAU,IAE1B,SAAS,cAClC,0CACN,EACuB,UAAU,IAAI,kBAAkB,EAEnDD,EAAwB,UAAU,IAAI,UAAU,EAChDC,EAA0B,UAAU,IAAI,UAAU,GAIlD,CAACf,EAAK,cAAc,uBACpB,CAACA,EAAK,sBACN,CAACA,EAAK,kBAGNf,IAEJ,CAEA,SAASkB,GAA6BH,EAAM,CAC1C,MAAMgB,EAAgBhB,EAAK,UAAU,OAC/B9J,EAAO,SAAS,cAAc,kBAAkB,EAElDA,IAEF7B,KACA0H,GAAmB,wBAAwB,EAC3CA,GAAmB,4BAA4B,EAC/Ca,MAGFlL,KAGIwE,GACFwB,KAGF,MAAM1D,EAAQ,SAAS,iBAAiB,kBAAkB,EAC1D,GAAIA,EAAO,CACT,MAAMiN,EAAY,SAAS,cAAc,YAAY,EAC/CC,EAAMD,EAAU,UAsBtB,GArBAA,EAAU,aAAY,EACtBA,EAAU,UAAYjN,EAGtBiN,EAAU,OAASD,EAEfhB,EAAK,0BACP5F,KACA8G,EAAI,MAAM,CACR,OAAQF,EACR,UAAW,GACX,KAAM,CACd,CAAO,GAEDE,EAAI,MAAM,CACR,OAAQF,EACR,UAAW,GACX,KAAM,EACd,CAAO,EAIDjS,EAAY,EAAC,QAAQ,cAAgB,QACrC,OAAO,WAAa,IACpB,CACA,MAAMkO,EAAO,SAAS,iBAAiB,yBAAyB,EAI1DkE,EAHa,MAAM,KAAKlE,CAAI,EAAE,OACjC/C,GAAQA,EAAI,UAAU,SAAS,kBAAkB,IAAM,EACzD,EAAC,CAAC,EAC+B,cAAc,uBAAuB,EACvEqD,GAAc4D,CAAc,EACb,QAAQ,CAAC,EACjB,YAAW,CACnB,CACF,CACH,CCrSA,SAASC,IAAgB,CACvB,SAAS,KAAK,UAAU,IAAI,0BAA0B,CACxD,CAEA,SAASC,IAAe,CACtB,SAAS,KAAK,UAAU,OAAO,0BAA0B,CAC3D,CAOA,SAASC,GAAUC,EAAc,CAC/B,MAAM3F,EAAQ9N,KACd8N,EAAM,UAAS,EACfwF,KACA3S,GAAoB8S,CAAY,EAEhC3F,EAAM,cAAc,mBAAmB,EAAE,cAAc,QAAQ,EAAE,OACnE,CAKA,SAAS4F,IAAa,CACpB,MAAM5F,EAAQ9N,KACduT,KACAzF,EAAM,MAAK,CACb,CAKA,SAAS6F,IAAqB,CAC5B,MAAMC,EAAgB3T,KACSJ,KAER,QAASgU,GAAoB,CAClDA,EAAgB,iBAAiB,QAAU/sB,GAAM,CAE/C,GACE,OAAO,YAAc,KACrB,CAAC+sB,EAAgB,UAAU,SAAS,UAAU,EAC9C,CACA,MAAMJ,EAAeI,EAAgB,QAAQ,iBAC7CL,GAAUC,CAAY,CACvB,CACP,CAAK,CACL,CAAG,EAEDG,EAAc,iBAAiB,QAAU,GAAM,CAC7CF,IACJ,CAAG,EAED,OAAO,iBAAiB,SAAW,GAAM,CACnC,OAAO,YAAc,KACvBA,IAEN,CAAG,CACH,CAEA,SAASI,IAAoB,CAC3BH,IACF,CC5CA,MAAMjC,GAAkB9O,GAAkB,EACpCmR,GAAuBxU,GAAuB,EAC9CkS,GAAYzS,GAAkB,EAC9B4S,GAAa1S,GAAmB,EAChC2S,GAAc1S,GAAc,EAE3B,SAAS6U,IAAc,CAC5BC,KACIvC,IACFwC,KAEFC,KAEA1C,GAAU,iBAAiB,QAAU3qB,GAAM,CACrC2qB,GAAU,WAAa,KACzB3qB,EAAE,eAAc,EAChBgrB,KAEN,CAAG,CACH,CAKA,SAASqC,IAAkB,CACAnT,KACR,QAASmC,GAAU,CAClCA,EAAM,iBAAiB,SAAW,GAAM,CACtC,MAAM5Y,EAAa+W,GAAW,EAAE,OAAO,KAAK,EAC5C8S,GAAuB7pB,CAAU,EAE7B4Y,EAAM,QAAQ,SAAW,iBAC3BuQ,KAEF9J,GAAU,EAAI,EACdlE,GAA0B,CAAE,WAAY,EAAI,CAAE,CACpD,CAAK,CACL,CAAG,CACH,CAMA,SAAS0O,GAAuB9uB,EAAM,CACrByb,KACR,QAASoC,GAAU,CACxBA,EAAM,UAAY7d,EAClB6d,EAAM,UAAU,IAAI,YAAY,CACpC,CAAG,EAED,MAAMkR,EAAoBvU,GAAuB,MAAM,EACvDuU,EAAkB,UAAY/uB,CAChC,CAMA,SAAS4uB,IAAmB,CAC1B,MAAMI,EAAmBjV,KACnBkV,EAAkBjV,KACxBgV,EAAiB,QAAShY,GAAW,CACnC,MAAMzS,EACJyS,EAAO,QAAQ,iCAAmC,OACpDkY,GAAiBlY,EAAQiY,EAAiB1qB,CAAQ,CACtD,CAAG,CACH,CASA,SAASoqB,IAAkB,CACC7U,KACR,QAAS9C,GAAW,CACpCA,EAAO,iBAAiB,QAAU,GAAM,CACtCsV,GAAW,QAASzO,GAAU,CAC5BA,EAAM,UAAY7G,EAAO,QAAQ,SACjC6G,EAAM,UAAU,IAAI,YAAY,CACxC,CAAO,EACD,MAAMkR,EAAoBvU,GAAuB,MAAM,EACvDuU,EAAkB,UAAY/X,EAAO,QAAQ,SAE7C,MAAMgU,EAAShU,EAAO,QAAQ,OAG9B,GAAIgU,GAAUA,IAAW,IAAMA,IAAW,OAAW,CACnDuB,GAAY,MAAQvB,EACpB,MAAMwC,EAAUxW,EAAO,QAAQ,QACzByW,EAAUzW,EAAO,QAAQ,QAC/B6T,GAAsB2C,EAASC,EAASzC,CAAM,CACtD,KAAa,CACL,MAAMmE,EAAkB5D,KACpB4D,EAAgB,KAAOA,EAAgB,IACzCpS,GAAiBoS,CAAe,EAEhCpS,GAAiB,CAAE,CAAA,EAGrBmO,KACAqB,GAAY,MAAQ,EACrB,CAGGvV,EAAO,QAAQ,4BAA8B,QAC/CoX,KAGFhO,GAA0B,CAAE,eAAgB,EAAI,CAAE,EAGlDoM,IACN,CAAK,CACL,CAAG,CACH,CAYA,SAAS0C,GAAiBlY,EAAQiY,EAAiB1qB,EAAU,CAC3D,IAAI6qB,EAAY,QACZ7qB,IACF6qB,EAAY,SAEd,MAAM/C,EAAyBnS,KAE/BlD,EAAO,iBAAiBoY,EAAY5tB,GAAM,CACxCytB,EAAgB,QAASpR,GAAU,CACjCA,EAAM,UAAY7G,EAAO,QAAQ,cACjC6G,EAAM,UAAU,IAAI,YAAY,CACtC,CAAK,EAEDwO,EAAuB,MAAQrV,EAAO,QAAQ,YAC9CyX,GAAqB,MAAQzX,EAAO,QAAQ,cAE5C,MAAM+X,EAAoBvU,GAAuB,YAAY,EAC7DuU,EAAkB,UAAY/X,EAAO,QAAQ,cAEzCzS,GACF6pB,KAGF,OAAOzS,EAAU,EAAG,QAAQ,OAC5ByE,GAA0B,CAAE,gBAAiB,EAAI,CAAE,EAGnDoM,IACJ,CAAG,CACH,CC/JA,MAAM6C,GAAsB,wBAE5B,MAAMC,EAAI,CACR,aAAc,CA2HdnI,GAAA,mBAAc,IACZ,IAAI,QAAQ,CAACoI,EAAKC,IAAQ,CACxB,UAAU,YAAY,mBACnBC,GAAYF,EAAIE,CAAO,EACvBC,GAAUF,EAAIE,CAAK,EACpB,CAAE,mBAAoB,EAAM,CACpC,CACA,CAAK,GA/HD,KAAK,aAAelwB,EACrB,CAED,MAAM,YAAa,CACjB,KAAK,kBAAiB,EACtB,KAAK,sBAAwB,gBAAiB,UAG9CmpB,KACA1H,KACAgG,KACAyH,KACAF,KACA9P,KAIA,MAAMiR,EADYtV,KACO,QAAQ,QAAU,QACvC,KAAK,uBAAyBsV,EAChC,KAAK,aAAa,SAASN,GAAqB,EAAI,GAEpD,QAAQ,IACN,iEACR,EACM,KAAK,aAAa,SAASA,GAAqB,EAAK,GAI/BhW,KACR,QAASjJ,GAAc,CACrCA,EAAU,UAAY4c,GAAgB,gCAAgC,CAC5E,CAAK,EAED,MAAM4C,EAAqBzE,KAE3B,GACEyE,GACAA,EAAmB,KACnBA,EAAmB,KACnB,CAACjT,GAAgC,GACjC,CAAC0O,GAAuB,EACxB,CACA,MAAMwE,EAAMD,EAAmB,IACzBE,EAAMF,EAAmB,IAC/B,KAAK,uBAAuBC,EAAKC,CAAG,CAC1C,MACM,KAAK,oBAAmB,EAGtB,KAAK,aAAa,SAAST,EAAmB,IAAM,IACtD7C,IAEH,CAED,mBAAoB,CAClB,MAAMuD,EAAO,SAAS,cAAc,uBAAuB,EACrDC,EAAa,SAAS,cAAc,gCAAgC,EAEtE,KAAK,YACHD,IACFA,EAAK,UAAU,OAAO,kBAAkB,EACxCC,EAAW,OAAM,GAGfD,IACFA,EAAK,UAAU,IAAI,kBAAkB,EACrCC,EAAW,UAAU,OAAO,kBAAkB,EAGnD,CAED,WAAY,CACV,OAAO,OAAO,WAAa,OAAO,OAAO,QAC1C,CAED,qBAAsB,CAChB,KAAK,uBAAyB,KAAK,UAErC,KAAK,mBAAkB,EAEvB,KAAK,aAAa,SAASX,GAAqB,EAAK,CAExD,CAOD,oBAAqB,CACnB,KAAK,YAAa,EACf,KAAK,MAAO/X,GAAS,CAEpB,KAAM,CAAE,SAAAwT,EAAU,UAAAC,GAAczT,EAAK,OACrCgU,GAAqBR,EAAUC,CAAS,EACxC,KAAK,uBAAuBD,EAAUC,CAAS,CACvD,CAAO,EACA,MAAOjrB,GAAQ,CACd0sB,IACR,CAAO,CACJ,CAOD,uBAAuBqD,EAAKC,EAAK,CAC/B,MAAMG,EAAc,IAAI,IAAI,OAAO,SAAS,IAAI,EAChDpT,GAAYoT,EAAa,MAAOJ,CAAG,EACnChT,GAAYoT,EAAa,MAAOH,CAAG,EACnCjT,GAAYoT,EAAa,MAAO,EAAI,EACpC,OAAO,SAAS,KAAOA,CACxB,CAeH,CC/JA,SAAS,iBAAiB,mBAAoB,IAAM,CACtC,IAAIX,KACZ,WAAU,CAChB,CAAC","x_google_ignoreList":[1,2,3,4,5,6,7,8]}