{"version":3,"sources":["webpack:///../../../src/components/VExpansionPanel/VExpansionPanels.ts","webpack:///./src/shared/constants/booking/ReasonsForAbsence.js","webpack:///./src/components/skeleton/booking-list-skeleton.vue?286d","webpack:///./src/components/booking/booking-list-feedback.vue?03d4","webpack:///../../../src/components/VExpansionPanel/VExpansionPanelContent.ts","webpack:///./src/shared/constants/booking/BookingCommentType.js","webpack:///../../../src/components/VForm/VForm.ts","webpack:///./src/router/views/home.vue?3eec","webpack:///./src/components/layout/layout-filter.vue?15d4","webpack:///./src/shared/constants/layout/LayoutToggle.js","webpack:///src/components/layout/layout-filter.vue","webpack:///./src/components/layout/layout-filter.vue?637d","webpack:///./src/components/layout/layout-filter.vue","webpack:///./src/components/booking/booking-date-strip.vue?8571","webpack:///./src/components/picker/date-strip.vue?b421","webpack:///./src/components/picker/date-strip-day.vue?5415","webpack:///src/components/picker/date-strip-day.vue","webpack:///./src/components/picker/date-strip-day.vue?48e3","webpack:///./src/components/picker/date-strip-day.vue","webpack:///src/components/picker/date-strip.vue","webpack:///./src/components/picker/date-strip.vue?9e01","webpack:///../../../src/components/VItemGroup/VItem.ts","webpack:///../../../src/components/VSlideGroup/VSlideItem.ts","webpack:///./src/components/picker/date-strip.vue","webpack:///src/components/booking/booking-date-strip.vue","webpack:///./src/components/booking/booking-date-strip.vue?9adf","webpack:///./src/components/booking/booking-date-strip.vue","webpack:///./src/components/replaceMe/replace-me-banner.vue?41cb","webpack:///./src/components/replaceMe/replace-me-form.vue?c605","webpack:///src/components/replaceMe/replace-me-form.vue","webpack:///./src/components/replaceMe/replace-me-form.vue?c0dd","webpack:///./src/components/replaceMe/replace-me-form.vue","webpack:///./src/services/mappers/ReplaceMeMapper.js","webpack:///src/components/replaceMe/replace-me-banner.vue","webpack:///./src/components/replaceMe/replace-me-banner.vue?321a","webpack:///./src/components/replaceMe/replace-me-banner.vue","webpack:///./src/components/booking/booking-summary-empty-day-block.vue?83fe","webpack:///./src/shared/constants/date/DayOfWeek.js","webpack:///./src/shared/constants/date/DayOfWeekIso.js","webpack:///src/components/booking/booking-summary-empty-day-block.vue","webpack:///./src/components/booking/booking-summary-empty-day-block.vue?cccc","webpack:///./src/components/booking/booking-summary-empty-day-block.vue","webpack:///./src/components/layout/the-dashboard-navigation.vue?3960","webpack:///./src/components/layout/the-dashboard-navigation-item.vue?6549","webpack:///src/components/layout/the-dashboard-navigation-item.vue","webpack:///./src/components/layout/the-dashboard-navigation-item.vue?346c","webpack:///./src/components/layout/the-dashboard-navigation-item.vue","webpack:///src/components/layout/the-dashboard-navigation.vue","webpack:///./src/components/layout/the-dashboard-navigation.vue?a8f2","webpack:///./src/components/layout/the-dashboard-navigation.vue","webpack:///./src/components/booking/cancel-booking-dialog.vue?717a","webpack:///src/components/booking/cancel-booking-dialog.vue","webpack:///./src/components/booking/cancel-booking-dialog.vue?917d","webpack:///./src/components/booking/cancel-booking-dialog.vue","webpack:///./src/models/overview/overviewStatsDto.js","webpack:///./src/components/booking/dashboard-fill-rate-stats.vue?59e8","webpack:///./src/components/overview/client-group-overview-fill-rate-chart.vue?cac2","webpack:///./node_modules/chart.js/dist/chunks/helpers.segment.js","webpack:///./node_modules/chart.js/dist/chart.esm.js","webpack:///./node_modules/vue-chartjs/legacy/index.js","webpack:///src/components/overview/client-group-overview-fill-rate-chart.vue","webpack:///./src/components/overview/client-group-overview-fill-rate-chart.vue?3f72","webpack:///./src/components/overview/client-group-overview-fill-rate-chart.vue","webpack:///src/components/booking/dashboard-fill-rate-stats.vue","webpack:///./src/components/booking/dashboard-fill-rate-stats.vue?5a54","webpack:///./src/components/booking/dashboard-fill-rate-stats.vue","webpack:///./src/components/booking/client-fill-rate-filter.vue?13a0","webpack:///src/components/booking/client-fill-rate-filter.vue","webpack:///./src/components/booking/client-fill-rate-filter.vue?6fe9","webpack:///./src/components/booking/client-fill-rate-filter.vue","webpack:///./src/shared/constants/booking/FillRateFilterType.js","webpack:///./src/mixins/clientGroupOverviewFeatureMixin.js","webpack:///./src/components/booking/summary/booking-summary-card-list.vue?150b","webpack:///./src/components/skeleton/booking-card-list-skeleton-loader.vue?2b97","webpack:///./src/components/skeleton/booking-card-skeleton-loader.vue?c272","webpack:///src/components/skeleton/booking-card-skeleton-loader.vue","webpack:///./src/components/skeleton/booking-card-skeleton-loader.vue?6f9c","webpack:///./src/components/skeleton/booking-card-skeleton-loader.vue","webpack:///src/components/skeleton/booking-card-list-skeleton-loader.vue","webpack:///./src/components/skeleton/booking-card-list-skeleton-loader.vue?2ab8","webpack:///./src/components/skeleton/booking-card-list-skeleton-loader.vue","webpack:///./src/components/booking/booking-card.vue?9f92","webpack:///./src/components/cert-pills.vue?3a6b","webpack:///src/components/cert-pills.vue","webpack:///./src/components/cert-pills.vue?1910","webpack:///./src/components/cert-pills.vue","webpack:///./src/components/booking/booking-list-policies.vue?812a","webpack:///src/components/booking/booking-list-policies.vue","webpack:///./src/components/booking/booking-list-policies.vue?3ff0","webpack:///./src/components/booking/booking-list-policies.vue","webpack:///./src/components/booking/booking-list-feedback.vue?7c45","webpack:///./src/shared/constants/feedback/CandidateHaveBack.js","webpack:///src/components/booking/booking-list-feedback.vue","webpack:///./src/components/booking/booking-list-feedback.vue?9d87","webpack:///../../../src/components/VRadioGroup/VRadio.ts","webpack:///../../../src/components/VRadioGroup/VRadioGroup.ts","webpack:///../../../src/components/VRating/VRating.ts","webpack:///./src/components/booking/booking-list-feedback.vue","webpack:///./src/shared/constants/booking/ClientBookingStatus.js","webpack:///./src/components/booking/booking-card-menu.vue?4a93","webpack:///src/components/booking/booking-card-menu.vue","webpack:///./src/components/booking/booking-card-menu.vue?f031","webpack:///./src/components/booking/booking-card-menu.vue","webpack:///./src/components/booking/booking-card-id-label.vue?37fd","webpack:///src/components/booking/booking-card-id-label.vue","webpack:///./src/components/booking/booking-card-id-label.vue?5aa2","webpack:///./src/components/booking/booking-card-id-label.vue","webpack:///src/components/booking/booking-card.vue","webpack:///./src/components/booking/booking-card.vue?4571","webpack:///./src/components/booking/booking-card.vue","webpack:///src/components/booking/summary/booking-summary-card-list.vue","webpack:///./src/components/booking/summary/booking-summary-card-list.vue?ffdb","webpack:///./src/components/booking/summary/booking-summary-card-list.vue","webpack:///./src/components/booking/summary/booking-summary-list.vue?eece","webpack:///./src/components/skeleton/booking-list-group-skeleton.vue?c6a9","webpack:///./src/components/skeleton/booking-list-skeleton.vue?9f21","webpack:///./src/mixins/bookingListMixin.js","webpack:///src/components/skeleton/booking-list-skeleton.vue","webpack:///./src/components/skeleton/booking-list-skeleton.vue?5622","webpack:///./src/components/skeleton/booking-list-skeleton.vue","webpack:///src/components/skeleton/booking-list-group-skeleton.vue","webpack:///./src/components/skeleton/booking-list-group-skeleton.vue?ba70","webpack:///./src/components/skeleton/booking-list-group-skeleton.vue","webpack:///./src/components/booking/booking-list.vue?824e","webpack:///src/components/booking/booking-list.vue","webpack:///./src/components/booking/booking-list.vue?292c","webpack:///./src/components/booking/booking-list.vue","webpack:///src/components/booking/summary/booking-summary-list.vue","webpack:///./src/components/booking/summary/booking-summary-list.vue?de06","webpack:///./src/components/booking/summary/booking-summary-list.vue","webpack:///src/router/views/home.vue","webpack:///./src/router/views/home.vue?0389","webpack:///./src/router/views/home.vue","webpack:///./src/components/general/error-alert.vue?f99f","webpack:///src/components/general/error-alert.vue","webpack:///./src/components/general/error-alert.vue?ea09","webpack:///./src/components/general/error-alert.vue","webpack:///./src/components/booking/grade-list.vue?ece4","webpack:///src/components/booking/grade-list.vue","webpack:///./src/components/booking/grade-list.vue?e039","webpack:///./src/components/booking/grade-list.vue","webpack:///./src/shared/constants/date/DateFormatToken.js","webpack:///./src/components/picker/date-strip.vue?00b1","webpack:///./src/shared/constants/booking/BookingStatus.js","webpack:///../../../src/components/VTextarea/VTextarea.ts","webpack:///./src/components/booking/booking-list-feedback.vue?1684","webpack:///../../../src/components/VAutocomplete/VAutocomplete.ts","webpack:///../../../src/components/VExpansionPanel/VExpansionPanelHeader.ts","webpack:///../../../src/components/VExpansionPanel/VExpansionPanel.ts","webpack:///./node_modules/nanoid/index.browser.js","webpack:///./src/utils/parse-time-string-to-object.js","webpack:///./src/mixins/dateMixin.js"],"names":["name","expansionPanels","this","props","accordion","disabled","flat","hover","focusable","inset","popout","readonly","tile","Boolean","computed","$attrs","hasOwnProperty","Array","value","length","methods","getValue","item","nextValue","index","toggleMethod","ReasonsForAbsence","Object","freeze","id","module","exports","baseMixins","data","isActive","expansionPanel","watch","parentIsActive","immediate","isBooted","oldVal","$nextTick","h","showLazyContent","setBackgroundColor","staticClass","directives","class","BookingCommentType","PRIVATE","CANDIDATE","CONTACT","LATE","form","inheritAttrs","lazyValidation","inputs","watchers","errorBag","errors","deep","watcher","input","val","_uid","valid","shouldValidate","filter","setTimeout","watchInput","found","find","i","unwatch","attrs","novalidate","attrs$","on","submit","e","$emit","$slots","_vm","_h","$createElement","_c","_self","isMediumOrLower","compTitle","displayRandomSubtitleGreeting","clientGroupOverviewFeatureToggles","stats","_e","fillRateFilterType","generateFillRateFilterOptions","filterChanged","isMobileViewPort","refreshDashboardBookingData","refreshSummaryData","selectedDay","$event","changeDay","monthChanged","yearChanged","selectedDayHasBooking","isLoadingSummaryOrOverviewData","layout","changeLayout","expandAll","_v","_s","compExpandBtnText","compBookings","compBookingSummarySkeletonLoaderCount","showCandidateDialog","openCancelBookingDialog","viewTodaysBookings","model","callback","$$v","showCandidateModal","expression","selectedCandidate","closeCandidateDialog","showCancelBookingDialog","bookingToCancel","closeCancelBookingDialog","closeCancelBookingDialogAndRefresh","staticRenderFns","layoutToggle","_l","options","defaultLayoutOptions","option","key","scopedSlots","_u","fn","ref","_g","_b","layoutChanged","emit","icon","domProps","tooltip","LayoutToggle","TILE","LIST","MAP","mixins","baseMixin","preSelect","type","Number","default","VBtn","VBtnToggle","VIcon","VTooltip","isSmallOrLower","changeYear","year","bookingOverview","format","getToday","changeMonth","dateSelected","selectedSliderMonth","x","staticStyle","active","toggle","isCurrentMonth","displayString","selectedSliderDay","day","isSelected","dateObject","numberOfBookings","handleDayClick","selected","isToday","clickedDay","isWeekend","displayStringDayName","counter","required","today","isSame","weekDay","VBadge","VCard","components","String","bookings","menu","displayDate","Date","selectedDate","dateFormat","DateFormatToken","dayFormat","dayNameFormat","monthFormat","ar","monthIndex","tmpDate","push","daysArray","firstDayOfSelectedMonth","thisMonthDayJS","displaySliderMonth","tmpDayJs","years","booking","dayStr","totalBookingsCount","$M","$y","dayObject","BaseItem","activeClass","$scopedSlots","element","VSlideGroup","VSlideItem","DateStrip","refreshData","initialLoad","month","reRenderDateStrip","getSelectedClients","loadSummaryData","loadYearOfBookingOverviewData","result","clientIds","isSuccess","dateString","bookingCount","todaysRecord","shouldEmitChanges","nItems","isReplaceMeEnabled","statusCheckSuccess","isLoadingReplaceMeStatusCheck","$t","isTodayActive","todaySelected","compTodayIcon","compTodayText","compTodayTooltipText","isTomorrowActive","tomorrowSelected","compTomorrowIcon","compTomorrowText","compTomorrowTooltipText","showReplaceMeDialog","payload","closeModal","isValid","compSelectedDay","locations","rules","$set","selectedLocationsName","reasons","gradesList","isLoadingGrades","requiredWithAtleastOneItemSelected","isLoading","close","getAllClientLocationsWithReplaceMePermission","grades","location","isNextMonday","initValidationRules","submitReplaceMeBooking","$refs","replaceMeForm","validate","VAutocomplete","VCardActions","VCardText","VCardTitle","VDivider","VForm","VSelect","VSpacer","VTextField","VTextarea","firstAccessibleLocation","reasonForAbsence","room","additionalNotes","locationId","classification","subjectList","ReplaceMeForm","replaceMeStatusCheck","replaceMeEnabled","getFirstClientLocationWithReplaceMePermissions","getUserStandardBookingDetails","isTodayAlreadySet","isTomorrowAlreadySet","nextMondayOrTomorrow","generateReplaceMeBookingTooltipTextFromBookingStatus","initReplaceMeStatusCheck","checkReplaceMeStatus","loadClientGrades","forceRefresh","response","displayDialog","ReplaceMeSelectionType","dayText","status","ReplaceMeMapper","VAlert","VDialog","description","title","isPast","hasAtLeastOneLocationNotPassedSameDayCutOff","query","date","compDateForCreateBooking","jumpToToday","DayOfWeek","SUNDAY","MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","DayOfWeekIso","isBefore","$d","toDateString","add","isoWeekday","isActiveNavItem","to","navItems","VCol","VRow","isLoadingCancelBooking","show","compInputLabel","unableToCancelDescription","compReasonForBeingUnableToCancel","compConsultantLabel","ownerName","ownerPhone","isSubmitButtonDisabled","localStartTime","localNow","isAfter","candidate","isBookingInPast","hasAlreadyBeenAssignedToACandidate","$i18n","d","canCancelBooking","companyName","bookingId","formattedStartDate","cancelReason","cancelBooking","OverviewStatsDto","constructor","openBookings","totalBookings","filled","unfilled","displayNA","percentage","skipRounding","isNaN","fillRate","Math","round","compFilledBookings","compUnfilledBookings","compTotalBookings","hasStatsObject","chartData","width","height","plugins","requestAnimFrame","window","requestAnimationFrame","throttled","thisArg","updateFn","updateArgs","args","prototype","slice","call","ticking","rest","apply","debounce","delay","timeout","clearTimeout","_toLeftRightCenter","align","_alignStartEnd","start","end","_textX","left","right","rtl","check","noop","uid","isNullOrUndef","isArray","toString","isObject","isNumberFinite","isFinite","finiteOrDefault","defaultValue","valueOrDefault","toPercentage","dimension","endsWith","parseFloat","toDimension","each","loopable","reverse","len","keys","_elementsEqual","a0","a1","ilen","v0","v1","datasetIndex","clone$1","source","map","target","create","klen","k","isValidKey","indexOf","_merger","tval","sval","merge","sources","merger","mergeIf","_mergerIf","emptyString","dot","indexOfDotOrLength","idx","resolveObjectKey","obj","pos","_capitalize","str","charAt","toUpperCase","defined","isFunction","setsEqual","a","b","size","has","_isClickEvent","PI","TAU","PITAU","INFINITY","POSITIVE_INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","sign","niceNum","range","roundedRange","almostEquals","niceRange","pow","floor","fraction","niceFraction","_factorize","sqrt","sort","pop","isNumber","n","y","epsilon","abs","almostWhole","rounded","_setMinAndMaxByKey","array","property","min","max","toRadians","degrees","toDegrees","radians","_decimalPlaces","p","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","angle","atan2","distance","distanceBetweenPoints","pt1","pt2","_angleDiff","_normalizeAngle","_angleBetween","sameAngleIsFullCircle","s","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","_int16Range","_isBetween","atEdge","t","elasticIn","sin","elasticOut","effects","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","cos","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInBounce","easeOutBounce","m","easeInOutBounce","v","lim","l","p2b","n2b","b2n","n2p","map$1","0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","c","f","hex","h1","h2","eq","isShort","r","g","hexParse","ret","hexString","undefined","HUE_RE","hsl2rgbn","hsv2rgbn","hwb2rgbn","w","rgb","hueValue","rgb2hsl","calln","hsl2rgb","hwb2rgb","hsv2rgb","hue","hueParse","exec","p1","p2","rotate","deg","hslString","Z","Y","X","W","V","U","T","S","R","Q","P","O","N","M","L","K","G","H","I","J","names$1","OiceXe","antiquewEte","aqua","aquamarRe","azuY","beige","bisque","black","blanKedOmond","Xe","XeviTet","bPwn","burlywood","caMtXe","KartYuse","KocTate","cSO","cSnflowerXe","cSnsilk","crimson","cyan","xXe","xcyan","xgTMnPd","xWay","xgYF","xgYy","xkhaki","xmagFta","xTivegYF","xSange","xScEd","xYd","xsOmon","xsHgYF","xUXe","xUWay","xUgYy","xQe","xviTet","dAppRk","dApskyXe","dimWay","dimgYy","dodgerXe","fiYbrick","flSOwEte","foYstWAn","fuKsia","gaRsbSo","ghostwEte","gTd","gTMnPd","Way","gYF","gYFLw","gYy","honeyMw","hotpRk","RdianYd","Rdigo","ivSy","khaki","lavFMr","lavFMrXsh","lawngYF","NmoncEffon","ZXe","ZcSO","Zcyan","ZgTMnPdLw","ZWay","ZgYF","ZgYy","ZpRk","ZsOmon","ZsHgYF","ZskyXe","ZUWay","ZUgYy","ZstAlXe","ZLw","lime","limegYF","lRF","magFta","maPon","VaquamarRe","VXe","VScEd","VpurpN","VsHgYF","VUXe","VsprRggYF","VQe","VviTetYd","midnightXe","mRtcYam","mistyPse","moccasR","navajowEte","navy","Tdlace","Tive","TivedBb","Sange","SangeYd","ScEd","pOegTMnPd","pOegYF","pOeQe","pOeviTetYd","papayawEp","pHKpuff","peru","pRk","plum","powMrXe","purpN","YbeccapurpN","Yd","Psybrown","PyOXe","saddNbPwn","sOmon","sandybPwn","sHgYF","sHshell","siFna","silver","skyXe","UXe","UWay","UgYy","snow","sprRggYF","stAlXe","tan","teO","tEstN","tomato","Qe","viTet","JHt","wEte","wEtesmoke","Lw","LwgYF","unpack","unpacked","tkeys","j","ok","nk","replace","parseInt","nameParse","transparent","toLowerCase","RGB_RE","rgbParse","rgbString","interpolate","rgb1","rgb2","modHSL","ratio","tmp","clone","proto","assign","fromObject","functionParse","Color","_rgb","_valid","color","weight","c1","c2","w2","w1","index_esm","isPatternOrGradient","getHoverColor","saturate","darken","overrides","getScope$1","node","split","root","scope","values","Defaults","_descriptors","animation","backgroundColor","borderColor","datasets","devicePixelRatio","context","chart","platform","getDevicePixelRatio","elements","events","font","family","style","lineHeight","hoverBackgroundColor","ctx","hoverBorderColor","hoverColor","indexAxis","interaction","mode","intersect","includeInvisible","maintainAspectRatio","onHover","onClick","parsing","responsive","scale","scales","showLine","drawActiveElementsOnTop","describe","targetScope","targetName","scopeObject","targetScopeObject","privateName","defineProperties","writable","enumerable","local","defaults","_scriptable","startsWith","_indexable","_fallback","toFontString","_measureText","gc","longest","string","textWidth","measureText","_longestText","arrayOfThings","cache","garbageCollect","save","jlen","thing","nestedThing","restore","gcLen","splice","_alignPixel","pixel","currentDevicePixelRatio","halfWidth","clearCanvas","canvas","getContext","resetTransform","clearRect","drawPoint","xOffset","yOffset","cornerRadius","pointStyle","rotation","radius","rad","translate","drawImage","beginPath","arc","closePath","moveTo","lineTo","SQRT1_2","rect","fill","borderWidth","stroke","_isPointInArea","point","area","margin","top","bottom","clipArea","clip","unclipArea","_steppedLineTo","previous","flip","midpoint","_bezierCurveTo","bezierCurveTo","cp1x","cp2x","cp1y","cp2y","renderText","text","opts","lines","strokeWidth","strokeColor","line","setRenderOpts","strokeStyle","lineWidth","strokeText","maxWidth","fillText","decorateText","translation","fillStyle","textAlign","textBaseline","strikethrough","underline","metrics","actualBoundingBoxLeft","actualBoundingBoxRight","actualBoundingBoxAscent","actualBoundingBoxDescent","yDecoration","decorationWidth","addRoundedRectPath","topLeft","bottomLeft","bottomRight","topRight","LINE_HEIGHT","RegExp","FONT_STYLE","toLineHeight","matches","match","numberOrZero","_readValueToProps","objProps","read","prop","toTRBL","toTRBLCorners","toPadding","toFont","fallback","console","warn","resolve","info","cacheable","_addGrace","minmax","grace","beginAtZero","change","keepZero","createContext","parentContext","_lookup","table","cmp","mid","hi","lo","_lookupByKey","_rlookupByKey","_filterBetween","arrayEvents","listenArrayEvents","listener","_chartjs","listeners","defineProperty","configurable","forEach","method","base","res","object","unlistenArrayEvents","stub","_arrayUnique","items","set","Set","from","_createResolver","scopes","prefixes","rootScopes","getTarget","_resolve","Symbol","toStringTag","_cacheable","_scopes","_rootScopes","_getTarget","override","Proxy","_keys","_cached","_resolveWithPrefixes","Reflect","getOwnPropertyDescriptor","getPrototypeOf","getKeysFromAllScopes","includes","storage","_storage","_attachContext","proxy","subProxy","descriptorDefaults","_proxy","_context","_subProxy","_stack","setContext","receiver","_resolveWithContext","allKeys","ownKeys","scriptable","indexable","_allKeys","isScriptable","isIndexable","readKey","prefix","needsSubResolver","descriptors","_resolveScriptable","_resolveArray","Error","join","delete","createSubResolver","arr","resolver","resolveFallback","getScope","parent","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","subGetTarget","resolveKeysFromAllScopes","_parseObjectDataRadialScale","meta","count","iScale","_parsing","parsed","parse","EPSILON","getPoint","points","skip","getValueAxis","splineCurve","firstPoint","middlePoint","afterPoint","current","next","d01","d12","s01","s12","fa","fb","monotoneAdjust","deltaK","mK","pointsLen","alphaK","betaK","tauK","squaredMagnitude","pointCurrent","pointAfter","monotoneCompute","valueAxis","delta","pointBefore","iPixel","vPixel","splineCurveMonotone","slopeDelta","capControlPoint","pt","capBezierPoints","inArea","inAreaPrev","inAreaNext","_updateBezierControlPoints","loop","controlPoints","spanGaps","cubicInterpolationMode","prev","tension","_isDomSupported","document","_getParentNode","domNode","parentNode","host","parseMaxStyle","styleValue","parentProperty","valueInPixels","getComputedStyle","getStyle","el","getPropertyValue","positions","getPositionedStyle","styles","suffix","useOffsetPos","shadowRoot","getCanvasPosition","touches","offsetX","offsetY","box","getBoundingClientRect","clientX","clientY","getRelativePosition","evt","borderBox","boxSizing","paddings","borders","getContainerSize","maxHeight","container","containerStyle","containerBorder","containerPadding","clientWidth","clientHeight","round1","getMaximumSize","bbWidth","bbHeight","aspectRatio","margins","containerSize","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","setTransform","supportsEventListenerOptions","passiveSupported","addEventListener","removeEventListener","readUsedSize","_pointInLine","_steppedInterpolation","_bezierInterpolation","cp1","cp2","intlCache","Map","getNumberFormat","locale","cacheKey","JSON","stringify","formatter","get","Intl","NumberFormat","formatNumber","num","getRightToLeftAdapter","rectX","itemWidth","getLeftToRightAdapter","_itemWidth","getRtlAdapter","overrideTextDirection","direction","original","getPropertyPriority","setProperty","prevTextDirection","restoreTextDirection","propertyFn","between","compare","normalize","normalizeSegment","getSegment","segment","bounds","startBound","endBound","_boundSegment","prevValue","inside","subStart","startIsBefore","endIsBefore","shouldStart","shouldStop","_boundSegments","segments","sub","findStartAndEnd","solidSegments","last","cur","stop","_computeSegments","segmentOptions","_loop","splitByStyles","completeLoop","_fullLoop","doSplitByStyles","chartContext","_chart","baseStyle","readStyle","_datasetIndex","prevStyle","addStyle","st","dir","p0","p0DataIndex","p1DataIndex","styleChanged","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","_request","_charts","_running","_lastDate","anims","callbacks","numSteps","duration","initial","currentStep","_update","_refresh","now","remaining","running","draw","_active","_total","tick","_notify","charts","complete","progress","event","cb","_getAnims","reduce","acc","_duration","cancel","animator","interpolators","factor","c0","mix","cfg","currentValue","_fn","_easing","easing","_start","_target","_prop","_from","_to","_promises","elapsed","remain","promises","Promise","rej","resolved","numbers","colors","properties","resize","animations","visible","hide","config","_properties","configure","animatedProps","getOwnPropertyNames","newOptions","resolveTargetOptions","_createAnimations","$shared","awaitAll","$animations","then","_animateOptions","update","anim","wait","all","scaleClip","allowedOverflow","defaultClip","xScale","yScale","toClip","getSortedDatasetIndices","filterVisible","metasets","_getSortedDatasetMetas","applyStack","stack","dsIndex","singleMode","otherValue","convertObjectDataToArray","adata","isStacked","stacked","getStackKey","indexScale","valueScale","getUserBounds","minDefined","maxDefined","NEGATIVE_INFINITY","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","vScale","positive","getMatchingVisibleMetas","updateStacks","controller","_cachedMeta","_stacks","iAxis","axis","vAxis","itemStacks","_top","_bottom","getFirstScaleId","shift","createDatasetContext","dataset","createDataContext","dataIndex","raw","clearStacks","_parsed","isDirectUpdateMode","cloneIfNotShared","cached","shared","createStack","canStack","hidden","_stacked","_ctx","_cachedDataOpts","getMeta","_type","_data","_objectData","_sharedOptions","_drawStart","_drawCount","enableOptionSharing","supportsDecimation","$context","_syncList","initialize","linkScales","addElements","getDataset","chooseId","xid","xAxisID","yid","yAxisID","rid","rAxisID","iid","iAxisID","vid","vAxisID","getScaleForId","rScale","getDatasetMeta","scaleID","isExtensible","_dataCheck","datasetElementType","resetNewElements","stackChanged","oldStacked","_resyncElements","scopeKeys","datasetScopeKeys","getOptionScopes","createResolver","sorted","_sorted","parseArrayData","parseObjectData","parsePrimitiveData","isNotInOrderComparedToPrev","labels","getLabels","singleScale","xAxisKey","yAxisKey","parsedValue","NaN","otherScale","_getOtherScale","otherMin","otherMax","_skip","updateRangeFromParsed","getParsed","label","getLabelForValue","_clip","getMaxOverflow","chartArea","resolveDatasetElementOptions","resolveDataElementOptions","_resolveElementOptions","dataElementType","elementType","sharing","datasetElementScopeKeys","names","resolveNamedOptions","transition","datasetAnimationScopeKeys","sharedOptions","_animationsDisabled","_resolveAnimations","getSharedOptions","_setStyle","arg1","arg2","numMeta","numData","_insertElements","_removeElements","move","updateElements","removed","_dataChanges","arguments","_sync","newCount","getAllScaleValues","_cache","$bar","visibleMetas","concat","getAllParsedValues","computeMinSampleSize","curr","_length","updateMinAndPrev","getPixelForValue","ticks","getPixelForTick","computeFitCategoryTraits","ruler","stackCount","thickness","barThickness","categoryPercentage","barPercentage","chunk","pixels","computeFlexCategoryTraits","percent","parseFloatBar","entry","startValue","endValue","barStart","barEnd","_custom","parseValue","parseArrayOrPrimitive","isFloatBar","custom","barSign","actualBase","isHorizontal","borderProps","horizontal","setBorderSkipped","edge","borderSkipped","enableBorderRadius","parseEdge","swap","startEnd","orig","v2","setInflateAmount","inflateAmount","iAxisKey","vAxisKey","super","bars","reset","getBasePixel","_getRuler","firstOpts","includeOptions","updateSharedOptions","vpixels","head","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","center","updateElement","grouped","_getStacks","_startPixel","_endPixel","_getStackCount","baseValue","minBarLength","floating","getDataVisibility","startPixel","getPixelForDecimal","endPixel","halfGrid","getLineWidthForValue","skipNull","maxBarThickness","Infinity","stackIndex","_getStackIndex","rects","_index_","offset","grid","_value_","getRatioAndOffset","circumference","cutout","ratioX","ratioY","startAngle","endAngle","startX","startY","endX","endY","calcMax","calcMin","maxX","maxY","minX","minY","innerRadius","outerRadius","getter","isDatasetVisible","_getRotation","_getCircumference","arcs","spacing","getMaxBorderWidth","getMaxOffset","maxSize","chartWeight","_getRingWeight","_getRotationExtents","maxRadius","radiusLength","_getVisibleDatasetWeightTotal","total","calculateTotal","_getRingWeightOffset","animateRotate","calculateCircumference","animationOpts","centerX","centerY","animateScale","_circumference","metaData","borderAlign","hoverBorderWidth","hoverOffset","ringWeightOffset","legend","legendItem","toggleDataVisibility","tooltipItem","dataLabel","formattedValue","_dataset","animationsDisabled","getStartAndCountOfVisiblePoints","scaleRangesChanged","_decimated","animated","maxGapLength","directUpdate","prevParsed","nullData","border","lastPoint","updateControlPoints","pointCount","_scaleRanges","newRanges","xmin","xmax","ymin","ymax","changed","bind","_updateRadius","minSize","cutoutPercentage","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","angleLines","display","circular","pointLabels","PieController","pointPosition","getPointPositionForValue","ScatterController","DateAdapter","timestamp","amount","unit","weekday","members","adapters","_date","binarySearch","metaset","lookupMethod","_reversePixels","getRange","evaluateInteractionItems","position","handler","getSortedVisibleDatasetMetas","getDistanceMetricForAxis","useX","useY","deltaX","deltaY","getIntersectItems","useFinalPosition","isPointInArea","evaluationFunc","inRange","getNearestRadialItems","getProps","getNearestCartesianItems","distanceMetric","minDistance","getCenterPoint","pointInArea","getNearestItems","getAxisItems","rangeMethod","intersectsItem","Interaction","modes","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","wrapBoxes","boxes","layoutBoxes","stackWeight","buildStacks","layouts","wrap","placed","setLayoutDims","params","vBoxMaxWidth","hBoxMaxHeight","fullSize","availableWidth","availableHeight","buildLayoutBoxes","centerHorizontal","centerVertical","leftAndTop","rightAndBottom","vertical","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","getPadding","newWidth","outerWidth","newHeight","outerHeight","widthChanged","heightChanged","same","other","handleMaxPadding","updatePos","getMargins","marginForPositions","fitBoxes","refitBoxes","refit","setBoxDims","placeBoxes","userPadding","padding","autoPadding","_layers","z","layoutItem","minPadding","verticalBoxes","horizontalBoxes","beforeLayout","visibleVerticalBoxCount","BasePlatform","BasicPlatform","EXPANDO_KEY","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","isNullOrEmpty","initCanvas","renderHeight","getAttribute","renderWidth","displayWidth","displayHeight","eventListenerOptions","passive","addListener","removeListener","fromNativeEvent","native","nodeListContains","nodeList","contains","createAttachObserver","observer","MutationObserver","entries","trigger","addedNodes","removedNodes","observe","childList","subtree","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","listenDevicePixelRatioChanges","unlistenDevicePixelRatioChanges","createResizeObserver","ResizeObserver","contentRect","releaseObserver","disconnect","createProxyAndListen","removeAttribute","setAttribute","proxies","$proxies","handlers","attach","detach","isConnected","_detectPlatform","OffscreenCanvas","final","defaultRoutes","formatters","tickValue","notation","maxTick","calculateDelta","logDelta","numDecimal","minimumFractionDigits","maximumFractionDigits","numeric","Ticks","autoSkip","tickOpts","ticksLimit","maxTicksLimit","determineMaxTicks","majorIndices","major","enabled","getMajorIndices","numMajorIndices","first","newTicks","skipMajors","calculateSpacing","avgMajorSpacing","tickLength","_tickSize","maxScale","maxChart","_maxLength","evenMajorSpacing","getEvenSpacing","factors","ceil","majorStart","majorEnd","diff","drawBorder","drawOnChartArea","drawTicks","tickWidth","tickColor","minRotation","maxRotation","mirror","textStrokeWidth","textStrokeColor","autoSkipPadding","labelOffset","minor","crossAlign","showLabelBackdrop","backdropColor","backdropPadding","route","reverseAlign","offsetFromEdge","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","lineValue","caches","getTickMarkLength","getTitleHeight","createScaleContext","createTickContext","titleAlign","titleArgs","titleX","titleY","positionAxisID","_margins","paddingTop","paddingBottom","paddingLeft","paddingRight","labelRotation","_range","_gridLineItems","_labelItems","_labelSizes","_longestTextCache","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_dataLimitsCached","suggestedMin","suggestedMax","metas","getMinMax","xLabels","yLabels","beforeUpdate","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","afterAutoSkip","beforeFit","fit","afterFit","afterUpdate","reversePixels","_alignToPixels","alignToPixels","notifyPlugins","_callHooks","beforeTickToLabelConversion","afterTickToLabelConversion","numTicks","maxLabelDiagonal","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","widest","maxLabelHeight","highest","asin","titleOpts","gridOpts","titleHeight","tickPadding","angleRadians","labelHeight","labelWidth","_calculatePadding","_handleMargins","isRotated","labelsBelowTicks","offsetLeft","offsetRight","generateTickLabels","_computeLabelSizes","widths","heights","tickFont","fontString","nestedLabel","widestLabelSize","highestLabelSize","_resolveTickFontOptions","valueAt","decimal","getBaseValue","optionTicks","rot","ticksLength","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","limit","step","optsAtIndex","lineColor","tickBorderDash","tickBorderDashOffset","tickAndPadding","hTickAndPadding","lineCount","textOffset","_getXAxisLabelAlignment","_getYAxisLabelAlignment","halfCount","backdrop","tickTextAlign","labelPadding","fillRect","findIndex","_computeGridLineItems","drawLine","setLineDash","lineDashOffset","lastLineWidth","_computeLabelArea","_computeLabelItems","drawBackground","drawGrid","drawTitle","drawLabels","tz","gz","axisID","fontSize","isPrototypeOf","parentScope","isIChartComponent","register","registerDefaults","itemDefaults","routeDefaults","routes","propertyParts","sourceName","sourceScope","parts","controllers","_typedRegistries","_each","_get","typedRegistry","arg","reg","_getRegistryForType","isForType","_exec","itemReg","registry","component","camelMethod","_init","hook","_createDescriptors","descriptor","plugin","cancelable","_oldCache","_notifyStateChanges","allPlugins","createDescriptors","previousDescriptors","some","getPlugin","getOpts","pluginOpts","pluginScopeKeys","getIndexAxis","datasetDefaults","datasetOptions","getAxisFromDefaultScaleID","getDefaultScaleIDFromAxis","axisFromPosition","determineAxis","scaleOptions","mergeScaleConfig","chartDefaults","configScales","chartIndexAxis","firstIDs","scaleConf","error","defaultId","defaultScaleOptions","defaultID","initOptions","initData","initConfig","keyCache","keysCached","cachedKeys","generate","addIfFound","_config","_scopeCache","_resolverCache","clearCache","clear","datasetType","additionalOptionScopes","mainScope","resetCache","keyLists","_cachedScopes","subPrefixes","getResolver","needContext","subResolver","resolverCache","hasFunction","version","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","animationOptions","onComplete","onAnimationProgress","onProgress","getCanvas","getElementById","instances","getChart","moveNumericKeys","intKey","determineLastEvent","lastEvent","inChartArea","isClick","userConfig","initialCanvas","existingChart","chartOptionScopes","updateConfig","acquireContext","_options","_aspectRatio","_metasets","_lastEvent","_listeners","_responsiveListeners","_sortedMetasets","_plugins","_hiddenIndices","attached","_doResize","resizeDelay","listen","_initialize","bindEvents","_resizeBeforeDraw","_resize","newSize","newRatio","onResize","render","scalesOptions","axisOptions","scaleOpts","updated","isRadial","dposition","dtype","scaleType","scaleClass","getScale","init","hasUpdated","addBox","_destroyDatasetMeta","newControllers","_removeUnreferencedMetasets","order","updateIndex","ControllerClass","getController","getElement","_updateMetasets","_resetElements","animsDisabled","_updateScales","_checkEventBindings","_updateHiddenIndices","invalidate","buildOrUpdateControllers","buildOrUpdateElements","_minPadding","_updateLayout","_updateDatasets","_eventHandler","_updateHoverStyles","removeBox","ensureScalesHaveIDs","buildOrUpdateScales","existingEvents","newEvents","unbindEvents","changes","_getUniformDataChanges","datasetCount","makeSet","changeSet","noArea","_idx","_updateDataset","layers","_drawDatasets","_drawDataset","useClip","setDatasetVisibility","_updateVisibility","_destroy","remove","_stop","releaseContext","toDataURL","bindUserEvents","bindResponsiveEvents","_add","_remove","detached","isAttached","activeElements","lastActive","notify","replay","hoverOptions","deactivated","activated","updateHoverStyle","eventFilter","_handleEvent","_getActiveElements","getElementsAtEventForMode","invalidatePlugins","clipArc","pixelMargin","angleMargin","toRadiusCorners","parseBorderRadius$1","angleDelta","o","borderRadius","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","outerStart","outerEnd","innerStart","innerEnd","rThetaToXY","theta","pathArc","innerR","spacingOffset","alpha","noSpacingInnerRadius","noSpacingOuterRadius","avNogSpacingRadius","adjustedAngle","beta","angleOffset","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","pCenter","p4","p8","drawArc","fullCircles","drawFullCircleBorders","inner","lineJoin","unregister","chartX","chartY","rAdjust","betweenAngles","withinRadius","halfAngle","halfRadius","radiusOffset","setStyle","lineCap","getLineMethod","stepped","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","lineMethod","fastPathSegment","prevX","lastY","avgX","countX","pointIndex","drawX","truncX","_getSegmentMethod","useFastPath","_getInterpolationMethod","strokePathWithCache","path","_path","Path2D","strokePathDirect","segmentMethod","usePath2D","_points","_segments","_pointsUpdated","_interpolate","interpolated","inRange$1","hitRadius","mouseX","mouseY","hoverRadius","getBarBounds","bar","half","skipOrLimit","parseBorderWidth","maxW","maxH","parseBorderRadius","maxR","enableBorder","boundingRects","outer","skipX","skipY","skipBoth","hasRadius","addNormalRectPath","inflateRect","refRect","addRectPath","getBoxSize","labelOpts","boxHeight","boxWidth","usePointStyle","itemHeight","itemsEqual","_added","legendHitBoxes","_hoveredItem","doughnutMode","legendItems","columnSizes","lineWidths","buildLabels","generateLabels","labelFont","_computeTitleHeight","_fitRows","_fitCols","hitboxes","totalHeight","row","heightLimit","totalWidth","currentColWidth","currentColHeight","col","rtlHelper","hitbox","leftForLtr","_draw","defaultColor","fontColor","halfFontSize","cursor","drawLegendBox","lineDash","drawOptions","SQRT2","xPlus","yBoxTop","xBoxLeft","textDirection","setWidth","realX","titleFont","titlePadding","topPaddingPlusHalfFontSize","hitBox","lh","isListened","hoveredItem","_getLegendItemAt","sameItem","onLeave","plugin_legend","_element","_args","adjustHitBoxes","handleEvent","ci","_padding","textSize","fontOpts","_drawArgs","createTitle","titleBlock","plugin_title","WeakMap","positioners","hasValue","tooltipPosition","eventPosition","nearestElement","tp","pushOrConcat","toPush","splitNewlines","createTooltipItem","getLabelAndValue","getTooltipSize","body","footer","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","before","after","beforeBody","afterBody","titleSpacing","titleMarginBottom","bodyLineHeight","displayColors","bodySpacing","footerMarginTop","footerSpacing","widthPadding","maxLineWidth","determineYAlign","doesNotFitWithAlign","xAlign","caret","caretSize","caretPadding","determineXAlign","yAlign","chartWidth","determineAlignment","alignX","alignY","paddingAndSize","getBackgroundPoint","alignment","getAlignedX","getBeforeAfterBodyLines","createTooltipContext","tooltipItems","overrideCallbacks","opacity","_eventPosition","_size","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","beforeTitle","afterTitle","bodyItems","scoped","beforeLabel","afterLabel","beforeFooter","afterFooter","itemSort","labelColor","labelPointStyle","labelTextColor","_createItems","getTitle","getBeforeBody","getBody","getAfterBody","getFooter","positionAndSize","backgroundPoint","external","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ptX","ptY","titleColor","colorX","rtlColorX","yOffSet","colorY","multiKeyBackground","outerX","innerX","strokeRect","bodyAlign","xLinePadding","fillLineOfText","bodyAlignForCalculation","textColor","bodyColor","_drawColorBox","footerAlign","footerColor","tooltipSize","drawCaret","quadraticCurveTo","animX","animY","_updateAnimationTarget","hasTooltipContent","globalAlpha","drawBody","drawFooter","positionChanged","_positionChanged","_ignoreReplayEvents","plugin_tooltip","_willRender","labelCount","addIfString","addedLabels","unshift","findOrAddLabel","lastIndexOf","_startValue","_valueRange","_addedLabels","added","getDecimalForPixel","generateTicks$1","generationOptions","dataRange","MIN_SPACING","precision","maxTicks","maxDigits","includeBounds","maxSpaces","rmin","rmax","countDefined","minSpacing","niceMin","niceMax","numSpaces","decimalPlaces","relativeLabelSize","_endValue","setMin","setMax","minSign","maxSign","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","stepSize","computeTickLimit","getTickLimit","numericGeneratorOptions","_maxDigits","handleTickRangeOptions","isMajor","tickVal","generateTicks","endExp","endSignificand","exp","significand","lastTick","_zero","getTickBackdropHeight","measureLabelSize","determineLimits","fitWithPointLabels","limits","valueCount","_pointLabels","pointLabelOpts","additionalAngle","centerPointLabels","getPointLabelContext","getPointPosition","drawingArea","plFont","hLimits","vLimits","updateLimits","setCenterPoint","_pointLabelItems","buildPointLabelItems","extra","outerDistance","pointLabelPosition","yForAngle","getTextAlignForAngle","leftForTextAlign","drawPointLabels","backdropLeft","backdropTop","backdropWidth","backdropHeight","pathRadiusLine","drawRadiusLine","gridLineOpts","createPointLabelContext","logarithmic","leftMovement","rightMovement","topMovement","bottomMovement","angleMultiplier","scalingFactor","scaledDistance","pointLabel","distanceFromCenter","animate","INTERVALS","millisecond","common","steps","second","minute","hour","week","quarter","UNITS","sorter","adapter","_adapter","parser","_parseOpts","startOf","determineUnitForAutoTicks","minUnit","capacity","interval","determineUnitForFormatting","determineMajorUnit","addTick","time","timestamps","setMajorTicks","majorUnit","ticksFromTimestamps","_unit","_majorUnit","_offsets","_normalized","displayFormats","formats","normalized","_applyBounds","_getLabelBounds","endOf","getLabelTimestamps","timeOpts","_generate","_getLabelCapacity","initOffsets","offsetAfterAutoskip","getDecimalForValue","hasWeekday","getDataTimestamps","tooltipFormat","datetime","minorFormat","majorFormat","_tickFormatFunction","offsets","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","exampleLabel","_getLabelSize","prevSource","nextSource","prevTarget","nextTarget","span","TimeSeriesScale","_table","_minPos","_tableRange","_getTimestampsForTable","buildLookupTable","ChartEmits","chartCreate","createChartFunction","chartOptions","ChartRendered","chartUpdate","ChartUpdated","chartDestroy","destroy","ChartDestroyed","getChartData","datasetIdKey","nextData","setChartDatasets","oldData","newData","addedDatasets","nextDataset","currentDataset","setChartLabels","LabelsUpdated","setChartOptions","compareData","newDatasetLabels","oldDatasetLabels","every","templateError","ANNOTATION_PLUGIN_KEY","generateChart","chartId","chartType","chartController","_chartRef","cssClasses","ref1","pluginSettings","renderChart","newValue","oldValue","chartDataHandler","chartOptionsHandler","currentChart","getCurrentChart","canvasEl2DContext","setCurrentChart","isEqualLabelsAndDatasetsLength","updateChart","hasAnnotationPlugin","$data","createElement","Doughnut","overviewStats","cutOut","hideSubtitle","backgroundCircle","innerText","displaySubtitle","initChart","ONE_HUNDRED_PERCENT","pluginOptions","isDisplayable","xCoor","yCoor","beforeDraw","isSubtitleDisplayable","toFixed","fontWeight","fontFamily","heightModifier","textX","textY","subtitle","initChartData","initChartPlugins","selectedMonth","mapGetters","featureToggles","isClientGroupOverviewEnabled","featureDecisions","createFeatureDecisions","clientGroupOverviewFeatureFactory","loadingCount","client","clientId","clientName","locationName","viewCandidate","CandidateImage","VLazy","VSkeletonLoader","compFilledCandidateId","compFilledCandidateFirstName","compFilledCandidateLastName","updateProfileImage","compCandidateFullName","compRunningLateClass","compDuration","howLate","replacing","certChecks","agreements","roomNumber","notes","canCreateBookings","bookingIsPendingApproval","feedback","certifications","cert","VChip","compPoliciesText","agreedUTC","typeName","policies","policiesAgreed","policy","openFeedback","dialog","rating","loadingUrl","isSubmittingQuickFeedback","requestExtendedFeedback","haveBack","CandidateHaveBack","PREFERRED","YES","NO","commentRules","commentTextErrorUpdate","commentText","resetFeedback","formValid","saveFeedback","ErrorAlert","savingFeedback","commentTextError","hasErrors","quickFeedbackSuccess","provided","debouncedTrackFeedbackClick","requestFeedbackFormUrl","submitQuickFeedback","open","url","isDev","clearError","parseRating","comment","zeroIndexedRating","hasError","customProperties","$appInsights","trackEvent","offIcon","onIcon","isFocused","groupClasses","VInput","hasLabel","radioGroup","VLabel","click","for","computedId","focused","hasState","radioAttrs","setTextColor","dense","genInput","genRipple","isDisabled","onKeydown","onChange","column","role","vnode","clearable","emptyIcon","fullIcon","halfIcon","halfIncrements","iconLabel","hoverIndex","internalValue","circle","xSmall","genHoverIndex","createClickFn","isFilled","isHovered","isHalf","isHalfEvent","$vuetify","isFull","isHovering","createProps","onMouseEnter","getColor","lang","getIconName","children","genItem","injectStyles","locals","VExpandTransition","VRadio","VRadioGroup","VRating","pendingApproval","rejected","VList","VListItem","VListItemContent","VListItemIcon","VListItemTitle","VMenu","blockTooltipText","ClientBookingStatus","CertPills","BookingListPolicies","GradeList","BookingListFeedback","BookingCardMenu","BookingCardIdLabel","profileImgSrc","hasCreateBookingPermissionForAtleastOneClientLocationByClientIds","runningLate","noteList","jsonObj","LateMins","renderTime24","hasCandidate","firstName","lastName","candidateInput","fullName","profilePicUrl","determinePanelExpandState","VExpansionPanel","VExpansionPanelContent","VExpansionPanelHeader","VExpansionPanels","group","rows","columns","compMockBookingData","headers","header","mockDataArray","mockBooking","VDataTable","groups","determineIfBookingHasGroup","generateBookingNameString","generateBookingTimeRangeString","generateReplacingString","bookingHasCandidate","trim","BookingList","BookingListGroupSkeleton","VToolbar","VToolbarTitle","Layout","LayoutFilter","CandidateZoom","BookingDateStrip","ReplaceMeBanner","BookingSummaryEmptyDayBlock","TheDashboardNavigation","CancelBookingDialog","BookingSummaryList","DashboardFillRateStats","ClientFillRateFilter","BookingSummaryCardList","picker","selectedMonthYear","bookingSummary","bookingList","defaultTempBookingsForLoader","FillRateFilterType","user","hasCreateBookingPermissionForAtleastOneClientLocation","getClient","getClients","getPermission","getNodeHierarchyByIdAndLevel","getAllClientsLocationsWithPermission","isLoadingBookingSummary","hasLocationBookingPermission","hasLocationPendingApprovalPermission","hasClientBookingPermission","hasClientPendingApprovalPermission","hasPermissionRegardlessOfLevel","clientLocationsWithBookings","tempClientLocationsWithBookings","blockText","bookingPosition","blockDetails","totalCount","bookingsCount","startDate","endDate","quotes","random","SKELTON_LOADER_LIMIT","initFillRateStats","determineExpandAllState","canViewBookings","initBookingSummaryData","setDate","toISOString","substr","loadBookingsByClientAndDate","getOverviewSummaryBookingViewModels","bookingVM","formatKey","comparisonDate","getComparisonDate","bookingDate","accumulator","openBookingsCount","calcFillRateStats","bookingData","clients","clientsAndLocationsWithPerms","mapBookingsToLocation","tempClientWithLocations","initPickerDate","fillWithTemp","dayjsObject","orderBookings","candidatePrefill","VSheet","$listeners","errorMessage","message","YY","YYYY","MM","MMM","MMMM","DD","dd","ddd","dddd","Do","HH","hh","mm","ss","SSS","ZZ","LT","LTS","LL","LLL","LLLL","ll","lll","llll","DoMMM","MMMDo","DoMMMYYYY","MMMDoYYYY","dddL","ddddL","ddddLL","DDMMYYYYWithSlash","dddDDMMYYYYWithSlash","dddMMDDYYYYWithSlash","YYYYMM","YYYYMMDD","MMMMYYYY","YYYYMMDDT0","dddDoMMM","dddMMMDo","dddDo","HHmm","hhmma","HHmmss","ddddDDMMMM","ddddDoMMMMatLT","BookingStatus","AGENCY_TOOK_TOO_LONG","UNABLE_TO_FILL","ANZUK_ERROR","CANDIDATE_ILLNESS","LAPSED","DELETED_FROM_GROUP_BOOKING","CANCELLED","FINANCE_CANCELLED","REFUNDED","FRIDAY_INVOICE","ECH_INVOICING_READY","ECH_NOT_APPROVED","SCHOOL_NOT_APPROVED","CLIENT_SUBMITTED_TIMESHEET_NO_CHANGES","CLIENT_SUBMITTED_TIMESHEET_MODIFIED","CLIENT_SUBMITTED_TIMESHEET_DID_NOT_HAPPEN","CANDIDATE_SUBMITTED_TIMESHEET_NO_CHANGES","CANDIDATE_SUBMITTED_TIMESHEET_MODIFIED","CANDIDATE_SUBMITTED_TIMESHEET_DID_NOT_HAPPEN","TIMESHEET_DISPUTE_OR_MISMATCH","ACTIVE_WITHOLD_PAY","ACTIVE_LAPSED","TENTATIVE_FILLED","AGENCY_MOVED_CLIENT","EXPORTED_TO_BULLHORN_NZ","PARTIAL_BULLHORN_EXPORT","TRAINING","OTHER","CANCELLED_BY_CLIENT","BOOKING_PENDING_REQUIRES_CLIENT_APPROVAL","CLIENT_REJECTED_BOOKING_REQUEST","candidateModifiedOrDidNotHappenBookingsStatuses","hasCandidateModifiedBookingOrStatedDidNotHappen","bookingStatus","autoGrow","noResize","rowHeight","validator","minHeight","defaultMenuProps","offsetOverflow","allowOverflow","autoSelectFirst","itemText","queryText","hideNoData","menuProps","noFilter","searchInput","lazySearch","selectedIndex","selectedItems","hideSelected","filteredItems","hasItem","selectedItem","getText","internalSearch","allItems","searchIsDirty","multiple","hasDisplayedItems","valueComparator","activateMenu","preSelectedItem","keyCode","curIndex","curItem","getDisabled","lastIndex","nextIndex","nextItem","autocomplete","slot","hasSlot","isAppendInner","deleteCurrentItem","setSearch","selectedValues","currentItem","currentItemText","ripple","disableIconRotate","expandIcon","hideActions","hasMousedown","tabindex","mousedown","mouseup","content","nextIsActive","vm","nanoid","bytes","crypto","getRandomValues","Uint8Array","byte","parseTimeStringToObject","splitTime","parseHours","parseMinutes","hours","minutes","getAllClientLocationsWithPermission","compSameDayCutOffObject","ex","PermissionScope","BOOKING","hasPassedSameDayCutOff","timeZone","convertDateToTimezone","dayjs","timezone","cutOff"],"mappings":"kHAAA,sCAce,qBAAqB,CAClCA,KADkC,qBAGlC,UACE,MAAO,CACLC,gBAAiBC,OAIrBC,MAAO,CACLC,UADK,QAELC,SAFK,QAGLC,KAHK,QAILC,MAJK,QAKLC,UALK,QAMLC,MANK,QAOLC,OAPK,QAQLC,SARK,QASLC,KAAMC,SAGRC,SAAU,CACR,UACE,MAAO,IACF,qCADE,MAEL,sBAFK,EAGL,gCAAiCZ,KAH5B,UAIL,2BAA4BA,KAJvB,KAKL,4BAA6BA,KALxB,MAML,gCAAiCA,KAN5B,UAOL,4BAA6BA,KAPxB,MAQL,6BAA8BA,KARzB,OASL,2BAA4BA,KAAKU,QAKvC,UAEMV,KAAKa,OAAOC,eAAhB,WACE,eAAS,SAAU,WAAnB,MAKAC,MAAA,QAAcf,KAAd,QACAA,KAAKgB,MAAMC,OADX,GADF,mBAGSjB,KAAKgB,MAAZ,IAEA,eAAS,+BAAgC,kBAAzC,OAIJE,QAAS,CACP,WAAU,KACR,MAAMF,EAAQhB,KAAKmB,SAASC,EAA5B,GACMC,EAAYrB,KAAKmB,SAASC,EAAME,EAAtC,GAEAF,EAAA,SAAgBpB,KAAKuB,aAArB,GACAH,EAAA,aAAoBpB,KAAKuB,aAAzB,Q,oCCzEN,kCACO,MAAMC,EAAoBC,OAAOC,OAAO,CAC7C,CACEC,GAAI,eACJ7B,KAAM,gBAER,CACE6B,GAAI,mBACJ7B,KAAM,wCAER,CACE6B,GAAI,2BACJ7B,KAAM,4BAER,CACE6B,GAAI,qBACJ7B,KAAM,uCAER,CACE6B,GAAI,cACJ7B,KAAM,eAER,CACE6B,GAAI,kBACJ7B,KAAM,mBAER,CACE6B,GAAI,iBACJ7B,KAAM,kBAER,CACE6B,GAAI,qBACJ7B,KAAM,sBAER,CACE6B,GAAI,mBACJ7B,KAAM,oBAER,CACE6B,GAAI,gBACJ7B,KAAM,iBAER,CACE6B,GAAI,qBACJ7B,KAAM,sBAER,CACE6B,GAAI,cACJ7B,KAAM,eAER,CACE6B,GAAI,4BACJ7B,KAAM,6BAER,CACE6B,GAAI,QACJ7B,KAAM,Y,oFCxDV,W,qBCCA8B,EAAOC,QAAU,CAAC,iBAAiB,6CAA6C,sBAAsB,kDAAkD,qBAAqB,iDAAiD,yBAAyB,qDAAqD,qBAAqB,iDAAiD,oBAAoB,gDAAgD,qBAAqB,iDAAiD,qBAAqB,iDAAiD,kBAAkB,8CAA8C,uBAAuB,mDAAmD,uBAAuB,mDAAmD,2BAA2B,uDAAuD,uBAAuB,mDAAmD,UAAY,wCAAwC,4BAA4B,wDAAwD,iBAAiB,6CAA6C,sBAAsB,kDAAkD,SAAW,uCAAuC,+BAA+B,2DAA2D,oBAAoB,gDAAgD,UAAY,wCAAwC,eAAe,2CAA2C,MAAQ,oCAAoC,SAAW,uCAAuC,KAAO,mCAAmC,WAAW,uCAAuC,WAAW,uCAAuC,gBAAgB,4CAA4C,iBAAiB,6CAA6C,UAAU,wC,wICC92D,4EAcA,MAAMC,EAAa,eAAO,EAAD,YAGvB,eAAiB,6CAHnB,sBAWe,OAAAA,EAAA,gBAAoC,CACjDhC,KADiD,4BAGjDiC,KAAM,KAAM,CACVC,UAAU,IAGZpB,SAAU,CACR,iBACE,OAAOZ,KAAKiC,eAAZ,WAIJC,MAAO,CACLC,eAAgB,CACdC,WADc,EAEd,QAAO,KACL,IAASpC,KAAKqC,UAAW,GAEzB,MAAIC,EAAgBtC,KAAKgC,SAAzB,EACKhC,KAAKuC,UAAU,IAAMvC,KAAKgC,SAA1B,MAKX,UACEhC,KAAA,+BAAAA,OAGF,gBACEA,KAAA,oCAGF,OAAM,GACJ,OAAOwC,EAAE,EAAD,KAAoBxC,KAAKyC,gBAAgB,IAAM,CACrDD,EAAE,MAAOxC,KAAK0C,mBAAmB1C,KAAxB,MAAoC,CAC3C2C,YAD2C,4BAE3CC,WAAY,CAAC,CACX9C,KADW,OAEXkB,MAAOhB,KAAKgC,aAEZ,CACFQ,EAAE,MAAO,CAAEK,MAAO,mCAAqC,eAR3D,gB,oCC7DJ,kCAAO,MAAMC,EAAqBrB,OAAOC,OAAO,CAI9CqB,QAAS,UAITC,UAAW,YAIXC,QAAS,UAITC,KAAM,U,oCCbR,wCAiBe,sBAAO,EAAD,KAEnB,eAAmB,SAFN,OAIN,CACPpD,KADO,SAGP,UACE,MAAO,CAAEqD,KAAMnD,OAGjBoD,cAPO,EASPnD,MAAO,CACLE,SADK,QAELkD,eAFK,QAGL5C,SAHK,QAILO,MAAOL,SAGToB,KAAM,KAAM,CACVuB,OADW,GAEXC,SAFW,GAGXC,SAAU,KAGZtB,MAAO,CACLsB,SAAU,CACR,QAAO,GACL,MAAMC,EAAShC,OAAA,oBAAf,GAEAzB,KAAA,mBAEF0D,MANQ,EAORtB,WAAW,IAIflB,QAAS,CACP,WAAU,GACR,MAAMyC,EAAWC,GACRA,EAAA,kBAA0BC,IAC/B7D,KAAA,KAAUA,KAAV,SAAyB4D,EAAzB,SACC,CAAExB,WAAW,IAGZmB,EAAqB,CACzBO,KAAMF,EADmB,KAEzBG,MAAO,OACPC,eAAgB,QAiBlB,OAdIhE,KAAJ,eAEEuD,EAAA,eAA0BK,EAAA,wBAAgCC,IACxD,IAGI7D,KAAKwD,SAAS1C,eAAe8C,EAAjC,QAEAL,EAAA,MAAiBI,EAAjB,OAGFJ,EAAA,MAAiBI,EAAjB,GAGF,GAGF,WACE,WAAO3D,KAAKsD,OAAOW,OAAOL,IAAUA,EAAA,UAA7B,YAGT,QACE5D,KAAA,eAAoB4D,GAASA,EAA7B,SACA5D,KAAA,iBAEF,gBACMA,KAAJ,gBAEEkE,WAAW,KACTlE,KAAA,aADF,IAMJ,kBACEA,KAAA,eAAoB4D,GAASA,EAA7B,mBACA5D,KAAA,iBAEF,SAAQ,GACNA,KAAA,eACAA,KAAA,cAAmBA,KAAKmE,WAAxB,KAEF,WAAU,GACR,MAAMC,EAAQpE,KAAKsD,OAAOe,KAAKC,GAAKA,EAAA,OAAWV,EAA/C,MAEA,MAAY,OAEZ,MAAMW,EAAUvE,KAAKuD,SAASc,KAAKC,GAAKA,EAAA,OAAWF,EAAnD,MACA,IACEG,EAAA,QACAA,EAAA,kBAGFvE,KAAA,SAAgBA,KAAKuD,SAASU,OAAOK,GAAKA,EAAA,OAAWF,EAArD,MACApE,KAAA,OAAcA,KAAKsD,OAAOW,OAAOK,GAAKA,EAAA,OAAWF,EAAjD,MACApE,KAAA,QAAaA,KAAb,SAA4BoE,EAA5B,QAIJ,OAAM,GACJ,OAAO5B,EAAE,OAAQ,CACfG,YADe,SAEf6B,MAAO,CACLC,YADK,KAEFzE,KAAK0E,QAEVC,GAAI,CACFC,OAASC,GAAa7E,KAAK8E,MAAM,SAAUD,KAE5C7E,KAAK+E,OATR,a,2CCpIJ,IAAI,EAAS,WAAa,IAAIC,EAAIhF,KAASiF,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,SAAS,CAACA,EAAG,MAAM,CAACtC,MAAM,CAACmC,EAAIK,gBAAkB,GAAK,iCAAiC,CAACF,EAAG,gBAAgB,CAACX,MAAM,CAAC,MAAQQ,EAAIM,UAAU,SAAWN,EAAIO,8BAA8B,kBAAkB,MAAOP,EAAIQ,kCAAgD,eAAEL,EAAG,MAAM,CAACtC,MAAM,CAChXmC,EAAIK,gBAAkB,mBAAqB,eAC3C,uBAAwB,CAAEL,EAAS,MAAEG,EAAG,yBAAyB,CAACX,MAAM,CAAC,MAAQQ,EAAIS,SAAST,EAAIU,KAAKP,EAAG,uBAAuB,CAACX,MAAM,CAAC,OAASQ,EAAIW,mBAAmB,QAAUX,EAAIY,iCAAiCjB,GAAG,CAAC,cAAgBK,EAAIa,kBAAkB,GAAGb,EAAIU,MAAM,GAAGP,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAACtC,MAAMmC,EAAIc,iBAAmB,YAAc,GAAGtB,MAAM,CAAC,KAAO,KAAK,GAAK,KAAK,GAAK,OAAO,CAACW,EAAG,kBAAkB,CAACR,GAAG,CAAC,YAAcK,EAAIe,+BAAgCf,EAAmB,gBAAEG,EAAG,UAAU,CAACxC,YAAY,cAAcE,MAAMmC,EAAIc,iBAAmB,YAAc,GAAGtB,MAAM,CAAC,UAAY,MAAM,CAACW,EAAG,MAAM,CAACtC,MAAMmC,EAAIc,iBAAmB,YAAc,IAAI,CAACX,EAAG,mBAAmB,CAACX,MAAM,CAAC,eAAeQ,EAAIgB,mBAAmB,eAAehB,EAAIiB,aAAatB,GAAG,CAAC,gBAAkB,SAASuB,GAAQlB,EAAIgB,oBAAqB,GAAO,aAAehB,EAAImB,UAAU,aAAenB,EAAIoB,aAAa,YAAcpB,EAAIqB,eAAgBrB,EAAIsB,uBAAyBtB,EAAIuB,+BAAgCpB,EAAG,MAAM,CAACA,EAAG,MAAM,CAACxC,YAAY,kDAAkD,CAACwC,EAAG,eAAe,CAACX,MAAM,CAAC,aAAaQ,EAAIwB,QAAQ7B,GAAG,CAAC,cAAgBK,EAAIyB,gBAAgBtB,EAAG,QAAQ,CAACX,MAAM,CAAC,MAAQ,UAAU,KAAO,GAAG,SAAW,IAAIG,GAAG,CAAC,MAAQ,SAASuB,GAAQlB,EAAI0B,WAAa1B,EAAI0B,aAAa,CAACvB,EAAG,SAAS,CAACX,MAAM,CAAC,KAAO,KAAK,CAACQ,EAAI2B,GAAG3B,EAAI4B,GAAG5B,EAAI0B,UAAY,mBAAqB,qBAAqB1B,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAI6B,qBAAqB,IAAI,GAAI7B,EAAgB,aAAEG,EAAG,yBAAyB,CAACX,MAAM,CAAC,SAAWQ,EAAI8B,aAAa,gBAAgB9B,EAAI+B,sCAAsC,aAAa/B,EAAI0B,WAAW/B,GAAG,CAAC,cAAgBK,EAAIgC,oBAAoB,cAAgBhC,EAAIiC,2BAA2B9B,EAAG,qBAAqB,CAACX,MAAM,CAAC,SAAWQ,EAAI8B,aAAa,gBAAgB9B,EAAI+B,sCAAsC,aAAa/B,EAAI0B,WAAW/B,GAAG,CAAC,cAAgBK,EAAIiC,4BAA4B,GAAIjC,EAAe,YAAEG,EAAG,8BAA8B,CAACX,MAAM,CAAC,gBAAgBQ,EAAIiB,aAAatB,GAAG,CAAC,mBAAqBK,EAAIkC,sBAAsBlC,EAAIU,MAAM,KAAKP,EAAG,2BAA2B,IAAI,GAAIH,EAAsB,mBAAEG,EAAG,WAAW,CAACX,MAAM,CAAC,MAAQ,QAAQ,gBAAgB,cAAc2C,MAAM,CAACnG,MAAOgE,EAAsB,mBAAEoC,SAAS,SAAUC,GAAMrC,EAAIsC,mBAAmBD,GAAKE,WAAW,uBAAuB,CAACpC,EAAG,gBAAgB,CAACX,MAAM,CAAC,oBAAoBQ,EAAIwC,mBAAmB7C,GAAG,CAAC,WAAaK,EAAIyC,yBAAyB,GAAGzC,EAAIU,KAAMV,EAA2B,wBAAEG,EAAG,sBAAsB,CAACX,MAAM,CAAC,KAAOQ,EAAI0C,wBAAwB,QAAU1C,EAAI2C,iBAAiBhD,GAAG,CAAC,WAAaK,EAAI4C,yBAAyB,qBAAuB5C,EAAI6C,sCAAsC7C,EAAIU,MAAM,IACxoFoC,EAAkB,G,oCCHlB,EAAS,WAAa,IAAI9C,EAAIhF,KAASiF,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,eAAe,CAACX,MAAM,CAAC,MAAQ,GAAG,MAAQ,GAAG,MAAQ,UAAU,UAAY,IAAI2C,MAAM,CAACnG,MAAOgE,EAAgB,aAAEoC,SAAS,SAAUC,GAAMrC,EAAI+C,aAAaV,GAAKE,WAAW,iBAAiBvC,EAAIgD,GAAKhD,EAAIiD,QAAqCjD,EAAIiD,QAA/BjD,EAAIkD,sBAAoC,SAASC,GAAQ,OAAOhD,EAAG,YAAY,CAACiD,IAAID,EAAOxG,GAAG6C,MAAM,CAAC,IAAM,IAAI6D,YAAYrD,EAAIsD,GAAG,CAAC,CAACF,IAAI,YAAYG,GAAG,SAASC,GACpd,IAAI7D,EAAK6D,EAAI7D,GACTH,EAAQgE,EAAIhE,MAChB,MAAO,CAACW,EAAG,QAAQH,EAAIyD,GAAGzD,EAAI0D,GAAG,CAAC/F,YAAY,UAAU6B,MAAM,CAAC,GAAK2D,EAAOxG,IAAIgD,GAAG,CAAC,MAAQ,SAASuB,GAAQ,OAAOlB,EAAI2D,cAAcR,EAAOS,SAAS,QAAQpE,GAAM,GAAOG,GAAI,CAACQ,EAAG,SAAS,CAACX,MAAM,CAAC,MAAQ,KAAK,CAACQ,EAAI2B,GAAG3B,EAAI4B,GAAGuB,EAAOU,UAAU,OAAO,MAAK,IAAO,CAAC1D,EAAG,OAAO,CAAC2D,SAAS,CAAC,YAAc9D,EAAI4B,GAAGuB,EAAOY,iBAAgB,IACjU,EAAkB,G,YCJf,MAAMC,EAAevH,OAAOC,OAAO,CACxCuH,KAAM,EACNC,KAAM,EACNC,IAAK,ICCP,OACErJ,KAAM,eACNsJ,OAAQ,CAACC,EAAX,MACEpJ,MAAO,CACLqJ,UAAW,CACTC,KAAMC,OACNC,QAAS,GAEXxB,QAAS,CACPsB,KAAMxI,MACN0I,QAAS,IAAM,OAGnB,OACE,MAAO,CACL1B,aAAc,IAGlBnH,SAAU,CACR,uBACE,MAAO,CACb,CACQ,GAAR,mBACQ,KAAR,gBACQ,QAAR,QACQ,KAAR,QAEA,CACQ,GAAR,mBACQ,KAAR,2BACQ,QAAR,OACQ,KAAR,WAKE,UACEZ,KAAK+H,aAAe/H,KAAKsJ,WAE3BpI,QAAS,CACP,cAAcqI,GACZvJ,KAAK8E,MAAM,gBAAiByE,MC7CoU,I,iFCOlW,EAAY,eACd,EACA,EACA,GACA,EACA,KACA,KACA,MAIa,IAAiB,QAQhC,IAAkB,EAAW,CAACG,OAAA,KAAKC,aAAA,KAAWC,QAAA,KAAMC,WAAA,O,gBC1BhD,EAAS,WAAa,IAAI7E,EAAIhF,KAASiF,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,MAAM,CAACtC,MAAM,CAACmC,EAAI8E,eAAiB,GAAK,UAAU,CAAC3E,EAAG,QAAQ,CAACX,MAAM,CAAC,KAAO,IAAIG,GAAG,CAAC,MAAQ,SAASuB,GAAQ,OAAOlB,EAAI+E,WAAW/E,EAAIgF,KAAO,MAAM,CAAC7E,EAAG,SAAS,CAACH,EAAI2B,GAAG,uBAAuB,GAAG3B,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIgF,MAAM,KAAK7E,EAAG,QAAQ,CAACX,MAAM,CAAC,KAAO,IAAIG,GAAG,CAAC,MAAQ,SAASuB,GAAQ,OAAOlB,EAAI+E,WAAW/E,EAAIgF,KAAO,MAAM,CAAC7E,EAAG,SAAS,CAACH,EAAI2B,GAAG,wBAAwB,IAAI,GAAGxB,EAAG,YAAY,CAACX,MAAM,CAAC,SAAWQ,EAAIiF,gBAAgB,KAAOjF,EAAIgF,KAAK,eAAehF,EAAIiB,YAAcjB,EAAIiB,YAAYiE,OAAO,cAAgBlF,EAAImF,YAAYxF,GAAG,CAAC,aAAeK,EAAIoF,YAAY,aAAepF,EAAIqF,iBAAiB,IACzsB,EAAkB,GCDlB,EAAS,WAAa,IAAIrF,EAAIhF,KAASiF,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACxC,YAAY,aAAa,CAACwC,EAAG,MAAM,CAACxC,YAAY,aAAa,CAACwC,EAAG,MAAM,CAACxC,YAAY,SAAS,CAACwC,EAAG,gBAAgB,CAACtC,MAAM,CAACmC,EAAIc,iBAAmB,aAAe,GAAI,QAAQtB,MAAM,CAAC,MAAQQ,EAAIsF,oBAAoB,gBAAgB,GAAG,cAAc,GAAG,UAAY,IAAI3F,GAAG,CAAC,OAASK,EAAIoB,eAAepB,EAAIgD,GAAIhD,EAAqB,mBAAE,SAASuF,EAAEjJ,GAAO,OAAO6D,EAAG,eAAe,CAACiD,IAAI,uBAAyB9G,EAAMkJ,YAAY,CAAC,aAAa,IAAI,YAAY,KAAKnC,YAAYrD,EAAIsD,GAAG,CAAC,CAACF,IAAI,UAAUG,GAAG,SAASC,GAC5lB,IAAIiC,EAASjC,EAAIiC,OACbC,EAASlC,EAAIkC,OACjB,MAAO,CAACvF,EAAG,QAAQ,CAACtC,MAAM,CACZ,OACAmC,EAAI2F,eAAerJ,GAAS,sBAAwB,GACpDmJ,EAAS,iCAAmC,IAAKjG,MAAM,CAAC,MAAQiG,EAAO,MAAQ,OAAO,KAAO,IAAI9F,GAAG,CAAC,MAAQ+F,IAAS,CAAC1F,EAAI2B,GAAG3B,EAAI4B,GAAG2D,EAAEK,sBAAsB,MAAK,QAAU,IAAI,KAAKzF,EAAG,MAAM,CAACxC,YAAY,QAAQ,CAACwC,EAAG,gBAAgB,CAACtC,MAAM,CAACmC,EAAIc,iBAAmB,aAAe,QAAS,QAAQtB,MAAM,CAAC,gBAAgB,GAAG,cAAc,GAAG,UAAY,IAAI2C,MAAM,CAACnG,MAAOgE,EAAqB,kBAAEoC,SAAS,SAAUC,GAAMrC,EAAI6F,kBAAkBxD,GAAKE,WAAW,sBAAsBvC,EAAIgD,GAAIhD,EAAmB,iBAAE,SAAS8F,EAAIxJ,GAAO,OAAO6D,EAAG,eAAe,CAACiD,IAAI,gBAAkBpD,EAAIgF,KAAO,IAAM1I,EAAMqB,YAAY,0BAA0B,CAACwC,EAAG,eAAe,CAACX,MAAM,CAAC,SAAWQ,EAAI+F,WAAWD,EAAIE,YAAY,IAAMF,EAAI,QAAU9F,EAAIiG,iBAAiBH,IAAMnG,GAAG,CAAC,eAAeK,EAAIkG,mBAAmB,MAAK,IAAI,MAC1yB,EAAkB,G,oCCPlB,EAAS,WAAa,IAAIlG,EAAIhF,KAASiF,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACxC,YAAY,eAAe,CAACwC,EAAG,SAAS,CAACtC,MAAM,CACnJmC,EAAImG,SACA,oCACA,8BACJnG,EAAIoG,QAAU,sBAAwB,GACtC,qDAAsD5G,MAAM,CAAC,MAAQQ,EAAIM,WAAWX,GAAG,CAAC,MAAQK,EAAIqG,aAAa,CAAClG,EAAG,MAAM,CAACtC,MAAM,CAACmC,EAAIsG,UAAY,YAAc,GAAI,KAAK,CAACnG,EAAG,MAAM,CAACxC,YAAY,oBAAoB,CAACqC,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAI8F,IAAIS,sBAAsB,OAAOpG,EAAG,MAAM,CAACxC,YAAY,yCAAyC,CAACqC,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAI8F,IAAIF,eAAe,WAAY5F,EAAW,QAAEG,EAAG,MAAM,CAACxC,YAAY,iBAAiB,CAACwC,EAAG,UAAU,CAACxC,YAAY,oBAAoB6B,MAAM,CAAC,OAAS,GAAG,QAAUQ,EAAIwG,QAAQ,OAAS,OAAO,GAAGxG,EAAIU,MAAM,IAC7iB,EAAkB,GCHtB,GACE5F,KAAM,gBACNG,MAAO,CACL6K,IAAK,CACHvB,KAAM9H,OACNgK,UAAU,GAEZN,SAAU,CACR5B,KAAM5I,QACN8I,SAAS,GAEX+B,QAAS,CACPjC,KAAMC,OACNC,QAAS,IAGb7I,SAAU,CACR,UACE,IAAKZ,KAAK8K,IAAK,OAAO,EACtB,MAAMY,EAAQ,OAApB,OAAoB,GACd,OAAOA,EAAMC,OAAO3L,KAAK8K,IAAIE,WAAY,QAE3C,YACE,IAAKhL,KAAK8K,IAAK,OAAO,EAGtB,MAAMc,EAAU,OAAtB,OAAsB,CAAtB,kCAGM,OAAmB,IAAZA,GAA6B,IAAZA,GAE1B,YACE,OAAO,OAAb,OAAa,CAAb,oCAGE1K,QAAS,CACP,aACOlB,KAAKmL,UACRnL,KAAK8E,MAAM,eAAgB9E,KAAK8K,QCzC+T,I,wBCOnW,EAAY,eACd,EACA,EACA,GACA,EACA,KACA,KACA,MAIa,IAAiB,QAMhC,IAAkB,EAAW,CAACe,SAAA,KAAOC,QAAA,OCjBrC,OACEhM,KAAM,YACNiM,WAAY,CAAd,gBACE3C,OAAQ,CAACC,EAAX,MACEpJ,MAAO,CACLgG,YAAa,CACXsD,KAAMyC,OACNvC,QAAS,WACP,OAAO,OAAf,OAAe,GAAf,qCAGIO,KAAM,CACJT,KAAMC,OACNiC,UAAU,GAEZQ,SAAU,CACR1C,KAAMxI,MACN0K,UAAU,IAGd1J,KAAM,WACJ,MAAO,CACLmK,KAAM,KACNC,YAAa,IAAIC,KACjBC,aAAc,IAAID,KAClBE,WAAYC,EAAlB,uBACMC,UAAWD,EAAjB,OACME,cAAeF,EAArB,SACMG,YAAaH,EAAnB,WAGE3L,SAAU,CACR,kBACE,OAAO,OAAb,OAAa,CAAb,4CAEI,mBACE,OAAO,OAAb,OAAa,CAAb,4BAEI,qBACE,OAAO,OAAb,OAAa,CAAb,2BAEI,oBACE,OAAO,OAAb,OAAa,CAAb,6BAEI,sBACE,OAAO,OAAb,OAAa,CAAb,4BAEI,oBACE,MAAM+L,EAAK,GACX,IAAK,IAAIC,EAAa,EAAGA,EAAa,GAAIA,IAAc,CACtD,MAAMC,EAAU,IAAIT,KAAK,IAAMQ,EAAY,GAE3CD,EAAGG,KAAK,CACNF,aACAhC,cAAe,OAAzB,OAAyB,CAAzB,8BAGM,OAAO+B,GAET,kBACE,MAAMI,EAAY,GAEZC,EAA0B,IAAIZ,KAC1C,UACA,wBACA,GAGYa,EAAiB,OAA7B,OAA6B,CAA7B,GAEM,IACN,QACA,oBACA,IACA,CACQ,MAAMJ,EAAU,IAAIT,KAAKpM,KAAKgK,KAAMhK,KAAKkN,mBAAoBN,GACvDO,EAAW,OAAzB,OAAyB,CAAzB,GAEQJ,EAAUD,KAAK,CACbF,aACAhC,cAAeuC,EAASjD,OAAOlK,KAAKwM,WACpCjB,qBAAsB4B,EAASjD,OAAOlK,KAAKyM,eAC3CzB,WAAY6B,IAGhB,OAAOE,GAET,uBACE,MAAMK,EAAQ,GAEd,IAAK,MAAMC,KAAWrN,KAAKiM,SACzBmB,EAAMN,KAAK,OAAnB,OAAmB,CAAnB,kCAEM,OAAOM,IAGXlL,MAAO,CACL,cACMlC,KAAKiG,cAAajG,KAAKqM,aAAerM,KAAKiG,eAGnD,UACEjG,KAAKqM,aAAerM,KAAKiG,aAE3B/E,QAAS,CACPgK,eAAgB,OAApB,cAAoB,EAApB,kBAEM,IAAID,EAAmB,EAEvB,MAAMqC,EAAS,OAArB,OAAqB,CAArB,qBACA,6BAGYlM,EAAOpB,KAAKiM,SAAShI,OAAO,GAAxC,iBAE0B,IAAhB7C,EAAKH,SAAcgK,EAAmB7J,EAAK,GAAGmM,oBAElDvN,KAAKqM,aAAevB,EAAIE,WAExBhL,KAAK8E,MAAM,eAAgBgG,EAAIE,WAAYC,KACjD,KACI,iBAAiBH,GACf,GAA6B,IAAzB9K,KAAKiM,SAAShL,OAAc,OAAO,EAEvC,MAAMqM,EAAS,OAArB,OAAqB,CAArB,qBACA,6BAEYlM,EAAOpB,KAAKiM,SAAShI,OAAO,GAAxC,iBAEM,OAAO7C,EAAKH,OAAS,EAAIG,EAAK,GAAGmM,mBAAqB,GAExD,aAAaX,GACX5M,KAAKmM,YAAc,IAAIC,KAAKpM,KAAKgK,KAAM4C,EAAY,GACnD5M,KAAK8E,MAAM,eAAgB8H,IAE7B,eAAetL,GACb,MAAMoK,EAAQ,OAApB,OAAoB,GACd,OAAOA,EAAM8B,KAAOlM,GAASoK,EAAM+B,KAAOzN,KAAKgK,MAEjD,WAAW0D,GACT,OACN,4CACA,wBCrJmW,I,wECY5V,MAAMC,EAAW,cAAW,CACjC1N,MAAO,CACL2N,YADK,OAEL5M,MAAO,CACLyK,UAAU,IAId1J,KAAM,KAAM,CACVC,UAAU,IAGZd,QAAS,CACP,SACElB,KAAA,UAAiBA,KAAjB,WAIJ,SACE,IAAKA,KAAK6N,aAAV,QAGE,OAFA,eAAY,yCAAZ,MAEA,KAGF,MAcA,OAXI7N,KAAK6N,aAAT,UACEC,EAAU9N,KAAK6N,aAAapE,QAAQ,CAClCgB,OAAQzK,KAD0B,SAElC0K,OAAQ1K,KAAK0K,UAIb3J,MAAA,YAAJ,IAA8B+M,EAAA,SAC5BA,EAAUA,EAAV,IAGGA,IAAW/M,MAAA,QAAZ,IAAuC+M,EAA3C,KAMAA,EAAA,KAAe9N,KAAK0I,GAAGoF,EAAA,MAAR,GAA4BA,EAA5B,IAA0C,CACvDjL,MAAO,CAAE,CAAC7C,KAAD,aAAoBA,KAAKgC,YAGpC,IATE,eAAY,8CAAZ,MAEA,MAWS,OAAAoH,EAAA,MAAO,EAEpB,eAAiB,YAAa,SAFjB,wBAGN,CACPtJ,KAAM,WAJO,IC1DA,SAAAsJ,EAAA,MAAO,EAEpB,eAAiB,eAFJ,OAIN,CACPtJ,KAAM,iBCJJ,EAAY,eACd,EACA,EACA,GACA,EACA,KACA,KACA,MAIa,IAAiB,QAOhC,IAAkB,EAAW,CAAC4J,OAAA,KAAKqE,cAAA,KAAYC,e,gBCpB/C,GACEjC,WAAY,CACVkC,UAAJ,GAEE7E,OAAQ,CAACC,EAAX,MACEpJ,MAAO,CACLiO,YAAa,CACX3E,KAAM5I,SAERsF,YAAa,CACXsD,KAAM9H,OACNgI,QAAS,IAAM,OAArB,OAAqB,KAGnB,OACE,MAAO,CACL0E,aAAa,EACbnE,KAAM,KACNoE,MAAO,KACPnE,gBAAiB,GACjBoE,mBAAmB,IAGvBzN,SAAU,IACZ,gBACM0N,mBAAoB,+BAGxBpM,MAAO,CACLgM,YAAa,CACX,gBACMlO,KAAKkO,oBACDlO,KAAKuO,kBACXvO,KAAK8E,MAAM,uBAKnB,UAEE9E,KAAKoK,YAAY,OAArB,OAAqB,GAArB,YACIpK,KAAK+J,WAAW,OAApB,OAAoB,GAApB,SAEE7I,QAAS,IACX,gBACMsN,8BAA+B,2CAEjC,wBACE,MAAMC,QAAezO,KAAKwO,8BAA8B,CACtDxE,KAAMhK,KAAKgK,KACX0E,UAAW1O,KAAKsO,qBAGlB,GAAKG,EAAOE,YAEZ3O,KAAKiK,gBAAkBwE,EAAO1M,MAEzB/B,KAAKmO,aAAa,CACrBnO,KAAKmO,aAAc,EAEnB,MAAMS,EAAa,OAA3B,OAA2B,GAA3B,qBAEQ,IAAIC,EAAe,EACnB,MAAMC,EAAe9O,KAAKiK,gBAAgBhG,OAClD,gCAGoC,IAAxB6K,EAAa7N,SACf4N,EAAeC,EAAa,GAAGvB,oBAGjCvN,KAAK8E,MAAM,eAAgB8J,EAAYC,KAG3C,iBAAiB7E,GACfhK,KAAKgK,KAAOA,QAENhK,KAAKuO,kBAEXvO,KAAK8E,MAAM,cAAe,OAAhC,OAAgC,CAAhC,qCAEI,YAAYsJ,EAAOW,GAAoB,GACrC/O,KAAKoO,MAAQA,EAETW,GACV,WACA,eACA,gBAAQ,KAAR,UAAQ,MAAR,eAGI,aAAa/D,EAAYgE,GACvBhP,KAAK8E,MAAM,eAAgBkG,EAAYgE,IAEzC,WACE,OAAO,OAAb,OAAa,GAAb,wBCpG2W,ICOvW,EAAY,eACd,EACA,EACA,GACA,EACA,KACA,KACA,MAIa,IAAiB,QAMhC,IAAkB,EAAW,CAACtF,OAAA,KAAKE,QAAA,OCxBnC,IAAI,GAAS,WAAa,IAAI5E,EAAIhF,KAASiF,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAQD,EAAIiK,oBAAsBjK,EAAIkK,mBAAoB/J,EAAG,UAAU,CAACA,EAAG,UAAU,CAACxC,YAAY,uBAAuB6B,MAAM,CAAC,KAAO,GAAG,MAAQ,UAAU,YAAY,gBAAgB,CAAGQ,EAAImK,8BAY+ZnK,EAAIU,KAZpYP,EAAG,SAAS,CAACxC,YAAY,mCAAmC6B,MAAM,CAAC,UAAY,MAAM,CAACW,EAAG,SAAS,CAACxC,YAAY,gBAAgB,CAACwC,EAAG,cAAc,CAACtC,MAAM,CAClcmC,EAAIc,iBAAkC,GAAf,aACxB,sCAAuC,CAACd,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIoK,GAAG,0BAA0B,KAAKpK,EAAI4B,GAAG5B,EAAIoK,GAAG,6BAA6B,QAAQ,GAAGjK,EAAG,cAAc,CAACtC,MAAM,CAC/KmC,EAAIc,iBAED,+BADA,gCAEJ,cAAe,CAACX,EAAG,YAAY,CAACX,MAAM,CAAC,SAAWQ,EAAIqK,cAAc,IAAM,IAAIhH,YAAYrD,EAAIsD,GAAG,CAAC,CAACF,IAAI,YAAYG,GAAG,SAASC,GACjI,IAAI7D,EAAK6D,EAAI7D,GACTH,EAAQgE,EAAIhE,MACxB,MAAO,CAACW,EAAG,MAAMH,EAAIyD,GAAGzD,EAAI0D,GAAG,CAAC7F,MAAMmC,EAAIqK,cAAgB,GAAK,qBAAqB7K,MAAM,CAAC,GAAK,2CAA2C,MAAMA,GAAM,GAAOG,GAAI,CAACQ,EAAG,QAAQ,CAACtC,OAAOmC,EAAIc,iBAAgC,oBAAoBtB,MAAM,CAAC,GAAK,+BAA+B,MAAQ,GAAG,SAAW,GAAG,MAAQ,OAAO,MAAQ,GAAG,UAAYQ,EAAIqK,eAAe1K,GAAG,CAAC,MAAQK,EAAIsK,gBAAgB,CAACnK,EAAG,SAAS,CAACX,MAAM,CAAC,KAAO,KAAK,CAACQ,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIuK,eAAe,OAAOpK,EAAG,IAAI,CAACxC,YAAY,QAAQ,CAACqC,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIwK,eAAe,QAAQ,IAAI,OAAO,MAAK,EAAM,UAAU,CAACrK,EAAG,OAAO,CAACH,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIyK,sBAAsB,SAAWzK,EAAIc,iBAA+Id,EAAIU,KAAjIP,EAAG,IAAI,CAACxC,YAAY,mCAAmC,CAACqC,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIoK,GAAG,qCAAqC,OAAgBjK,EAAG,YAAY,CAACX,MAAM,CAAC,SAAWQ,EAAI0K,iBAAiB,IAAM,IAAIrH,YAAYrD,EAAIsD,GAAG,CAAC,CAACF,IAAI,YAAYG,GAAG,SAASC,GAC54B,IAAI7D,EAAK6D,EAAI7D,GACTH,EAAQgE,EAAIhE,MACxB,MAAO,CAAGQ,EAAIc,iBAAwjBd,EAAIU,KAA1iBP,EAAG,MAAMH,EAAIyD,GAAGzD,EAAI0D,GAAG,CAAC7F,MAAMmC,EAAI0K,iBAAmB,GAAK,qBAAqBlL,MAAM,CAAC,GAAK,8CAA8C,MAAMA,GAAM,GAAOG,GAAI,CAACQ,EAAG,QAAQ,CAACxC,YAAY,gDAAgD6B,MAAM,CAAC,GAAK,kCAAkC,MAAQ,OAAO,MAAQ,GAAG,MAAQ,GAAG,UAAYQ,EAAI0K,kBAAkB/K,GAAG,CAAC,MAAQK,EAAI2K,mBAAmB,CAACxK,EAAG,SAAS,CAACX,MAAM,CAAC,KAAO,KAAK,CAACQ,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAI4K,kBAAkB,OAAOzK,EAAG,IAAI,CAACxC,YAAY,QAAQ,CAACqC,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAI6K,kBAAkB,QAAQ,IAAI,OAAgB,MAAK,EAAM,aAAa,CAAC1K,EAAG,OAAO,CAACH,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAI8K,yBAAyB,UAAU,IAAI,IAAa,GAAG3K,EAAG,WAAW,CAACX,MAAM,CAAC,WAAa,GAAG,YAAY,OAAO2C,MAAM,CAACnG,MAAOgE,EAAuB,oBAAEoC,SAAS,SAAUC,GAAMrC,EAAI+K,oBAAoB1I,GAAKE,WAAW,wBAAwB,CAACpC,EAAG,gBAAgB,CAACX,MAAM,CAAC,QAAUQ,EAAIgL,SAASrL,GAAG,CAAC,WAAaK,EAAIiL,eAAe,IAAI,GAAGjL,EAAIU,MAC39B,GAAkB,G,aCblB,GAAS,WAAa,IAAIV,EAAIhF,KAASiF,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,SAAS,CAACA,EAAG,eAAe,CAACH,EAAI2B,GAAG3B,EAAI4B,GAAG5B,EAAIoK,GAAG,2BAA2BjK,EAAG,cAAc,CAACA,EAAG,SAAS,CAACqD,IAAI,gBAAgBhE,MAAM,CAAC,kBAAkB,GAAG,aAAe,OAAO2C,MAAM,CAACnG,MAAOgE,EAAW,QAAEoC,SAAS,SAAUC,GAAMrC,EAAIkL,QAAQ7I,GAAKE,WAAW,YAAY,CAACpC,EAAG,IAAI,CAACxC,YAAY,QAAQ,CAACqC,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIoK,GAAG,2CAA4C,CAAEnJ,YAAajB,EAAImL,mBAAqB,OAAQnL,EAAIoL,UAAUnP,OAAS,EAAGkE,EAAG,WAAW,CAACqD,IAAI,mCAAmChE,MAAM,CAAC,GAAK,mCAAmC,MAAQQ,EAAIoK,GAAG,mCAAmC,MAAQpK,EAAIoL,UAAU,YAAY,eAAe,aAAa,aAAa,KAAOpL,EAAIoK,GAAG,yCAAyC,kBAAkB,GAAG,MAAQ,CAACpK,EAAIqL,MAAM5E,WAAWtE,MAAM,CAACnG,MAAOgE,EAAIgL,QAAkB,WAAE5I,SAAS,SAAUC,GAAMrC,EAAIsL,KAAKtL,EAAIgL,QAAS,aAAc3I,IAAME,WAAW,wBAAwBpC,EAAG,eAAe,CAACqD,IAAI,mCAAmChE,MAAM,CAAC,GAAK,mCAAmC,MAAQQ,EAAIoK,GAAG,mCAAmC,SAAW,GAAG,MAAQpK,EAAIuL,yBAAyBpL,EAAG,IAAI,CAACxC,YAAY,cAAc,CAACqC,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIoK,GAAG,yCAA0C,CAAEnJ,YAAajB,EAAImL,mBAAqB,OAAOhL,EAAG,WAAW,CAACqD,IAAI,iCAAiChE,MAAM,CAAC,GAAK,iCAAiC,MAAUQ,EAAIoK,GAAG,sCAAyC,KAAM,MAAQpK,EAAIwL,QAAQ,YAAY,OAAO,aAAa,KAAK,MAAQ,CAACxL,EAAIqL,MAAM5E,WAAWtE,MAAM,CAACnG,MAAOgE,EAAIgL,QAAwB,iBAAE5I,SAAS,SAAUC,GAAMrC,EAAIsL,KAAKtL,EAAIgL,QAAS,mBAAoB3I,IAAME,WAAW,8BAA8BpC,EAAG,IAAI,CAACxC,YAAY,aAAa,CAACqC,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIoK,GAAG,qCAAqC,OAAOjK,EAAG,iBAAiB,CAACqD,IAAI,gCAAgChE,MAAM,CAAC,GAAK,gCAAgC,MAAUQ,EAAIoK,GAAG,wCAA2C,KAAM,MAAQpK,EAAIyL,WAAW,YAAY,QAAQ,aAAa,KAAK,SAAW,GAAG,QAAUzL,EAAI0L,gBAAgB,MAAQ,GAAG,cAAc,GAAG,MAAQ,CAAC1L,EAAIqL,MAAMM,qCAAqCxJ,MAAM,CAACnG,MAAOgE,EAAIgL,QAAmB,YAAE5I,SAAS,SAAUC,GAAMrC,EAAIsL,KAAKtL,EAAIgL,QAAS,cAAe3I,IAAME,WAAW,yBAAyBpC,EAAG,eAAe,CAACX,MAAM,CAAC,GAAK,8BAA8B,MAAUQ,EAAIoK,GAAG,oCAAuC,KAAM,MAAQ,CAACpK,EAAIqL,MAAM5E,WAAWtE,MAAM,CAACnG,MAAOgE,EAAIgL,QAAY,KAAE5I,SAAS,SAAUC,GAAMrC,EAAIsL,KAAKtL,EAAIgL,QAAS,OAAQ3I,IAAME,WAAW,kBAAkBpC,EAAG,IAAI,CAACxC,YAAY,aAAa,CAACqC,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIoK,GAAG,oCAAoC,OAAOjK,EAAG,aAAa,CAACqD,IAAI,+BAA+BhE,MAAM,CAAC,GAAK,+BAA+B,KAAO,QAAQ,MAAQQ,EAAIoK,GAAG,qCAAqC,YAAY,GAAG,KAAO,KAAKjI,MAAM,CAACnG,MAAOgE,EAAIgL,QAAuB,gBAAE5I,SAAS,SAAUC,GAAMrC,EAAIsL,KAAKtL,EAAIgL,QAAS,kBAAmB3I,IAAME,WAAW,8BAA8B,IAAI,GAAGpC,EAAG,aAAaA,EAAG,iBAAiB,CAACA,EAAG,YAAYA,EAAG,QAAQ,CAACX,MAAM,CAAC,GAAK,8BAA8B,MAAQ,GAAG,KAAO,GAAG,SAAWQ,EAAI4L,WAAWjM,GAAG,CAAC,MAAQ,SAASuB,GAAQ,OAAOlB,EAAI6L,OAAM,MAAU,CAAC7L,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIoK,GAAG,mBAAmB,OAAOjK,EAAG,QAAQ,CAACX,MAAM,CAAC,GAAK,8BAA8B,UAAYQ,EAAIkL,QAAQ,QAAUlL,EAAI4L,UAAU,MAAQ,GAAG,MAAQ,OAAO,KAAO,IAAIjM,GAAG,CAAC,MAAQK,EAAIJ,SAAS,CAACI,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIoK,GAAG,mBAAmB,QAAQ,IAAI,IAChgH,GAAkB,G,0BCItB,IACEtP,KAAM,gBACNG,MAAO,CACL+P,QAAS,CACPzG,KAAM9H,OACNgK,UAAU,IAGd1J,KAAM,KACG,CACLmO,SAAS,EACTG,MAAO,CACL5E,SAAU,KAAM,KAItB7K,SAAU,IACZ,gBACM0N,mBAAoB,4BACpBwC,6CACN,oDACMJ,gBAAiB,yBACjBK,OAAQ,gBACRH,UAAW,sCAEb,YACE,OAAO5Q,KAAK8Q,6CAClB,6BAGI,wBACE,MAAME,EAAWhR,KAAKoQ,UAAU/L,KACtC,2CAGM,OAAQ2M,EAAd,OAA8BA,QAA9B,4BAAyB,IAErB,UACE,OAAOxP,GAAb,MAEI,aACE,OAAOxB,KAAK+Q,OAAO/Q,KAAKsO,mBAAmB,KAE7C,kBACE,OAAOtO,KAAKgQ,QAAQiB,cAEtB,kBACE,OAAO,OAAb,QAAa,CAAb,iDAGE,UACEjR,KAAKkR,uBAEPhQ,QAAS,IACX,gBACMiQ,uBAAwB,oCAE1B,sBACEnR,KAAKqQ,MAAQ,CACX5E,SAAU,KAAlB,gDACQkF,mCAAoC,MAC5C,8DAGI,MAAMzC,GACJlO,KAAK8E,MAAM,aAAcoJ,IAE3B,WACE,OAAOlO,KAAKoR,MAAMC,cAAcC,YAElC,eAEE,GADAtR,KAAKsR,YACAtR,KAAKkQ,QAAS,OAEnB,MAAMzB,QAAezO,KAAKmR,uBAAuBnR,KAAKgQ,SAEjDvB,EAAOE,WAGZ3O,KAAK6Q,OAAM,MCpFuV,M,wGCOpW,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,MAAiB,QAgBhC,IAAkB,GAAW,CAACU,iBAAA,KAAc7H,OAAA,KAAKoC,QAAA,KAAM0F,aAAA,QAAaC,UAAA,QAAUC,WAAA,QAAWC,YAAA,KAASC,SAAA,KAAMC,WAAA,KAAQC,WAAA,KAAQC,cAAA,KAAWC,aAAA,OChCpH,gBACbhC,EACA/J,EACAgL,EACAgB,GAEA,MAAO,CACLhM,cACAgL,eACAiB,iBAAyB,OAAPlC,QAAO,IAAPA,KAASkC,iBAAT,OACdlC,QADc,IACdA,OADc,EACdA,EAASkC,iBACT1Q,GAAkBA,KAAA,GAAGG,GACzBwQ,KAAa,OAAPnC,QAAO,IAAPA,KAASmC,KAAT,OAAgBnC,QAAhB,IAAgBA,OAAhB,EAAgBA,EAASmC,KAAO,GACtCC,gBAAwB,OAAPpC,QAAO,IAAPA,KAASoC,gBAAT,OAA2BpC,QAA3B,IAA2BA,OAA3B,EAA2BA,EAASoC,gBAAkB,GACvEC,WAAU,OAAEJ,QAAF,IAAEA,OAAF,EAAEA,EAAyBI,WACrCC,eAAuB,OAAPtC,QAAO,IAAPA,KAASsC,eAAT,OAA0BtC,QAA1B,IAA0BA,OAA1B,EAA0BA,EAASsC,eAAiB,KACpEC,YAAoB,OAAPvC,QAAO,IAAPA,KAASuC,YAAT,OAAuBvC,QAAvB,IAAuBA,OAAvB,EAAuBA,EAASuC,YAAc,KCV/D,IACEzS,KAAM,qBACNiM,WAAY,CACVyG,cAAJ,IAEEpJ,OAAQ,CAACC,EAAX,MACE,OACE,MAAO,CACLoJ,qBAAsB,KACtB1C,qBAAqB,EACrBC,QAAS,GACTd,oBAAoB,IAGxBtO,SAAU,IACZ,gBACM8R,iBACN,yDACMvD,8BAA+B,yCAC/Bb,mBAAoB,4BACpBqE,+CACN,sDACMC,8BAA+B,uCAEjC,qBACE,OAAO5S,KAAK0S,iBAAiB1S,KAAKsO,mBAAmB,KAEvD,gBAAJ,MACM,OAAN,gFAEI,oBAAJ,QACM,QAAN,2GAEI,gBACE,OAAOtO,KAAK6S,kBAClB,iDACQ,YAAR,kCAEA,iCAEI,gBACE,OAAI7S,KAAKqP,cAAsB,qBAC3BrP,KAAK6S,kBAA0B,YAC5B,uBAET,mBACE,OAAI7S,KAAK0P,iBAAyB,eAC9B1P,KAAK8S,qBAA6B,YAC/B,uBAET,mBAAJ,MACM,OAAN,mFAEI,uBAAJ,QACM,QAAN,8GAEI,kBAAJ,MACM,OAAN,yEAEI,mBACE,MAAMC,EAAuB,OAAnC,QAAmC,CACnC,iBACA,sBAEM,OAAI/S,KAAK0P,iBAAyBqD,EAC3B/S,KAAKoP,GAAG,wCAAyC,CACtDnJ,YAAa8M,KAGjB,uBAAJ,QACM,OAAK/S,KAAK6S,kBAEH7S,KAAKgT,qDAAlB,UACA,iCADA,iBACA,6BADA,aACA,QACA,eAHA,8CAMI,0BAAJ,QACM,OAAKhT,KAAK8S,qBACH9S,KAAKgT,qDAAlB,UACA,iCADA,iBACA,6BADA,aACA,WACA,kBAH6C,KAO3C,gBACEhT,KAAKiT,4BAEP/R,QAAS,IACX,gBACMgS,qBAAsB,gCACtBC,iBAAkB,4BAEpB,+BAA+BC,GAC7B,IAAKpT,KAAKiP,mBAAoB,OAC9B,MAAMoE,QAAiBrT,KAAKkT,qBAAqBE,GAC7CC,EAAS1E,YAAW3O,KAAKyS,qBAAuBY,EAAStR,MAC7D/B,KAAKkP,mBAAqBmE,EAAS1E,WAErC,gBACE3O,KAAKsT,cAAcC,GAAzB,aAEI,mBACEvT,KAAKsT,cAAcC,GAAzB,gBAEI,qDAAqDlG,EAASpH,GAC5D,MAAMuN,EAAU,OAAtB,QAAsB,CAAtB,wBAEM,OAAQnG,EAAQoG,QACd,KAAK,GACH,OAAOzT,KAAKoP,GACtB,2DACA,CAAY,YAAZ,IAEQ,KAAK,GACH,OAAOpP,KAAKoP,GACtB,0DACA,CAAY,YAAZ,EAAY,UAAZ,uBAEQ,KAAK,GACH,OAAOpP,KAAKoP,GACtB,4DACA,CAAY,YAAZ,EAAY,UAAZ,uBAEQ,QACE,MAAO,KAGb,oBAAoBnJ,GAElBjG,KAAKmT,iBAAiBnT,KAAKsO,mBAAmB,IAE9CtO,KAAKgQ,QAAU0D,GACrB,mCACA,EACA,qBACA,oDACA,6BAIM1T,KAAK+P,qBAAsB,GAE7B,WAAWqD,GACTpT,KAAKgQ,QAAU,GACXoD,IACFpT,KAAKiT,yBAAyBG,GAC9BpT,KAAK8E,MAAM,gBAEb9E,KAAK+P,qBAAsB,KC7JyU,M,0BCOtW,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,MAAiB,QAWhC,IAAkB,GAAW,CAAC4D,UAAA,KAAOjK,OAAA,KAAKoC,QAAA,KAAM2F,UAAA,QAAUmC,WAAA,KAAQhK,QAAA,KAAMC,WAAA,OC7BxE,IAAI,GAAS,WAAa,IAAI7E,EAAIhF,KAASiF,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAQD,EAAO,IAAEG,EAAG,SAAS,CAACtC,MAAM,CACzH,yEACAmC,EAAIc,iBAAmB,GAAK,aAActB,MAAM,CAAC,UAAY,MAAM,CAACW,EAAG,eAAe,CAACA,EAAG,SAAS,CAACxC,YAAY,OAAO6H,YAAY,CAAC,YAAY,SAAS,CAACxF,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAI6D,MAAM,QAAQ,GAAG1D,EAAG,eAAe,CAACA,EAAG,KAAK,CAACtC,MAAM,CAACmC,EAAI6O,YAAc,OAAS,GAAI,uBAAuB,CAAC7O,EAAI2B,GAAG3B,EAAI4B,GAAG5B,EAAI8O,YAAY3O,EAAG,cAAc,CAACA,EAAG,IAAI,CAACxC,YAAY,0BAA0B,CAACqC,EAAI2B,GAAG3B,EAAI4B,GAAG5B,EAAI6O,kBAAkB1O,EAAG,iBAAiB,EAC7aH,EAAI+O,QAAW/O,EAAIoG,SAAWpG,EAAIgP,4CACnC7O,EAAG,QAAQ,CAACxC,YAAY,oCAAoC6B,MAAM,CAAC,GAAK,qDAAqD,MAAQ,OAAO,MAAQ,GAAG,GAAK,CAC5J1E,KAAM,kBACNmU,MAAO,CAAEC,KAAMlP,EAAImP,6BACjB,CAACnP,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5G,KAAKoP,GAAG,sBAAsB,OAASpK,EAAIoG,QAA4UpG,EAAIU,KAAvUP,EAAG,QAAQ,CAACxC,YAAY,oCAAoC6B,MAAM,CAAC,GAAK,2CAA2C,MAAQ,OAAO,SAAW,GAAG,MAAQ,IAAIG,GAAG,CAAC,MAAQK,EAAIoP,cAAc,CAACpP,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5G,KAAKoP,GAAG,uCAAuC,KAAKjK,EAAG,SAAS,CAACX,MAAM,CAAC,MAAQ,KAAK,CAACQ,EAAI2B,GAAG,sBAAsB,IAAa,IAAI,GAAG3B,EAAIU,MACra,GAAkB,G,aCLf,MAAM2O,GAAY5S,OAAOC,OAAO,CACrC4S,OAAQ,EACRC,OAAQ,EACRC,QAAS,EACTC,UAAW,EACXC,SAAU,EACVC,OAAQ,EACRC,SAAU,ICPCC,GAAepT,OAAOC,OAAO,CACxC6S,OAAQ,EACRC,QAAS,EACTC,UAAW,EACXC,SAAU,EACVC,OAAQ,EACRC,SAAU,EACVN,OAAQ,ICHV,QACExU,KAAM,8BACNsJ,OAAQ,CAACC,EAAX,cACEpJ,MAAO,CACLoM,aAAc,CACZ9C,KAAM9H,OACNgK,UAAU,IAGd1J,KAAM,KACG,CACL+I,IAAK,OAGTlK,SAAU,CACR,OAEE,OAAIZ,KAAKoL,UAAYpL,KAAKgU,4CAChC,0BAEUhU,KAAKsL,UAAkB,2BAEvBtL,KAAK+T,OAAe,6BAEjB,sBAET,QACE,OAAI/T,KAAKoL,UAAYpL,KAAKgU,4CAChC,kDACA,sDACahU,KAAKoP,GAAG,sCAEjB,cACE,OAAIpP,KAAKoL,QACHpL,KAAKgU,4CACjB,0CACA,iDAEUhU,KAAK+T,OAAe,GACpB/T,KAAKsL,UACAtL,KAAKoP,GAAG,oCAGVpP,KAAKoP,GAAG,qCAEjB,YACE,OACN,8BACA,4BAGI,SACE,OAAOpP,KAAK8K,IAAIgK,SAAS,OAA/B,OAA+B,KAE3B,UAEE,OAAO9U,KAAK8K,IAAIiK,GAAGC,iBAAmB,OAA5C,OAA4C,GAA5C,mBAEI,2BACE,IAAId,EAAOlU,KAAK8K,IAYhB,OAXI9K,KAAKsL,UAEP4I,EAAOA,EAAKe,IAAI,EAAG,SAASC,WAAWL,GAAaN,QAE5D,eACA,mDAGQL,EAAOA,EAAKe,IAAI,EAAG,SAGdf,EAAKhK,OAAO,gBAGvB,UACElK,KAAK8K,IAAM,OAAf,OAAe,CAAf,oBAEE5J,QAAS,CACP,cACElB,KAAK8E,MAAM,yBCtFuW,MCOpX,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,MAAiB,QAUhC,IAAkB,GAAW,CAAC4E,OAAA,KAAKoC,QAAA,KAAM0F,aAAA,QAAaC,UAAA,QAAUC,WAAA,QAAW9H,QAAA,O,8BC5BvE,GAAS,WAAa,IAAI5E,EAAIhF,KAASiF,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,SAAS,CAACxC,YAAY,wBAAwB6B,MAAM,CAAC,UAAY,MAAM,CAACW,EAAG,cAAc,CAACxC,YAAY,aAAa,CAACwC,EAAG,QAAQH,EAAIgD,GAAIhD,EAAoB,kBAAE,SAAS5D,GAAM,OAAO+D,EAAG,QAAQ,CAACiD,IAAMhH,EAAQ,IAAI,aAAcoD,MAAM,CAAC,KAAO,KAAK,GAAK,IAAI,GAAK,IAAI,GAAK,IAAI,GAAK,IAAI,GAAK,MAAM,CAACW,EAAG,6BAA6B,CAACX,MAAM,CAAC,QAAUpD,EAAK,YAAY4D,EAAImQ,gBAAgB/T,EAAKgU,QAAQ,MAAK,IAAI,IAAI,IAClf,GAAkB,G,aCDlB,GAAS,WAAa,IAAIpQ,EAAIhF,KAASiF,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,SAAS,CAACxC,YAAY,8GAA8G6B,MAAM,CAAC,OAAS,OAAO,GAAKQ,EAAIgL,QAAQoF,KAAK,CAACjQ,EAAG,eAAe,CAACxC,YAAY,QAAQ,CAACwC,EAAG,SAAS,CAACX,MAAM,CAAC,MAAQQ,EAAIhD,SAAW,OAAS,GAAG,UAAU,KAAK,CAACgD,EAAI2B,GAAG3B,EAAI4B,GAAG5B,EAAIgL,QAAQnH,UAAU,GAAG1D,EAAG,iBAAiB,CAACA,EAAG,SAAS,CAACxC,YAAY,QAAQ,CAACwC,EAAG,IAAI,CAACtC,MAAM,CACte,gCACAmC,EAAIhD,SAAW,aAAe,KAAM,CAACgD,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIgL,QAAQ8D,OAAO,YAAY,IAC5F,GAAkB,GCAtB,IACEhU,KAAM,6BACNsJ,OAAQ,CAACC,EAAX,MACEpJ,MAAO,CACL+P,QAAS,CACPzG,KAAM9H,OACNgK,UAAU,GAEZzJ,SAAU,CACRuH,KAAM5I,WCZ0W,MCOlX,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,MAAiB,QAQhC,IAAkB,GAAW,CAACmL,QAAA,KAAM0F,aAAA,QAAaE,WAAA,QAAW9H,QAAA,OCrB5D,QACE9J,KAAM,yBACNiM,WAAY,CAAd,+BACE3C,OAAQ,CAACC,EAAX,cACEzI,SAAU,CACR,mBACE,OAAOZ,KAAKqV,SAASpR,OAAO,GAAlC,uBCXiX,M,0BCO7W,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,MAAiB,QAQhC,IAAkB,GAAW,CAAC6H,QAAA,KAAM2F,UAAA,QAAU6D,QAAA,KAAKC,QAAA,OC1BnD,IAAI,GAAS,WAAa,IAAIvQ,EAAIhF,KAASiF,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,WAAW,CAACX,MAAM,CAAC,YAAY,MAAM,WAAaQ,EAAIwQ,wBAAwB7Q,GAAG,CAAC,MAAQ,SAASuB,GAAQ,OAAOlB,EAAIF,MAAM,gBAAgBqC,MAAM,CAACnG,MAAOgE,EAAQ,KAAEoC,SAAS,SAAUC,GAAMrC,EAAIyQ,KAAKpO,GAAKE,WAAW,SAAS,CAACpC,EAAG,SAAS,CAACX,MAAM,CAAC,GAAK,0BAA0B,CAACW,EAAG,eAAe,CAACH,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIM,WAAW,OAAQN,EAAoB,iBAAEG,EAAG,cAAc,CAACA,EAAG,aAAa,CAACqD,IAAI,0BAA0BhE,MAAM,CAAC,GAAK,8BAA8B,KAAO,eAAe,MAAQQ,EAAI0Q,eAAe,SAAW,IAAIvO,MAAM,CAACnG,MAAOgE,EAAIgL,QAAoB,aAAE5I,SAAS,SAAUC,GAAMrC,EAAIsL,KAAKtL,EAAIgL,QAAS,eAAgB3I,IAAME,WAAW,2BAA2B,GAAGpC,EAAG,cAAc,CAACxC,YAAY,mDAAmD,CAACwC,EAAG,IAAI,CAACH,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAI2Q,2BAA2B,OAAQ3Q,EAAoC,iCAAEG,EAAG,MAAM,CAACA,EAAG,OAAO,CAACxC,YAAY,WAAW,CAACqC,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIoK,GAAG,2CAA2C,OAAOjK,EAAG,IAAI,CAACH,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAI4Q,kCAAkC,SAAS5Q,EAAIU,KAAMV,EAAS,MAAEG,EAAG,MAAM,CAACA,EAAG,OAAO,CAACxC,YAAY,WAAW,CAACqC,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAI6Q,qBAAqB,OAAO1Q,EAAG,IAAI,CAACH,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAI8Q,WAAW,KAAK3Q,EAAG,IAAI,CAACX,MAAM,CAAC,MAAS,OAASQ,EAAI+Q,WAAY,KAAQ,OAAS/Q,EAAI+Q,aAAc,CAAC/Q,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAI+Q,YAAY,WAAW/Q,EAAIU,OAAOP,EAAG,iBAAiB,CAACA,EAAG,YAAYA,EAAG,QAAQ,CAACX,MAAM,CAAC,KAAO,GAAG,SAAWQ,EAAIwQ,wBAAwB7Q,GAAG,CAAC,MAAQ,SAASuB,GAAQ,OAAOlB,EAAIF,MAAM,iBAAiB,CAACE,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIoK,GAAG,kBAAkB,OAAOjK,EAAG,QAAQ,CAACX,MAAM,CAAC,GAAK,oCAAoC,SAAWQ,EAAIgR,uBAAuB,MAAQ,MAAM,KAAO,GAAG,QAAUhR,EAAIwQ,wBAAwB7Q,GAAG,CAAC,MAAQK,EAAIJ,SAAS,CAACI,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIoK,GAAG,6BAA6B,QAAQ,IAAI,IAAI,IACz4D,GAAkB,G,aCKtB,IACEtP,KAAM,sBACNsJ,OAAQ,CAACC,EAAX,cACEpJ,MAAO,CACLoN,QAAS,CACP9D,KAAM9H,OACNgK,UAAU,GAEZgK,KAAM,CACJlM,KAAM5I,QACN8K,UAAU,IAGd1J,KAAM,KACG,CACLiO,QAAS,KAGbpP,SAAU,IACZ,gBACM4U,uBAAwB,oCAE1B,kBACE,MAAMS,EAAiB,OAA7B,OAA6B,CAA7B,iCACYC,EAAW,OAAvB,OAAuB,GACjB,OAAOA,EAASC,QAAQF,IAE1B,qCACE,OAAOjW,KAAKqN,QAAQ+I,WAAapW,KAAKqN,QAAQ+I,UAAUzU,GAAK,GAE/D,mBACE,OAAQ3B,KAAKqW,kBAAoBrW,KAAKsW,oCAExC,qBACE,OAAOtW,KAAKuW,MAAMC,EACxB,gDACA,kBAGI,YACE,OAAOxW,KAAKyW,iBAClB,4CACQ,KAAR,0BAEA,qDAEI,iBACE,OAAOzW,KAAK8F,iBAClB,iDACA,4CAEI,yBAAJ,MACM,OAAQ9F,KAAKyW,oBAAnB,sDAEI,4BACE,OAAOzW,KAAKoP,GAAG,2CAA4C,CACzDsH,YAAa1W,KAAKoP,GAAG,sBAGzB,sBACE,OAAOpP,KAAKoP,GAAG,6BAA8B,CAC3CsH,YAAa1W,KAAKoP,GAAG,sBAGzB,mCACE,OAAIpP,KAAKyW,iBAAyB,GAE9BzW,KAAKqW,gBACf,mDAEUrW,KAAKsW,mCACf,4DAEa,KAGX,gBACEtW,KAAKgQ,QAAU,SACThQ,KAAKuC,YACXvC,KAAKgQ,QAAU,CACb2G,UAAW3W,KAAKqN,QAAQ1L,GACxBuS,KAAMlU,KAAK4W,mBACXC,aAAc,KAGlB3V,QAAS,IACX,gBACM4V,cAAe,2BAEjB,eACE,GAAI9W,KAAKgW,uBAAwB,OAEjC,MAAMvH,QAAezO,KAAK8W,cAAc9W,KAAKgQ,SAExCvB,EAAOE,WAEZ3O,KAAK8E,MAAM,2BCtG6V,MCO1W,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,MAAiB,QAYhC,IAAkB,GAAW,CAAC4E,OAAA,KAAKoC,QAAA,KAAM0F,aAAA,QAAaC,UAAA,QAAUC,WAAA,QAAWkC,WAAA,KAAQ9B,WAAA,KAAQE,aAAA,OC3B5E,MAAM+E,GACnBC,aAAY,aAAEC,EAAe,EAAjB,cAAoBC,EAAgB,GAAM,IAKpDlX,KAAKmX,OAASD,EAAgBD,EAM9BjX,KAAKkX,cAAgBA,EAMrBlX,KAAKoX,SAAWH,EAEhB,MAAMI,EAA6B,IAAjBJ,GAAwC,IAAlBC,EAElCI,EAActX,KAAKmX,OAASD,EAAiB,IAC7CK,EAAeD,GAAc,GAAKE,MAAMF,GAE9C,IAAIG,EAAWF,EAAe,EAAIG,KAAKC,MAAML,GAEzCD,IACFI,GAAY,GAOdzX,KAAKyX,SAAWA,GCtCpB,IAAI,GAAS,WAAa,IAAIzS,EAAIhF,KAASiF,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACxC,YAAY,mCAAmC,CAACwC,EAAG,MAAM,CAACxC,YAAY,eAAe,CAACwC,EAAG,SAAS,CAACxC,YAAY,WAAW,CAACqC,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIoK,GAAG,+CAA+C,OAAOjK,EAAG,IAAI,CAACxC,YAAY,4BAA4B,CAACqC,EAAI2B,GAAG3B,EAAI4B,GAAG5B,EAAI4S,yBAAyBzS,EAAG,MAAM,CAACxC,YAAY,oBAAoB,CAACwC,EAAG,SAAS,CAACxC,YAAY,WAAW,CAACqC,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIoK,GAAG,6CAA6C,OAAOjK,EAAG,IAAI,CAACxC,YAAY,4BAA4B,CAACqC,EAAI2B,GAAG3B,EAAI4B,GAAG5B,EAAI6S,2BAA2B1S,EAAG,MAAM,CAACxC,YAAY,oBAAoB,CAACwC,EAAG,SAAS,CAACxC,YAAY,WAAW,CAACqC,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIoK,GAAG,iDAAiD,OAAOjK,EAAG,KAAK,CAACxC,YAAY,gBAAgB,CAACqC,EAAI2B,GAAG3B,EAAI4B,GAAG5B,EAAI8S,wBAAwB3S,EAAG,mCAAmC,CAACxC,YAAY,YAAY6B,MAAM,CAAC,iBAAiBQ,EAAIS,MAAM,MAAQ,GAAG,OAAS,GAAG,UAAU,OAAO,IACjgC,GAAkB,G,aCDlB,GAAS,WAAa,IAAIT,EAAIhF,KAASiF,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,UAAU,CAACxC,YAAY,mCAAmC,CAAEqC,EAAI+S,gBAAkB/S,EAAIgT,UAAW7S,EAAG,WAAW,CAACX,MAAM,CAAC,MAAQQ,EAAIiT,MAAM,OAASjT,EAAIkT,OAAO,aAAalT,EAAIgT,UAAU,gBAAgBhT,EAAIiD,QAAQ,QAAUjD,EAAImT,WAAWhT,EAAG,MAAM,CAACxC,YAAY,gDAAgD6H,YAAY,CAAC,MAAQ,QAAQ,OAAS,UAAU,CAACrF,EAAG,IAAI,CAACxC,YAAY,WAAW,CAACwC,EAAG,SAAS,CAACX,MAAM,CAAC,KAAO,GAAG,MAAQ,YAAY,CAACQ,EAAI2B,GAAG,sBAAsB3B,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIoK,GAAG,+CAA+C,MAAM,MAAM,IACvoB,GAAkB,GCQtB,MAAMgJ,GAAoB,WACxB,MAAsB,qBAAXC,OACF,SAASjR,GACd,OAAOA,KAGJiR,OAAOC,sBANS,GAQzB,SAASC,GAAUhQ,EAAIiQ,EAASC,GAC9B,MAAMC,EAAaD,GAAY,CAAEE,GAAS5X,MAAM6X,UAAUC,MAAMC,KAAKH,IACrE,IAAII,GAAU,EACVJ,EAAO,GACX,OAAO,YAAYK,GACjBL,EAAOD,EAAWM,GACbD,IACHA,GAAU,EACVX,GAAiBU,KAAKT,OAAQ,KAC5BU,GAAU,EACVxQ,EAAG0Q,MAAMT,EAASG,OAK1B,SAASO,GAAS3Q,EAAI4Q,GACpB,IAAIC,EACJ,OAAO,YAAYT,GAOjB,OANIQ,GACFE,aAAaD,GACbA,EAAUlV,WAAWqE,EAAI4Q,EAAOR,IAEhCpQ,EAAG0Q,MAAMjZ,KAAM2Y,GAEVQ,GAGX,MAAMG,GAAsBC,GAAoB,UAAVA,EAAoB,OAAmB,QAAVA,EAAkB,QAAU,SACzFC,GAAiB,CAACD,EAAOE,EAAOC,IAAkB,UAAVH,EAAoBE,EAAkB,QAAVF,EAAkBG,GAAOD,EAAQC,GAAO,EAC5GC,GAAS,CAACJ,EAAOK,EAAMC,EAAOC,KAClC,MAAMC,EAAQD,EAAM,OAAS,QAC7B,OAAOP,IAAUQ,EAAQF,EAAkB,WAAVN,GAAsBK,EAAOC,GAAS,EAAID,GAG7E,SAASI,MACT,MAAMC,GAAO,WACX,IAAItY,EAAK,EACT,OAAO,WACL,OAAOA,KAHC,GAMZ,SAASuY,GAAclZ,GACrB,OAAiB,OAAVA,GAAmC,qBAAVA,EAElC,SAASmZ,GAAQnZ,GACf,GAAID,MAAMoZ,SAAWpZ,MAAMoZ,QAAQnZ,GACjC,OAAO,EAET,MAAMuI,EAAO9H,OAAOmX,UAAUwB,SAAStB,KAAK9X,GAC5C,MAAyB,YAArBuI,EAAKsP,MAAM,EAAG,IAAuC,WAAnBtP,EAAKsP,OAAO,GAKpD,SAASwB,GAASrZ,GAChB,OAAiB,OAAVA,GAA4D,oBAA1CS,OAAOmX,UAAUwB,SAAStB,KAAK9X,GAE1D,MAAMsZ,GAAkBtZ,IAA4B,kBAAVA,GAAsBA,aAAiBwI,SAAW+Q,UAAUvZ,GACtG,SAASwZ,GAAgBxZ,EAAOyZ,GAC9B,OAAOH,GAAetZ,GAASA,EAAQyZ,EAEzC,SAASC,GAAe1Z,EAAOyZ,GAC7B,MAAwB,qBAAVzZ,EAAwByZ,EAAezZ,EAEvD,MAAM2Z,GAAe,CAAC3Z,EAAO4Z,IACV,kBAAV5Z,GAAsBA,EAAM6Z,SAAS,KAC1CC,WAAW9Z,GAAS,IAClBA,EAAQ4Z,EACRG,GAAc,CAAC/Z,EAAO4Z,IACT,kBAAV5Z,GAAsBA,EAAM6Z,SAAS,KAC1CC,WAAW9Z,GAAS,IAAM4Z,GACvB5Z,EACP,SAASoG,GAASmB,EAAIoQ,EAAMH,GAC1B,GAAIjQ,GAAyB,oBAAZA,EAAGuQ,KAClB,OAAOvQ,EAAG0Q,MAAMT,EAASG,GAG7B,SAASqC,GAAKC,EAAU1S,EAAIiQ,EAAS0C,GACnC,IAAI5W,EAAG6W,EAAKC,EACZ,GAAIjB,GAAQc,GAEV,GADAE,EAAMF,EAASha,OACXia,EACF,IAAK5W,EAAI6W,EAAM,EAAG7W,GAAK,EAAGA,IACxBiE,EAAGuQ,KAAKN,EAASyC,EAAS3W,GAAIA,QAGhC,IAAKA,EAAI,EAAGA,EAAI6W,EAAK7W,IACnBiE,EAAGuQ,KAAKN,EAASyC,EAAS3W,GAAIA,QAG7B,GAAI+V,GAASY,GAGlB,IAFAG,EAAO3Z,OAAO2Z,KAAKH,GACnBE,EAAMC,EAAKna,OACNqD,EAAI,EAAGA,EAAI6W,EAAK7W,IACnBiE,EAAGuQ,KAAKN,EAASyC,EAASG,EAAK9W,IAAK8W,EAAK9W,IAI/C,SAAS+W,GAAeC,EAAIC,GAC1B,IAAIjX,EAAGkX,EAAMC,EAAIC,EACjB,IAAKJ,IAAOC,GAAMD,EAAGra,SAAWsa,EAAGta,OACjC,OAAO,EAET,IAAKqD,EAAI,EAAGkX,EAAOF,EAAGra,OAAQqD,EAAIkX,IAAQlX,EAGxC,GAFAmX,EAAKH,EAAGhX,GACRoX,EAAKH,EAAGjX,GACJmX,EAAGE,eAAiBD,EAAGC,cAAgBF,EAAGna,QAAUoa,EAAGpa,MACzD,OAAO,EAGX,OAAO,EAET,SAASsa,GAAQC,GACf,GAAI1B,GAAQ0B,GACV,OAAOA,EAAOC,IAAIF,IAEpB,GAAIvB,GAASwB,GAAS,CACpB,MAAME,EAASta,OAAOua,OAAO,MACvBZ,EAAO3Z,OAAO2Z,KAAKS,GACnBI,EAAOb,EAAKna,OAClB,IAAIib,EAAI,EACR,KAAOA,EAAID,IAAQC,EACjBH,EAAOX,EAAKc,IAAMN,GAAQC,EAAOT,EAAKc,KAExC,OAAOH,EAET,OAAOF,EAET,SAASM,GAAW/T,GAClB,OAAmE,IAA5D,CAAC,YAAa,YAAa,eAAegU,QAAQhU,GAE3D,SAASiU,GAAQjU,EAAK2T,EAAQF,EAAQ5T,GACpC,IAAKkU,GAAW/T,GACd,OAEF,MAAMkU,EAAOP,EAAO3T,GACdmU,EAAOV,EAAOzT,GAChBiS,GAASiC,IAASjC,GAASkC,GAC7BC,GAAMF,EAAMC,EAAMtU,GAElB8T,EAAO3T,GAAOwT,GAAQW,GAG1B,SAASC,GAAMT,EAAQF,EAAQ5T,GAC7B,MAAMwU,EAAUtC,GAAQ0B,GAAUA,EAAS,CAACA,GACtCL,EAAOiB,EAAQxb,OACrB,IAAKoZ,GAAS0B,GACZ,OAAOA,EAET9T,EAAUA,GAAW,GACrB,MAAMyU,EAASzU,EAAQyU,QAAUL,GACjC,IAAK,IAAI/X,EAAI,EAAGA,EAAIkX,IAAQlX,EAAG,CAE7B,GADAuX,EAASY,EAAQnY,IACZ+V,GAASwB,GACZ,SAEF,MAAMT,EAAO3Z,OAAO2Z,KAAKS,GACzB,IAAK,IAAIK,EAAI,EAAGD,EAAOb,EAAKna,OAAQib,EAAID,IAAQC,EAC9CQ,EAAOtB,EAAKc,GAAIH,EAAQF,EAAQ5T,GAGpC,OAAO8T,EAET,SAASY,GAAQZ,EAAQF,GACvB,OAAOW,GAAMT,EAAQF,EAAQ,CAACa,OAAQE,KAExC,SAASA,GAAUxU,EAAK2T,EAAQF,GAC9B,IAAKM,GAAW/T,GACd,OAEF,MAAMkU,EAAOP,EAAO3T,GACdmU,EAAOV,EAAOzT,GAChBiS,GAASiC,IAASjC,GAASkC,GAC7BI,GAAQL,EAAMC,GACJ9a,OAAOmX,UAAU9X,eAAegY,KAAKiD,EAAQ3T,KACvD2T,EAAO3T,GAAOwT,GAAQW,IAS1B,MAAMM,GAAc,GACdC,GAAM,IACZ,SAASC,GAAmB3U,EAAKqR,GAC/B,MAAMuD,EAAM5U,EAAIgU,QAAQU,GAAKrD,GAC7B,OAAgB,IAATuD,EAAa5U,EAAInH,OAAS+b,EAEnC,SAASC,GAAiBC,EAAK9U,GAC7B,GAAIA,IAAQyU,GACV,OAAOK,EAET,IAAIC,EAAM,EACNH,EAAMD,GAAmB3U,EAAK+U,GAClC,MAAOD,GAAOF,EAAMG,EAClBD,EAAMA,EAAI9U,EAAIyQ,MAAMsE,EAAKH,IACzBG,EAAMH,EAAM,EACZA,EAAMD,GAAmB3U,EAAK+U,GAEhC,OAAOD,EAET,SAASE,GAAYC,GACnB,OAAOA,EAAIC,OAAO,GAAGC,cAAgBF,EAAIxE,MAAM,GAEjD,MAAM2E,GAAWxc,GAA2B,qBAAVA,EAC5Byc,GAAczc,GAA2B,oBAAVA,EAC/B0c,GAAY,CAACC,EAAGC,KACpB,GAAID,EAAEE,OAASD,EAAEC,KACf,OAAO,EAET,IAAK,MAAMzc,KAAQuc,EACjB,IAAKC,EAAEE,IAAI1c,GACT,OAAO,EAGX,OAAO,GAET,SAAS2c,GAAclZ,GACrB,MAAkB,YAAXA,EAAE0E,MAAiC,UAAX1E,EAAE0E,MAA+B,gBAAX1E,EAAE0E,KAGzD,MAAMyU,GAAKtG,KAAKsG,GACVC,GAAM,EAAID,GACVE,GAAQD,GAAMD,GACdG,GAAW3U,OAAO4U,kBAClBC,GAAcL,GAAK,IACnBM,GAAUN,GAAK,EACfO,GAAaP,GAAK,EAClBQ,GAAqB,EAALR,GAAS,EACzBS,GAAQ/G,KAAK+G,MACbC,GAAOhH,KAAKgH,KAClB,SAASC,GAAQC,GACf,MAAMC,EAAenH,KAAKC,MAAMiH,GAChCA,EAAQE,GAAaF,EAAOC,EAAcD,EAAQ,KAAQC,EAAeD,EACzE,MAAMG,EAAYrH,KAAKsH,IAAI,GAAItH,KAAKuH,MAAMR,GAAMG,KAC1CM,EAAWN,EAAQG,EACnBI,EAAeD,GAAY,EAAI,EAAIA,GAAY,EAAI,EAAIA,GAAY,EAAI,EAAI,GACjF,OAAOC,EAAeJ,EAExB,SAASK,GAAWpe,GAClB,MAAMyN,EAAS,GACT4Q,EAAO3H,KAAK2H,KAAKre,GACvB,IAAIsD,EACJ,IAAKA,EAAI,EAAGA,EAAI+a,EAAM/a,IAChBtD,EAAQsD,IAAM,IAChBmK,EAAO3B,KAAKxI,GACZmK,EAAO3B,KAAK9L,EAAQsD,IAOxB,OAJI+a,KAAiB,EAAPA,IACZ5Q,EAAO3B,KAAKuS,GAEd5Q,EAAO6Q,KAAK,CAAC3B,EAAGC,IAAMD,EAAIC,GAAG2B,MACtB9Q,EAET,SAAS+Q,GAASC,GAChB,OAAQjI,MAAMsD,WAAW2E,KAAOlF,SAASkF,GAE3C,SAASX,GAAavU,EAAGmV,EAAGC,GAC1B,OAAOjI,KAAKkI,IAAIrV,EAAImV,GAAKC,EAE3B,SAASE,GAAYtV,EAAGoV,GACtB,MAAMG,EAAUpI,KAAKC,MAAMpN,GAC3B,OAASuV,EAAUH,GAAYpV,GAAQuV,EAAUH,GAAYpV,EAE/D,SAASwV,GAAmBC,EAAOjE,EAAQkE,GACzC,IAAI3b,EAAGkX,EAAMxa,EACb,IAAKsD,EAAI,EAAGkX,EAAOwE,EAAM/e,OAAQqD,EAAIkX,EAAMlX,IACzCtD,EAAQgf,EAAM1b,GAAG2b,GACZzI,MAAMxW,KACT+a,EAAOmE,IAAMxI,KAAKwI,IAAInE,EAAOmE,IAAKlf,GAClC+a,EAAOoE,IAAMzI,KAAKyI,IAAIpE,EAAOoE,IAAKnf,IAIxC,SAASof,GAAUC,GACjB,OAAOA,GAAWrC,GAAK,KAEzB,SAASsC,GAAUC,GACjB,OAAOA,GAAW,IAAMvC,IAE1B,SAASwC,GAAejW,GACtB,IAAK+P,GAAe/P,GAClB,OAEF,IAAI1F,EAAI,EACJ4b,EAAI,EACR,MAAO/I,KAAKC,MAAMpN,EAAI1F,GAAKA,IAAM0F,EAC/B1F,GAAK,GACL4b,IAEF,OAAOA,EAET,SAASC,GAAkBC,EAAaC,GACtC,MAAMC,EAAsBD,EAAWrW,EAAIoW,EAAYpW,EACjDuW,EAAsBF,EAAWlB,EAAIiB,EAAYjB,EACjDqB,EAA2BrJ,KAAK2H,KAAKwB,EAAsBA,EAAsBC,EAAsBA,GAC7G,IAAIE,EAAQtJ,KAAKuJ,MAAMH,EAAqBD,GAI5C,OAHIG,GAAU,GAAMhD,KAClBgD,GAAS/C,IAEJ,CACL+C,QACAE,SAAUH,GAGd,SAASI,GAAsBC,EAAKC,GAClC,OAAO3J,KAAK2H,KAAK3H,KAAKsH,IAAIqC,EAAI9W,EAAI6W,EAAI7W,EAAG,GAAKmN,KAAKsH,IAAIqC,EAAI3B,EAAI0B,EAAI1B,EAAG,IAExE,SAAS4B,GAAW3D,EAAGC,GACrB,OAAQD,EAAIC,EAAIM,IAASD,GAAMD,GAEjC,SAASuD,GAAgB5D,GACvB,OAAQA,EAAIM,GAAMA,IAAOA,GAE3B,SAASuD,GAAcR,EAAOvH,EAAOC,EAAK+H,GACxC,MAAM9D,EAAI4D,GAAgBP,GACpBU,EAAIH,GAAgB9H,GACpB5U,EAAI0c,GAAgB7H,GACpBiI,EAAeJ,GAAgBG,EAAI/D,GACnCiE,EAAaL,GAAgB1c,EAAI8Y,GACjCkE,EAAeN,GAAgB5D,EAAI+D,GACnCI,EAAaP,GAAgB5D,EAAI9Y,GACvC,OAAO8Y,IAAM+D,GAAK/D,IAAM9Y,GAAM4c,GAAyBC,IAAM7c,GACvD8c,EAAeC,GAAcC,EAAeC,EAEpD,SAASC,GAAY/gB,EAAOkf,EAAKC,GAC/B,OAAOzI,KAAKyI,IAAID,EAAKxI,KAAKwI,IAAIC,EAAKnf,IAErC,SAASghB,GAAYhhB,GACnB,OAAO+gB,GAAY/gB,GAAQ,MAAO,OAEpC,SAASihB,GAAWjhB,EAAOyY,EAAOC,EAAKiG,EAAU,MAC/C,OAAO3e,GAAS0W,KAAKwI,IAAIzG,EAAOC,GAAOiG,GAAW3e,GAAS0W,KAAKyI,IAAI1G,EAAOC,GAAOiG,EAGpF,MAAMuC,GAAUC,GAAY,IAANA,GAAiB,IAANA,EAC3BC,GAAY,CAACD,EAAGT,EAAGjB,KAAQ/I,KAAKsH,IAAI,EAAG,IAAMmD,GAAK,IAAMzK,KAAK2K,KAAKF,EAAIT,GAAKzD,GAAMwC,GACjF6B,GAAa,CAACH,EAAGT,EAAGjB,IAAM/I,KAAKsH,IAAI,GAAI,GAAKmD,GAAKzK,KAAK2K,KAAKF,EAAIT,GAAKzD,GAAMwC,GAAK,EAC/E8B,GAAU,CACdC,OAAQL,GAAKA,EACbM,WAAYN,GAAKA,EAAIA,EACrBO,YAAaP,IAAMA,GAAKA,EAAI,GAC5BQ,cAAeR,IAAOA,GAAK,IAAO,EAC9B,GAAMA,EAAIA,GACT,MAAUA,GAAMA,EAAI,GAAK,GAC9BS,YAAaT,GAAKA,EAAIA,EAAIA,EAC1BU,aAAcV,IAAMA,GAAK,GAAKA,EAAIA,EAAI,EACtCW,eAAgBX,IAAOA,GAAK,IAAO,EAC/B,GAAMA,EAAIA,EAAIA,EACd,KAAQA,GAAK,GAAKA,EAAIA,EAAI,GAC9BY,YAAaZ,GAAKA,EAAIA,EAAIA,EAAIA,EAC9Ba,aAAcb,MAAQA,GAAK,GAAKA,EAAIA,EAAIA,EAAI,GAC5Cc,eAAgBd,IAAOA,GAAK,IAAO,EAC/B,GAAMA,EAAIA,EAAIA,EAAIA,GACjB,KAAQA,GAAK,GAAKA,EAAIA,EAAIA,EAAI,GACnCe,YAAaf,GAAKA,EAAIA,EAAIA,EAAIA,EAAIA,EAClCgB,aAAchB,IAAMA,GAAK,GAAKA,EAAIA,EAAIA,EAAIA,EAAI,EAC9CiB,eAAgBjB,IAAOA,GAAK,IAAO,EAC/B,GAAMA,EAAIA,EAAIA,EAAIA,EAAIA,EACtB,KAAQA,GAAK,GAAKA,EAAIA,EAAIA,EAAIA,EAAI,GACtCkB,WAAYlB,GAA8B,EAAxBzK,KAAK4L,IAAInB,EAAI7D,IAC/BiF,YAAapB,GAAKzK,KAAK2K,IAAIF,EAAI7D,IAC/BkF,cAAerB,IAAM,IAAOzK,KAAK4L,IAAItF,GAAKmE,GAAK,GAC/CsB,WAAYtB,GAAY,IAANA,EAAW,EAAIzK,KAAKsH,IAAI,EAAG,IAAMmD,EAAI,IACvDuB,YAAavB,GAAY,IAANA,EAAW,EAA4B,EAAvBzK,KAAKsH,IAAI,GAAI,GAAKmD,GACrDwB,cAAexB,GAAKD,GAAOC,GAAKA,EAAIA,EAAI,GACpC,GAAMzK,KAAKsH,IAAI,EAAG,IAAU,EAAJmD,EAAQ,IAChC,IAAyC,EAAjCzK,KAAKsH,IAAI,GAAI,IAAU,EAAJmD,EAAQ,KACvCyB,WAAYzB,GAAMA,GAAK,EAAKA,IAAMzK,KAAK2H,KAAK,EAAI8C,EAAIA,GAAK,GACzD0B,YAAa1B,GAAKzK,KAAK2H,KAAK,GAAK8C,GAAK,GAAKA,GAC3C2B,cAAe3B,IAAOA,GAAK,IAAO,GAC7B,IAAOzK,KAAK2H,KAAK,EAAI8C,EAAIA,GAAK,GAC/B,IAAOzK,KAAK2H,KAAK,GAAK8C,GAAK,GAAKA,GAAK,GACzC4B,cAAe5B,GAAKD,GAAOC,GAAKA,EAAIC,GAAUD,EAAG,KAAO,IACxD6B,eAAgB7B,GAAKD,GAAOC,GAAKA,EAAIG,GAAWH,EAAG,KAAO,IAC1D,iBAAiBA,GACf,MAAMT,EAAI,MACJjB,EAAI,IACV,OAAOyB,GAAOC,GAAKA,EACjBA,EAAI,GACA,GAAMC,GAAc,EAAJD,EAAOT,EAAGjB,GAC1B,GAAM,GAAM6B,GAAe,EAAJH,EAAQ,EAAGT,EAAGjB,IAE7C,WAAW0B,GACT,MAAMT,EAAI,QACV,OAAOS,EAAIA,IAAMT,EAAI,GAAKS,EAAIT,IAEhC,YAAYS,GACV,MAAMT,EAAI,QACV,OAAQS,GAAK,GAAKA,IAAMT,EAAI,GAAKS,EAAIT,GAAK,GAE5C,cAAcS,GACZ,IAAIT,EAAI,QACR,OAAKS,GAAK,IAAO,EACDA,EAAIA,IAAuB,GAAhBT,GAAK,QAAgBS,EAAIT,GAA3C,GAEF,KAAQS,GAAK,GAAKA,IAAuB,GAAhBT,GAAK,QAAgBS,EAAIT,GAAK,IAEhEuC,aAAc9B,GAAK,EAAII,GAAQ2B,cAAc,EAAI/B,GACjD,cAAcA,GACZ,MAAMgC,EAAI,OACJ3N,EAAI,KACV,OAAI2L,EAAK,EAAI3L,EACJ2N,EAAIhC,EAAIA,EAEbA,EAAK,EAAI3L,EACJ2N,GAAKhC,GAAM,IAAM3L,GAAM2L,EAAI,IAEhCA,EAAK,IAAM3L,EACN2N,GAAKhC,GAAM,KAAO3L,GAAM2L,EAAI,MAE9BgC,GAAKhC,GAAM,MAAQ3L,GAAM2L,EAAI,SAEtCiC,gBAAiBjC,GAAMA,EAAI,GACO,GAA9BI,GAAQ0B,aAAiB,EAAJ9B,GACc,GAAnCI,GAAQ2B,cAAkB,EAAJ/B,EAAQ,GAAW;;;;;;;AAS/C,SAAS,GAAMkC,GACb,OAAOA,EAAI,GAAM,EAEnB,MAAMC,GAAM,CAACD,EAAGE,EAAG/hB,IAAMkV,KAAKyI,IAAIzI,KAAKwI,IAAImE,EAAG7hB,GAAI+hB,GAClD,SAASC,GAAIH,GACX,OAAOC,GAAI,GAAU,KAAJD,GAAW,EAAG,KAEjC,SAASI,GAAIJ,GACX,OAAOC,GAAI,GAAU,IAAJD,GAAU,EAAG,KAEhC,SAASK,GAAIL,GACX,OAAOC,GAAI,GAAMD,EAAI,MAAQ,IAAK,EAAG,GAEvC,SAASM,GAAIN,GACX,OAAOC,GAAI,GAAU,IAAJD,GAAU,EAAG,KAEhC,MAAMO,GAAQ,CAACC,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAG,GAAIC,EAAG,GAAIC,EAAG,GAAIC,EAAG,GAAIC,EAAG,GAAIC,EAAG,GAAIjI,EAAG,GAAIC,EAAG,GAAIiI,EAAG,GAAIrP,EAAG,GAAI3R,EAAG,GAAIihB,EAAG,IACrJC,GAAM,IAAI,oBACVC,GAAKpI,GAAKmI,GAAQ,GAAJnI,GACdqI,GAAKrI,GAAKmI,IAAS,IAAJnI,IAAa,GAAKmI,GAAQ,GAAJnI,GACrCsI,GAAKtI,IAAW,IAAJA,IAAa,KAAY,GAAJA,GACjCuI,GAAU9B,GAAK6B,GAAG7B,EAAE+B,IAAMF,GAAG7B,EAAEgC,IAAMH,GAAG7B,EAAEzG,IAAMsI,GAAG7B,EAAE1G,GAC3D,SAAS2I,GAASjJ,GAChB,IACIkJ,EADApL,EAAMkC,EAAIpc,OAmBd,MAjBe,MAAXoc,EAAI,KACM,IAARlC,GAAqB,IAARA,EACfoL,EAAM,CACJH,EAAG,IAAsB,GAAhBxB,GAAMvH,EAAI,IACnBgJ,EAAG,IAAsB,GAAhBzB,GAAMvH,EAAI,IACnBO,EAAG,IAAsB,GAAhBgH,GAAMvH,EAAI,IACnBM,EAAW,IAARxC,EAA4B,GAAhByJ,GAAMvH,EAAI,IAAW,KAErB,IAARlC,GAAqB,IAARA,IACtBoL,EAAM,CACJH,EAAGxB,GAAMvH,EAAI,KAAO,EAAIuH,GAAMvH,EAAI,IAClCgJ,EAAGzB,GAAMvH,EAAI,KAAO,EAAIuH,GAAMvH,EAAI,IAClCO,EAAGgH,GAAMvH,EAAI,KAAO,EAAIuH,GAAMvH,EAAI,IAClCM,EAAW,IAARxC,EAAayJ,GAAMvH,EAAI,KAAO,EAAIuH,GAAMvH,EAAI,IAAO,OAIrDkJ,EAET,MAAM,GAAQ,CAAC5I,EAAGmI,IAAMnI,EAAI,IAAMmI,EAAEnI,GAAK,GACzC,SAAS6I,GAAUnC,GACjB,IAAIyB,EAAIK,GAAQ9B,GAAK2B,GAAKC,GAC1B,OAAO5B,EACH,IAAMyB,EAAEzB,EAAE+B,GAAKN,EAAEzB,EAAEgC,GAAKP,EAAEzB,EAAEzG,GAAK,GAAMyG,EAAE1G,EAAGmI,QAC5CW,EAEN,MAAMC,GAAS,+GACf,SAASC,GAASnkB,EAAGkf,EAAG6C,GACtB,MAAM5G,EAAI+D,EAAIhK,KAAKwI,IAAIqE,EAAG,EAAIA,GACxBuB,EAAI,CAACrG,EAAGvD,GAAKuD,EAAIjd,EAAI,IAAM,KAAO+hB,EAAI5G,EAAIjG,KAAKyI,IAAIzI,KAAKwI,IAAIhE,EAAI,EAAG,EAAIA,EAAG,IAAK,GACrF,MAAO,CAAC4J,EAAE,GAAIA,EAAE,GAAIA,EAAE,IAExB,SAASc,GAASpkB,EAAGkf,EAAG2C,GACtB,MAAMyB,EAAI,CAACrG,EAAGvD,GAAKuD,EAAIjd,EAAI,IAAM,IAAM6hB,EAAIA,EAAI3C,EAAIhK,KAAKyI,IAAIzI,KAAKwI,IAAIhE,EAAG,EAAIA,EAAG,GAAI,GACnF,MAAO,CAAC4J,EAAE,GAAIA,EAAE,GAAIA,EAAE,IAExB,SAASe,GAASrkB,EAAGskB,EAAGlJ,GACtB,MAAMmJ,EAAMJ,GAASnkB,EAAG,EAAG,IAC3B,IAAI8B,EAMJ,IALIwiB,EAAIlJ,EAAI,IACVtZ,EAAI,GAAKwiB,EAAIlJ,GACbkJ,GAAKxiB,EACLsZ,GAAKtZ,GAEFA,EAAI,EAAGA,EAAI,EAAGA,IACjByiB,EAAIziB,IAAM,EAAIwiB,EAAIlJ,EAClBmJ,EAAIziB,IAAMwiB,EAEZ,OAAOC,EAET,SAASC,GAASZ,EAAGC,EAAGzI,EAAGpH,EAAG2J,GAC5B,OAAIiG,IAAMjG,GACCkG,EAAIzI,GAAKpH,GAAM6P,EAAIzI,EAAI,EAAI,GAElCyI,IAAMlG,GACAvC,EAAIwI,GAAK5P,EAAI,GAEf4P,EAAIC,GAAK7P,EAAI,EAEvB,SAASyQ,GAAQ5C,GACf,MAAMzF,EAAQ,IACRwH,EAAI/B,EAAE+B,EAAIxH,EACVyH,EAAIhC,EAAEgC,EAAIzH,EACVhB,EAAIyG,EAAEzG,EAAIgB,EACVuB,EAAMzI,KAAKyI,IAAIiG,EAAGC,EAAGzI,GACrBsC,EAAMxI,KAAKwI,IAAIkG,EAAGC,EAAGzI,GACrB2G,GAAKpE,EAAMD,GAAO,EACxB,IAAI1d,EAAGkf,EAAGlL,EAOV,OANI2J,IAAQD,IACV1J,EAAI2J,EAAMD,EACVwB,EAAI6C,EAAI,GAAM/N,GAAK,EAAI2J,EAAMD,GAAO1J,GAAK2J,EAAMD,GAC/C1d,EAAIwkB,GAASZ,EAAGC,EAAGzI,EAAGpH,EAAG2J,GACzB3d,EAAQ,GAAJA,EAAS,IAER,CAAK,EAAJA,EAAOkf,GAAK,EAAG6C,GAEzB,SAAS2C,GAAMpB,EAAGnI,EAAGC,EAAGiI,GACtB,OACE9kB,MAAMoZ,QAAQwD,GACVmI,EAAEnI,EAAE,GAAIA,EAAE,GAAIA,EAAE,IAChBmI,EAAEnI,EAAGC,EAAGiI,IACZ/J,IAAI2I,IAER,SAAS0C,GAAQ3kB,EAAGkf,EAAG6C,GACrB,OAAO2C,GAAMP,GAAUnkB,EAAGkf,EAAG6C,GAE/B,SAAS6C,GAAQ5kB,EAAGskB,EAAGlJ,GACrB,OAAOsJ,GAAML,GAAUrkB,EAAGskB,EAAGlJ,GAE/B,SAASyJ,GAAQ7kB,EAAGkf,EAAG2C,GACrB,OAAO6C,GAAMN,GAAUpkB,EAAGkf,EAAG2C,GAE/B,SAASiD,GAAI9kB,GACX,OAAQA,EAAI,IAAM,KAAO,IAE3B,SAAS+kB,GAASlK,GAChB,MAAM8G,EAAIuC,GAAOc,KAAKnK,GACtB,IACIgH,EADA1G,EAAI,IAER,IAAKwG,EACH,OAEEA,EAAE,KAAOE,IACX1G,EAAIwG,EAAE,GAAKK,IAAKL,EAAE,IAAMM,IAAKN,EAAE,KAEjC,MAAM3hB,EAAI8kB,IAAKnD,EAAE,IACXsD,GAAMtD,EAAE,GAAK,IACbuD,GAAMvD,EAAE,GAAK,IAQnB,OANEE,EADW,QAATF,EAAE,GACAiD,GAAQ5kB,EAAGilB,EAAIC,GACD,QAATvD,EAAE,GACPkD,GAAQ7kB,EAAGilB,EAAIC,GAEfP,GAAQ3kB,EAAGilB,EAAIC,GAEd,CACLtB,EAAG/B,EAAE,GACLgC,EAAGhC,EAAE,GACLzG,EAAGyG,EAAE,GACL1G,EAAGA,GAGP,SAASgK,GAAOtD,EAAGuD,GACjB,IAAIplB,EAAIykB,GAAQ5C,GAChB7hB,EAAE,GAAK8kB,GAAI9kB,EAAE,GAAKolB,GAClBplB,EAAI2kB,GAAQ3kB,GACZ6hB,EAAE+B,EAAI5jB,EAAE,GACR6hB,EAAEgC,EAAI7jB,EAAE,GACR6hB,EAAEzG,EAAIpb,EAAE,GAEV,SAASqlB,GAAUxD,GACjB,IAAKA,EACH,OAEF,MAAM1G,EAAIsJ,GAAQ5C,GACZ7hB,EAAImb,EAAE,GACN+D,EAAIiD,GAAIhH,EAAE,IACV4G,EAAII,GAAIhH,EAAE,IAChB,OAAO0G,EAAE1G,EAAI,IACT,QAAQnb,MAAMkf,OAAO6C,OAAOG,GAAIL,EAAE1G,MAClC,OAAOnb,MAAMkf,OAAO6C,MAE1B,MAAMzI,GAAM,CACVvR,EAAG,OACHud,EAAG,QACHC,EAAG,KACHC,EAAG,MACHC,EAAG,KACHC,EAAG,SACHC,EAAG,QACH5C,EAAG,KACH6C,EAAG,KACHC,EAAG,KACH7C,EAAG,KACHC,EAAG,QACHC,EAAG,QACH4C,EAAG,KACHC,EAAG,WACH5C,EAAG,KACH6C,EAAG,KACHC,EAAG,KACHC,EAAG,KACHC,EAAG,KACHC,EAAG,QACHhD,EAAG,KACHiD,EAAG,KACHC,EAAG,OACHC,EAAG,KACHC,EAAG,QACHC,EAAG,MAECC,GAAU,CACdC,OAAQ,SACRC,YAAa,SACbC,KAAM,OACNC,UAAW,SACXC,KAAM,SACNC,MAAO,SACPC,OAAQ,SACRC,MAAO,IACPC,aAAc,SACdC,GAAI,KACJC,QAAS,SACTC,KAAM,SACNC,UAAW,SACXC,OAAQ,SACRC,SAAU,SACVC,QAAS,SACTC,IAAK,SACLC,YAAa,SACbC,QAAS,SACTC,QAAS,SACTC,KAAM,OACNC,IAAK,KACLC,MAAO,OACPC,QAAS,SACTC,KAAM,SACNC,KAAM,OACNC,KAAM,SACNC,OAAQ,SACRC,QAAS,SACTC,SAAU,SACVC,OAAQ,SACRC,MAAO,SACPC,IAAK,SACLC,OAAQ,SACRC,OAAQ,SACRC,KAAM,SACNC,MAAO,SACPC,MAAO,SACPC,IAAK,OACLC,OAAQ,SACRC,OAAQ,SACRC,SAAU,OACVC,OAAQ,SACRC,OAAQ,SACRC,SAAU,SACVC,SAAU,SACVC,SAAU,SACVC,SAAU,SACVC,OAAQ,SACRC,QAAS,SACTC,UAAW,SACXC,IAAK,SACLC,OAAQ,SACRC,IAAK,SACLC,IAAK,OACLC,MAAO,SACPC,IAAK,SACLC,QAAS,SACTC,OAAQ,SACRC,QAAS,SACTC,MAAO,SACPC,KAAM,SACNC,MAAO,SACPC,OAAQ,SACRC,UAAW,SACXC,QAAS,SACTC,WAAY,SACZC,IAAK,SACLC,KAAM,SACNC,MAAO,SACPC,UAAW,SACXC,KAAM,SACNC,KAAM,SACNC,KAAM,SACNC,KAAM,SACNC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,MAAO,SACPC,MAAO,SACPC,QAAS,SACTC,IAAK,SACLC,KAAM,OACNC,QAAS,SACTC,IAAK,SACLC,OAAQ,SACRC,MAAO,SACPC,WAAY,SACZC,IAAK,KACLC,MAAO,SACPC,OAAQ,SACRC,OAAQ,SACRC,KAAM,SACNC,UAAW,OACXC,IAAK,SACLC,SAAU,SACVC,WAAY,SACZC,QAAS,SACTC,SAAU,SACVC,QAAS,SACTC,WAAY,SACZC,KAAM,KACNC,OAAQ,SACRC,KAAM,SACNC,QAAS,SACTC,MAAO,SACPC,QAAS,SACTC,KAAM,SACNC,UAAW,SACXC,OAAQ,SACRC,MAAO,SACPC,WAAY,SACZC,UAAW,SACXC,QAAS,SACTC,KAAM,SACNC,IAAK,SACLC,KAAM,SACNC,QAAS,SACTC,MAAO,SACPC,YAAa,SACbC,GAAI,SACJC,SAAU,SACVC,MAAO,SACPC,UAAW,SACXC,MAAO,SACPC,UAAW,SACXC,MAAO,SACPC,QAAS,SACTC,MAAO,SACPC,OAAQ,SACRC,MAAO,SACPC,IAAK,SACLC,KAAM,SACNC,KAAM,SACNC,KAAM,SACNC,SAAU,OACVC,OAAQ,SACRC,IAAK,SACLC,IAAK,OACLC,MAAO,SACPC,OAAQ,SACRC,GAAI,SACJC,MAAO,SACPC,IAAK,SACLC,KAAM,SACNC,UAAW,SACXC,GAAI,SACJC,MAAO,UAET,SAASC,KACP,MAAMC,EAAW,GACXpX,EAAO3Z,OAAO2Z,KAAK8N,IACnBuJ,EAAQhxB,OAAO2Z,KAAKU,IAC1B,IAAIxX,EAAGouB,EAAGxW,EAAGyW,EAAIC,EACjB,IAAKtuB,EAAI,EAAGA,EAAI8W,EAAKna,OAAQqD,IAAK,CAEhC,IADAquB,EAAKC,EAAKxX,EAAK9W,GACVouB,EAAI,EAAGA,EAAID,EAAMxxB,OAAQyxB,IAC5BxW,EAAIuW,EAAMC,GACVE,EAAKA,EAAGC,QAAQ3W,EAAGJ,GAAII,IAEzBA,EAAI4W,SAAS5J,GAAQyJ,GAAK,IAC1BH,EAASI,GAAM,CAAC1W,GAAK,GAAK,IAAMA,GAAK,EAAI,IAAU,IAAJA,GAEjD,OAAOsW,EAET,IAAI,GACJ,SAASO,GAAU1V,GACZ,KACH,GAAQkV,KACR,GAAMS,YAAc,CAAC,EAAG,EAAG,EAAG,IAEhC,MAAMrV,EAAI,GAAMN,EAAI4V,eACpB,OAAOtV,GAAK,CACVyI,EAAGzI,EAAE,GACL0I,EAAG1I,EAAE,GACLC,EAAGD,EAAE,GACLA,EAAgB,IAAbA,EAAE1c,OAAe0c,EAAE,GAAK,KAG/B,MAAMuV,GAAS,uGACf,SAASC,GAAS9V,GAChB,MAAM8G,EAAI+O,GAAO1L,KAAKnK,GACtB,IACI+I,EAAGC,EAAGzI,EADND,EAAI,IAER,GAAKwG,EAAL,CAGA,GAAIA,EAAE,KAAOiC,EAAG,CACd,MAAM/B,GAAKF,EAAE,GACbxG,EAAIwG,EAAE,GAAKK,GAAIH,GAAKC,GAAQ,IAAJD,EAAS,EAAG,KAQtC,OANA+B,GAAKjC,EAAE,GACPkC,GAAKlC,EAAE,GACPvG,GAAKuG,EAAE,GACPiC,EAAI,KAAOjC,EAAE,GAAKK,GAAI4B,GAAK9B,GAAI8B,EAAG,EAAG,MACrCC,EAAI,KAAOlC,EAAE,GAAKK,GAAI6B,GAAK/B,GAAI+B,EAAG,EAAG,MACrCzI,EAAI,KAAOuG,EAAE,GAAKK,GAAI5G,GAAK0G,GAAI1G,EAAG,EAAG,MAC9B,CACLwI,EAAGA,EACHC,EAAGA,EACHzI,EAAGA,EACHD,EAAGA,IAGP,SAASyV,GAAU/O,GACjB,OAAOA,IACLA,EAAE1G,EAAI,IACF,QAAQ0G,EAAE+B,MAAM/B,EAAEgC,MAAMhC,EAAEzG,MAAM8G,GAAIL,EAAE1G,MACtC,OAAO0G,EAAE+B,MAAM/B,EAAEgC,MAAMhC,EAAEzG,MAGjC,MAAM,GAAKyG,GAAKA,GAAK,SAAgB,MAAJA,EAAqC,MAAzB3M,KAAKsH,IAAIqF,EAAG,EAAM,KAAe,KACxE,GAAOA,GAAKA,GAAK,OAAUA,EAAI,MAAQ3M,KAAKsH,KAAKqF,EAAI,MAAS,MAAO,KAC3E,SAASgP,GAAYC,EAAMC,EAAMpR,GAC/B,MAAMiE,EAAI,GAAK1B,GAAI4O,EAAKlN,IAClBC,EAAI,GAAK3B,GAAI4O,EAAKjN,IAClBzI,EAAI,GAAK8G,GAAI4O,EAAK1V,IACxB,MAAO,CACLwI,EAAG3B,GAAI,GAAG2B,EAAIjE,GAAK,GAAKuC,GAAI6O,EAAKnN,IAAMA,KACvCC,EAAG5B,GAAI,GAAG4B,EAAIlE,GAAK,GAAKuC,GAAI6O,EAAKlN,IAAMA,KACvCzI,EAAG6G,GAAI,GAAG7G,EAAIuE,GAAK,GAAKuC,GAAI6O,EAAK3V,IAAMA,KACvCD,EAAG2V,EAAK3V,EAAIwE,GAAKoR,EAAK5V,EAAI2V,EAAK3V,IAGnC,SAAS6V,GAAOnP,EAAG/f,EAAGmvB,GACpB,GAAIpP,EAAG,CACL,IAAIqP,EAAMzM,GAAQ5C,GAClBqP,EAAIpvB,GAAKoT,KAAKyI,IAAI,EAAGzI,KAAKwI,IAAIwT,EAAIpvB,GAAKovB,EAAIpvB,GAAKmvB,EAAa,IAANnvB,EAAU,IAAM,IACvEovB,EAAMvM,GAAQuM,GACdrP,EAAE+B,EAAIsN,EAAI,GACVrP,EAAEgC,EAAIqN,EAAI,GACVrP,EAAEzG,EAAI8V,EAAI,IAGd,SAASC,GAAMtP,EAAGuP,GAChB,OAAOvP,EAAI5iB,OAAOoyB,OAAOD,GAAS,GAAIvP,GAAKA,EAE7C,SAASyP,GAAWlwB,GAClB,IAAIygB,EAAI,CAAC+B,EAAG,EAAGC,EAAG,EAAGzI,EAAG,EAAGD,EAAG,KAY9B,OAXI5c,MAAMoZ,QAAQvW,GACZA,EAAM3C,QAAU,IAClBojB,EAAI,CAAC+B,EAAGxiB,EAAM,GAAIyiB,EAAGziB,EAAM,GAAIga,EAAGha,EAAM,GAAI+Z,EAAG,KAC3C/Z,EAAM3C,OAAS,IACjBojB,EAAE1G,EAAI8G,GAAI7gB,EAAM,OAIpBygB,EAAIsP,GAAM/vB,EAAO,CAACwiB,EAAG,EAAGC,EAAG,EAAGzI,EAAG,EAAGD,EAAG,IACvC0G,EAAE1G,EAAI8G,GAAIJ,EAAE1G,IAEP0G,EAET,SAAS0P,GAAc1W,GACrB,MAAsB,MAAlBA,EAAIC,OAAO,GACN6V,GAAS9V,GAEXkK,GAASlK,GAElB,MAAM2W,GACJ,YAAYpwB,GACV,GAAIA,aAAiBowB,GACnB,OAAOpwB,EAET,MAAM2F,SAAc3F,EACpB,IAAIygB,EACS,WAAT9a,EACF8a,EAAIyP,GAAWlwB,GACG,WAAT2F,IACT8a,EAAIiC,GAAS1iB,IAAUmvB,GAAUnvB,IAAUmwB,GAAcnwB,IAE3D5D,KAAKi0B,KAAO5P,EACZrkB,KAAKk0B,SAAW7P,EAElB,YACE,OAAOrkB,KAAKk0B,OAEd,UACE,IAAI7P,EAAIsP,GAAM3zB,KAAKi0B,MAInB,OAHI5P,IACFA,EAAE1G,EAAI+G,GAAIL,EAAE1G,IAEP0G,EAET,QAAQnH,GACNld,KAAKi0B,KAAOH,GAAW5W,GAEzB,YACE,OAAOld,KAAKk0B,OAASd,GAAUpzB,KAAKi0B,WAAQxN,EAE9C,YACE,OAAOzmB,KAAKk0B,OAAS1N,GAAUxmB,KAAKi0B,WAAQxN,EAE9C,YACE,OAAOzmB,KAAKk0B,OAASrM,GAAU7nB,KAAKi0B,WAAQxN,EAE9C,IAAI0N,EAAOC,GACT,GAAID,EAAO,CACT,MAAME,EAAKr0B,KAAK+mB,IACVuN,EAAKH,EAAMpN,IACjB,IAAIwN,EACJ,MAAM9T,EAAI2T,IAAWG,EAAK,GAAMH,EAC1BtN,EAAI,EAAIrG,EAAI,EACZ9C,EAAI0W,EAAG1W,EAAI2W,EAAG3W,EACd6W,IAAO1N,EAAInJ,KAAO,EAAImJ,GAAKA,EAAInJ,IAAM,EAAImJ,EAAInJ,IAAM,GAAK,EAC9D4W,EAAK,EAAIC,EACTH,EAAGjO,EAAI,IAAOoO,EAAKH,EAAGjO,EAAImO,EAAKD,EAAGlO,EAAI,GACtCiO,EAAGhO,EAAI,IAAOmO,EAAKH,EAAGhO,EAAIkO,EAAKD,EAAGjO,EAAI,GACtCgO,EAAGzW,EAAI,IAAO4W,EAAKH,EAAGzW,EAAI2W,EAAKD,EAAG1W,EAAI,GACtCyW,EAAG1W,EAAI8C,EAAI4T,EAAG1W,GAAK,EAAI8C,GAAK6T,EAAG3W,EAC/B3d,KAAK+mB,IAAMsN,EAEb,OAAOr0B,KAET,YAAYm0B,EAAOhS,GAIjB,OAHIgS,IACFn0B,KAAKi0B,KAAOZ,GAAYrzB,KAAKi0B,KAAME,EAAMF,KAAM9R,IAE1CniB,KAET,QACE,OAAO,IAAIg0B,GAAMh0B,KAAK+mB,KAExB,MAAMpJ,GAEJ,OADA3d,KAAKi0B,KAAKtW,EAAI8G,GAAI9G,GACX3d,KAET,QAAQyzB,GACN,MAAM1M,EAAM/mB,KAAKi0B,KAEjB,OADAlN,EAAIpJ,GAAK,EAAI8V,EACNzzB,KAET,YACE,MAAM+mB,EAAM/mB,KAAKi0B,KACXpwB,EAAM,GAAc,GAARkjB,EAAIX,EAAkB,IAARW,EAAIV,EAAmB,IAARU,EAAInJ,GAEnD,OADAmJ,EAAIX,EAAIW,EAAIV,EAAIU,EAAInJ,EAAI/Z,EACjB7D,KAET,QAAQyzB,GACN,MAAM1M,EAAM/mB,KAAKi0B,KAEjB,OADAlN,EAAIpJ,GAAK,EAAI8V,EACNzzB,KAET,SACE,MAAMqkB,EAAIrkB,KAAKi0B,KAIf,OAHA5P,EAAE+B,EAAI,IAAM/B,EAAE+B,EACd/B,EAAEgC,EAAI,IAAMhC,EAAEgC,EACdhC,EAAEzG,EAAI,IAAMyG,EAAEzG,EACP5d,KAET,QAAQyzB,GAEN,OADAD,GAAOxzB,KAAKi0B,KAAM,EAAGR,GACdzzB,KAET,OAAOyzB,GAEL,OADAD,GAAOxzB,KAAKi0B,KAAM,GAAIR,GACfzzB,KAET,SAASyzB,GAEP,OADAD,GAAOxzB,KAAKi0B,KAAM,EAAGR,GACdzzB,KAET,WAAWyzB,GAET,OADAD,GAAOxzB,KAAKi0B,KAAM,GAAIR,GACfzzB,KAET,OAAO4nB,GAEL,OADAD,GAAO3nB,KAAKi0B,KAAMrM,GACX5nB,MAGX,SAASy0B,GAAU7wB,GACjB,OAAO,IAAIowB,GAAMpwB,GAGnB,SAAS8wB,GAAoB1zB,GAC3B,GAAIA,GAA0B,kBAAVA,EAAoB,CACtC,MAAMuI,EAAOvI,EAAMoZ,WACnB,MAAgB,2BAAT7Q,GAA8C,4BAATA,EAE9C,OAAO,EAET,SAAS,GAAMvI,GACb,OAAO0zB,GAAoB1zB,GAASA,EAAQyzB,GAAUzzB,GAExD,SAAS2zB,GAAc3zB,GACrB,OAAO0zB,GAAoB1zB,GACvBA,EACAyzB,GAAUzzB,GAAO4zB,SAAS,IAAKC,OAAO,IAAKrO,YAGjD,MAAMsO,GAAYrzB,OAAOua,OAAO,MAC1B,GAAcva,OAAOua,OAAO,MAClC,SAAS+Y,GAAWC,EAAM5sB,GACxB,IAAKA,EACH,OAAO4sB,EAET,MAAM5Z,EAAOhT,EAAI6sB,MAAM,KACvB,IAAK,IAAI3wB,EAAI,EAAGmb,EAAIrE,EAAKna,OAAQqD,EAAImb,IAAKnb,EAAG,CAC3C,MAAM4X,EAAId,EAAK9W,GACf0wB,EAAOA,EAAK9Y,KAAO8Y,EAAK9Y,GAAKza,OAAOua,OAAO,OAE7C,OAAOgZ,EAET,SAAS,GAAIE,EAAMC,EAAOC,GACxB,MAAqB,kBAAVD,EACF3Y,GAAMuY,GAAWG,EAAMC,GAAQC,GAEjC5Y,GAAMuY,GAAWG,EAAM,IAAKC,GAErC,MAAME,GACJ,YAAYC,GACVt1B,KAAKu1B,eAAY9O,EACjBzmB,KAAKw1B,gBAAkB,kBACvBx1B,KAAKy1B,YAAc,kBACnBz1B,KAAKm0B,MAAQ,OACbn0B,KAAK01B,SAAW,GAChB11B,KAAK21B,iBAAoBC,GAAYA,EAAQC,MAAMC,SAASC,sBAC5D/1B,KAAKg2B,SAAW,GAChBh2B,KAAKi2B,OAAS,CACZ,YACA,WACA,QACA,aACA,aAEFj2B,KAAKk2B,KAAO,CACVC,OAAQ,qDACRtY,KAAM,GACNuY,MAAO,SACPC,WAAY,IACZjC,OAAQ,MAEVp0B,KAAKK,MAAQ,GACbL,KAAKs2B,qBAAuB,CAACC,EAAKtuB,IAAY0sB,GAAc1sB,EAAQutB,iBACpEx1B,KAAKw2B,iBAAmB,CAACD,EAAKtuB,IAAY0sB,GAAc1sB,EAAQwtB,aAChEz1B,KAAKy2B,WAAa,CAACF,EAAKtuB,IAAY0sB,GAAc1sB,EAAQksB,OAC1Dn0B,KAAK02B,UAAY,IACjB12B,KAAK22B,YAAc,CACjBC,KAAM,UACNC,WAAW,EACXC,kBAAkB,GAEpB92B,KAAK+2B,qBAAsB,EAC3B/2B,KAAKg3B,QAAU,KACfh3B,KAAKi3B,QAAU,KACfj3B,KAAKk3B,SAAU,EACfl3B,KAAKmY,QAAU,GACfnY,KAAKm3B,YAAa,EAClBn3B,KAAKo3B,WAAQ3Q,EACbzmB,KAAKq3B,OAAS,GACdr3B,KAAKs3B,UAAW,EAChBt3B,KAAKu3B,yBAA0B,EAC/Bv3B,KAAKw3B,SAASlC,GAEhB,IAAIH,EAAOC,GACT,OAAO,GAAIp1B,KAAMm1B,EAAOC,GAE1B,IAAID,GACF,OAAOJ,GAAW/0B,KAAMm1B,GAE1B,SAASA,EAAOC,GACd,OAAO,GAAI,GAAaD,EAAOC,GAEjC,SAASD,EAAOC,GACd,OAAO,GAAIN,GAAWK,EAAOC,GAE/B,MAAMD,EAAOr1B,EAAM23B,EAAaC,GAC9B,MAAMC,EAAc5C,GAAW/0B,KAAMm1B,GAC/ByC,EAAoB7C,GAAW/0B,KAAMy3B,GACrCI,EAAc,IAAM/3B,EAC1B2B,OAAOq2B,iBAAiBH,EAAa,CACnC,CAACE,GAAc,CACb72B,MAAO22B,EAAY73B,GACnBi4B,UAAU,GAEZ,CAACj4B,GAAO,CACNk4B,YAAY,EACZ,MACE,MAAMC,EAAQj4B,KAAK63B,GACb9b,EAAS6b,EAAkBF,GACjC,OAAIrd,GAAS4d,GACJx2B,OAAOoyB,OAAO,GAAI9X,EAAQkc,GAE5Bvd,GAAeud,EAAOlc,IAE/B,IAAI/a,GACFhB,KAAK63B,GAAe72B,OAM9B,IAAIk3B,GAAW,IAAI7C,GAAS,CAC1B8C,YAAcr4B,IAAUA,EAAKs4B,WAAW,MACxCC,WAAav4B,GAAkB,WAATA,EACtBO,MAAO,CACLi4B,UAAW,eAEb3B,YAAa,CACXwB,aAAa,EACbE,YAAY,KAIhB,SAASE,GAAarC,GACpB,OAAKA,GAAQhc,GAAcgc,EAAKrY,OAAS3D,GAAcgc,EAAKC,QACnD,MAEDD,EAAKE,MAAQF,EAAKE,MAAQ,IAAM,KACrCF,EAAK9B,OAAS8B,EAAK9B,OAAS,IAAM,IACnC8B,EAAKrY,KAAO,MACZqY,EAAKC,OAET,SAASqC,GAAajC,EAAKx0B,EAAM02B,EAAIC,EAASC,GAC5C,IAAIC,EAAY72B,EAAK42B,GAQrB,OAPKC,IACHA,EAAY72B,EAAK42B,GAAUpC,EAAIsC,YAAYF,GAAQ1gB,MACnDwgB,EAAG3rB,KAAK6rB,IAENC,EAAYF,IACdA,EAAUE,GAELF,EAET,SAASI,GAAavC,EAAKL,EAAM6C,EAAeC,GAC9CA,EAAQA,GAAS,GACjB,IAAIj3B,EAAOi3B,EAAMj3B,KAAOi3B,EAAMj3B,MAAQ,GAClC02B,EAAKO,EAAMC,eAAiBD,EAAMC,gBAAkB,GACpDD,EAAM9C,OAASA,IACjBn0B,EAAOi3B,EAAMj3B,KAAO,GACpB02B,EAAKO,EAAMC,eAAiB,GAC5BD,EAAM9C,KAAOA,GAEfK,EAAI2C,OACJ3C,EAAIL,KAAOA,EACX,IAAIwC,EAAU,EACd,MAAMld,EAAOud,EAAc93B,OAC3B,IAAIqD,EAAGouB,EAAGyG,EAAMC,EAAOC,EACvB,IAAK/0B,EAAI,EAAGA,EAAIkX,EAAMlX,IAEpB,GADA80B,EAAQL,EAAcz0B,QACRmiB,IAAV2S,GAAiC,OAAVA,IAAqC,IAAnBjf,GAAQif,GACnDV,EAAUF,GAAajC,EAAKx0B,EAAM02B,EAAIC,EAASU,QAC1C,GAAIjf,GAAQif,GACjB,IAAK1G,EAAI,EAAGyG,EAAOC,EAAMn4B,OAAQyxB,EAAIyG,EAAMzG,IACzC2G,EAAcD,EAAM1G,QACAjM,IAAhB4S,GAA6C,OAAhBA,GAAyBlf,GAAQkf,KAChEX,EAAUF,GAAajC,EAAKx0B,EAAM02B,EAAIC,EAASW,IAKvD9C,EAAI+C,UACJ,MAAMC,EAAQd,EAAGx3B,OAAS,EAC1B,GAAIs4B,EAAQR,EAAc93B,OAAQ,CAChC,IAAKqD,EAAI,EAAGA,EAAIi1B,EAAOj1B,WACdvC,EAAK02B,EAAGn0B,IAEjBm0B,EAAGe,OAAO,EAAGD,GAEf,OAAOb,EAET,SAASe,GAAY5D,EAAO6D,EAAOzhB,GACjC,MAAM0d,EAAmBE,EAAM8D,wBACzBC,EAAsB,IAAV3hB,EAAcP,KAAKyI,IAAIlI,EAAQ,EAAG,IAAO,EAC3D,OAAOP,KAAKC,OAAO+hB,EAAQE,GAAajE,GAAoBA,EAAmBiE,EAEjF,SAASC,GAAYC,EAAQvD,GAC3BA,EAAMA,GAAOuD,EAAOC,WAAW,MAC/BxD,EAAI2C,OACJ3C,EAAIyD,iBACJzD,EAAI0D,UAAU,EAAG,EAAGH,EAAO7hB,MAAO6hB,EAAO5hB,QACzCqe,EAAI+C,UAEN,SAASY,GAAU3D,EAAKtuB,EAASsC,EAAGmV,GAClC,IAAInW,EAAM4wB,EAASC,EAASvc,EAAMwc,EAClC,MAAMjE,EAAQnuB,EAAQqyB,WAChBC,EAAWtyB,EAAQsyB,SACnBC,EAASvyB,EAAQuyB,OACvB,IAAIC,GAAOF,GAAY,GAAKlc,GAC5B,GAAI+X,GAA0B,kBAAVA,IAClB7sB,EAAO6sB,EAAMhc,WACA,8BAAT7Q,GAAiD,+BAATA,GAM1C,OALAgtB,EAAI2C,OACJ3C,EAAImE,UAAUnwB,EAAGmV,GACjB6W,EAAI5O,OAAO8S,GACXlE,EAAIoE,UAAUvE,GAAQA,EAAMne,MAAQ,GAAIme,EAAMle,OAAS,EAAGke,EAAMne,MAAOme,EAAMle,aAC7Eqe,EAAI+C,UAIR,KAAI9hB,MAAMgjB,IAAWA,GAAU,GAA/B,CAIA,OADAjE,EAAIqE,YACIxE,GACR,QACEG,EAAIsE,IAAItwB,EAAGmV,EAAG8a,EAAQ,EAAGvc,IACzBsY,EAAIuE,YACJ,MACF,IAAK,WACHvE,EAAIwE,OAAOxwB,EAAImN,KAAK2K,IAAIoY,GAAOD,EAAQ9a,EAAIhI,KAAK4L,IAAImX,GAAOD,GAC3DC,GAAOjc,GACP+X,EAAIyE,OAAOzwB,EAAImN,KAAK2K,IAAIoY,GAAOD,EAAQ9a,EAAIhI,KAAK4L,IAAImX,GAAOD,GAC3DC,GAAOjc,GACP+X,EAAIyE,OAAOzwB,EAAImN,KAAK2K,IAAIoY,GAAOD,EAAQ9a,EAAIhI,KAAK4L,IAAImX,GAAOD,GAC3DjE,EAAIuE,YACJ,MACF,IAAK,cACHT,EAAwB,KAATG,EACf3c,EAAO2c,EAASH,EAChBF,EAAUziB,KAAK4L,IAAImX,EAAMlc,IAAcV,EACvCuc,EAAU1iB,KAAK2K,IAAIoY,EAAMlc,IAAcV,EACvC0Y,EAAIsE,IAAItwB,EAAI4vB,EAASza,EAAI0a,EAASC,EAAcI,EAAMzc,GAAIyc,EAAMnc,IAChEiY,EAAIsE,IAAItwB,EAAI6vB,EAAS1a,EAAIya,EAASE,EAAcI,EAAMnc,GAASmc,GAC/DlE,EAAIsE,IAAItwB,EAAI4vB,EAASza,EAAI0a,EAASC,EAAcI,EAAKA,EAAMnc,IAC3DiY,EAAIsE,IAAItwB,EAAI6vB,EAAS1a,EAAIya,EAASE,EAAcI,EAAMnc,GAASmc,EAAMzc,IACrEuY,EAAIuE,YACJ,MACF,IAAK,OACH,IAAKP,EAAU,CACb1c,EAAOnG,KAAKujB,QAAUT,EACtBjE,EAAI2E,KAAK3wB,EAAIsT,EAAM6B,EAAI7B,EAAM,EAAIA,EAAM,EAAIA,GAC3C,MAEF4c,GAAOlc,GACT,IAAK,UACH4b,EAAUziB,KAAK4L,IAAImX,GAAOD,EAC1BJ,EAAU1iB,KAAK2K,IAAIoY,GAAOD,EAC1BjE,EAAIwE,OAAOxwB,EAAI4vB,EAASza,EAAI0a,GAC5B7D,EAAIyE,OAAOzwB,EAAI6vB,EAAS1a,EAAIya,GAC5B5D,EAAIyE,OAAOzwB,EAAI4vB,EAASza,EAAI0a,GAC5B7D,EAAIyE,OAAOzwB,EAAI6vB,EAAS1a,EAAIya,GAC5B5D,EAAIuE,YACJ,MACF,IAAK,WACHL,GAAOlc,GACT,IAAK,QACH4b,EAAUziB,KAAK4L,IAAImX,GAAOD,EAC1BJ,EAAU1iB,KAAK2K,IAAIoY,GAAOD,EAC1BjE,EAAIwE,OAAOxwB,EAAI4vB,EAASza,EAAI0a,GAC5B7D,EAAIyE,OAAOzwB,EAAI4vB,EAASza,EAAI0a,GAC5B7D,EAAIwE,OAAOxwB,EAAI6vB,EAAS1a,EAAIya,GAC5B5D,EAAIyE,OAAOzwB,EAAI6vB,EAAS1a,EAAIya,GAC5B,MACF,IAAK,OACHA,EAAUziB,KAAK4L,IAAImX,GAAOD,EAC1BJ,EAAU1iB,KAAK2K,IAAIoY,GAAOD,EAC1BjE,EAAIwE,OAAOxwB,EAAI4vB,EAASza,EAAI0a,GAC5B7D,EAAIyE,OAAOzwB,EAAI4vB,EAASza,EAAI0a,GAC5B7D,EAAIwE,OAAOxwB,EAAI6vB,EAAS1a,EAAIya,GAC5B5D,EAAIyE,OAAOzwB,EAAI6vB,EAAS1a,EAAIya,GAC5BM,GAAOlc,GACP4b,EAAUziB,KAAK4L,IAAImX,GAAOD,EAC1BJ,EAAU1iB,KAAK2K,IAAIoY,GAAOD,EAC1BjE,EAAIwE,OAAOxwB,EAAI4vB,EAASza,EAAI0a,GAC5B7D,EAAIyE,OAAOzwB,EAAI4vB,EAASza,EAAI0a,GAC5B7D,EAAIwE,OAAOxwB,EAAI6vB,EAAS1a,EAAIya,GAC5B5D,EAAIyE,OAAOzwB,EAAI6vB,EAAS1a,EAAIya,GAC5B,MACF,IAAK,OACHA,EAAUziB,KAAK4L,IAAImX,GAAOD,EAC1BJ,EAAU1iB,KAAK2K,IAAIoY,GAAOD,EAC1BjE,EAAIwE,OAAOxwB,EAAI4vB,EAASza,EAAI0a,GAC5B7D,EAAIyE,OAAOzwB,EAAI4vB,EAASza,EAAI0a,GAC5B,MACF,IAAK,OACH7D,EAAIwE,OAAOxwB,EAAGmV,GACd6W,EAAIyE,OAAOzwB,EAAImN,KAAK4L,IAAImX,GAAOD,EAAQ9a,EAAIhI,KAAK2K,IAAIoY,GAAOD,GAC3D,MAEFjE,EAAI4E,OACAlzB,EAAQmzB,YAAc,GACxB7E,EAAI8E,UAGR,SAASC,GAAeC,EAAOC,EAAMC,GAEnC,OADAA,EAASA,GAAU,IACXD,GAASD,GAASA,EAAMhxB,EAAIixB,EAAK5hB,KAAO6hB,GAAUF,EAAMhxB,EAAIixB,EAAK3hB,MAAQ4hB,GACjFF,EAAM7b,EAAI8b,EAAKE,IAAMD,GAAUF,EAAM7b,EAAI8b,EAAKG,OAASF,EAEzD,SAASG,GAASrF,EAAKiF,GACrBjF,EAAI2C,OACJ3C,EAAIqE,YACJrE,EAAI2E,KAAKM,EAAK5hB,KAAM4hB,EAAKE,IAAKF,EAAK3hB,MAAQ2hB,EAAK5hB,KAAM4hB,EAAKG,OAASH,EAAKE,KACzEnF,EAAIsF,OAEN,SAASC,GAAWvF,GAClBA,EAAI+C,UAEN,SAASyC,GAAexF,EAAKyF,EAAUjgB,EAAQkgB,EAAMrF,GACnD,IAAKoF,EACH,OAAOzF,EAAIyE,OAAOjf,EAAOxR,EAAGwR,EAAO2D,GAErC,GAAa,WAATkX,EAAmB,CACrB,MAAMsF,GAAYF,EAASzxB,EAAIwR,EAAOxR,GAAK,EAC3CgsB,EAAIyE,OAAOkB,EAAUF,EAAStc,GAC9B6W,EAAIyE,OAAOkB,EAAUngB,EAAO2D,OACV,UAATkX,MAAuBqF,EAChC1F,EAAIyE,OAAOgB,EAASzxB,EAAGwR,EAAO2D,GAE9B6W,EAAIyE,OAAOjf,EAAOxR,EAAGyxB,EAAStc,GAEhC6W,EAAIyE,OAAOjf,EAAOxR,EAAGwR,EAAO2D,GAE9B,SAASyc,GAAe5F,EAAKyF,EAAUjgB,EAAQkgB,GAC7C,IAAKD,EACH,OAAOzF,EAAIyE,OAAOjf,EAAOxR,EAAGwR,EAAO2D,GAErC6W,EAAI6F,cACFH,EAAOD,EAASK,KAAOL,EAASM,KAChCL,EAAOD,EAASO,KAAOP,EAASQ,KAChCP,EAAOlgB,EAAOugB,KAAOvgB,EAAOsgB,KAC5BJ,EAAOlgB,EAAOygB,KAAOzgB,EAAOwgB,KAC5BxgB,EAAOxR,EACPwR,EAAO2D,GAEX,SAAS+c,GAAWlG,EAAKmG,EAAMnyB,EAAGmV,EAAGwW,EAAMyG,EAAO,IAChD,MAAMC,EAAQziB,GAAQuiB,GAAQA,EAAO,CAACA,GAChCrB,EAASsB,EAAKE,YAAc,GAA0B,KAArBF,EAAKG,YAC5C,IAAIx4B,EAAGy4B,EAIP,IAHAxG,EAAI2C,OACJ3C,EAAIL,KAAOA,EAAKyC,OAChBqE,GAAczG,EAAKoG,GACdr4B,EAAI,EAAGA,EAAIs4B,EAAM37B,SAAUqD,EAC9By4B,EAAOH,EAAMt4B,GACT+2B,IACEsB,EAAKG,cACPvG,EAAI0G,YAAcN,EAAKG,aAEpB5iB,GAAcyiB,EAAKE,eACtBtG,EAAI2G,UAAYP,EAAKE,aAEvBtG,EAAI4G,WAAWJ,EAAMxyB,EAAGmV,EAAGid,EAAKS,WAElC7G,EAAI8G,SAASN,EAAMxyB,EAAGmV,EAAGid,EAAKS,UAC9BE,GAAa/G,EAAKhsB,EAAGmV,EAAGqd,EAAMJ,GAC9Bjd,GAAKwW,EAAKG,WAEZE,EAAI+C,UAEN,SAAS0D,GAAczG,EAAKoG,GACtBA,EAAKY,aACPhH,EAAImE,UAAUiC,EAAKY,YAAY,GAAIZ,EAAKY,YAAY,IAEjDrjB,GAAcyiB,EAAKpC,WACtBhE,EAAI5O,OAAOgV,EAAKpC,UAEdoC,EAAKxI,QACPoC,EAAIiH,UAAYb,EAAKxI,OAEnBwI,EAAKc,YACPlH,EAAIkH,UAAYd,EAAKc,WAEnBd,EAAKe,eACPnH,EAAImH,aAAef,EAAKe,cAG5B,SAASJ,GAAa/G,EAAKhsB,EAAGmV,EAAGqd,EAAMJ,GACrC,GAAIA,EAAKgB,eAAiBhB,EAAKiB,UAAW,CACxC,MAAMC,EAAUtH,EAAIsC,YAAYkE,GAC1BnjB,EAAOrP,EAAIszB,EAAQC,sBACnBjkB,EAAQtP,EAAIszB,EAAQE,uBACpBrC,EAAMhc,EAAIme,EAAQG,wBAClBrC,EAASjc,EAAIme,EAAQI,yBACrBC,EAAcvB,EAAKgB,eAAiBjC,EAAMC,GAAU,EAAIA,EAC9DpF,EAAI0G,YAAc1G,EAAIiH,UACtBjH,EAAIqE,YACJrE,EAAI2G,UAAYP,EAAKwB,iBAAmB,EACxC5H,EAAIwE,OAAOnhB,EAAMskB,GACjB3H,EAAIyE,OAAOnhB,EAAOqkB,GAClB3H,EAAI8E,UAGR,SAAS+C,GAAmB7H,EAAK2E,GAC/B,MAAM,EAAC3wB,EAAC,EAAEmV,EAAC,EAAEoH,EAAC,EAAEtkB,EAAC,OAAEg4B,GAAUU,EAC7B3E,EAAIsE,IAAItwB,EAAIiwB,EAAO6D,QAAS3e,EAAI8a,EAAO6D,QAAS7D,EAAO6D,SAAU/f,GAASN,IAAI,GAC9EuY,EAAIyE,OAAOzwB,EAAGmV,EAAIld,EAAIg4B,EAAO8D,YAC7B/H,EAAIsE,IAAItwB,EAAIiwB,EAAO8D,WAAY5e,EAAIld,EAAIg4B,EAAO8D,WAAY9D,EAAO8D,WAAYtgB,GAAIM,IAAS,GAC1FiY,EAAIyE,OAAOzwB,EAAIuc,EAAI0T,EAAO+D,YAAa7e,EAAIld,GAC3C+zB,EAAIsE,IAAItwB,EAAIuc,EAAI0T,EAAO+D,YAAa7e,EAAIld,EAAIg4B,EAAO+D,YAAa/D,EAAO+D,YAAajgB,GAAS,GAAG,GAChGiY,EAAIyE,OAAOzwB,EAAIuc,EAAGpH,EAAI8a,EAAOgE,UAC7BjI,EAAIsE,IAAItwB,EAAIuc,EAAI0T,EAAOgE,SAAU9e,EAAI8a,EAAOgE,SAAUhE,EAAOgE,SAAU,GAAIlgB,IAAS,GACpFiY,EAAIyE,OAAOzwB,EAAIiwB,EAAO6D,QAAS3e,GAGjC,MAAM+e,GAAc,IAAIC,OAAO,wCACzBC,GAAa,IAAID,OAAO,yEAC9B,SAASE,GAAa59B,EAAO6c,GAC3B,MAAMghB,GAAW,GAAK79B,GAAO89B,MAAML,IACnC,IAAKI,GAA0B,WAAfA,EAAQ,GACtB,OAAc,IAAPhhB,EAGT,OADA7c,GAAS69B,EAAQ,GACTA,EAAQ,IAChB,IAAK,KACH,OAAO79B,EACT,IAAK,IACHA,GAAS,IACT,MAEF,OAAO6c,EAAO7c,EAEhB,MAAM+9B,GAAe1a,IAAMA,GAAK,EAChC,SAAS2a,GAAkBh+B,EAAOf,GAChC,MAAMsmB,EAAM,GACN0Y,EAAW5kB,GAASpa,GACpBmb,EAAO6jB,EAAWx9B,OAAO2Z,KAAKnb,GAASA,EACvCi/B,EAAO7kB,GAASrZ,GAClBi+B,EACEE,GAAQzkB,GAAe1Z,EAAMm+B,GAAOn+B,EAAMf,EAAMk/B,KAChDA,GAAQn+B,EAAMm+B,GAChB,IAAMn+B,EACV,IAAK,MAAMm+B,KAAQ/jB,EACjBmL,EAAI4Y,GAAQJ,GAAaG,EAAKC,IAEhC,OAAO5Y,EAET,SAAS6Y,GAAOp+B,GACd,OAAOg+B,GAAkBh+B,EAAO,CAAC06B,IAAK,IAAK7hB,MAAO,IAAK8hB,OAAQ,IAAK/hB,KAAM,MAE5E,SAASylB,GAAcr+B,GACrB,OAAOg+B,GAAkBh+B,EAAO,CAAC,UAAW,WAAY,aAAc,gBAExE,SAASs+B,GAAUt+B,GACjB,MAAMkc,EAAMkiB,GAAOp+B,GAGnB,OAFAkc,EAAIjF,MAAQiF,EAAItD,KAAOsD,EAAIrD,MAC3BqD,EAAIhF,OAASgF,EAAIwe,IAAMxe,EAAIye,OACpBze,EAET,SAASqiB,GAAOt3B,EAASu3B,GACvBv3B,EAAUA,GAAW,GACrBu3B,EAAWA,GAAYtH,GAAShC,KAChC,IAAIrY,EAAOnD,GAAezS,EAAQ4V,KAAM2hB,EAAS3hB,MAC7B,kBAATA,IACTA,EAAOiV,SAASjV,EAAM,KAExB,IAAIuY,EAAQ1b,GAAezS,EAAQmuB,MAAOoJ,EAASpJ,OAC/CA,KAAW,GAAKA,GAAO0I,MAAMH,MAC/Bc,QAAQC,KAAK,kCAAoCtJ,EAAQ,KACzDA,EAAQ,IAEV,MAAMF,EAAO,CACXC,OAAQzb,GAAezS,EAAQkuB,OAAQqJ,EAASrJ,QAChDE,WAAYuI,GAAalkB,GAAezS,EAAQouB,WAAYmJ,EAASnJ,YAAaxY,GAClFA,OACAuY,QACAhC,OAAQ1Z,GAAezS,EAAQmsB,OAAQoL,EAASpL,QAChDuE,OAAQ,IAGV,OADAzC,EAAKyC,OAASJ,GAAarC,GACpBA,EAET,SAASyJ,GAAQr8B,EAAQsyB,EAASt0B,EAAOs+B,GACvC,IACIt7B,EAAGkX,EAAMxa,EADT6+B,GAAY,EAEhB,IAAKv7B,EAAI,EAAGkX,EAAOlY,EAAOrC,OAAQqD,EAAIkX,IAAQlX,EAE5C,GADAtD,EAAQsC,EAAOgB,QACDmiB,IAAVzlB,SAGYylB,IAAZmP,GAA0C,oBAAV50B,IAClCA,EAAQA,EAAM40B,GACdiK,GAAY,QAEApZ,IAAVnlB,GAAuB6Y,GAAQnZ,KACjCA,EAAQA,EAAMM,EAAQN,EAAMC,QAC5B4+B,GAAY,QAEApZ,IAAVzlB,GAIF,OAHI4+B,IAASC,IACXD,EAAKC,WAAY,GAEZ7+B,EAIb,SAAS8+B,GAAUC,EAAQC,EAAOC,GAChC,MAAM,IAAC/f,EAAG,IAAEC,GAAO4f,EACbG,EAASnlB,GAAYilB,GAAQ7f,EAAMD,GAAO,GAC1CigB,EAAW,CAACn/B,EAAOiU,IAAQgrB,GAAyB,IAAVj/B,EAAc,EAAIA,EAAQiU,EAC1E,MAAO,CACLiL,IAAKigB,EAASjgB,GAAMxI,KAAKkI,IAAIsgB,IAC7B/f,IAAKggB,EAAShgB,EAAK+f,IAGvB,SAASE,GAAcC,EAAezK,GACpC,OAAOn0B,OAAOoyB,OAAOpyB,OAAOua,OAAOqkB,GAAgBzK,GAGrD,SAAS0K,GAAQC,EAAOv/B,EAAOw/B,GAC7BA,EAAMA,GAAO,CAAEl/B,GAAUi/B,EAAMj/B,GAASN,GACxC,IAEIy/B,EAFAC,EAAKH,EAAMt/B,OAAS,EACpB0/B,EAAK,EAET,MAAOD,EAAKC,EAAK,EACfF,EAAOE,EAAKD,GAAO,EACfF,EAAIC,GACNE,EAAKF,EAELC,EAAKD,EAGT,MAAO,CAACE,KAAID,MAEd,MAAME,GAAe,CAACL,EAAOn4B,EAAKpH,IAChCs/B,GAAQC,EAAOv/B,EAAOM,GAASi/B,EAAMj/B,GAAO8G,GAAOpH,GAC/C6/B,GAAgB,CAACN,EAAOn4B,EAAKpH,IACjCs/B,GAAQC,EAAOv/B,EAAOM,GAASi/B,EAAMj/B,GAAO8G,IAAQpH,GACtD,SAAS8/B,GAAe1L,EAAQlV,EAAKC,GACnC,IAAI1G,EAAQ,EACRC,EAAM0b,EAAOn0B,OACjB,MAAOwY,EAAQC,GAAO0b,EAAO3b,GAASyG,EACpCzG,IAEF,MAAOC,EAAMD,GAAS2b,EAAO1b,EAAM,GAAKyG,EACtCzG,IAEF,OAAOD,EAAQ,GAAKC,EAAM0b,EAAOn0B,OAC7Bm0B,EAAOvc,MAAMY,EAAOC,GACpB0b,EAEN,MAAM2L,GAAc,CAAC,OAAQ,MAAO,QAAS,SAAU,WACvD,SAASC,GAAkBhhB,EAAOihB,GAC5BjhB,EAAMkhB,SACRlhB,EAAMkhB,SAASC,UAAUr0B,KAAKm0B,IAGhCx/B,OAAO2/B,eAAephB,EAAO,WAAY,CACvCqhB,cAAc,EACdrJ,YAAY,EACZh3B,MAAO,CACLmgC,UAAW,CAACF,MAGhBF,GAAYO,QAASl5B,IACnB,MAAMm5B,EAAS,UAAYnkB,GAAYhV,GACjCo5B,EAAOxhB,EAAM5X,GACnB3G,OAAO2/B,eAAephB,EAAO5X,EAAK,CAChCi5B,cAAc,EACdrJ,YAAY,EACZ,SAASrf,GACP,MAAM8oB,EAAMD,EAAKvoB,MAAMjZ,KAAM2Y,GAM7B,OALAqH,EAAMkhB,SAASC,UAAUG,QAASI,IACF,oBAAnBA,EAAOH,IAChBG,EAAOH,MAAW5oB,KAGf8oB,QAKf,SAASE,GAAoB3hB,EAAOihB,GAClC,MAAMW,EAAO5hB,EAAMkhB,SACnB,IAAKU,EACH,OAEF,MAAMT,EAAYS,EAAKT,UACjB7/B,EAAQ6/B,EAAU/kB,QAAQ6kB,IACjB,IAAX3/B,GACF6/B,EAAU3H,OAAOl4B,EAAO,GAEtB6/B,EAAUlgC,OAAS,IAGvB8/B,GAAYO,QAASl5B,WACZ4X,EAAM5X,YAER4X,EAAMkhB,UAEf,SAASW,GAAaC,GACpB,MAAMC,EAAM,IAAIC,IAChB,IAAI19B,EAAGkX,EACP,IAAKlX,EAAI,EAAGkX,EAAOsmB,EAAM7gC,OAAQqD,EAAIkX,IAAQlX,EAC3Cy9B,EAAI9sB,IAAI6sB,EAAMx9B,IAEhB,OAAIy9B,EAAIlkB,OAASrC,EACRsmB,EAEF/gC,MAAMkhC,KAAKF,GAGpB,SAASG,GAAgBC,EAAQC,EAAW,CAAC,IAAKC,EAAaF,EAAQ3C,EAAU8C,EAAY,KAAMH,EAAO,KACnG3kB,GAAQgiB,KACXA,EAAW+C,GAAS,YAAaJ,IAEnC,MAAMnJ,EAAQ,CACZ,CAACwJ,OAAOC,aAAc,SACtBC,YAAY,EACZC,QAASR,EACTS,YAAaP,EACb/J,UAAWkH,EACXqD,WAAYP,EACZQ,SAAW3N,GAAU+M,GAAgB,CAAC/M,KAAUgN,GAASC,EAAUC,EAAY7C,IAEjF,OAAO,IAAIuD,MAAM/J,EAAO,CACtB,eAAejd,EAAQojB,GAIrB,cAHOpjB,EAAOojB,UACPpjB,EAAOinB,aACPb,EAAO,GAAGhD,IACV,GAET,IAAIpjB,EAAQojB,GACV,OAAO8D,GAAQlnB,EAAQojB,EACrB,IAAM+D,GAAqB/D,EAAMiD,EAAUD,EAAQpmB,KAEvD,yBAAyBA,EAAQojB,GAC/B,OAAOgE,QAAQC,yBAAyBrnB,EAAO4mB,QAAQ,GAAIxD,IAE7D,iBACE,OAAOgE,QAAQE,eAAelB,EAAO,KAEvC,IAAIpmB,EAAQojB,GACV,OAAOmE,GAAqBvnB,GAAQwnB,SAASpE,IAE/C,QAAQpjB,GACN,OAAOunB,GAAqBvnB,IAE9B,IAAIA,EAAQojB,EAAMn+B,GAChB,MAAMwiC,EAAUznB,EAAO0nB,WAAa1nB,EAAO0nB,SAAWnB,KAGtD,OAFAvmB,EAAOojB,GAAQqE,EAAQrE,GAAQn+B,SACxB+a,EAAOinB,OACP,KAIb,SAASU,GAAeC,EAAO/N,EAASgO,EAAUC,GAChD,MAAM7K,EAAQ,CACZ0J,YAAY,EACZoB,OAAQH,EACRI,SAAUnO,EACVoO,UAAWJ,EACXK,OAAQ,IAAIjC,IACZ1M,aAAcA,GAAaqO,EAAOE,GAClCK,WAAa3N,GAAQmN,GAAeC,EAAOpN,EAAKqN,EAAUC,GAC1Df,SAAW3N,GAAUuO,GAAeC,EAAMb,SAAS3N,GAAQS,EAASgO,EAAUC,IAEhF,OAAO,IAAId,MAAM/J,EAAO,CACtB,eAAejd,EAAQojB,GAGrB,cAFOpjB,EAAOojB,UACPwE,EAAMxE,IACN,GAET,IAAIpjB,EAAQojB,EAAMgF,GAChB,OAAOlB,GAAQlnB,EAAQojB,EACrB,IAAMiF,GAAoBroB,EAAQojB,EAAMgF,KAE5C,yBAAyBpoB,EAAQojB,GAC/B,OAAOpjB,EAAOuZ,aAAa+O,QACvBlB,QAAQrlB,IAAI6lB,EAAOxE,GAAQ,CAACnH,YAAY,EAAMqJ,cAAc,QAAQ5a,EACpE0c,QAAQC,yBAAyBO,EAAOxE,IAE9C,iBACE,OAAOgE,QAAQE,eAAeM,IAEhC,IAAI5nB,EAAQojB,GACV,OAAOgE,QAAQrlB,IAAI6lB,EAAOxE,IAE5B,UACE,OAAOgE,QAAQmB,QAAQX,IAEzB,IAAI5nB,EAAQojB,EAAMn+B,GAGhB,OAFA2iC,EAAMxE,GAAQn+B,SACP+a,EAAOojB,IACP,KAIb,SAAS7J,GAAaqO,EAAOzL,EAAW,CAACqM,YAAY,EAAMC,WAAW,IACpE,MAAM,YAACrM,EAAcD,EAASqM,WAAU,WAAElM,EAAaH,EAASsM,UAAS,SAAEC,EAAWvM,EAASmM,SAAWV,EAC1G,MAAO,CACLU,QAASI,EACTF,WAAYpM,EACZqM,UAAWnM,EACXqM,aAAcjnB,GAAW0a,GAAeA,EAAc,IAAMA,EAC5DwM,YAAalnB,GAAW4a,GAAcA,EAAa,IAAMA,GAG7D,MAAMuM,GAAU,CAACC,EAAQ/kC,IAAS+kC,EAASA,EAASznB,GAAYtd,GAAQA,EAClEglC,GAAmB,CAAC3F,EAAMn+B,IAAUqZ,GAASrZ,IAAmB,aAATm+B,IACzB,OAAjC19B,OAAO4hC,eAAeriC,IAAmBA,EAAMgW,cAAgBvV,QAClE,SAASwhC,GAAQlnB,EAAQojB,EAAMQ,GAC7B,GAAIl+B,OAAOmX,UAAU9X,eAAegY,KAAKiD,EAAQojB,GAC/C,OAAOpjB,EAAOojB,GAEhB,MAAMn+B,EAAQ2+B,IAEd,OADA5jB,EAAOojB,GAAQn+B,EACRA,EAET,SAASojC,GAAoBroB,EAAQojB,EAAMgF,GACzC,MAAM,OAACL,EAAM,SAAEC,EAAQ,UAAEC,EAAW1O,aAAcyP,GAAehpB,EACjE,IAAI/a,EAAQ8iC,EAAO3E,GAUnB,OATI1hB,GAAWzc,IAAU+jC,EAAYL,aAAavF,KAChDn+B,EAAQgkC,GAAmB7F,EAAMn+B,EAAO+a,EAAQooB,IAE9ChqB,GAAQnZ,IAAUA,EAAMC,SAC1BD,EAAQikC,GAAc9F,EAAMn+B,EAAO+a,EAAQgpB,EAAYJ,cAErDG,GAAiB3F,EAAMn+B,KACzBA,EAAQ0iC,GAAe1iC,EAAO+iC,EAAUC,GAAaA,EAAU7E,GAAO4F,IAEjE/jC,EAET,SAASgkC,GAAmB7F,EAAMn+B,EAAO+a,EAAQooB,GAC/C,MAAM,OAACL,EAAM,SAAEC,EAAQ,UAAEC,EAAS,OAAEC,GAAUloB,EAC9C,GAAIkoB,EAAOnmB,IAAIqhB,GACb,MAAM,IAAI+F,MAAM,uBAAyBnkC,MAAMkhC,KAAKgC,GAAQkB,KAAK,MAAQ,KAAOhG,GAQlF,OANA8E,EAAOhvB,IAAIkqB,GACXn+B,EAAQA,EAAM+iC,EAAUC,GAAaG,GACrCF,EAAOmB,OAAOjG,GACV2F,GAAiB3F,EAAMn+B,KACzBA,EAAQqkC,GAAkBvB,EAAOnB,QAASmB,EAAQ3E,EAAMn+B,IAEnDA,EAET,SAASikC,GAAc9F,EAAMn+B,EAAO+a,EAAQ4oB,GAC1C,MAAM,OAACb,EAAM,SAAEC,EAAQ,UAAEC,EAAW1O,aAAcyP,GAAehpB,EACjE,GAAIyB,GAAQumB,EAASziC,QAAUqjC,EAAYxF,GACzCn+B,EAAQA,EAAM+iC,EAASziC,MAAQN,EAAMC,aAChC,GAAIoZ,GAASrZ,EAAM,IAAK,CAC7B,MAAMskC,EAAMtkC,EACNmhC,EAAS2B,EAAOnB,QAAQ1+B,OAAOyd,GAAKA,IAAM4jB,GAChDtkC,EAAQ,GACR,IAAK,MAAMI,KAAQkkC,EAAK,CACtB,MAAMC,EAAWF,GAAkBlD,EAAQ2B,EAAQ3E,EAAM/9B,GACzDJ,EAAM8L,KAAK42B,GAAe6B,EAAUxB,EAAUC,GAAaA,EAAU7E,GAAO4F,KAGhF,OAAO/jC,EAET,SAASwkC,GAAgBhG,EAAUL,EAAMn+B,GACvC,OAAOyc,GAAW+hB,GAAYA,EAASL,EAAMn+B,GAASw+B,EAExD,MAAMiG,GAAW,CAACr9B,EAAKs9B,KAAmB,IAARt9B,EAAes9B,EAC9B,kBAARt9B,EAAmB6U,GAAiByoB,EAAQt9B,QAAOqe,EAC9D,SAASkf,GAAU5D,EAAK6D,EAAcx9B,EAAKy9B,EAAgB7kC,GACzD,IAAK,MAAM0kC,KAAUE,EAAc,CACjC,MAAMzQ,EAAQsQ,GAASr9B,EAAKs9B,GAC5B,GAAIvQ,EAAO,CACT4M,EAAI9sB,IAAIkgB,GACR,MAAMqK,EAAWgG,GAAgBrQ,EAAMmD,UAAWlwB,EAAKpH,GACvD,GAAIwc,GAAQgiB,IAAaA,IAAap3B,GAAOo3B,IAAaqG,EACxD,OAAOrG,OAEJ,IAAc,IAAVrK,GAAmB3X,GAAQqoB,IAAmBz9B,IAAQy9B,EAC/D,OAAO,KAGX,OAAO,EAET,SAASR,GAAkBO,EAAcL,EAAUpG,EAAMn+B,GACvD,MAAMqhC,EAAakD,EAAS3C,YACtBpD,EAAWgG,GAAgBD,EAASjN,UAAW6G,EAAMn+B,GACrD8kC,EAAY,IAAIF,KAAiBvD,GACjCN,EAAM,IAAIC,IAChBD,EAAI9sB,IAAIjU,GACR,IAAIoH,EAAM29B,GAAiBhE,EAAK+D,EAAW3G,EAAMK,GAAYL,EAAMn+B,GACnE,OAAY,OAARoH,MAGAoV,GAAQgiB,IAAaA,IAAaL,IACpC/2B,EAAM29B,GAAiBhE,EAAK+D,EAAWtG,EAAUp3B,EAAKpH,GAC1C,OAARoH,KAIC85B,GAAgBnhC,MAAMkhC,KAAKF,GAAM,CAAC,IAAKM,EAAY7C,EACxD,IAAMwG,GAAaT,EAAUpG,EAAMn+B,KAEvC,SAAS+kC,GAAiBhE,EAAK+D,EAAW19B,EAAKo3B,EAAUp+B,GACvD,MAAOgH,EACLA,EAAMu9B,GAAU5D,EAAK+D,EAAW19B,EAAKo3B,EAAUp+B,GAEjD,OAAOgH,EAET,SAAS49B,GAAaT,EAAUpG,EAAMn+B,GACpC,MAAM0kC,EAASH,EAAS1C,aAClB1D,KAAQuG,IACZA,EAAOvG,GAAQ,IAEjB,MAAMpjB,EAAS2pB,EAAOvG,GACtB,OAAIhlB,GAAQ4B,IAAW1B,GAASrZ,GACvBA,EAEF+a,EAET,SAASmnB,GAAqB/D,EAAMiD,EAAUD,EAAQwB,GACpD,IAAI3iC,EACJ,IAAK,MAAM6jC,KAAUzC,EAEnB,GADAphC,EAAQuhC,GAASqC,GAAQC,EAAQ1F,GAAOgD,GACpC3kB,GAAQxc,GACV,OAAO8jC,GAAiB3F,EAAMn+B,GAC1BqkC,GAAkBlD,EAAQwB,EAAOxE,EAAMn+B,GACvCA,EAIV,SAASuhC,GAASn6B,EAAK+5B,GACrB,IAAK,MAAMhN,KAASgN,EAAQ,CAC1B,IAAKhN,EACH,SAEF,MAAMn0B,EAAQm0B,EAAM/sB,GACpB,GAAIoV,GAAQxc,GACV,OAAOA,GAIb,SAASsiC,GAAqBvnB,GAC5B,IAAIX,EAAOW,EAAOinB,MAIlB,OAHK5nB,IACHA,EAAOW,EAAOinB,MAAQiD,GAAyBlqB,EAAO4mB,UAEjDvnB,EAET,SAAS6qB,GAAyB9D,GAChC,MAAMJ,EAAM,IAAIC,IAChB,IAAK,MAAM7M,KAASgN,EAClB,IAAK,MAAM/5B,KAAO3G,OAAO2Z,KAAK+Z,GAAOlxB,OAAOiY,IAAMA,EAAEkc,WAAW,MAC7D2J,EAAI9sB,IAAI7M,GAGZ,OAAOrH,MAAMkhC,KAAKF,GAEpB,SAASmE,GAA4BC,EAAMpkC,EAAM0X,EAAO2sB,GACtD,MAAM,OAACC,GAAUF,GACX,IAAC/9B,EAAM,KAAOpI,KAAKsmC,SACnBC,EAAS,IAAIxlC,MAAMqlC,GACzB,IAAI9hC,EAAGkX,EAAMla,EAAOF,EACpB,IAAKkD,EAAI,EAAGkX,EAAO4qB,EAAO9hC,EAAIkX,IAAQlX,EACpChD,EAAQgD,EAAImV,EACZrY,EAAOW,EAAKT,GACZilC,EAAOjiC,GAAK,CACV8hB,EAAGigB,EAAOG,MAAMvpB,GAAiB7b,EAAMgH,GAAM9G,IAGjD,OAAOilC,EAGT,MAAME,GAAUj9B,OAAOi9B,SAAW,MAC5BC,GAAW,CAACC,EAAQriC,IAAMA,EAAIqiC,EAAO1lC,SAAW0lC,EAAOriC,GAAGsiC,MAAQD,EAAOriC,GACzEuiC,GAAgBnQ,GAA4B,MAAdA,EAAoB,IAAM,IAC9D,SAASoQ,GAAYC,EAAYC,EAAaC,EAAY9kB,GACxD,MAAM6Z,EAAW+K,EAAWH,KAAOI,EAAcD,EAC3CG,EAAUF,EACVG,EAAOF,EAAWL,KAAOI,EAAcC,EACvCG,EAAMjmB,GAAsB+lB,EAASlL,GACrCqL,EAAMlmB,GAAsBgmB,EAAMD,GACxC,IAAII,EAAMF,GAAOA,EAAMC,GACnBE,EAAMF,GAAOD,EAAMC,GACvBC,EAAM9vB,MAAM8vB,GAAO,EAAIA,EACvBC,EAAM/vB,MAAM+vB,GAAO,EAAIA,EACvB,MAAMC,EAAKrlB,EAAImlB,EACTG,EAAKtlB,EAAIolB,EACf,MAAO,CACLvL,SAAU,CACRzxB,EAAG28B,EAAQ38B,EAAIi9B,GAAML,EAAK58B,EAAIyxB,EAASzxB,GACvCmV,EAAGwnB,EAAQxnB,EAAI8nB,GAAML,EAAKznB,EAAIsc,EAAStc,IAEzCynB,KAAM,CACJ58B,EAAG28B,EAAQ38B,EAAIk9B,GAAMN,EAAK58B,EAAIyxB,EAASzxB,GACvCmV,EAAGwnB,EAAQxnB,EAAI+nB,GAAMN,EAAKznB,EAAIsc,EAAStc,KAI7C,SAASgoB,GAAef,EAAQgB,EAAQC,GACtC,MAAMC,EAAYlB,EAAO1lC,OACzB,IAAI6mC,EAAQC,EAAOC,EAAMC,EAAkBC,EACvCC,EAAazB,GAASC,EAAQ,GAClC,IAAK,IAAIriC,EAAI,EAAGA,EAAIujC,EAAY,IAAKvjC,EACnC4jC,EAAeC,EACfA,EAAazB,GAASC,EAAQriC,EAAI,GAC7B4jC,GAAiBC,IAGlBrpB,GAAa6oB,EAAOrjC,GAAI,EAAGmiC,IAC7BmB,EAAGtjC,GAAKsjC,EAAGtjC,EAAI,GAAK,GAGtBwjC,EAASF,EAAGtjC,GAAKqjC,EAAOrjC,GACxByjC,EAAQH,EAAGtjC,EAAI,GAAKqjC,EAAOrjC,GAC3B2jC,EAAmBvwB,KAAKsH,IAAI8oB,EAAQ,GAAKpwB,KAAKsH,IAAI+oB,EAAO,GACrDE,GAAoB,IAGxBD,EAAO,EAAItwB,KAAK2H,KAAK4oB,GACrBL,EAAGtjC,GAAKwjC,EAASE,EAAOL,EAAOrjC,GAC/BsjC,EAAGtjC,EAAI,GAAKyjC,EAAQC,EAAOL,EAAOrjC,MAGtC,SAAS8jC,GAAgBzB,EAAQiB,EAAIlR,EAAY,KAC/C,MAAM2R,EAAYxB,GAAanQ,GACzBmR,EAAYlB,EAAO1lC,OACzB,IAAIqnC,EAAOC,EAAaL,EACpBC,EAAazB,GAASC,EAAQ,GAClC,IAAK,IAAIriC,EAAI,EAAGA,EAAIujC,IAAavjC,EAAG,CAIlC,GAHAikC,EAAcL,EACdA,EAAeC,EACfA,EAAazB,GAASC,EAAQriC,EAAI,IAC7B4jC,EACH,SAEF,MAAMM,EAASN,EAAaxR,GACtB+R,EAASP,EAAaG,GACxBE,IACFD,GAASE,EAASD,EAAY7R,IAAc,EAC5CwR,EAAa,MAAMxR,GAAe8R,EAASF,EAC3CJ,EAAa,MAAMG,GAAeI,EAASH,EAAQV,EAAGtjC,IAEpD6jC,IACFG,GAASH,EAAWzR,GAAa8R,GAAU,EAC3CN,EAAa,MAAMxR,GAAe8R,EAASF,EAC3CJ,EAAa,MAAMG,GAAeI,EAASH,EAAQV,EAAGtjC,KAI5D,SAASokC,GAAoB/B,EAAQjQ,EAAY,KAC/C,MAAM2R,EAAYxB,GAAanQ,GACzBmR,EAAYlB,EAAO1lC,OACnB0mC,EAAS5mC,MAAM8mC,GAAW1M,KAAK,GAC/ByM,EAAK7mC,MAAM8mC,GACjB,IAAIvjC,EAAGikC,EAAaL,EAChBC,EAAazB,GAASC,EAAQ,GAClC,IAAKriC,EAAI,EAAGA,EAAIujC,IAAavjC,EAI3B,GAHAikC,EAAcL,EACdA,EAAeC,EACfA,EAAazB,GAASC,EAAQriC,EAAI,GAC7B4jC,EAAL,CAGA,GAAIC,EAAY,CACd,MAAMQ,EAAaR,EAAWzR,GAAawR,EAAaxR,GACxDiR,EAAOrjC,GAAoB,IAAfqkC,GAAoBR,EAAWE,GAAaH,EAAaG,IAAcM,EAAa,EAElGf,EAAGtjC,GAAMikC,EACJJ,EACAzpB,GAAKipB,EAAOrjC,EAAI,MAAQoa,GAAKipB,EAAOrjC,IAAO,GAC3CqjC,EAAOrjC,EAAI,GAAKqjC,EAAOrjC,IAAM,EAFhBqjC,EAAOrjC,EAAI,GADNqjC,EAAOrjC,GAKhCojC,GAAef,EAAQgB,EAAQC,GAC/BQ,GAAgBzB,EAAQiB,EAAIlR,GAE9B,SAASkS,GAAgBC,EAAI3oB,EAAKC,GAChC,OAAOzI,KAAKyI,IAAIzI,KAAKwI,IAAI2oB,EAAI1oB,GAAMD,GAErC,SAAS4oB,GAAgBnC,EAAQnL,GAC/B,IAAIl3B,EAAGkX,EAAM+f,EAAOwN,EAAQC,EACxBC,EAAa3N,GAAeqL,EAAO,GAAInL,GAC3C,IAAKl3B,EAAI,EAAGkX,EAAOmrB,EAAO1lC,OAAQqD,EAAIkX,IAAQlX,EAC5C0kC,EAAaD,EACbA,EAASE,EACTA,EAAa3kC,EAAIkX,EAAO,GAAK8f,GAAeqL,EAAOriC,EAAI,GAAIk3B,GACtDuN,IAGLxN,EAAQoL,EAAOriC,GACX0kC,IACFzN,EAAMc,KAAOuM,GAAgBrN,EAAMc,KAAMb,EAAK5hB,KAAM4hB,EAAK3hB,OACzD0hB,EAAMgB,KAAOqM,GAAgBrN,EAAMgB,KAAMf,EAAKE,IAAKF,EAAKG,SAEtDsN,IACF1N,EAAMe,KAAOsM,GAAgBrN,EAAMe,KAAMd,EAAK5hB,KAAM4hB,EAAK3hB,OACzD0hB,EAAMiB,KAAOoM,GAAgBrN,EAAMiB,KAAMhB,EAAKE,IAAKF,EAAKG,UAI9D,SAASuN,GAA2BvC,EAAQ1+B,EAASuzB,EAAM2N,EAAMzS,GAC/D,IAAIpyB,EAAGkX,EAAM+f,EAAO6N,EAIpB,GAHInhC,EAAQohC,WACV1C,EAASA,EAAO1iC,OAAQ4kC,IAAQA,EAAGjC,OAEE,aAAnC3+B,EAAQqhC,uBACVZ,GAAoB/B,EAAQjQ,OACvB,CACL,IAAI6S,EAAOJ,EAAOxC,EAAOA,EAAO1lC,OAAS,GAAK0lC,EAAO,GACrD,IAAKriC,EAAI,EAAGkX,EAAOmrB,EAAO1lC,OAAQqD,EAAIkX,IAAQlX,EAC5Ci3B,EAAQoL,EAAOriC,GACf8kC,EAAgBtC,GACdyC,EACAhO,EACAoL,EAAOjvB,KAAKwI,IAAI5b,EAAI,EAAGkX,GAAQ2tB,EAAO,EAAI,IAAM3tB,GAChDvT,EAAQuhC,SAEVjO,EAAMc,KAAO+M,EAAcpN,SAASzxB,EACpCgxB,EAAMgB,KAAO6M,EAAcpN,SAAStc,EACpC6b,EAAMe,KAAO8M,EAAcjC,KAAK58B,EAChCgxB,EAAMiB,KAAO4M,EAAcjC,KAAKznB,EAChC6pB,EAAOhO,EAGPtzB,EAAQ6gC,iBACVA,GAAgBnC,EAAQnL,GAI5B,SAASiO,KACP,MAAyB,qBAAXpxB,QAA8C,qBAAbqxB,SAEjD,SAASC,GAAeC,GACtB,IAAIlE,EAASkE,EAAQC,WAIrB,OAHInE,GAAgC,wBAAtBA,EAAOtrB,aACnBsrB,EAASA,EAAOoE,MAEXpE,EAET,SAASqE,GAAcC,EAAYhV,EAAMiV,GACvC,IAAIC,EASJ,MAR0B,kBAAfF,GACTE,EAAgBpX,SAASkX,EAAY,KACJ,IAA7BA,EAAW5tB,QAAQ,OACrB8tB,EAAgBA,EAAgB,IAAMlV,EAAK6U,WAAWI,KAGxDC,EAAgBF,EAEXE,EAET,MAAMC,GAAoBr8B,GAAYuK,OAAO8xB,iBAAiBr8B,EAAS,MACvE,SAASs8B,GAASC,EAAIpqB,GACpB,OAAOkqB,GAAiBE,GAAIC,iBAAiBrqB,GAE/C,MAAMsqB,GAAY,CAAC,MAAO,QAAS,SAAU,QAC7C,SAASC,GAAmBC,EAAQrU,EAAOsU,GACzC,MAAMj8B,EAAS,GACfi8B,EAASA,EAAS,IAAMA,EAAS,GACjC,IAAK,IAAIpmC,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,MAAM6Y,EAAMotB,GAAUjmC,GACtBmK,EAAO0O,GAAOrC,WAAW2vB,EAAOrU,EAAQ,IAAMjZ,EAAMutB,KAAY,EAIlE,OAFAj8B,EAAOwJ,MAAQxJ,EAAOmL,KAAOnL,EAAOoL,MACpCpL,EAAOyJ,OAASzJ,EAAOitB,IAAMjtB,EAAOktB,OAC7BltB,EAET,MAAMk8B,GAAe,CAACpgC,EAAGmV,EAAG3D,KAAYxR,EAAI,GAAKmV,EAAI,MAAQ3D,IAAWA,EAAO6uB,YAC/E,SAASC,GAAkBhmC,EAAGi1B,GAC5B,MAAMgR,EAAUjmC,EAAEimC,QACZjvB,EAASivB,GAAWA,EAAQ7pC,OAAS6pC,EAAQ,GAAKjmC,GAClD,QAACkmC,EAAO,QAAEC,GAAWnvB,EAC3B,IACItR,EAAGmV,EADHurB,GAAM,EAEV,GAAIN,GAAaI,EAASC,EAASnmC,EAAEkX,QACnCxR,EAAIwgC,EACJrrB,EAAIsrB,MACC,CACL,MAAM9P,EAAOpB,EAAOoR,wBACpB3gC,EAAIsR,EAAOsvB,QAAUjQ,EAAKthB,KAC1B8F,EAAI7D,EAAOuvB,QAAUlQ,EAAKQ,IAC1BuP,GAAM,EAER,MAAO,CAAC1gC,IAAGmV,IAAGurB,OAEhB,SAASI,GAAoBC,EAAKzV,GAChC,GAAI,WAAYyV,EACd,OAAOA,EAET,MAAM,OAACxR,EAAM,wBAAEH,GAA2B9D,EACpCO,EAAQ+T,GAAiBrQ,GACzByR,EAAgC,eAApBnV,EAAMoV,UAClBC,EAAWjB,GAAmBpU,EAAO,WACrCsV,EAAUlB,GAAmBpU,EAAO,SAAU,UAC9C,EAAC7rB,EAAC,EAAEmV,EAAC,IAAEurB,GAAOJ,GAAkBS,EAAKxR,GACrCK,EAAUsR,EAAS7xB,MAAQqxB,GAAOS,EAAQ9xB,MAC1CwgB,EAAUqR,EAAS/P,KAAOuP,GAAOS,EAAQhQ,KAC/C,IAAI,MAACzjB,EAAK,OAAEC,GAAU2d,EAKtB,OAJI0V,IACFtzB,GAASwzB,EAASxzB,MAAQyzB,EAAQzzB,MAClCC,GAAUuzB,EAASvzB,OAASwzB,EAAQxzB,QAE/B,CACL3N,EAAGmN,KAAKC,OAAOpN,EAAI4vB,GAAWliB,EAAQ6hB,EAAO7hB,MAAQ0hB,GACrDja,EAAGhI,KAAKC,OAAO+H,EAAI0a,GAAWliB,EAAS4hB,EAAO5hB,OAASyhB,IAG3D,SAASgS,GAAiB7R,EAAQ7hB,EAAOC,GACvC,IAAIklB,EAAUwO,EACd,QAAcnlB,IAAVxO,QAAkCwO,IAAXvO,EAAsB,CAC/C,MAAM2zB,EAAYlC,GAAe7P,GACjC,GAAK+R,EAGE,CACL,MAAM3Q,EAAO2Q,EAAUX,wBACjBY,EAAiB3B,GAAiB0B,GAClCE,EAAkBvB,GAAmBsB,EAAgB,SAAU,SAC/DE,EAAmBxB,GAAmBsB,EAAgB,WAC5D7zB,EAAQijB,EAAKjjB,MAAQ+zB,EAAiB/zB,MAAQ8zB,EAAgB9zB,MAC9DC,EAASgjB,EAAKhjB,OAAS8zB,EAAiB9zB,OAAS6zB,EAAgB7zB,OACjEklB,EAAW2M,GAAc+B,EAAe1O,SAAUyO,EAAW,eAC7DD,EAAY7B,GAAc+B,EAAeF,UAAWC,EAAW,qBAV/D5zB,EAAQ6hB,EAAOmS,YACf/zB,EAAS4hB,EAAOoS,aAYpB,MAAO,CACLj0B,QACAC,SACAklB,SAAUA,GAAYjf,GACtBytB,UAAWA,GAAaztB,IAG5B,MAAMguB,GAAS9nB,GAAK3M,KAAKC,MAAU,GAAJ0M,GAAU,GACzC,SAAS+nB,GAAetS,EAAQuS,EAASC,EAAUC,GACjD,MAAMnW,EAAQ+T,GAAiBrQ,GACzB0S,EAAUhC,GAAmBpU,EAAO,UACpCgH,EAAW2M,GAAc3T,EAAMgH,SAAUtD,EAAQ,gBAAkB3b,GACnEytB,EAAY7B,GAAc3T,EAAMwV,UAAW9R,EAAQ,iBAAmB3b,GACtEsuB,EAAgBd,GAAiB7R,EAAQuS,EAASC,GACxD,IAAI,MAACr0B,EAAK,OAAEC,GAAUu0B,EACtB,GAAwB,gBAApBrW,EAAMoV,UAA6B,CACrC,MAAME,EAAUlB,GAAmBpU,EAAO,SAAU,SAC9CqV,EAAWjB,GAAmBpU,EAAO,WAC3Cne,GAASwzB,EAASxzB,MAAQyzB,EAAQzzB,MAClCC,GAAUuzB,EAASvzB,OAASwzB,EAAQxzB,OAStC,OAPAD,EAAQP,KAAKyI,IAAI,EAAGlI,EAAQu0B,EAAQv0B,OACpCC,EAASR,KAAKyI,IAAI,EAAGosB,EAAc70B,KAAKuH,MAAMhH,EAAQs0B,GAAer0B,EAASs0B,EAAQt0B,QACtFD,EAAQk0B,GAAOz0B,KAAKwI,IAAIjI,EAAOmlB,EAAUqP,EAAcrP,WACvDllB,EAASi0B,GAAOz0B,KAAKwI,IAAIhI,EAAQ0zB,EAAWa,EAAcb,YACtD3zB,IAAUC,IACZA,EAASi0B,GAAOl0B,EAAQ,IAEnB,CACLA,QACAC,UAGJ,SAASw0B,GAAY7W,EAAO8W,EAAYC,GACtC,MAAMC,EAAaF,GAAc,EAC3BG,EAAep1B,KAAKuH,MAAM4W,EAAM3d,OAAS20B,GACzCE,EAAcr1B,KAAKuH,MAAM4W,EAAM5d,MAAQ40B,GAC7ChX,EAAM3d,OAAS40B,EAAeD,EAC9BhX,EAAM5d,MAAQ80B,EAAcF,EAC5B,MAAM/S,EAASjE,EAAMiE,OAKrB,OAJIA,EAAO1D,QAAUwW,IAAgB9S,EAAO1D,MAAMle,SAAW4hB,EAAO1D,MAAMne,SACxE6hB,EAAO1D,MAAMle,OAAY2d,EAAM3d,OAAT,KACtB4hB,EAAO1D,MAAMne,MAAW4d,EAAM5d,MAAT,OAEnB4d,EAAM8D,0BAA4BkT,GAC/B/S,EAAO5hB,SAAW40B,GAClBhT,EAAO7hB,QAAU80B,KACtBlX,EAAM8D,wBAA0BkT,EAChC/S,EAAO5hB,OAAS40B,EAChBhT,EAAO7hB,MAAQ80B,EACflX,EAAMU,IAAIyW,aAAaH,EAAY,EAAG,EAAGA,EAAY,EAAG,IACjD,GAIX,MAAMI,GAAgC,WACpC,IAAIC,GAAmB,EACvB,IACE,MAAMjlC,EAAU,CACd,cAEE,OADAilC,GAAmB,GACZ,IAGX70B,OAAO80B,iBAAiB,OAAQ,KAAMllC,GACtCoQ,OAAO+0B,oBAAoB,OAAQ,KAAMnlC,GACzC,MAAOpD,IAET,OAAOqoC,EAb4B,GAerC,SAASG,GAAav/B,EAASmS,GAC7B,MAAMjf,EAAQopC,GAASt8B,EAASmS,GAC1B4e,EAAU79B,GAASA,EAAM89B,MAAM,qBACrC,OAAOD,GAAWA,EAAQ,QAAKpY,EAGjC,SAAS6mB,GAAa7lB,EAAIC,EAAIvF,EAAGyU,GAC/B,MAAO,CACLrsB,EAAGkd,EAAGld,EAAI4X,GAAKuF,EAAGnd,EAAIkd,EAAGld,GACzBmV,EAAG+H,EAAG/H,EAAIyC,GAAKuF,EAAGhI,EAAI+H,EAAG/H,IAG7B,SAAS6tB,GAAsB9lB,EAAIC,EAAIvF,EAAGyU,GACxC,MAAO,CACLrsB,EAAGkd,EAAGld,EAAI4X,GAAKuF,EAAGnd,EAAIkd,EAAGld,GACzBmV,EAAY,WAATkX,EAAoBzU,EAAI,GAAMsF,EAAG/H,EAAIgI,EAAGhI,EAChC,UAATkX,EAAmBzU,EAAI,EAAIsF,EAAG/H,EAAIgI,EAAGhI,EACrCyC,EAAI,EAAIuF,EAAGhI,EAAI+H,EAAG/H,GAGxB,SAAS8tB,GAAqB/lB,EAAIC,EAAIvF,EAAGyU,GACvC,MAAM6W,EAAM,CAACljC,EAAGkd,EAAG6U,KAAM5c,EAAG+H,EAAG+U,MACzBkR,EAAM,CAACnjC,EAAGmd,EAAG2U,KAAM3c,EAAGgI,EAAG6U,MACzB5e,EAAI2vB,GAAa7lB,EAAIgmB,EAAKtrB,GAC1BvE,EAAI0vB,GAAaG,EAAKC,EAAKvrB,GAC3B0D,EAAIynB,GAAaI,EAAKhmB,EAAIvF,GAC1B3L,EAAI82B,GAAa3vB,EAAGC,EAAGuE,GACvBtd,EAAIyoC,GAAa1vB,EAAGiI,EAAG1D,GAC7B,OAAOmrB,GAAa92B,EAAG3R,EAAGsd,GAG5B,MAAMwrB,GAAY,IAAIC,IACtB,SAASC,GAAgBC,EAAQ7lC,GAC/BA,EAAUA,GAAW,GACrB,MAAM8lC,EAAWD,EAASE,KAAKC,UAAUhmC,GACzC,IAAIimC,EAAYP,GAAUQ,IAAIJ,GAK9B,OAJKG,IACHA,EAAY,IAAIE,KAAKC,aAAaP,EAAQ7lC,GAC1C0lC,GAAU5L,IAAIgM,EAAUG,IAEnBA,EAET,SAASI,GAAaC,EAAKT,EAAQ7lC,GACjC,OAAO4lC,GAAgBC,EAAQ7lC,GAASiC,OAAOqkC,GAGjD,MAAMC,GAAwB,SAASC,EAAOx2B,GAC5C,MAAO,CACL,EAAE1N,GACA,OAAOkkC,EAAQA,EAAQx2B,EAAQ1N,GAEjC,SAASuc,GACP7O,EAAQ6O,GAEV,UAAUvN,GACR,MAAc,WAAVA,EACKA,EAEQ,UAAVA,EAAoB,OAAS,SAEtC,MAAMhP,EAAGvJ,GACP,OAAOuJ,EAAIvJ,GAEb,WAAWuJ,EAAGmkC,GACZ,OAAOnkC,EAAImkC,KAIXC,GAAwB,WAC5B,MAAO,CACL,EAAEpkC,GACA,OAAOA,GAET,SAASuc,KAET,UAAUvN,GACR,OAAOA,GAET,MAAMhP,EAAGvJ,GACP,OAAOuJ,EAAIvJ,GAEb,WAAWuJ,EAAGqkC,GACZ,OAAOrkC,KAIb,SAASskC,GAAc/0B,EAAK20B,EAAOx2B,GACjC,OAAO6B,EAAM00B,GAAsBC,EAAOx2B,GAAS02B,KAErD,SAASG,GAAsBvY,EAAKwY,GAClC,IAAI3Y,EAAO4Y,EACO,QAAdD,GAAqC,QAAdA,IACzB3Y,EAAQG,EAAIuD,OAAO1D,MACnB4Y,EAAW,CACT5Y,EAAMkU,iBAAiB,aACvBlU,EAAM6Y,oBAAoB,cAE5B7Y,EAAM8Y,YAAY,YAAaH,EAAW,aAC1CxY,EAAI4Y,kBAAoBH,GAG5B,SAASI,GAAqB7Y,EAAKyY,QAChBvoB,IAAbuoB,WACKzY,EAAI4Y,kBACX5Y,EAAIuD,OAAO1D,MAAM8Y,YAAY,YAAaF,EAAS,GAAIA,EAAS,KAIpE,SAASK,GAAWpvB,GAClB,MAAiB,UAAbA,EACK,CACLqvB,QAAS9tB,GACT+tB,QAASjuB,GACTkuB,UAAWjuB,IAGR,CACL+tB,QAASrtB,GACTstB,QAAS,CAAC5xB,EAAGC,IAAMD,EAAIC,EACvB4xB,UAAWjlC,GAAKA,GAGpB,SAASklC,IAAiB,MAACh2B,EAAK,IAAEC,EAAG,MAAE0sB,EAAK,KAAE+C,EAAI,MAAE/S,IAClD,MAAO,CACL3c,MAAOA,EAAQ2sB,EACf1sB,IAAKA,EAAM0sB,EACX+C,KAAMA,IAASzvB,EAAMD,EAAQ,GAAK2sB,IAAU,EAC5ChQ,SAGJ,SAASsZ,GAAWC,EAAShJ,EAAQiJ,GACnC,MAAM,SAAC3vB,EAAUxG,MAAOo2B,EAAYn2B,IAAKo2B,GAAYF,GAC/C,QAACN,EAAO,UAAEE,GAAaH,GAAWpvB,GAClCmmB,EAAQO,EAAO1lC,OACrB,IACIqD,EAAGkX,GADH,MAAC/B,EAAK,IAAEC,EAAG,KAAEyvB,GAAQwG,EAEzB,GAAIxG,EAAM,CAGR,IAFA1vB,GAAS2sB,EACT1sB,GAAO0sB,EACF9hC,EAAI,EAAGkX,EAAO4qB,EAAO9hC,EAAIkX,IAAQlX,EAAG,CACvC,IAAKgrC,EAAQE,EAAU7I,EAAOltB,EAAQ2sB,GAAOnmB,IAAY4vB,EAAYC,GACnE,MAEFr2B,IACAC,IAEFD,GAAS2sB,EACT1sB,GAAO0sB,EAKT,OAHI1sB,EAAMD,IACRC,GAAO0sB,GAEF,CAAC3sB,QAAOC,MAAKyvB,OAAM/S,MAAOuZ,EAAQvZ,OAE3C,SAAS2Z,GAAcJ,EAAShJ,EAAQiJ,GACtC,IAAKA,EACH,MAAO,CAACD,GAEV,MAAM,SAAC1vB,EAAUxG,MAAOo2B,EAAYn2B,IAAKo2B,GAAYF,EAC/CxJ,EAAQO,EAAO1lC,QACf,QAACsuC,EAAO,QAAED,EAAO,UAAEE,GAAaH,GAAWpvB,IAC3C,MAACxG,EAAK,IAAEC,EAAG,KAAEyvB,EAAI,MAAE/S,GAASsZ,GAAWC,EAAShJ,EAAQiJ,GACxDnhC,EAAS,GACf,IAEIzN,EAAOu6B,EAAOyU,EAFdC,GAAS,EACTC,EAAW,KAEf,MAAMC,EAAgB,IAAMb,EAAQO,EAAYG,EAAWhvC,IAA6C,IAAnCuuC,EAAQM,EAAYG,GACnFI,EAAc,IAAmC,IAA7Bb,EAAQO,EAAU9uC,IAAgBsuC,EAAQQ,EAAUE,EAAWhvC,GACnFqvC,EAAc,IAAMJ,GAAUE,IAC9BG,EAAa,KAAOL,GAAUG,IACpC,IAAK,IAAI9rC,EAAImV,EAAO8vB,EAAO9vB,EAAOnV,GAAKoV,IAAOpV,EAC5Ci3B,EAAQoL,EAAOriC,EAAI8hC,GACf7K,EAAMqL,OAGV5lC,EAAQwuC,EAAUjU,EAAMtb,IACpBjf,IAAUgvC,IAGdC,EAASX,EAAQtuC,EAAO6uC,EAAYC,GACnB,OAAbI,GAAqBG,MACvBH,EAA0C,IAA/BX,EAAQvuC,EAAO6uC,GAAoBvrC,EAAIilC,GAEnC,OAAb2G,GAAqBI,MACvB7hC,EAAO3B,KAAK2iC,GAAiB,CAACh2B,MAAOy2B,EAAUx2B,IAAKpV,EAAG6kC,OAAM/C,QAAOhQ,WACpE8Z,EAAW,MAEb3G,EAAOjlC,EACP0rC,EAAYhvC,IAKd,OAHiB,OAAbkvC,GACFzhC,EAAO3B,KAAK2iC,GAAiB,CAACh2B,MAAOy2B,EAAUx2B,MAAKyvB,OAAM/C,QAAOhQ,WAE5D3nB,EAET,SAAS8hC,GAAexT,EAAM6S,GAC5B,MAAMnhC,EAAS,GACT+hC,EAAWzT,EAAKyT,SACtB,IAAK,IAAIlsC,EAAI,EAAGA,EAAIksC,EAASvvC,OAAQqD,IAAK,CACxC,MAAMmsC,EAAMV,GAAcS,EAASlsC,GAAIy4B,EAAK4J,OAAQiJ,GAChDa,EAAIxvC,QACNwN,EAAO3B,QAAQ2jC,GAGnB,OAAOhiC,EAET,SAASiiC,GAAgB/J,EAAQP,EAAO+C,EAAME,GAC5C,IAAI5vB,EAAQ,EACRC,EAAM0sB,EAAQ,EAClB,GAAI+C,IAASE,EACX,MAAO5vB,EAAQ2sB,IAAUO,EAAOltB,GAAOmtB,KACrCntB,IAGJ,MAAOA,EAAQ2sB,GAASO,EAAOltB,GAAOmtB,KACpCntB,IAEFA,GAAS2sB,EACL+C,IACFzvB,GAAOD,GAET,MAAOC,EAAMD,GAASktB,EAAOjtB,EAAM0sB,GAAOQ,KACxCltB,IAGF,OADAA,GAAO0sB,EACA,CAAC3sB,QAAOC,OAEjB,SAASi3B,GAAchK,EAAQltB,EAAO0G,EAAKgpB,GACzC,MAAM/C,EAAQO,EAAO1lC,OACfwN,EAAS,GACf,IAEIiL,EAFAk3B,EAAOn3B,EACP8vB,EAAO5C,EAAOltB,GAElB,IAAKC,EAAMD,EAAQ,EAAGC,GAAOyG,IAAOzG,EAAK,CACvC,MAAMm3B,EAAMlK,EAAOjtB,EAAM0sB,GACrByK,EAAIjK,MAAQiK,EAAIC,KACbvH,EAAK3C,OACRuC,GAAO,EACP16B,EAAO3B,KAAK,CAAC2M,MAAOA,EAAQ2sB,EAAO1sB,KAAMA,EAAM,GAAK0sB,EAAO+C,SAC3D1vB,EAAQm3B,EAAOC,EAAIC,KAAOp3B,EAAM,OAGlCk3B,EAAOl3B,EACH6vB,EAAK3C,OACPntB,EAAQC,IAGZ6vB,EAAOsH,EAKT,OAHa,OAATD,GACFniC,EAAO3B,KAAK,CAAC2M,MAAOA,EAAQ2sB,EAAO1sB,IAAKk3B,EAAOxK,EAAO+C,SAEjD16B,EAET,SAASsiC,GAAiBhU,EAAMiU,GAC9B,MAAMrK,EAAS5J,EAAK4J,OACd0C,EAAWtM,EAAK90B,QAAQohC,SACxBjD,EAAQO,EAAO1lC,OACrB,IAAKmlC,EACH,MAAO,GAET,MAAM+C,IAASpM,EAAKkU,OACd,MAACx3B,EAAK,IAAEC,GAAOg3B,GAAgB/J,EAAQP,EAAO+C,EAAME,GAC1D,IAAiB,IAAbA,EACF,OAAO6H,GAAcnU,EAAM,CAAC,CAACtjB,QAAOC,MAAKyvB,SAAQxC,EAAQqK,GAE3D,MAAM7wB,EAAMzG,EAAMD,EAAQC,EAAM0sB,EAAQ1sB,EAClCy3B,IAAiBpU,EAAKqU,WAAuB,IAAV33B,GAAeC,IAAQ0sB,EAAQ,EACxE,OAAO8K,GAAcnU,EAAM4T,GAAchK,EAAQltB,EAAO0G,EAAKgxB,GAAexK,EAAQqK,GAEtF,SAASE,GAAcnU,EAAMyT,EAAU7J,EAAQqK,GAC7C,OAAKA,GAAmBA,EAAe9M,YAAeyC,EAG/C0K,GAAgBtU,EAAMyT,EAAU7J,EAAQqK,GAFtCR,EAIX,SAASa,GAAgBtU,EAAMyT,EAAU7J,EAAQqK,GAC/C,MAAMM,EAAevU,EAAKwU,OAAOxX,aAC3ByX,EAAYC,GAAU1U,EAAK90B,UAC1BypC,cAAe/1B,EAAc1T,SAAS,SAACohC,IAAatM,EACrDqJ,EAAQO,EAAO1lC,OACfwN,EAAS,GACf,IAAIkjC,EAAYH,EACZ/3B,EAAQ+2B,EAAS,GAAG/2B,MACpBnV,EAAImV,EACR,SAASm4B,EAASlwB,EAAG7c,EAAG0f,EAAGstB,GACzB,MAAMC,EAAMzI,GAAY,EAAI,EAC5B,GAAI3nB,IAAM7c,EAAV,CAGA6c,GAAK0kB,EACL,MAAOO,EAAOjlB,EAAI0kB,GAAOQ,KACvBllB,GAAKowB,EAEP,MAAOnL,EAAO9hC,EAAIuhC,GAAOQ,KACvB/hC,GAAKitC,EAEHpwB,EAAI0kB,IAAUvhC,EAAIuhC,IACpB33B,EAAO3B,KAAK,CAAC2M,MAAOiI,EAAI0kB,EAAO1sB,IAAK7U,EAAIuhC,EAAO+C,KAAM5kB,EAAG6R,MAAOyb,IAC/DF,EAAYE,EACZp4B,EAAQ5U,EAAIuhC,IAGhB,IAAK,MAAMuJ,KAAWa,EAAU,CAC9B/2B,EAAQ4vB,EAAW5vB,EAAQk2B,EAAQl2B,MACnC,IACI2c,EADAmT,EAAO5C,EAAOltB,EAAQ2sB,GAE1B,IAAK9hC,EAAImV,EAAQ,EAAGnV,GAAKqrC,EAAQj2B,IAAKpV,IAAK,CACzC,MAAMukC,EAAKlC,EAAOriC,EAAI8hC,GACtBhQ,EAAQqb,GAAUT,EAAe9M,WAAW9D,GAAckR,EAAc,CACtE/nC,KAAM,UACNwoC,GAAIxI,EACJ9hB,GAAIohB,EACJmJ,aAAc1tC,EAAI,GAAK8hC,EACvB6L,YAAa3tC,EAAI8hC,EACjBzqB,mBAEEu2B,GAAa9b,EAAOub,IACtBC,EAASn4B,EAAOnV,EAAI,EAAGqrC,EAAQxG,KAAMwI,GAEvCpI,EAAOV,EACP8I,EAAYvb,EAEV3c,EAAQnV,EAAI,GACdstC,EAASn4B,EAAOnV,EAAI,EAAGqrC,EAAQxG,KAAMwI,GAGzC,OAAOljC,EAET,SAASgjC,GAAUxpC,GACjB,MAAO,CACLutB,gBAAiBvtB,EAAQutB,gBACzB2c,eAAgBlqC,EAAQkqC,eACxBC,WAAYnqC,EAAQmqC,WACpBC,iBAAkBpqC,EAAQoqC,iBAC1BC,gBAAiBrqC,EAAQqqC,gBACzBlX,YAAanzB,EAAQmzB,YACrB3F,YAAaxtB,EAAQwtB,aAGzB,SAASyc,GAAa9b,EAAOub,GAC3B,OAAOA,GAAa3D,KAAKC,UAAU7X,KAAW4X,KAAKC,UAAU0D;;;;;;GCv+E/D,MAAM,GACJ,cACE3xC,KAAKuyC,SAAW,KAChBvyC,KAAKwyC,QAAU,IAAI5E,IACnB5tC,KAAKyyC,UAAW,EAChBzyC,KAAK0yC,eAAYjsB,EAEnB,QAAQoP,EAAO8c,EAAOz+B,EAAM3K,GAC1B,MAAMqpC,EAAYD,EAAMxR,UAAU53B,GAC5BspC,EAAWF,EAAMG,SACvBF,EAAUtR,QAAQ/4B,GAAMA,EAAG,CACzBstB,QACAkd,QAASJ,EAAMI,QACfF,WACAG,YAAat7B,KAAKwI,IAAIhM,EAAOy+B,EAAMl5B,MAAOo5B,MAG9C,WACM7yC,KAAKuyC,WAGTvyC,KAAKyyC,UAAW,EAChBzyC,KAAKuyC,SAAWn6B,GAAiBU,KAAKT,OAAQ,KAC5CrY,KAAKizC,UACLjzC,KAAKuyC,SAAW,KACZvyC,KAAKyyC,UACPzyC,KAAKkzC,cAIX,QAAQh/B,EAAO9H,KAAK+mC,OAClB,IAAIC,EAAY,EAChBpzC,KAAKwyC,QAAQlR,QAAQ,CAACqR,EAAO9c,KAC3B,IAAK8c,EAAMU,UAAYV,EAAM7Q,MAAM7gC,OACjC,OAEF,MAAM6gC,EAAQ6Q,EAAM7Q,MACpB,IAEI1gC,EAFAkD,EAAIw9B,EAAM7gC,OAAS,EACnBqyC,GAAO,EAEX,KAAOhvC,GAAK,IAAKA,EACflD,EAAO0gC,EAAMx9B,GACTlD,EAAKmyC,SACHnyC,EAAKoyC,OAASb,EAAMG,WACtBH,EAAMG,SAAW1xC,EAAKoyC,QAExBpyC,EAAKqyC,KAAKv/B,GACVo/B,GAAO,IAEPxR,EAAMx9B,GAAKw9B,EAAMA,EAAM7gC,OAAS,GAChC6gC,EAAMviB,OAGN+zB,IACFzd,EAAMyd,OACNtzC,KAAK0zC,QAAQ7d,EAAO8c,EAAOz+B,EAAM,aAE9B4tB,EAAM7gC,SACT0xC,EAAMU,SAAU,EAChBrzC,KAAK0zC,QAAQ7d,EAAO8c,EAAOz+B,EAAM,YACjCy+B,EAAMI,SAAU,GAElBK,GAAatR,EAAM7gC,SAErBjB,KAAK0yC,UAAYx+B,EACC,IAAdk/B,IACFpzC,KAAKyyC,UAAW,GAGpB,UAAU5c,GACR,MAAM8d,EAAS3zC,KAAKwyC,QACpB,IAAIG,EAAQgB,EAAOxF,IAAItY,GAavB,OAZK8c,IACHA,EAAQ,CACNU,SAAS,EACTN,SAAS,EACTjR,MAAO,GACPX,UAAW,CACTyS,SAAU,GACVC,SAAU,KAGdF,EAAO5R,IAAIlM,EAAO8c,IAEbA,EAET,OAAO9c,EAAOie,EAAOC,GACnB/zC,KAAKg0C,UAAUne,GAAOsL,UAAU2S,GAAOhnC,KAAKinC,GAE9C,IAAIle,EAAOiM,GACJA,GAAUA,EAAM7gC,QAGrBjB,KAAKg0C,UAAUne,GAAOiM,MAAMh1B,QAAQg1B,GAEtC,IAAIjM,GACF,OAAO71B,KAAKg0C,UAAUne,GAAOiM,MAAM7gC,OAAS,EAE9C,MAAM40B,GACJ,MAAM8c,EAAQ3yC,KAAKwyC,QAAQrE,IAAItY,GAC1B8c,IAGLA,EAAMU,SAAU,EAChBV,EAAMl5B,MAAQrN,KAAK+mC,MACnBR,EAAMG,SAAWH,EAAM7Q,MAAMmS,OAAO,CAACC,EAAKrD,IAAQn5B,KAAKyI,IAAI+zB,EAAKrD,EAAIsD,WAAY,GAChFn0C,KAAKkzC,YAEP,QAAQrd,GACN,IAAK71B,KAAKyyC,SACR,OAAO,EAET,MAAME,EAAQ3yC,KAAKwyC,QAAQrE,IAAItY,GAC/B,SAAK8c,GAAUA,EAAMU,SAAYV,EAAM7Q,MAAM7gC,QAK/C,KAAK40B,GACH,MAAM8c,EAAQ3yC,KAAKwyC,QAAQrE,IAAItY,GAC/B,IAAK8c,IAAUA,EAAM7Q,MAAM7gC,OACzB,OAEF,MAAM6gC,EAAQ6Q,EAAM7Q,MACpB,IAAIx9B,EAAIw9B,EAAM7gC,OAAS,EACvB,KAAOqD,GAAK,IAAKA,EACfw9B,EAAMx9B,GAAG8vC,SAEXzB,EAAM7Q,MAAQ,GACd9hC,KAAK0zC,QAAQ7d,EAAO8c,EAAOvmC,KAAK+mC,MAAO,YAEzC,OAAOtd,GACL,OAAO71B,KAAKwyC,QAAQpN,OAAOvP,IAG/B,IAAIwe,GAAW,IAAI,GAEnB,MAAMrhB,GAAc,cACdshB,GAAgB,CACpB,QAAQrS,EAAM7sB,EAAIm/B,GAChB,OAAOA,EAAS,GAAMn/B,EAAK6sB,GAE7B,MAAMA,EAAM7sB,EAAIm/B,GACd,MAAMC,EAAK,GAAMvS,GAAQjP,IACnBqB,EAAKmgB,EAAGzwC,OAAS,GAAMqR,GAAM4d,IACnC,OAAOqB,GAAMA,EAAGtwB,MACZswB,EAAGogB,IAAID,EAAID,GAAQ/tB,YACnBpR,GAEN,OAAO6sB,EAAM7sB,EAAIm/B,GACf,OAAOtS,GAAQ7sB,EAAK6sB,GAAQsS,IAGhC,MAAM,GACJ,YAAYG,EAAK34B,EAAQojB,EAAM/pB,GAC7B,MAAMu/B,EAAe54B,EAAOojB,GAC5B/pB,EAAKuqB,GAAQ,CAAC+U,EAAIt/B,GAAIA,EAAIu/B,EAAcD,EAAIzS,OAC5C,MAAMA,EAAOtC,GAAQ,CAAC+U,EAAIzS,KAAM0S,EAAcv/B,IAC9CpV,KAAKuzC,SAAU,EACfvzC,KAAK40C,IAAMF,EAAInsC,IAAM+rC,GAAcI,EAAInrC,aAAe04B,GACtDjiC,KAAK60C,QAAUtyB,GAAQmyB,EAAII,SAAWvyB,GAAQC,OAC9CxiB,KAAK+0C,OAASr9B,KAAKuH,MAAM7S,KAAK+mC,OAASuB,EAAIv7B,OAAS,IACpDnZ,KAAKm0C,UAAYn0C,KAAKwzC,OAAS97B,KAAKuH,MAAMy1B,EAAI5B,UAC9C9yC,KAAKixC,QAAUyD,EAAIvL,KACnBnpC,KAAKg1C,QAAUj5B,EACf/b,KAAKi1C,MAAQ9V,EACbn/B,KAAKk1C,MAAQjT,EACbjiC,KAAKm1C,IAAM//B,EACXpV,KAAKo1C,eAAY3uB,EAEnB,SACE,OAAOzmB,KAAKuzC,QAEd,OAAOmB,EAAKt/B,EAAIlB,GACd,GAAIlU,KAAKuzC,QAAS,CAChBvzC,KAAK0zC,SAAQ,GACb,MAAMiB,EAAe30C,KAAKg1C,QAAQh1C,KAAKi1C,OACjCI,EAAUnhC,EAAOlU,KAAK+0C,OACtBO,EAASt1C,KAAKm0C,UAAYkB,EAChCr1C,KAAK+0C,OAAS7gC,EACdlU,KAAKm0C,UAAYz8B,KAAKuH,MAAMvH,KAAKyI,IAAIm1B,EAAQZ,EAAI5B,WACjD9yC,KAAKwzC,QAAU6B,EACfr1C,KAAKixC,QAAUyD,EAAIvL,KACnBnpC,KAAKm1C,IAAMxV,GAAQ,CAAC+U,EAAIt/B,GAAIA,EAAIu/B,EAAcD,EAAIzS,OAClDjiC,KAAKk1C,MAAQvV,GAAQ,CAAC+U,EAAIzS,KAAM0S,EAAcv/B,KAGlD,SACMpV,KAAKuzC,UACPvzC,KAAKyzC,KAAKrnC,KAAK+mC,OACfnzC,KAAKuzC,SAAU,EACfvzC,KAAK0zC,SAAQ,IAGjB,KAAKx/B,GACH,MAAMmhC,EAAUnhC,EAAOlU,KAAK+0C,OACtBjC,EAAW9yC,KAAKm0C,UAChBhV,EAAOn/B,KAAKi1C,MACZhT,EAAOjiC,KAAKk1C,MACZ/L,EAAOnpC,KAAKixC,MACZ77B,EAAKpV,KAAKm1C,IAChB,IAAIZ,EAEJ,GADAv0C,KAAKuzC,QAAUtR,IAAS7sB,IAAO+zB,GAASkM,EAAUvC,IAC7C9yC,KAAKuzC,QAGR,OAFAvzC,KAAKg1C,QAAQ7V,GAAQ/pB,OACrBpV,KAAK0zC,SAAQ,GAGX2B,EAAU,EACZr1C,KAAKg1C,QAAQ7V,GAAQ8C,GAGvBsS,EAAUc,EAAUvC,EAAY,EAChCyB,EAASpL,GAAQoL,EAAS,EAAI,EAAIA,EAASA,EAC3CA,EAASv0C,KAAK60C,QAAQn9B,KAAKwI,IAAI,EAAGxI,KAAKyI,IAAI,EAAGo0B,KAC9Cv0C,KAAKg1C,QAAQ7V,GAAQn/B,KAAK40C,IAAI3S,EAAM7sB,EAAIm/B,IAE1C,OACE,MAAMgB,EAAWv1C,KAAKo1C,YAAcp1C,KAAKo1C,UAAY,IACrD,OAAO,IAAII,QAAQ,CAAC/T,EAAKgU,KACvBF,EAASzoC,KAAK,CAAC20B,MAAKgU,UAGxB,QAAQC,GACN,MAAMnU,EAASmU,EAAW,MAAQ,MAC5BH,EAAWv1C,KAAKo1C,WAAa,GACnC,IAAK,IAAI9wC,EAAI,EAAGA,EAAIixC,EAASt0C,OAAQqD,IACnCixC,EAASjxC,GAAGi9B,MAKlB,MAAMoU,GAAU,CAAC,IAAK,IAAK,cAAe,SAAU,WAC9CC,GAAS,CAAC,QAAS,cAAe,mBACxC1d,GAAS6J,IAAI,YAAa,CACxB5oB,WAAOsN,EACPqsB,SAAU,IACVgC,OAAQ,eACRvsC,QAAIke,EACJwb,UAAMxb,EACN0iB,UAAM1iB,EACNrR,QAAIqR,EACJld,UAAMkd,IAER,MAAM,GAAmBhlB,OAAO2Z,KAAK8c,GAAS3C,WAC9C2C,GAASV,SAAS,YAAa,CAC7Bc,WAAW,EACXD,YAAY,EACZF,YAAcr4B,GAAkB,eAATA,GAAkC,eAATA,GAAkC,OAATA,IAE3Eo4B,GAAS6J,IAAI,aAAc,CACzB6T,OAAQ,CACNrsC,KAAM,QACNssC,WAAYD,IAEdD,QAAS,CACPpsC,KAAM,SACNssC,WAAYF,MAGhBzd,GAASV,SAAS,aAAc,CAC9Bc,UAAW,cAEbJ,GAAS6J,IAAI,cAAe,CAC1Bt3B,OAAQ,CACN8qB,UAAW,CACTud,SAAU,MAGdgD,OAAQ,CACNvgB,UAAW,CACTud,SAAU,IAGdr9B,KAAM,CACJsgC,WAAY,CACVH,OAAQ,CACN3T,KAAM,eAER+T,QAAS,CACPzsC,KAAM,UACNupC,SAAU,KAIhBmD,KAAM,CACJF,WAAY,CACVH,OAAQ,CACNxgC,GAAI,eAEN4gC,QAAS,CACPzsC,KAAM,UACNurC,OAAQ,SACRvsC,GAAI8b,GAAS,EAAJA,OAKjB,MAAM,GACJ,YAAYwR,EAAOqgB,GACjBl2C,KAAKuxC,OAAS1b,EACd71B,KAAKm2C,YAAc,IAAIvI,IACvB5tC,KAAKo2C,UAAUF,GAEjB,UAAUA,GACR,IAAK77B,GAAS67B,GACZ,OAEF,MAAMG,EAAgBr2C,KAAKm2C,YAC3B10C,OAAO60C,oBAAoBJ,GAAQ5U,QAAQl5B,IACzC,MAAMssC,EAAMwB,EAAO9tC,GACnB,IAAKiS,GAASq6B,GACZ,OAEF,MAAMgB,EAAW,GACjB,IAAK,MAAMvtC,KAAU,GACnButC,EAASvtC,GAAUusC,EAAIvsC,IAExBgS,GAAQu6B,EAAImB,aAAenB,EAAImB,YAAc,CAACztC,IAAMk5B,QAASnC,IACxDA,IAAS/2B,GAAQiuC,EAAcv4B,IAAIqhB,IACrCkX,EAActU,IAAI5C,EAAMuW,OAKhC,gBAAgB35B,EAAQqZ,GACtB,MAAMmhB,EAAanhB,EAAOntB,QACpBA,EAAUuuC,GAAqBz6B,EAAQw6B,GAC7C,IAAKtuC,EACH,MAAO,GAET,MAAM8tC,EAAa/1C,KAAKy2C,kBAAkBxuC,EAASsuC,GAOnD,OANIA,EAAWG,SACbC,GAAS56B,EAAO9T,QAAQ2uC,YAAaL,GAAYM,KAAK,KACpD96B,EAAO9T,QAAUsuC,GAChB,QAGER,EAET,kBAAkBh6B,EAAQqZ,GACxB,MAAMihB,EAAgBr2C,KAAKm2C,YACrBJ,EAAa,GACb1C,EAAUt3B,EAAO66B,cAAgB76B,EAAO66B,YAAc,IACtD32C,EAAQwB,OAAO2Z,KAAKga,GACpBlhB,EAAO9H,KAAK+mC,MAClB,IAAI7uC,EACJ,IAAKA,EAAIrE,EAAMgB,OAAS,EAAGqD,GAAK,IAAKA,EAAG,CACtC,MAAM66B,EAAOl/B,EAAMqE,GACnB,GAAuB,MAAnB66B,EAAK7hB,OAAO,GACd,SAEF,GAAa,YAAT6hB,EAAoB,CACtB4W,EAAWjpC,QAAQ9M,KAAK82C,gBAAgB/6B,EAAQqZ,IAChD,SAEF,MAAMp0B,EAAQo0B,EAAO+J,GACrB,IAAI5J,EAAY8d,EAAQlU,GACxB,MAAMuV,EAAM2B,EAAclI,IAAIhP,GAC9B,GAAI5J,EAAW,CACb,GAAImf,GAAOnf,EAAU9qB,SAAU,CAC7B8qB,EAAUwhB,OAAOrC,EAAK1zC,EAAOkT,GAC7B,SAEAqhB,EAAU6e,SAGTM,GAAQA,EAAI5B,UAIjBO,EAAQlU,GAAQ5J,EAAY,IAAI,GAAUmf,EAAK34B,EAAQojB,EAAMn+B,GAC7D+0C,EAAWjpC,KAAKyoB,IAJdxZ,EAAOojB,GAAQn+B,EAMnB,OAAO+0C,EAET,OAAOh6B,EAAQqZ,GACb,GAA8B,IAA1Bp1B,KAAKm2C,YAAYt4B,KAEnB,YADApc,OAAOoyB,OAAO9X,EAAQqZ,GAGxB,MAAM2gB,EAAa/1C,KAAKy2C,kBAAkB16B,EAAQqZ,GAClD,OAAI2gB,EAAW90C,QACbozC,GAASp/B,IAAIjV,KAAKuxC,OAAQwE,IACnB,QAFT,GAMJ,SAASY,GAASZ,EAAYF,GAC5B,MAAMxC,EAAU,GACVj4B,EAAO3Z,OAAO2Z,KAAKy6B,GACzB,IAAK,IAAIvxC,EAAI,EAAGA,EAAI8W,EAAKna,OAAQqD,IAAK,CACpC,MAAM0yC,EAAOjB,EAAW36B,EAAK9W,IACzB0yC,GAAQA,EAAKvsC,UACf4oC,EAAQvmC,KAAKkqC,EAAKC,QAGtB,OAAOzB,QAAQ0B,IAAI7D,GAErB,SAASmD,GAAqBz6B,EAAQw6B,GACpC,IAAKA,EACH,OAEF,IAAItuC,EAAU8T,EAAO9T,QACrB,GAAKA,EAOL,OAHIA,EAAQyuC,UACV36B,EAAO9T,QAAUA,EAAUxG,OAAOoyB,OAAO,GAAI5rB,EAAS,CAACyuC,SAAS,EAAOE,YAAa,MAE/E3uC,EANL8T,EAAO9T,QAAUsuC,EASrB,SAASY,GAAU/f,EAAOggB,GACxB,MAAMza,EAAOvF,GAASA,EAAMnvB,SAAW,GACjCiT,EAAUyhB,EAAKzhB,QACfgF,OAAmBuG,IAAbkW,EAAKzc,IAAoBk3B,EAAkB,EACjDj3B,OAAmBsG,IAAbkW,EAAKxc,IAAoBi3B,EAAkB,EACvD,MAAO,CACL39B,MAAOyB,EAAUiF,EAAMD,EACvBxG,IAAKwB,EAAUgF,EAAMC,GAGzB,SAASk3B,GAAYC,EAAQC,EAAQH,GACnC,IAAwB,IAApBA,EACF,OAAO,EAET,MAAM7sC,EAAI4sC,GAAUG,EAAQF,GACtB13B,EAAIy3B,GAAUI,EAAQH,GAC5B,MAAO,CACL1b,IAAKhc,EAAEhG,IACPG,MAAOtP,EAAEmP,IACTiiB,OAAQjc,EAAEjG,MACVG,KAAMrP,EAAEkP,OAGZ,SAAS+9B,GAAOx2C,GACd,IAAImhB,EAAGiE,EAAGxI,EAAG2G,EASb,OARIlK,GAASrZ,IACXmhB,EAAInhB,EAAM06B,IACVtV,EAAIplB,EAAM6Y,MACV+D,EAAI5c,EAAM26B,OACVpX,EAAIvjB,EAAM4Y,MAEVuI,EAAIiE,EAAIxI,EAAI2G,EAAIvjB,EAEX,CACL06B,IAAKvZ,EACLtI,MAAOuM,EACPuV,OAAQ/d,EACRhE,KAAM2K,EACNpkB,UAAoB,IAAVa,GAGd,SAASy2C,GAAwB5hB,EAAO6hB,GACtC,MAAMt8B,EAAO,GACPu8B,EAAW9hB,EAAM+hB,uBAAuBF,GAC9C,IAAIpzC,EAAGkX,EACP,IAAKlX,EAAI,EAAGkX,EAAOm8B,EAAS12C,OAAQqD,EAAIkX,IAAQlX,EAC9C8W,EAAKtO,KAAK6qC,EAASrzC,GAAGhD,OAExB,OAAO8Z,EAET,SAASy8B,GAAWC,EAAO92C,EAAO+2C,EAAS9vC,EAAU,IACnD,MAAMmT,EAAO08B,EAAM18B,KACb48B,EAA8B,WAAjB/vC,EAAQ2uB,KAC3B,IAAItyB,EAAGkX,EAAMG,EAAcs8B,EAC3B,GAAc,OAAVj3C,EAAJ,CAGA,IAAKsD,EAAI,EAAGkX,EAAOJ,EAAKna,OAAQqD,EAAIkX,IAAQlX,EAAG,CAE7C,GADAqX,GAAgBP,EAAK9W,GACjBqX,IAAiBo8B,EAAS,CAC5B,GAAI9vC,EAAQivC,IACV,SAEF,MAEFe,EAAaH,EAAM1iB,OAAOzZ,GACtBrB,GAAe29B,KAAgBD,GAAyB,IAAVh3C,GAAe0d,GAAK1d,KAAW0d,GAAKu5B,MACpFj3C,GAASi3C,GAGb,OAAOj3C,GAET,SAASk3C,GAAyBn2C,GAChC,MAAMqZ,EAAO3Z,OAAO2Z,KAAKrZ,GACnBo2C,EAAQ,IAAIp3C,MAAMqa,EAAKna,QAC7B,IAAIqD,EAAGkX,EAAMpT,EACb,IAAK9D,EAAI,EAAGkX,EAAOJ,EAAKna,OAAQqD,EAAIkX,IAAQlX,EAC1C8D,EAAMgT,EAAK9W,GACX6zC,EAAM7zC,GAAK,CACTiG,EAAGnC,EACHsX,EAAG3d,EAAKqG,IAGZ,OAAO+vC,EAET,SAASC,GAAUhhB,EAAO+O,GACxB,MAAMkS,EAAUjhB,GAASA,EAAMnvB,QAAQowC,QACvC,OAAOA,QAAwB5xB,IAAZ4xB,QAAwC5xB,IAAf0f,EAAK2R,MAEnD,SAASQ,GAAYC,EAAYC,EAAYrS,GAC3C,MAAO,GAAGoS,EAAW52C,MAAM62C,EAAW72C,MAAMwkC,EAAK2R,OAAS3R,EAAK58B,OAEjE,SAASkvC,GAAcrhB,GACrB,MAAM,IAAClX,EAAG,IAAEC,EAAG,WAAEu4B,EAAU,WAAEC,GAAcvhB,EAAMqhB,gBACjD,MAAO,CACLv4B,IAAKw4B,EAAax4B,EAAM1W,OAAOovC,kBAC/Bz4B,IAAKw4B,EAAax4B,EAAM3W,OAAO4U,mBAGnC,SAASy6B,GAAiBC,EAAQC,EAAUC,GAC1C,MAAMC,EAAWH,EAAOC,KAAcD,EAAOC,GAAY,IACzD,OAAOE,EAASD,KAAgBC,EAASD,GAAc,IAEzD,SAASE,GAAoBpB,EAAOqB,EAAQC,EAAU7vC,GACpD,IAAK,MAAM48B,KAAQgT,EAAOE,wBAAwB9vC,GAAM2R,UAAW,CACjE,MAAMla,EAAQ82C,EAAM3R,EAAK7kC,OACzB,GAAK83C,GAAYp4C,EAAQ,IAAQo4C,GAAYp4C,EAAQ,EACnD,OAAOmlC,EAAK7kC,MAGhB,OAAO,KAET,SAASg4C,GAAaC,EAAYhT,GAChC,MAAM,MAAC1Q,EAAO2jB,YAAarT,GAAQoT,EAC7BT,EAASjjB,EAAM4jB,UAAY5jB,EAAM4jB,QAAU,KAC3C,OAACpT,EAAM,OAAE8S,EAAQ73C,MAAOqa,GAAgBwqB,EACxCuT,EAAQrT,EAAOsT,KACfC,EAAQT,EAAOQ,KACfvxC,EAAMkwC,GAAYjS,EAAQ8S,EAAQhT,GAClC3qB,EAAO+qB,EAAOtlC,OACpB,IAAI62C,EACJ,IAAK,IAAIxzC,EAAI,EAAGA,EAAIkX,IAAQlX,EAAG,CAC7B,MAAMlD,EAAOmlC,EAAOjiC,IACb,CAACo1C,GAAQp4C,EAAO,CAACs4C,GAAQ54C,GAASI,EACnCy4C,EAAaz4C,EAAKq4C,UAAYr4C,EAAKq4C,QAAU,IACnD3B,EAAQ+B,EAAWD,GAASf,GAAiBC,EAAQ1wC,EAAK9G,GAC1Dw2C,EAAMn8B,GAAgB3a,EACtB82C,EAAMgC,KAAOZ,GAAoBpB,EAAOqB,GAAQ,EAAMhT,EAAK58B,MAC3DuuC,EAAMiC,QAAUb,GAAoBpB,EAAOqB,GAAQ,EAAOhT,EAAK58B,OAGnE,SAASywC,GAAgBnkB,EAAO8jB,GAC9B,MAAMtiB,EAASxB,EAAMwB,OACrB,OAAO51B,OAAO2Z,KAAKic,GAAQpzB,OAAOmE,GAAOivB,EAAOjvB,GAAKuxC,OAASA,GAAMM,QAEtE,SAASC,GAAqBxU,EAAQpkC,GACpC,OAAO8+B,GAAcsF,EACnB,CACEj7B,QAAQ,EACR0vC,aAAS1zB,EACT9K,aAAcra,EACdA,QACAs1B,KAAM,UACNrtB,KAAM,YAIZ,SAAS6wC,GAAkB1U,EAAQpkC,EAAOwM,GACxC,OAAOsyB,GAAcsF,EAAQ,CAC3Bj7B,QAAQ,EACR4vC,UAAW/4C,EACXilC,YAAQ9f,EACR6zB,SAAK7zB,EACL3Y,UACAxM,QACAs1B,KAAM,UACNrtB,KAAM,SAGV,SAASgxC,GAAYpU,EAAMrE,GACzB,MAAMnmB,EAAewqB,EAAKoT,WAAWj4C,MAC/Bq4C,EAAOxT,EAAKgT,QAAUhT,EAAKgT,OAAOQ,KACxC,GAAKA,EAAL,CAGA7X,EAAQA,GAASqE,EAAKqU,QACtB,IAAK,MAAMjU,KAAUzE,EAAO,CAC1B,MAAMgX,EAASvS,EAAOkT,QACtB,IAAKX,QAA2BryB,IAAjBqyB,EAAOa,SAAsDlzB,IAA/BqyB,EAAOa,GAAMh+B,GACxD,cAEKm9B,EAAOa,GAAMh+B,KAGxB,MAAM8+B,GAAsB7jB,GAAkB,UAATA,GAA6B,SAATA,EACnD8jB,GAAmB,CAACC,EAAQC,IAAWA,EAASD,EAASl5C,OAAOoyB,OAAO,GAAI8mB,GAC3EE,GAAc,CAACC,EAAU3U,EAAMtQ,IAAUilB,IAAa3U,EAAK4U,QAAU5U,EAAK6U,UAC3E,CAAC5/B,KAAMq8B,GAAwB5hB,GAAO,GAAOT,OAAQ,MAC1D,MAAM,GACJ,YAAYS,EAAOla,GACjB3b,KAAK61B,MAAQA,EACb71B,KAAKi7C,KAAOplB,EAAMU,IAClBv2B,KAAKsB,MAAQqa,EACb3b,KAAKk7C,gBAAkB,GACvBl7C,KAAKw5C,YAAcx5C,KAAKm7C,UACxBn7C,KAAKo7C,MAAQp7C,KAAKw5C,YAAYjwC,KAC9BvJ,KAAKiI,aAAUwe,EACfzmB,KAAKsmC,UAAW,EAChBtmC,KAAKq7C,WAAQ50B,EACbzmB,KAAKs7C,iBAAc70B,EACnBzmB,KAAKu7C,oBAAiB90B,EACtBzmB,KAAKw7C,gBAAa/0B,EAClBzmB,KAAKy7C,gBAAah1B,EAClBzmB,KAAK07C,qBAAsB,EAC3B17C,KAAK27C,oBAAqB,EAC1B37C,KAAK47C,cAAWn1B,EAChBzmB,KAAK67C,UAAY,GACjB77C,KAAK87C,aAEP,aACE,MAAM3V,EAAOnmC,KAAKw5C,YAClBx5C,KAAKo2C,YACLp2C,KAAK+7C,aACL5V,EAAK6U,SAAW5C,GAAUjS,EAAKgT,OAAQhT,GACvCnmC,KAAKg8C,cAEP,YAAYrgC,GACN3b,KAAKsB,QAAUqa,GACjB4+B,GAAYv6C,KAAKw5C,aAEnBx5C,KAAKsB,MAAQqa,EAEf,aACE,MAAMka,EAAQ71B,KAAK61B,MACbsQ,EAAOnmC,KAAKw5C,YACZW,EAAUn6C,KAAKi8C,aACfC,EAAW,CAACvC,EAAMpvC,EAAGmV,EAAG0G,IAAe,MAATuzB,EAAepvC,EAAa,MAATovC,EAAevzB,EAAI1G,EACpEy8B,EAAMhW,EAAKiW,QAAU1hC,GAAey/B,EAAQiC,QAASpC,GAAgBnkB,EAAO,MAC5EwmB,EAAMlW,EAAKmW,QAAU5hC,GAAey/B,EAAQmC,QAAStC,GAAgBnkB,EAAO,MAC5E0mB,EAAMpW,EAAKqW,QAAU9hC,GAAey/B,EAAQqC,QAASxC,GAAgBnkB,EAAO,MAC5Ea,EAAYyP,EAAKzP,UACjB+lB,EAAMtW,EAAKuW,QAAUR,EAASxlB,EAAWylB,EAAKE,EAAKE,GACnDI,EAAMxW,EAAKyW,QAAUV,EAASxlB,EAAW2lB,EAAKF,EAAKI,GACzDpW,EAAKmR,OAASt3C,KAAK68C,cAAcV,GACjChW,EAAKoR,OAASv3C,KAAK68C,cAAcR,GACjClW,EAAK2W,OAAS98C,KAAK68C,cAAcN,GACjCpW,EAAKE,OAASrmC,KAAK68C,cAAcJ,GACjCtW,EAAKgT,OAASn5C,KAAK68C,cAAcF,GAEnC,aACE,OAAO38C,KAAK61B,MAAM9zB,KAAK2zB,SAAS11B,KAAKsB,OAEvC,UACE,OAAOtB,KAAK61B,MAAMknB,eAAe/8C,KAAKsB,OAExC,cAAc07C,GACZ,OAAOh9C,KAAK61B,MAAMwB,OAAO2lB,GAE3B,eAAe5lB,GACb,MAAM+O,EAAOnmC,KAAKw5C,YAClB,OAAOpiB,IAAU+O,EAAKE,OAClBF,EAAKgT,OACLhT,EAAKE,OAEX,QACErmC,KAAKizC,QAAQ,SAEf,WACE,MAAM9M,EAAOnmC,KAAKw5C,YACdx5C,KAAKq7C,OACP1Z,GAAoB3hC,KAAKq7C,MAAOr7C,MAE9BmmC,EAAK6U,UACPT,GAAYpU,GAGhB,aACE,MAAMgU,EAAUn6C,KAAKi8C,aACfl6C,EAAOo4C,EAAQp4C,OAASo4C,EAAQp4C,KAAO,IACvCs5C,EAAQr7C,KAAKq7C,MACnB,GAAIhhC,GAAStY,GACX/B,KAAKq7C,MAAQnD,GAAyBn2C,QACjC,GAAIs5C,IAAUt5C,EAAM,CACzB,GAAIs5C,EAAO,CACT1Z,GAAoB0Z,EAAOr7C,MAC3B,MAAMmmC,EAAOnmC,KAAKw5C,YAClBe,GAAYpU,GACZA,EAAKqU,QAAU,GAEbz4C,GAAQN,OAAOw7C,aAAal7C,IAC9Bi/B,GAAkBj/B,EAAM/B,MAE1BA,KAAK67C,UAAY,GACjB77C,KAAKq7C,MAAQt5C,GAGjB,cACE,MAAMokC,EAAOnmC,KAAKw5C,YAClBx5C,KAAKk9C,aACDl9C,KAAKm9C,qBACPhX,EAAKgU,QAAU,IAAIn6C,KAAKm9C,oBAG5B,sBAAsBC,GACpB,MAAMjX,EAAOnmC,KAAKw5C,YACZW,EAAUn6C,KAAKi8C,aACrB,IAAIoB,GAAe,EACnBr9C,KAAKk9C,aACL,MAAMI,EAAanX,EAAK6U,SACxB7U,EAAK6U,SAAW5C,GAAUjS,EAAKgT,OAAQhT,GACnCA,EAAK2R,QAAUqC,EAAQrC,QACzBuF,GAAe,EACf9C,GAAYpU,GACZA,EAAK2R,MAAQqC,EAAQrC,OAEvB93C,KAAKu9C,gBAAgBH,IACjBC,GAAgBC,IAAenX,EAAK6U,WACtC1B,GAAat5C,KAAMmmC,EAAKqU,SAG5B,YACE,MAAMtE,EAASl2C,KAAK61B,MAAMqgB,OACpBsH,EAAYtH,EAAOuH,iBAAiBz9C,KAAKo7C,OACzCjZ,EAAS+T,EAAOwH,gBAAgB19C,KAAKi8C,aAAcuB,GAAW,GACpEx9C,KAAKiI,QAAUiuC,EAAOyH,eAAexb,EAAQniC,KAAK+5B,cAClD/5B,KAAKsmC,SAAWtmC,KAAKiI,QAAQivB,QAC7Bl3B,KAAKk7C,gBAAkB,GAEzB,MAAMzhC,EAAO2sB,GACX,MAAOoT,YAAarT,EAAMkV,MAAOt5C,GAAQ/B,MACnC,OAACqmC,EAAM,SAAE2U,GAAY7U,EACrBuT,EAAQrT,EAAOsT,KACrB,IAEIr1C,EAAGusC,EAAKtK,EAFRqX,EAAmB,IAAVnkC,GAAe2sB,IAAUrkC,EAAKd,QAAgBklC,EAAK0X,QAC5DtU,EAAO9vB,EAAQ,GAAK0sB,EAAKqU,QAAQ/gC,EAAQ,GAE7C,IAAsB,IAAlBzZ,KAAKsmC,SACPH,EAAKqU,QAAUz4C,EACfokC,EAAK0X,SAAU,EACftX,EAASxkC,MACJ,CAEHwkC,EADEpsB,GAAQpY,EAAK0X,IACNzZ,KAAK89C,eAAe3X,EAAMpkC,EAAM0X,EAAO2sB,GACvC/rB,GAAStY,EAAK0X,IACdzZ,KAAK+9C,gBAAgB5X,EAAMpkC,EAAM0X,EAAO2sB,GAExCpmC,KAAKg+C,mBAAmB7X,EAAMpkC,EAAM0X,EAAO2sB,GAEtD,MAAM6X,EAA6B,IAAqB,OAAfpN,EAAI6I,IAAoBnQ,GAAQsH,EAAI6I,GAASnQ,EAAKmQ,GAC3F,IAAKp1C,EAAI,EAAGA,EAAI8hC,IAAS9hC,EACvB6hC,EAAKqU,QAAQl2C,EAAImV,GAASo3B,EAAMtK,EAAOjiC,GACnCs5C,IACEK,MACFL,GAAS,GAEXrU,EAAOsH,GAGX1K,EAAK0X,QAAUD,EAEb5C,GACF1B,GAAat5C,KAAMumC,GAGvB,mBAAmBJ,EAAMpkC,EAAM0X,EAAO2sB,GACpC,MAAM,OAACC,EAAM,OAAE8S,GAAUhT,EACnBuT,EAAQrT,EAAOsT,KACfC,EAAQT,EAAOQ,KACfuE,EAAS7X,EAAO8X,YAChBC,EAAc/X,IAAW8S,EACzB5S,EAAS,IAAIxlC,MAAMqlC,GACzB,IAAI9hC,EAAGkX,EAAMla,EACb,IAAKgD,EAAI,EAAGkX,EAAO4qB,EAAO9hC,EAAIkX,IAAQlX,EACpChD,EAAQgD,EAAImV,EACZ8sB,EAAOjiC,GAAK,CACV,CAACo1C,GAAQ0E,GAAe/X,EAAOG,MAAM0X,EAAO58C,GAAQA,GACpD,CAACs4C,GAAQT,EAAO3S,MAAMzkC,EAAKT,GAAQA,IAGvC,OAAOilC,EAET,eAAeJ,EAAMpkC,EAAM0X,EAAO2sB,GAChC,MAAM,OAACkR,EAAM,OAAEC,GAAUpR,EACnBI,EAAS,IAAIxlC,MAAMqlC,GACzB,IAAI9hC,EAAGkX,EAAMla,EAAOF,EACpB,IAAKkD,EAAI,EAAGkX,EAAO4qB,EAAO9hC,EAAIkX,IAAQlX,EACpChD,EAAQgD,EAAImV,EACZrY,EAAOW,EAAKT,GACZilC,EAAOjiC,GAAK,CACViG,EAAG+sC,EAAO9Q,MAAMplC,EAAK,GAAIE,GACzBoe,EAAG63B,EAAO/Q,MAAMplC,EAAK,GAAIE,IAG7B,OAAOilC,EAET,gBAAgBJ,EAAMpkC,EAAM0X,EAAO2sB,GACjC,MAAM,OAACkR,EAAM,OAAEC,GAAUpR,GACnB,SAACkY,EAAW,IAAG,SAAEC,EAAW,KAAOt+C,KAAKsmC,SACxCC,EAAS,IAAIxlC,MAAMqlC,GACzB,IAAI9hC,EAAGkX,EAAMla,EAAOF,EACpB,IAAKkD,EAAI,EAAGkX,EAAO4qB,EAAO9hC,EAAIkX,IAAQlX,EACpChD,EAAQgD,EAAImV,EACZrY,EAAOW,EAAKT,GACZilC,EAAOjiC,GAAK,CACViG,EAAG+sC,EAAO9Q,MAAMvpB,GAAiB7b,EAAMi9C,GAAW/8C,GAClDoe,EAAG63B,EAAO/Q,MAAMvpB,GAAiB7b,EAAMk9C,GAAWh9C,IAGtD,OAAOilC,EAET,UAAUjlC,GACR,OAAOtB,KAAKw5C,YAAYgB,QAAQl5C,GAElC,eAAeA,GACb,OAAOtB,KAAKw5C,YAAYz3C,KAAKT,GAE/B,WAAW81B,EAAOmP,EAAQ3P,GACxB,MAAMf,EAAQ71B,KAAK61B,MACbsQ,EAAOnmC,KAAKw5C,YACZx4C,EAAQulC,EAAOnP,EAAMuiB,MACrB7B,EAAQ,CACZ18B,KAAMq8B,GAAwB5hB,GAAO,GACrCT,OAAQmR,EAAOkT,QAAQriB,EAAMuiB,OAE/B,OAAO9B,GAAWC,EAAO92C,EAAOmlC,EAAK7kC,MAAO,CAACs1B,SAE/C,sBAAsBhY,EAAOwY,EAAOmP,EAAQuR,GAC1C,MAAMyG,EAAchY,EAAOnP,EAAMuiB,MACjC,IAAI34C,EAAwB,OAAhBu9C,EAAuBC,IAAMD,EACzC,MAAMnpB,EAAS0iB,GAASvR,EAAOkT,QAAQriB,EAAMuiB,MACzC7B,GAAS1iB,IACX0iB,EAAM1iB,OAASA,EACfp0B,EAAQ62C,GAAWC,EAAOyG,EAAav+C,KAAKw5C,YAAYl4C,QAE1Dsd,EAAMsB,IAAMxI,KAAKwI,IAAItB,EAAMsB,IAAKlf,GAChC4d,EAAMuB,IAAMzI,KAAKyI,IAAIvB,EAAMuB,IAAKnf,GAElC,UAAUo2B,EAAO0jB,GACf,MAAM3U,EAAOnmC,KAAKw5C,YACZgB,EAAUrU,EAAKqU,QACfoD,EAASzX,EAAK0X,SAAWzmB,IAAU+O,EAAKE,OACxC7qB,EAAOg/B,EAAQv5C,OACfw9C,EAAaz+C,KAAK0+C,eAAetnB,GACjC0gB,EAAQ+C,GAAYC,EAAU3U,EAAMnmC,KAAK61B,OACzCjX,EAAQ,CAACsB,IAAK1W,OAAO4U,kBAAmB+B,IAAK3W,OAAOovC,oBACnD14B,IAAKy+B,EAAUx+B,IAAKy+B,GAAYnG,GAAcgG,GACrD,IAAIn6C,EAAGiiC,EACP,SAASsY,IACPtY,EAASiU,EAAQl2C,GACjB,MAAM2zC,EAAa1R,EAAOkY,EAAW9E,MACrC,OAAQr/B,GAAeisB,EAAOnP,EAAMuiB,QAAUgF,EAAW1G,GAAc2G,EAAW3G,EAEpF,IAAK3zC,EAAI,EAAGA,EAAIkX,IAAQlX,EACtB,IAAIu6C,MAGJ7+C,KAAK8+C,sBAAsBlgC,EAAOwY,EAAOmP,EAAQuR,GAC7C8F,GACF,MAGJ,GAAIA,EACF,IAAKt5C,EAAIkX,EAAO,EAAGlX,GAAK,IAAKA,EAC3B,IAAIu6C,IAAJ,CAGA7+C,KAAK8+C,sBAAsBlgC,EAAOwY,EAAOmP,EAAQuR,GACjD,MAGJ,OAAOl5B,EAET,mBAAmBwY,GACjB,MAAMmP,EAASvmC,KAAKw5C,YAAYgB,QAC1BplB,EAAS,GACf,IAAI9wB,EAAGkX,EAAMxa,EACb,IAAKsD,EAAI,EAAGkX,EAAO+qB,EAAOtlC,OAAQqD,EAAIkX,IAAQlX,EAC5CtD,EAAQulC,EAAOjiC,GAAG8yB,EAAMuiB,MACpBr/B,GAAetZ,IACjBo0B,EAAOtoB,KAAK9L,GAGhB,OAAOo0B,EAET,iBACE,OAAO,EAET,iBAAiB9zB,GACf,MAAM6kC,EAAOnmC,KAAKw5C,YACZnT,EAASF,EAAKE,OACd8S,EAAShT,EAAKgT,OACd5S,EAASvmC,KAAK++C,UAAUz9C,GAC9B,MAAO,CACL09C,MAAO3Y,EAAS,GAAKA,EAAO4Y,iBAAiB1Y,EAAOF,EAAOsT,OAAS,GACpE34C,MAAOm4C,EAAS,GAAKA,EAAO8F,iBAAiB1Y,EAAO4S,EAAOQ,OAAS,IAGxE,QAAQ/iB,GACN,MAAMuP,EAAOnmC,KAAKw5C,YAClBx5C,KAAK+2C,OAAOngB,GAAQ,WACpBuP,EAAK+Y,MAAQ1H,GAAO98B,GAAe1a,KAAKiI,QAAQ4zB,KAAMwb,GAAYlR,EAAKmR,OAAQnR,EAAKoR,OAAQv3C,KAAKm/C,oBAEnG,OAAOvoB,IACP,OACE,MAAML,EAAMv2B,KAAKi7C,KACXplB,EAAQ71B,KAAK61B,MACbsQ,EAAOnmC,KAAKw5C,YACZxjB,EAAWmQ,EAAKpkC,MAAQ,GACxBy5B,EAAO3F,EAAMupB,UACb30C,EAAS,GACTgP,EAAQzZ,KAAKw7C,YAAc,EAC3BpV,EAAQpmC,KAAKy7C,YAAezlB,EAAS/0B,OAASwY,EAC9C8d,EAA0Bv3B,KAAKiI,QAAQsvB,wBAC7C,IAAIjzB,EAIJ,IAHI6hC,EAAKgU,SACPhU,EAAKgU,QAAQ7G,KAAK/c,EAAKiF,EAAM/hB,EAAO2sB,GAEjC9hC,EAAImV,EAAOnV,EAAImV,EAAQ2sB,IAAS9hC,EAAG,CACtC,MAAMwJ,EAAUkoB,EAAS1xB,GACrBwJ,EAAQitC,SAGRjtC,EAAQrD,QAAU8sB,EACpB9sB,EAAOqC,KAAKgB,GAEZA,EAAQwlC,KAAK/c,EAAKiF,IAGtB,IAAKl3B,EAAI,EAAGA,EAAImG,EAAOxJ,SAAUqD,EAC/BmG,EAAOnG,GAAGgvC,KAAK/c,EAAKiF,GAGxB,SAASl6B,EAAOmJ,GACd,MAAMmsB,EAAOnsB,EAAS,SAAW,UACjC,YAAiBgc,IAAVnlB,GAAuBtB,KAAKw5C,YAAYW,QAC3Cn6C,KAAKq/C,6BAA6BzoB,GAClC52B,KAAKs/C,0BAA0Bh+C,GAAS,EAAGs1B,GAEjD,WAAWt1B,EAAOmJ,EAAQmsB,GACxB,MAAMujB,EAAUn6C,KAAKi8C,aACrB,IAAIrmB,EACJ,GAAIt0B,GAAS,GAAKA,EAAQtB,KAAKw5C,YAAYz3C,KAAKd,OAAQ,CACtD,MAAM6M,EAAU9N,KAAKw5C,YAAYz3C,KAAKT,GACtCs0B,EAAU9nB,EAAQ8tC,WACf9tC,EAAQ8tC,SAAWxB,GAAkBp6C,KAAK+5B,aAAcz4B,EAAOwM,IAClE8nB,EAAQ2Q,OAASvmC,KAAK++C,UAAUz9C,GAChCs0B,EAAQ0kB,IAAMH,EAAQp4C,KAAKT,GAC3Bs0B,EAAQt0B,MAAQs0B,EAAQykB,UAAY/4C,OAEpCs0B,EAAU51B,KAAK47C,WACZ57C,KAAK47C,SAAW1B,GAAqBl6C,KAAK61B,MAAMkE,aAAc/5B,KAAKsB,QACtEs0B,EAAQukB,QAAUA,EAClBvkB,EAAQt0B,MAAQs0B,EAAQja,aAAe3b,KAAKsB,MAI9C,OAFAs0B,EAAQnrB,SAAWA,EACnBmrB,EAAQgB,KAAOA,EACRhB,EAET,6BAA6BgB,GAC3B,OAAO52B,KAAKu/C,uBAAuBv/C,KAAKm9C,mBAAmBx7C,GAAIi1B,GAEjE,0BAA0Bt1B,EAAOs1B,GAC/B,OAAO52B,KAAKu/C,uBAAuBv/C,KAAKw/C,gBAAgB79C,GAAIi1B,EAAMt1B,GAEpE,uBAAuBm+C,EAAa7oB,EAAO,UAAWt1B,GACpD,MAAMmJ,EAAkB,WAATmsB,EACToC,EAAQh5B,KAAKk7C,gBACbnN,EAAW0R,EAAc,IAAM7oB,EAC/B+jB,EAAS3hB,EAAM+U,GACf2R,EAAU1/C,KAAK07C,qBAAuBl+B,GAAQlc,GACpD,GAAIq5C,EACF,OAAOD,GAAiBC,EAAQ+E,GAElC,MAAMxJ,EAASl2C,KAAK61B,MAAMqgB,OACpBsH,EAAYtH,EAAOyJ,wBAAwB3/C,KAAKo7C,MAAOqE,GACvDrd,EAAW33B,EAAS,CAAIg1C,EAAH,QAAuB,QAASA,EAAa,IAAM,CAACA,EAAa,IACtFtd,EAAS+T,EAAOwH,gBAAgB19C,KAAKi8C,aAAcuB,GACnDoC,EAAQn+C,OAAO2Z,KAAK8c,GAASlC,SAASypB,IACtC7pB,EAAU,IAAM51B,KAAK+5B,WAAWz4B,EAAOmJ,GACvC2qB,EAAS8gB,EAAO2J,oBAAoB1d,EAAQyd,EAAOhqB,EAASwM,GAKlE,OAJIhN,EAAOshB,UACTthB,EAAOshB,QAAUgJ,EACjB1mB,EAAM+U,GAAYtsC,OAAOC,OAAOg5C,GAAiBtlB,EAAQsqB,KAEpDtqB,EAET,mBAAmB9zB,EAAOw+C,EAAYr1C,GACpC,MAAMorB,EAAQ71B,KAAK61B,MACbmD,EAAQh5B,KAAKk7C,gBACbnN,EAAW,aAAa+R,EACxBnF,EAAS3hB,EAAM+U,GACrB,GAAI4M,EACF,OAAOA,EAET,IAAI1yC,EACJ,IAAgC,IAA5B4tB,EAAM5tB,QAAQstB,UAAqB,CACrC,MAAM2gB,EAASl2C,KAAK61B,MAAMqgB,OACpBsH,EAAYtH,EAAO6J,0BAA0B//C,KAAKo7C,MAAO0E,GACzD3d,EAAS+T,EAAOwH,gBAAgB19C,KAAKi8C,aAAcuB,GACzDv1C,EAAUiuC,EAAOyH,eAAexb,EAAQniC,KAAK+5B,WAAWz4B,EAAOmJ,EAAQq1C,IAEzE,MAAM/J,EAAa,IAAI,GAAWlgB,EAAO5tB,GAAWA,EAAQ8tC,YAI5D,OAHI9tC,GAAWA,EAAQy6B,aACrB1J,EAAM+U,GAAYtsC,OAAOC,OAAOq0C,IAE3BA,EAET,iBAAiB9tC,GACf,GAAKA,EAAQyuC,QAGb,OAAO12C,KAAKu7C,iBAAmBv7C,KAAKu7C,eAAiB95C,OAAOoyB,OAAO,GAAI5rB,IAEzE,eAAe2uB,EAAMopB,GACnB,OAAQA,GAAiBvF,GAAmB7jB,IAAS52B,KAAK61B,MAAMoqB,oBAElE,cAAcnyC,EAASxM,EAAOu0C,EAAYjf,GACpC6jB,GAAmB7jB,GACrBn1B,OAAOoyB,OAAO/lB,EAAS+nC,GAEvB71C,KAAKkgD,mBAAmB5+C,EAAOs1B,GAAMmgB,OAAOjpC,EAAS+nC,GAGzD,oBAAoBmK,EAAeppB,EAAM2f,GACnCyJ,IAAkBvF,GAAmB7jB,IACvC52B,KAAKkgD,wBAAmBz5B,EAAWmQ,GAAMmgB,OAAOiJ,EAAezJ,GAGnE,UAAUzoC,EAASxM,EAAOs1B,EAAMnsB,GAC9BqD,EAAQrD,OAASA,EACjB,MAAMxC,EAAUjI,KAAKoqC,SAAS9oC,EAAOmJ,GACrCzK,KAAKkgD,mBAAmB5+C,EAAOs1B,EAAMnsB,GAAQssC,OAAOjpC,EAAS,CAC3D7F,SAAWwC,GAAUzK,KAAKmgD,iBAAiBl4C,IAAaA,IAG5D,iBAAiB6F,EAAS6N,EAAcra,GACtCtB,KAAKogD,UAAUtyC,EAASxM,EAAO,UAAU,GAE3C,cAAcwM,EAAS6N,EAAcra,GACnCtB,KAAKogD,UAAUtyC,EAASxM,EAAO,UAAU,GAE3C,2BACE,MAAMwM,EAAU9N,KAAKw5C,YAAYW,QAC7BrsC,GACF9N,KAAKogD,UAAUtyC,OAAS2Y,EAAW,UAAU,GAGjD,wBACE,MAAM3Y,EAAU9N,KAAKw5C,YAAYW,QAC7BrsC,GACF9N,KAAKogD,UAAUtyC,OAAS2Y,EAAW,UAAU,GAGjD,gBAAgB22B,GACd,MAAMr7C,EAAO/B,KAAKq7C,MACZrlB,EAAWh2B,KAAKw5C,YAAYz3C,KAClC,IAAK,MAAOw/B,EAAQ8e,EAAMC,KAAStgD,KAAK67C,UACtC77C,KAAKuhC,GAAQ8e,EAAMC,GAErBtgD,KAAK67C,UAAY,GACjB,MAAM0E,EAAUvqB,EAAS/0B,OACnBu/C,EAAUz+C,EAAKd,OACfmlC,EAAQ1uB,KAAKwI,IAAIsgC,EAASD,GAC5Bna,GACFpmC,KAAKwmC,MAAM,EAAGJ,GAEZoa,EAAUD,EACZvgD,KAAKygD,gBAAgBF,EAASC,EAAUD,EAASnD,GACxCoD,EAAUD,GACnBvgD,KAAK0gD,gBAAgBF,EAASD,EAAUC,GAG5C,gBAAgB/mC,EAAO2sB,EAAOgX,GAAmB,GAC/C,MAAMjX,EAAOnmC,KAAKw5C,YACZz3C,EAAOokC,EAAKpkC,KACZ2X,EAAMD,EAAQ2sB,EACpB,IAAI9hC,EACJ,MAAMq8C,EAAQrb,IAEZ,IADAA,EAAIrkC,QAAUmlC,EACT9hC,EAAIghC,EAAIrkC,OAAS,EAAGqD,GAAKoV,EAAKpV,IACjCghC,EAAIhhC,GAAKghC,EAAIhhC,EAAI8hC,IAIrB,IADAua,EAAK5+C,GACAuC,EAAImV,EAAOnV,EAAIoV,IAAOpV,EACzBvC,EAAKuC,GAAK,IAAItE,KAAKw/C,gBAEjBx/C,KAAKsmC,UACPqa,EAAKxa,EAAKqU,SAEZx6C,KAAKwmC,MAAM/sB,EAAO2sB,GACdgX,GACFp9C,KAAK4gD,eAAe7+C,EAAM0X,EAAO2sB,EAAO,SAG5C,eAAet4B,EAAS2L,EAAO2sB,EAAOxP,IACtC,gBAAgBnd,EAAO2sB,GACrB,MAAMD,EAAOnmC,KAAKw5C,YAClB,GAAIx5C,KAAKsmC,SAAU,CACjB,MAAMua,EAAU1a,EAAKqU,QAAQhhB,OAAO/f,EAAO2sB,GACvCD,EAAK6U,UACPT,GAAYpU,EAAM0a,GAGtB1a,EAAKpkC,KAAKy3B,OAAO/f,EAAO2sB,GAE1B,MAAMztB,GACJ,GAAI3Y,KAAKsmC,SACPtmC,KAAK67C,UAAU/uC,KAAK6L,OACf,CACL,MAAO4oB,EAAQ8e,EAAMC,GAAQ3nC,EAC7B3Y,KAAKuhC,GAAQ8e,EAAMC,GAErBtgD,KAAK61B,MAAMirB,aAAah0C,KAAK,CAAC9M,KAAKsB,SAAUqX,IAE/C,cACE,MAAMytB,EAAQ2a,UAAU9/C,OACxBjB,KAAKghD,MAAM,CAAC,kBAAmBhhD,KAAKi8C,aAAal6C,KAAKd,OAASmlC,EAAOA,IAExE,aACEpmC,KAAKghD,MAAM,CAAC,kBAAmBhhD,KAAKw5C,YAAYz3C,KAAKd,OAAS,EAAG,IAEnE,eACEjB,KAAKghD,MAAM,CAAC,kBAAmB,EAAG,IAEpC,cAAcvnC,EAAO2sB,GACfA,GACFpmC,KAAKghD,MAAM,CAAC,kBAAmBvnC,EAAO2sB,IAExC,MAAM6a,EAAWF,UAAU9/C,OAAS,EAChCggD,GACFjhD,KAAKghD,MAAM,CAAC,kBAAmBvnC,EAAOwnC,IAG1C,iBACEjhD,KAAKghD,MAAM,CAAC,kBAAmB,EAAGD,UAAU9/C,UAOhD,SAASigD,GAAkB9pB,EAAO7tB,GAChC,IAAK6tB,EAAM+pB,OAAOC,KAAM,CACtB,MAAMC,EAAejqB,EAAMiiB,wBAAwB9vC,GACnD,IAAI6rB,EAAS,GACb,IAAK,IAAI9wB,EAAI,EAAGkX,EAAO6lC,EAAapgD,OAAQqD,EAAIkX,EAAMlX,IACpD8wB,EAASA,EAAOksB,OAAOD,EAAa/8C,GAAGi1C,WAAWgI,mBAAmBnqB,IAEvEA,EAAM+pB,OAAOC,KAAOvf,GAAazM,EAAO9V,KAAK,CAAC3B,EAAGC,IAAMD,EAAIC,IAE7D,OAAOwZ,EAAM+pB,OAAOC,KAEtB,SAASI,GAAqBrb,GAC5B,MAAM/O,EAAQ+O,EAAKE,OACbjR,EAAS8rB,GAAkB9pB,EAAO+O,EAAK58B,MAC7C,IACIjF,EAAGkX,EAAMimC,EAAMlY,EADfrpB,EAAMkX,EAAMsqB,QAEhB,MAAMC,EAAmB,KACV,QAATF,IAA4B,QAAVA,IAGlBjkC,GAAQ+rB,KACVrpB,EAAMxI,KAAKwI,IAAIA,EAAKxI,KAAKkI,IAAI6hC,EAAOlY,IAASrpB,IAE/CqpB,EAAOkY,IAET,IAAKn9C,EAAI,EAAGkX,EAAO4Z,EAAOn0B,OAAQqD,EAAIkX,IAAQlX,EAC5Cm9C,EAAOrqB,EAAMwqB,iBAAiBxsB,EAAO9wB,IACrCq9C,IAGF,IADApY,OAAO9iB,EACFniB,EAAI,EAAGkX,EAAO4b,EAAMyqB,MAAM5gD,OAAQqD,EAAIkX,IAAQlX,EACjDm9C,EAAOrqB,EAAM0qB,gBAAgBx9C,GAC7Bq9C,IAEF,OAAOzhC,EAET,SAAS6hC,GAAyBzgD,EAAO0gD,EAAO/5C,EAASg6C,GACvD,MAAMC,EAAYj6C,EAAQk6C,aAC1B,IAAItkC,EAAM4V,EAQV,OAPIvZ,GAAcgoC,IAChBrkC,EAAOmkC,EAAM9hC,IAAMjY,EAAQm6C,mBAC3B3uB,EAAQxrB,EAAQo6C,gBAEhBxkC,EAAOqkC,EAAYD,EACnBxuB,EAAQ,GAEH,CACL6uB,MAAOzkC,EAAOokC,EACdxuB,QACAha,MAAOuoC,EAAMO,OAAOjhD,GAAUuc,EAAO,GAGzC,SAAS2kC,GAA0BlhD,EAAO0gD,EAAO/5C,EAASg6C,GACxD,MAAMM,EAASP,EAAMO,OACfd,EAAOc,EAAOjhD,GACpB,IAAIioC,EAAOjoC,EAAQ,EAAIihD,EAAOjhD,EAAQ,GAAK,KACvC6lC,EAAO7lC,EAAQihD,EAAOthD,OAAS,EAAIshD,EAAOjhD,EAAQ,GAAK,KAC3D,MAAMmhD,EAAUx6C,EAAQm6C,mBACX,OAAT7Y,IACFA,EAAOkY,GAAiB,OAATta,EAAgB6a,EAAMtoC,IAAMsoC,EAAMvoC,MAAQ0tB,EAAOsa,IAErD,OAATta,IACFA,EAAOsa,EAAOA,EAAOlY,GAEvB,MAAM9vB,EAAQgoC,GAAQA,EAAO/pC,KAAKwI,IAAIqpB,EAAMpC,IAAS,EAAIsb,EACnD5kC,EAAOnG,KAAKkI,IAAIunB,EAAOoC,GAAQ,EAAIkZ,EACzC,MAAO,CACLH,MAAOzkC,EAAOokC,EACdxuB,MAAOxrB,EAAQo6C,cACf5oC,SAGJ,SAASipC,GAAcC,EAAOvhD,EAAM+3C,EAAQ70C,GAC1C,MAAMs+C,EAAazJ,EAAO3S,MAAMmc,EAAM,GAAIr+C,GACpCu+C,EAAW1J,EAAO3S,MAAMmc,EAAM,GAAIr+C,GAClC4b,EAAMxI,KAAKwI,IAAI0iC,EAAYC,GAC3B1iC,EAAMzI,KAAKyI,IAAIyiC,EAAYC,GACjC,IAAIC,EAAW5iC,EACX6iC,EAAS5iC,EACTzI,KAAKkI,IAAIM,GAAOxI,KAAKkI,IAAIO,KAC3B2iC,EAAW3iC,EACX4iC,EAAS7iC,GAEX9e,EAAK+3C,EAAOQ,MAAQoJ,EACpB3hD,EAAK4hD,QAAU,CACbF,WACAC,SACAtpC,MAAOmpC,EACPlpC,IAAKmpC,EACL3iC,MACAC,OAGJ,SAAS8iC,GAAWN,EAAOvhD,EAAM+3C,EAAQ70C,GAMvC,OALI6V,GAAQwoC,GACVD,GAAcC,EAAOvhD,EAAM+3C,EAAQ70C,GAEnClD,EAAK+3C,EAAOQ,MAAQR,EAAO3S,MAAMmc,EAAOr+C,GAEnClD,EAET,SAAS8hD,GAAsB/c,EAAMpkC,EAAM0X,EAAO2sB,GAChD,MAAMC,EAASF,EAAKE,OACd8S,EAAShT,EAAKgT,OACd+E,EAAS7X,EAAO8X,YAChBC,EAAc/X,IAAW8S,EACzB5S,EAAS,GACf,IAAIjiC,EAAGkX,EAAMpa,EAAMuhD,EACnB,IAAKr+C,EAAImV,EAAO+B,EAAO/B,EAAQ2sB,EAAO9hC,EAAIkX,IAAQlX,EAChDq+C,EAAQ5gD,EAAKuC,GACblD,EAAO,GACPA,EAAKilC,EAAOsT,MAAQyE,GAAe/X,EAAOG,MAAM0X,EAAO55C,GAAIA,GAC3DiiC,EAAOz5B,KAAKm2C,GAAWN,EAAOvhD,EAAM+3C,EAAQ70C,IAE9C,OAAOiiC,EAET,SAAS4c,GAAWC,GAClB,OAAOA,QAA8B38B,IAApB28B,EAAON,eAA4Cr8B,IAAlB28B,EAAOL,OAE3D,SAASM,GAAQxlC,EAAMs7B,EAAQmK,GAC7B,OAAa,IAATzlC,EACKa,GAAKb,IAENs7B,EAAOoK,eAAiB,GAAK,IAAMpK,EAAOj5B,KAAOojC,EAAa,GAAK,GAE7E,SAASE,GAAY3N,GACnB,IAAI36B,EAASzB,EAAOC,EAAKgiB,EAAKC,EAiB9B,OAhBIka,EAAW4N,YACbvoC,EAAU26B,EAAWrU,KAAOqU,EAAWtrC,EACvCkP,EAAQ,OACRC,EAAM,UAENwB,EAAU26B,EAAWrU,KAAOqU,EAAWn2B,EACvCjG,EAAQ,SACRC,EAAM,OAEJwB,GACFwgB,EAAM,MACNC,EAAS,UAETD,EAAM,QACNC,EAAS,OAEJ,CAACliB,QAAOC,MAAKwB,UAASwgB,MAAKC,UAEpC,SAAS+nB,GAAiB7N,EAAY5tC,EAAS6vC,EAAOx2C,GACpD,IAAIqiD,EAAO17C,EAAQ27C,cACnB,MAAMniB,EAAM,GACZ,IAAKkiB,EAEH,YADA9N,EAAW+N,cAAgBniB,GAG7B,MAAM,MAAChoB,EAAK,IAAEC,EAAG,QAAEwB,EAAO,IAAEwgB,EAAG,OAAEC,GAAU6nB,GAAY3N,GAC1C,WAAT8N,GAAqB7L,IACvBjC,EAAWgO,oBAAqB,GAC3B/L,EAAMgC,MAAQ,KAAOx4C,EACxBqiD,EAAOjoB,GACGoc,EAAMiC,SAAW,KAAOz4C,EAClCqiD,EAAOhoB,GAEP8F,EAAIqiB,GAAUnoB,EAAQliB,EAAOC,EAAKwB,KAAY,EAC9CyoC,EAAOjoB,IAGX+F,EAAIqiB,GAAUH,EAAMlqC,EAAOC,EAAKwB,KAAY,EAC5C26B,EAAW+N,cAAgBniB,EAE7B,SAASqiB,GAAUH,EAAMhmC,EAAGC,EAAG1C,GAO7B,OANIA,GACFyoC,EAAOI,GAAKJ,EAAMhmC,EAAGC,GACrB+lC,EAAOK,GAASL,EAAM/lC,EAAGD,IAEzBgmC,EAAOK,GAASL,EAAMhmC,EAAGC,GAEpB+lC,EAET,SAASI,GAAKE,EAAMvoC,EAAIwoC,GACtB,OAAOD,IAASvoC,EAAKwoC,EAAKD,IAASC,EAAKxoC,EAAKuoC,EAE/C,SAASD,GAAS3/B,EAAG5K,EAAOC,GAC1B,MAAa,UAAN2K,EAAgB5K,EAAc,QAAN4K,EAAc3K,EAAM2K,EAErD,SAAS8/B,GAAiBtO,GAAY,cAACuO,GAAgB3wB,GACrDoiB,EAAWuO,cAAkC,SAAlBA,EACb,IAAV3wB,EAAc,IAAO,EACrB2wB,EA7LN,GAAkBlsB,SAAW,GAC7B,GAAkBtf,UAAUukC,mBAAqB,KACjD,GAAkBvkC,UAAU4mC,gBAAkB,KA6L9C,MAAM,WAAsB,GAC1B,mBAAmBrZ,EAAMpkC,EAAM0X,EAAO2sB,GACpC,OAAO8c,GAAsB/c,EAAMpkC,EAAM0X,EAAO2sB,GAElD,eAAeD,EAAMpkC,EAAM0X,EAAO2sB,GAChC,OAAO8c,GAAsB/c,EAAMpkC,EAAM0X,EAAO2sB,GAElD,gBAAgBD,EAAMpkC,EAAM0X,EAAO2sB,GACjC,MAAM,OAACC,EAAM,OAAE8S,GAAUhT,GACnB,SAACkY,EAAW,IAAG,SAAEC,EAAW,KAAOt+C,KAAKsmC,SACxC+d,EAA2B,MAAhBhe,EAAOsT,KAAe0E,EAAWC,EAC5CgG,EAA2B,MAAhBnL,EAAOQ,KAAe0E,EAAWC,EAC5C/X,EAAS,GACf,IAAIjiC,EAAGkX,EAAMpa,EAAM8b,EACnB,IAAK5Y,EAAImV,EAAO+B,EAAO/B,EAAQ2sB,EAAO9hC,EAAIkX,IAAQlX,EAChD4Y,EAAMnb,EAAKuC,GACXlD,EAAO,GACPA,EAAKilC,EAAOsT,MAAQtT,EAAOG,MAAMvpB,GAAiBC,EAAKmnC,GAAW//C,GAClEiiC,EAAOz5B,KAAKm2C,GAAWhmC,GAAiBC,EAAKonC,GAAWljD,EAAM+3C,EAAQ70C,IAExE,OAAOiiC,EAET,sBAAsB3nB,EAAOwY,EAAOmP,EAAQuR,GAC1CyM,MAAMzF,sBAAsBlgC,EAAOwY,EAAOmP,EAAQuR,GAClD,MAAMsL,EAAS7c,EAAOyc,QAClBI,GAAUhsB,IAAUp3B,KAAKw5C,YAAYL,SACvCv6B,EAAMsB,IAAMxI,KAAKwI,IAAItB,EAAMsB,IAAKkjC,EAAOljC,KACvCtB,EAAMuB,IAAMzI,KAAKyI,IAAIvB,EAAMuB,IAAKijC,EAAOjjC,MAG3C,iBACE,OAAO,EAET,iBAAiB7e,GACf,MAAM6kC,EAAOnmC,KAAKw5C,aACZ,OAACnT,EAAM,OAAE8S,GAAUhT,EACnBI,EAASvmC,KAAK++C,UAAUz9C,GACxB8hD,EAAS7c,EAAOyc,QAChBhiD,EAAQmiD,GAAWC,GACrB,IAAMA,EAAO3pC,MAAQ,KAAO2pC,EAAO1pC,IAAM,IACzC,GAAKy/B,EAAO8F,iBAAiB1Y,EAAO4S,EAAOQ,OAC/C,MAAO,CACLqF,MAAO,GAAK3Y,EAAO4Y,iBAAiB1Y,EAAOF,EAAOsT,OAClD34C,SAGJ,aACEhB,KAAK07C,qBAAsB,EAC3B6I,MAAMzI,aACN,MAAM3V,EAAOnmC,KAAKw5C,YAClBrT,EAAK2R,MAAQ93C,KAAKi8C,aAAanE,MAEjC,OAAOlhB,GACL,MAAMuP,EAAOnmC,KAAKw5C,YAClBx5C,KAAK4gD,eAAeza,EAAKpkC,KAAM,EAAGokC,EAAKpkC,KAAKd,OAAQ21B,GAEtD,eAAe4tB,EAAM/qC,EAAO2sB,EAAOxP,GACjC,MAAM6tB,EAAiB,UAAT7tB,GACR,MAACt1B,EAAOk4C,aAAa,OAACL,IAAWn5C,KACjCwhC,EAAO2X,EAAOuL,eACdjB,EAAatK,EAAOoK,eACpBvB,EAAQhiD,KAAK2kD,YACbC,EAAY5kD,KAAKs/C,0BAA0B7lC,EAAOmd,GAClDopB,EAAgBhgD,KAAKmgD,iBAAiByE,GACtCC,EAAiB7kD,KAAK6kD,eAAejuB,EAAMopB,GACjDhgD,KAAK8kD,oBAAoB9E,EAAeppB,EAAMguB,GAC9C,IAAK,IAAItgD,EAAImV,EAAOnV,EAAImV,EAAQ2sB,EAAO9hC,IAAK,CAC1C,MAAMiiC,EAASvmC,KAAK++C,UAAUz6C,GACxBygD,EAAUN,GAASvqC,GAAcqsB,EAAO4S,EAAOQ,OAAS,CAACnY,OAAMwjB,KAAMxjB,GAAQxhC,KAAKilD,yBAAyB3gD,GAC3G4gD,EAAUllD,KAAKmlD,yBAAyB7gD,EAAG09C,GAC3ClK,GAASvR,EAAOkT,SAAW,IAAIN,EAAOQ,MACtC9D,EAAa,CACjB4N,aACAjiB,KAAMujB,EAAQvjB,KACdqiB,oBAAqB/L,GAASqL,GAAW5c,EAAOyc,UAAa1hD,IAAUw2C,EAAMgC,MAAQx4C,IAAUw2C,EAAMiC,QACrGxvC,EAAGk5C,EAAasB,EAAQC,KAAOE,EAAQE,OACvC1lC,EAAG+jC,EAAayB,EAAQE,OAASL,EAAQC,KACzC9sC,OAAQurC,EAAayB,EAAQrnC,KAAOnG,KAAKkI,IAAImlC,EAAQlnC,MACrD5F,MAAOwrC,EAAa/rC,KAAKkI,IAAImlC,EAAQlnC,MAAQqnC,EAAQrnC,MAEnDgnC,IACFhP,EAAW5tC,QAAU+3C,GAAiBhgD,KAAKs/C,0BAA0Bh7C,EAAGkgD,EAAKlgD,GAAGmG,OAAS,SAAWmsB,IAEtG,MAAM3uB,EAAU4tC,EAAW5tC,SAAWu8C,EAAKlgD,GAAG2D,QAC9Cy7C,GAAiB7N,EAAY5tC,EAAS6vC,EAAOx2C,GAC7C6iD,GAAiBtO,EAAY5tC,EAAS+5C,EAAMvuB,OAC5CzzB,KAAKqlD,cAAcb,EAAKlgD,GAAIA,EAAGuxC,EAAYjf,IAG/C,WAAWga,EAAMyJ,GACf,MAAMlU,EAAOnmC,KAAKw5C,YACZnT,EAASF,EAAKE,OACdsR,EAAWtR,EAAOgT,wBAAwBr5C,KAAKo7C,OAC/C/C,EAAUhS,EAAOp+B,QAAQowC,QACzB78B,EAAOm8B,EAAS12C,OAChB63C,EAAS,GACf,IAAIx0C,EAAGlD,EACP,IAAKkD,EAAI,EAAGA,EAAIkX,IAAQlX,EAEtB,GADAlD,EAAOu2C,EAASrzC,GACXlD,EAAKm4C,WAAWtxC,QAAQq9C,QAA7B,CAGA,GAAyB,qBAAdjL,EAA2B,CACpC,MAAMx2C,EAAMzC,EAAKm4C,WAAWwF,UAAU1E,GACpCj5C,EAAKm4C,WAAWC,YAAYL,OAAOQ,MAErC,GAAIz/B,GAAcrW,IAAQ2T,MAAM3T,GAC9B,SAOJ,KAJgB,IAAZw0C,IAAqD,IAAhCS,EAAO18B,QAAQhb,EAAK02C,aAClCrxB,IAAZ4xB,QAAwC5xB,IAAfrlB,EAAK02C,QAC3BgB,EAAOhsC,KAAK1L,EAAK02C,OAEf12C,EAAKE,QAAUsvC,EACjB,MAMJ,OAHKkI,EAAO73C,QACV63C,EAAOhsC,UAAK2Z,GAEPqyB,EAET,eAAex3C,GACb,OAAOtB,KAAKulD,gBAAW9+B,EAAWnlB,GAAOL,OAE3C,eAAe0a,EAAc7b,EAAMu6C,GACjC,MAAMvB,EAAS94C,KAAKulD,WAAW5pC,EAAc0+B,GACvC/4C,OAAkBmlB,IAAT3mB,EACXg5C,EAAO18B,QAAQtc,IACd,EACL,OAAmB,IAAXwB,EACJw3C,EAAO73C,OAAS,EAChBK,EAEN,YACE,MAAMq7B,EAAO38B,KAAKiI,QACZk+B,EAAOnmC,KAAKw5C,YACZnT,EAASF,EAAKE,OACdkc,EAAS,GACf,IAAIj+C,EAAGkX,EACP,IAAKlX,EAAI,EAAGkX,EAAO2qB,EAAKpkC,KAAKd,OAAQqD,EAAIkX,IAAQlX,EAC/Ci+C,EAAOz1C,KAAKu5B,EAAOub,iBAAiB5hD,KAAK++C,UAAUz6C,GAAG+hC,EAAOsT,MAAOr1C,IAEtE,MAAM69C,EAAexlB,EAAKwlB,aACpBjiC,EAAMiiC,GAAgBX,GAAqBrb,GACjD,MAAO,CACLjmB,MACAqiC,SACA9oC,MAAO4sB,EAAOmf,YACd9rC,IAAK2sB,EAAOof,UACZxD,WAAYjiD,KAAK0lD,iBACjBtuB,MAAOiP,EACPif,QAAS3oB,EAAK2oB,QACd7xB,MAAO0uB,EAAe,EAAIxlB,EAAKylB,mBAAqBzlB,EAAK0lB,eAG7D,yBAAyB/gD,GACvB,MAAOk4C,aAAa,OAACL,EAAM,SAAE6B,GAAW/yC,SAAUu5B,KAAMmkB,EAAS,aAAEC,IAAiB5lD,KAC9EsjD,EAAaqC,GAAa,EAC1Bpf,EAASvmC,KAAK++C,UAAUz9C,GACxB8hD,EAAS7c,EAAOyc,QAChB6C,EAAW1C,GAAWC,GAC5B,IAGI4B,EAAMnnC,EAHN7c,EAAQulC,EAAO4S,EAAOQ,MACtBlgC,EAAQ,EACRxY,EAAS+5C,EAAWh7C,KAAK63C,WAAWsB,EAAQ5S,EAAQyU,GAAYh6C,EAEhEC,IAAWD,IACbyY,EAAQxY,EAASD,EACjBC,EAASD,GAEP6kD,IACF7kD,EAAQoiD,EAAON,SACf7hD,EAASmiD,EAAOL,OAASK,EAAON,SAClB,IAAV9hD,GAAe0d,GAAK1d,KAAW0d,GAAK0kC,EAAOL,UAC7CtpC,EAAQ,GAEVA,GAASzY,GAEX,MAAM4hD,EAAc1oC,GAAcyrC,IAAeE,EAAuBpsC,EAAZksC,EAC5D,IAAInkB,EAAO2X,EAAOyI,iBAAiBgB,GAOnC,GALEoC,EADEhlD,KAAK61B,MAAMiwB,kBAAkBxkD,GACxB63C,EAAOyI,iBAAiBnoC,EAAQxY,GAEhCugC,EAET3jB,EAAOmnC,EAAOxjB,EACV9pB,KAAKkI,IAAI/B,GAAQ+nC,EAAc,CACjC/nC,EAAOwlC,GAAQxlC,EAAMs7B,EAAQmK,GAAcsC,EACvC5kD,IAAUsiD,IACZ9hB,GAAQ3jB,EAAO,GAEjB,MAAMkoC,EAAa5M,EAAO6M,mBAAmB,GACvCC,EAAW9M,EAAO6M,mBAAmB,GACrC9lC,EAAMxI,KAAKwI,IAAI6lC,EAAYE,GAC3B9lC,EAAMzI,KAAKyI,IAAI4lC,EAAYE,GACjCzkB,EAAO9pB,KAAKyI,IAAIzI,KAAKwI,IAAIshB,EAAMrhB,GAAMD,GACrC8kC,EAAOxjB,EAAO3jB,EAEhB,GAAI2jB,IAAS2X,EAAOyI,iBAAiB0B,GAAa,CAChD,MAAM4C,EAAWxnC,GAAKb,GAAQs7B,EAAOgN,qBAAqB7C,GAAc,EACxE9hB,GAAQ0kB,EACRroC,GAAQqoC,EAEV,MAAO,CACLroC,OACA2jB,OACAwjB,OACAI,OAAQJ,EAAOnnC,EAAO,GAG1B,yBAAyBvc,EAAO0gD,GAC9B,MAAM5qB,EAAQ4qB,EAAM5qB,MACdnvB,EAAUjI,KAAKiI,QACfm+C,EAAWn+C,EAAQm+C,SACnBC,EAAkB3rC,GAAezS,EAAQo+C,gBAAiBC,KAChE,IAAIlB,EAAQvnC,EACZ,GAAImkC,EAAMsD,QAAS,CACjB,MAAMrD,EAAamE,EAAWpmD,KAAK0lD,eAAepkD,GAAS0gD,EAAMC,WAC3DrjC,EAAiC,SAAzB3W,EAAQk6C,aAClBK,GAA0BlhD,EAAO0gD,EAAO/5C,EAASg6C,GACjDF,GAAyBzgD,EAAO0gD,EAAO/5C,EAASg6C,GAC9CsE,EAAavmD,KAAKwmD,eAAexmD,KAAKsB,MAAOtB,KAAKw5C,YAAY1B,MAAOsO,EAAW9kD,OAAQmlB,GAC9F2+B,EAASxmC,EAAMnF,MAASmF,EAAM0jC,MAAQiE,EAAe3nC,EAAM0jC,MAAQ,EACnEzkC,EAAOnG,KAAKwI,IAAImmC,EAAiBznC,EAAM0jC,MAAQ1jC,EAAM6U,YAErD2xB,EAAShuB,EAAMwqB,iBAAiB5hD,KAAK++C,UAAUz9C,GAAO81B,EAAMuiB,MAAOr4C,GACnEuc,EAAOnG,KAAKwI,IAAImmC,EAAiBrE,EAAM9hC,IAAM8hC,EAAMvuB,OAErD,MAAO,CACL+N,KAAM4jB,EAASvnC,EAAO,EACtBmnC,KAAMI,EAASvnC,EAAO,EACtBunC,SACAvnC,QAGJ,OACE,MAAMsoB,EAAOnmC,KAAKw5C,YACZL,EAAShT,EAAKgT,OACdsN,EAAQtgB,EAAKpkC,KACbyZ,EAAOirC,EAAMxlD,OACnB,IAAIqD,EAAI,EACR,KAAOA,EAAIkX,IAAQlX,EACsB,OAAnCtE,KAAK++C,UAAUz6C,GAAG60C,EAAOQ,OAC3B8M,EAAMniD,GAAGgvC,KAAKtzC,KAAKi7C,OAK3B,GAAct5C,GAAK,MACnB,GAAcu2B,SAAW,CACvBilB,oBAAoB,EACpBqC,gBAAiB,MACjB4C,mBAAoB,GACpBC,cAAe,GACfiD,SAAS,EACTvP,WAAY,CACVJ,QAAS,CACPpsC,KAAM,SACNssC,WAAY,CAAC,IAAK,IAAK,OAAQ,QAAS,aAI9C,GAAc/gB,UAAY,CACxBuC,OAAQ,CACNqvB,QAAS,CACPn9C,KAAM,WACNo9C,QAAQ,EACRC,KAAM,CACJD,QAAQ,IAGZE,QAAS,CACPt9C,KAAM,SACN02B,aAAa,KAKnB,MAAM,WAAyB,GAC7B,aACEjgC,KAAK07C,qBAAsB,EAC3B6I,MAAMzI,aAER,mBAAmB3V,EAAMpkC,EAAM0X,EAAO2sB,GACpC,MAAMG,EAASge,MAAMvG,mBAAmB7X,EAAMpkC,EAAM0X,EAAO2sB,GAC3D,IAAK,IAAI9hC,EAAI,EAAGA,EAAIiiC,EAAOtlC,OAAQqD,IACjCiiC,EAAOjiC,GAAG0+C,QAAUhjD,KAAKs/C,0BAA0Bh7C,EAAImV,GAAO+gB,OAEhE,OAAO+L,EAET,eAAeJ,EAAMpkC,EAAM0X,EAAO2sB,GAChC,MAAMG,EAASge,MAAMzG,eAAe3X,EAAMpkC,EAAM0X,EAAO2sB,GACvD,IAAK,IAAI9hC,EAAI,EAAGA,EAAIiiC,EAAOtlC,OAAQqD,IAAK,CACtC,MAAMlD,EAAOW,EAAK0X,EAAQnV,GAC1BiiC,EAAOjiC,GAAG0+C,QAAUtoC,GAAetZ,EAAK,GAAIpB,KAAKs/C,0BAA0Bh7C,EAAImV,GAAO+gB,QAExF,OAAO+L,EAET,gBAAgBJ,EAAMpkC,EAAM0X,EAAO2sB,GACjC,MAAMG,EAASge,MAAMxG,gBAAgB5X,EAAMpkC,EAAM0X,EAAO2sB,GACxD,IAAK,IAAI9hC,EAAI,EAAGA,EAAIiiC,EAAOtlC,OAAQqD,IAAK,CACtC,MAAMlD,EAAOW,EAAK0X,EAAQnV,GAC1BiiC,EAAOjiC,GAAG0+C,QAAUtoC,GAAetZ,GAAQA,EAAKglB,IAAMhlB,EAAKglB,EAAGpmB,KAAKs/C,0BAA0Bh7C,EAAImV,GAAO+gB,QAE1G,OAAO+L,EAET,iBACE,MAAMxkC,EAAO/B,KAAKw5C,YAAYz3C,KAC9B,IAAIoe,EAAM,EACV,IAAK,IAAI7b,EAAIvC,EAAKd,OAAS,EAAGqD,GAAK,IAAKA,EACtC6b,EAAMzI,KAAKyI,IAAIA,EAAKpe,EAAKuC,GAAGuZ,KAAK7d,KAAKs/C,0BAA0Bh7C,IAAM,GAExE,OAAO6b,EAAM,GAAKA,EAEpB,iBAAiB7e,GACf,MAAM6kC,EAAOnmC,KAAKw5C,aACZ,OAAClC,EAAM,OAAEC,GAAUpR,EACnBI,EAASvmC,KAAK++C,UAAUz9C,GACxBiJ,EAAI+sC,EAAO2H,iBAAiB1Y,EAAOh8B,GACnCmV,EAAI63B,EAAO0H,iBAAiB1Y,EAAO7mB,GACnC0G,EAAImgB,EAAOyc,QACjB,MAAO,CACLhE,MAAO7Y,EAAK6Y,MACZh+C,MAAO,IAAMuJ,EAAI,KAAOmV,GAAK0G,EAAI,KAAOA,EAAI,IAAM,KAGtD,OAAOwQ,GACL,MAAM+P,EAAS3mC,KAAKw5C,YAAYz3C,KAChC/B,KAAK4gD,eAAeja,EAAQ,EAAGA,EAAO1lC,OAAQ21B,GAEhD,eAAe+P,EAAQltB,EAAO2sB,EAAOxP,GACnC,MAAM6tB,EAAiB,UAAT7tB,GACR,OAACyP,EAAM,OAAE8S,GAAUn5C,KAAKw5C,YACxBoL,EAAY5kD,KAAKs/C,0BAA0B7lC,EAAOmd,GAClDopB,EAAgBhgD,KAAKmgD,iBAAiByE,GACtCC,EAAiB7kD,KAAK6kD,eAAejuB,EAAMopB,GAC3CtG,EAAQrT,EAAOsT,KACfC,EAAQT,EAAOQ,KACrB,IAAK,IAAIr1C,EAAImV,EAAOnV,EAAImV,EAAQ2sB,EAAO9hC,IAAK,CAC1C,MAAMi3B,EAAQoL,EAAOriC,GACfiiC,GAAUke,GAASzkD,KAAK++C,UAAUz6C,GAClCuxC,EAAa,GACbrN,EAASqN,EAAW6D,GAAS+K,EAAQpe,EAAO2f,mBAAmB,IAAO3f,EAAOub,iBAAiBrb,EAAOmT,IACrGjR,EAASoN,EAAW+D,GAAS6K,EAAQtL,EAAOuL,eAAiBvL,EAAOyI,iBAAiBrb,EAAOqT,IAClG/D,EAAWjP,KAAOpvB,MAAMgxB,IAAWhxB,MAAMixB,GACrCoc,IACFhP,EAAW5tC,QAAUjI,KAAKs/C,0BAA0Bh7C,EAAGi3B,EAAM9wB,OAAS,SAAWmsB,GAC7E6tB,IACF5O,EAAW5tC,QAAQuyB,OAAS,IAGhCx6B,KAAKqlD,cAAc9pB,EAAOj3B,EAAGuxC,EAAYjf,GAE3C52B,KAAK8kD,oBAAoB9E,EAAeppB,EAAMguB,GAEhD,0BAA0BtjD,EAAOs1B,GAC/B,MAAM2P,EAASvmC,KAAK++C,UAAUz9C,GAC9B,IAAI8zB,EAASmvB,MAAMjF,0BAA0Bh+C,EAAOs1B,GAChDxB,EAAOshB,UACTthB,EAAS3zB,OAAOoyB,OAAO,GAAIuB,EAAQ,CAACshB,SAAS,KAE/C,MAAMlc,EAASpF,EAAOoF,OAKtB,MAJa,WAAT5D,IACFxB,EAAOoF,OAAS,GAElBpF,EAAOoF,QAAU9f,GAAe6rB,GAAUA,EAAOyc,QAASxoB,GACnDpF,GAkCX,SAAS0xB,GAAkBvsB,EAAUwsB,EAAeC,GAClD,IAAIC,EAAS,EACTC,EAAS,EACTnc,EAAU,EACVC,EAAU,EACd,GAAI+b,EAAgB9oC,GAAK,CACvB,MAAMkpC,EAAa5sB,EACb6sB,EAAWD,EAAaJ,EACxBM,EAAS3vC,KAAK4L,IAAI6jC,GAClBG,EAAS5vC,KAAK2K,IAAI8kC,GAClBI,EAAO7vC,KAAK4L,IAAI8jC,GAChBI,EAAO9vC,KAAK2K,IAAI+kC,GAChBK,EAAU,CAACzmC,EAAOrD,EAAGC,IAAM4D,GAAcR,EAAOmmC,EAAYC,GAAU,GAAQ,EAAI1vC,KAAKyI,IAAIxC,EAAGA,EAAIqpC,EAAQppC,EAAGA,EAAIopC,GACjHU,EAAU,CAAC1mC,EAAOrD,EAAGC,IAAM4D,GAAcR,EAAOmmC,EAAYC,GAAU,IAAS,EAAI1vC,KAAKwI,IAAIvC,EAAGA,EAAIqpC,EAAQppC,EAAGA,EAAIopC,GAClHW,EAAOF,EAAQ,EAAGJ,EAAQE,GAC1BK,EAAOH,EAAQnpC,GAASgpC,EAAQE,GAChCK,EAAOH,EAAQ1pC,GAAIqpC,EAAQE,GAC3BO,EAAOJ,EAAQ1pC,GAAKM,GAASgpC,EAAQE,GAC3CP,GAAUU,EAAOE,GAAQ,EACzBX,GAAUU,EAAOE,GAAQ,EACzB/c,IAAY4c,EAAOE,GAAQ,EAC3B7c,IAAY4c,EAAOE,GAAQ,EAE7B,MAAO,CAACb,SAAQC,SAAQnc,UAASC,WAtDnC,GAAiBrpC,GAAK,SACtB,GAAiBu2B,SAAW,CAC1BilB,oBAAoB,EACpBqC,gBAAiB,QACjBzJ,WAAY,CACVJ,QAAS,CACPpsC,KAAM,SACNssC,WAAY,CAAC,IAAK,IAAK,cAAe,aAI5C,GAAiB/gB,UAAY,CAC3BuC,OAAQ,CACN9sB,EAAG,CACDhB,KAAM,UAERmW,EAAG,CACDnW,KAAM,WAGV4O,QAAS,CACPpP,QAAS,CACP6pC,UAAW,CACT,QACE,MAAO,QAgCjB,MAAM,WAA2B,GAC/B,YAAY/c,EAAOla,GACjB4oC,MAAM1uB,EAAOla,GACb3b,KAAK07C,qBAAsB,EAC3B17C,KAAK+nD,iBAActhC,EACnBzmB,KAAKgoD,iBAAcvhC,EACnBzmB,KAAK+qC,aAAUtkB,EACfzmB,KAAKgrC,aAAUvkB,EAEjB,cACA,MAAMhN,EAAO2sB,GACX,MAAMrkC,EAAO/B,KAAKi8C,aAAal6C,KACzBokC,EAAOnmC,KAAKw5C,YAClB,IAAsB,IAAlBx5C,KAAKsmC,SACPH,EAAKqU,QAAUz4C,MACV,CACL,IAKIuC,EAAGkX,EALHysC,EAAU3jD,IAAOvC,EAAKuC,GAC1B,GAAI+V,GAAStY,EAAK0X,IAAS,CACzB,MAAM,IAACrR,EAAM,SAAWpI,KAAKsmC,SAC7B2hB,EAAU3jD,IAAO2Y,GAAiBlb,EAAKuC,GAAI8D,GAG7C,IAAK9D,EAAImV,EAAO+B,EAAO/B,EAAQ2sB,EAAO9hC,EAAIkX,IAAQlX,EAChD6hC,EAAKqU,QAAQl2C,GAAK2jD,EAAO3jD,IAI/B,eACE,OAAO8b,GAAUpgB,KAAKiI,QAAQsyB,SAAW,IAE3C,oBACE,OAAOna,GAAUpgB,KAAKiI,QAAQ8+C,eAEhC,sBACE,IAAI7mC,EAAMjC,GACNkC,GAAOlC,GACX,IAAK,IAAI3Z,EAAI,EAAGA,EAAItE,KAAK61B,MAAM9zB,KAAK2zB,SAASz0B,SAAUqD,EACrD,GAAItE,KAAK61B,MAAMqyB,iBAAiB5jD,GAAI,CAClC,MAAMi1C,EAAav5C,KAAK61B,MAAMknB,eAAez4C,GAAGi1C,WAC1Chf,EAAWgf,EAAW4O,eACtBpB,EAAgBxN,EAAW6O,oBACjCloC,EAAMxI,KAAKwI,IAAIA,EAAKqa,GACpBpa,EAAMzI,KAAKyI,IAAIA,EAAKoa,EAAWwsB,GAGnC,MAAO,CACLxsB,SAAUra,EACV6mC,cAAe5mC,EAAMD,GAGzB,OAAO0W,GACL,MAAMf,EAAQ71B,KAAK61B,OACb,UAACupB,GAAavpB,EACdsQ,EAAOnmC,KAAKw5C,YACZ6O,EAAOliB,EAAKpkC,KACZumD,EAAUtoD,KAAKuoD,oBAAsBvoD,KAAKwoD,aAAaH,GAAQroD,KAAKiI,QAAQqgD,QAC5EG,EAAU/wC,KAAKyI,KAAKzI,KAAKwI,IAAIk/B,EAAUnnC,MAAOmnC,EAAUlnC,QAAUowC,GAAW,EAAG,GAChFtB,EAAStvC,KAAKwI,IAAIvF,GAAa3a,KAAKiI,QAAQ++C,OAAQyB,GAAU,GAC9DC,EAAc1oD,KAAK2oD,eAAe3oD,KAAKsB,QACvC,cAACylD,EAAa,SAAExsB,GAAYv6B,KAAK4oD,uBACjC,OAAC3B,EAAM,OAAEC,EAAM,QAAEnc,EAAO,QAAEC,GAAW8b,GAAkBvsB,EAAUwsB,EAAeC,GAChF5pB,GAAYgiB,EAAUnnC,MAAQqwC,GAAWrB,EACzCrb,GAAawT,EAAUlnC,OAASowC,GAAWpB,EAC3C2B,EAAYnxC,KAAKyI,IAAIzI,KAAKwI,IAAIkd,EAAUwO,GAAa,EAAG,GACxDoc,EAAcjtC,GAAY/a,KAAKiI,QAAQuyB,OAAQquB,GAC/Cd,EAAcrwC,KAAKyI,IAAI6nC,EAAchB,EAAQ,GAC7C8B,GAAgBd,EAAcD,GAAe/nD,KAAK+oD,gCACxD/oD,KAAK+qC,QAAUA,EAAUid,EACzBhoD,KAAKgrC,QAAUA,EAAUgd,EACzB7hB,EAAK6iB,MAAQhpD,KAAKipD,iBAClBjpD,KAAKgoD,YAAcA,EAAcc,EAAe9oD,KAAKkpD,qBAAqBlpD,KAAKsB,OAC/EtB,KAAK+nD,YAAcrwC,KAAKyI,IAAIngB,KAAKgoD,YAAcc,EAAeJ,EAAa,GAC3E1oD,KAAK4gD,eAAeyH,EAAM,EAAGA,EAAKpnD,OAAQ21B,GAE5C,eAAetyB,EAAGmgD,GAChB,MAAM9nB,EAAO38B,KAAKiI,QACZk+B,EAAOnmC,KAAKw5C,YACZuN,EAAgB/mD,KAAKooD,oBAC3B,OAAK3D,GAAS9nB,EAAKpH,UAAU4zB,gBAAmBnpD,KAAK61B,MAAMiwB,kBAAkBxhD,IAA0B,OAApB6hC,EAAKqU,QAAQl2C,IAAe6hC,EAAKpkC,KAAKuC,GAAGy2C,OACnH,EAEF/6C,KAAKopD,uBAAuBjjB,EAAKqU,QAAQl2C,GAAKyiD,EAAgB9oC,IAEvE,eAAeoqC,EAAM5uC,EAAO2sB,EAAOxP,GACjC,MAAM6tB,EAAiB,UAAT7tB,EACRf,EAAQ71B,KAAK61B,MACbupB,EAAYvpB,EAAMupB,UAClBziB,EAAO9G,EAAM5tB,QACbohD,EAAgB1sB,EAAKpH,UACrB+zB,GAAWlK,EAAUxlC,KAAOwlC,EAAUvlC,OAAS,EAC/C0vC,GAAWnK,EAAU1jB,IAAM0jB,EAAUzjB,QAAU,EAC/C6tB,EAAe/E,GAAS4E,EAAcG,aACtCzB,EAAcyB,EAAe,EAAIxpD,KAAK+nD,YACtCC,EAAcwB,EAAe,EAAIxpD,KAAKgoD,YACtCpD,EAAY5kD,KAAKs/C,0BAA0B7lC,EAAOmd,GAClDopB,EAAgBhgD,KAAKmgD,iBAAiByE,GACtCC,EAAiB7kD,KAAK6kD,eAAejuB,EAAMopB,GACjD,IACI17C,EADA6iD,EAAannD,KAAKmoD,eAEtB,IAAK7jD,EAAI,EAAGA,EAAImV,IAASnV,EACvB6iD,GAAcnnD,KAAKypD,eAAenlD,EAAGmgD,GAEvC,IAAKngD,EAAImV,EAAOnV,EAAImV,EAAQ2sB,IAAS9hC,EAAG,CACtC,MAAMyiD,EAAgB/mD,KAAKypD,eAAenlD,EAAGmgD,GACvC5pB,EAAMwtB,EAAK/jD,GACXuxC,EAAa,CACjBtrC,EAAG++C,EAAUtpD,KAAK+qC,QAClBrrB,EAAG6pC,EAAUvpD,KAAKgrC,QAClBmc,aACAC,SAAUD,EAAaJ,EACvBA,gBACAiB,cACAD,eAEElD,IACFhP,EAAW5tC,QAAU+3C,GAAiBhgD,KAAKs/C,0BAA0Bh7C,EAAGu2B,EAAIpwB,OAAS,SAAWmsB,IAElGuwB,GAAcJ,EACd/mD,KAAKqlD,cAAcxqB,EAAKv2B,EAAGuxC,EAAYjf,GAEzC52B,KAAK8kD,oBAAoB9E,EAAeppB,EAAMguB,GAEhD,iBACE,MAAMze,EAAOnmC,KAAKw5C,YACZkQ,EAAWvjB,EAAKpkC,KACtB,IACIuC,EADA0kD,EAAQ,EAEZ,IAAK1kD,EAAI,EAAGA,EAAIolD,EAASzoD,OAAQqD,IAAK,CACpC,MAAMtD,EAAQmlC,EAAKqU,QAAQl2C,GACb,OAAVtD,GAAmBwW,MAAMxW,KAAUhB,KAAK61B,MAAMiwB,kBAAkBxhD,IAAOolD,EAASplD,GAAGy2C,SACrFiO,GAAStxC,KAAKkI,IAAI5e,IAGtB,OAAOgoD,EAET,uBAAuBhoD,GACrB,MAAMgoD,EAAQhpD,KAAKw5C,YAAYwP,MAC/B,OAAIA,EAAQ,IAAMxxC,MAAMxW,GACfid,IAAOvG,KAAKkI,IAAI5e,GAASgoD,GAE3B,EAET,iBAAiB1nD,GACf,MAAM6kC,EAAOnmC,KAAKw5C,YACZ3jB,EAAQ71B,KAAK61B,MACbqoB,EAASroB,EAAM9zB,KAAKm8C,QAAU,GAC9Bl9C,EAAQstC,GAAanI,EAAKqU,QAAQl5C,GAAQu0B,EAAM5tB,QAAQ6lC,QAC9D,MAAO,CACLkR,MAAOd,EAAO58C,IAAU,GACxBN,SAGJ,kBAAkBqnD,GAChB,IAAIloC,EAAM,EACV,MAAM0V,EAAQ71B,KAAK61B,MACnB,IAAIvxB,EAAGkX,EAAM2qB,EAAMoT,EAAYtxC,EAC/B,IAAKogD,EACH,IAAK/jD,EAAI,EAAGkX,EAAOqa,EAAM9zB,KAAK2zB,SAASz0B,OAAQqD,EAAIkX,IAAQlX,EACzD,GAAIuxB,EAAMqyB,iBAAiB5jD,GAAI,CAC7B6hC,EAAOtQ,EAAMknB,eAAez4C,GAC5B+jD,EAAOliB,EAAKpkC,KACZw3C,EAAapT,EAAKoT,WAClB,MAIN,IAAK8O,EACH,OAAO,EAET,IAAK/jD,EAAI,EAAGkX,EAAO6sC,EAAKpnD,OAAQqD,EAAIkX,IAAQlX,EAC1C2D,EAAUsxC,EAAW+F,0BAA0Bh7C,GACnB,UAAxB2D,EAAQ0hD,cACVxpC,EAAMzI,KAAKyI,IAAIA,EAAKlY,EAAQmzB,aAAe,EAAGnzB,EAAQ2hD,kBAAoB,IAG9E,OAAOzpC,EAET,aAAakoC,GACX,IAAIloC,EAAM,EACV,IAAK,IAAI7b,EAAI,EAAGkX,EAAO6sC,EAAKpnD,OAAQqD,EAAIkX,IAAQlX,EAAG,CACjD,MAAM2D,EAAUjI,KAAKs/C,0BAA0Bh7C,GAC/C6b,EAAMzI,KAAKyI,IAAIA,EAAKlY,EAAQ0+C,QAAU,EAAG1+C,EAAQ4hD,aAAe,GAElE,OAAO1pC,EAET,qBAAqBxE,GACnB,IAAImuC,EAAmB,EACvB,IAAK,IAAIxlD,EAAI,EAAGA,EAAIqX,IAAgBrX,EAC9BtE,KAAK61B,MAAMqyB,iBAAiB5jD,KAC9BwlD,GAAoB9pD,KAAK2oD,eAAerkD,IAG5C,OAAOwlD,EAET,eAAenuC,GACb,OAAOjE,KAAKyI,IAAIzF,GAAe1a,KAAK61B,MAAM9zB,KAAK2zB,SAAS/Z,GAAcyY,OAAQ,GAAI,GAEpF,gCACE,OAAOp0B,KAAKkpD,qBAAqBlpD,KAAK61B,MAAM9zB,KAAK2zB,SAASz0B,SAAW,GAGzE,GAAmBU,GAAK,WACxB,GAAmBu2B,SAAW,CAC5BilB,oBAAoB,EACpBqC,gBAAiB,MACjBjqB,UAAW,CACT4zB,eAAe,EACfK,cAAc,GAEhBzT,WAAY,CACVJ,QAAS,CACPpsC,KAAM,SACNssC,WAAY,CAAC,gBAAiB,WAAY,cAAe,cAAe,aAAc,IAAK,IAAK,SAAU,cAAe,aAG7HmR,OAAQ,MACRzsB,SAAU,EACVwsB,cAAe,IACfvsB,OAAQ,OACR8tB,QAAS,EACT5xB,UAAW,KAEb,GAAmBqO,YAAc,CAC/B5M,YAAcr4B,GAAkB,YAATA,EACvBu4B,WAAav4B,GAAkB,YAATA,GAExB,GAAmBg1B,UAAY,CAC7ByX,YAAa,EACbp0B,QAAS,CACP4xC,OAAQ,CACN7L,OAAQ,CACN,eAAeroB,GACb,MAAM9zB,EAAO8zB,EAAM9zB,KACnB,GAAIA,EAAKm8C,OAAOj9C,QAAUc,EAAK2zB,SAASz0B,OAAQ,CAC9C,MAAOi9C,QAAQ,WAAC5jB,IAAezE,EAAMk0B,OAAO9hD,QAC5C,OAAOlG,EAAKm8C,OAAOpiC,IAAI,CAACkjC,EAAO16C,KAC7B,MAAM6hC,EAAOtQ,EAAMknB,eAAe,GAC5B3mB,EAAQ+P,EAAKoT,WAAWnP,SAAS9lC,GACvC,MAAO,CACLo4B,KAAMsiB,EACNxhB,UAAWpH,EAAMZ,gBACjByH,YAAa7G,EAAMX,YACnByH,UAAW9G,EAAMgF,YACjBd,WAAYA,EACZygB,QAASllB,EAAMiwB,kBAAkBxhD,GACjChD,MAAOgD,KAIb,MAAO,KAGX,QAAQO,EAAGmlD,EAAYD,GACrBA,EAAOl0B,MAAMo0B,qBAAqBD,EAAW1oD,OAC7CyoD,EAAOl0B,MAAMkhB,WAGjBhuC,QAAS,CACP6pC,UAAW,CACT,QACE,MAAO,IAET,MAAMsX,GACJ,IAAIC,EAAYD,EAAYlL,MAC5B,MAAMh+C,EAAQ,KAAOkpD,EAAYE,eAOjC,OANIjwC,GAAQgwC,IACVA,EAAYA,EAAUtxC,QACtBsxC,EAAU,IAAMnpD,GAEhBmpD,GAAanpD,EAERmpD,OAOjB,MAAM,WAAuB,GAC3B,aACEnqD,KAAK07C,qBAAsB,EAC3B17C,KAAK27C,oBAAqB,EAC1B4I,MAAMzI,aAER,OAAOllB,GACL,MAAMuP,EAAOnmC,KAAKw5C,aACXW,QAASpd,EAAMh7B,KAAM4kC,EAAS,GAAE,SAAE0jB,GAAYlkB,EAC/CmkB,EAAqBtqD,KAAK61B,MAAMoqB,oBACtC,IAAI,MAACxmC,EAAK,MAAE2sB,GAASmkB,GAAgCpkB,EAAMQ,EAAQ2jB,GACnEtqD,KAAKw7C,WAAa/hC,EAClBzZ,KAAKy7C,WAAarV,EACdokB,GAAmBrkB,KACrB1sB,EAAQ,EACR2sB,EAAQO,EAAO1lC,QAEjB87B,EAAKwU,OAASvxC,KAAK61B,MACnBkH,EAAK2U,cAAgB1xC,KAAKsB,MAC1By7B,EAAK0tB,aAAeJ,EAASI,WAC7B1tB,EAAK4J,OAASA,EACd,MAAM1+B,EAAUjI,KAAKq/C,6BAA6BzoB,GAC7C52B,KAAKiI,QAAQqvB,WAChBrvB,EAAQmzB,YAAc,GAExBnzB,EAAQ0nC,QAAU3vC,KAAKiI,QAAQ0nC,QAC/B3vC,KAAKqlD,cAActoB,OAAMtW,EAAW,CAClCikC,UAAWJ,EACXriD,WACC2uB,GACH52B,KAAK4gD,eAAeja,EAAQltB,EAAO2sB,EAAOxP,GAE5C,eAAe+P,EAAQltB,EAAO2sB,EAAOxP,GACnC,MAAM6tB,EAAiB,UAAT7tB,GACR,OAACyP,EAAM,OAAE8S,EAAM,SAAE6B,EAAQ,SAAEqP,GAAYrqD,KAAKw5C,YAC5CoL,EAAY5kD,KAAKs/C,0BAA0B7lC,EAAOmd,GAClDopB,EAAgBhgD,KAAKmgD,iBAAiByE,GACtCC,EAAiB7kD,KAAK6kD,eAAejuB,EAAMopB,GAC3CtG,EAAQrT,EAAOsT,KACfC,EAAQT,EAAOQ,MACf,SAACtQ,EAAQ,QAAEsG,GAAW3vC,KAAKiI,QAC3B0iD,EAAenrC,GAAS6pB,GAAYA,EAAW7/B,OAAO4U,kBACtDwsC,EAAe5qD,KAAK61B,MAAMoqB,qBAAuBwE,GAAkB,SAAT7tB,EAChE,IAAIi0B,EAAapxC,EAAQ,GAAKzZ,KAAK++C,UAAUtlC,EAAQ,GACrD,IAAK,IAAInV,EAAImV,EAAOnV,EAAImV,EAAQ2sB,IAAS9hC,EAAG,CAC1C,MAAMi3B,EAAQoL,EAAOriC,GACfiiC,EAASvmC,KAAK++C,UAAUz6C,GACxBuxC,EAAa+U,EAAervB,EAAQ,GACpCuvB,EAAW5wC,GAAcqsB,EAAOqT,IAChCpR,EAASqN,EAAW6D,GAASrT,EAAOub,iBAAiBrb,EAAOmT,GAAQp1C,GACpEmkC,EAASoN,EAAW+D,GAAS6K,GAASqG,EAAW3R,EAAOuL,eAAiBvL,EAAOyI,iBAAiB5G,EAAWh7C,KAAK63C,WAAWsB,EAAQ5S,EAAQyU,GAAYzU,EAAOqT,GAAQt1C,GAC7KuxC,EAAWjP,KAAOpvB,MAAMgxB,IAAWhxB,MAAMixB,IAAWqiB,EACpDjV,EAAW/E,KAAOxsC,EAAI,GAAMoT,KAAKkI,IAAI2mB,EAAOmT,GAASmR,EAAWnR,IAAWiR,EACvEhb,IACFkG,EAAWtP,OAASA,EACpBsP,EAAWyE,IAAM+P,EAAStoD,KAAKuC,IAE7BugD,IACFhP,EAAW5tC,QAAU+3C,GAAiBhgD,KAAKs/C,0BAA0Bh7C,EAAGi3B,EAAM9wB,OAAS,SAAWmsB,IAE/Fg0B,GACH5qD,KAAKqlD,cAAc9pB,EAAOj3B,EAAGuxC,EAAYjf,GAE3Ci0B,EAAatkB,EAEfvmC,KAAK8kD,oBAAoB9E,EAAeppB,EAAMguB,GAEhD,iBACE,MAAMze,EAAOnmC,KAAKw5C,YACZW,EAAUhU,EAAKgU,QACf4Q,EAAS5Q,EAAQlyC,SAAWkyC,EAAQlyC,QAAQmzB,aAAe,EAC3Dr5B,EAAOokC,EAAKpkC,MAAQ,GAC1B,IAAKA,EAAKd,OACR,OAAO8pD,EAET,MAAMhkB,EAAahlC,EAAK,GAAG8b,KAAK7d,KAAKs/C,0BAA0B,IACzD0L,EAAYjpD,EAAKA,EAAKd,OAAS,GAAG4c,KAAK7d,KAAKs/C,0BAA0Bv9C,EAAKd,OAAS,IAC1F,OAAOyW,KAAKyI,IAAI4qC,EAAQhkB,EAAYikB,GAAa,EAEnD,OACE,MAAM7kB,EAAOnmC,KAAKw5C,YAClBrT,EAAKgU,QAAQ8Q,oBAAoBjrD,KAAK61B,MAAMupB,UAAWjZ,EAAKE,OAAOsT,MACnE4K,MAAMjR,QAoBV,SAASiX,GAAgCpkB,EAAMQ,EAAQ2jB,GACrD,MAAMY,EAAavkB,EAAO1lC,OAC1B,IAAIwY,EAAQ,EACR2sB,EAAQ8kB,EACZ,GAAI/kB,EAAK0X,QAAS,CAChB,MAAM,OAACxX,EAAM,QAAEmU,GAAWrU,EACpBwT,EAAOtT,EAAOsT,MACd,IAACz5B,EAAG,IAAEC,EAAG,WAAEu4B,EAAU,WAAEC,GAActS,EAAOoS,gBAC9CC,IACFj/B,EAAQsI,GAAYrK,KAAKwI,IACvB0gB,GAAa4Z,EAASnU,EAAOsT,KAAMz5B,GAAKygB,GACxC2pB,EAAqBY,EAAatqB,GAAa+F,EAAQgT,EAAMtT,EAAOub,iBAAiB1hC,IAAMygB,IAC7F,EAAGuqB,EAAa,IAGhB9kB,EADEuS,EACM52B,GAAYrK,KAAKyI,IACvBygB,GAAa4Z,EAASnU,EAAOsT,KAAMx5B,GAAKugB,GAAK,EAC7C4pB,EAAqB,EAAI1pB,GAAa+F,EAAQgT,EAAMtT,EAAOub,iBAAiBzhC,IAAMugB,GAAK,GACzFjnB,EAAOyxC,GAAczxC,EAEbyxC,EAAazxC,EAGzB,MAAO,CAACA,QAAO2sB,SAEjB,SAASokB,GAAmBrkB,GAC1B,MAAM,OAACmR,EAAM,OAAEC,EAAM,aAAE4T,GAAgBhlB,EACjCilB,EAAY,CAChBC,KAAM/T,EAAOp3B,IACborC,KAAMhU,EAAOn3B,IACborC,KAAMhU,EAAOr3B,IACbsrC,KAAMjU,EAAOp3B,KAEf,IAAKgrC,EAEH,OADAhlB,EAAKglB,aAAeC,GACb,EAET,MAAMK,EAAUN,EAAaE,OAAS/T,EAAOp3B,KAC1CirC,EAAaG,OAAShU,EAAOn3B,KAC7BgrC,EAAaI,OAAShU,EAAOr3B,KAC7BirC,EAAaK,OAASjU,EAAOp3B,IAEhC,OADA1e,OAAOoyB,OAAOs3B,EAAcC,GACrBK,EA3DT,GAAe9pD,GAAK,OACpB,GAAeu2B,SAAW,CACxBilB,mBAAoB,OACpBqC,gBAAiB,QACjBloB,UAAU,EACV+R,UAAU,GAEZ,GAAevU,UAAY,CACzBuC,OAAQ,CACNqvB,QAAS,CACPn9C,KAAM,YAERs9C,QAAS,CACPt9C,KAAM,YAiDZ,MAAM,WAA4B,GAChC,YAAYssB,EAAOla,GACjB4oC,MAAM1uB,EAAOla,GACb3b,KAAK+nD,iBAActhC,EACnBzmB,KAAKgoD,iBAAcvhC,EAErB,iBAAiBnlB,GACf,MAAM6kC,EAAOnmC,KAAKw5C,YACZ3jB,EAAQ71B,KAAK61B,MACbqoB,EAASroB,EAAM9zB,KAAKm8C,QAAU,GAC9Bl9C,EAAQstC,GAAanI,EAAKqU,QAAQl5C,GAAO8kB,EAAGyP,EAAM5tB,QAAQ6lC,QAChE,MAAO,CACLkR,MAAOd,EAAO58C,IAAU,GACxBN,SAGJ,gBAAgBmlC,EAAMpkC,EAAM0X,EAAO2sB,GACjC,OAAOF,GAA4BwlB,KAAK1rD,KAAjCkmC,CAAuCC,EAAMpkC,EAAM0X,EAAO2sB,GAEnE,OAAOxP,GACL,MAAMyxB,EAAOroD,KAAKw5C,YAAYz3C,KAC9B/B,KAAK2rD,gBACL3rD,KAAK4gD,eAAeyH,EAAM,EAAGA,EAAKpnD,OAAQ21B,GAE5C,YACE,MAAMuP,EAAOnmC,KAAKw5C,YACZ56B,EAAQ,CAACsB,IAAK1W,OAAO4U,kBAAmB+B,IAAK3W,OAAOovC,mBAY1D,OAXAzS,EAAKpkC,KAAKu/B,QAAQ,CAACxzB,EAASxM,KAC1B,MAAMilC,EAASvmC,KAAK++C,UAAUz9C,GAAO8kB,GAChC5O,MAAM+uB,IAAWvmC,KAAK61B,MAAMiwB,kBAAkBxkD,KAC7CilC,EAAS3nB,EAAMsB,MACjBtB,EAAMsB,IAAMqmB,GAEVA,EAAS3nB,EAAMuB,MACjBvB,EAAMuB,IAAMomB,MAIX3nB,EAET,gBACE,MAAMiX,EAAQ71B,KAAK61B,MACbupB,EAAYvpB,EAAMupB,UAClBziB,EAAO9G,EAAM5tB,QACb2jD,EAAUl0C,KAAKwI,IAAIk/B,EAAUvlC,MAAQulC,EAAUxlC,KAAMwlC,EAAUzjB,OAASyjB,EAAU1jB,KAClFssB,EAActwC,KAAKyI,IAAIyrC,EAAU,EAAG,GACpC7D,EAAcrwC,KAAKyI,IAAIwc,EAAKkvB,iBAAoB7D,EAAc,IAAQrrB,EAAqB,iBAAI,EAAG,GAClGmsB,GAAgBd,EAAcD,GAAelyB,EAAMi2B,yBACzD9rD,KAAKgoD,YAAcA,EAAec,EAAe9oD,KAAKsB,MACtDtB,KAAK+nD,YAAc/nD,KAAKgoD,YAAcc,EAExC,eAAeT,EAAM5uC,EAAO2sB,EAAOxP,GACjC,MAAM6tB,EAAiB,UAAT7tB,EACRf,EAAQ71B,KAAK61B,MACb8G,EAAO9G,EAAM5tB,QACbohD,EAAgB1sB,EAAKpH,UACrB6B,EAAQp3B,KAAKw5C,YAAYsD,OACzBwM,EAAUlyB,EAAM20B,QAChBxC,EAAUnyB,EAAM40B,QAChBC,EAAoB70B,EAAM80B,cAAc,GAAK,GAAMluC,GACzD,IACI1Z,EADA0c,EAAQirC,EAEZ,MAAME,EAAe,IAAMnsD,KAAKosD,uBAChC,IAAK9nD,EAAI,EAAGA,EAAImV,IAASnV,EACvB0c,GAAShhB,KAAKqsD,cAAc/nD,EAAGsyB,EAAMu1B,GAEvC,IAAK7nD,EAAImV,EAAOnV,EAAImV,EAAQ2sB,EAAO9hC,IAAK,CACtC,MAAMu2B,EAAMwtB,EAAK/jD,GACjB,IAAI6iD,EAAanmC,EACbomC,EAAWpmC,EAAQhhB,KAAKqsD,cAAc/nD,EAAGsyB,EAAMu1B,GAC/CnE,EAAcnyB,EAAMiwB,kBAAkBxhD,GAAK8yB,EAAMk1B,8BAA8BtsD,KAAK++C,UAAUz6C,GAAG8hB,GAAK,EAC1GpF,EAAQomC,EACJ3C,IACE4E,EAAcG,eAChBxB,EAAc,GAEZqB,EAAcF,gBAChBhC,EAAaC,EAAW6E,IAG5B,MAAMpW,EAAa,CACjBtrC,EAAG++C,EACH5pC,EAAG6pC,EACHxB,YAAa,EACbC,cACAb,aACAC,WACAn/C,QAASjI,KAAKs/C,0BAA0Bh7C,EAAGu2B,EAAIpwB,OAAS,SAAWmsB,IAErE52B,KAAKqlD,cAAcxqB,EAAKv2B,EAAGuxC,EAAYjf,IAG3C,uBACE,MAAMuP,EAAOnmC,KAAKw5C,YAClB,IAAIpT,EAAQ,EAMZ,OALAD,EAAKpkC,KAAKu/B,QAAQ,CAACxzB,EAASxM,MACrBkW,MAAMxX,KAAK++C,UAAUz9C,GAAO8kB,IAAMpmB,KAAK61B,MAAMiwB,kBAAkBxkD,IAClE8kC,MAGGA,EAET,cAAc9kC,EAAOs1B,EAAMu1B,GACzB,OAAOnsD,KAAK61B,MAAMiwB,kBAAkBxkD,GAChC8e,GAAUpgB,KAAKs/C,0BAA0Bh+C,EAAOs1B,GAAM5V,OAASmrC,GAC/D,GAGR,GAAoBxqD,GAAK,YACzB,GAAoBu2B,SAAW,CAC7BsnB,gBAAiB,MACjBjqB,UAAW,CACT4zB,eAAe,EACfK,cAAc,GAEhBzT,WAAY,CACVJ,QAAS,CACPpsC,KAAM,SACNssC,WAAY,CAAC,IAAK,IAAK,aAAc,WAAY,cAAe,iBAGpEnf,UAAW,IACXywB,WAAY,GAEd,GAAoBryB,UAAY,CAC9ByX,YAAa,EACbp0B,QAAS,CACP4xC,OAAQ,CACN7L,OAAQ,CACN,eAAeroB,GACb,MAAM9zB,EAAO8zB,EAAM9zB,KACnB,GAAIA,EAAKm8C,OAAOj9C,QAAUc,EAAK2zB,SAASz0B,OAAQ,CAC9C,MAAOi9C,QAAQ,WAAC5jB,IAAezE,EAAMk0B,OAAO9hD,QAC5C,OAAOlG,EAAKm8C,OAAOpiC,IAAI,CAACkjC,EAAO16C,KAC7B,MAAM6hC,EAAOtQ,EAAMknB,eAAe,GAC5B3mB,EAAQ+P,EAAKoT,WAAWnP,SAAS9lC,GACvC,MAAO,CACLo4B,KAAMsiB,EACNxhB,UAAWpH,EAAMZ,gBACjByH,YAAa7G,EAAMX,YACnByH,UAAW9G,EAAMgF,YACjBd,WAAYA,EACZygB,QAASllB,EAAMiwB,kBAAkBxhD,GACjChD,MAAOgD,KAIb,MAAO,KAGX,QAAQO,EAAGmlD,EAAYD,GACrBA,EAAOl0B,MAAMo0B,qBAAqBD,EAAW1oD,OAC7CyoD,EAAOl0B,MAAMkhB,WAGjBhuC,QAAS,CACP6pC,UAAW,CACT,QACE,MAAO,IAET,MAAMhd,GACJ,OAAOA,EAAQC,MAAM9zB,KAAKm8C,OAAOtoB,EAAQykB,WAAa,KAAOzkB,EAAQw0B,mBAK7E/yB,OAAQ,CACNjR,EAAG,CACD7c,KAAM,eACNgjD,WAAY,CACVC,SAAS,GAEXvsB,aAAa,EACb2mB,KAAM,CACJ6F,UAAU,GAEZC,YAAa,CACXF,SAAS,GAEXrF,WAAY,KAKlB,MAAMwF,WAAsB,IAE5BA,GAAchrD,GAAK,MACnBgrD,GAAcz0B,SAAW,CACvB8uB,OAAQ,EACRzsB,SAAU,EACVwsB,cAAe,IACfvsB,OAAQ,QAGV,MAAM,WAAwB,GAC5B,iBAAiBl5B,GACf,MAAM63C,EAASn5C,KAAKw5C,YAAYL,OAC1B5S,EAASvmC,KAAK++C,UAAUz9C,GAC9B,MAAO,CACL09C,MAAO7F,EAAOgF,YAAY78C,GAC1BN,MAAO,GAAKm4C,EAAO8F,iBAAiB1Y,EAAO4S,EAAOQ,QAGtD,gBAAgBxT,EAAMpkC,EAAM0X,EAAO2sB,GACjC,OAAOF,GAA4BwlB,KAAK1rD,KAAjCkmC,CAAuCC,EAAMpkC,EAAM0X,EAAO2sB,GAEnE,OAAOxP,GACL,MAAMuP,EAAOnmC,KAAKw5C,YACZzc,EAAOoJ,EAAKgU,QACZxT,EAASR,EAAKpkC,MAAQ,GACtBm8C,EAAS/X,EAAKE,OAAO8X,YAE3B,GADAphB,EAAK4J,OAASA,EACD,WAAT/P,EAAmB,CACrB,MAAM3uB,EAAUjI,KAAKq/C,6BAA6BzoB,GAC7C52B,KAAKiI,QAAQqvB,WAChBrvB,EAAQmzB,YAAc,GAExB,MAAMya,EAAa,CACjB5E,OAAO,EACPG,UAAW8M,EAAOj9C,SAAW0lC,EAAO1lC,OACpCgH,WAEFjI,KAAKqlD,cAActoB,OAAMtW,EAAWovB,EAAYjf,GAElD52B,KAAK4gD,eAAeja,EAAQ,EAAGA,EAAO1lC,OAAQ21B,GAEhD,eAAe+P,EAAQltB,EAAO2sB,EAAOxP,GACnC,MAAMQ,EAAQp3B,KAAKw5C,YAAYsD,OACzB2H,EAAiB,UAAT7tB,EACd,IAAK,IAAItyB,EAAImV,EAAOnV,EAAImV,EAAQ2sB,EAAO9hC,IAAK,CAC1C,MAAMi3B,EAAQoL,EAAOriC,GACf2D,EAAUjI,KAAKs/C,0BAA0Bh7C,EAAGi3B,EAAM9wB,OAAS,SAAWmsB,GACtEg2B,EAAgBx1B,EAAMy1B,yBAAyBvoD,EAAGtE,KAAK++C,UAAUz6C,GAAG8hB,GACpE7b,EAAIk6C,EAAQrtB,EAAM20B,QAAUa,EAAcriD,EAC1CmV,EAAI+kC,EAAQrtB,EAAM40B,QAAUY,EAAcltC,EAC1Cm2B,EAAa,CACjBtrC,IACAmV,IACAsB,MAAO4rC,EAAc5rC,MACrB4lB,KAAMpvB,MAAMjN,IAAMiN,MAAMkI,GACxBzX,WAEFjI,KAAKqlD,cAAc9pB,EAAOj3B,EAAGuxC,EAAYjf,KAI/C,GAAgBj1B,GAAK,QACrB,GAAgBu2B,SAAW,CACzBilB,mBAAoB,OACpBqC,gBAAiB,QACjB9oB,UAAW,IACXY,UAAU,EACVtB,SAAU,CACR+G,KAAM,CACJ5B,KAAM,WAIZ,GAAgBrG,UAAY,CAC1ByX,YAAa,EACblV,OAAQ,CACNjR,EAAG,CACD7c,KAAM,kBAKZ,MAAMujD,WAA0B,IAEhCA,GAAkBnrD,GAAK,UACvBmrD,GAAkB50B,SAAW,CAC3BZ,UAAU,EACV6D,MAAM,GAER2xB,GAAkBh4B,UAAY,CAC5B6B,YAAa,CACXC,KAAM,SAERze,QAAS,CACPpP,QAAS,CACP6pC,UAAW,CACT,QACE,MAAO,IAET,MAAMxxC,GACJ,MAAO,IAAMA,EAAK49C,MAAQ,KAAO59C,EAAKgpD,eAAiB,QAK/D/yB,OAAQ,CACN9sB,EAAG,CACDhB,KAAM,UAERmW,EAAG,CACDnW,KAAM,YAiBZ,SAAS,KACP,MAAM,IAAI27B,MAAM,mFAElB,MAAM6nB,GACJ,YAAY9kD,GACVjI,KAAKiI,QAAUA,GAAW,GAE5B,UACE,OAAO,KAET,MAAMjH,EAAOkJ,GACX,OAAO,KAET,OAAO8iD,EAAW9iD,GAChB,OAAO,KAET,IAAI8iD,EAAWC,EAAQC,GACrB,OAAO,KAET,KAAKvvC,EAAGC,EAAGsvC,GACT,OAAO,KAET,QAAQF,EAAWE,EAAMC,GACvB,OAAO,KAET,MAAMH,EAAWE,GACf,OAAO,MAGXH,GAAYjqB,SAAW,SAASsqB,GAC9B3rD,OAAOoyB,OAAOk5B,GAAYn0C,UAAWw0C,IAEvC,IAAIC,GAAW,CACbC,MAAOP,IAGT,SAASQ,GAAaC,EAAS7T,EAAM34C,EAAO61B,GAC1C,MAAM,WAAC0iB,EAAU,KAAEx3C,EAAI,QAAE87C,GAAW2P,EAC9BnnB,EAASkT,EAAWC,YAAYnT,OACtC,GAAIA,GAAUsT,IAAStT,EAAOsT,MAAiB,MAATA,GAAgBkE,GAAW97C,EAAKd,OAAQ,CAC5E,MAAMwsD,EAAepnB,EAAOqnB,eAAiB7sB,GAAgBD,GAC7D,IAAK/J,EACH,OAAO42B,EAAa1rD,EAAM43C,EAAM34C,GAC3B,GAAIu4C,EAAWgC,eAAgB,CACpC,MAAMlR,EAAKtoC,EAAK,GACV6c,EAA+B,oBAAhByrB,EAAGsjB,UAA2BtjB,EAAGsjB,SAAShU,GAC/D,GAAI/6B,EAAO,CACT,MAAMnF,EAAQg0C,EAAa1rD,EAAM43C,EAAM34C,EAAQ4d,GACzClF,EAAM+zC,EAAa1rD,EAAM43C,EAAM34C,EAAQ4d,GAC7C,MAAO,CAAC+hB,GAAIlnB,EAAMknB,GAAID,GAAIhnB,EAAIgnB,MAIpC,MAAO,CAACC,GAAI,EAAGD,GAAI3+B,EAAKd,OAAS,GAEnC,SAAS2sD,GAAyB/3B,EAAO8jB,EAAMkU,EAAUC,EAASj3B,GAChE,MAAM8gB,EAAW9hB,EAAMk4B,+BACjB/sD,EAAQ6sD,EAASlU,GACvB,IAAK,IAAIr1C,EAAI,EAAGkX,EAAOm8B,EAAS12C,OAAQqD,EAAIkX,IAAQlX,EAAG,CACrD,MAAM,MAAChD,EAAK,KAAES,GAAQ41C,EAASrzC,IACzB,GAACq8B,EAAE,GAAED,GAAM6sB,GAAa5V,EAASrzC,GAAIq1C,EAAM34C,EAAO61B,GACxD,IAAK,IAAInE,EAAIiO,EAAIjO,GAAKgO,IAAMhO,EAAG,CAC7B,MAAM5kB,EAAU/L,EAAK2wB,GAChB5kB,EAAQ84B,MACXknB,EAAQhgD,EAASxM,EAAOoxB,KAKhC,SAASs7B,GAAyBrU,GAChC,MAAMsU,GAA8B,IAAvBtU,EAAKv9B,QAAQ,KACpB8xC,GAA8B,IAAvBvU,EAAKv9B,QAAQ,KAC1B,OAAO,SAASgF,EAAKC,GACnB,MAAM8sC,EAASF,EAAOv2C,KAAKkI,IAAIwB,EAAI7W,EAAI8W,EAAI9W,GAAK,EAC1C6jD,EAASF,EAAOx2C,KAAKkI,IAAIwB,EAAI1B,EAAI2B,EAAI3B,GAAK,EAChD,OAAOhI,KAAK2H,KAAK3H,KAAKsH,IAAImvC,EAAQ,GAAKz2C,KAAKsH,IAAIovC,EAAQ,KAG5D,SAASC,GAAkBx4B,EAAOg4B,EAAUlU,EAAM2U,EAAkBx3B,GAClE,MAAMgL,EAAQ,GACd,IAAKhL,IAAqBjB,EAAM04B,cAAcV,GAC5C,OAAO/rB,EAET,MAAM0sB,EAAiB,SAAS1gD,EAAS6N,EAAcra,IAChDw1B,GAAqBwE,GAAextB,EAAS+nB,EAAMupB,UAAW,KAG/DtxC,EAAQ2gD,QAAQZ,EAAStjD,EAAGsjD,EAASnuC,EAAG4uC,IAC1CxsB,EAAMh1B,KAAK,CAACgB,UAAS6N,eAAcra,WAIvC,OADAssD,GAAyB/3B,EAAO8jB,EAAMkU,EAAUW,GAAgB,GACzD1sB,EAET,SAAS4sB,GAAsB74B,EAAOg4B,EAAUlU,EAAM2U,GACpD,IAAIxsB,EAAQ,GACZ,SAAS0sB,EAAe1gD,EAAS6N,EAAcra,GAC7C,MAAM,WAAC6lD,EAAU,SAAEC,GAAYt5C,EAAQ6gD,SAAS,CAAC,aAAc,YAAaL,IACtE,MAACttC,GAASN,GAAkB5S,EAAS,CAACvD,EAAGsjD,EAAStjD,EAAGmV,EAAGmuC,EAASnuC,IACnE8B,GAAcR,EAAOmmC,EAAYC,IACnCtlB,EAAMh1B,KAAK,CAACgB,UAAS6N,eAAcra,UAIvC,OADAssD,GAAyB/3B,EAAO8jB,EAAMkU,EAAUW,GACzC1sB,EAET,SAAS8sB,GAAyB/4B,EAAOg4B,EAAUlU,EAAM9iB,EAAWy3B,EAAkBx3B,GACpF,IAAIgL,EAAQ,GACZ,MAAM+sB,EAAiBb,GAAyBrU,GAChD,IAAImV,EAActlD,OAAO4U,kBACzB,SAASowC,EAAe1gD,EAAS6N,EAAcra,GAC7C,MAAMmtD,EAAU3gD,EAAQ2gD,QAAQZ,EAAStjD,EAAGsjD,EAASnuC,EAAG4uC,GACxD,GAAIz3B,IAAc43B,EAChB,OAEF,MAAMrJ,EAASt3C,EAAQihD,eAAeT,GAChCU,IAAgBl4B,GAAoBjB,EAAM04B,cAAcnJ,GAC9D,IAAK4J,IAAgBP,EACnB,OAEF,MAAMvtC,EAAW2tC,EAAehB,EAAUzI,GACtClkC,EAAW4tC,GACbhtB,EAAQ,CAAC,CAACh0B,UAAS6N,eAAcra,UACjCwtD,EAAc5tC,GACLA,IAAa4tC,GACtBhtB,EAAMh1B,KAAK,CAACgB,UAAS6N,eAAcra,UAIvC,OADAssD,GAAyB/3B,EAAO8jB,EAAMkU,EAAUW,GACzC1sB,EAET,SAASmtB,GAAgBp5B,EAAOg4B,EAAUlU,EAAM9iB,EAAWy3B,EAAkBx3B,GAC3E,OAAKA,GAAqBjB,EAAM04B,cAAcV,GAG9B,MAATlU,GAAiB9iB,EAEpB+3B,GAAyB/4B,EAAOg4B,EAAUlU,EAAM9iB,EAAWy3B,EAAkBx3B,GAD7E43B,GAAsB74B,EAAOg4B,EAAUlU,EAAM2U,GAHxC,GAMX,SAASY,GAAar5B,EAAOg4B,EAAUlU,EAAM9iB,EAAWy3B,GACtD,MAAMxsB,EAAQ,GACRqtB,EAAuB,MAATxV,EAAe,WAAa,WAChD,IAAIyV,GAAiB,EAOrB,OANAxB,GAAyB/3B,EAAO8jB,EAAMkU,EAAU,CAAC//C,EAAS6N,EAAcra,KAClEwM,EAAQqhD,GAAatB,EAASlU,GAAO2U,KACvCxsB,EAAMh1B,KAAK,CAACgB,UAAS6N,eAAcra,UACnC8tD,EAAiBA,GAAkBthD,EAAQ2gD,QAAQZ,EAAStjD,EAAGsjD,EAASnuC,EAAG4uC,MAG3Ez3B,IAAcu4B,EACT,GAEFttB,EAET,IAAIutB,GAAc,CAChBzB,4BACA0B,MAAO,CACL,MAAMz5B,EAAOhxB,EAAGoD,EAASqmD,GACvB,MAAMT,EAAWxiB,GAAoBxmC,EAAGgxB,GAClC8jB,EAAO1xC,EAAQ0xC,MAAQ,IACvB7iB,EAAmB7uB,EAAQ6uB,mBAAoB,EAC/CgL,EAAQ75B,EAAQ4uB,UAClBw3B,GAAkBx4B,EAAOg4B,EAAUlU,EAAM2U,EAAkBx3B,GAC3Dm4B,GAAgBp5B,EAAOg4B,EAAUlU,GAAM,EAAO2U,EAAkBx3B,GAC9Dd,EAAW,GACjB,OAAK8L,EAAM7gC,QAGX40B,EAAMk4B,+BAA+BzsB,QAAS6E,IAC5C,MAAM7kC,EAAQwgC,EAAM,GAAGxgC,MACjBwM,EAAUq4B,EAAKpkC,KAAKT,GACtBwM,IAAYA,EAAQ84B,MACtB5Q,EAASlpB,KAAK,CAACgB,UAAS6N,aAAcwqB,EAAK7kC,MAAOA,YAG/C00B,GATE,IAWX,QAAQH,EAAOhxB,EAAGoD,EAASqmD,GACzB,MAAMT,EAAWxiB,GAAoBxmC,EAAGgxB,GAClC8jB,EAAO1xC,EAAQ0xC,MAAQ,KACvB7iB,EAAmB7uB,EAAQ6uB,mBAAoB,EACrD,IAAIgL,EAAQ75B,EAAQ4uB,UAChBw3B,GAAkBx4B,EAAOg4B,EAAUlU,EAAM2U,EAAkBx3B,GAC7Dm4B,GAAgBp5B,EAAOg4B,EAAUlU,GAAM,EAAO2U,EAAkBx3B,GAClE,GAAIgL,EAAM7gC,OAAS,EAAG,CACpB,MAAM0a,EAAemmB,EAAM,GAAGnmB,aACxB5Z,EAAO8zB,EAAMknB,eAAephC,GAAc5Z,KAChD+/B,EAAQ,GACR,IAAK,IAAIx9B,EAAI,EAAGA,EAAIvC,EAAKd,SAAUqD,EACjCw9B,EAAMh1B,KAAK,CAACgB,QAAS/L,EAAKuC,GAAIqX,eAAcra,MAAOgD,IAGvD,OAAOw9B,GAET,MAAMjM,EAAOhxB,EAAGoD,EAASqmD,GACvB,MAAMT,EAAWxiB,GAAoBxmC,EAAGgxB,GAClC8jB,EAAO1xC,EAAQ0xC,MAAQ,KACvB7iB,EAAmB7uB,EAAQ6uB,mBAAoB,EACrD,OAAOu3B,GAAkBx4B,EAAOg4B,EAAUlU,EAAM2U,EAAkBx3B,IAEpE,QAAQjB,EAAOhxB,EAAGoD,EAASqmD,GACzB,MAAMT,EAAWxiB,GAAoBxmC,EAAGgxB,GAClC8jB,EAAO1xC,EAAQ0xC,MAAQ,KACvB7iB,EAAmB7uB,EAAQ6uB,mBAAoB,EACrD,OAAOm4B,GAAgBp5B,EAAOg4B,EAAUlU,EAAM1xC,EAAQ4uB,UAAWy3B,EAAkBx3B,IAErF,EAAEjB,EAAOhxB,EAAGoD,EAASqmD,GACnB,MAAMT,EAAWxiB,GAAoBxmC,EAAGgxB,GACxC,OAAOq5B,GAAar5B,EAAOg4B,EAAU,IAAK5lD,EAAQ4uB,UAAWy3B,IAE/D,EAAEz4B,EAAOhxB,EAAGoD,EAASqmD,GACnB,MAAMT,EAAWxiB,GAAoBxmC,EAAGgxB,GACxC,OAAOq5B,GAAar5B,EAAOg4B,EAAU,IAAK5lD,EAAQ4uB,UAAWy3B,MAKnE,MAAMiB,GAAmB,CAAC,OAAQ,MAAO,QAAS,UAClD,SAASC,GAAiBxvC,EAAO6tC,GAC/B,OAAO7tC,EAAM/b,OAAOogB,GAAKA,EAAElH,MAAQ0wC,GAErC,SAAS4B,GAA4BzvC,EAAO25B,GAC1C,OAAO35B,EAAM/b,OAAOogB,IAA0C,IAArCkrC,GAAiBnzC,QAAQiI,EAAElH,MAAekH,EAAE4mB,IAAI0O,OAASA,GAEpF,SAAS+V,GAAa1vC,EAAO9E,GAC3B,OAAO8E,EAAMV,KAAK,CAAC3B,EAAGC,KACpB,MAAMnC,EAAKP,EAAU0C,EAAID,EACnBjC,EAAKR,EAAUyC,EAAIC,EACzB,OAAOnC,EAAG2Y,SAAW1Y,EAAG0Y,OACtB3Y,EAAGna,MAAQoa,EAAGpa,MACdma,EAAG2Y,OAAS1Y,EAAG0Y,SAGrB,SAASu7B,GAAUC,GACjB,MAAMC,EAAc,GACpB,IAAIvrD,EAAGkX,EAAMyvB,EAAK9tB,EAAK26B,EAAOgY,EAC9B,IAAKxrD,EAAI,EAAGkX,GAAQo0C,GAAS,IAAI3uD,OAAQqD,EAAIkX,IAAQlX,EACnD2mC,EAAM2kB,EAAMtrD,KACVupD,SAAU1wC,EAAKlV,SAAU6vC,QAAOgY,cAAc,IAAM7kB,GACtD4kB,EAAY/iD,KAAK,CACfxL,MAAOgD,EACP2mC,MACA9tB,MACAsmC,WAAYxY,EAAIsY,eAChBnvB,OAAQ6W,EAAI7W,OACZ0jB,MAAOA,GAAU36B,EAAM26B,EACvBgY,gBAGJ,OAAOD,EAET,SAASE,GAAYC,GACnB,MAAMlX,EAAS,GACf,IAAK,MAAMmX,KAAQD,EAAS,CAC1B,MAAM,MAAClY,EAAK,IAAE36B,EAAG,YAAE2yC,GAAeG,EAClC,IAAKnY,IAAUyX,GAAiBhsB,SAASpmB,GACvC,SAEF,MAAM8mB,EAAS6U,EAAOhB,KAAWgB,EAAOhB,GAAS,CAAC1R,MAAO,EAAG8pB,OAAQ,EAAG97B,OAAQ,EAAGvW,KAAM,IACxFomB,EAAOmC,QACPnC,EAAO7P,QAAU07B,EAEnB,OAAOhX,EAET,SAASqX,GAAcH,EAASI,GAC9B,MAAMtX,EAASiX,GAAYC,IACrB,aAACK,EAAY,cAAEC,GAAiBF,EACtC,IAAI9rD,EAAGkX,EAAMhV,EACb,IAAKlC,EAAI,EAAGkX,EAAOw0C,EAAQ/uD,OAAQqD,EAAIkX,IAAQlX,EAAG,CAChDkC,EAASwpD,EAAQ1rD,GACjB,MAAM,SAACisD,GAAY/pD,EAAOykC,IACpB6M,EAAQgB,EAAOtyC,EAAOsxC,OACtBvD,EAASuD,GAAStxC,EAAOspD,YAAchY,EAAM1jB,OAC/C5tB,EAAOi9C,YACTj9C,EAAOyR,MAAQs8B,EAASA,EAAS8b,EAAeE,GAAYH,EAAOI,eACnEhqD,EAAO0R,OAASo4C,IAEhB9pD,EAAOyR,MAAQo4C,EACf7pD,EAAO0R,OAASq8B,EAASA,EAAS+b,EAAgBC,GAAYH,EAAOK,iBAGzE,OAAO3X,EAET,SAAS4X,GAAiBd,GACxB,MAAMC,EAAcF,GAAUC,GACxBW,EAAWb,GAAaG,EAAY5rD,OAAOgsD,GAAQA,EAAKhlB,IAAIslB,WAAW,GACvE32C,EAAO81C,GAAaF,GAAiBK,EAAa,SAAS,GAC3Dh2C,EAAQ61C,GAAaF,GAAiBK,EAAa,UACnDn0B,EAAMg0B,GAAaF,GAAiBK,EAAa,QAAQ,GACzDl0B,EAAS+zB,GAAaF,GAAiBK,EAAa,WACpDc,EAAmBlB,GAA4BI,EAAa,KAC5De,EAAiBnB,GAA4BI,EAAa,KAChE,MAAO,CACLU,WACAM,WAAYj3C,EAAK0nC,OAAO5lB,GACxBo1B,eAAgBj3C,EAAMynC,OAAOsP,GAAgBtP,OAAO3lB,GAAQ2lB,OAAOqP,GACnEvR,UAAWoQ,GAAiBK,EAAa,aACzCkB,SAAUn3C,EAAK0nC,OAAOznC,GAAOynC,OAAOsP,GACpCnN,WAAY/nB,EAAI4lB,OAAO3lB,GAAQ2lB,OAAOqP,IAG1C,SAASK,GAAeC,EAAY7R,EAAWzhC,EAAGC,GAChD,OAAOlG,KAAKyI,IAAI8wC,EAAWtzC,GAAIyhC,EAAUzhC,IAAMjG,KAAKyI,IAAI8wC,EAAWrzC,GAAIwhC,EAAUxhC,IAEnF,SAASszC,GAAiBD,EAAYE,GACpCF,EAAWv1B,IAAMhkB,KAAKyI,IAAI8wC,EAAWv1B,IAAKy1B,EAAWz1B,KACrDu1B,EAAWr3C,KAAOlC,KAAKyI,IAAI8wC,EAAWr3C,KAAMu3C,EAAWv3C,MACvDq3C,EAAWt1B,OAASjkB,KAAKyI,IAAI8wC,EAAWt1B,OAAQw1B,EAAWx1B,QAC3Ds1B,EAAWp3C,MAAQnC,KAAKyI,IAAI8wC,EAAWp3C,MAAOs3C,EAAWt3C,OAE3D,SAASu3C,GAAWhS,EAAWgR,EAAQ5pD,EAAQsyC,GAC7C,MAAM,IAAC37B,EAAG,IAAE8tB,GAAOzkC,EACbyqD,EAAa7R,EAAU6R,WAC7B,IAAK52C,GAAS8C,GAAM,CACd3W,EAAOqX,OACTuhC,EAAUjiC,IAAQ3W,EAAOqX,MAE3B,MAAMi6B,EAAQgB,EAAOtyC,EAAOsxC,QAAU,CAACj6B,KAAM,EAAGuoB,MAAO,GACvD0R,EAAMj6B,KAAOnG,KAAKyI,IAAI23B,EAAMj6B,KAAMrX,EAAOi9C,WAAaxY,EAAI/yB,OAAS+yB,EAAIhzB,OACvEzR,EAAOqX,KAAOi6B,EAAMj6B,KAAOi6B,EAAM1R,MACjCgZ,EAAUjiC,IAAQ3W,EAAOqX,KAEvBotB,EAAIomB,YACNH,GAAiBD,EAAYhmB,EAAIomB,cAEnC,MAAMC,EAAW55C,KAAKyI,IAAI,EAAGiwC,EAAOmB,WAAaP,GAAeC,EAAY7R,EAAW,OAAQ,UACzFoS,EAAY95C,KAAKyI,IAAI,EAAGiwC,EAAOqB,YAAcT,GAAeC,EAAY7R,EAAW,MAAO,WAC1FsS,EAAeJ,IAAalS,EAAUt4B,EACtC6qC,EAAgBH,IAAcpS,EAAU58C,EAG9C,OAFA48C,EAAUt4B,EAAIwqC,EACdlS,EAAU58C,EAAIgvD,EACPhrD,EAAOi9C,WACV,CAACmO,KAAMF,EAAcG,MAAOF,GAC5B,CAACC,KAAMD,EAAeE,MAAOH,GAEnC,SAASI,GAAiB1S,GACxB,MAAM6R,EAAa7R,EAAU6R,WAC7B,SAASc,EAAU50C,GACjB,MAAM+iB,EAASxoB,KAAKyI,IAAI8wC,EAAW9zC,GAAOiiC,EAAUjiC,GAAM,GAE1D,OADAiiC,EAAUjiC,IAAQ+iB,EACXA,EAETkf,EAAU1/B,GAAKqyC,EAAU,OACzB3S,EAAU70C,GAAKwnD,EAAU,QACzBA,EAAU,SACVA,EAAU,UAEZ,SAASC,GAAWvO,EAAYrE,GAC9B,MAAM6R,EAAa7R,EAAU6R,WAC7B,SAASgB,EAAmB1nB,GAC1B,MAAM9O,EAAS,CAAC7hB,KAAM,EAAG8hB,IAAK,EAAG7hB,MAAO,EAAG8hB,OAAQ,GAInD,OAHA4O,EAAUjJ,QAASnkB,IACjBse,EAAOte,GAAOzF,KAAKyI,IAAIi/B,EAAUjiC,GAAM8zC,EAAW9zC,MAE7Cse,EAET,OACIw2B,EADGxO,EACgB,CAAC,OAAQ,SACT,CAAC,MAAO,WAEjC,SAASyO,GAAStC,EAAOxQ,EAAWgR,EAAQtX,GAC1C,MAAMqZ,EAAa,GACnB,IAAI7tD,EAAGkX,EAAMhV,EAAQykC,EAAKmnB,EAAO3G,EACjC,IAAKnnD,EAAI,EAAGkX,EAAOo0C,EAAM3uD,OAAQmxD,EAAQ,EAAG9tD,EAAIkX,IAAQlX,EAAG,CACzDkC,EAASopD,EAAMtrD,GACf2mC,EAAMzkC,EAAOykC,IACbA,EAAI8L,OACFvwC,EAAOyR,OAASmnC,EAAUt4B,EAC1BtgB,EAAO0R,QAAUknC,EAAU58C,EAC3BwvD,GAAWxrD,EAAOi9C,WAAYrE,IAEhC,MAAM,KAACwS,EAAI,MAAEC,GAAST,GAAWhS,EAAWgR,EAAQ5pD,EAAQsyC,GAC5DsZ,GAASR,GAAQO,EAAWlxD,OAC5BwqD,EAAUA,GAAWoG,EAChB5mB,EAAIslB,UACP4B,EAAWrlD,KAAKtG,GAGpB,OAAO4rD,GAASF,GAASC,EAAY/S,EAAWgR,EAAQtX,IAAW2S,EAErE,SAAS4G,GAAWpnB,EAAKrxB,EAAM8hB,EAAKzjB,EAAOC,GACzC+yB,EAAIvP,IAAMA,EACVuP,EAAIrxB,KAAOA,EACXqxB,EAAIpxB,MAAQD,EAAO3B,EACnBgzB,EAAItP,OAASD,EAAMxjB,EACnB+yB,EAAIhzB,MAAQA,EACZgzB,EAAI/yB,OAASA,EAEf,SAASo6C,GAAW1C,EAAOxQ,EAAWgR,EAAQtX,GAC5C,MAAMyZ,EAAcnC,EAAOoC,QAC3B,IAAI,EAACjoD,EAAC,EAAEmV,GAAK0/B,EACb,IAAK,MAAM54C,KAAUopD,EAAO,CAC1B,MAAM3kB,EAAMzkC,EAAOykC,IACb6M,EAAQgB,EAAOtyC,EAAOsxC,QAAU,CAAC1R,MAAO,EAAG8pB,OAAQ,EAAG97B,OAAQ,GAC9DA,EAAU5tB,EAAOspD,YAAchY,EAAM1jB,QAAW,EACtD,GAAI5tB,EAAOi9C,WAAY,CACrB,MAAMxrC,EAAQmnC,EAAUt4B,EAAIsN,EACtBlc,EAAS4/B,EAAMj6B,MAAQotB,EAAI/yB,OAC7BsF,GAAQs6B,EAAMr+B,SAChBiG,EAAIo4B,EAAMr+B,OAERwxB,EAAIslB,SACN8B,GAAWpnB,EAAKsnB,EAAY34C,KAAM8F,EAAG0wC,EAAOmB,WAAagB,EAAY14C,MAAQ04C,EAAY34C,KAAM1B,GAE/Fm6C,GAAWpnB,EAAKmU,EAAUxlC,KAAOk+B,EAAMoY,OAAQxwC,EAAGzH,EAAOC,GAE3D4/B,EAAMr+B,MAAQiG,EACdo4B,EAAMoY,QAAUj4C,EAChByH,EAAIurB,EAAItP,WACH,CACL,MAAMzjB,EAASknC,EAAU58C,EAAI4xB,EACvBnc,EAAQ6/B,EAAMj6B,MAAQotB,EAAIhzB,MAC5BuF,GAAQs6B,EAAMr+B,SAChBlP,EAAIutC,EAAMr+B,OAERwxB,EAAIslB,SACN8B,GAAWpnB,EAAK1gC,EAAGgoD,EAAY72B,IAAKzjB,EAAOm4C,EAAOqB,YAAcc,EAAY52B,OAAS42B,EAAY72B,KAEjG22B,GAAWpnB,EAAK1gC,EAAG60C,EAAU1jB,IAAMoc,EAAMoY,OAAQj4C,EAAOC,GAE1D4/B,EAAMr+B,MAAQlP,EACdutC,EAAMoY,QAAUh4C,EAChB3N,EAAI0gC,EAAIpxB,OAGZulC,EAAU70C,EAAIA,EACd60C,EAAU1/B,EAAIA,EAEhBwY,GAAS6J,IAAI,SAAU,CACrB0wB,aAAa,EACbD,QAAS,CACP92B,IAAK,EACL7hB,MAAO,EACP8hB,OAAQ,EACR/hB,KAAM,KAGV,IAAIo2C,GAAU,CACZ,OAAOn6B,EAAOz0B,GACPy0B,EAAM+5B,QACT/5B,EAAM+5B,MAAQ,IAEhBxuD,EAAKmvD,SAAWnvD,EAAKmvD,WAAY,EACjCnvD,EAAKysD,SAAWzsD,EAAKysD,UAAY,MACjCzsD,EAAKgzB,OAAShzB,EAAKgzB,QAAU,EAC7BhzB,EAAKsxD,QAAUtxD,EAAKsxD,SAAW,WAC7B,MAAO,CAAC,CACNC,EAAG,EACH,KAAKvT,GACHh+C,EAAKkyC,KAAK8L,OAIhBvpB,EAAM+5B,MAAM9iD,KAAK1L,IAEnB,UAAUy0B,EAAO+8B,GACf,MAAMtxD,EAAQu0B,EAAM+5B,MAAQ/5B,EAAM+5B,MAAMxzC,QAAQw2C,IAAe,GAChD,IAAXtxD,GACFu0B,EAAM+5B,MAAMp2B,OAAOl4B,EAAO,IAG9B,UAAUu0B,EAAOz0B,EAAM6G,GACrB7G,EAAKmvD,SAAWtoD,EAAQsoD,SACxBnvD,EAAKysD,SAAW5lD,EAAQ4lD,SACxBzsD,EAAKgzB,OAASnsB,EAAQmsB,QAExB,OAAOyB,EAAO5d,EAAOC,EAAQ26C,GAC3B,IAAKh9B,EACH,OAEF,MAAM28B,EAAUlzB,GAAUzJ,EAAM5tB,QAAQzB,OAAOgsD,SACzChC,EAAiB94C,KAAKyI,IAAIlI,EAAQu6C,EAAQv6C,MAAO,GACjDw4C,EAAkB/4C,KAAKyI,IAAIjI,EAASs6C,EAAQt6C,OAAQ,GACpD03C,EAAQc,GAAiB76B,EAAM+5B,OAC/BkD,EAAgBlD,EAAMmB,SACtBgC,EAAkBnD,EAAMnM,WAC9BzoC,GAAK6a,EAAM+5B,MAAO3kB,IACgB,oBAArBA,EAAI+nB,cACb/nB,EAAI+nB,iBAGR,MAAMC,EAA0BH,EAAc7e,OAAO,CAAC+U,EAAOiH,IAC3DA,EAAKhlB,IAAIhjC,UAAwC,IAA7BgoD,EAAKhlB,IAAIhjC,QAAQukD,QAAoBxD,EAAQA,EAAQ,EAAG,IAAM,EAC9EoH,EAAS3uD,OAAOC,OAAO,CAC3B6vD,WAAYt5C,EACZw5C,YAAav5C,EACbs6C,UACAhC,iBACAC,kBACAJ,aAAcG,EAAiB,EAAIyC,EACnC3C,cAAeG,EAAkB,IAE7BQ,EAAaxvD,OAAOoyB,OAAO,GAAI2+B,GACrCtB,GAAiBD,EAAY3xB,GAAUuzB,IACvC,MAAMzT,EAAY39C,OAAOoyB,OAAO,CAC9Bo9B,aACAnqC,EAAG0pC,EACHhuD,EAAGiuD,EACHlmD,EAAGioD,EAAQ54C,KACX8F,EAAG8yC,EAAQ92B,KACV82B,GACG1Z,EAASqX,GAAc2C,EAAcxR,OAAOyR,GAAkB3C,GACpE8B,GAAStC,EAAMW,SAAUnR,EAAWgR,EAAQtX,GAC5CoZ,GAASY,EAAe1T,EAAWgR,EAAQtX,GACvCoZ,GAASa,EAAiB3T,EAAWgR,EAAQtX,IAC/CoZ,GAASY,EAAe1T,EAAWgR,EAAQtX,GAE7CgZ,GAAiB1S,GACjBkT,GAAW1C,EAAMiB,WAAYzR,EAAWgR,EAAQtX,GAChDsG,EAAU70C,GAAK60C,EAAUt4B,EACzBs4B,EAAU1/B,GAAK0/B,EAAU58C,EACzB8vD,GAAW1C,EAAMkB,eAAgB1R,EAAWgR,EAAQtX,GACpDjjB,EAAMupB,UAAY,CAChBxlC,KAAMwlC,EAAUxlC,KAChB8hB,IAAK0jB,EAAU1jB,IACf7hB,MAAOulC,EAAUxlC,KAAOwlC,EAAUt4B,EAClC6U,OAAQyjB,EAAU1jB,IAAM0jB,EAAU58C,EAClC0V,OAAQknC,EAAU58C,EAClByV,MAAOmnC,EAAUt4B,GAEnB9L,GAAK40C,EAAMxQ,UAAY54C,IACrB,MAAMykC,EAAMzkC,EAAOykC,IACnBxpC,OAAOoyB,OAAOoX,EAAKpV,EAAMupB,WACzBnU,EAAI8L,OAAOqI,EAAUt4B,EAAGs4B,EAAU58C,EAAG,CAACoX,KAAM,EAAG8hB,IAAK,EAAG7hB,MAAO,EAAG8hB,OAAQ,QAK/E,MAAMu3B,GACJ,eAAep5B,EAAQyS,IACvB,eAAe3W,GACb,OAAO,EAET,iBAAiBC,EAAOtsB,EAAM03B,IAC9B,oBAAoBpL,EAAOtsB,EAAM03B,IACjC,sBACE,OAAO,EAET,eAAenzB,EAASmK,EAAOC,EAAQq0B,GAGrC,OAFAt0B,EAAQP,KAAKyI,IAAI,EAAGlI,GAASnK,EAAQmK,OACrCC,EAASA,GAAUpK,EAAQoK,OACpB,CACLD,QACAC,OAAQR,KAAKyI,IAAI,EAAGosB,EAAc70B,KAAKuH,MAAMhH,EAAQs0B,GAAer0B,IAGxE,WAAW4hB,GACT,OAAO,EAET,aAAaoc,KAIf,MAAMid,WAAsBD,GAC1B,eAAe9xD,GACb,OAAOA,GAAQA,EAAK24B,YAAc34B,EAAK24B,WAAW,OAAS,KAE7D,aAAamc,GACXA,EAAOjuC,QAAQstB,WAAY,GAI/B,MAAM69B,GAAc,WACdC,GAAc,CAClBC,WAAY,YACZC,UAAW,YACXC,SAAU,UACVC,aAAc,aACdC,YAAa,YACbC,YAAa,YACbC,UAAW,UACXC,aAAc,WACdC,WAAY,YAERC,GAAgB/yD,GAAmB,OAAVA,GAA4B,KAAVA,EACjD,SAASgzD,GAAWl6B,EAAQyS,GAC1B,MAAMnW,EAAQ0D,EAAO1D,MACf69B,EAAen6B,EAAOo6B,aAAa,UACnCC,EAAcr6B,EAAOo6B,aAAa,SAcxC,GAbAp6B,EAAOs5B,IAAe,CACpBrgB,QAAS,CACP76B,OAAQ+7C,EACRh8C,MAAOk8C,EACP/9B,MAAO,CACLo2B,QAASp2B,EAAMo2B,QACft0C,OAAQke,EAAMle,OACdD,MAAOme,EAAMne,SAInBme,EAAMo2B,QAAUp2B,EAAMo2B,SAAW,QACjCp2B,EAAMoV,UAAYpV,EAAMoV,WAAa,aACjCuoB,GAAcI,GAAc,CAC9B,MAAMC,EAAe/mB,GAAavT,EAAQ,cACrBrT,IAAjB2tC,IACFt6B,EAAO7hB,MAAQm8C,GAGnB,GAAIL,GAAcE,GAChB,GAA4B,KAAxBn6B,EAAO1D,MAAMle,OACf4hB,EAAO5hB,OAAS4hB,EAAO7hB,OAASs0B,GAAe,OAC1C,CACL,MAAM8nB,EAAgBhnB,GAAavT,EAAQ,eACrBrT,IAAlB4tC,IACFv6B,EAAO5hB,OAASm8C,GAItB,OAAOv6B,EAET,MAAMw6B,KAAuBrnB,IAA+B,CAACsnB,SAAS,GACtE,SAASC,GAAYx/B,EAAMzrB,EAAM03B,GAC/BjM,EAAKmY,iBAAiB5jC,EAAM03B,EAAUqzB,IAExC,SAASG,GAAe5+B,EAAOtsB,EAAM03B,GACnCpL,EAAMiE,OAAOsT,oBAAoB7jC,EAAM03B,EAAUqzB,IAEnD,SAASI,GAAgB5gB,EAAOje,GAC9B,MAAMtsB,EAAO8pD,GAAYvf,EAAMvqC,OAASuqC,EAAMvqC,MACxC,EAACgB,EAAC,EAAEmV,GAAK2rB,GAAoByI,EAAOje,GAC1C,MAAO,CACLtsB,OACAssB,QACA8+B,OAAQ7gB,EACRvpC,OAASkc,IAANlc,EAAkBA,EAAI,KACzBmV,OAAS+G,IAAN/G,EAAkBA,EAAI,MAG7B,SAASk1C,GAAiBC,EAAU/6B,GAClC,IAAK,MAAM9E,KAAQ6/B,EACjB,GAAI7/B,IAAS8E,GAAU9E,EAAK8/B,SAASh7B,GACnC,OAAO,EAIb,SAASi7B,GAAqBl/B,EAAOtsB,EAAM03B,GACzC,MAAMnH,EAASjE,EAAMiE,OACfk7B,EAAW,IAAIC,iBAAiBC,IACpC,IAAIC,GAAU,EACd,IAAK,MAAMxS,KAASuS,EAClBC,EAAUA,GAAWP,GAAiBjS,EAAMyS,WAAYt7B,GACxDq7B,EAAUA,IAAYP,GAAiBjS,EAAM0S,aAAcv7B,GAEzDq7B,GACFl0B,MAIJ,OADA+zB,EAASM,QAAQ5rB,SAAU,CAAC6rB,WAAW,EAAMC,SAAS,IAC/CR,EAET,SAASS,GAAqB5/B,EAAOtsB,EAAM03B,GACzC,MAAMnH,EAASjE,EAAMiE,OACfk7B,EAAW,IAAIC,iBAAiBC,IACpC,IAAIC,GAAU,EACd,IAAK,MAAMxS,KAASuS,EAClBC,EAAUA,GAAWP,GAAiBjS,EAAM0S,aAAcv7B,GAC1Dq7B,EAAUA,IAAYP,GAAiBjS,EAAMyS,WAAYt7B,GAEvDq7B,GACFl0B,MAIJ,OADA+zB,EAASM,QAAQ5rB,SAAU,CAAC6rB,WAAW,EAAMC,SAAS,IAC/CR,EAET,MAAMU,GAAqB,IAAI9nB,IAC/B,IAAI+nB,GAAsB,EAC1B,SAASC,KACP,MAAMC,EAAMx9C,OAAOsd,iBACfkgC,IAAQF,KAGZA,GAAsBE,EACtBH,GAAmBp0B,QAAQ,CAACwU,EAAQjgB,KAC9BA,EAAM8D,0BAA4Bk8B,GACpC/f,OAIN,SAASggB,GAA8BjgC,EAAOigB,GACvC4f,GAAmB73C,MACtBxF,OAAO80B,iBAAiB,SAAUyoB,IAEpCF,GAAmB3zB,IAAIlM,EAAOigB,GAEhC,SAASigB,GAAgClgC,GACvC6/B,GAAmBtwB,OAAOvP,GACrB6/B,GAAmB73C,MACtBxF,OAAO+0B,oBAAoB,SAAUwoB,IAGzC,SAASI,GAAqBngC,EAAOtsB,EAAM03B,GACzC,MAAMnH,EAASjE,EAAMiE,OACf+R,EAAY/R,GAAU6P,GAAe7P,GAC3C,IAAK+R,EACH,OAEF,MAAMiK,EAASv9B,GAAU,CAACN,EAAOC,KAC/B,MAAM4O,EAAI+kB,EAAUI,YACpBhL,EAAShpB,EAAOC,GACZ4O,EAAI+kB,EAAUI,aAChBhL,KAED5oB,QACG28C,EAAW,IAAIiB,eAAef,IAClC,MAAMvS,EAAQuS,EAAQ,GAChBj9C,EAAQ0qC,EAAMuT,YAAYj+C,MAC1BC,EAASyqC,EAAMuT,YAAYh+C,OACnB,IAAVD,GAA0B,IAAXC,GAGnB49B,EAAO79B,EAAOC,KAIhB,OAFA88C,EAASM,QAAQzpB,GACjBiqB,GAA8BjgC,EAAOigB,GAC9Bkf,EAET,SAASmB,GAAgBtgC,EAAOtsB,EAAMyrD,GAChCA,GACFA,EAASoB,aAEE,WAAT7sD,GACFwsD,GAAgClgC,GAGpC,SAASwgC,GAAqBxgC,EAAOtsB,EAAM03B,GACzC,MAAMnH,EAASjE,EAAMiE,OACf6J,EAAQprB,GAAWu7B,IACL,OAAdje,EAAMU,KACR0K,EAASyzB,GAAgB5gB,EAAOje,KAEjCA,EAAQld,IACT,MAAMm7B,EAAQn7B,EAAK,GACnB,MAAO,CAACm7B,EAAOA,EAAM/I,QAAS+I,EAAM9I,WAGtC,OADAwpB,GAAY16B,EAAQvwB,EAAMo6B,GACnBA,EAET,MAAM,WAAoBuvB,GACxB,eAAep5B,EAAQyS,GACrB,MAAM3W,EAAUkE,GAAUA,EAAOC,YAAcD,EAAOC,WAAW,MACjE,OAAInE,GAAWA,EAAQkE,SAAWA,GAChCk6B,GAAWl6B,EAAQyS,GACZ3W,GAEF,KAET,eAAeA,GACb,MAAMkE,EAASlE,EAAQkE,OACvB,IAAKA,EAAOs5B,IACV,OAAO,EAET,MAAMrgB,EAAUjZ,EAAOs5B,IAAargB,QACpC,CAAC,SAAU,SAASzR,QAASnC,IAC3B,MAAMn+B,EAAQ+xC,EAAQ5T,GAClBjlB,GAAclZ,GAChB84B,EAAOw8B,gBAAgBn3B,GAEvBrF,EAAOy8B,aAAap3B,EAAMn+B,KAG9B,MAAMo1B,EAAQ2c,EAAQ3c,OAAS,GAM/B,OALA30B,OAAO2Z,KAAKgb,GAAOkL,QAASl5B,IAC1B0xB,EAAO1D,MAAMhuB,GAAOguB,EAAMhuB,KAE5B0xB,EAAO7hB,MAAQ6hB,EAAO7hB,aACf6hB,EAAOs5B,KACP,EAET,iBAAiBv9B,EAAOtsB,EAAM03B,GAC5BjhC,KAAKotC,oBAAoBvX,EAAOtsB,GAChC,MAAMitD,EAAU3gC,EAAM4gC,WAAa5gC,EAAM4gC,SAAW,IAC9CC,EAAW,CACfC,OAAQ5B,GACR6B,OAAQnB,GACR3f,OAAQkgB,IAEJlI,EAAU4I,EAASntD,IAAS8sD,GAClCG,EAAQjtD,GAAQukD,EAAQj4B,EAAOtsB,EAAM03B,GAEvC,oBAAoBpL,EAAOtsB,GACzB,MAAMitD,EAAU3gC,EAAM4gC,WAAa5gC,EAAM4gC,SAAW,IAC9C9yB,EAAQ6yB,EAAQjtD,GACtB,IAAKo6B,EACH,OAEF,MAAM+yB,EAAW,CACfC,OAAQR,GACRS,OAAQT,GACRrgB,OAAQqgB,IAEJrI,EAAU4I,EAASntD,IAASkrD,GAClC3G,EAAQj4B,EAAOtsB,EAAMo6B,GACrB6yB,EAAQjtD,QAAQkd,EAElB,sBACE,OAAOpO,OAAOsd,iBAEhB,eAAemE,EAAQ7hB,EAAOC,EAAQq0B,GACpC,OAAOH,GAAetS,EAAQ7hB,EAAOC,EAAQq0B,GAE/C,WAAWzS,GACT,MAAM+R,EAAYlC,GAAe7P,GACjC,SAAU+R,IAAaA,EAAUgrB,cAIrC,SAASC,GAAgBh9B,GACvB,OAAK2P,MAAiD,qBAApBstB,iBAAmCj9B,aAAkBi9B,gBAC9E5D,GAEF,GAGT,MAAM,GACJ,cACEnzD,KAAKuK,OAAIkc,EACTzmB,KAAK0f,OAAI+G,EACTzmB,KAAKyK,QAAS,EACdzK,KAAKiI,aAAUwe,EACfzmB,KAAK42C,iBAAcnwB,EAErB,gBAAgB6nC,GACd,MAAM,EAAC/jD,EAAC,EAAEmV,GAAK1f,KAAK2uD,SAAS,CAAC,IAAK,KAAML,GACzC,MAAO,CAAC/jD,IAAGmV,KAEb,WACE,OAAOF,GAASxf,KAAKuK,IAAMiV,GAASxf,KAAK0f,GAE3C,SAASzf,EAAO+2D,GACd,MAAMrkB,EAAQ3yC,KAAK42C,YACnB,IAAKogB,IAAUrkB,EACb,OAAO3yC,KAET,MAAMumB,EAAM,GAIZ,OAHAtmB,EAAMqhC,QAAQnC,IACZ5Y,EAAI4Y,GAAQwT,EAAMxT,IAASwT,EAAMxT,GAAM10B,SAAWkoC,EAAMxT,GAAMgW,IAAMn1C,KAAKm/B,KAEpE5Y,GAGX,GAAQ2R,SAAW,GACnB,GAAQ++B,mBAAgBxwC,EAExB,MAAMywC,GAAa,CACjB,OAAOl2D,GACL,OAAOmZ,GAAQnZ,GAASA,EAAQ,GAAKA,GAEvC,QAAQm2D,EAAW71D,EAAOugD,GACxB,GAAkB,IAAdsV,EACF,MAAO,IAET,MAAMrpB,EAAS9tC,KAAK61B,MAAM5tB,QAAQ6lC,OAClC,IAAIspB,EACA9uB,EAAQ6uB,EACZ,GAAItV,EAAM5gD,OAAS,EAAG,CACpB,MAAMo2D,EAAU3/C,KAAKyI,IAAIzI,KAAKkI,IAAIiiC,EAAM,GAAG7gD,OAAQ0W,KAAKkI,IAAIiiC,EAAMA,EAAM5gD,OAAS,GAAGD,SAChFq2D,EAAU,MAAQA,EAAU,QAC9BD,EAAW,cAEb9uB,EAAQgvB,GAAeH,EAAWtV,GAEpC,MAAM0V,EAAW94C,GAAM/G,KAAKkI,IAAI0oB,IAC1BkvB,EAAa9/C,KAAKyI,IAAIzI,KAAKwI,KAAK,EAAIxI,KAAKuH,MAAMs4C,GAAW,IAAK,GAC/DtvD,EAAU,CAACmvD,WAAUK,sBAAuBD,EAAYE,sBAAuBF,GAErF,OADA/1D,OAAOoyB,OAAO5rB,EAASjI,KAAKiI,QAAQ45C,MAAM33C,QACnCokC,GAAa6oB,EAAWrpB,EAAQ7lC,IAEzC,YAAYkvD,EAAW71D,EAAOugD,GAC5B,GAAkB,IAAdsV,EACF,MAAO,IAET,MAAM7hB,EAAS6hB,EAAaz/C,KAAKsH,IAAI,GAAItH,KAAKuH,MAAMR,GAAM04C,KAC1D,OAAe,IAAX7hB,GAA2B,IAAXA,GAA2B,IAAXA,EAC3B4hB,GAAWS,QAAQ7+C,KAAK9Y,KAAMm3D,EAAW71D,EAAOugD,GAElD,KAGX,SAASyV,GAAeH,EAAWtV,GACjC,IAAIvZ,EAAQuZ,EAAM5gD,OAAS,EAAI4gD,EAAM,GAAG7gD,MAAQ6gD,EAAM,GAAG7gD,MAAQ6gD,EAAM,GAAG7gD,MAAQ6gD,EAAM,GAAG7gD,MAI3F,OAHI0W,KAAKkI,IAAI0oB,IAAU,GAAK6uB,IAAcz/C,KAAKuH,MAAMk4C,KACnD7uB,EAAQ6uB,EAAYz/C,KAAKuH,MAAMk4C,IAE1B7uB,EAET,IAAIsvB,GAAQ,CAACV,eAqEb,SAASW,GAASzgC,EAAOyqB,GACvB,MAAMiW,EAAW1gC,EAAMnvB,QAAQ45C,MACzBkW,EAAaD,EAASE,eAAiBC,GAAkB7gC,GACzD8gC,EAAeJ,EAASK,MAAMC,QAAUC,GAAgBxW,GAAS,GACjEyW,EAAkBJ,EAAaj3D,OAC/Bs3D,EAAQL,EAAa,GACrBtnB,EAAOsnB,EAAaI,EAAkB,GACtCE,EAAW,GACjB,GAAIF,EAAkBP,EAEpB,OADAU,GAAW5W,EAAO2W,EAAUN,EAAcI,EAAkBP,GACrDS,EAET,MAAMlQ,EAAUoQ,GAAiBR,EAAcrW,EAAOkW,GACtD,GAAIO,EAAkB,EAAG,CACvB,IAAIh0D,EAAGkX,EACP,MAAMm9C,EAAkBL,EAAkB,EAAI5gD,KAAKC,OAAOi5B,EAAO2nB,IAAUD,EAAkB,IAAM,KAEnG,IADA,GAAKzW,EAAO2W,EAAUlQ,EAASpuC,GAAcy+C,GAAmB,EAAIJ,EAAQI,EAAiBJ,GACxFj0D,EAAI,EAAGkX,EAAO88C,EAAkB,EAAGh0D,EAAIkX,EAAMlX,IAChD,GAAKu9C,EAAO2W,EAAUlQ,EAAS4P,EAAa5zD,GAAI4zD,EAAa5zD,EAAI,IAGnE,OADA,GAAKu9C,EAAO2W,EAAUlQ,EAAS1X,EAAM12B,GAAcy+C,GAAmB9W,EAAM5gD,OAAS2vC,EAAO+nB,GACrFH,EAGT,OADA,GAAK3W,EAAO2W,EAAUlQ,GACfkQ,EAET,SAASP,GAAkB7gC,GACzB,MAAMuvB,EAASvvB,EAAMnvB,QAAQ0+C,OACvBiS,EAAaxhC,EAAMyhC,YACnBC,EAAW1hC,EAAMsqB,QAAUkX,GAAcjS,EAAS,EAAI,GACtDoS,EAAW3hC,EAAM4hC,WAAaJ,EACpC,OAAOlhD,KAAKuH,MAAMvH,KAAKwI,IAAI44C,EAAUC,IAEvC,SAASL,GAAiBR,EAAcrW,EAAOkW,GAC7C,MAAMkB,EAAmBC,GAAehB,GAClC5P,EAAUzG,EAAM5gD,OAAS82D,EAC/B,IAAKkB,EACH,OAAOvhD,KAAKyI,IAAImoC,EAAS,GAE3B,MAAM6Q,EAAU/5C,GAAW65C,GAC3B,IAAK,IAAI30D,EAAI,EAAGkX,EAAO29C,EAAQl4D,OAAS,EAAGqD,EAAIkX,EAAMlX,IAAK,CACxD,MAAMiwC,EAAS4kB,EAAQ70D,GACvB,GAAIiwC,EAAS+T,EACX,OAAO/T,EAGX,OAAO78B,KAAKyI,IAAImoC,EAAS,GAE3B,SAAS+P,GAAgBxW,GACvB,MAAMpzC,EAAS,GACf,IAAInK,EAAGkX,EACP,IAAKlX,EAAI,EAAGkX,EAAOqmC,EAAM5gD,OAAQqD,EAAIkX,EAAMlX,IACrCu9C,EAAMv9C,GAAG6zD,OACX1pD,EAAO3B,KAAKxI,GAGhB,OAAOmK,EAET,SAASgqD,GAAW5W,EAAO2W,EAAUN,EAAc5P,GACjD,IAEIhkD,EAFA8hC,EAAQ,EACRe,EAAO+wB,EAAa,GAGxB,IADA5P,EAAU5wC,KAAK0hD,KAAK9Q,GACfhkD,EAAI,EAAGA,EAAIu9C,EAAM5gD,OAAQqD,IACxBA,IAAM6iC,IACRqxB,EAAS1rD,KAAK+0C,EAAMv9C,IACpB8hC,IACAe,EAAO+wB,EAAa9xB,EAAQkiB,IAIlC,SAAS,GAAKzG,EAAO2W,EAAUlQ,EAAS+Q,EAAYC,GAClD,MAAM7/C,EAAQiB,GAAe2+C,EAAY,GACnC3/C,EAAMhC,KAAKwI,IAAIxF,GAAe4+C,EAAUzX,EAAM5gD,QAAS4gD,EAAM5gD,QACnE,IACIA,EAAQqD,EAAG6iC,EADXf,EAAQ,EAEZkiB,EAAU5wC,KAAK0hD,KAAK9Q,GAChBgR,IACFr4D,EAASq4D,EAAWD,EACpB/Q,EAAUrnD,EAASyW,KAAKuH,MAAMhe,EAASqnD,IAEzCnhB,EAAO1tB,EACP,MAAO0tB,EAAO,EACZf,IACAe,EAAOzvB,KAAKC,MAAM8B,EAAQ2sB,EAAQkiB,GAEpC,IAAKhkD,EAAIoT,KAAKyI,IAAI1G,EAAO,GAAInV,EAAIoV,EAAKpV,IAChCA,IAAM6iC,IACRqxB,EAAS1rD,KAAK+0C,EAAMv9C,IACpB8hC,IACAe,EAAOzvB,KAAKC,MAAM8B,EAAQ2sB,EAAQkiB,IAIxC,SAAS4Q,GAAe5zB,GACtB,MAAMnqB,EAAMmqB,EAAIrkC,OAChB,IAAIqD,EAAGi1D,EACP,GAAIp+C,EAAM,EACR,OAAO,EAET,IAAKo+C,EAAOj0B,EAAI,GAAIhhC,EAAI,EAAGA,EAAI6W,IAAO7W,EACpC,GAAIghC,EAAIhhC,GAAKghC,EAAIhhC,EAAI,KAAOi1D,EAC1B,OAAO,EAGX,OAAOA,EA5KTrhC,GAAS6J,IAAI,QAAS,CACpByqB,SAAS,EACT7F,QAAQ,EACRzrC,SAAS,EACT+kB,aAAa,EACb2P,OAAQ,QACR5P,MAAO,EACP4mB,KAAM,CACJ4F,SAAS,EACTtvB,UAAW,EACXs8B,YAAY,EACZC,iBAAiB,EACjBC,WAAW,EACXd,WAAY,EACZe,UAAW,CAAC1e,EAAMhzC,IAAYA,EAAQi1B,UACtC08B,UAAW,CAAC3e,EAAMhzC,IAAYA,EAAQksB,MACtCwyB,QAAQ,EACRvU,WAAY,GACZC,iBAAkB,EAClBjX,YAAa,GAEftnB,MAAO,CACL04C,SAAS,EACT9vB,KAAM,GACN81B,QAAS,CACP92B,IAAK,EACLC,OAAQ,IAGZkmB,MAAO,CACLgY,YAAa,EACbC,YAAa,GACbC,QAAQ,EACRC,gBAAiB,EACjBC,gBAAiB,GACjBzH,QAAS,EACThG,SAAS,EACTqL,UAAU,EACVqC,gBAAiB,EACjBC,YAAa,EACb/yD,SAAUwwD,GAAMV,WAAW9hC,OAC3BglC,MAAO,GACPjC,MAAO,GACP5+C,MAAO,SACP8gD,WAAY,OACZC,mBAAmB,EACnBC,cAAe,4BACfC,gBAAiB,KAGrBtiC,GAASuiC,MAAM,cAAe,QAAS,GAAI,SAC3CviC,GAASuiC,MAAM,aAAc,QAAS,GAAI,eAC1CviC,GAASuiC,MAAM,aAAc,cAAe,GAAI,eAChDviC,GAASuiC,MAAM,cAAe,QAAS,GAAI,SAC3CviC,GAASV,SAAS,QAAS,CACzBc,WAAW,EACXH,YAAcr4B,IAAUA,EAAKs4B,WAAW,YAAct4B,EAAKs4B,WAAW,UAAqB,aAATt4B,GAAgC,WAATA,EACzGu4B,WAAav4B,GAAkB,eAATA,GAAkC,mBAATA,IAEjDo4B,GAASV,SAAS,SAAU,CAC1Bc,UAAW,UAEbJ,GAASV,SAAS,cAAe,CAC/BW,YAAcr4B,GAAkB,oBAATA,GAAuC,aAATA,EACrDu4B,WAAav4B,GAAkB,oBAATA,IA+GxB,MAAM46D,GAAgBnhD,GAAoB,SAAVA,EAAmB,QAAoB,UAAVA,EAAoB,OAASA,EACpFohD,GAAiB,CAACvjC,EAAOusB,EAAMgD,IAAoB,QAAThD,GAA2B,SAATA,EAAkBvsB,EAAMusB,GAAQgD,EAASvvB,EAAMusB,GAAQgD,EACzH,SAASiU,GAAOt1B,EAAKu1B,GACnB,MAAMpsD,EAAS,GACTqsD,EAAYx1B,EAAIrkC,OAAS45D,EACzB1/C,EAAMmqB,EAAIrkC,OAChB,IAAIqD,EAAI,EACR,KAAOA,EAAI6W,EAAK7W,GAAKw2D,EACnBrsD,EAAO3B,KAAKw4B,EAAI5tB,KAAKuH,MAAM3a,KAE7B,OAAOmK,EAET,SAASssD,GAAoB3jC,EAAO91B,EAAO05D,GACzC,MAAM/5D,EAASm2B,EAAMyqB,MAAM5gD,OACrBg6D,EAAavjD,KAAKwI,IAAI5e,EAAOL,EAAS,GACtCwY,EAAQ2d,EAAMouB,YACd9rC,EAAM0d,EAAMquB,UACZ9lC,EAAU,KAChB,IACIgnC,EADAuU,EAAY9jC,EAAM0qB,gBAAgBmZ,GAEtC,KAAID,IAEArU,EADa,IAAX1lD,EACOyW,KAAKyI,IAAI+6C,EAAYzhD,EAAOC,EAAMwhD,GACxB,IAAV55D,GACC81B,EAAM0qB,gBAAgB,GAAKoZ,GAAa,GAExCA,EAAY9jC,EAAM0qB,gBAAgBmZ,EAAa,IAAM,EAEjEC,GAAaD,EAAa35D,EAAQqlD,GAAUA,EACxCuU,EAAYzhD,EAAQkG,GAAWu7C,EAAYxhD,EAAMiG,IAIvD,OAAOu7C,EAET,SAASjiC,GAAekiC,EAAQl6D,GAC9B+Z,GAAKmgD,EAASniC,IACZ,MAAMP,EAAKO,EAAMP,GACXc,EAAQd,EAAGx3B,OAAS,EAC1B,IAAIqD,EACJ,GAAIi1B,EAAQt4B,EAAQ,CAClB,IAAKqD,EAAI,EAAGA,EAAIi1B,IAASj1B,SAChB00B,EAAMj3B,KAAK02B,EAAGn0B,IAEvBm0B,EAAGe,OAAO,EAAGD,MAInB,SAAS6hC,GAAkBnzD,GACzB,OAAOA,EAAQyxD,UAAYzxD,EAAQ2wD,WAAa,EAElD,SAASyC,GAAepzD,EAASu3B,GAC/B,IAAKv3B,EAAQukD,QACX,OAAO,EAET,MAAMt2B,EAAOqJ,GAAOt3B,EAAQiuB,KAAMsJ,GAC5BgzB,EAAUlzB,GAAUr3B,EAAQuqD,SAC5B51B,EAAQziB,GAAQlS,EAAQy0B,MAAQz0B,EAAQy0B,KAAKz7B,OAAS,EAC5D,OAAQ27B,EAAQ1G,EAAKG,WAAcm8B,EAAQt6C,OAE7C,SAASojD,GAAmB51B,EAAQtO,GAClC,OAAOgJ,GAAcsF,EAAQ,CAC3BtO,QACA7tB,KAAM,UAGV,SAASgyD,GAAkB71B,EAAQpkC,EAAOmyC,GACxC,OAAOrT,GAAcsF,EAAQ,CAC3B+N,OACAnyC,QACAiI,KAAM,SAGV,SAASiyD,GAAWjiD,EAAOs0C,EAAU3yC,GACnC,IAAIqL,EAAMjN,GAAmBC,GAI7B,OAHK2B,GAAwB,UAAb2yC,IAA2B3yC,GAAwB,UAAb2yC,KACpDtnC,EAAMm0C,GAAan0C,IAEdA,EAET,SAASk1C,GAAUrkC,EAAOuvB,EAAQkH,EAAUt0C,GAC1C,MAAM,IAACmiB,EAAG,KAAE9hB,EAAI,OAAE+hB,EAAM,MAAE9hB,EAAK,MAAEgc,GAASuB,GACpC,UAACgoB,EAAS,OAAE/nB,GAAUxB,EAC5B,IACIuH,EAAUs+B,EAAQC,EADlBphC,EAAW,EAEf,MAAMriB,EAASyjB,EAASD,EAClBzjB,EAAQ4B,EAAQD,EACtB,GAAIwd,EAAMmsB,eAAgB,CAExB,GADAmY,EAASliD,GAAeD,EAAOK,EAAMC,GACjCQ,GAASwzC,GAAW,CACtB,MAAM+N,EAAiBn6D,OAAO2Z,KAAKyyC,GAAU,GACvC7sD,EAAQ6sD,EAAS+N,GACvBD,EAAStkC,EAAOukC,GAAgBha,iBAAiB5gD,GAASkX,EAASyuC,OAEnEgV,EADsB,WAAb9N,GACCzO,EAAUzjB,OAASyjB,EAAU1jB,KAAO,EAAIxjB,EAASyuC,EAElDgU,GAAevjC,EAAOy2B,EAAUlH,GAE3CvpB,EAAWvjB,EAAQD,MACd,CACL,GAAIS,GAASwzC,GAAW,CACtB,MAAM+N,EAAiBn6D,OAAO2Z,KAAKyyC,GAAU,GACvC7sD,EAAQ6sD,EAAS+N,GACvBF,EAASrkC,EAAOukC,GAAgBha,iBAAiB5gD,GAASiX,EAAQ0uC,OAElE+U,EADsB,WAAb7N,GACCzO,EAAUxlC,KAAOwlC,EAAUvlC,OAAS,EAAI5B,EAAQ0uC,EAEjDgU,GAAevjC,EAAOy2B,EAAUlH,GAE3CgV,EAASniD,GAAeD,EAAOoiB,EAAQD,GACvCnB,EAAwB,SAAbszB,GAAuBvvC,GAAUA,GAE9C,MAAO,CAACo9C,SAAQC,SAAQv+B,WAAU7C,YAEpC,MAAM,WAAc,GAClB,YAAYma,GACV6P,QACAvkD,KAAK2B,GAAK+yC,EAAI/yC,GACd3B,KAAKuJ,KAAOmrC,EAAInrC,KAChBvJ,KAAKiI,aAAUwe,EACfzmB,KAAKu2B,IAAMme,EAAIne,IACfv2B,KAAK61B,MAAQ6e,EAAI7e,MACjB71B,KAAK07B,SAAMjV,EACXzmB,KAAK27B,YAASlV,EACdzmB,KAAK4Z,UAAO6M,EACZzmB,KAAK6Z,WAAQ4M,EACbzmB,KAAKiY,WAAQwO,EACbzmB,KAAKkY,YAASuO,EACdzmB,KAAK67D,SAAW,CACdjiD,KAAM,EACNC,MAAO,EACP6hB,IAAK,EACLC,OAAQ,GAEV37B,KAAKo9B,cAAW3W,EAChBzmB,KAAK4rC,eAAYnlB,EACjBzmB,KAAK87D,gBAAar1C,EAClBzmB,KAAK+7D,mBAAgBt1C,EACrBzmB,KAAKg8D,iBAAcv1C,EACnBzmB,KAAKi8D,kBAAex1C,EACpBzmB,KAAK25C,UAAOlzB,EACZzmB,KAAKk8D,mBAAgBz1C,EACrBzmB,KAAKkgB,SAAMuG,EACXzmB,KAAKmgB,SAAMsG,EACXzmB,KAAKm8D,YAAS11C,EACdzmB,KAAK6hD,MAAQ,GACb7hD,KAAKo8D,eAAiB,KACtBp8D,KAAKq8D,YAAc,KACnBr8D,KAAKs8D,YAAc,KACnBt8D,KAAK0hD,QAAU,EACf1hD,KAAKg5D,WAAa,EAClBh5D,KAAKu8D,kBAAoB,GACzBv8D,KAAKwlD,iBAAc/+B,EACnBzmB,KAAKylD,eAAYh/B,EACjBzmB,KAAK0tD,gBAAiB,EACtB1tD,KAAKw8D,cAAW/1C,EAChBzmB,KAAKy8D,cAAWh2C,EAChBzmB,KAAK08D,mBAAgBj2C,EACrBzmB,KAAK28D,mBAAgBl2C,EACrBzmB,KAAK48D,aAAe,EACpB58D,KAAK68D,aAAe,EACpB78D,KAAKmhD,OAAS,GACdnhD,KAAK88D,mBAAoB,EACzB98D,KAAK47C,cAAWn1B,EAElB,KAAKxe,GACHjI,KAAKiI,QAAUA,EAAQi8B,WAAWlkC,KAAK+5B,cACvC/5B,KAAK25C,KAAO1xC,EAAQ0xC,KACpB35C,KAAKy8D,SAAWz8D,KAAKwmC,MAAMv+B,EAAQiY,KACnClgB,KAAKw8D,SAAWx8D,KAAKwmC,MAAMv+B,EAAQkY,KACnCngB,KAAK28D,cAAgB38D,KAAKwmC,MAAMv+B,EAAQ80D,cACxC/8D,KAAK08D,cAAgB18D,KAAKwmC,MAAMv+B,EAAQ+0D,cAE1C,MAAM1iB,EAAKh5C,GACT,OAAOg5C,EAET,gBACE,IAAI,SAACmiB,EAAQ,SAAED,EAAQ,cAAEG,EAAa,cAAED,GAAiB18D,KAKzD,OAJAy8D,EAAWjiD,GAAgBiiD,EAAUjzD,OAAO4U,mBAC5Co+C,EAAWhiD,GAAgBgiD,EAAUhzD,OAAOovC,mBAC5C+jB,EAAgBniD,GAAgBmiD,EAAenzD,OAAO4U,mBACtDs+C,EAAgBliD,GAAgBkiD,EAAelzD,OAAOovC,mBAC/C,CACL14B,IAAK1F,GAAgBiiD,EAAUE,GAC/Bx8C,IAAK3F,GAAgBgiD,EAAUE,GAC/BhkB,WAAYp+B,GAAemiD,GAC3B9jB,WAAYr+B,GAAekiD,IAG/B,UAAU1hB,GACR,IACIl8B,GADA,IAACsB,EAAG,IAAEC,EAAG,WAAEu4B,EAAU,WAAEC,GAAc34C,KAAKy4C,gBAE9C,GAAIC,GAAcC,EAChB,MAAO,CAACz4B,MAAKC,OAEf,MAAM88C,EAAQj9D,KAAKq5C,0BACnB,IAAK,IAAI/0C,EAAI,EAAGkX,EAAOyhD,EAAMh8D,OAAQqD,EAAIkX,IAAQlX,EAC/Csa,EAAQq+C,EAAM34D,GAAGi1C,WAAW2jB,UAAUl9D,KAAM86C,GACvCpC,IACHx4B,EAAMxI,KAAKwI,IAAIA,EAAKtB,EAAMsB,MAEvBy4B,IACHx4B,EAAMzI,KAAKyI,IAAIA,EAAKvB,EAAMuB,MAK9B,OAFAD,EAAMy4B,GAAcz4B,EAAMC,EAAMA,EAAMD,EACtCC,EAAMu4B,GAAcx4B,EAAMC,EAAMD,EAAMC,EAC/B,CACLD,IAAK1F,GAAgB0F,EAAK1F,GAAgB2F,EAAKD,IAC/CC,IAAK3F,GAAgB2F,EAAK3F,GAAgB0F,EAAKC,KAGnD,aACE,MAAO,CACLvG,KAAM5Z,KAAKg8D,aAAe,EAC1BtgC,IAAK17B,KAAK87D,YAAc,EACxBjiD,MAAO7Z,KAAKi8D,cAAgB,EAC5BtgC,OAAQ37B,KAAK+7D,eAAiB,GAGlC,WACE,OAAO/7D,KAAK6hD,MAEd,YACE,MAAM9/C,EAAO/B,KAAK61B,MAAM9zB,KACxB,OAAO/B,KAAKiI,QAAQi2C,SAAWl+C,KAAKujD,eAAiBxhD,EAAKo7D,QAAUp7D,EAAKq7D,UAAYr7D,EAAKm8C,QAAU,GAEtG,eACEl+C,KAAKmhD,OAAS,GACdnhD,KAAK88D,mBAAoB,EAE3B,eACE11D,GAASpH,KAAKiI,QAAQo1D,aAAc,CAACr9D,OAEvC,OAAOo9B,EAAUwO,EAAWY,GAC1B,MAAM,YAACvM,EAAW,MAAED,EAAO6hB,MAAOiW,GAAY93D,KAAKiI,QAC7Cq1D,EAAaxF,EAASwF,WAC5Bt9D,KAAKq9D,eACLr9D,KAAKo9B,SAAWA,EAChBp9B,KAAK4rC,UAAYA,EACjB5rC,KAAK67D,SAAWrvB,EAAU/qC,OAAOoyB,OAAO,CACtCja,KAAM,EACNC,MAAO,EACP6hB,IAAK,EACLC,OAAQ,GACP6Q,GACHxsC,KAAK6hD,MAAQ,KACb7hD,KAAKs8D,YAAc,KACnBt8D,KAAKo8D,eAAiB,KACtBp8D,KAAKq8D,YAAc,KACnBr8D,KAAKu9D,sBACLv9D,KAAKw9D,gBACLx9D,KAAKy9D,qBACLz9D,KAAKg5D,WAAah5D,KAAKujD,eACnBvjD,KAAKiY,MAAQu0B,EAAQ5yB,KAAO4yB,EAAQ3yB,MACpC7Z,KAAKkY,OAASs0B,EAAQ9Q,IAAM8Q,EAAQ7Q,OACnC37B,KAAK88D,oBACR98D,KAAK09D,mBACL19D,KAAK29D,sBACL39D,KAAK49D,kBACL59D,KAAKm8D,OAASr8B,GAAU9/B,KAAMggC,EAAOC,GACrCjgC,KAAK88D,mBAAoB,GAE3B98D,KAAK69D,mBACL79D,KAAK6hD,MAAQ7hD,KAAK89D,cAAgB,GAClC99D,KAAK+9D,kBACL,MAAMC,EAAkBV,EAAat9D,KAAK6hD,MAAM5gD,OAChDjB,KAAKi+D,sBAAsBD,EAAkBpD,GAAO56D,KAAK6hD,MAAOyb,GAAct9D,KAAK6hD,OACnF7hD,KAAKo2C,YACLp2C,KAAKk+D,+BACLl+D,KAAKm+D,yBACLn+D,KAAKo+D,8BACDtG,EAAStL,UAAYsL,EAASD,UAAgC,SAApBC,EAASj8C,UACrD7b,KAAK6hD,MAAQgW,GAAS73D,KAAMA,KAAK6hD,OACjC7hD,KAAKs8D,YAAc,KACnBt8D,KAAKq+D,iBAEHL,GACFh+D,KAAKi+D,sBAAsBj+D,KAAK6hD,OAElC7hD,KAAKs+D,YACLt+D,KAAKu+D,MACLv+D,KAAKw+D,WACLx+D,KAAKy+D,cAEP,YACE,IACI1Y,EAAYE,EADZyY,EAAgB1+D,KAAKiI,QAAQiT,QAE7Blb,KAAKujD,gBACPwC,EAAa/lD,KAAK4Z,KAClBqsC,EAAWjmD,KAAK6Z,QAEhBksC,EAAa/lD,KAAK07B,IAClBuqB,EAAWjmD,KAAK27B,OAChB+iC,GAAiBA,GAEnB1+D,KAAKwlD,YAAcO,EACnB/lD,KAAKylD,UAAYQ,EACjBjmD,KAAK0tD,eAAiBgR,EACtB1+D,KAAK0hD,QAAUuE,EAAWF,EAC1B/lD,KAAK2+D,eAAiB3+D,KAAKiI,QAAQ22D,cAErC,cACEx3D,GAASpH,KAAKiI,QAAQw2D,YAAa,CAACz+D,OAEtC,sBACEoH,GAASpH,KAAKiI,QAAQs1D,oBAAqB,CAACv9D,OAE9C,gBACMA,KAAKujD,gBACPvjD,KAAKiY,MAAQjY,KAAKo9B,SAClBp9B,KAAK4Z,KAAO,EACZ5Z,KAAK6Z,MAAQ7Z,KAAKiY,QAElBjY,KAAKkY,OAASlY,KAAK4rC,UACnB5rC,KAAK07B,IAAM,EACX17B,KAAK27B,OAAS37B,KAAKkY,QAErBlY,KAAKg8D,YAAc,EACnBh8D,KAAK87D,WAAa,EAClB97D,KAAKi8D,aAAe,EACpBj8D,KAAK+7D,cAAgB,EAEvB,qBACE30D,GAASpH,KAAKiI,QAAQw1D,mBAAoB,CAACz9D,OAE7C,WAAWF,GACTE,KAAK61B,MAAMgpC,cAAc/+D,EAAME,KAAK+5B,cACpC3yB,GAASpH,KAAKiI,QAAQnI,GAAO,CAACE,OAEhC,mBACEA,KAAK8+D,WAAW,oBAElB,uBACA,kBACE9+D,KAAK8+D,WAAW,mBAElB,mBACE9+D,KAAK8+D,WAAW,oBAElB,aACE,MAAO,GAET,kBACE9+D,KAAK8+D,WAAW,mBAElB,8BACE13D,GAASpH,KAAKiI,QAAQ82D,4BAA6B,CAAC/+D,OAEtD,mBAAmB6hD,GACjB,MAAMiW,EAAW93D,KAAKiI,QAAQ45C,MAC9B,IAAIv9C,EAAGkX,EAAMi4B,EACb,IAAKnvC,EAAI,EAAGkX,EAAOqmC,EAAM5gD,OAAQqD,EAAIkX,EAAMlX,IACzCmvC,EAAOoO,EAAMv9C,GACbmvC,EAAKuL,MAAQ53C,GAAS0wD,EAAS1wD,SAAU,CAACqsC,EAAKzyC,MAAOsD,EAAGu9C,GAAQ7hD,MAGrE,6BACEoH,GAASpH,KAAKiI,QAAQ+2D,2BAA4B,CAACh/D,OAErD,+BACEoH,GAASpH,KAAKiI,QAAQi2D,6BAA8B,CAACl+D,OAEvD,yBACE,MAAMiI,EAAUjI,KAAKiI,QACf6vD,EAAW7vD,EAAQ45C,MACnBod,EAAWj/D,KAAK6hD,MAAM5gD,OACtB44D,EAAc/B,EAAS+B,aAAe,EACtCC,EAAchC,EAASgC,YAC7B,IACIH,EAAW/tB,EAAWszB,EADtBhD,EAAgBrC,EAEpB,IAAK75D,KAAKm/D,eAAiBrH,EAAStL,SAAWqN,GAAeC,GAAemF,GAAY,IAAMj/D,KAAKujD,eAElG,YADAvjD,KAAKk8D,cAAgBrC,GAGvB,MAAMuF,EAAap/D,KAAKq/D,iBAClBC,EAAgBF,EAAWG,OAAOtnD,MAClCunD,EAAiBJ,EAAWK,QAAQvnD,OACpCklB,EAAWrb,GAAY/hB,KAAK61B,MAAM5d,MAAQqnD,EAAe,EAAGt/D,KAAKo9B,UACvEu8B,EAAY1xD,EAAQ0+C,OAAS3mD,KAAKo9B,SAAW6hC,EAAW7hC,GAAY6hC,EAAW,GAC3EK,EAAgB,EAAI3F,IACtBA,EAAYv8B,GAAY6hC,GAAYh3D,EAAQ0+C,OAAS,GAAM,IAC3D/a,EAAY5rC,KAAK4rC,UAAYwvB,GAAkBnzD,EAAQ2+C,MACvDkR,EAAStF,QAAU6I,GAAepzD,EAAQ6L,MAAO9T,KAAK61B,MAAM5tB,QAAQiuB,MACpEgpC,EAAmBxnD,KAAK2H,KAAKigD,EAAgBA,EAAgBE,EAAiBA,GAC9EtD,EAAgB57C,GAAU5I,KAAKwI,IAC7BxI,KAAKgoD,KAAK39C,IAAaq9C,EAAWK,QAAQvnD,OAAS,GAAKyhD,GAAY,EAAG,IACvEjiD,KAAKgoD,KAAK39C,GAAY6pB,EAAYszB,GAAmB,EAAG,IAAMxnD,KAAKgoD,KAAK39C,GAAYy9C,EAAiBN,GAAmB,EAAG,MAE7HhD,EAAgBxkD,KAAKyI,IAAI05C,EAAaniD,KAAKwI,IAAI45C,EAAaoC,KAE9Dl8D,KAAKk8D,cAAgBA,EAEvB,8BACE90D,GAASpH,KAAKiI,QAAQm2D,4BAA6B,CAACp+D,OAEtD,iBACA,YACEoH,GAASpH,KAAKiI,QAAQq2D,UAAW,CAACt+D,OAEpC,MACE,MAAM4rD,EAAU,CACd3zC,MAAO,EACPC,OAAQ,IAEJ,MAAC2d,EAAO5tB,SAAU45C,MAAOiW,EAAUhkD,MAAO6rD,EAAW/Y,KAAMgZ,IAAa5/D,KACxEwsD,EAAUxsD,KAAKm/D,aACf5b,EAAevjD,KAAKujD,eAC1B,GAAIiJ,EAAS,CACX,MAAMqT,EAAcxE,GAAesE,EAAW9pC,EAAM5tB,QAAQiuB,MAQ5D,GAPIqtB,GACFqI,EAAQ3zC,MAAQjY,KAAKo9B,SACrBwuB,EAAQ1zC,OAASkjD,GAAkBwE,GAAYC,IAE/CjU,EAAQ1zC,OAASlY,KAAK4rC,UACtBggB,EAAQ3zC,MAAQmjD,GAAkBwE,GAAYC,GAE5C/H,EAAStL,SAAWxsD,KAAK6hD,MAAM5gD,OAAQ,CACzC,MAAM,MAACs3D,EAAK,KAAE3nB,EAAI,OAAE2uB,EAAM,QAAEE,GAAWz/D,KAAKq/D,iBACtCS,EAAiC,EAAnBhI,EAAStF,QACvBuN,EAAe3/C,GAAUpgB,KAAKk8D,eAC9B54C,EAAM5L,KAAK4L,IAAIy8C,GACf19C,EAAM3K,KAAK2K,IAAI09C,GACrB,GAAIxc,EAAc,CAChB,MAAMyc,EAAclI,EAASiC,OAAS,EAAI13C,EAAMk9C,EAAOtnD,MAAQqL,EAAMm8C,EAAQvnD,OAC7E0zC,EAAQ1zC,OAASR,KAAKwI,IAAIlgB,KAAK4rC,UAAWggB,EAAQ1zC,OAAS8nD,EAAcF,OACpE,CACL,MAAMG,EAAanI,EAASiC,OAAS,EAAIz2C,EAAMi8C,EAAOtnD,MAAQoK,EAAMo9C,EAAQvnD,OAC5E0zC,EAAQ3zC,MAAQP,KAAKwI,IAAIlgB,KAAKo9B,SAAUwuB,EAAQ3zC,MAAQgoD,EAAaH,GAEvE9/D,KAAKkgE,kBAAkB3H,EAAO3nB,EAAMvuB,EAAKiB,IAG7CtjB,KAAKmgE,iBACD5c,GACFvjD,KAAKiY,MAAQjY,KAAK0hD,QAAU7rB,EAAM5d,MAAQjY,KAAK67D,SAASjiD,KAAO5Z,KAAK67D,SAAShiD,MAC7E7Z,KAAKkY,OAAS0zC,EAAQ1zC,SAEtBlY,KAAKiY,MAAQ2zC,EAAQ3zC,MACrBjY,KAAKkY,OAASlY,KAAK0hD,QAAU7rB,EAAM3d,OAASlY,KAAK67D,SAASngC,IAAM17B,KAAK67D,SAASlgC,QAGlF,kBAAkB48B,EAAO3nB,EAAMvuB,EAAKiB,GAClC,MAAOu+B,OAAO,MAACtoC,EAAK,QAAEi5C,GAAQ,SAAE3E,GAAY7tD,KAAKiI,QAC3Cm4D,EAAmC,IAAvBpgE,KAAKk8D,cACjBmE,EAAgC,QAAbxS,GAAoC,MAAd7tD,KAAK25C,KACpD,GAAI35C,KAAKujD,eAAgB,CACvB,MAAM+c,EAAatgE,KAAK8hD,gBAAgB,GAAK9hD,KAAK4Z,KAC5C2mD,EAAcvgE,KAAK6Z,MAAQ7Z,KAAK8hD,gBAAgB9hD,KAAK6hD,MAAM5gD,OAAS,GAC1E,IAAI+6D,EAAc,EACdC,EAAe,EACfmE,EACEC,GACFrE,EAAc14C,EAAMi1C,EAAMtgD,MAC1BgkD,EAAe55C,EAAMuuB,EAAK14B,SAE1B8jD,EAAc35C,EAAMk2C,EAAMrgD,OAC1B+jD,EAAe34C,EAAMstB,EAAK34B,OAET,UAAVsB,EACT0iD,EAAerrB,EAAK34B,MACD,QAAVsB,EACTyiD,EAAczD,EAAMtgD,MACD,UAAVsB,IACTyiD,EAAczD,EAAMtgD,MAAQ,EAC5BgkD,EAAerrB,EAAK34B,MAAQ,GAE9BjY,KAAKg8D,YAActkD,KAAKyI,KAAK67C,EAAcsE,EAAa9N,GAAWxyD,KAAKiY,OAASjY,KAAKiY,MAAQqoD,GAAa,GAC3GtgE,KAAKi8D,aAAevkD,KAAKyI,KAAK87C,EAAesE,EAAc/N,GAAWxyD,KAAKiY,OAASjY,KAAKiY,MAAQsoD,GAAc,OAC1G,CACL,IAAIzE,EAAalrB,EAAK14B,OAAS,EAC3B6jD,EAAgBxD,EAAMrgD,OAAS,EACrB,UAAVqB,GACFuiD,EAAa,EACbC,EAAgBxD,EAAMrgD,QACH,QAAVqB,IACTuiD,EAAalrB,EAAK14B,OAClB6jD,EAAgB,GAElB/7D,KAAK87D,WAAaA,EAAatJ,EAC/BxyD,KAAK+7D,cAAgBA,EAAgBvJ,GAGzC,iBACMxyD,KAAK67D,WACP77D,KAAK67D,SAASjiD,KAAOlC,KAAKyI,IAAIngB,KAAKg8D,YAAah8D,KAAK67D,SAASjiD,MAC9D5Z,KAAK67D,SAASngC,IAAMhkB,KAAKyI,IAAIngB,KAAK87D,WAAY97D,KAAK67D,SAASngC,KAC5D17B,KAAK67D,SAAShiD,MAAQnC,KAAKyI,IAAIngB,KAAKi8D,aAAcj8D,KAAK67D,SAAShiD,OAChE7Z,KAAK67D,SAASlgC,OAASjkB,KAAKyI,IAAIngB,KAAK+7D,cAAe/7D,KAAK67D,SAASlgC,SAGtE,WACEv0B,GAASpH,KAAKiI,QAAQu2D,SAAU,CAACx+D,OAEnC,eACE,MAAM,KAAC25C,EAAI,SAAEkU,GAAY7tD,KAAKiI,QAC9B,MAAoB,QAAb4lD,GAAmC,WAAbA,GAAkC,MAATlU,EAExD,aACE,OAAO35C,KAAKiI,QAAQsoD,SAEtB,sBAAsB1O,GAGpB,IAAIv9C,EAAGkX,EACP,IAHAxb,KAAK++D,8BACL/+D,KAAKwgE,mBAAmB3e,GAEnBv9C,EAAI,EAAGkX,EAAOqmC,EAAM5gD,OAAQqD,EAAIkX,EAAMlX,IACrC4V,GAAc2nC,EAAMv9C,GAAG06C,SACzB6C,EAAMroB,OAAOl1B,EAAG,GAChBkX,IACAlX,KAGJtE,KAAKg/D,6BAEP,iBACE,IAAII,EAAap/D,KAAKs8D,YACtB,IAAK8C,EAAY,CACf,MAAM9B,EAAat9D,KAAKiI,QAAQ45C,MAAMyb,WACtC,IAAIzb,EAAQ7hD,KAAK6hD,MACbyb,EAAazb,EAAM5gD,SACrB4gD,EAAQ+Y,GAAO/Y,EAAOyb,IAExBt9D,KAAKs8D,YAAc8C,EAAap/D,KAAKygE,mBAAmB5e,EAAOA,EAAM5gD,QAEvE,OAAOm+D,EAET,mBAAmBvd,EAAO5gD,GACxB,MAAM,IAACs1B,EAAKgmC,kBAAmBpB,GAAUn7D,KACnC0gE,EAAS,GACTC,EAAU,GAChB,IAEIr8D,EAAGouB,EAAGyG,EAAM6lB,EAAO4hB,EAAUC,EAAY7nC,EAAO3C,EAAYpe,EAAOC,EAAQ4oD,EAF3EC,EAAkB,EAClBC,EAAmB,EAEvB,IAAK18D,EAAI,EAAGA,EAAIrD,IAAUqD,EAAG,CAO3B,GANA06C,EAAQ6C,EAAMv9C,GAAG06C,MACjB4hB,EAAW5gE,KAAKihE,wBAAwB38D,GACxCiyB,EAAIL,KAAO2qC,EAAaD,EAASjoC,OACjCK,EAAQmiC,EAAO0F,GAAc1F,EAAO0F,IAAe,CAAC9+D,KAAM,GAAI02B,GAAI,IAClEpC,EAAauqC,EAASvqC,WACtBpe,EAAQC,EAAS,EACZgC,GAAc8kC,IAAW7kC,GAAQ6kC,IAG/B,GAAI7kC,GAAQ6kC,GACjB,IAAKtsB,EAAI,EAAGyG,EAAO6lB,EAAM/9C,OAAQyxB,EAAIyG,IAAQzG,EAC3CouC,EAAc9hB,EAAMtsB,GACfxY,GAAc4mD,IAAiB3mD,GAAQ2mD,KAC1C7oD,EAAQugB,GAAajC,EAAKyC,EAAMj3B,KAAMi3B,EAAMP,GAAIxgB,EAAO6oD,GACvD5oD,GAAUme,QAPdpe,EAAQugB,GAAajC,EAAKyC,EAAMj3B,KAAMi3B,EAAMP,GAAIxgB,EAAO+mC,GACvD9mC,EAASme,EAUXqqC,EAAO5zD,KAAKmL,GACZ0oD,EAAQ7zD,KAAKoL,GACb6oD,EAAkBrpD,KAAKyI,IAAIlI,EAAO8oD,GAClCC,EAAmBtpD,KAAKyI,IAAIjI,EAAQ8oD,GAEtC/nC,GAAekiC,EAAQl6D,GACvB,MAAMs+D,EAASmB,EAAOtkD,QAAQ2kD,GACxBtB,EAAUkB,EAAQvkD,QAAQ4kD,GAC1BE,EAAWlkD,IAAQ,CAAE/E,MAAOyoD,EAAO1jD,IAAQ,EAAG9E,OAAQyoD,EAAQ3jD,IAAQ,IAC5E,MAAO,CACLu7C,MAAO2I,EAAQ,GACftwB,KAAMswB,EAAQjgE,EAAS,GACvBs+D,OAAQ2B,EAAQ3B,GAChBE,QAASyB,EAAQzB,GACjBiB,SACAC,WAGJ,iBAAiB3/D,GACf,OAAOA,EAET,iBAAiBA,EAAOM,GACtB,OAAOk9C,IAET,iBAAiB9kB,IACjB,gBAAgBp4B,GACd,MAAMugD,EAAQ7hD,KAAK6hD,MACnB,OAAIvgD,EAAQ,GAAKA,EAAQugD,EAAM5gD,OAAS,EAC/B,KAEFjB,KAAK4hD,iBAAiBC,EAAMvgD,GAAON,OAE5C,mBAAmBmgE,GACbnhE,KAAK0tD,iBACPyT,EAAU,EAAIA,GAEhB,MAAMznC,EAAQ15B,KAAKwlD,YAAc2b,EAAUnhE,KAAK0hD,QAChD,OAAO1/B,GAAYhiB,KAAK2+D,eAAiBllC,GAAYz5B,KAAK61B,MAAO6D,EAAO,GAAKA,GAE/E,mBAAmBA,GACjB,MAAMynC,GAAWznC,EAAQ15B,KAAKwlD,aAAexlD,KAAK0hD,QAClD,OAAO1hD,KAAK0tD,eAAiB,EAAIyT,EAAUA,EAE7C,eACE,OAAOnhE,KAAK4hD,iBAAiB5hD,KAAKohE,gBAEpC,eACE,MAAM,IAAClhD,EAAG,IAAEC,GAAOngB,KACnB,OAAOkgB,EAAM,GAAKC,EAAM,EAAIA,EAC1BD,EAAM,GAAKC,EAAM,EAAID,EACrB,EAEJ,WAAW5e,GACT,MAAMugD,EAAQ7hD,KAAK6hD,OAAS,GAC5B,GAAIvgD,GAAS,GAAKA,EAAQugD,EAAM5gD,OAAQ,CACtC,MAAMwyC,EAAOoO,EAAMvgD,GACnB,OAAOmyC,EAAKmI,WACbnI,EAAKmI,SAAW2f,GAAkBv7D,KAAK+5B,aAAcz4B,EAAOmyC,IAE7D,OAAOzzC,KAAK47C,WACZ57C,KAAK47C,SAAW0f,GAAmBt7D,KAAK61B,MAAMkE,aAAc/5B,OAE9D,YACE,MAAMqhE,EAAcrhE,KAAKiI,QAAQ45C,MAC3Byf,EAAMlhD,GAAUpgB,KAAKk8D,eACrB54C,EAAM5L,KAAKkI,IAAIlI,KAAK4L,IAAIg+C,IACxBj/C,EAAM3K,KAAKkI,IAAIlI,KAAK2K,IAAIi/C,IACxBlC,EAAap/D,KAAKq/D,iBAClB7M,EAAU6O,EAAYnH,iBAAmB,EACzCpzC,EAAIs4C,EAAaA,EAAWG,OAAOtnD,MAAQu6C,EAAU,EACrDhwD,EAAI48D,EAAaA,EAAWK,QAAQvnD,OAASs6C,EAAU,EAC7D,OAAOxyD,KAAKujD,eACR/gD,EAAI8gB,EAAMwD,EAAIzE,EAAMyE,EAAIxD,EAAM9gB,EAAI6f,EAClC7f,EAAI6f,EAAMyE,EAAIxD,EAAM9gB,EAAI8gB,EAAMwD,EAAIzE,EAExC,aACE,MAAMmqC,EAAUxsD,KAAKiI,QAAQukD,QAC7B,MAAgB,SAAZA,IACOA,EAEJxsD,KAAKq5C,0BAA0Bp4C,OAAS,EAEjD,sBAAsBm+C,GACpB,MAAMzF,EAAO35C,KAAK25C,KACZ9jB,EAAQ71B,KAAK61B,MACb5tB,EAAUjI,KAAKiI,SACf,KAAC2+C,EAAI,SAAEiH,GAAY5lD,EACnB0+C,EAASC,EAAKD,OACdpD,EAAevjD,KAAKujD,eACpB1B,EAAQ7hD,KAAK6hD,MACb0f,EAAc1f,EAAM5gD,QAAU0lD,EAAS,EAAI,GAC3C6a,EAAKpG,GAAkBxU,GACvB9kB,EAAQ,GACR2/B,EAAa7a,EAAK1iB,WAAWlkC,KAAK+5B,cAClC2nC,EAAYD,EAAWjI,WAAaiI,EAAWrmC,YAAc,EAC7DumC,EAAgBD,EAAY,EAC5BE,EAAmB,SAASloC,GAChC,OAAOD,GAAY5D,EAAO6D,EAAOgoC,IAEnC,IAAIG,EAAav9D,EAAG42D,EAAW4G,EAC3BC,EAAKC,EAAKC,EAAKC,EAAKC,EAAIC,EAAIC,EAAIC,EACpC,GAAiB,QAAbzU,EACFgU,EAAcD,EAAiB5hE,KAAK27B,QACpCqmC,EAAMhiE,KAAK27B,OAAS6lC,EACpBU,EAAML,EAAcF,EACpBS,EAAKR,EAAiBxiB,EAAU1jB,KAAOimC,EACvCW,EAAKljB,EAAUzjB,YACV,GAAiB,WAAbkyB,EACTgU,EAAcD,EAAiB5hE,KAAK07B,KACpC0mC,EAAKhjB,EAAU1jB,IACf4mC,EAAKV,EAAiBxiB,EAAUzjB,QAAUgmC,EAC1CK,EAAMH,EAAcF,EACpBO,EAAMliE,KAAK07B,IAAM8lC,OACZ,GAAiB,SAAb3T,EACTgU,EAAcD,EAAiB5hE,KAAK6Z,OACpCkoD,EAAM/hE,KAAK6Z,MAAQ2nD,EACnBS,EAAMJ,EAAcF,EACpBQ,EAAKP,EAAiBxiB,EAAUxlC,MAAQ+nD,EACxCU,EAAKjjB,EAAUvlC,WACV,GAAiB,UAAbg0C,EACTgU,EAAcD,EAAiB5hE,KAAK4Z,MACpCuoD,EAAK/iB,EAAUxlC,KACfyoD,EAAKT,EAAiBxiB,EAAUvlC,OAAS8nD,EACzCI,EAAMF,EAAcF,EACpBM,EAAMjiE,KAAK4Z,KAAO4nD,OACb,GAAa,MAAT7nB,EAAc,CACvB,GAAiB,WAAbkU,EACFgU,EAAcD,GAAkBxiB,EAAU1jB,IAAM0jB,EAAUzjB,QAAU,EAAI,SACnE,GAAIthB,GAASwzC,GAAW,CAC7B,MAAM+N,EAAiBn6D,OAAO2Z,KAAKyyC,GAAU,GACvC7sD,EAAQ6sD,EAAS+N,GACvBiG,EAAcD,EAAiB5hE,KAAK61B,MAAMwB,OAAOukC,GAAgBha,iBAAiB5gD,IAEpFohE,EAAKhjB,EAAU1jB,IACf4mC,EAAKljB,EAAUzjB,OACfqmC,EAAMH,EAAcF,EACpBO,EAAMF,EAAMR,OACP,GAAa,MAAT7nB,EAAc,CACvB,GAAiB,WAAbkU,EACFgU,EAAcD,GAAkBxiB,EAAUxlC,KAAOwlC,EAAUvlC,OAAS,QAC/D,GAAIQ,GAASwzC,GAAW,CAC7B,MAAM+N,EAAiBn6D,OAAO2Z,KAAKyyC,GAAU,GACvC7sD,EAAQ6sD,EAAS+N,GACvBiG,EAAcD,EAAiB5hE,KAAK61B,MAAMwB,OAAOukC,GAAgBha,iBAAiB5gD,IAEpF+gE,EAAMF,EAAcF,EACpBM,EAAMF,EAAMP,EACZW,EAAK/iB,EAAUxlC,KACfyoD,EAAKjjB,EAAUvlC,MAEjB,MAAM0oD,EAAQ7nD,GAAezS,EAAQ45C,MAAMmW,cAAeuJ,GACpDiB,EAAO9qD,KAAKyI,IAAI,EAAGzI,KAAK0hD,KAAKmI,EAAcgB,IACjD,IAAKj+D,EAAI,EAAGA,EAAIi9D,EAAaj9D,GAAKk+D,EAAM,CACtC,MAAMC,EAAc7b,EAAK1iB,WAAWlkC,KAAK+5B,WAAWz1B,IAC9C44B,EAAYulC,EAAYvlC,UACxBwlC,EAAYD,EAAYtuC,MACxBie,EAAawU,EAAKxU,YAAc,GAChCC,EAAmBowB,EAAYpwB,iBAC/BsnB,EAAY8I,EAAY9I,UACxBC,EAAY6I,EAAY7I,UACxB+I,EAAiBF,EAAYE,gBAAkB,GAC/CC,EAAuBH,EAAYG,qBACzC1H,EAAYH,GAAoB/6D,KAAMsE,EAAGqiD,QACvBlgC,IAAdy0C,IAGJ4G,EAAmBroC,GAAY5D,EAAOqlC,EAAWh+B,GAC7CqmB,EACFwe,EAAME,EAAME,EAAKE,EAAKP,EAEtBE,EAAME,EAAME,EAAKE,EAAKR,EAExBhgC,EAAMh1B,KAAK,CACTi1D,MACAC,MACAC,MACAC,MACAC,KACAC,KACAC,KACAC,KACArqD,MAAOilB,EACP/I,MAAOuuC,EACPtwB,aACAC,mBACAsnB,YACAC,YACA+I,iBACAC,0BAKJ,OAFA5iE,KAAK48D,aAAe2E,EACpBvhE,KAAK68D,aAAegF,EACb//B,EAET,mBAAmBsd,GACjB,MAAMzF,EAAO35C,KAAK25C,KACZ1xC,EAAUjI,KAAKiI,SACf,SAAC4lD,EAAUhM,MAAOwf,GAAep5D,EACjCs7C,EAAevjD,KAAKujD,eACpB1B,EAAQ7hD,KAAK6hD,OACb,MAACtoC,EAAK,WAAE8gD,EAAU,QAAE7H,EAAO,OAAEuH,GAAUsH,EACvCG,EAAKpG,GAAkBnzD,EAAQ2+C,MAC/Bic,EAAiBrB,EAAKhP,EACtBsQ,EAAkB/I,GAAUvH,EAAUqQ,EACtCtoC,GAAYna,GAAUpgB,KAAKk8D,eAC3Bp6B,EAAQ,GACd,IAAIx9B,EAAGkX,EAAMi4B,EAAMuL,EAAOz0C,EAAGmV,EAAG+d,EAAW/D,EAAOxD,EAAMG,EAAY0sC,EAAWC,EAC3EtlC,EAAe,SACnB,GAAiB,QAAbmwB,EACFnuC,EAAI1f,KAAK27B,OAASmnC,EAClBrlC,EAAYz9B,KAAKijE,+BACZ,GAAiB,WAAbpV,EACTnuC,EAAI1f,KAAK07B,IAAMonC,EACfrlC,EAAYz9B,KAAKijE,+BACZ,GAAiB,SAAbpV,EAAqB,CAC9B,MAAMtnC,EAAMvmB,KAAKkjE,wBAAwB1B,GACzC/jC,EAAYlX,EAAIkX,UAChBlzB,EAAIgc,EAAIhc,OACH,GAAiB,UAAbsjD,EAAsB,CAC/B,MAAMtnC,EAAMvmB,KAAKkjE,wBAAwB1B,GACzC/jC,EAAYlX,EAAIkX,UAChBlzB,EAAIgc,EAAIhc,OACH,GAAa,MAATovC,EAAc,CACvB,GAAiB,WAAbkU,EACFnuC,GAAM0/B,EAAU1jB,IAAM0jB,EAAUzjB,QAAU,EAAKknC,OAC1C,GAAIxoD,GAASwzC,GAAW,CAC7B,MAAM+N,EAAiBn6D,OAAO2Z,KAAKyyC,GAAU,GACvC7sD,EAAQ6sD,EAAS+N,GACvBl8C,EAAI1f,KAAK61B,MAAMwB,OAAOukC,GAAgBha,iBAAiB5gD,GAAS6hE,EAElEplC,EAAYz9B,KAAKijE,+BACZ,GAAa,MAATtpB,EAAc,CACvB,GAAiB,WAAbkU,EACFtjD,GAAM60C,EAAUxlC,KAAOwlC,EAAUvlC,OAAS,EAAKgpD,OAC1C,GAAIxoD,GAASwzC,GAAW,CAC7B,MAAM+N,EAAiBn6D,OAAO2Z,KAAKyyC,GAAU,GACvC7sD,EAAQ6sD,EAAS+N,GACvBrxD,EAAIvK,KAAK61B,MAAMwB,OAAOukC,GAAgBha,iBAAiB5gD,GAEzDy8B,EAAYz9B,KAAKkjE,wBAAwB1B,GAAI/jC,UAElC,MAATkc,IACY,UAAVpgC,EACFmkB,EAAe,MACI,QAAVnkB,IACTmkB,EAAe,WAGnB,MAAM0hC,EAAap/D,KAAKq/D,iBACxB,IAAK/6D,EAAI,EAAGkX,EAAOqmC,EAAM5gD,OAAQqD,EAAIkX,IAAQlX,EAAG,CAC9CmvC,EAAOoO,EAAMv9C,GACb06C,EAAQvL,EAAKuL,MACb,MAAMyjB,EAAcpB,EAAYn9B,WAAWlkC,KAAK+5B,WAAWz1B,IAC3Do1B,EAAQ15B,KAAK8hD,gBAAgBx9C,GAAK+8D,EAAYlH,YAC9CjkC,EAAOl2B,KAAKihE,wBAAwB38D,GACpC+xB,EAAaH,EAAKG,WAClB0sC,EAAY5oD,GAAQ6kC,GAASA,EAAM/9C,OAAS,EAC5C,MAAMkiE,EAAYJ,EAAY,EACxB5uC,EAAQsuC,EAAYtuC,MACpB2I,EAAc2lC,EAAYxI,gBAC1Bp9B,EAAc4lC,EAAYzI,gBAChC,IAoCIoJ,EApCAC,EAAgB5lC,EAqCpB,GApCI8lB,GACFh5C,EAAImvB,EACc,UAAd+D,IAEA4lC,EADE/+D,IAAMkX,EAAO,EACExb,KAAKiI,QAAQiT,QAAoB,OAAV,QACzB,IAAN5W,EACQtE,KAAKiI,QAAQiT,QAAmB,QAAT,OAExB,UAKhB8nD,EAFa,QAAbnV,EACiB,SAAfwM,GAAsC,IAAb9/B,GACbwoC,EAAY1sC,EAAaA,EAAa,EAC5B,WAAfgkC,GACK+E,EAAWK,QAAQvnD,OAAS,EAAIirD,EAAY9sC,EAAaA,GAEzD+oC,EAAWK,QAAQvnD,OAASme,EAAa,EAGtC,SAAfgkC,GAAsC,IAAb9/B,EACdlE,EAAa,EACF,WAAfgkC,EACI+E,EAAWK,QAAQvnD,OAAS,EAAIirD,EAAY9sC,EAE5C+oC,EAAWK,QAAQvnD,OAAS6qD,EAAY1sC,EAGrD0jC,IACFiJ,IAAe,KAGjBtjD,EAAIga,EACJspC,GAAc,EAAID,GAAa1sC,EAAa,GAG1CosC,EAAYnI,kBAAmB,CACjC,MAAMgJ,EAAehkC,GAAUmjC,EAAYjI,iBACrCtiD,EAASknD,EAAWuB,QAAQr8D,GAC5B2T,EAAQmnD,EAAWsB,OAAOp8D,GAChC,IAAIo3B,EAAMhc,EAAIsjD,EAAaM,EAAa5nC,IACpC9hB,EAAOrP,EAAI+4D,EAAa1pD,KAC5B,OAAQ8jB,GACR,IAAK,SACHhC,GAAOxjB,EAAS,EAChB,MACF,IAAK,SACHwjB,GAAOxjB,EACP,MAEF,OAAQulB,GACR,IAAK,SACH7jB,GAAQ3B,EAAQ,EAChB,MACF,IAAK,QACH2B,GAAQ3B,EACR,MAEFmrD,EAAW,CACTxpD,OACA8hB,MACAzjB,MAAOA,EAAQqrD,EAAarrD,MAC5BC,OAAQA,EAASorD,EAAaprD,OAC9Bic,MAAOsuC,EAAYlI,eAGvBz4B,EAAMh1B,KAAK,CACTytB,WACAykB,QACA9oB,OACA/B,QACA2I,cACAD,cACAmmC,aACAvlC,UAAW4lC,EACX3lC,eACAH,YAAa,CAAChzB,EAAGmV,GACjB0jD,aAGJ,OAAOthC,EAET,0BACE,MAAM,SAAC+rB,EAAQ,MAAEhM,GAAS7hD,KAAKiI,QACzBsyB,GAAYna,GAAUpgB,KAAKk8D,eACjC,GAAI3hC,EACF,MAAoB,QAAbszB,EAAqB,OAAS,QAEvC,IAAIt0C,EAAQ,SAQZ,MAPoB,UAAhBsoC,EAAMtoC,MACRA,EAAQ,OACiB,QAAhBsoC,EAAMtoC,MACfA,EAAQ,QACiB,UAAhBsoC,EAAMtoC,QACfA,EAAQ,SAEHA,EAET,wBAAwBioD,GACtB,MAAM,SAAC3T,EAAUhM,OAAO,WAACwY,EAAU,OAAEN,EAAM,QAAEvH,IAAYxyD,KAAKiI,QACxDm3D,EAAap/D,KAAKq/D,iBAClBwD,EAAiBrB,EAAKhP,EACtB+M,EAASH,EAAWG,OAAOtnD,MACjC,IAAIwlB,EACAlzB,EAoDJ,MAnDiB,SAAbsjD,EACEkM,GACFxvD,EAAIvK,KAAK6Z,MAAQ24C,EACE,SAAf6H,EACF58B,EAAY,OACY,WAAf48B,GACT58B,EAAY,SACZlzB,GAAMg1D,EAAS,IAEf9hC,EAAY,QACZlzB,GAAKg1D,KAGPh1D,EAAIvK,KAAK6Z,MAAQgpD,EACE,SAAfxI,EACF58B,EAAY,QACY,WAAf48B,GACT58B,EAAY,SACZlzB,GAAMg1D,EAAS,IAEf9hC,EAAY,OACZlzB,EAAIvK,KAAK4Z,OAGS,UAAbi0C,EACLkM,GACFxvD,EAAIvK,KAAK4Z,KAAO44C,EACG,SAAf6H,EACF58B,EAAY,QACY,WAAf48B,GACT58B,EAAY,SACZlzB,GAAMg1D,EAAS,IAEf9hC,EAAY,OACZlzB,GAAKg1D,KAGPh1D,EAAIvK,KAAK4Z,KAAOipD,EACG,SAAfxI,EACF58B,EAAY,OACY,WAAf48B,GACT58B,EAAY,SACZlzB,GAAKg1D,EAAS,IAEd9hC,EAAY,QACZlzB,EAAIvK,KAAK6Z,QAIb4jB,EAAY,QAEP,CAACA,YAAWlzB,KAErB,oBACE,GAAIvK,KAAKiI,QAAQ45C,MAAMkY,OACrB,OAEF,MAAMlkC,EAAQ71B,KAAK61B,MACbg4B,EAAW7tD,KAAKiI,QAAQ4lD,SAC9B,MAAiB,SAAbA,GAAoC,UAAbA,EAClB,CAACnyB,IAAK,EAAG9hB,KAAM5Z,KAAK4Z,KAAM+hB,OAAQ9F,EAAM3d,OAAQ2B,MAAO7Z,KAAK6Z,OAClD,QAAbg0C,GAAmC,WAAbA,EACnB,CAACnyB,IAAK17B,KAAK07B,IAAK9hB,KAAM,EAAG+hB,OAAQ37B,KAAK27B,OAAQ9hB,MAAOgc,EAAM5d,YADlE,EAIJ,iBACE,MAAM,IAACse,EAAKtuB,SAAS,gBAACutB,GAAgB,KAAE5b,EAAI,IAAE8hB,EAAG,MAAEzjB,EAAK,OAAEC,GAAUlY,KAChEw1B,IACFe,EAAI2C,OACJ3C,EAAIiH,UAAYhI,EAChBe,EAAIgtC,SAAS3pD,EAAM8hB,EAAKzjB,EAAOC,GAC/Bqe,EAAI+C,WAGR,qBAAqBt4B,GACnB,MAAM4lD,EAAO5mD,KAAKiI,QAAQ2+C,KAC1B,IAAK5mD,KAAKm/D,eAAiBvY,EAAK4F,QAC9B,OAAO,EAET,MAAM3K,EAAQ7hD,KAAK6hD,MACbvgD,EAAQugD,EAAM2hB,UAAUrhD,GAAKA,EAAEnhB,QAAUA,GAC/C,GAAIM,GAAS,EAAG,CACd,MAAMq7B,EAAOiqB,EAAK1iB,WAAWlkC,KAAK+5B,WAAWz4B,IAC7C,OAAOq7B,EAAKO,UAEd,OAAO,EAET,SAASkiB,GACP,MAAMwH,EAAO5mD,KAAKiI,QAAQ2+C,KACpBrwB,EAAMv2B,KAAKu2B,IACXuL,EAAQ9hC,KAAKo8D,iBAAmBp8D,KAAKo8D,eAAiBp8D,KAAKyjE,sBAAsBrkB,IACvF,IAAI96C,EAAGkX,EACP,MAAMkoD,EAAW,CAACj8C,EAAIC,EAAI0O,KACnBA,EAAMne,OAAUme,EAAMjC,QAG3BoC,EAAI2C,OACJ3C,EAAI2G,UAAY9G,EAAMne,MACtBse,EAAI0G,YAAc7G,EAAMjC,MACxBoC,EAAIotC,YAAYvtC,EAAMgc,YAAc,IACpC7b,EAAIqtC,eAAiBxtC,EAAMic,iBAC3B9b,EAAIqE,YACJrE,EAAIwE,OAAOtT,EAAGld,EAAGkd,EAAG/H,GACpB6W,EAAIyE,OAAOtT,EAAGnd,EAAGmd,EAAGhI,GACpB6W,EAAI8E,SACJ9E,EAAI+C,YAEN,GAAIstB,EAAK4F,QACP,IAAKloD,EAAI,EAAGkX,EAAOsmB,EAAM7gC,OAAQqD,EAAIkX,IAAQlX,EAAG,CAC9C,MAAMlD,EAAO0gC,EAAMx9B,GACfsiD,EAAK6S,iBACPiK,EACE,CAACn5D,EAAGnJ,EAAK+gE,GAAIziD,EAAGte,EAAKghE,IACrB,CAAC73D,EAAGnJ,EAAKihE,GAAI3iD,EAAGte,EAAKkhE,IACrBlhE,GAGAwlD,EAAK8S,WACPgK,EACE,CAACn5D,EAAGnJ,EAAK2gE,IAAKriD,EAAGte,EAAK4gE,KACtB,CAACz3D,EAAGnJ,EAAK6gE,IAAKviD,EAAGte,EAAK8gE,KACtB,CACE/tC,MAAO/yB,EAAKw4D,UACZ3hD,MAAO7W,EAAKu4D,UACZvnB,WAAYhxC,EAAKuhE,eACjBtwB,iBAAkBjxC,EAAKwhE,wBAOnC,aACE,MAAM,MAAC/sC,EAAK,IAAEU,EAAKtuB,SAAS,KAAC2+C,IAAS5mD,KAChCyhE,EAAa7a,EAAK1iB,WAAWlkC,KAAK+5B,cAClC2nC,EAAY9a,EAAK4S,WAAaiI,EAAWrmC,YAAc,EAC7D,IAAKsmC,EACH,OAEF,MAAMmC,EAAgBjd,EAAK1iB,WAAWlkC,KAAK+5B,WAAW,IAAImD,UACpD2kC,EAAc7hE,KAAK68D,aACzB,IAAIsF,EAAIE,EAAID,EAAIE,EACZtiE,KAAKujD,gBACP4e,EAAK1oC,GAAY5D,EAAO71B,KAAK4Z,KAAM8nD,GAAaA,EAAY,EAC5DW,EAAK5oC,GAAY5D,EAAO71B,KAAK6Z,MAAOgqD,GAAiBA,EAAgB,EACrEzB,EAAKE,EAAKT,IAEVO,EAAK3oC,GAAY5D,EAAO71B,KAAK07B,IAAKgmC,GAAaA,EAAY,EAC3DY,EAAK7oC,GAAY5D,EAAO71B,KAAK27B,OAAQkoC,GAAiBA,EAAgB,EACtE1B,EAAKE,EAAKR,GAEZtrC,EAAI2C,OACJ3C,EAAI2G,UAAYukC,EAAWrmC,YAC3B7E,EAAI0G,YAAcwkC,EAAWhsC,YAC7Bc,EAAIqE,YACJrE,EAAIwE,OAAOonC,EAAIC,GACf7rC,EAAIyE,OAAOqnC,EAAIC,GACf/rC,EAAI8E,SACJ9E,EAAI+C,UAEN,WAAW8lB,GACT,MAAMiiB,EAAcrhE,KAAKiI,QAAQ45C,MACjC,IAAKwf,EAAY7U,QACf,OAEF,MAAMj2B,EAAMv2B,KAAKu2B,IACXiF,EAAOx7B,KAAK8jE,oBACdtoC,GACFI,GAASrF,EAAKiF,GAEhB,MAAMsG,EAAQ9hC,KAAKq8D,cAAgBr8D,KAAKq8D,YAAcr8D,KAAK+jE,mBAAmB3kB,IAC9E,IAAI96C,EAAGkX,EACP,IAAKlX,EAAI,EAAGkX,EAAOsmB,EAAM7gC,OAAQqD,EAAIkX,IAAQlX,EAAG,CAC9C,MAAMlD,EAAO0gC,EAAMx9B,GACbs8D,EAAWx/D,EAAK80B,KAChB8oB,EAAQ59C,EAAK49C,MACf59C,EAAKgiE,WACP7sC,EAAIiH,UAAYp8B,EAAKgiE,SAASjvC,MAC9BoC,EAAIgtC,SAASniE,EAAKgiE,SAASxpD,KAAMxY,EAAKgiE,SAAS1nC,IAAKt6B,EAAKgiE,SAASnrD,MAAO7W,EAAKgiE,SAASlrD,SAEzF,IAAIwH,EAAIte,EAAK4hE,WACbvmC,GAAWlG,EAAKyoB,EAAO,EAAGt/B,EAAGkhD,EAAUx/D,GAErCo6B,GACFM,GAAWvF,GAGf,YACE,MAAM,IAACA,EAAKtuB,SAAS,SAAC4lD,EAAQ,MAAE/5C,EAAK,QAAEoH,IAAYlb,KACnD,IAAK8T,EAAM04C,QACT,OAEF,MAAMt2B,EAAOqJ,GAAOzrB,EAAMoiB,MACpBs8B,EAAUlzB,GAAUxrB,EAAM0+C,SAC1Bj5C,EAAQzF,EAAMyF,MACpB,IAAIotC,EAASzwB,EAAKG,WAAa,EACd,WAAbw3B,GAAsC,WAAbA,GAAyBxzC,GAASwzC,IAC7DlH,GAAU6L,EAAQ72B,OACdxhB,GAAQrG,EAAM4oB,QAChBiqB,GAAUzwB,EAAKG,YAAcviB,EAAM4oB,KAAKz7B,OAAS,KAGnD0lD,GAAU6L,EAAQ92B,IAEpB,MAAM,OAACggC,EAAM,OAAEC,EAAM,SAAEv+B,EAAQ,SAAE7C,GAAYkhC,GAAUz7D,KAAM2mD,EAAQkH,EAAUt0C,GAC/EkjB,GAAWlG,EAAKziB,EAAM4oB,KAAM,EAAG,EAAGxG,EAAM,CACtC/B,MAAOrgB,EAAMqgB,MACbiJ,WACA7C,WACAkD,UAAW+9B,GAAWjiD,EAAOs0C,EAAU3yC,GACvCwiB,aAAc,SACdH,YAAa,CAACm+B,EAAQC,KAG1B,KAAKvc,GACEp/C,KAAKm/D,eAGVn/D,KAAKgkE,iBACLhkE,KAAKikE,SAAS7kB,GACdp/C,KAAKw5D,aACLx5D,KAAKkkE,YACLlkE,KAAKmkE,WAAW/kB,IAElB,UACE,MAAMziB,EAAO38B,KAAKiI,QACZm8D,EAAKznC,EAAKklB,OAASllB,EAAKklB,MAAM8Q,GAAK,EACnC0R,EAAK3pD,GAAeiiB,EAAKiqB,MAAQjqB,EAAKiqB,KAAK+L,GAAI,GACrD,OAAK3yD,KAAKm/D,cAAgBn/D,KAAKszC,OAAS,GAAM16B,UAAU06B,KAQjD,CAAC,CACNqf,EAAG0R,EACH/wB,KAAO8L,IACLp/C,KAAKgkE,iBACLhkE,KAAKikE,SAAS7kB,GACdp/C,KAAKkkE,cAEN,CACDvR,EAAG0R,EAAK,EACR/wB,KAAM,KACJtzC,KAAKw5D,eAEN,CACD7G,EAAGyR,EACH9wB,KAAO8L,IACLp/C,KAAKmkE,WAAW/kB,MAtBX,CAAC,CACNuT,EAAGyR,EACH9wB,KAAO8L,IACLp/C,KAAKszC,KAAK8L,MAuBlB,wBAAwB71C,GACtB,MAAM0zD,EAAQj9D,KAAK61B,MAAMk4B,+BACnBuW,EAAStkE,KAAK25C,KAAO,SACrBlrC,EAAS,GACf,IAAInK,EAAGkX,EACP,IAAKlX,EAAI,EAAGkX,EAAOyhD,EAAMh8D,OAAQqD,EAAIkX,IAAQlX,EAAG,CAC9C,MAAM6hC,EAAO82B,EAAM34D,GACf6hC,EAAKm+B,KAAYtkE,KAAK2B,IAAQ4H,GAAQ48B,EAAK58B,OAASA,GACtDkF,EAAO3B,KAAKq5B,GAGhB,OAAO13B,EAET,wBAAwBnN,GACtB,MAAMq7B,EAAO38B,KAAKiI,QAAQ45C,MAAM3d,WAAWlkC,KAAK+5B,WAAWz4B,IAC3D,OAAOi+B,GAAO5C,EAAKzG,MAErB,aACE,MAAMquC,EAAWvkE,KAAKihE,wBAAwB,GAAG5qC,WACjD,OAAQr2B,KAAKujD,eAAiBvjD,KAAKiY,MAAQjY,KAAKkY,QAAUqsD,GAI9D,MAAM,GACJ,YAAYh7D,EAAM4rB,EAAO2N,GACvB9iC,KAAKuJ,KAAOA,EACZvJ,KAAKm1B,MAAQA,EACbn1B,KAAK8iC,SAAWA,EAChB9iC,KAAK8hC,MAAQrgC,OAAOua,OAAO,MAE7B,UAAUzS,GACR,OAAO9H,OAAOmX,UAAU4rD,cAAc1rD,KAAK9Y,KAAKuJ,KAAKqP,UAAWrP,EAAKqP,WAEvE,SAASxX,GACP,MAAMwyB,EAAQnyB,OAAO4hC,eAAejiC,GACpC,IAAIqjE,EACAC,GAAkB9wC,KACpB6wC,EAAczkE,KAAK2kE,SAAS/wC,IAE9B,MAAMkO,EAAQ9hC,KAAK8hC,MACbngC,EAAKP,EAAKO,GACVwzB,EAAQn1B,KAAKm1B,MAAQ,IAAMxzB,EACjC,IAAKA,EACH,MAAM,IAAIujC,MAAM,2BAA6B9jC,GAE/C,OAAIO,KAAMmgC,IAGVA,EAAMngC,GAAMP,EACZwjE,GAAiBxjE,EAAM+zB,EAAOsvC,GAC1BzkE,KAAK8iC,UACP5K,GAAS4K,SAAS1hC,EAAKO,GAAIP,EAAK0zB,YALzBK,EASX,IAAIxzB,GACF,OAAO3B,KAAK8hC,MAAMngC,GAEpB,WAAWP,GACT,MAAM0gC,EAAQ9hC,KAAK8hC,MACbngC,EAAKP,EAAKO,GACVwzB,EAAQn1B,KAAKm1B,MACfxzB,KAAMmgC,UACDA,EAAMngC,GAEXwzB,GAASxzB,KAAMu2B,GAAS/C,YACnB+C,GAAS/C,GAAOxzB,GACnB3B,KAAK8iC,iBACAhO,GAAUnzB,KAKzB,SAASijE,GAAiBxjE,EAAM+zB,EAAOsvC,GACrC,MAAMI,EAAeroD,GAAM/a,OAAOua,OAAO,MAAO,CAC9CyoD,EAAcvsC,GAASiW,IAAIs2B,GAAe,GAC1CvsC,GAASiW,IAAIhZ,GACb/zB,EAAK82B,WAEPA,GAAS6J,IAAI5M,EAAO0vC,GAChBzjE,EAAK61D,eACP6N,GAAc3vC,EAAO/zB,EAAK61D,eAExB71D,EAAK2jC,aACP7M,GAASV,SAASrC,EAAO/zB,EAAK2jC,aAGlC,SAAS+/B,GAAc3vC,EAAO4vC,GAC5BtjE,OAAO2Z,KAAK2pD,GAAQzjC,QAAQrhB,IAC1B,MAAM+kD,EAAgB/kD,EAASgV,MAAM,KAC/BgwC,EAAaD,EAAczlD,MAC3B2lD,EAAc,CAAC/vC,GAAOmsB,OAAO0jB,GAAe7/B,KAAK,KACjDggC,EAAQJ,EAAO9kD,GAAUgV,MAAM,KAC/ByC,EAAaytC,EAAM5lD,MACnBkY,EAAc0tC,EAAMhgC,KAAK,KAC/BjN,GAASuiC,MAAMyK,EAAaD,EAAYxtC,EAAaC,KAGzD,SAASgtC,GAAkB9wC,GACzB,MAAO,OAAQA,GAAS,aAAcA,EAGxC,MAAM,GACJ,cACE5zB,KAAKolE,YAAc,IAAI,GAAc,GAAmB,YAAY,GACpEplE,KAAKg2B,SAAW,IAAI,GAAc,GAAS,YAC3Ch2B,KAAKmY,QAAU,IAAI,GAAc1W,OAAQ,WACzCzB,KAAKq3B,OAAS,IAAI,GAAc,GAAO,UACvCr3B,KAAKqlE,iBAAmB,CAACrlE,KAAKolE,YAAaplE,KAAKq3B,OAAQr3B,KAAKg2B,UAE/D,OAAOrd,GACL3Y,KAAKslE,MAAM,WAAY3sD,GAEzB,UAAUA,GACR3Y,KAAKslE,MAAM,aAAc3sD,GAE3B,kBAAkBA,GAChB3Y,KAAKslE,MAAM,WAAY3sD,EAAM3Y,KAAKolE,aAEpC,eAAezsD,GACb3Y,KAAKslE,MAAM,WAAY3sD,EAAM3Y,KAAKg2B,UAEpC,cAAcrd,GACZ3Y,KAAKslE,MAAM,WAAY3sD,EAAM3Y,KAAKmY,SAEpC,aAAaQ,GACX3Y,KAAKslE,MAAM,WAAY3sD,EAAM3Y,KAAKq3B,QAEpC,cAAc11B,GACZ,OAAO3B,KAAKulE,KAAK5jE,EAAI3B,KAAKolE,YAAa,cAEzC,WAAWzjE,GACT,OAAO3B,KAAKulE,KAAK5jE,EAAI3B,KAAKg2B,SAAU,WAEtC,UAAUr0B,GACR,OAAO3B,KAAKulE,KAAK5jE,EAAI3B,KAAKmY,QAAS,UAErC,SAASxW,GACP,OAAO3B,KAAKulE,KAAK5jE,EAAI3B,KAAKq3B,OAAQ,SAEpC,qBAAqB1e,GACnB3Y,KAAKslE,MAAM,aAAc3sD,EAAM3Y,KAAKolE,aAEtC,kBAAkBzsD,GAChB3Y,KAAKslE,MAAM,aAAc3sD,EAAM3Y,KAAKg2B,UAEtC,iBAAiBrd,GACf3Y,KAAKslE,MAAM,aAAc3sD,EAAM3Y,KAAKmY,SAEtC,gBAAgBQ,GACd3Y,KAAKslE,MAAM,aAAc3sD,EAAM3Y,KAAKq3B,QAEtC,MAAMkK,EAAQ5oB,EAAM6sD,GAClB,IAAI7sD,GAAM2oB,QAAQmkC,IAChB,MAAMC,EAAMF,GAAiBxlE,KAAK2lE,oBAAoBF,GAClDD,GAAiBE,EAAIE,UAAUH,IAASC,IAAQ1lE,KAAKmY,SAAWstD,EAAI9jE,GACtE3B,KAAK6lE,MAAMtkC,EAAQmkC,EAAKD,GAExBzqD,GAAKyqD,EAAKrkE,IACR,MAAM0kE,EAAUN,GAAiBxlE,KAAK2lE,oBAAoBvkE,GAC1DpB,KAAK6lE,MAAMtkC,EAAQukC,EAAS1kE,OAKpC,MAAMmgC,EAAQwkC,EAAUC,GACtB,MAAMC,EAAc7oD,GAAYmkB,GAChCn6B,GAAS4+D,EAAU,SAAWC,GAAc,GAAID,GAChDD,EAASxkC,GAAQykC,GACjB5+D,GAAS4+D,EAAU,QAAUC,GAAc,GAAID,GAEjD,oBAAoBz8D,GAClB,IAAK,IAAIjF,EAAI,EAAGA,EAAItE,KAAKqlE,iBAAiBpkE,OAAQqD,IAAK,CACrD,MAAMohE,EAAM1lE,KAAKqlE,iBAAiB/gE,GAClC,GAAIohE,EAAIE,UAAUr8D,GAChB,OAAOm8D,EAGX,OAAO1lE,KAAKmY,QAEd,KAAKxW,EAAI6jE,EAAej8D,GACtB,MAAMnI,EAAOokE,EAAcr3B,IAAIxsC,GAC/B,QAAa8kB,IAATrlB,EACF,MAAM,IAAI8jC,MAAM,IAAMvjC,EAAK,yBAA2B4H,EAAO,KAE/D,OAAOnI,GAGX,IAAI,GAAW,IAAI,GAEnB,MAAM,GACJ,cACEpB,KAAKkmE,MAAQ,GAEf,OAAOrwC,EAAOswC,EAAMxtD,EAAM1U,GACX,eAATkiE,IACFnmE,KAAKkmE,MAAQlmE,KAAKomE,mBAAmBvwC,GAAO,GAC5C71B,KAAK0zC,QAAQ1zC,KAAKkmE,MAAOrwC,EAAO,YAElC,MAAMkP,EAAc9gC,EAASjE,KAAKs1B,aAAaO,GAAO5xB,OAAOA,GAAUjE,KAAKs1B,aAAaO,GACnFpnB,EAASzO,KAAK0zC,QAAQ3O,EAAalP,EAAOswC,EAAMxtD,GAKtD,MAJa,iBAATwtD,IACFnmE,KAAK0zC,QAAQ3O,EAAalP,EAAO,QACjC71B,KAAK0zC,QAAQ1zC,KAAKkmE,MAAOrwC,EAAO,cAE3BpnB,EAET,QAAQs2B,EAAalP,EAAOswC,EAAMxtD,GAChCA,EAAOA,GAAQ,GACf,IAAK,MAAM0tD,KAActhC,EAAa,CACpC,MAAMuhC,EAASD,EAAWC,OACpB/kC,EAAS+kC,EAAOH,GAChB/V,EAAS,CAACv6B,EAAOld,EAAM0tD,EAAWp+D,SACxC,IAAyC,IAArCb,GAASm6B,EAAQ6uB,EAAQkW,IAAqB3tD,EAAK4tD,WACrD,OAAO,EAGX,OAAO,EAET,aACOrsD,GAAcla,KAAKmhD,UACtBnhD,KAAKwmE,UAAYxmE,KAAKmhD,OACtBnhD,KAAKmhD,YAAS16B,GAGlB,aAAaoP,GACX,GAAI71B,KAAKmhD,OACP,OAAOnhD,KAAKmhD,OAEd,MAAMpc,EAAc/kC,KAAKmhD,OAASnhD,KAAKomE,mBAAmBvwC,GAE1D,OADA71B,KAAKymE,oBAAoB5wC,GAClBkP,EAET,mBAAmBlP,EAAOqhB,GACxB,MAAMhB,EAASrgB,GAASA,EAAMqgB,OACxBjuC,EAAUyS,GAAew7B,EAAOjuC,SAAWiuC,EAAOjuC,QAAQkQ,QAAS,IACnEA,EAAUuuD,GAAWxwB,GAC3B,OAAmB,IAAZjuC,GAAsBivC,EAAWyvB,GAAkB9wC,EAAO1d,EAASlQ,EAASivC,GAAhD,GAErC,oBAAoBrhB,GAClB,MAAM+wC,EAAsB5mE,KAAKwmE,WAAa,GACxCzhC,EAAc/kC,KAAKmhD,OACnBoY,EAAO,CAAC57C,EAAGC,IAAMD,EAAE1Z,OAAOsG,IAAMqT,EAAEipD,KAAKnnD,GAAKnV,EAAE+7D,OAAO3kE,KAAO+d,EAAE4mD,OAAO3kE,KAC3E3B,KAAK0zC,QAAQ6lB,EAAKqN,EAAqB7hC,GAAclP,EAAO,QAC5D71B,KAAK0zC,QAAQ6lB,EAAKx0B,EAAa6hC,GAAsB/wC,EAAO,UAGhE,SAAS6wC,GAAWxwB,GAClB,MAAM/9B,EAAU,GACViD,EAAO3Z,OAAO2Z,KAAK,GAASjD,QAAQ2pB,OAC1C,IAAK,IAAIx9B,EAAI,EAAGA,EAAI8W,EAAKna,OAAQqD,IAC/B6T,EAAQrL,KAAK,GAASg6D,UAAU1rD,EAAK9W,KAEvC,MAAM2zB,EAAQie,EAAO/9B,SAAW,GAChC,IAAK,IAAI7T,EAAI,EAAGA,EAAI2zB,EAAMh3B,OAAQqD,IAAK,CACrC,MAAMgiE,EAASruC,EAAM3zB,IACY,IAA7B6T,EAAQiE,QAAQkqD,IAClBnuD,EAAQrL,KAAKw5D,GAGjB,OAAOnuD,EAET,SAAS4uD,GAAQ9+D,EAASivC,GACxB,OAAKA,IAAmB,IAAZjvC,GAGI,IAAZA,EACK,GAEFA,EALE,KAOX,SAAS0+D,GAAkB9wC,EAAO1d,EAASlQ,EAASivC,GAClD,MAAMzoC,EAAS,GACTmnB,EAAUC,EAAMkE,aACtB,IAAK,IAAIz1B,EAAI,EAAGA,EAAI6T,EAAQlX,OAAQqD,IAAK,CACvC,MAAMgiE,EAASnuD,EAAQ7T,GACjB3C,EAAK2kE,EAAO3kE,GACZg7B,EAAOoqC,GAAQ9+D,EAAQtG,GAAKu1C,GACrB,OAATva,GAGJluB,EAAO3B,KAAK,CACVw5D,SACAr+D,QAAS++D,GAAWnxC,EAAMqgB,OAAQowB,EAAQ3pC,EAAM/G,KAGpD,OAAOnnB,EAET,SAASu4D,GAAW9wB,EAAQowB,EAAQ3pC,EAAM/G,GACxC,MAAMxa,EAAO86B,EAAO+wB,gBAAgBX,GAC9BnkC,EAAS+T,EAAOwH,gBAAgB/gB,EAAMvhB,GAC5C,OAAO86B,EAAOyH,eAAexb,EAAQvM,EAAS,CAAC,IAAK,CAAC2O,YAAY,EAAOC,WAAW,EAAOH,SAAS,IAGrG,SAAS6iC,GAAa39D,EAAMtB,GAC1B,MAAMk/D,EAAkBjvC,GAASxC,SAASnsB,IAAS,GAC7C69D,GAAkBn/D,EAAQytB,UAAY,IAAInsB,IAAS,GACzD,OAAO69D,EAAe1wC,WAAazuB,EAAQyuB,WAAaywC,EAAgBzwC,WAAa,IAEvF,SAAS2wC,GAA0B1lE,EAAI+0B,GACrC,IAAIijB,EAAOh4C,EAMX,MALW,YAAPA,EACFg4C,EAAOjjB,EACS,YAAP/0B,IACTg4C,EAAqB,MAAdjjB,EAAoB,IAAM,KAE5BijB,EAET,SAAS2tB,GAA0B3tB,EAAMjjB,GACvC,OAAOijB,IAASjjB,EAAY,UAAY,UAE1C,SAAS6wC,GAAiB1Z,GACxB,MAAiB,QAAbA,GAAmC,WAAbA,EACjB,IAEQ,SAAbA,GAAoC,UAAbA,EAClB,SADT,EAIF,SAAS2Z,GAAc7lE,EAAI8lE,GACzB,MAAW,MAAP9lE,GAAqB,MAAPA,EACTA,EAEF8lE,EAAa9tB,MAAQ4tB,GAAiBE,EAAa5Z,WAAalsD,EAAG2b,OAAO,GAAG2V,cAEtF,SAASy0C,GAAiBxxB,EAAQjuC,GAChC,MAAM0/D,EAAgB7yC,GAAUohB,EAAO3sC,OAAS,CAAC8tB,OAAQ,IACnDuwC,EAAe3/D,EAAQovB,QAAU,GACjCwwC,EAAiBX,GAAahxB,EAAO3sC,KAAMtB,GAC3C6/D,EAAWrmE,OAAOua,OAAO,MACzBqb,EAAS51B,OAAOua,OAAO,MA+B7B,OA9BAva,OAAO2Z,KAAKwsD,GAActmC,QAAQ3/B,IAChC,MAAMomE,EAAYH,EAAajmE,GAC/B,IAAK0Y,GAAS0tD,GACZ,OAAOtoC,QAAQuoC,MAAM,0CAA0CrmE,GAEjE,GAAIomE,EAAUjkC,OACZ,OAAOrE,QAAQC,KAAK,kDAAkD/9B,GAExE,MAAMg4C,EAAO6tB,GAAc7lE,EAAIomE,GACzBE,EAAYX,GAA0B3tB,EAAMkuB,GAC5CK,EAAsBP,EAActwC,QAAU,GACpDywC,EAASnuB,GAAQmuB,EAASnuB,IAASh4C,EACnC01B,EAAO11B,GAAMgb,GAAQlb,OAAOua,OAAO,MAAO,CAAC,CAAC29B,QAAOouB,EAAWG,EAAoBvuB,GAAOuuB,EAAoBD,OAE/G/xB,EAAOn0C,KAAK2zB,SAAS4L,QAAQ6Y,IAC3B,MAAM5wC,EAAO4wC,EAAQ5wC,MAAQ2sC,EAAO3sC,KAC9BmtB,EAAYyjB,EAAQzjB,WAAawwC,GAAa39D,EAAMtB,GACpDk/D,EAAkBryC,GAAUvrB,IAAS,GACrC2+D,EAAsBf,EAAgB9vC,QAAU,GACtD51B,OAAO2Z,KAAK8sD,GAAqB5mC,QAAQ6mC,IACvC,MAAMxuB,EAAO0tB,GAA0Bc,EAAWzxC,GAC5C/0B,EAAKw4C,EAAQR,EAAO,WAAamuB,EAASnuB,IAASA,EACzDtiB,EAAO11B,GAAM01B,EAAO11B,IAAOF,OAAOua,OAAO,MACzCW,GAAQ0a,EAAO11B,GAAK,CAAC,CAACg4C,QAAOiuB,EAAajmE,GAAKumE,EAAoBC,SAGvE1mE,OAAO2Z,KAAKic,GAAQiK,QAAQl5B,IAC1B,MAAMgvB,EAAQC,EAAOjvB,GACrBuU,GAAQya,EAAO,CAACc,GAASb,OAAOD,EAAM7tB,MAAO2uB,GAASd,UAEjDC,EAET,SAAS+wC,GAAYlyB,GACnB,MAAMjuC,EAAUiuC,EAAOjuC,UAAYiuC,EAAOjuC,QAAU,IACpDA,EAAQkQ,QAAUuC,GAAezS,EAAQkQ,QAAS,IAClDlQ,EAAQovB,OAASqwC,GAAiBxxB,EAAQjuC,GAE5C,SAASogE,GAAStmE,GAIhB,OAHAA,EAAOA,GAAQ,GACfA,EAAK2zB,SAAW3zB,EAAK2zB,UAAY,GACjC3zB,EAAKm8C,OAASn8C,EAAKm8C,QAAU,GACtBn8C,EAET,SAASumE,GAAWpyB,GAIlB,OAHAA,EAASA,GAAU,GACnBA,EAAOn0C,KAAOsmE,GAASnyB,EAAOn0C,MAC9BqmE,GAAYlyB,GACLA,EAET,MAAMqyB,GAAW,IAAI36B,IACf46B,GAAa,IAAIxmC,IACvB,SAASymC,GAAW16B,EAAU26B,GAC5B,IAAIttD,EAAOmtD,GAASp6B,IAAIJ,GAMxB,OALK3yB,IACHA,EAAOstD,IACPH,GAASxmC,IAAIgM,EAAU3yB,GACvBotD,GAAWvzD,IAAImG,IAEVA,EAET,MAAMutD,GAAa,CAAC5mC,EAAK7kB,EAAK9U,KAC5B,MAAMu0B,EAAO1f,GAAiBC,EAAK9U,QACtBqe,IAATkW,GACFoF,EAAI9sB,IAAI0nB,IAGZ,MAAM,GACJ,YAAYuZ,GACVl2C,KAAK4oE,QAAUN,GAAWpyB,GAC1Bl2C,KAAK6oE,YAAc,IAAIj7B,IACvB5tC,KAAK8oE,eAAiB,IAAIl7B,IAE5B,eACE,OAAO5tC,KAAK4oE,QAAQ9yC,SAEtB,WACE,OAAO91B,KAAK4oE,QAAQr/D,KAEtB,SAASA,GACPvJ,KAAK4oE,QAAQr/D,KAAOA,EAEtB,WACE,OAAOvJ,KAAK4oE,QAAQ7mE,KAEtB,SAASA,GACP/B,KAAK4oE,QAAQ7mE,KAAOsmE,GAAStmE,GAE/B,cACE,OAAO/B,KAAK4oE,QAAQ3gE,QAEtB,YAAYA,GACVjI,KAAK4oE,QAAQ3gE,QAAUA,EAEzB,cACE,OAAOjI,KAAK4oE,QAAQzwD,QAEtB,SACE,MAAM+9B,EAASl2C,KAAK4oE,QACpB5oE,KAAK+oE,aACLX,GAAYlyB,GAEd,aACEl2C,KAAK6oE,YAAYG,QACjBhpE,KAAK8oE,eAAeE,QAEtB,iBAAiBC,GACf,OAAOR,GAAWQ,EAChB,IAAM,CAAC,CACL,YAAYA,EACZ,MAGN,0BAA0BA,EAAanpB,GACrC,OAAO2oB,GAAW,GAAGQ,gBAA0BnpB,IAC7C,IAAM,CACJ,CACE,YAAYmpB,iBAA2BnpB,IACvC,eAAeA,GAEjB,CACE,YAAYmpB,EACZ,MAIR,wBAAwBA,EAAaxpB,GACnC,OAAOgpB,GAAW,GAAGQ,KAAexpB,IAClC,IAAM,CAAC,CACL,YAAYwpB,cAAwBxpB,IACpC,YAAYwpB,EACZ,YAAYxpB,EACZ,MAGN,gBAAgB6mB,GACd,MAAM3kE,EAAK2kE,EAAO3kE,GACZ4H,EAAOvJ,KAAKuJ,KAClB,OAAOk/D,GAAW,GAAGl/D,YAAe5H,IAClC,IAAM,CAAC,CACL,WAAWA,KACR2kE,EAAO4C,wBAA0B,MAG1C,cAAcC,EAAWC,GACvB,MAAMP,EAAc7oE,KAAK6oE,YACzB,IAAI7vC,EAAQ6vC,EAAY16B,IAAIg7B,GAK5B,OAJKnwC,IAASowC,IACZpwC,EAAQ,IAAI4U,IACZi7B,EAAY9mC,IAAIonC,EAAWnwC,IAEtBA,EAET,gBAAgBmwC,EAAWE,EAAUD,GACnC,MAAM,QAACnhE,EAAO,KAAEsB,GAAQvJ,KAClBg5B,EAAQh5B,KAAKspE,cAAcH,EAAWC,GACtCzuB,EAAS3hB,EAAMmV,IAAIk7B,GACzB,GAAI1uB,EACF,OAAOA,EAET,MAAMxY,EAAS,IAAIH,IACnBqnC,EAAS/nC,QAAQlmB,IACX+tD,IACFhnC,EAAOltB,IAAIk0D,GACX/tD,EAAKkmB,QAAQl5B,GAAOugE,GAAWxmC,EAAQgnC,EAAW/gE,KAEpDgT,EAAKkmB,QAAQl5B,GAAOugE,GAAWxmC,EAAQl6B,EAASG,IAChDgT,EAAKkmB,QAAQl5B,GAAOugE,GAAWxmC,EAAQrN,GAAUvrB,IAAS,GAAInB,IAC9DgT,EAAKkmB,QAAQl5B,GAAOugE,GAAWxmC,EAAQjK,GAAU9vB,IACjDgT,EAAKkmB,QAAQl5B,GAAOugE,GAAWxmC,EAAQ,GAAa/5B,MAEtD,MAAM4X,EAAQjf,MAAMkhC,KAAKE,GAOzB,OANqB,IAAjBniB,EAAM/e,QACR+e,EAAMlT,KAAKrL,OAAOua,OAAO,OAEvBwsD,GAAW1qD,IAAIurD,IACjBrwC,EAAM+I,IAAIsnC,EAAUrpD,GAEfA,EAET,oBACE,MAAM,QAAC/X,EAAO,KAAEsB,GAAQvJ,KACxB,MAAO,CACLiI,EACA6sB,GAAUvrB,IAAS,GACnB2uB,GAASxC,SAASnsB,IAAS,GAC3B,CAACA,QACD2uB,GACA,IAGJ,oBAAoBiK,EAAQyd,EAAOhqB,EAASwM,EAAW,CAAC,KACtD,MAAM3zB,EAAS,CAACioC,SAAS,IACnB,SAACnR,EAAQ,YAAEgkC,GAAeC,GAAYxpE,KAAK8oE,eAAgB3mC,EAAQC,GACzE,IAAIn6B,EAAUs9B,EACd,GAAIkkC,GAAYlkC,EAAUqa,GAAQ,CAChCnxC,EAAOioC,SAAU,EACjB9gB,EAAUnY,GAAWmY,GAAWA,IAAYA,EAC5C,MAAM8zC,EAAc1pE,KAAK29C,eAAexb,EAAQvM,EAAS2zC,GACzDthE,EAAUy7B,GAAe6B,EAAU3P,EAAS8zC,GAE9C,IAAK,MAAMvqC,KAAQygB,EACjBnxC,EAAO0wB,GAAQl3B,EAAQk3B,GAEzB,OAAO1wB,EAET,eAAe0zB,EAAQvM,EAASwM,EAAW,CAAC,IAAKyB,GAC/C,MAAM,SAAC0B,GAAYikC,GAAYxpE,KAAK8oE,eAAgB3mC,EAAQC,GAC5D,OAAO/nB,GAASub,GACZ8N,GAAe6B,EAAU3P,OAASnP,EAAWod,GAC7C0B,GAGR,SAASikC,GAAYG,EAAexnC,EAAQC,GAC1C,IAAIpJ,EAAQ2wC,EAAcx7B,IAAIhM,GACzBnJ,IACHA,EAAQ,IAAI4U,IACZ+7B,EAAc5nC,IAAII,EAAQnJ,IAE5B,MAAM+U,EAAW3L,EAAS+C,OAC1B,IAAIwV,EAAS3hB,EAAMmV,IAAIJ,GACvB,IAAK4M,EAAQ,CACX,MAAMpV,EAAWrD,GAAgBC,EAAQC,GACzCuY,EAAS,CACPpV,WACAgkC,YAAannC,EAASn+B,OAAOwc,IAAMA,EAAEwS,cAAcsQ,SAAS,WAE9DvK,EAAM+I,IAAIgM,EAAU4M,GAEtB,OAAOA,EAET,MAAMivB,GAAc5oE,GAASqZ,GAASrZ,IACjCS,OAAO60C,oBAAoBt1C,GAAOizC,OAAO,CAACC,EAAK9rC,IAAQ8rC,GAAOz2B,GAAWzc,EAAMoH,KAAO,GAC3F,SAASqhE,GAAY9lC,EAAOic,GAC1B,MAAM,aAAClb,EAAY,YAAEC,GAAerP,GAAaqO,GACjD,IAAK,MAAMxE,KAAQygB,EAAO,CACxB,MAAMrb,EAAaG,EAAavF,GAC1BqF,EAAYG,EAAYxF,GACxBn+B,GAASwjC,GAAaD,IAAeZ,EAAMxE,GACjD,GAAKoF,IAAe9mB,GAAWzc,IAAU4oE,GAAY5oE,KAC/CwjC,GAAarqB,GAAQnZ,GACzB,OAAO,EAGX,OAAO,EAGT,IAAI6oE,GAAU,QAEd,MAAMC,GAAkB,CAAC,MAAO,SAAU,OAAQ,QAAS,aAC3D,SAASC,GAAqBlc,EAAUlU,GACtC,MAAoB,QAAbkU,GAAmC,WAAbA,IAAiE,IAAvCic,GAAgB1tD,QAAQyxC,IAA6B,MAATlU,EAErG,SAASqwB,GAAcC,EAAIC,GACzB,OAAO,SAASvsD,EAAGC,GACjB,OAAOD,EAAEssD,KAAQrsD,EAAEqsD,GACftsD,EAAEusD,GAAMtsD,EAAEssD,GACVvsD,EAAEssD,GAAMrsD,EAAEqsD,IAGlB,SAASE,GAAqBv0C,GAC5B,MAAMC,EAAQD,EAAQC,MAChBu0C,EAAmBv0C,EAAM5tB,QAAQstB,UACvCM,EAAMgpC,cAAc,eACpBz3D,GAASgjE,GAAoBA,EAAiBC,WAAY,CAACz0C,GAAUC,GAEvE,SAASy0C,GAAoB10C,GAC3B,MAAMC,EAAQD,EAAQC,MAChBu0C,EAAmBv0C,EAAM5tB,QAAQstB,UACvCnuB,GAASgjE,GAAoBA,EAAiBG,WAAY,CAAC30C,GAAUC,GAEvE,SAAS20C,GAAUppE,GASjB,OARIqoC,MAAqC,kBAATroC,EAC9BA,EAAOsoC,SAAS+gC,eAAerpE,GACtBA,GAAQA,EAAKH,SACtBG,EAAOA,EAAK,IAEVA,GAAQA,EAAK04B,SACf14B,EAAOA,EAAK04B,QAEP14B,EAET,MAAMspE,GAAY,GACZC,GAAYviE,IAChB,MAAM0xB,EAAS0wC,GAAUpiE,GACzB,OAAO3G,OAAO2zB,OAAOs1C,IAAWzmE,OAAQ4hB,GAAMA,EAAEiU,SAAWA,GAAQva,OAErE,SAASqrD,GAAgB1tD,EAAKzD,EAAOknC,GACnC,MAAMvlC,EAAO3Z,OAAO2Z,KAAK8B,GACzB,IAAK,MAAM9U,KAAOgT,EAAM,CACtB,MAAMyvD,GAAUziE,EAChB,GAAIyiE,GAAUpxD,EAAO,CACnB,MAAMzY,EAAQkc,EAAI9U,UACX8U,EAAI9U,IACPu4C,EAAO,GAAKkqB,EAASpxD,KACvByD,EAAI2tD,EAASlqB,GAAQ3/C,KAK7B,SAAS8pE,GAAmBjmE,EAAGkmE,EAAWC,EAAaC,GACrD,OAAKD,GAA0B,aAAXnmE,EAAE0E,KAGlB0hE,EACKF,EAEFlmE,EALE,KAOX,MAAM,GACJ,YAAYzD,EAAM8pE,GAChB,MAAMh1B,EAASl2C,KAAKk2C,OAAS,IAAI,GAAOg1B,GAClCC,EAAgBX,GAAUppE,GAC1BgqE,EAAgBT,GAASQ,GAC/B,GAAIC,EACF,MAAM,IAAIlmC,MACR,4CAA+CkmC,EAAczpE,GAA7D,wDAIJ,MAAMsG,EAAUiuC,EAAOyH,eAAezH,EAAOm1B,oBAAqBrrE,KAAK+5B,cACvE/5B,KAAK81B,SAAW,IAAKogB,EAAOpgB,UAAYghC,GAAgBqU,IACxDnrE,KAAK81B,SAASw1C,aAAap1B,GAC3B,MAAMtgB,EAAU51B,KAAK81B,SAASy1C,eAAeJ,EAAeljE,EAAQskC,aAC9DzS,EAASlE,GAAWA,EAAQkE,OAC5B5hB,EAAS4hB,GAAUA,EAAO5hB,OAC1BD,EAAQ6hB,GAAUA,EAAO7hB,MAC/BjY,KAAK2B,GAAKsY,KACVja,KAAKu2B,IAAMX,EACX51B,KAAK85B,OAASA,EACd95B,KAAKiY,MAAQA,EACbjY,KAAKkY,OAASA,EACdlY,KAAKwrE,SAAWvjE,EAChBjI,KAAKyrE,aAAezrE,KAAKusC,YACzBvsC,KAAK0yD,QAAU,GACf1yD,KAAK0rE,UAAY,GACjB1rE,KAAKy5C,aAAUhzB,EACfzmB,KAAK4vD,MAAQ,GACb5vD,KAAK25B,6BAA0BlT,EAC/BzmB,KAAKo/C,eAAY34B,EACjBzmB,KAAKuzC,QAAU,GACfvzC,KAAK2rE,gBAAallD,EAClBzmB,KAAK4rE,WAAa,GAClB5rE,KAAK6rE,0BAAuBplD,EAC5BzmB,KAAK8rE,gBAAkB,GACvB9rE,KAAKq3B,OAAS,GACdr3B,KAAK+rE,SAAW,IAAI,GACpB/rE,KAAKy2D,SAAW,GAChBz2D,KAAKgsE,eAAiB,GACtBhsE,KAAKisE,UAAW,EAChBjsE,KAAKigD,yBAAsBx5B,EAC3BzmB,KAAK47C,cAAWn1B,EAChBzmB,KAAKksE,UAAYhzD,GAAS0d,GAAQ52B,KAAK+2C,OAAOngB,GAAO3uB,EAAQkkE,aAAe,GAC5EnsE,KAAK8gD,aAAe,GACpB4pB,GAAU1qE,KAAK2B,IAAM3B,KAChB41B,GAAYkE,GAIjBua,GAAS+3B,OAAOpsE,KAAM,WAAYmqE,IAClC91B,GAAS+3B,OAAOpsE,KAAM,WAAYsqE,IAClCtqE,KAAKqsE,cACDrsE,KAAKisE,UACPjsE,KAAK+2C,UAPLtX,QAAQuoC,MAAM,qEAUlB,kBACE,MAAO//D,SAAS,YAACskC,EAAW,oBAAExV,GAAoB,MAAE9e,EAAK,OAAEC,EAAM,aAAEuzD,GAAgBzrE,KACnF,OAAKka,GAAcqyB,GAGfxV,GAAuB00C,EAClBA,EAEFvzD,EAASD,EAAQC,EAAS,KALxBq0B,EAOX,WACE,OAAOvsC,KAAKk2C,OAAOn0C,KAErB,SAASA,GACP/B,KAAKk2C,OAAOn0C,KAAOA,EAErB,cACE,OAAO/B,KAAKwrE,SAEd,YAAYvjE,GACVjI,KAAKk2C,OAAOjuC,QAAUA,EAExB,cASE,OARAjI,KAAK6+D,cAAc,cACf7+D,KAAKiI,QAAQkvB,WACfn3B,KAAK81C,SAELpJ,GAAY1sC,KAAMA,KAAKiI,QAAQ0tB,kBAEjC31B,KAAKssE,aACLtsE,KAAK6+D,cAAc,aACZ7+D,KAET,QAEE,OADA65B,GAAY75B,KAAK85B,OAAQ95B,KAAKu2B,KACvBv2B,KAET,OAEE,OADAq0C,GAASvD,KAAK9wC,MACPA,KAET,OAAOiY,EAAOC,GACPm8B,GAAShB,QAAQrzC,MAGpBA,KAAKusE,kBAAoB,CAACt0D,QAAOC,UAFjClY,KAAKwsE,QAAQv0D,EAAOC,GAKxB,QAAQD,EAAOC,GACb,MAAMjQ,EAAUjI,KAAKiI,QACf6xB,EAAS95B,KAAK85B,OACdyS,EAActkC,EAAQ8uB,qBAAuB/2B,KAAKusC,YAClDkgC,EAAUzsE,KAAK81B,SAASsW,eAAetS,EAAQ7hB,EAAOC,EAAQq0B,GAC9DmgC,EAAWzkE,EAAQ0tB,kBAAoB31B,KAAK81B,SAASC,sBACrDa,EAAO52B,KAAKiY,MAAQ,SAAW,SACrCjY,KAAKiY,MAAQw0D,EAAQx0D,MACrBjY,KAAKkY,OAASu0D,EAAQv0D,OACtBlY,KAAKyrE,aAAezrE,KAAKusC,YACpBG,GAAY1sC,KAAM0sE,GAAU,KAGjC1sE,KAAK6+D,cAAc,SAAU,CAAChhD,KAAM4uD,IACpCrlE,GAASa,EAAQ0kE,SAAU,CAAC3sE,KAAMysE,GAAUzsE,MACxCA,KAAKisE,UACHjsE,KAAKksE,UAAUt1C,IACjB52B,KAAK4sE,UAIX,sBACE,MAAM3kE,EAAUjI,KAAKiI,QACf4kE,EAAgB5kE,EAAQovB,QAAU,GACxCrc,GAAK6xD,EAAe,CAACC,EAAaxI,KAChCwI,EAAYnrE,GAAK2iE,IAGrB,sBACE,MAAMr8D,EAAUjI,KAAKiI,QACf8kE,EAAY9kE,EAAQovB,OACpBA,EAASr3B,KAAKq3B,OACd21C,EAAUvrE,OAAO2Z,KAAKic,GAAQ4c,OAAO,CAAC/2B,EAAKvb,KAC/Cub,EAAIvb,IAAM,EACHub,GACN,IACH,IAAI4kB,EAAQ,GACRirC,IACFjrC,EAAQA,EAAMwf,OACZ7/C,OAAO2Z,KAAK2xD,GAAWjxD,IAAKna,IAC1B,MAAM8lE,EAAesF,EAAUprE,GACzBg4C,EAAO6tB,GAAc7lE,EAAI8lE,GACzBwF,EAAoB,MAATtzB,EACX4J,EAAwB,MAAT5J,EACrB,MAAO,CACL1xC,QAASw/D,EACTyF,UAAWD,EAAW,YAAc1pB,EAAe,SAAW,OAC9D4pB,MAAOF,EAAW,eAAiB1pB,EAAe,WAAa,cAKvEvoC,GAAK8mB,EAAQ1gC,IACX,MAAMqmE,EAAermE,EAAK6G,QACpBtG,EAAK8lE,EAAa9lE,GAClBg4C,EAAO6tB,GAAc7lE,EAAI8lE,GACzB2F,EAAY1yD,GAAe+sD,EAAal+D,KAAMnI,EAAK+rE,YAC3B1mD,IAA1BghD,EAAa5Z,UAA0Bkc,GAAqBtC,EAAa5Z,SAAUlU,KAAUowB,GAAqB3oE,EAAK8rE,aACzHzF,EAAa5Z,SAAWzsD,EAAK8rE,WAE/BF,EAAQrrE,IAAM,EACd,IAAIy1B,EAAQ,KACZ,GAAIz1B,KAAM01B,GAAUA,EAAO11B,GAAI4H,OAAS6jE,EACtCh2C,EAAQC,EAAO11B,OACV,CACL,MAAM0rE,EAAa,GAASC,SAASF,GACrCh2C,EAAQ,IAAIi2C,EAAW,CACrB1rE,KACA4H,KAAM6jE,EACN72C,IAAKv2B,KAAKu2B,IACVV,MAAO71B,OAETq3B,EAAOD,EAAMz1B,IAAMy1B,EAErBA,EAAMm2C,KAAK9F,EAAcx/D,KAE3B+S,GAAKgyD,EAAS,CAACQ,EAAY7rE,KACpB6rE,UACIn2C,EAAO11B,KAGlBqZ,GAAKqc,EAASD,IACZ44B,GAAQ5Z,UAAUp2C,KAAMo3B,EAAOA,EAAMnvB,SACrC+nD,GAAQyd,OAAOztE,KAAMo3B,KAGzB,kBACE,MAAMugB,EAAW33C,KAAK0rE,UAChBlrB,EAAUxgD,KAAK+B,KAAK2zB,SAASz0B,OAC7Bs/C,EAAU5I,EAAS12C,OAEzB,GADA02C,EAASr4B,KAAK,CAAC3B,EAAGC,IAAMD,EAAErc,MAAQsc,EAAEtc,OAChCi/C,EAAUC,EAAS,CACrB,IAAK,IAAIl8C,EAAIk8C,EAASl8C,EAAIi8C,IAAWj8C,EACnCtE,KAAK0tE,oBAAoBppE,GAE3BqzC,EAASne,OAAOgnB,EAASD,EAAUC,GAErCxgD,KAAK8rE,gBAAkBn0B,EAAS9+B,MAAM,GAAGyG,KAAK0qD,GAAc,QAAS,UAEvE,8BACE,MAAO0B,UAAW/zB,EAAU51C,MAAM,SAAC2zB,IAAa11B,KAC5C23C,EAAS12C,OAASy0B,EAASz0B,eACtBjB,KAAKy5C,QAEd9B,EAASrW,QAAQ,CAAC6E,EAAM7kC,KACmC,IAArDo0B,EAASzxB,OAAOsG,GAAKA,IAAM47B,EAAKkkB,UAAUppD,QAC5CjB,KAAK0tE,oBAAoBpsE,KAI/B,2BACE,MAAMqsE,EAAiB,GACjBj4C,EAAW11B,KAAK+B,KAAK2zB,SAC3B,IAAIpxB,EAAGkX,EAEP,IADAxb,KAAK4tE,8BACAtpE,EAAI,EAAGkX,EAAOka,EAASz0B,OAAQqD,EAAIkX,EAAMlX,IAAK,CACjD,MAAM61C,EAAUzkB,EAASpxB,GACzB,IAAI6hC,EAAOnmC,KAAK+8C,eAAez4C,GAC/B,MAAMiF,EAAO4wC,EAAQ5wC,MAAQvJ,KAAKk2C,OAAO3sC,KAWzC,GAVI48B,EAAK58B,MAAQ48B,EAAK58B,OAASA,IAC7BvJ,KAAK0tE,oBAAoBppE,GACzB6hC,EAAOnmC,KAAK+8C,eAAez4C,IAE7B6hC,EAAK58B,KAAOA,EACZ48B,EAAKzP,UAAYyjB,EAAQzjB,WAAawwC,GAAa39D,EAAMvJ,KAAKiI,SAC9Dk+B,EAAK0nC,MAAQ1zB,EAAQ0zB,OAAS,EAC9B1nC,EAAK7kC,MAAQgD,EACb6hC,EAAK6Y,MAAQ,GAAK7E,EAAQ6E,MAC1B7Y,EAAK6P,QAAUh2C,KAAKkoD,iBAAiB5jD,GACjC6hC,EAAKoT,WACPpT,EAAKoT,WAAWu0B,YAAYxpE,GAC5B6hC,EAAKoT,WAAWwC,iBACX,CACL,MAAMgyB,EAAkB,GAASC,cAAczkE,IACzC,mBAAC4zC,EAAkB,gBAAEqC,GAAmBtnB,GAASxC,SAASnsB,GAChE9H,OAAOoyB,OAAOk6C,EAAgBn1D,UAAW,CACvC4mC,gBAAiB,GAASyuB,WAAWzuB,GACrCrC,mBAAoBA,GAAsB,GAAS8wB,WAAW9wB,KAEhEhX,EAAKoT,WAAa,IAAIw0B,EAAgB/tE,KAAMsE,GAC5CqpE,EAAe7gE,KAAKq5B,EAAKoT,aAI7B,OADAv5C,KAAKkuE,kBACEP,EAET,iBACE3yD,GAAKhb,KAAK+B,KAAK2zB,SAAU,CAACykB,EAASx+B,KACjC3b,KAAK+8C,eAAephC,GAAc49B,WAAWkL,SAC5CzkD,MAEL,QACEA,KAAKmuE,iBACLnuE,KAAK6+D,cAAc,SAErB,OAAOjoC,GACL,MAAMsf,EAASl2C,KAAKk2C,OACpBA,EAAOa,SACP,MAAM9uC,EAAUjI,KAAKwrE,SAAWt1B,EAAOyH,eAAezH,EAAOm1B,oBAAqBrrE,KAAK+5B,cACjFq0C,EAAgBpuE,KAAKigD,qBAAuBh4C,EAAQstB,UAK1D,GAJAv1B,KAAKquE,gBACLruE,KAAKsuE,sBACLtuE,KAAKuuE,uBACLvuE,KAAK+rE,SAASyC,cACuD,IAAjExuE,KAAK6+D,cAAc,eAAgB,CAACjoC,OAAM2vC,YAAY,IACxD,OAEF,MAAMoH,EAAiB3tE,KAAKyuE,2BAC5BzuE,KAAK6+D,cAAc,wBACnB,IAAIhM,EAAa,EACjB,IAAK,IAAIvuD,EAAI,EAAGkX,EAAOxb,KAAK+B,KAAK2zB,SAASz0B,OAAQqD,EAAIkX,EAAMlX,IAAK,CAC/D,MAAM,WAACi1C,GAAcv5C,KAAK+8C,eAAez4C,GACnCmgD,GAAS2pB,IAAyD,IAAxCT,EAAevxD,QAAQm9B,GACvDA,EAAWm1B,sBAAsBjqB,GACjCoO,EAAan7C,KAAKyI,KAAKo5B,EAAW4F,iBAAkB0T,GAEtDA,EAAa7yD,KAAK2uE,YAAc1mE,EAAQzB,OAAOisD,YAAcI,EAAa,EAC1E7yD,KAAK4uE,cAAc/b,GACdub,GACHpzD,GAAK2yD,EAAiBp0B,IACpBA,EAAWkL,UAGfzkD,KAAK6uE,gBAAgBj4C,GACrB52B,KAAK6+D,cAAc,cAAe,CAACjoC,SACnC52B,KAAK0yD,QAAQpzC,KAAK0qD,GAAc,IAAK,SACrC,MAAM,QAACz2B,EAAO,WAAEo4B,GAAc3rE,KAC1B2rE,EACF3rE,KAAK8uE,cAAcnD,GAAY,GACtBp4B,EAAQtyC,QACjBjB,KAAK+uE,mBAAmBx7B,EAASA,GAAS,GAE5CvzC,KAAK4sE,SAEP,gBACE5xD,GAAKhb,KAAKq3B,OAASD,IACjB44B,GAAQgf,UAAUhvE,KAAMo3B,KAE1Bp3B,KAAKivE,sBACLjvE,KAAKkvE,sBAEP,sBACE,MAAMjnE,EAAUjI,KAAKiI,QACfknE,EAAiB,IAAIntC,IAAIvgC,OAAO2Z,KAAKpb,KAAK4rE,aAC1CwD,EAAY,IAAIptC,IAAI/5B,EAAQguB,QAC7BvY,GAAUyxD,EAAgBC,MAAgBpvE,KAAK6rE,uBAAyB5jE,EAAQkvB,aACnFn3B,KAAKqvE,eACLrvE,KAAKssE,cAGT,uBACE,MAAM,eAACN,GAAkBhsE,KACnBsvE,EAAUtvE,KAAKuvE,0BAA4B,GACjD,IAAK,MAAM,OAAChuC,EAAM,MAAE9nB,EAAK,MAAE2sB,KAAUkpC,EAAS,CAC5C,MAAM3uB,EAAkB,oBAAXpf,GAAgC6E,EAAQA,EACrDwkC,GAAgBoB,EAAgBvyD,EAAOknC,IAG3C,yBACE,MAAMG,EAAe9gD,KAAK8gD,aAC1B,IAAKA,IAAiBA,EAAa7/C,OACjC,OAEFjB,KAAK8gD,aAAe,GACpB,MAAM0uB,EAAexvE,KAAK+B,KAAK2zB,SAASz0B,OAClCwuE,EAAWzyD,GAAQ,IAAIglB,IAC3B8e,EACG78C,OAAO4hB,GAAKA,EAAE,KAAO7I,GACrBlB,IAAI,CAAC+J,EAAGvhB,IAAMA,EAAI,IAAMuhB,EAAE2T,OAAO,GAAG2L,KAAK,OAExCuqC,EAAYD,EAAQ,GAC1B,IAAK,IAAInrE,EAAI,EAAGA,EAAIkrE,EAAclrE,IAChC,IAAKoZ,GAAUgyD,EAAWD,EAAQnrE,IAChC,OAGJ,OAAOvD,MAAMkhC,KAAKytC,GACf5zD,IAAI+J,GAAKA,EAAEoP,MAAM,MACjBnZ,IAAI6B,IAAK,CAAE4jB,OAAQ5jB,EAAE,GAAIlE,OAAQkE,EAAE,GAAIyoB,OAAQzoB,EAAE,MAEtD,cAAck1C,GACZ,IAA+D,IAA3D7yD,KAAK6+D,cAAc,eAAgB,CAAC0H,YAAY,IAClD,OAEFvW,GAAQjZ,OAAO/2C,KAAMA,KAAKiY,MAAOjY,KAAKkY,OAAQ26C,GAC9C,MAAMr3B,EAAOx7B,KAAKo/C,UACZuwB,EAASn0C,EAAKvjB,OAAS,GAAKujB,EAAKtjB,QAAU,EACjDlY,KAAK0yD,QAAU,GACf13C,GAAKhb,KAAK4vD,MAAQ3kB,IACZ0kC,GAA2B,cAAjB1kC,EAAI4iB,WAGd5iB,EAAImL,WACNnL,EAAImL,YAENp2C,KAAK0yD,QAAQ5lD,QAAQm+B,EAAIynB,aACxB1yD,MACHA,KAAK0yD,QAAQpxB,QAAQ,CAAClgC,EAAME,KAC1BF,EAAKwuE,KAAOtuE,IAEdtB,KAAK6+D,cAAc,eAErB,gBAAgBjoC,GACd,IAA6E,IAAzE52B,KAAK6+D,cAAc,uBAAwB,CAACjoC,OAAM2vC,YAAY,IAAlE,CAGA,IAAK,IAAIjiE,EAAI,EAAGkX,EAAOxb,KAAK+B,KAAK2zB,SAASz0B,OAAQqD,EAAIkX,IAAQlX,EAC5DtE,KAAK+8C,eAAez4C,GAAGi1C,WAAWnD,YAEpC,IAAK,IAAI9xC,EAAI,EAAGkX,EAAOxb,KAAK+B,KAAK2zB,SAASz0B,OAAQqD,EAAIkX,IAAQlX,EAC5DtE,KAAK6vE,eAAevrE,EAAGmZ,GAAWmZ,GAAQA,EAAK,CAACjb,aAAcrX,IAAMsyB,GAEtE52B,KAAK6+D,cAAc,sBAAuB,CAACjoC,UAE7C,eAAet1B,EAAOs1B,GACpB,MAAMuP,EAAOnmC,KAAK+8C,eAAez7C,GAC3BqX,EAAO,CAACwtB,OAAM7kC,QAAOs1B,OAAM2vC,YAAY,IACW,IAApDvmE,KAAK6+D,cAAc,sBAAuBlmD,KAG9CwtB,EAAKoT,WAAWtG,QAAQrc,GACxBje,EAAK4tD,YAAa,EAClBvmE,KAAK6+D,cAAc,qBAAsBlmD,IAE3C,UACiE,IAA3D3Y,KAAK6+D,cAAc,eAAgB,CAAC0H,YAAY,MAGhDlyB,GAASv2B,IAAI9d,MACXA,KAAKisE,WAAa53B,GAAShB,QAAQrzC,OACrCq0C,GAAS56B,MAAMzZ,OAGjBA,KAAKszC,OACL62B,GAAqB,CAACt0C,MAAO71B,SAGjC,OACE,IAAIsE,EACJ,GAAItE,KAAKusE,kBAAmB,CAC1B,MAAM,MAACt0D,EAAK,OAAEC,GAAUlY,KAAKusE,kBAC7BvsE,KAAKwsE,QAAQv0D,EAAOC,GACpBlY,KAAKusE,kBAAoB,KAG3B,GADAvsE,KAAKgpE,QACDhpE,KAAKiY,OAAS,GAAKjY,KAAKkY,QAAU,EACpC,OAEF,IAA6D,IAAzDlY,KAAK6+D,cAAc,aAAc,CAAC0H,YAAY,IAChD,OAEF,MAAMuJ,EAAS9vE,KAAK0yD,QACpB,IAAKpuD,EAAI,EAAGA,EAAIwrE,EAAO7uE,QAAU6uE,EAAOxrE,GAAGquD,GAAK,IAAKruD,EACnDwrE,EAAOxrE,GAAGgvC,KAAKtzC,KAAKo/C,WAGtB,IADAp/C,KAAK+vE,gBACEzrE,EAAIwrE,EAAO7uE,SAAUqD,EAC1BwrE,EAAOxrE,GAAGgvC,KAAKtzC,KAAKo/C,WAEtBp/C,KAAK6+D,cAAc,aAErB,uBAAuBnnB,GACrB,MAAMC,EAAW33C,KAAK8rE,gBAChBr9D,EAAS,GACf,IAAInK,EAAGkX,EACP,IAAKlX,EAAI,EAAGkX,EAAOm8B,EAAS12C,OAAQqD,EAAIkX,IAAQlX,EAAG,CACjD,MAAM6hC,EAAOwR,EAASrzC,GACjBozC,IAAiBvR,EAAK6P,SACzBvnC,EAAO3B,KAAKq5B,GAGhB,OAAO13B,EAET,+BACE,OAAOzO,KAAK43C,wBAAuB,GAErC,gBACE,IAAqE,IAAjE53C,KAAK6+D,cAAc,qBAAsB,CAAC0H,YAAY,IACxD,OAEF,MAAM5uB,EAAW33C,KAAK+tD,+BACtB,IAAK,IAAIzpD,EAAIqzC,EAAS12C,OAAS,EAAGqD,GAAK,IAAKA,EAC1CtE,KAAKgwE,aAAar4B,EAASrzC,IAE7BtE,KAAK6+D,cAAc,qBAErB,aAAa14B,GACX,MAAM5P,EAAMv2B,KAAKu2B,IACXsF,EAAOsK,EAAK+Y,MACZ+wB,GAAWp0C,EAAK17B,SAChBq7B,EAAOx7B,KAAKo/C,UACZzmC,EAAO,CACXwtB,OACA7kC,MAAO6kC,EAAK7kC,MACZilE,YAAY,IAEwC,IAAlDvmE,KAAK6+D,cAAc,oBAAqBlmD,KAGxCs3D,GACFr0C,GAASrF,EAAK,CACZ3c,MAAoB,IAAdiiB,EAAKjiB,KAAiB,EAAI4hB,EAAK5hB,KAAOiiB,EAAKjiB,KACjDC,OAAsB,IAAfgiB,EAAKhiB,MAAkB7Z,KAAKiY,MAAQujB,EAAK3hB,MAAQgiB,EAAKhiB,MAC7D6hB,KAAkB,IAAbG,EAAKH,IAAgB,EAAIF,EAAKE,IAAMG,EAAKH,IAC9CC,QAAwB,IAAhBE,EAAKF,OAAmB37B,KAAKkY,OAASsjB,EAAKG,OAASE,EAAKF,SAGrEwK,EAAKoT,WAAWjG,OACZ28B,GACFn0C,GAAWvF,GAEb5d,EAAK4tD,YAAa,EAClBvmE,KAAK6+D,cAAc,mBAAoBlmD,IAEzC,cAAc4iB,GACZ,OAAOD,GAAeC,EAAOv7B,KAAKo/C,UAAWp/C,KAAK2uE,aAEpD,0BAA0B9pE,EAAG+xB,EAAM3uB,EAASqmD,GAC1C,MAAM/sB,EAAS8tB,GAAYC,MAAM14B,GACjC,MAAsB,oBAAX2K,EACFA,EAAOvhC,KAAM6E,EAAGoD,EAASqmD,GAE3B,GAET,eAAe3yC,GACb,MAAMw+B,EAAUn6C,KAAK+B,KAAK2zB,SAAS/Z,GAC7Bg8B,EAAW33C,KAAK0rE,UACtB,IAAIvlC,EAAOwR,EAAS1zC,OAAOsG,GAAKA,GAAKA,EAAE8/C,WAAalQ,GAAS56B,MAkB7D,OAjBK4mB,IACHA,EAAO,CACL58B,KAAM,KACNxH,KAAM,GACNo4C,QAAS,KACTZ,WAAY,KACZwB,OAAQ,KACRqB,QAAS,KACTE,QAAS,KACTuxB,MAAO1zB,GAAWA,EAAQ0zB,OAAS,EACnCvsE,MAAOqa,EACP0uC,SAAUlQ,EACVK,QAAS,GACTqD,SAAS,GAEXlG,EAAS7qC,KAAKq5B,IAETA,EAET,aACE,OAAOnmC,KAAK47C,WAAa57C,KAAK47C,SAAWxb,GAAc,KAAM,CAACvK,MAAO71B,KAAMuJ,KAAM,WAEnF,yBACE,OAAOvJ,KAAK+tD,+BAA+B9sD,OAE7C,iBAAiB0a,GACf,MAAMw+B,EAAUn6C,KAAK+B,KAAK2zB,SAAS/Z,GACnC,IAAKw+B,EACH,OAAO,EAET,MAAMhU,EAAOnmC,KAAK+8C,eAAephC,GACjC,MAA8B,mBAAhBwqB,EAAK4U,QAAwB5U,EAAK4U,QAAUZ,EAAQY,OAEpE,qBAAqBp/B,EAAcq6B,GACjC,MAAM7P,EAAOnmC,KAAK+8C,eAAephC,GACjCwqB,EAAK4U,QAAU/E,EAEjB,qBAAqB10C,GACnBtB,KAAKgsE,eAAe1qE,IAAUtB,KAAKgsE,eAAe1qE,GAEpD,kBAAkBA,GAChB,OAAQtB,KAAKgsE,eAAe1qE,GAE9B,kBAAkBqa,EAAc0+B,EAAWrE,GACzC,MAAMpf,EAAOof,EAAU,OAAS,OAC1B7P,EAAOnmC,KAAK+8C,eAAephC,GAC3Bg3B,EAAQxM,EAAKoT,WAAW2G,wBAAmBz5B,EAAWmQ,GACxDpZ,GAAQ68B,IACVlU,EAAKpkC,KAAKs4C,GAAWU,QAAU/E,EAC/Bh2C,KAAK+2C,WAEL/2C,KAAKkwE,qBAAqBv0D,EAAcq6B,GACxCrD,EAAMoE,OAAO5Q,EAAM,CAAC6P,YACpBh2C,KAAK+2C,OAAQxgB,GAAQA,EAAI5a,eAAiBA,EAAeib,OAAOnQ,IAGpE,KAAK9K,EAAc0+B,GACjBr6C,KAAKmwE,kBAAkBx0D,EAAc0+B,GAAW,GAElD,KAAK1+B,EAAc0+B,GACjBr6C,KAAKmwE,kBAAkBx0D,EAAc0+B,GAAW,GAElD,oBAAoB1+B,GAClB,MAAMwqB,EAAOnmC,KAAK0rE,UAAU/vD,GACxBwqB,GAAQA,EAAKoT,YACfpT,EAAKoT,WAAW62B,kBAEXpwE,KAAK0rE,UAAU/vD,GAExB,QACE,IAAIrX,EAAGkX,EAGP,IAFAxb,KAAK8wC,OACLuD,GAASg8B,OAAOrwE,MACXsE,EAAI,EAAGkX,EAAOxb,KAAK+B,KAAK2zB,SAASz0B,OAAQqD,EAAIkX,IAAQlX,EACxDtE,KAAK0tE,oBAAoBppE,GAG7B,UACEtE,KAAK6+D,cAAc,iBACnB,MAAM,OAAC/kC,EAAM,IAAEvD,GAAOv2B,KACtBA,KAAKswE,QACLtwE,KAAKk2C,OAAO6yB,aACRjvC,IACF95B,KAAKqvE,eACLx1C,GAAYC,EAAQvD,GACpBv2B,KAAK81B,SAASy6C,eAAeh6C,GAC7Bv2B,KAAK85B,OAAS,KACd95B,KAAKu2B,IAAM,MAEbv2B,KAAK6+D,cAAc,kBACZ6L,GAAU1qE,KAAK2B,IACtB3B,KAAK6+D,cAAc,gBAErB,iBAAiBlmD,GACf,OAAO3Y,KAAK85B,OAAO02C,aAAa73D,GAElC,aACE3Y,KAAKywE,iBACDzwE,KAAKiI,QAAQkvB,WACfn3B,KAAK0wE,uBAEL1wE,KAAKisE,UAAW,EAGpB,iBACE,MAAM9qC,EAAYnhC,KAAK4rE,WACjB91C,EAAW91B,KAAK81B,SAChB66C,EAAO,CAACpnE,EAAM03B,KAClBnL,EAASqX,iBAAiBntC,KAAMuJ,EAAM03B,GACtCE,EAAU53B,GAAQ03B,GAEdA,EAAW,CAACp8B,EAAG0F,EAAGmV,KACtB7a,EAAEkmC,QAAUxgC,EACZ1F,EAAEmmC,QAAUtrB,EACZ1f,KAAK8uE,cAAcjqE,IAErBmW,GAAKhb,KAAKiI,QAAQguB,OAAS1sB,GAASonE,EAAKpnE,EAAM03B,IAEjD,uBACOjhC,KAAK6rE,uBACR7rE,KAAK6rE,qBAAuB,IAE9B,MAAM1qC,EAAYnhC,KAAK6rE,qBACjB/1C,EAAW91B,KAAK81B,SAChB66C,EAAO,CAACpnE,EAAM03B,KAClBnL,EAASqX,iBAAiBntC,KAAMuJ,EAAM03B,GACtCE,EAAU53B,GAAQ03B,GAEd2vC,EAAU,CAACrnE,EAAM03B,KACjBE,EAAU53B,KACZusB,EAASsX,oBAAoBptC,KAAMuJ,EAAM03B,UAClCE,EAAU53B,KAGf03B,EAAW,CAAChpB,EAAOC,KACnBlY,KAAK85B,QACP95B,KAAK81C,OAAO79B,EAAOC,IAGvB,IAAI24D,EACJ,MAAM5E,EAAW,KACf2E,EAAQ,SAAU3E,GAClBjsE,KAAKisE,UAAW,EAChBjsE,KAAK81C,SACL66B,EAAK,SAAU1vC,GACf0vC,EAAK,SAAUE,IAEjBA,EAAW,KACT7wE,KAAKisE,UAAW,EAChB2E,EAAQ,SAAU3vC,GAClBjhC,KAAKswE,QACLtwE,KAAKwsE,QAAQ,EAAG,GAChBmE,EAAK,SAAU1E,IAEbn2C,EAASg7C,WAAW9wE,KAAK85B,QAC3BmyC,IAEA4E,IAGJ,eACE71D,GAAKhb,KAAK4rE,WAAY,CAAC3qC,EAAU13B,KAC/BvJ,KAAK81B,SAASsX,oBAAoBptC,KAAMuJ,EAAM03B,KAEhDjhC,KAAK4rE,WAAa,GAClB5wD,GAAKhb,KAAK6rE,qBAAsB,CAAC5qC,EAAU13B,KACzCvJ,KAAK81B,SAASsX,oBAAoBptC,KAAMuJ,EAAM03B,KAEhDjhC,KAAK6rE,0BAAuBplD,EAE9B,iBAAiBqb,EAAOlL,EAAMwhC,GAC5B,MAAMvzB,EAASuzB,EAAU,MAAQ,SACjC,IAAIjyB,EAAM/kC,EAAMkD,EAAGkX,EAKnB,IAJa,YAATob,IACFuP,EAAOnmC,KAAK+8C,eAAejb,EAAM,GAAGnmB,cACpCwqB,EAAKoT,WAAW,IAAM1U,EAAS,wBAE5BvgC,EAAI,EAAGkX,EAAOsmB,EAAM7gC,OAAQqD,EAAIkX,IAAQlX,EAAG,CAC9ClD,EAAO0gC,EAAMx9B,GACb,MAAMi1C,EAAan4C,GAAQpB,KAAK+8C,eAAe37C,EAAKua,cAAc49B,WAC9DA,GACFA,EAAW1U,EAAS,cAAczjC,EAAK0M,QAAS1M,EAAKua,aAAcva,EAAKE,QAI9E,oBACE,OAAOtB,KAAKuzC,SAAW,GAEzB,kBAAkBw9B,GAChB,MAAMC,EAAahxE,KAAKuzC,SAAW,GAC7B9oC,EAASsmE,EAAej1D,IAAI,EAAEH,eAAcra,YAChD,MAAM6kC,EAAOnmC,KAAK+8C,eAAephC,GACjC,IAAKwqB,EACH,MAAM,IAAIjB,MAAM,6BAA+BvpB,GAEjD,MAAO,CACLA,eACA7N,QAASq4B,EAAKpkC,KAAKT,GACnBA,WAGEmqD,GAAWpwC,GAAe5Q,EAAQumE,GACpCvlB,IACFzrD,KAAKuzC,QAAU9oC,EACfzK,KAAK2rE,WAAa,KAClB3rE,KAAK+uE,mBAAmBtkE,EAAQumE,IAGpC,cAAc7K,EAAMxtD,EAAM1U,GACxB,OAAOjE,KAAK+rE,SAASkF,OAAOjxE,KAAMmmE,EAAMxtD,EAAM1U,GAEhD,mBAAmBwG,EAAQumE,EAAYE,GACrC,MAAMC,EAAenxE,KAAKiI,QAAQ5H,MAC5Bk5D,EAAO,CAAC57C,EAAGC,IAAMD,EAAE1Z,OAAOsG,IAAMqT,EAAEipD,KAAKnnD,GAAKnV,EAAEoR,eAAiB+D,EAAE/D,cAAgBpR,EAAEjJ,QAAUoe,EAAEpe,QAC/F8vE,EAAc7X,EAAKyX,EAAYvmE,GAC/B4mE,EAAYH,EAASzmE,EAAS8uD,EAAK9uD,EAAQumE,GAC7CI,EAAYnwE,QACdjB,KAAKsxE,iBAAiBF,EAAaD,EAAav6C,MAAM,GAEpDy6C,EAAUpwE,QAAUkwE,EAAav6C,MACnC52B,KAAKsxE,iBAAiBD,EAAWF,EAAav6C,MAAM,GAGxD,cAAc/xB,EAAGqsE,GACf,MAAMv4D,EAAO,CACXm7B,MAAOjvC,EACPqsE,SACA3K,YAAY,EACZyE,YAAahrE,KAAKuuD,cAAc1pD,IAE5B0sE,EAAejL,IAAYA,EAAOr+D,QAAQguB,QAAUj2B,KAAKiI,QAAQguB,QAAQsN,SAAS1+B,EAAE8vD,OAAOprD,MACjG,IAA6D,IAAzDvJ,KAAK6+D,cAAc,cAAelmD,EAAM44D,GAC1C,OAEF,MAAM9lB,EAAUzrD,KAAKwxE,aAAa3sE,EAAGqsE,EAAQv4D,EAAKqyD,aAMlD,OALAryD,EAAK4tD,YAAa,EAClBvmE,KAAK6+D,cAAc,aAAclmD,EAAM44D,IACnC9lB,GAAW9yC,EAAK8yC,UAClBzrD,KAAK4sE,SAEA5sE,KAET,aAAa6E,EAAGqsE,EAAQlG,GACtB,MAAOz3B,QAASy9B,EAAa,GAAE,QAAE/oE,GAAWjI,KACtCsuD,EAAmB4iB,EACnBzmE,EAASzK,KAAKyxE,mBAAmB5sE,EAAGmsE,EAAYhG,EAAa1c,GAC7D2c,EAAUltD,GAAclZ,GACxBkmE,EAAYD,GAAmBjmE,EAAG7E,KAAK2rE,WAAYX,EAAaC,GAClED,IACFhrE,KAAK2rE,WAAa,KAClBvkE,GAASa,EAAQ+uB,QAAS,CAACnyB,EAAG4F,EAAQzK,MAAOA,MACzCirE,GACF7jE,GAASa,EAAQgvB,QAAS,CAACpyB,EAAG4F,EAAQzK,MAAOA,OAGjD,MAAMyrD,GAAWpwC,GAAe5Q,EAAQumE,GAMxC,OALIvlB,GAAWylB,KACblxE,KAAKuzC,QAAU9oC,EACfzK,KAAK+uE,mBAAmBtkE,EAAQumE,EAAYE,IAE9ClxE,KAAK2rE,WAAaZ,EACXtf,EAET,mBAAmB5mD,EAAGmsE,EAAYhG,EAAa1c,GAC7C,GAAe,aAAXzpD,EAAE0E,KACJ,MAAO,GAET,IAAKyhE,EACH,OAAOgG,EAET,MAAMG,EAAenxE,KAAKiI,QAAQ5H,MAClC,OAAOL,KAAK0xE,0BAA0B7sE,EAAGssE,EAAav6C,KAAMu6C,EAAc7iB,IAG9E,MAAMqjB,GAAoB,IAAM32D,GAAK,GAAM0vD,UAAY70C,GAAUA,EAAMk2C,SAASyC,cAC1Ex2C,IAAa,EA0CnB,SAAS45C,GAAQr7C,EAAKzoB,EAASs5C,GAC7B,MAAM,WAACD,EAAU,YAAE0qB,EAAW,EAAEtnE,EAAC,EAAEmV,EAAC,YAAEsoC,EAAW,YAAED,GAAej6C,EAClE,IAAIgkE,EAAcD,EAAc7pB,EAChCzxB,EAAIqE,YACJrE,EAAIsE,IAAItwB,EAAGmV,EAAGsoC,EAAab,EAAa2qB,EAAa1qB,EAAW0qB,GAC5D/pB,EAAc8pB,GAChBC,EAAcD,EAAc9pB,EAC5BxxB,EAAIsE,IAAItwB,EAAGmV,EAAGqoC,EAAaX,EAAW0qB,EAAa3qB,EAAa2qB,GAAa,IAE7Ev7C,EAAIsE,IAAItwB,EAAGmV,EAAGmyD,EAAazqB,EAAW9oC,GAAS6oC,EAAa7oC,IAE9DiY,EAAIuE,YACJvE,EAAIsF,OAEN,SAASk2C,GAAgB/wE,GACvB,OAAOg+B,GAAkBh+B,EAAO,CAAC,aAAc,WAAY,aAAc,aAE3E,SAASgxE,GAAoBn3C,EAAKktB,EAAaC,EAAaiqB,GAC1D,MAAMC,EAAIH,GAAgBl3C,EAAI5yB,QAAQkqE,cAChCC,GAAiBpqB,EAAcD,GAAe,EAC9CsqB,EAAa36D,KAAKwI,IAAIkyD,EAAeH,EAAalqB,EAAc,GAChEuqB,EAAqBzuE,IACzB,MAAM0uE,GAAiBvqB,EAActwC,KAAKwI,IAAIkyD,EAAevuE,IAAQouE,EAAa,EAClF,OAAOlwD,GAAYle,EAAK,EAAG6T,KAAKwI,IAAIkyD,EAAeG,KAErD,MAAO,CACLC,WAAYF,EAAkBJ,EAAEM,YAChCC,SAAUH,EAAkBJ,EAAEO,UAC9BC,WAAY3wD,GAAYmwD,EAAEQ,WAAY,EAAGL,GACzCM,SAAU5wD,GAAYmwD,EAAES,SAAU,EAAGN,IAGzC,SAASO,GAAWxsD,EAAGysD,EAAOtoE,EAAGmV,GAC/B,MAAO,CACLnV,EAAGA,EAAI6b,EAAI1O,KAAK4L,IAAIuvD,GACpBnzD,EAAGA,EAAI0G,EAAI1O,KAAK2K,IAAIwwD,IAGxB,SAASC,GAAQv8C,EAAKzoB,EAAS64C,EAAQ2B,EAAS5uC,GAC9C,MAAM,EAACnP,EAAC,EAAEmV,EAAGynC,WAAY1tC,EAAK,YAAEo4D,EAAa9pB,YAAagrB,GAAUjlE,EAC9Dk6C,EAActwC,KAAKyI,IAAIrS,EAAQk6C,YAAcM,EAAU3B,EAASkrB,EAAa,GAC7E9pB,EAAcgrB,EAAS,EAAIA,EAASzqB,EAAU3B,EAASkrB,EAAc,EAC3E,IAAImB,EAAgB,EACpB,MAAMC,EAAQv5D,EAAMD,EACpB,GAAI6uC,EAAS,CACX,MAAM4qB,EAAuBH,EAAS,EAAIA,EAASzqB,EAAU,EACvD6qB,EAAuBnrB,EAAc,EAAIA,EAAcM,EAAU,EACjE8qB,GAAsBF,EAAuBC,GAAwB,EACrEE,EAAuC,IAAvBD,EAA4BH,EAAQG,GAAuBA,EAAqB9qB,GAAW2qB,EACjHD,GAAiBC,EAAQI,GAAiB,EAE5C,MAAMC,EAAO57D,KAAKyI,IAAI,KAAO8yD,EAAQjrB,EAAcrB,EAAS3oC,IAAMgqC,EAC5DurB,GAAeN,EAAQK,GAAQ,EAC/BnsB,EAAa1tC,EAAQ85D,EAAcP,EACnC5rB,EAAW1tC,EAAM65D,EAAcP,GAC/B,WAACR,EAAU,SAAEC,EAAQ,WAAEC,EAAU,SAAEC,GAAYX,GAAoBlkE,EAASi6C,EAAaC,EAAaZ,EAAWD,GACjHqsB,EAA2BxrB,EAAcwqB,EACzCiB,EAAyBzrB,EAAcyqB,EACvCiB,EAA0BvsB,EAAaqrB,EAAagB,EACpDG,EAAwBvsB,EAAWqrB,EAAWgB,EAC9CG,EAA2B7rB,EAAc2qB,EACzCmB,EAAyB9rB,EAAc4qB,EACvCmB,EAA0B3sB,EAAaurB,EAAakB,EACpDG,EAAwB3sB,EAAWurB,EAAWkB,EAGpD,GAFAt9C,EAAIqE,YACJrE,EAAIsE,IAAItwB,EAAGmV,EAAGsoC,EAAa0rB,EAAyBC,GAChDlB,EAAW,EAAG,CAChB,MAAMuB,EAAUpB,GAAWa,EAAwBE,EAAuBppE,EAAGmV,GAC7E6W,EAAIsE,IAAIm5C,EAAQzpE,EAAGypE,EAAQt0D,EAAG+yD,EAAUkB,EAAuBvsB,EAAW9oC,IAE5E,MAAM21D,EAAKrB,GAAWiB,EAAwBzsB,EAAU78C,EAAGmV,GAE3D,GADA6W,EAAIyE,OAAOi5C,EAAG1pE,EAAG0pE,EAAGv0D,GAChBizD,EAAW,EAAG,CAChB,MAAMqB,EAAUpB,GAAWiB,EAAwBE,EAAuBxpE,EAAGmV,GAC7E6W,EAAIsE,IAAIm5C,EAAQzpE,EAAGypE,EAAQt0D,EAAGizD,EAAUvrB,EAAW9oC,GAASy1D,EAAwBr8D,KAAKsG,IAG3F,GADAuY,EAAIsE,IAAItwB,EAAGmV,EAAGqoC,EAAaX,EAAYurB,EAAW5qB,EAAcZ,EAAcurB,EAAa3qB,GAAc,GACrG2qB,EAAa,EAAG,CAClB,MAAMsB,EAAUpB,GAAWgB,EAA0BE,EAAyBvpE,EAAGmV,GACjF6W,EAAIsE,IAAIm5C,EAAQzpE,EAAGypE,EAAQt0D,EAAGgzD,EAAYoB,EAA0Bp8D,KAAKsG,GAAImpC,EAAa7oC,IAE5F,MAAM41D,EAAKtB,GAAWY,EAA0BrsB,EAAY58C,EAAGmV,GAE/D,GADA6W,EAAIyE,OAAOk5C,EAAG3pE,EAAG2pE,EAAGx0D,GAChB8yD,EAAa,EAAG,CAClB,MAAMwB,EAAUpB,GAAWY,EAA0BE,EAAyBnpE,EAAGmV,GACjF6W,EAAIsE,IAAIm5C,EAAQzpE,EAAGypE,EAAQt0D,EAAG8yD,EAAYrrB,EAAa7oC,GAASo1D,GAElEn9C,EAAIuE,YAEN,SAASq5C,GAAQ59C,EAAKzoB,EAAS64C,EAAQ2B,GACrC,MAAM,YAAC8rB,EAAW,WAAEjtB,EAAU,cAAEJ,GAAiBj5C,EACjD,IAAIs5C,EAAWt5C,EAAQs5C,SACvB,GAAIgtB,EAAa,CACftB,GAAQv8C,EAAKzoB,EAAS64C,EAAQ2B,EAASnB,EAAalpC,IACpD,IAAK,IAAI3Z,EAAI,EAAGA,EAAI8vE,IAAe9vE,EACjCiyB,EAAI4E,OAED3jB,MAAMuvC,KACTK,EAAWD,EAAaJ,EAAgB9oC,GACpC8oC,EAAgB9oC,KAAQ,IAC1BmpC,GAAYnpC,KAMlB,OAFA60D,GAAQv8C,EAAKzoB,EAAS64C,EAAQ2B,EAASlB,GACvC7wB,EAAI4E,OACGisB,EAET,SAASitB,GAAsB99C,EAAKzoB,EAASwmE,GAC3C,MAAM,EAAC/pE,EAAC,EAAEmV,EAAC,WAAEynC,EAAU,YAAE0qB,EAAW,YAAEuC,GAAetmE,EAC/Ck6C,EAActwC,KAAKyI,IAAIrS,EAAQk6C,YAAc6pB,EAAa,GAC1D9pB,EAAcj6C,EAAQi6C,YAAc8pB,EAC1C,IAAIvtE,EAMJ,IALIgwE,GACF1C,GAAQr7C,EAAKzoB,EAASq5C,EAAalpC,IAErCsY,EAAIqE,YACJrE,EAAIsE,IAAItwB,EAAGmV,EAAGqoC,EAAaZ,EAAalpC,GAAKkpC,GAAY,GACpD7iD,EAAI,EAAGA,EAAI8vE,IAAe9vE,EAC7BiyB,EAAI8E,SAIN,IAFA9E,EAAIqE,YACJrE,EAAIsE,IAAItwB,EAAGmV,EAAGsoC,EAAab,EAAYA,EAAalpC,IAC/C3Z,EAAI,EAAGA,EAAI8vE,IAAe9vE,EAC7BiyB,EAAI8E,SAGR,SAASm+B,GAAWjjC,EAAKzoB,EAAS64C,EAAQ2B,EAASlB,GACjD,MAAM,QAACn/C,GAAW6F,GACZ,YAACstB,EAAW,gBAAEkX,GAAmBrqC,EACjCqsE,EAAgC,UAAxBrsE,EAAQ0hD,YACjBvuB,IAGDk5C,GACF/9C,EAAI2G,UAA0B,EAAd9B,EAChB7E,EAAIg+C,SAAWjiC,GAAmB,UAElC/b,EAAI2G,UAAY9B,EAChB7E,EAAIg+C,SAAWjiC,GAAmB,SAEhCxkC,EAAQsmE,aACVC,GAAsB99C,EAAKzoB,EAASwmE,GAElCA,GACF1C,GAAQr7C,EAAKzoB,EAASs5C,GAExB0rB,GAAQv8C,EAAKzoB,EAAS64C,EAAQ2B,EAASlB,GACvC7wB,EAAI8E,UA7LN55B,OAAOq2B,iBAAiB,GAAO,CAC7BI,SAAU,CACRF,cACAh3B,MAAOk3B,IAETwyC,UAAW,CACT1yC,cACAh3B,MAAO0pE,IAET51C,UAAW,CACTkD,cACAh3B,MAAO8zB,IAETixC,SAAU,CACR/tC,cACAh3B,MAAO,IAET6oE,QAAS,CACP7xC,cACAh3B,MAAO6oE,IAETc,SAAU,CACR3yC,cACAh3B,MAAO2pE,IAEThG,SAAU,CACR3sC,cACAh3B,MAAO,IAAI8gC,KACT,GAAS7sB,OAAO6sB,GAChB6vC,OAGJ6C,WAAY,CACVx8C,cACAh3B,MAAO,IAAI8gC,KACT,GAASuuC,UAAUvuC,GACnB6vC,SA2JN,MAAM,WAAmB,GACvB,YAAYj9B,GACV6P,QACAvkD,KAAKiI,aAAUwe,EACfzmB,KAAK+mD,mBAAgBtgC,EACrBzmB,KAAKmnD,gBAAa1gC,EAClBzmB,KAAKonD,cAAW3gC,EAChBzmB,KAAK+nD,iBAActhC,EACnBzmB,KAAKgoD,iBAAcvhC,EACnBzmB,KAAK6xE,YAAc,EACnB7xE,KAAKo0E,YAAc,EACf1/B,GACFjzC,OAAOoyB,OAAO7zB,KAAM00C,GAGxB,QAAQ+/B,EAAQC,EAAQpmB,GACtB,MAAM/yB,EAAQv7B,KAAK2uD,SAAS,CAAC,IAAK,KAAML,IAClC,MAACttC,EAAK,SAAEE,GAAYR,GAAkB6a,EAAO,CAAChxB,EAAGkqE,EAAQ/0D,EAAGg1D,KAC5D,WAACvtB,EAAU,SAAEC,EAAQ,YAAEW,EAAW,YAAEC,EAAW,cAAEjB,GAAiB/mD,KAAK2uD,SAAS,CACpF,aACA,WACA,cACA,cACA,iBACCL,GACGqmB,EAAU30E,KAAKiI,QAAQqgD,QAAU,EACjCmB,EAAiB/uC,GAAeqsC,EAAeK,EAAWD,GAC1DytB,EAAgBnrB,GAAkBxrC,IAAOuD,GAAcR,EAAOmmC,EAAYC,GAC1EytB,EAAe5yD,GAAWf,EAAU6mC,EAAc4sB,EAAS3sB,EAAc2sB,GAC/E,OAAQC,GAAiBC,EAE3B,eAAevmB,GACb,MAAM,EAAC/jD,EAAC,EAAEmV,EAAC,WAAEynC,EAAU,SAAEC,EAAQ,YAAEW,EAAW,YAAEC,GAAehoD,KAAK2uD,SAAS,CAC3E,IACA,IACA,aACA,WACA,cACA,cACA,iBACCL,IACG,OAAC3H,EAAM,QAAE2B,GAAWtoD,KAAKiI,QACzB6sE,GAAa3tB,EAAaC,GAAY,EACtC2tB,GAAchtB,EAAcC,EAAcM,EAAU3B,GAAU,EACpE,MAAO,CACLp8C,EAAGA,EAAImN,KAAK4L,IAAIwxD,GAAaC,EAC7Br1D,EAAGA,EAAIhI,KAAK2K,IAAIyyD,GAAaC,GAGjC,gBAAgBzmB,GACd,OAAOtuD,KAAK+uD,eAAeT,GAE7B,KAAK/3B,GACH,MAAM,QAACtuB,EAAO,cAAE8+C,GAAiB/mD,KAC3B2mD,GAAU1+C,EAAQ0+C,QAAU,GAAK,EACjC2B,GAAWrgD,EAAQqgD,SAAW,GAAK,EAGzC,GAFAtoD,KAAK6xE,YAAuC,UAAxB5pE,EAAQ0hD,YAA2B,IAAO,EAC9D3pD,KAAKo0E,YAAcrtB,EAAgB9oC,GAAMvG,KAAKuH,MAAM8nC,EAAgB9oC,IAAO,EACrD,IAAlB8oC,GAAuB/mD,KAAK+nD,YAAc,GAAK/nD,KAAKgoD,YAAc,EACpE,OAEFzxB,EAAI2C,OACJ,IAAI87C,EAAe,EACnB,GAAIruB,EAAQ,CACVquB,EAAeruB,EAAS,EACxB,MAAMmuB,GAAa90E,KAAKmnD,WAAannD,KAAKonD,UAAY,EACtD7wB,EAAImE,UAAUhjB,KAAK4L,IAAIwxD,GAAaE,EAAct9D,KAAK2K,IAAIyyD,GAAaE,GACpEh1E,KAAK+mD,eAAiB/oC,KACxBg3D,EAAeruB,GAGnBpwB,EAAIiH,UAAYv1B,EAAQutB,gBACxBe,EAAI0G,YAAch1B,EAAQwtB,YAC1B,MAAM2xB,EAAW+sB,GAAQ59C,EAAKv2B,KAAMg1E,EAAc1sB,GAClDkR,GAAWjjC,EAAKv2B,KAAMg1E,EAAc1sB,EAASlB,GAC7C7wB,EAAI+C,WAkBR,SAAS27C,GAAS1+C,EAAKtuB,EAASmuB,EAAQnuB,GACtCsuB,EAAI2+C,QAAUx6D,GAAe0b,EAAM+b,eAAgBlqC,EAAQkqC,gBAC3D5b,EAAIotC,YAAYjpD,GAAe0b,EAAMgc,WAAYnqC,EAAQmqC,aACzD7b,EAAIqtC,eAAiBlpD,GAAe0b,EAAMic,iBAAkBpqC,EAAQoqC,kBACpE9b,EAAIg+C,SAAW75D,GAAe0b,EAAMkc,gBAAiBrqC,EAAQqqC,iBAC7D/b,EAAI2G,UAAYxiB,GAAe0b,EAAMgF,YAAanzB,EAAQmzB,aAC1D7E,EAAI0G,YAAcviB,GAAe0b,EAAMX,YAAaxtB,EAAQwtB,aAE9D,SAASuF,GAAOzE,EAAKyF,EAAUjgB,GAC7Bwa,EAAIyE,OAAOjf,EAAOxR,EAAGwR,EAAO2D,GAE9B,SAASy1D,GAAcltE,GACrB,OAAIA,EAAQmtE,QACHr5C,GAEL9zB,EAAQuhC,SAA8C,aAAnCvhC,EAAQqhC,uBACtBnN,GAEFnB,GAET,SAASq6C,GAAS1uC,EAAQgJ,EAASygB,EAAS,IAC1C,MAAMhqB,EAAQO,EAAO1lC,QACdwY,MAAO67D,EAAc,EAAG57D,IAAK67D,EAAYnvC,EAAQ,GAAKgqB,GACtD32C,MAAO+7D,EAAc97D,IAAK+7D,GAAc9lC,EACzCl2B,EAAQ/B,KAAKyI,IAAIm1D,EAAaE,GAC9B97D,EAAMhC,KAAKwI,IAAIq1D,EAAWE,GAC1BC,EAAUJ,EAAcE,GAAgBD,EAAYC,GAAgBF,EAAcG,GAAcF,EAAYE,EAClH,MAAO,CACLrvC,QACA3sB,QACA0vB,KAAMwG,EAAQxG,KACd3tB,KAAM9B,EAAMD,IAAUi8D,EAAUtvC,EAAQ1sB,EAAMD,EAAQC,EAAMD,GAGhE,SAASk8D,GAAYp/C,EAAKwG,EAAM4S,EAASygB,GACvC,MAAM,OAACzpB,EAAM,QAAE1+B,GAAW80B,GACpB,MAACqJ,EAAK,MAAE3sB,EAAK,KAAE0vB,EAAI,KAAE3tB,GAAQ65D,GAAS1uC,EAAQgJ,EAASygB,GACvDwlB,EAAaT,GAAcltE,GACjC,IACI3D,EAAGi3B,EAAOgO,GADV,KAACoX,GAAO,EAAI,QAAEzlC,GAAWk1C,GAAU,GAEvC,IAAK9rD,EAAI,EAAGA,GAAKkX,IAAQlX,EACvBi3B,EAAQoL,GAAQltB,GAASyB,EAAUM,EAAOlX,EAAIA,IAAM8hC,GAChD7K,EAAMqL,OAEC+Z,GACTpqB,EAAIwE,OAAOQ,EAAMhxB,EAAGgxB,EAAM7b,GAC1BihC,GAAO,GAEPi1B,EAAWr/C,EAAKgT,EAAMhO,EAAOrgB,EAASjT,EAAQmtE,SAEhD7rC,EAAOhO,GAMT,OAJI4N,IACF5N,EAAQoL,GAAQltB,GAASyB,EAAUM,EAAO,IAAM4qB,GAChDwvC,EAAWr/C,EAAKgT,EAAMhO,EAAOrgB,EAASjT,EAAQmtE,YAEvCjsC,EAEX,SAAS0sC,GAAgBt/C,EAAKwG,EAAM4S,EAASygB,GAC3C,MAAMzpB,EAAS5J,EAAK4J,QACd,MAACP,EAAK,MAAE3sB,EAAK,KAAE+B,GAAQ65D,GAAS1uC,EAAQgJ,EAASygB,IACjD,KAACzP,GAAO,EAAI,QAAEzlC,GAAWk1C,GAAU,GACzC,IAEI9rD,EAAGi3B,EAAOu6C,EAAOhuB,EAAMF,EAAMmuB,EAF7BC,EAAO,EACPC,EAAS,EAEb,MAAMC,EAAc50E,IAAWmY,GAASyB,EAAUM,EAAOla,EAAQA,IAAU8kC,EACrE+vC,EAAQ,KACRruB,IAASF,IACXrxB,EAAIyE,OAAOg7C,EAAMpuB,GACjBrxB,EAAIyE,OAAOg7C,EAAMluB,GACjBvxB,EAAIyE,OAAOg7C,EAAMD,KAOrB,IAJIp1B,IACFplB,EAAQoL,EAAOuvC,EAAW,IAC1B3/C,EAAIwE,OAAOQ,EAAMhxB,EAAGgxB,EAAM7b,IAEvBpb,EAAI,EAAGA,GAAKkX,IAAQlX,EAAG,CAE1B,GADAi3B,EAAQoL,EAAOuvC,EAAW5xE,IACtBi3B,EAAMqL,KACR,SAEF,MAAMr8B,EAAIgxB,EAAMhxB,EACVmV,EAAI6b,EAAM7b,EACV02D,EAAa,EAAJ7rE,EACX6rE,IAAWN,GACTp2D,EAAIooC,EACNA,EAAOpoC,EACEA,EAAIkoC,IACbA,EAAOloC,GAETs2D,GAAQC,EAASD,EAAOzrE,KAAO0rE,IAE/BE,IACA5/C,EAAIyE,OAAOzwB,EAAGmV,GACdo2D,EAAQM,EACRH,EAAS,EACTnuB,EAAOF,EAAOloC,GAEhBq2D,EAAQr2D,EAEVy2D,IAEF,SAASE,GAAkBt5C,GACzB,MAAMJ,EAAOI,EAAK90B,QACZmqC,EAAazV,EAAKyV,YAAczV,EAAKyV,WAAWnxC,OAChDq1E,GAAev5C,EAAK0tB,aAAe1tB,EAAKkU,QAAUtU,EAAK6M,SAA2C,aAAhC7M,EAAK2M,yBAA0C3M,EAAKy4C,UAAYhjC,EACxI,OAAOkkC,EAAcT,GAAkBF,GAEzC,SAASY,GAAwBtuE,GAC/B,OAAIA,EAAQmtE,QACH7nC,GAELtlC,EAAQuhC,SAA8C,aAAnCvhC,EAAQqhC,uBACtBkE,GAEFF,GAET,SAASkpC,GAAoBjgD,EAAKwG,EAAMtjB,EAAO2sB,GAC7C,IAAIqwC,EAAO15C,EAAK25C,MACXD,IACHA,EAAO15C,EAAK25C,MAAQ,IAAIC,OACpB55C,EAAK05C,KAAKA,EAAMh9D,EAAO2sB,IACzBqwC,EAAK37C,aAGTm6C,GAAS1+C,EAAKwG,EAAK90B,SACnBsuB,EAAI8E,OAAOo7C,GAEb,SAASG,GAAiBrgD,EAAKwG,EAAMtjB,EAAO2sB,GAC1C,MAAM,SAACoK,EAAQ,QAAEvoC,GAAW80B,EACtB85C,EAAgBR,GAAkBt5C,GACxC,IAAK,MAAM4S,KAAWa,EACpBykC,GAAS1+C,EAAKtuB,EAAS0nC,EAAQvZ,OAC/BG,EAAIqE,YACAi8C,EAActgD,EAAKwG,EAAM4S,EAAS,CAACl2B,QAAOC,IAAKD,EAAQ2sB,EAAQ,KACjE7P,EAAIuE,YAENvE,EAAI8E,SAzJR,GAAW15B,GAAK,MAChB,GAAWu2B,SAAW,CACpByxB,YAAa,SACbl0B,YAAa,OACb6c,qBAAiB7rB,EACjB0rD,aAAc,EACd/2C,YAAa,EACburB,OAAQ,EACR2B,QAAS,EACTtnC,WAAOyF,GAET,GAAWwwC,cAAgB,CACzBzhC,gBAAiB,mBAgJnB,MAAMshD,GAA8B,oBAAXH,OACzB,SAASrjC,GAAK/c,EAAKwG,EAAMtjB,EAAO2sB,GAC1B0wC,KAAc/5C,EAAK90B,QAAQ0nC,QAC7B6mC,GAAoBjgD,EAAKwG,EAAMtjB,EAAO2sB,GAEtCwwC,GAAiBrgD,EAAKwG,EAAMtjB,EAAO2sB,GAGvC,MAAM,WAAoB,GACxB,YAAYsO,GACV6P,QACAvkD,KAAK0qD,UAAW,EAChB1qD,KAAKiI,aAAUwe,EACfzmB,KAAKuxC,YAAS9qB,EACdzmB,KAAKixC,WAAQxqB,EACbzmB,KAAKoxC,eAAY3qB,EACjBzmB,KAAK02E,WAAQjwD,EACbzmB,KAAK+2E,aAAUtwD,EACfzmB,KAAKg3E,eAAYvwD,EACjBzmB,KAAKyqD,YAAa,EAClBzqD,KAAKi3E,gBAAiB,EACtBj3E,KAAK0xC,mBAAgBjrB,EACjBiuB,GACFjzC,OAAOoyB,OAAO7zB,KAAM00C,GAGxB,oBAAoB0K,EAAW1oB,GAC7B,MAAMzuB,EAAUjI,KAAKiI,QACrB,IAAKA,EAAQuhC,SAA8C,aAAnCvhC,EAAQqhC,0BAA2CrhC,EAAQmtE,UAAYp1E,KAAKi3E,eAAgB,CAClH,MAAM9tC,EAAOlhC,EAAQohC,SAAWrpC,KAAKixC,MAAQjxC,KAAKoxC,UAClDlI,GAA2BlpC,KAAK+2E,QAAS9uE,EAASm3C,EAAWjW,EAAMzS,GACnE12B,KAAKi3E,gBAAiB,GAG1B,WAAWtwC,GACT3mC,KAAK+2E,QAAUpwC,SACR3mC,KAAKg3E,iBACLh3E,KAAK02E,MACZ12E,KAAKi3E,gBAAiB,EAExB,aACE,OAAOj3E,KAAK+2E,QAEd,eACE,OAAO/2E,KAAKg3E,YAAch3E,KAAKg3E,UAAYjmC,GAAiB/wC,KAAMA,KAAKiI,QAAQ0nC,UAEjF,QACE,MAAMa,EAAWxwC,KAAKwwC,SAChB7J,EAAS3mC,KAAK2mC,OACpB,OAAO6J,EAASvvC,QAAU0lC,EAAO6J,EAAS,GAAG/2B,OAE/C,OACE,MAAM+2B,EAAWxwC,KAAKwwC,SAChB7J,EAAS3mC,KAAK2mC,OACdP,EAAQoK,EAASvvC,OACvB,OAAOmlC,GAASO,EAAO6J,EAASpK,EAAQ,GAAG1sB,KAE7C,YAAY6hB,EAAOtb,GACjB,MAAMhY,EAAUjI,KAAKiI,QACfjH,EAAQu6B,EAAMtb,GACd0mB,EAAS3mC,KAAK2mC,OACd6J,EAAWD,GAAevwC,KAAM,CAACigB,WAAUxG,MAAOzY,EAAO0Y,IAAK1Y,IACpE,IAAKwvC,EAASvvC,OACZ,OAEF,MAAMwN,EAAS,GACTyoE,EAAeX,GAAwBtuE,GAC7C,IAAI3D,EAAGkX,EACP,IAAKlX,EAAI,EAAGkX,EAAOg1B,EAASvvC,OAAQqD,EAAIkX,IAAQlX,EAAG,CACjD,MAAM,MAACmV,EAAK,IAAEC,GAAO82B,EAASlsC,GACxBmjB,EAAKkf,EAAOltB,GACZiO,EAAKif,EAAOjtB,GAClB,GAAI+N,IAAOC,EAAI,CACbjZ,EAAO3B,KAAK2a,GACZ,SAEF,MAAMtF,EAAIzK,KAAKkI,KAAK5e,EAAQymB,EAAGxH,KAAcyH,EAAGzH,GAAYwH,EAAGxH,KACzDk3D,EAAeD,EAAazvD,EAAIC,EAAIvF,EAAGla,EAAQmtE,SACrD+B,EAAal3D,GAAYsb,EAAMtb,GAC/BxR,EAAO3B,KAAKqqE,GAEd,OAAyB,IAAlB1oE,EAAOxN,OAAewN,EAAO,GAAKA,EAE3C,YAAY8nB,EAAKoZ,EAASygB,GACxB,MAAMymB,EAAgBR,GAAkBr2E,MACxC,OAAO62E,EAActgD,EAAKv2B,KAAM2vC,EAASygB,GAE3C,KAAK75B,EAAK9c,EAAO2sB,GACf,MAAMoK,EAAWxwC,KAAKwwC,SAChBqmC,EAAgBR,GAAkBr2E,MACxC,IAAImpC,EAAOnpC,KAAKixC,MAChBx3B,EAAQA,GAAS,EACjB2sB,EAAQA,GAAUpmC,KAAK2mC,OAAO1lC,OAASwY,EACvC,IAAK,MAAMk2B,KAAWa,EACpBrH,GAAQ0tC,EAActgD,EAAKv2B,KAAM2vC,EAAS,CAACl2B,QAAOC,IAAKD,EAAQ2sB,EAAQ,IAEzE,QAAS+C,EAEX,KAAK5S,EAAK6oB,EAAW3lC,EAAO2sB,GAC1B,MAAMn+B,EAAUjI,KAAKiI,SAAW,GAC1B0+B,EAAS3mC,KAAK2mC,QAAU,GAC1BA,EAAO1lC,QAAUgH,EAAQmzB,cAC3B7E,EAAI2C,OACJoa,GAAK/c,EAAKv2B,KAAMyZ,EAAO2sB,GACvB7P,EAAI+C,WAEFt5B,KAAK0qD,WACP1qD,KAAKi3E,gBAAiB,EACtBj3E,KAAK02E,WAAQjwD,IA2BnB,SAAS2wD,GAAU/sC,EAAIltB,EAAKw8B,EAAM2U,GAChC,MAAMrmD,EAAUoiC,EAAGpiC,SACZ,CAAC0xC,GAAO34C,GAASqpC,EAAGskB,SAAS,CAAChV,GAAO2U,GAC5C,OAAQ52C,KAAKkI,IAAIzC,EAAMnc,GAASiH,EAAQuyB,OAASvyB,EAAQovE,UA1B3D,GAAY11E,GAAK,OACjB,GAAYu2B,SAAW,CACrBia,eAAgB,OAChBC,WAAY,GACZC,iBAAkB,EAClBC,gBAAiB,QACjBlX,YAAa,EACb0N,iBAAiB,EACjBQ,uBAAwB,UACxBnO,MAAM,EACNkO,UAAU,EACV+rC,SAAS,EACT5rC,QAAS,GAEX,GAAYytB,cAAgB,CAC1BzhC,gBAAiB,kBACjBC,YAAa,eAEf,GAAYsP,YAAc,CACxB5M,aAAa,EACbE,WAAav4B,GAAkB,eAATA,GAAkC,SAATA,GAQjD,MAAM,WAAqB,GACzB,YAAY40C,GACV6P,QACAvkD,KAAKiI,aAAUwe,EACfzmB,KAAKumC,YAAS9f,EACdzmB,KAAK4mC,UAAOngB,EACZzmB,KAAK8wC,UAAOrqB,EACRiuB,GACFjzC,OAAOoyB,OAAO7zB,KAAM00C,GAGxB,QAAQ4iC,EAAQC,EAAQjpB,GACtB,MAAMrmD,EAAUjI,KAAKiI,SACf,EAACsC,EAAC,EAAEmV,GAAK1f,KAAK2uD,SAAS,CAAC,IAAK,KAAML,GACzC,OAAS52C,KAAKsH,IAAIs4D,EAAS/sE,EAAG,GAAKmN,KAAKsH,IAAIu4D,EAAS73D,EAAG,GAAMhI,KAAKsH,IAAI/W,EAAQovE,UAAYpvE,EAAQuyB,OAAQ,GAE7G,SAAS88C,EAAQhpB,GACf,OAAO8oB,GAAUp3E,KAAMs3E,EAAQ,IAAKhpB,GAEtC,SAASipB,EAAQjpB,GACf,OAAO8oB,GAAUp3E,KAAMu3E,EAAQ,IAAKjpB,GAEtC,eAAeA,GACb,MAAM,EAAC/jD,EAAC,EAAEmV,GAAK1f,KAAK2uD,SAAS,CAAC,IAAK,KAAML,GACzC,MAAO,CAAC/jD,IAAGmV,KAEb,KAAKzX,GACHA,EAAUA,GAAWjI,KAAKiI,SAAW,GACrC,IAAIuyB,EAASvyB,EAAQuyB,QAAU,EAC/BA,EAAS9iB,KAAKyI,IAAIqa,EAAQA,GAAUvyB,EAAQuvE,aAAe,GAC3D,MAAMp8C,EAAcZ,GAAUvyB,EAAQmzB,aAAe,EACrD,OAAgC,GAAxBZ,EAASY,GAEnB,KAAK7E,EAAKiF,GACR,MAAMvzB,EAAUjI,KAAKiI,QACjBjI,KAAK4mC,MAAQ3+B,EAAQuyB,OAAS,KAAQc,GAAet7B,KAAMw7B,EAAMx7B,KAAK6d,KAAK5V,GAAW,KAG1FsuB,EAAI0G,YAAch1B,EAAQwtB,YAC1Bc,EAAI2G,UAAYj1B,EAAQmzB,YACxB7E,EAAIiH,UAAYv1B,EAAQutB,gBACxB0E,GAAU3D,EAAKtuB,EAASjI,KAAKuK,EAAGvK,KAAK0f,IAEvC,WACE,MAAMzX,EAAUjI,KAAKiI,SAAW,GAChC,OAAOA,EAAQuyB,OAASvyB,EAAQovE,WAkBpC,SAASI,GAAaC,EAAKppB,GACzB,MAAM,EAAC/jD,EAAC,EAAEmV,EAAC,KAAE8hB,EAAI,MAAEvpB,EAAK,OAAEC,GAAUw/D,EAAI/oB,SAAS,CAAC,IAAK,IAAK,OAAQ,QAAS,UAAWL,GACxF,IAAI10C,EAAMC,EAAO6hB,EAAKC,EAAQg8C,EAc9B,OAbID,EAAIj0B,YACNk0B,EAAOz/D,EAAS,EAChB0B,EAAOlC,KAAKwI,IAAI3V,EAAGi3B,GACnB3nB,EAAQnC,KAAKyI,IAAI5V,EAAGi3B,GACpB9F,EAAMhc,EAAIi4D,EACVh8C,EAASjc,EAAIi4D,IAEbA,EAAO1/D,EAAQ,EACf2B,EAAOrP,EAAIotE,EACX99D,EAAQtP,EAAIotE,EACZj8C,EAAMhkB,KAAKwI,IAAIR,EAAG8hB,GAClB7F,EAASjkB,KAAKyI,IAAIT,EAAG8hB,IAEhB,CAAC5nB,OAAM8hB,MAAK7hB,QAAO8hB,UAE5B,SAASi8C,GAAYhxC,EAAM5lC,EAAOkf,EAAKC,GACrC,OAAOymB,EAAO,EAAI7kB,GAAY/gB,EAAOkf,EAAKC,GAE5C,SAAS03D,GAAiBH,EAAKI,EAAMC,GACnC,MAAM/2E,EAAQ02E,EAAIzvE,QAAQmzB,YACpBwL,EAAO8wC,EAAI9zB,cACXsuB,EAAI9yC,GAAOp+B,GACjB,MAAO,CACLmhB,EAAGy1D,GAAYhxC,EAAKlL,IAAKw2C,EAAEx2C,IAAK,EAAGq8C,GACnC3xD,EAAGwxD,GAAYhxC,EAAK/sB,MAAOq4D,EAAEr4D,MAAO,EAAGi+D,GACvCl6D,EAAGg6D,GAAYhxC,EAAKjL,OAAQu2C,EAAEv2C,OAAQ,EAAGo8C,GACzCxzD,EAAGqzD,GAAYhxC,EAAKhtB,KAAMs4D,EAAEt4D,KAAM,EAAGk+D,IAGzC,SAASE,GAAkBN,EAAKI,EAAMC,GACpC,MAAM,mBAACl0B,GAAsB6zB,EAAI/oB,SAAS,CAAC,uBACrC3tD,EAAQ02E,EAAIzvE,QAAQkqE,aACpBD,EAAI7yC,GAAcr+B,GAClBi3E,EAAOvgE,KAAKwI,IAAI43D,EAAMC,GACtBnxC,EAAO8wC,EAAI9zB,cACXs0B,EAAer0B,GAAsBxpC,GAASrZ,GACpD,MAAO,CACLq9B,QAASu5C,IAAaM,GAAgBtxC,EAAKlL,KAAOkL,EAAKhtB,KAAMs4D,EAAE7zC,QAAS,EAAG45C,GAC3Ez5C,SAAUo5C,IAAaM,GAAgBtxC,EAAKlL,KAAOkL,EAAK/sB,MAAOq4D,EAAE1zC,SAAU,EAAGy5C,GAC9E35C,WAAYs5C,IAAaM,GAAgBtxC,EAAKjL,QAAUiL,EAAKhtB,KAAMs4D,EAAE5zC,WAAY,EAAG25C,GACpF15C,YAAaq5C,IAAaM,GAAgBtxC,EAAKjL,QAAUiL,EAAK/sB,MAAOq4D,EAAE3zC,YAAa,EAAG05C,IAG3F,SAASE,GAAcT,GACrB,MAAM9nC,EAAS6nC,GAAaC,GACtBz/D,EAAQ23B,EAAO/1B,MAAQ+1B,EAAOh2B,KAC9B1B,EAAS03B,EAAOjU,OAASiU,EAAOlU,IAChCqvB,EAAS8sB,GAAiBH,EAAKz/D,EAAQ,EAAGC,EAAS,GACnDsiB,EAASw9C,GAAkBN,EAAKz/D,EAAQ,EAAGC,EAAS,GAC1D,MAAO,CACLkgE,MAAO,CACL7tE,EAAGqlC,EAAOh2B,KACV8F,EAAGkwB,EAAOlU,IACV5U,EAAG7O,EACHzV,EAAG0V,EACHsiB,UAEF85C,MAAO,CACL/pE,EAAGqlC,EAAOh2B,KAAOmxC,EAAOxmC,EACxB7E,EAAGkwB,EAAOlU,IAAMqvB,EAAO5oC,EACvB2E,EAAG7O,EAAQ8yC,EAAOxmC,EAAIwmC,EAAO3kC,EAC7B5jB,EAAG0V,EAAS6yC,EAAO5oC,EAAI4oC,EAAOntC,EAC9B4c,OAAQ,CACN6D,QAAS3mB,KAAKyI,IAAI,EAAGqa,EAAO6D,QAAU3mB,KAAKyI,IAAI4qC,EAAO5oC,EAAG4oC,EAAOxmC,IAChEia,SAAU9mB,KAAKyI,IAAI,EAAGqa,EAAOgE,SAAW9mB,KAAKyI,IAAI4qC,EAAO5oC,EAAG4oC,EAAO3kC,IAClEkY,WAAY5mB,KAAKyI,IAAI,EAAGqa,EAAO8D,WAAa5mB,KAAKyI,IAAI4qC,EAAOntC,EAAGmtC,EAAOxmC,IACtEga,YAAa7mB,KAAKyI,IAAI,EAAGqa,EAAO+D,YAAc7mB,KAAKyI,IAAI4qC,EAAOntC,EAAGmtC,EAAO3kC,OAKhF,SAASqoC,GAAQipB,EAAKntE,EAAGmV,EAAG4uC,GAC1B,MAAM+pB,EAAc,OAAN9tE,EACR+tE,EAAc,OAAN54D,EACR64D,EAAWF,GAASC,EACpB1oC,EAAS8nC,IAAQa,GAAYd,GAAaC,EAAKppB,GACrD,OAAO1e,IACHyoC,GAASp2D,GAAW1X,EAAGqlC,EAAOh2B,KAAMg2B,EAAO/1B,UAC3Cy+D,GAASr2D,GAAWvC,EAAGkwB,EAAOlU,IAAKkU,EAAOjU,SAEhD,SAAS68C,GAAUh+C,GACjB,OAAOA,EAAO6D,SAAW7D,EAAOgE,UAAYhE,EAAO8D,YAAc9D,EAAO+D,YAE1E,SAASk6C,GAAkBliD,EAAK2E,GAC9B3E,EAAI2E,KAAKA,EAAK3wB,EAAG2wB,EAAKxb,EAAGwb,EAAKpU,EAAGoU,EAAK14B,GAExC,SAASk2E,GAAYx9C,EAAM+xB,EAAQ0rB,EAAU,IAC3C,MAAMpuE,EAAI2wB,EAAK3wB,IAAMouE,EAAQpuE,GAAK0iD,EAAS,EACrCvtC,EAAIwb,EAAKxb,IAAMi5D,EAAQj5D,GAAKutC,EAAS,EACrCnmC,GAAKoU,EAAK3wB,EAAI2wB,EAAKpU,IAAM6xD,EAAQpuE,EAAIouE,EAAQ7xD,EAAImmC,EAAS,GAAK1iD,EAC/D/H,GAAK04B,EAAKxb,EAAIwb,EAAK14B,IAAMm2E,EAAQj5D,EAAIi5D,EAAQn2E,EAAIyqD,EAAS,GAAKvtC,EACrE,MAAO,CACLnV,EAAG2wB,EAAK3wB,EAAIA,EACZmV,EAAGwb,EAAKxb,EAAIA,EACZoH,EAAGoU,EAAKpU,EAAIA,EACZtkB,EAAG04B,EAAK14B,EAAIA,EACZg4B,OAAQU,EAAKV,QAlHjB,GAAa74B,GAAK,QAClB,GAAau2B,SAAW,CACtBkD,YAAa,EACbi8C,UAAW,EACXztB,iBAAkB,EAClB4tB,YAAa,EACbl9C,WAAY,SACZE,OAAQ,EACRD,SAAU,GAEZ,GAAa08B,cAAgB,CAC3BzhC,gBAAiB,kBACjBC,YAAa,eAyGf,MAAM,WAAmB,GACvB,YAAYif,GACV6P,QACAvkD,KAAKiI,aAAUwe,EACfzmB,KAAKyjD,gBAAah9B,EAClBzmB,KAAKwhC,UAAO/a,EACZzmB,KAAKiY,WAAQwO,EACbzmB,KAAKkY,YAASuO,EACdzmB,KAAKokD,mBAAgB39B,EACjBiuB,GACFjzC,OAAOoyB,OAAO7zB,KAAM00C,GAGxB,KAAKne,GACH,MAAM,cAAC6tB,EAAen8C,SAAS,YAACwtB,EAAW,gBAAED,IAAoBx1B,MAC3D,MAACs0E,EAAK,MAAE8D,GAASD,GAAcn4E,MAC/B44E,EAAcJ,GAAUJ,EAAM59C,QAAU4D,GAAqBq6C,GACnEliD,EAAI2C,OACAk/C,EAAMtxD,IAAMwtD,EAAMxtD,GAAKsxD,EAAM51E,IAAM8xE,EAAM9xE,IAC3C+zB,EAAIqE,YACJg+C,EAAYriD,EAAKmiD,GAAYN,EAAOh0B,EAAekwB,IACnD/9C,EAAIsF,OACJ+8C,EAAYriD,EAAKmiD,GAAYpE,GAAQlwB,EAAeg0B,IACpD7hD,EAAIiH,UAAY/H,EAChBc,EAAI4E,KAAK,YAEX5E,EAAIqE,YACJg+C,EAAYriD,EAAKmiD,GAAYpE,EAAOlwB,IACpC7tB,EAAIiH,UAAYhI,EAChBe,EAAI4E,OACJ5E,EAAI+C,UAEN,QAAQg+C,EAAQC,EAAQjpB,GACtB,OAAOG,GAAQzuD,KAAMs3E,EAAQC,EAAQjpB,GAEvC,SAASgpB,EAAQhpB,GACf,OAAOG,GAAQzuD,KAAMs3E,EAAQ,KAAMhpB,GAErC,SAASipB,EAAQjpB,GACf,OAAOG,GAAQzuD,KAAM,KAAMu3E,EAAQjpB,GAErC,eAAeA,GACb,MAAM,EAAC/jD,EAAC,EAAEmV,EAAC,KAAE8hB,EAAI,WAAEiiB,GAAczjD,KAAK2uD,SAAS,CAAC,IAAK,IAAK,OAAQ,cAAeL,GACjF,MAAO,CACL/jD,EAAGk5C,GAAcl5C,EAAIi3B,GAAQ,EAAIj3B,EACjCmV,EAAG+jC,EAAa/jC,GAAKA,EAAI8hB,GAAQ,GAGrC,SAASmY,GACP,MAAgB,MAATA,EAAe35C,KAAKiY,MAAQ,EAAIjY,KAAKkY,OAAS,GAGzD,GAAWvW,GAAK,MAChB,GAAWu2B,SAAW,CACpB0rB,cAAe,QACfxoB,YAAa,EACb+2C,aAAc,EACd/tB,cAAe,OACf9pB,gBAAY7T,GAEd,GAAWwwC,cAAgB,CACzBzhC,gBAAiB,kBACjBC,YAAa,eAitBf,MAAMojD,GAAa,CAACC,EAAWvU,KAC7B,IAAI,UAACwU,EAAYxU,EAAQ,SAAEyU,EAAWzU,GAAYuU,EAKlD,OAJIA,EAAUG,gBACZF,EAAYrhE,KAAKwI,IAAI64D,EAAWxU,GAChCyU,EAAWthE,KAAKwI,IAAI84D,EAAUzU,IAEzB,CACLyU,WACAD,YACAG,WAAYxhE,KAAKyI,IAAIokD,EAAUwU,KAG7BI,GAAa,CAACx7D,EAAGC,IAAY,OAAND,GAAoB,OAANC,GAAcD,EAAEhC,eAAiBiC,EAAEjC,cAAgBgC,EAAErc,QAAUsc,EAAEtc,MAC5G,MAAM,WAAe,GACnB,YAAY40C,GACVqO,QACAvkD,KAAKo5E,QAAS,EACdp5E,KAAKq5E,eAAiB,GACtBr5E,KAAKs5E,aAAe,KACpBt5E,KAAKu5E,cAAe,EACpBv5E,KAAK61B,MAAQqgB,EAAOrgB,MACpB71B,KAAKiI,QAAUiuC,EAAOjuC,QACtBjI,KAAKu2B,IAAM2f,EAAO3f,IAClBv2B,KAAKw5E,iBAAc/yD,EACnBzmB,KAAKy5E,iBAAchzD,EACnBzmB,KAAK05E,gBAAajzD,EAClBzmB,KAAK4rC,eAAYnlB,EACjBzmB,KAAKo9B,cAAW3W,EAChBzmB,KAAK07B,SAAMjV,EACXzmB,KAAK27B,YAASlV,EACdzmB,KAAK4Z,UAAO6M,EACZzmB,KAAK6Z,WAAQ4M,EACbzmB,KAAKkY,YAASuO,EACdzmB,KAAKiY,WAAQwO,EACbzmB,KAAK67D,cAAWp1C,EAChBzmB,KAAK6tD,cAAWpnC,EAChBzmB,KAAKo0B,YAAS3N,EACdzmB,KAAKuwD,cAAW9pC,EAElB,OAAO2W,EAAUwO,EAAWY,GAC1BxsC,KAAKo9B,SAAWA,EAChBp9B,KAAK4rC,UAAYA,EACjB5rC,KAAK67D,SAAWrvB,EAChBxsC,KAAKw9D,gBACLx9D,KAAK25E,cACL35E,KAAKu+D,MAEP,gBACMv+D,KAAKujD,gBACPvjD,KAAKiY,MAAQjY,KAAKo9B,SAClBp9B,KAAK4Z,KAAO5Z,KAAK67D,SAASjiD,KAC1B5Z,KAAK6Z,MAAQ7Z,KAAKiY,QAElBjY,KAAKkY,OAASlY,KAAK4rC,UACnB5rC,KAAK07B,IAAM17B,KAAK67D,SAASngC,IACzB17B,KAAK27B,OAAS37B,KAAKkY,QAGvB,cACE,MAAM4gE,EAAY94E,KAAKiI,QAAQi2C,QAAU,GACzC,IAAIs7B,EAAcpyE,GAAS0xE,EAAUc,eAAgB,CAAC55E,KAAK61B,OAAQ71B,OAAS,GACxE84E,EAAU70E,SACZu1E,EAAcA,EAAYv1E,OAAQ7C,GAAS03E,EAAU70E,OAAO7C,EAAMpB,KAAK61B,MAAM9zB,QAE3E+2E,EAAUx5D,OACZk6D,EAAcA,EAAYl6D,KAAK,CAAC3B,EAAGC,IAAMk7D,EAAUx5D,KAAK3B,EAAGC,EAAG5d,KAAK61B,MAAM9zB,QAEvE/B,KAAKiI,QAAQiT,SACfs+D,EAAYt+D,UAEdlb,KAAKw5E,YAAcA,EAErB,MACE,MAAM,QAACvxE,EAAO,IAAEsuB,GAAOv2B,KACvB,IAAKiI,EAAQukD,QAEX,YADAxsD,KAAKiY,MAAQjY,KAAKkY,OAAS,GAG7B,MAAM4gE,EAAY7wE,EAAQi2C,OACpB27B,EAAYt6C,GAAOu5C,EAAU5iD,MAC7BquC,EAAWsV,EAAUh8D,KACrBgiD,EAAc7/D,KAAK85E,uBACnB,SAACd,EAAQ,WAAEE,GAAcL,GAAWC,EAAWvU,GACrD,IAAItsD,EAAOC,EACXqe,EAAIL,KAAO2jD,EAAUlhD,OACjB34B,KAAKujD,gBACPtrC,EAAQjY,KAAKo9B,SACbllB,EAASlY,KAAK+5E,SAASla,EAAa0E,EAAUyU,EAAUE,GAAc,KAEtEhhE,EAASlY,KAAK4rC,UACd3zB,EAAQjY,KAAKg6E,SAASna,EAAa0E,EAAUyU,EAAUE,GAAc,IAEvEl5E,KAAKiY,MAAQP,KAAKwI,IAAIjI,EAAOhQ,EAAQm1B,UAAYp9B,KAAKo9B,UACtDp9B,KAAKkY,OAASR,KAAKwI,IAAIhI,EAAQjQ,EAAQ2jC,WAAa5rC,KAAK4rC,WAE3D,SAASi0B,EAAa0E,EAAUyU,EAAUE,GACxC,MAAM,IAAC3iD,EAAG,SAAE6G,EAAUn1B,SAAUi2C,QAAQ,QAACsU,KAAaxyD,KAChDi6E,EAAWj6E,KAAKq5E,eAAiB,GACjCK,EAAa15E,KAAK05E,WAAa,CAAC,GAChCrjD,EAAa6iD,EAAa1mB,EAChC,IAAI0nB,EAAcra,EAClBtpC,EAAIkH,UAAY,OAChBlH,EAAImH,aAAe,SACnB,IAAIy8C,GAAO,EACPz+C,GAAOrF,EAYX,OAXAr2B,KAAKw5E,YAAYl4C,QAAQ,CAAC0oB,EAAY1lD,KACpC,MAAMoqC,EAAYsqC,EAAYzU,EAAW,EAAKhuC,EAAIsC,YAAYmxB,EAAWttB,MAAMzkB,OACrE,IAAN3T,GAAWo1E,EAAWA,EAAWz4E,OAAS,GAAKytC,EAAY,EAAI8jB,EAAUp1B,KAC3E88C,GAAe7jD,EACfqjD,EAAWA,EAAWz4E,QAAUqD,EAAI,EAAI,EAAI,IAAM,EAClDo3B,GAAOrF,EACP8jD,KAEFF,EAAS31E,GAAK,CAACsV,KAAM,EAAG8hB,MAAKy+C,MAAKliE,MAAOy2B,EAAWx2B,OAAQghE,GAC5DQ,EAAWA,EAAWz4E,OAAS,IAAMytC,EAAY8jB,IAE5C0nB,EAET,SAASra,EAAa0E,EAAUyU,EAAUE,GACxC,MAAM,IAAC3iD,EAAG,UAAEqV,EAAW3jC,SAAUi2C,QAAQ,QAACsU,KAAaxyD,KACjDi6E,EAAWj6E,KAAKq5E,eAAiB,GACjCI,EAAcz5E,KAAKy5E,YAAc,GACjCW,EAAcxuC,EAAYi0B,EAChC,IAAIwa,EAAa7nB,EACb8nB,EAAkB,EAClBC,EAAmB,EACnB3gE,EAAO,EACP4gE,EAAM,EAgBV,OAfAx6E,KAAKw5E,YAAYl4C,QAAQ,CAAC0oB,EAAY1lD,KACpC,MAAMoqC,EAAYsqC,EAAYzU,EAAW,EAAKhuC,EAAIsC,YAAYmxB,EAAWttB,MAAMzkB,MAC3E3T,EAAI,GAAKi2E,EAAmBrB,EAAa,EAAI1mB,EAAU4nB,IACzDC,GAAcC,EAAkB9nB,EAChCinB,EAAY3sE,KAAK,CAACmL,MAAOqiE,EAAiBpiE,OAAQqiE,IAClD3gE,GAAQ0gE,EAAkB9nB,EAC1BgoB,IACAF,EAAkBC,EAAmB,GAEvCN,EAAS31E,GAAK,CAACsV,OAAM8hB,IAAK6+C,EAAkBC,MAAKviE,MAAOy2B,EAAWx2B,OAAQghE,GAC3EoB,EAAkB5iE,KAAKyI,IAAIm6D,EAAiB5rC,GAC5C6rC,GAAoBrB,EAAa1mB,IAEnC6nB,GAAcC,EACdb,EAAY3sE,KAAK,CAACmL,MAAOqiE,EAAiBpiE,OAAQqiE,IAC3CF,EAET,iBACE,IAAKr6E,KAAKiI,QAAQukD,QAChB,OAEF,MAAMqT,EAAc7/D,KAAK85E,uBAClBT,eAAgBY,EAAUhyE,SAAS,MAACsR,EAAO2kC,QAAQ,QAACsU,GAAQ,IAAE14C,IAAQ9Z,KACvEy6E,EAAY5rC,GAAc/0B,EAAK9Z,KAAK4Z,KAAM5Z,KAAKiY,OACrD,GAAIjY,KAAKujD,eAAgB,CACvB,IAAI42B,EAAM,EACNvgE,EAAOJ,GAAeD,EAAOvZ,KAAK4Z,KAAO44C,EAASxyD,KAAK6Z,MAAQ7Z,KAAK05E,WAAWS,IACnF,IAAK,MAAMO,KAAUT,EACfE,IAAQO,EAAOP,MACjBA,EAAMO,EAAOP,IACbvgE,EAAOJ,GAAeD,EAAOvZ,KAAK4Z,KAAO44C,EAASxyD,KAAK6Z,MAAQ7Z,KAAK05E,WAAWS,KAEjFO,EAAOh/C,KAAO17B,KAAK07B,IAAMmkC,EAAcrN,EACvCkoB,EAAO9gE,KAAO6gE,EAAUE,WAAWF,EAAUlwE,EAAEqP,GAAO8gE,EAAOziE,OAC7D2B,GAAQ8gE,EAAOziE,MAAQu6C,MAEpB,CACL,IAAIgoB,EAAM,EACN9+C,EAAMliB,GAAeD,EAAOvZ,KAAK07B,IAAMmkC,EAAcrN,EAASxyD,KAAK27B,OAAS37B,KAAKy5E,YAAYe,GAAKtiE,QACtG,IAAK,MAAMwiE,KAAUT,EACfS,EAAOF,MAAQA,IACjBA,EAAME,EAAOF,IACb9+C,EAAMliB,GAAeD,EAAOvZ,KAAK07B,IAAMmkC,EAAcrN,EAASxyD,KAAK27B,OAAS37B,KAAKy5E,YAAYe,GAAKtiE,SAEpGwiE,EAAOh/C,IAAMA,EACbg/C,EAAO9gE,MAAQ5Z,KAAK4Z,KAAO44C,EAC3BkoB,EAAO9gE,KAAO6gE,EAAUE,WAAWF,EAAUlwE,EAAEmwE,EAAO9gE,MAAO8gE,EAAOziE,OACpEyjB,GAAOg/C,EAAOxiE,OAASs6C,GAI7B,eACE,MAAiC,QAA1BxyD,KAAKiI,QAAQ4lD,UAAgD,WAA1B7tD,KAAKiI,QAAQ4lD,SAEzD,OACE,GAAI7tD,KAAKiI,QAAQukD,QAAS,CACxB,MAAMj2B,EAAMv2B,KAAKu2B,IACjBqF,GAASrF,EAAKv2B,MACdA,KAAK46E,QACL9+C,GAAWvF,IAGf,QACE,MAAOtuB,QAAS00B,EAAI,YAAE88C,EAAW,WAAEC,EAAU,IAAEnjD,GAAOv2B,MAChD,MAACuZ,EAAO2kC,OAAQ46B,GAAan8C,EAC7Bk+C,EAAe3iD,GAAS/D,MACxBsmD,EAAY5rC,GAAclS,EAAK7iB,IAAK9Z,KAAK4Z,KAAM5Z,KAAKiY,OACpD4hE,EAAYt6C,GAAOu5C,EAAU5iD,OAC5B/B,MAAO2mD,EAAS,QAAEtoB,GAAWsmB,EAC9BvU,EAAWsV,EAAUh8D,KACrBk9D,EAAexW,EAAW,EAChC,IAAIyW,EACJh7E,KAAKkkE,YACL3tC,EAAIkH,UAAYg9C,EAAUh9C,UAAU,QACpClH,EAAImH,aAAe,SACnBnH,EAAI2G,UAAY,GAChB3G,EAAIL,KAAO2jD,EAAUlhD,OACrB,MAAM,SAACqgD,EAAQ,UAAED,EAAS,WAAEG,GAAcL,GAAWC,EAAWvU,GAC1D0W,EAAgB,SAAS1wE,EAAGmV,EAAGsqC,GACnC,GAAIxyC,MAAMwhE,IAAaA,GAAY,GAAKxhE,MAAMuhE,IAAcA,EAAY,EACtE,OAEFxiD,EAAI2C,OACJ,MAAMgE,EAAYxiB,GAAesvC,EAAW9sB,UAAW,GAQvD,GAPA3G,EAAIiH,UAAY9iB,GAAesvC,EAAWxsB,UAAWq9C,GACrDtkD,EAAI2+C,QAAUx6D,GAAesvC,EAAWkrB,QAAS,QACjD3+C,EAAIqtC,eAAiBlpD,GAAesvC,EAAW4Z,eAAgB,GAC/DrtC,EAAIg+C,SAAW75D,GAAesvC,EAAWuqB,SAAU,SACnDh+C,EAAI2G,UAAYA,EAChB3G,EAAI0G,YAAcviB,GAAesvC,EAAW/sB,YAAa49C,GACzDtkD,EAAIotC,YAAYjpD,GAAesvC,EAAWkxB,SAAU,KAChDpC,EAAUG,cAAe,CAC3B,MAAMkC,EAAc,CAClB3gD,OAAQw+C,EAAWthE,KAAK0jE,MAAQ,EAChC9gD,WAAY0vB,EAAW1vB,WACvBC,SAAUyvB,EAAWzvB,SACrBa,YAAa8B,GAETosB,EAAUmxB,EAAUY,MAAM9wE,EAAGyuE,EAAW,GACxCzvB,EAAU7pC,EAAIq7D,EACpB7gD,GAAU3D,EAAK4kD,EAAa7xB,EAASC,OAChC,CACL,MAAM+xB,EAAU57D,EAAIhI,KAAKyI,KAAKokD,EAAWwU,GAAa,EAAG,GACnDwC,EAAWd,EAAUE,WAAWpwE,EAAGyuE,GACnC7G,EAAe9yC,GAAc2qB,EAAWmoB,cAC9C57C,EAAIqE,YACAn5B,OAAO2zB,OAAO+8C,GAActL,KAAKxiD,GAAW,IAANA,GACxC+Z,GAAmB7H,EAAK,CACtBhsB,EAAGgxE,EACH77D,EAAG47D,EACHx0D,EAAGkyD,EACHx2E,EAAGu2E,EACHv+C,OAAQ23C,IAGV57C,EAAI2E,KAAKqgD,EAAUD,EAAStC,EAAUD,GAExCxiD,EAAI4E,OACc,IAAd+B,GACF3G,EAAI8E,SAGR9E,EAAI+C,WAEA+D,EAAW,SAAS9yB,EAAGmV,EAAGsqC,GAC9BvtB,GAAWlG,EAAKyzB,EAAWttB,KAAMnyB,EAAGmV,EAAKw5D,EAAa,EAAIW,EAAW,CACnEl8C,cAAeqsB,EAAWjP,OAC1Btd,UAAWg9C,EAAUh9C,UAAUusB,EAAWvsB,cAGxC8lB,EAAevjD,KAAKujD,eACpBsc,EAAc7/D,KAAK85E,sBAEvBkB,EADEz3B,EACO,CACPh5C,EAAGiP,GAAeD,EAAOvZ,KAAK4Z,KAAO44C,EAASxyD,KAAK6Z,MAAQ6/D,EAAW,IACtEh6D,EAAG1f,KAAK07B,IAAM82B,EAAUqN,EACxB9iC,KAAM,GAGC,CACPxyB,EAAGvK,KAAK4Z,KAAO44C,EACf9yC,EAAGlG,GAAeD,EAAOvZ,KAAK07B,IAAMmkC,EAAcrN,EAASxyD,KAAK27B,OAAS89C,EAAY,GAAGvhE,QACxF6kB,KAAM,GAGV+R,GAAsB9uC,KAAKu2B,IAAKoG,EAAK6+C,eACrC,MAAMnlD,EAAa6iD,EAAa1mB,EAChCxyD,KAAKw5E,YAAYl4C,QAAQ,CAAC0oB,EAAY1lD,KACpCiyB,EAAI0G,YAAc+sB,EAAW8wB,WAAaA,EAC1CvkD,EAAIiH,UAAYwsB,EAAW8wB,WAAaA,EACxC,MAAMliD,EAAYrC,EAAIsC,YAAYmxB,EAAWttB,MAAMzkB,MAC7CwlB,EAAYg9C,EAAUh9C,UAAUusB,EAAWvsB,YAAcusB,EAAWvsB,UAAYq7C,EAAUr7C,YAC1FxlB,EAAQ+gE,EAAW+B,EAAeniD,EACxC,IAAIruB,EAAIywE,EAAOzwE,EACXmV,EAAIs7D,EAAOt7D,EACf+6D,EAAUgB,SAASz7E,KAAKiY,OACpBsrC,EACEj/C,EAAI,GAAKiG,EAAI0N,EAAQu6C,EAAUxyD,KAAK6Z,QACtC6F,EAAIs7D,EAAOt7D,GAAK2W,EAChB2kD,EAAOj+C,OACPxyB,EAAIywE,EAAOzwE,EAAIiP,GAAeD,EAAOvZ,KAAK4Z,KAAO44C,EAASxyD,KAAK6Z,MAAQ6/D,EAAWsB,EAAOj+C,QAElFz4B,EAAI,GAAKob,EAAI2W,EAAar2B,KAAK27B,SACxCpxB,EAAIywE,EAAOzwE,EAAIA,EAAIkvE,EAAYuB,EAAOj+C,MAAM9kB,MAAQu6C,EACpDwoB,EAAOj+C,OACPrd,EAAIs7D,EAAOt7D,EAAIlG,GAAeD,EAAOvZ,KAAK07B,IAAMmkC,EAAcrN,EAASxyD,KAAK27B,OAAS89C,EAAYuB,EAAOj+C,MAAM7kB,SAEhH,MAAMwjE,EAAQjB,EAAUlwE,EAAEA,GAC1B0wE,EAAcS,EAAOh8D,EAAGsqC,GACxBz/C,EAAIoP,GAAO8jB,EAAWlzB,EAAIyuE,EAAW+B,EAAcx3B,EAAeh5C,EAAI0N,EAAQjY,KAAK6Z,MAAO8iB,EAAK7iB,KAC/FujB,EAASo9C,EAAUlwE,EAAEA,GAAImV,EAAGsqC,GACxBzG,EACFy3B,EAAOzwE,GAAK0N,EAAQu6C,EAEpBwoB,EAAOt7D,GAAK2W,IAGhB+Y,GAAqBpvC,KAAKu2B,IAAKoG,EAAK6+C,eAEtC,YACE,MAAM7+C,EAAO38B,KAAKiI,QACZ03D,EAAYhjC,EAAK7oB,MACjB6nE,EAAYp8C,GAAOogC,EAAUzpC,MAC7B0lD,EAAet8C,GAAUqgC,EAAUnN,SACzC,IAAKmN,EAAUnT,QACb,OAEF,MAAMiuB,EAAY5rC,GAAclS,EAAK7iB,IAAK9Z,KAAK4Z,KAAM5Z,KAAKiY,OACpDse,EAAMv2B,KAAKu2B,IACXs3B,EAAW8R,EAAU9R,SACrBktB,EAAeY,EAAU99D,KAAO,EAChCg+D,EAA6BD,EAAalgD,IAAMq/C,EACtD,IAAIr7D,EACA9F,EAAO5Z,KAAK4Z,KACZwjB,EAAWp9B,KAAKiY,MACpB,GAAIjY,KAAKujD,eACPnmB,EAAW1lB,KAAKyI,OAAOngB,KAAK05E,YAC5Bh6D,EAAI1f,KAAK07B,IAAMmgD,EACfjiE,EAAOJ,GAAemjB,EAAKpjB,MAAOK,EAAM5Z,KAAK6Z,MAAQujB,OAChD,CACL,MAAMwO,EAAY5rC,KAAKy5E,YAAYxlC,OAAO,CAACC,EAAKr2B,IAASnG,KAAKyI,IAAI+zB,EAAKr2B,EAAK3F,QAAS,GACrFwH,EAAIm8D,EAA6BriE,GAAemjB,EAAKpjB,MAAOvZ,KAAK07B,IAAK17B,KAAK27B,OAASiQ,EAAYjP,EAAKuhB,OAAOsU,QAAUxyD,KAAK85E,uBAE7H,MAAMvvE,EAAIiP,GAAeq0C,EAAUj0C,EAAMA,EAAOwjB,GAChD7G,EAAIkH,UAAYg9C,EAAUh9C,UAAUnkB,GAAmBu0C,IACvDt3B,EAAImH,aAAe,SACnBnH,EAAI0G,YAAc0iC,EAAUxrC,MAC5BoC,EAAIiH,UAAYmiC,EAAUxrC,MAC1BoC,EAAIL,KAAOylD,EAAUhjD,OACrB8D,GAAWlG,EAAKopC,EAAUjjC,KAAMnyB,EAAGmV,EAAGi8D,GAExC,sBACE,MAAMhc,EAAY3/D,KAAKiI,QAAQ6L,MACzB6nE,EAAYp8C,GAAOogC,EAAUzpC,MAC7B0lD,EAAet8C,GAAUqgC,EAAUnN,SACzC,OAAOmN,EAAUnT,QAAUmvB,EAAUtlD,WAAaulD,EAAa1jE,OAAS,EAE1E,iBAAiB3N,EAAGmV,GAClB,IAAIpb,EAAGw3E,EAAQC,EACf,GAAI95D,GAAW1X,EAAGvK,KAAK4Z,KAAM5Z,KAAK6Z,QAC7BoI,GAAWvC,EAAG1f,KAAK07B,IAAK17B,KAAK27B,QAEhC,IADAogD,EAAK/7E,KAAKq5E,eACL/0E,EAAI,EAAGA,EAAIy3E,EAAG96E,SAAUqD,EAE3B,GADAw3E,EAASC,EAAGz3E,GACR2d,GAAW1X,EAAGuxE,EAAOliE,KAAMkiE,EAAOliE,KAAOkiE,EAAO7jE,QAC/CgK,GAAWvC,EAAGo8D,EAAOpgD,IAAKogD,EAAOpgD,IAAMogD,EAAO5jE,QACjD,OAAOlY,KAAKw5E,YAAYl1E,GAI9B,OAAO,KAET,YAAYO,GACV,MAAM83B,EAAO38B,KAAKiI,QAClB,IAAK+zE,GAAWn3E,EAAE0E,KAAMozB,GACtB,OAEF,MAAMs/C,EAAcj8E,KAAKk8E,iBAAiBr3E,EAAE0F,EAAG1F,EAAE6a,GACjD,GAAe,cAAX7a,EAAE0E,MAAmC,aAAX1E,EAAE0E,KAAqB,CACnD,MAAMyyB,EAAWh8B,KAAKs5E,aAChB6C,EAAWhD,GAAWn9C,EAAUigD,GAClCjgD,IAAamgD,GACf/0E,GAASu1B,EAAKy/C,QAAS,CAACv3E,EAAGm3B,EAAUh8B,MAAOA,MAE9CA,KAAKs5E,aAAe2C,EAChBA,IAAgBE,GAClB/0E,GAASu1B,EAAK3F,QAAS,CAACnyB,EAAGo3E,EAAaj8E,MAAOA,WAExCi8E,GACT70E,GAASu1B,EAAK1F,QAAS,CAACpyB,EAAGo3E,EAAaj8E,MAAOA,OAIrD,SAASg8E,GAAWzyE,EAAMozB,GACxB,QAAc,cAATpzB,GAAiC,aAATA,IAAyBozB,EAAK3F,UAAW2F,EAAKy/C,aAGvEz/C,EAAK1F,SAAqB,UAAT1tB,GAA6B,YAATA,GAK3C,IAAI8yE,GAAgB,CAClB16E,GAAI,SACJ26E,SAAU,GACV,MAAMzmD,EAAO0mD,EAAOt0E,GAClB,MAAM8hD,EAASl0B,EAAMk0B,OAAS,IAAI,GAAO,CAACxzB,IAAKV,EAAMU,IAAKtuB,UAAS4tB,UACnEm6B,GAAQ5Z,UAAUvgB,EAAOk0B,EAAQ9hD,GACjC+nD,GAAQyd,OAAO53C,EAAOk0B,IAExB,KAAKl0B,GACHm6B,GAAQgf,UAAUn5C,EAAOA,EAAMk0B,eACxBl0B,EAAMk0B,QAEf,aAAal0B,EAAO0mD,EAAOt0E,GACzB,MAAM8hD,EAASl0B,EAAMk0B,OACrBiG,GAAQ5Z,UAAUvgB,EAAOk0B,EAAQ9hD,GACjC8hD,EAAO9hD,QAAUA,GAEnB,YAAY4tB,GACV,MAAMk0B,EAASl0B,EAAMk0B,OACrBA,EAAO4vB,cACP5vB,EAAOyyB,kBAET,WAAW3mD,EAAOld,GACXA,EAAKu4D,QACRr7C,EAAMk0B,OAAO0yB,YAAY9jE,EAAKm7B,QAGlC5b,SAAU,CACRs0B,SAAS,EACTqB,SAAU,MACVt0C,MAAO,SACPg3C,UAAU,EACVr1C,SAAS,EACTkZ,OAAQ,IACR,QAAQvvB,EAAGmlD,EAAYD,GACrB,MAAMzoD,EAAQ0oD,EAAWruC,aACnB+gE,EAAK3yB,EAAOl0B,MACd6mD,EAAGx0B,iBAAiB5mD,IACtBo7E,EAAGzmC,KAAK30C,GACR0oD,EAAWjP,QAAS,IAEpB2hC,EAAGjnE,KAAKnU,GACR0oD,EAAWjP,QAAS,IAGxB/jB,QAAS,KACTolD,QAAS,KACTl+B,OAAQ,CACN/pB,MAAQoC,GAAQA,EAAIV,MAAM5tB,QAAQksB,MAClC6kD,SAAU,GACVxmB,QAAS,GACT,eAAe38B,GACb,MAAMH,EAAWG,EAAM9zB,KAAK2zB,UACrBwoB,QAAQ,cAAC+6B,EAAa,WAAE3+C,EAAU,UAAEmD,EAAS,MAAEtJ,IAAU0B,EAAMk0B,OAAO9hD,QAC7E,OAAO4tB,EAAM+hB,yBAAyB97B,IAAKqqB,IACzC,MAAM/P,EAAQ+P,EAAKoT,WAAWnP,SAAS6uC,EAAgB,OAAIxyD,GACrD2U,EAAckE,GAAUlJ,EAAMgF,aACpC,MAAO,CACLsB,KAAMhH,EAASyQ,EAAK7kC,OAAO09C,MAC3BxhB,UAAWpH,EAAMZ,gBACjBslD,UAAW3mD,EACX4mB,QAAS5U,EAAK6P,QACdk/B,QAAS9+C,EAAM+b,eACf+oC,SAAU9kD,EAAMgc,WAChBwxB,eAAgBxtC,EAAMic,iBACtBkiC,SAAUn+C,EAAMkc,gBAChBpV,WAAY9B,EAAYnjB,MAAQmjB,EAAYljB,QAAU,EACtD+kB,YAAa7G,EAAMX,YACnB6E,WAAYA,GAAclE,EAAMkE,WAChCC,SAAUnE,EAAMmE,SAChBkD,UAAWA,GAAarH,EAAMqH,UAC9B00C,aAAc,EACdx2D,aAAcwqB,EAAK7kC,QAEpBtB,QAGP8T,MAAO,CACLqgB,MAAQoC,GAAQA,EAAIV,MAAM5tB,QAAQksB,MAClCq4B,SAAS,EACTqB,SAAU,SACVnxB,KAAM,KAGVqI,YAAa,CACX5M,YAAcr4B,IAAUA,EAAKs4B,WAAW,MACxC8lB,OAAQ,CACN/lB,YAAcr4B,IAAU,CAAC,iBAAkB,SAAU,QAAQyjC,SAASzjC,MAK5E,MAAM,WAAc,GAClB,YAAYo2C,GACVqO,QACAvkD,KAAK61B,MAAQqgB,EAAOrgB,MACpB71B,KAAKiI,QAAUiuC,EAAOjuC,QACtBjI,KAAKu2B,IAAM2f,EAAO3f,IAClBv2B,KAAK28E,cAAWl2D,EAChBzmB,KAAK07B,SAAMjV,EACXzmB,KAAK27B,YAASlV,EACdzmB,KAAK4Z,UAAO6M,EACZzmB,KAAK6Z,WAAQ4M,EACbzmB,KAAKiY,WAAQwO,EACbzmB,KAAKkY,YAASuO,EACdzmB,KAAK6tD,cAAWpnC,EAChBzmB,KAAKo0B,YAAS3N,EACdzmB,KAAKuwD,cAAW9pC,EAElB,OAAO2W,EAAUwO,GACf,MAAMjP,EAAO38B,KAAKiI,QAGlB,GAFAjI,KAAK4Z,KAAO,EACZ5Z,KAAK07B,IAAM,GACNiB,EAAK6vB,QAER,YADAxsD,KAAKiY,MAAQjY,KAAKkY,OAASlY,KAAK6Z,MAAQ7Z,KAAK27B,OAAS,GAGxD37B,KAAKiY,MAAQjY,KAAK6Z,MAAQujB,EAC1Bp9B,KAAKkY,OAASlY,KAAK27B,OAASiQ,EAC5B,MAAMm3B,EAAY5oD,GAAQwiB,EAAKD,MAAQC,EAAKD,KAAKz7B,OAAS,EAC1DjB,KAAK28E,SAAWr9C,GAAU3C,EAAK61B,SAC/B,MAAMoqB,EAAW7Z,EAAYxjC,GAAO5C,EAAKzG,MAAMG,WAAar2B,KAAK28E,SAASzkE,OACtElY,KAAKujD,eACPvjD,KAAKkY,OAAS0kE,EAEd58E,KAAKiY,MAAQ2kE,EAGjB,eACE,MAAMz/D,EAAMnd,KAAKiI,QAAQ4lD,SACzB,MAAe,QAAR1wC,GAAyB,WAARA,EAE1B,UAAUwpC,GACR,MAAM,IAACjrB,EAAG,KAAE9hB,EAAI,OAAE+hB,EAAM,MAAE9hB,EAAK,QAAE5R,GAAWjI,KACtCuZ,EAAQtR,EAAQsR,MACtB,IACI6jB,EAAUs+B,EAAQC,EADlBphC,EAAW,EAkBf,OAhBIv6B,KAAKujD,gBACPmY,EAASliD,GAAeD,EAAOK,EAAMC,GACrC8hD,EAASjgC,EAAMirB,EACfvpB,EAAWvjB,EAAQD,IAEM,SAArB3R,EAAQ4lD,UACV6N,EAAS9hD,EAAO+sC,EAChBgV,EAASniD,GAAeD,EAAOoiB,EAAQD,GACvCnB,GAAiB,GAANvc,KAEX09C,EAAS7hD,EAAQ8sC,EACjBgV,EAASniD,GAAeD,EAAOmiB,EAAKC,GACpCpB,EAAgB,GAALvc,IAEbof,EAAWzB,EAASD,GAEf,CAACggC,SAAQC,SAAQv+B,WAAU7C,YAEpC,OACE,MAAMhE,EAAMv2B,KAAKu2B,IACXoG,EAAO38B,KAAKiI,QAClB,IAAK00B,EAAK6vB,QACR,OAEF,MAAMqwB,EAAWt9C,GAAO5C,EAAKzG,MACvBG,EAAawmD,EAASxmD,WACtBswB,EAAStwB,EAAa,EAAIr2B,KAAK28E,SAASjhD,KACxC,OAACggC,EAAM,OAAEC,EAAM,SAAEv+B,EAAQ,SAAE7C,GAAYv6B,KAAK88E,UAAUn2B,GAC5DlqB,GAAWlG,EAAKoG,EAAKD,KAAM,EAAG,EAAGmgD,EAAU,CACzC1oD,MAAOwI,EAAKxI,MACZiJ,WACA7C,WACAkD,UAAWnkB,GAAmBqjB,EAAKpjB,OACnCmkB,aAAc,SACdH,YAAa,CAACm+B,EAAQC,MAI5B,SAASohB,GAAYlnD,EAAO8pC,GAC1B,MAAM7rD,EAAQ,IAAI,GAAM,CACtByiB,IAAKV,EAAMU,IACXtuB,QAAS03D,EACT9pC,UAEFm6B,GAAQ5Z,UAAUvgB,EAAO/hB,EAAO6rD,GAChC3P,GAAQyd,OAAO53C,EAAO/hB,GACtB+hB,EAAMmnD,WAAalpE,EAErB,IAAImpE,GAAe,CACjBt7E,GAAI,QACJ26E,SAAU,GACV,MAAMzmD,EAAO0mD,EAAOt0E,GAClB80E,GAAYlnD,EAAO5tB,IAErB,KAAK4tB,GACH,MAAMmnD,EAAannD,EAAMmnD,WACzBhtB,GAAQgf,UAAUn5C,EAAOmnD,UAClBnnD,EAAMmnD,YAEf,aAAannD,EAAO0mD,EAAOt0E,GACzB,MAAM6L,EAAQ+hB,EAAMmnD,WACpBhtB,GAAQ5Z,UAAUvgB,EAAO/hB,EAAO7L,GAChC6L,EAAM7L,QAAUA,GAElBiwB,SAAU,CACR3e,MAAO,SACPizC,SAAS,EACTt2B,KAAM,CACJ9B,OAAQ,QAEVm8B,UAAU,EACViC,QAAS,GACT3E,SAAU,MACVnxB,KAAM,GACNtI,OAAQ,KAEV6iC,cAAe,CACb9iC,MAAO,SAET4Q,YAAa,CACX5M,aAAa,EACbE,YAAY,IAIJ,IAAI6kD,QA2ChB,MAAMC,GAAc,CAClB,QAAQr7C,GACN,IAAKA,EAAM7gC,OACT,OAAO,EAET,IAAIqD,EAAG6W,EACH5Q,EAAI,EACJmV,EAAI,EACJ0mB,EAAQ,EACZ,IAAK9hC,EAAI,EAAG6W,EAAM2mB,EAAM7gC,OAAQqD,EAAI6W,IAAO7W,EAAG,CAC5C,MAAM+lC,EAAKvI,EAAMx9B,GAAGwJ,QACpB,GAAIu8B,GAAMA,EAAG+yC,WAAY,CACvB,MAAMjgE,EAAMktB,EAAGgzC,kBACf9yE,GAAK4S,EAAI5S,EACTmV,GAAKvC,EAAIuC,IACP0mB,GAGN,MAAO,CACL77B,EAAGA,EAAI67B,EACP1mB,EAAGA,EAAI0mB,IAGX,QAAQtE,EAAOw7C,GACb,IAAKx7C,EAAM7gC,OACT,OAAO,EAET,IAGIqD,EAAG6W,EAAKoiE,EAHRhzE,EAAI+yE,EAAc/yE,EAClBmV,EAAI49D,EAAc59D,EAClBovC,EAActlD,OAAO4U,kBAEzB,IAAK9Z,EAAI,EAAG6W,EAAM2mB,EAAM7gC,OAAQqD,EAAI6W,IAAO7W,EAAG,CAC5C,MAAM+lC,EAAKvI,EAAMx9B,GAAGwJ,QACpB,GAAIu8B,GAAMA,EAAG+yC,WAAY,CACvB,MAAMh4B,EAAS/a,EAAG0kB,iBACZv4C,EAAI2K,GAAsBm8D,EAAel4B,GAC3C5uC,EAAIs4C,IACNA,EAAct4C,EACd+mE,EAAiBlzC,IAIvB,GAAIkzC,EAAgB,CAClB,MAAMC,EAAKD,EAAeF,kBAC1B9yE,EAAIizE,EAAGjzE,EACPmV,EAAI89D,EAAG99D,EAET,MAAO,CACLnV,IACAmV,OAIN,SAAS+9D,GAAaj8C,EAAMk8C,GAQ1B,OAPIA,IACEvjE,GAAQujE,GACV38E,MAAM6X,UAAU9L,KAAKmM,MAAMuoB,EAAMk8C,GAEjCl8C,EAAK10B,KAAK4wE,IAGPl8C,EAET,SAASm8C,GAActgE,GACrB,OAAoB,kBAARA,GAAoBA,aAAerR,SAAWqR,EAAIjB,QAAQ,OAAS,EACtEiB,EAAI4X,MAAM,MAEZ5X,EAET,SAASugE,GAAkB/nD,EAAOz0B,GAChC,MAAM,QAAC0M,EAAO,aAAE6N,EAAY,MAAEra,GAASF,EACjCm4C,EAAa1jB,EAAMknB,eAAephC,GAAc49B,YAChD,MAACyF,EAAK,MAAEh+C,GAASu4C,EAAWskC,iBAAiBv8E,GACnD,MAAO,CACLu0B,QACAmpB,QACAzY,OAAQgT,EAAWwF,UAAUz9C,GAC7Bg5C,IAAKzkB,EAAM9zB,KAAK2zB,SAAS/Z,GAAc5Z,KAAKT,GAC5C8oD,eAAgBppD,EAChBm5C,QAASZ,EAAW0C,aACpB5B,UAAW/4C,EACXqa,eACA7N,WAGJ,SAASgwE,GAAe/0E,EAASd,GAC/B,MAAMsuB,EAAMxtB,EAAQ8sB,MAAMU,KACpB,KAACwnD,EAAI,OAAEC,EAAM,MAAElqE,GAAS/K,GACxB,SAACiwE,EAAQ,UAAED,GAAa9wE,EACxBg2E,EAAW1+C,GAAOt3B,EAAQg2E,UAC1BtC,EAAYp8C,GAAOt3B,EAAQ0zE,WAC3BuC,EAAa3+C,GAAOt3B,EAAQi2E,YAC5BC,EAAiBrqE,EAAM7S,OACvBm9E,EAAkBJ,EAAO/8E,OACzBo9E,EAAoBN,EAAK98E,OACzBuxD,EAAUlzB,GAAUr3B,EAAQuqD,SAClC,IAAIt6C,EAASs6C,EAAQt6C,OACjBD,EAAQ,EACRqmE,EAAqBP,EAAK9pC,OAAO,CAAC7N,EAAOm4C,IAAan4C,EAAQm4C,EAASC,OAAOv9E,OAASs9E,EAAS3hD,MAAM37B,OAASs9E,EAASE,MAAMx9E,OAAQ,GAO1I,GANAq9E,GAAsBv1E,EAAQ21E,WAAWz9E,OAAS8H,EAAQ41E,UAAU19E,OAChEk9E,IACFjmE,GAAUimE,EAAiBxC,EAAUtlD,YACnC8nD,EAAiB,GAAKl2E,EAAQ22E,aAC/B32E,EAAQ42E,mBAEPP,EAAoB,CACtB,MAAMQ,EAAiB72E,EAAQ82E,cAAgBrnE,KAAKyI,IAAI44D,EAAWkF,EAAS5nD,YAAc4nD,EAAS5nD,WACnGne,GAAUmmE,EAAoBS,GAC5BR,EAAqBD,GAAqBJ,EAAS5nD,YACnDioD,EAAqB,GAAKr2E,EAAQ+2E,YAElCZ,IACFlmE,GAAUjQ,EAAQg3E,gBACjBb,EAAkBF,EAAW7nD,YAC5B+nD,EAAkB,GAAKn2E,EAAQi3E,eAEnC,IAAIC,EAAe,EACnB,MAAMC,EAAe,SAASriD,GAC5B9kB,EAAQP,KAAKyI,IAAIlI,EAAOse,EAAIsC,YAAYkE,GAAM9kB,MAAQknE,IAkBxD,OAhBA5oD,EAAI2C,OACJ3C,EAAIL,KAAOylD,EAAUhjD,OACrB3d,GAAKjS,EAAQ+K,MAAOsrE,GACpB7oD,EAAIL,KAAO+nD,EAAStlD,OACpB3d,GAAKjS,EAAQ21E,WAAWp9B,OAAOv4C,EAAQ41E,WAAYS,GACnDD,EAAel3E,EAAQ82E,cAAiB/F,EAAW,EAAI/wE,EAAQkpD,WAAc,EAC7En2C,GAAK+iE,EAAOQ,IACVvjE,GAAKujE,EAASC,OAAQY,GACtBpkE,GAAKujE,EAAS3hD,MAAOwiD,GACrBpkE,GAAKujE,EAASE,MAAOW,KAEvBD,EAAe,EACf5oD,EAAIL,KAAOgoD,EAAWvlD,OACtB3d,GAAKjS,EAAQi1E,OAAQoB,GACrB7oD,EAAI+C,UACJrhB,GAASu6C,EAAQv6C,MACV,CAACA,QAAOC,UAEjB,SAASmnE,GAAgBxpD,EAAOhY,GAC9B,MAAM,EAAC6B,EAAC,OAAExH,GAAU2F,EACpB,OAAI6B,EAAIxH,EAAS,EACR,MACEwH,EAAKmW,EAAM3d,OAASA,EAAS,EAC/B,SAEF,SAET,SAASonE,GAAoBC,EAAQ1pD,EAAO5tB,EAAS4V,GACnD,MAAM,EAACtT,EAAC,MAAE0N,GAAS4F,EACb2hE,EAAQv3E,EAAQw3E,UAAYx3E,EAAQy3E,aAC1C,MAAe,SAAXH,GAAqBh1E,EAAI0N,EAAQunE,EAAQ3pD,EAAM5d,QAGpC,UAAXsnE,GAAsBh1E,EAAI0N,EAAQunE,EAAQ,QAA9C,GAIF,SAASG,GAAgB9pD,EAAO5tB,EAAS4V,EAAM+hE,GAC7C,MAAM,EAACr1E,EAAC,MAAE0N,GAAS4F,GACZ5F,MAAO4nE,EAAYzgC,WAAW,KAACxlC,EAAI,MAAEC,IAAUgc,EACtD,IAAI0pD,EAAS,SAWb,MAVe,WAAXK,EACFL,EAASh1E,IAAMqP,EAAOC,GAAS,EAAI,OAAS,QACnCtP,GAAK0N,EAAQ,EACtBsnE,EAAS,OACAh1E,GAAKs1E,EAAa5nE,EAAQ,IACnCsnE,EAAS,SAEPD,GAAoBC,EAAQ1pD,EAAO5tB,EAAS4V,KAC9C0hE,EAAS,UAEJA,EAET,SAASO,GAAmBjqD,EAAO5tB,EAAS4V,GAC1C,MAAM+hE,EAAS/hE,EAAK+hE,QAAU33E,EAAQ23E,QAAUP,GAAgBxpD,EAAOhY,GACvE,MAAO,CACL0hE,OAAQ1hE,EAAK0hE,QAAUt3E,EAAQs3E,QAAUI,GAAgB9pD,EAAO5tB,EAAS4V,EAAM+hE,GAC/EA,UAGJ,SAASG,GAAOliE,EAAM0hE,GACpB,IAAI,EAACh1E,EAAC,MAAE0N,GAAS4F,EAMjB,MALe,UAAX0hE,EACFh1E,GAAK0N,EACe,WAAXsnE,IACTh1E,GAAM0N,EAAQ,GAET1N,EAET,SAASy1E,GAAOniE,EAAM+hE,EAAQK,GAC5B,IAAI,EAACvgE,EAAC,OAAExH,GAAU2F,EAQlB,MAPe,QAAX+hE,EACFlgE,GAAKugE,EAELvgE,GADoB,WAAXkgE,EACJ1nE,EAAS+nE,EAER/nE,EAAS,EAEVwH,EAET,SAASwgE,GAAmBj4E,EAAS4V,EAAMsiE,EAAWtqD,GACpD,MAAM,UAAC4pD,EAAS,aAAEC,EAAY,aAAErlD,GAAgBpyB,GAC1C,OAACs3E,EAAM,OAAEK,GAAUO,EACnBF,EAAiBR,EAAYC,GAC7B,QAACrhD,EAAO,SAAEG,EAAQ,WAAEF,EAAU,YAAEC,GAAec,GAAchF,GACnE,IAAI9vB,EAAIw1E,GAAOliE,EAAM0hE,GACrB,MAAM7/D,EAAIsgE,GAAOniE,EAAM+hE,EAAQK,GAY/B,MAXe,WAAXL,EACa,SAAXL,EACFh1E,GAAK01E,EACe,UAAXV,IACTh1E,GAAK01E,GAEa,SAAXV,EACTh1E,GAAKmN,KAAKyI,IAAIke,EAASC,GAAcmhD,EACjB,UAAXF,IACTh1E,GAAKmN,KAAKyI,IAAIqe,EAAUD,GAAekhD,GAElC,CACLl1E,EAAGwX,GAAYxX,EAAG,EAAGsrB,EAAM5d,MAAQ4F,EAAK5F,OACxCyH,EAAGqC,GAAYrC,EAAG,EAAGmW,EAAM3d,OAAS2F,EAAK3F,SAG7C,SAASkoE,GAAYr3E,EAASwQ,EAAOtR,GACnC,MAAMuqD,EAAUlzB,GAAUr3B,EAAQuqD,SAClC,MAAiB,WAAVj5C,EACHxQ,EAAQwB,EAAIxB,EAAQkP,MAAQ,EAClB,UAAVsB,EACExQ,EAAQwB,EAAIxB,EAAQkP,MAAQu6C,EAAQ34C,MACpC9Q,EAAQwB,EAAIioD,EAAQ54C,KAE5B,SAASymE,GAAwBj5E,GAC/B,OAAOq2E,GAAa,GAAIE,GAAcv2E,IAExC,SAASk5E,GAAqB56C,EAAQ38B,EAASw3E,GAC7C,OAAOngD,GAAcsF,EAAQ,CAC3B38B,UACAw3E,eACAh3E,KAAM,YAGV,SAASi3E,GAAkB5tC,EAAWhd,GACpC,MAAMkN,EAAWlN,GAAWA,EAAQukB,SAAWvkB,EAAQukB,QAAQpxC,SAAW6sB,EAAQukB,QAAQpxC,QAAQ6pC,UAClG,OAAO9P,EAAW8P,EAAU9P,SAASA,GAAY8P,EAEnD,MAAM,WAAgB,GACpB,YAAYsD,GACVqO,QACAvkD,KAAKygF,QAAU,EACfzgF,KAAKuzC,QAAU,GACfvzC,KAAK0gF,oBAAiBj6D,EACtBzmB,KAAK2gF,WAAQl6D,EACbzmB,KAAK4gF,uBAAoBn6D,EACzBzmB,KAAK6gF,cAAgB,GACrB7gF,KAAK42C,iBAAcnwB,EACnBzmB,KAAK47C,cAAWn1B,EAChBzmB,KAAK61B,MAAQqgB,EAAOrgB,OAASqgB,EAAO3E,OACpCvxC,KAAKuxC,OAASvxC,KAAK61B,MACnB71B,KAAKiI,QAAUiuC,EAAOjuC,QACtBjI,KAAK8gF,gBAAar6D,EAClBzmB,KAAK8T,WAAQ2S,EACbzmB,KAAK0+E,gBAAaj4D,EAClBzmB,KAAK+9E,UAAOt3D,EACZzmB,KAAK2+E,eAAYl4D,EACjBzmB,KAAKg+E,YAASv3D,EACdzmB,KAAKu/E,YAAS94D,EACdzmB,KAAK4/E,YAASn5D,EACdzmB,KAAKuK,OAAIkc,EACTzmB,KAAK0f,OAAI+G,EACTzmB,KAAKkY,YAASuO,EACdzmB,KAAKiY,WAAQwO,EACbzmB,KAAK+gF,YAASt6D,EACdzmB,KAAKghF,YAASv6D,EACdzmB,KAAKihF,iBAAcx6D,EACnBzmB,KAAKkhF,sBAAmBz6D,EACxBzmB,KAAKmhF,qBAAkB16D,EAEzB,WAAWxe,GACTjI,KAAKiI,QAAUA,EACfjI,KAAK4gF,uBAAoBn6D,EACzBzmB,KAAK47C,cAAWn1B,EAElB,qBACE,MAAMk0B,EAAS36C,KAAK4gF,kBACpB,GAAIjmC,EACF,OAAOA,EAET,MAAM9kB,EAAQ71B,KAAK61B,MACb5tB,EAAUjI,KAAKiI,QAAQi8B,WAAWlkC,KAAK+5B,cACvC4C,EAAO10B,EAAQmwD,SAAWviC,EAAM5tB,QAAQstB,WAAattB,EAAQ8tC,WAC7DA,EAAa,IAAI,GAAW/1C,KAAK61B,MAAO8G,GAI9C,OAHIA,EAAK+F,aACP1iC,KAAK4gF,kBAAoBn/E,OAAOC,OAAOq0C,IAElCA,EAET,aACE,OAAO/1C,KAAK47C,WACZ57C,KAAK47C,SAAW0kC,GAAqBtgF,KAAK61B,MAAMkE,aAAc/5B,KAAMA,KAAK6gF,gBAE3E,SAASjrD,EAAS3tB,GAChB,MAAM,UAAC2qC,GAAa3qC,EACdm5E,EAAcxuC,EAAUwuC,YAAYnoE,MAAMjZ,KAAM,CAAC41B,IACjD9hB,EAAQ8+B,EAAU9+B,MAAMmF,MAAMjZ,KAAM,CAAC41B,IACrCyrD,EAAazuC,EAAUyuC,WAAWpoE,MAAMjZ,KAAM,CAAC41B,IACrD,IAAIgH,EAAQ,GAIZ,OAHAA,EAAQ6gD,GAAa7gD,EAAO+gD,GAAcyD,IAC1CxkD,EAAQ6gD,GAAa7gD,EAAO+gD,GAAc7pE,IAC1C8oB,EAAQ6gD,GAAa7gD,EAAO+gD,GAAc0D,IACnCzkD,EAET,cAAc2jD,EAAct4E,GAC1B,OAAOo4E,GAAwBp4E,EAAQ2qC,UAAU8rC,WAAWzlE,MAAMjZ,KAAM,CAACugF,KAE3E,QAAQA,EAAct4E,GACpB,MAAM,UAAC2qC,GAAa3qC,EACdq5E,EAAY,GAalB,OAZAtmE,GAAKulE,EAAe3qD,IAClB,MAAM2oD,EAAW,CACfC,OAAQ,GACR5hD,MAAO,GACP6hD,MAAO,IAEH8C,EAASf,GAAkB5tC,EAAWhd,GAC5C6nD,GAAac,EAASC,OAAQb,GAAc4D,EAAOC,YAAY1oE,KAAK9Y,KAAM41B,KAC1E6nD,GAAac,EAAS3hD,MAAO2kD,EAAOviC,MAAMlmC,KAAK9Y,KAAM41B,IACrD6nD,GAAac,EAASE,MAAOd,GAAc4D,EAAOE,WAAW3oE,KAAK9Y,KAAM41B,KACxE0rD,EAAUx0E,KAAKyxE,KAEV+C,EAET,aAAaf,EAAct4E,GACzB,OAAOo4E,GAAwBp4E,EAAQ2qC,UAAU+rC,UAAU1lE,MAAMjZ,KAAM,CAACugF,KAE1E,UAAUA,EAAct4E,GACtB,MAAM,UAAC2qC,GAAa3qC,EACdy5E,EAAe9uC,EAAU8uC,aAAazoE,MAAMjZ,KAAM,CAACugF,IACnDvC,EAASprC,EAAUorC,OAAO/kE,MAAMjZ,KAAM,CAACugF,IACvCoB,EAAc/uC,EAAU+uC,YAAY1oE,MAAMjZ,KAAM,CAACugF,IACvD,IAAI3jD,EAAQ,GAIZ,OAHAA,EAAQ6gD,GAAa7gD,EAAO+gD,GAAc+D,IAC1C9kD,EAAQ6gD,GAAa7gD,EAAO+gD,GAAcK,IAC1CphD,EAAQ6gD,GAAa7gD,EAAO+gD,GAAcgE,IACnC/kD,EAET,aAAa30B,GACX,MAAMwC,EAASzK,KAAKuzC,QACdxxC,EAAO/B,KAAK61B,MAAM9zB,KAClBk/E,EAAc,GACdC,EAAmB,GACnBC,EAAkB,GACxB,IACI78E,EAAG6W,EADHolE,EAAe,GAEnB,IAAKj8E,EAAI,EAAG6W,EAAM1Q,EAAOxJ,OAAQqD,EAAI6W,IAAO7W,EAC1Ci8E,EAAazzE,KAAK8wE,GAAkB59E,KAAK61B,MAAOprB,EAAOnG,KAkBzD,OAhBI2D,EAAQhE,SACVs8E,EAAeA,EAAat8E,OAAO,CAAC6J,EAASxM,EAAO0e,IAAU/X,EAAQhE,OAAO6J,EAASxM,EAAO0e,EAAOje,KAElGkG,EAAQ25E,WACVrB,EAAeA,EAAajhE,KAAK,CAAC3B,EAAGC,IAAM3V,EAAQ25E,SAASjkE,EAAGC,EAAG7b,KAEpEiZ,GAAKulE,EAAe3qD,IAClB,MAAM2rD,EAASf,GAAkBv4E,EAAQ2qC,UAAWhd,GACpDqrD,EAAYn0E,KAAKy0E,EAAOM,WAAW/oE,KAAK9Y,KAAM41B,IAC9CsrD,EAAiBp0E,KAAKy0E,EAAOO,gBAAgBhpE,KAAK9Y,KAAM41B,IACxDurD,EAAgBr0E,KAAKy0E,EAAOQ,eAAejpE,KAAK9Y,KAAM41B,MAExD51B,KAAKihF,YAAcA,EACnBjhF,KAAKkhF,iBAAmBA,EACxBlhF,KAAKmhF,gBAAkBA,EACvBnhF,KAAK8gF,WAAaP,EACXA,EAET,OAAO90B,EAASylB,GACd,MAAMjpE,EAAUjI,KAAKiI,QAAQi8B,WAAWlkC,KAAK+5B,cACvCtvB,EAASzK,KAAKuzC,QACpB,IAAIsC,EACA0qC,EAAe,GACnB,GAAK91E,EAAOxJ,OAML,CACL,MAAM4sD,EAAWsvB,GAAYl1E,EAAQ4lD,UAAU/0C,KAAK9Y,KAAMyK,EAAQzK,KAAK0gF,gBACvEH,EAAevgF,KAAKgiF,aAAa/5E,GACjCjI,KAAK8T,MAAQ9T,KAAKiiF,SAAS1B,EAAct4E,GACzCjI,KAAK0+E,WAAa1+E,KAAKkiF,cAAc3B,EAAct4E,GACnDjI,KAAK+9E,KAAO/9E,KAAKmiF,QAAQ5B,EAAct4E,GACvCjI,KAAK2+E,UAAY3+E,KAAKoiF,aAAa7B,EAAct4E,GACjDjI,KAAKg+E,OAASh+E,KAAKqiF,UAAU9B,EAAct4E,GAC3C,MAAM4V,EAAO7d,KAAK2gF,MAAQ7C,GAAe99E,KAAMiI,GACzCq6E,EAAkB7gF,OAAOoyB,OAAO,GAAIg6B,EAAUhwC,GAC9CsiE,EAAYL,GAAmB9/E,KAAK61B,MAAO5tB,EAASq6E,GACpDC,EAAkBrC,GAAmBj4E,EAASq6E,EAAiBnC,EAAWngF,KAAK61B,OACrF71B,KAAKu/E,OAASY,EAAUZ,OACxBv/E,KAAK4/E,OAASO,EAAUP,OACxB/pC,EAAa,CACX4qC,QAAS,EACTl2E,EAAGg4E,EAAgBh4E,EACnBmV,EAAG6iE,EAAgB7iE,EACnBzH,MAAO4F,EAAK5F,MACZC,OAAQ2F,EAAK3F,OACb6oE,OAAQlzB,EAAStjD,EACjBy2E,OAAQnzB,EAASnuC,QA1BE,IAAjB1f,KAAKygF,UACP5qC,EAAa,CACX4qC,QAAS,IA2BfzgF,KAAK6gF,cAAgBN,EACrBvgF,KAAK47C,cAAWn1B,EACZovB,GACF71C,KAAKkgD,qBAAqBnJ,OAAO/2C,KAAM61C,GAErC4V,GAAWxjD,EAAQu6E,UACrBv6E,EAAQu6E,SAAS1pE,KAAK9Y,KAAM,CAAC61B,MAAO71B,KAAK61B,MAAO9sB,QAAS/I,KAAMkxE,WAGnE,UAAUuR,EAAclsD,EAAK1Y,EAAM5V,GACjC,MAAMy6E,EAAgB1iF,KAAK2iF,iBAAiBF,EAAc5kE,EAAM5V,GAChEsuB,EAAIyE,OAAO0nD,EAAcvgB,GAAIugB,EAActgB,IAC3C7rC,EAAIyE,OAAO0nD,EAAcrgB,GAAIqgB,EAAcpgB,IAC3C/rC,EAAIyE,OAAO0nD,EAAcE,GAAIF,EAAcG,IAE7C,iBAAiBJ,EAAc5kE,EAAM5V,GACnC,MAAM,OAACs3E,EAAM,OAAEK,GAAU5/E,MACnB,UAACy/E,EAAS,aAAEplD,GAAgBpyB,GAC5B,QAACo2B,EAAO,SAAEG,EAAQ,WAAEF,EAAU,YAAEC,GAAec,GAAchF,IAC5D9vB,EAAGu4E,EAAKpjE,EAAGqjE,GAAON,GACnB,MAACxqE,EAAK,OAAEC,GAAU2F,EACxB,IAAIskD,EAAIE,EAAIugB,EAAIxgB,EAAIE,EAAIugB,EAoCxB,MAnCe,WAAXjD,GACFtd,EAAKygB,EAAO7qE,EAAS,EACN,SAAXqnE,GACFpd,EAAK2gB,EACLzgB,EAAKF,EAAKsd,EACVrd,EAAKE,EAAKmd,EACVoD,EAAKvgB,EAAKmd,IAEVtd,EAAK2gB,EAAM7qE,EACXoqD,EAAKF,EAAKsd,EACVrd,EAAKE,EAAKmd,EACVoD,EAAKvgB,EAAKmd,GAEZmD,EAAKzgB,IAGHE,EADa,SAAXkd,EACGuD,EAAMprE,KAAKyI,IAAIke,EAASC,GAAc,EACvB,UAAXihD,EACJuD,EAAM7qE,EAAQP,KAAKyI,IAAIqe,EAAUD,GAAekhD,EAEhDz/E,KAAK+gF,OAEG,QAAXnB,GACFxd,EAAK2gB,EACLzgB,EAAKF,EAAKqd,EACVtd,EAAKE,EAAKod,EACVmD,EAAKvgB,EAAKod,IAEVrd,EAAK2gB,EAAM7qE,EACXoqD,EAAKF,EAAKqd,EACVtd,EAAKE,EAAKod,EACVmD,EAAKvgB,EAAKod,GAEZoD,EAAKzgB,GAEA,CAACD,KAAIE,KAAIugB,KAAIxgB,KAAIE,KAAIugB,MAE9B,UAAUh6C,EAAItS,EAAKtuB,GACjB,MAAM6L,EAAQ9T,KAAK8T,MACb7S,EAAS6S,EAAM7S,OACrB,IAAI06E,EAAWiD,EAAct6E,EAC7B,GAAIrD,EAAQ,CACV,MAAMw5E,EAAY5rC,GAAc5mC,EAAQ6R,IAAK9Z,KAAKuK,EAAGvK,KAAKiY,OAQ1D,IAPA4wB,EAAGt+B,EAAI61E,GAAYpgF,KAAMiI,EAAQuzD,WAAYvzD,GAC7CsuB,EAAIkH,UAAYg9C,EAAUh9C,UAAUx1B,EAAQuzD,YAC5CjlC,EAAImH,aAAe,SACnBi+C,EAAYp8C,GAAOt3B,EAAQ0zE,WAC3BiD,EAAe32E,EAAQ22E,aACvBroD,EAAIiH,UAAYv1B,EAAQ+6E,WACxBzsD,EAAIL,KAAOylD,EAAUhjD,OAChBr0B,EAAI,EAAGA,EAAIrD,IAAUqD,EACxBiyB,EAAI8G,SAASvpB,EAAMxP,GAAIm2E,EAAUlwE,EAAEs+B,EAAGt+B,GAAIs+B,EAAGnpB,EAAIi8D,EAAUtlD,WAAa,GACxEwS,EAAGnpB,GAAKi8D,EAAUtlD,WAAauoD,EAC3Bt6E,EAAI,IAAMrD,IACZ4nC,EAAGnpB,GAAKzX,EAAQ42E,kBAAoBD,IAK5C,cAAcroD,EAAKsS,EAAIvkC,EAAGm2E,EAAWxyE,GACnC,MAAMg5E,EAAcjhF,KAAKihF,YAAY38E,GAC/Bw9E,EAAkB9hF,KAAKkhF,iBAAiB58E,IACxC,UAACy0E,EAAS,SAAEC,EAAQ,WAAE7nB,GAAclpD,EACpCg2E,EAAW1+C,GAAOt3B,EAAQg2E,UAC1BgF,EAAS7C,GAAYpgF,KAAM,OAAQiI,GACnCi7E,EAAYzI,EAAUlwE,EAAE04E,GACxBE,EAAUpK,EAAYkF,EAAS5nD,YAAc4nD,EAAS5nD,WAAa0iD,GAAa,EAAI,EACpFqK,EAASv6C,EAAGnpB,EAAIyjE,EACtB,GAAIl7E,EAAQgxE,cAAe,CACzB,MAAMkC,EAAc,CAClB3gD,OAAQ9iB,KAAKwI,IAAI84D,EAAUD,GAAa,EACxCz+C,WAAYwnD,EAAgBxnD,WAC5BC,SAAUunD,EAAgBvnD,SAC1Ba,YAAa,GAETkuB,EAAUmxB,EAAUE,WAAWuI,EAAWlK,GAAYA,EAAW,EACjEzvB,EAAU65B,EAASrK,EAAY,EACrCxiD,EAAI0G,YAAch1B,EAAQo7E,mBAC1B9sD,EAAIiH,UAAYv1B,EAAQo7E,mBACxBnpD,GAAU3D,EAAK4kD,EAAa7xB,EAASC,GACrChzB,EAAI0G,YAAcgkD,EAAYxrD,YAC9Bc,EAAIiH,UAAYyjD,EAAYzrD,gBAC5B0E,GAAU3D,EAAK4kD,EAAa7xB,EAASC,OAChC,CACLhzB,EAAI2G,UAAY+jD,EAAY7lD,aAAe,EAC3C7E,EAAI0G,YAAcgkD,EAAYxrD,YAC9Bc,EAAIotC,YAAYsd,EAAY7uC,YAAc,IAC1C7b,EAAIqtC,eAAiBqd,EAAY5uC,kBAAoB,EACrD,MAAMixC,EAAS7I,EAAUE,WAAWuI,EAAWlK,EAAW7nB,GACpDoyB,EAAS9I,EAAUE,WAAWF,EAAUY,MAAM6H,EAAW,GAAIlK,EAAW7nB,EAAa,GACrFghB,EAAe9yC,GAAc4hD,EAAY9O,cAC3C1wE,OAAO2zB,OAAO+8C,GAActL,KAAKxiD,GAAW,IAANA,IACxCkS,EAAIqE,YACJrE,EAAIiH,UAAYv1B,EAAQo7E,mBACxBjlD,GAAmB7H,EAAK,CACtBhsB,EAAG+4E,EACH5jE,EAAG0jE,EACHt8D,EAAGkyD,EACHx2E,EAAGu2E,EACHv+C,OAAQ23C,IAEV57C,EAAI4E,OACJ5E,EAAI8E,SACJ9E,EAAIiH,UAAYyjD,EAAYzrD,gBAC5Be,EAAIqE,YACJwD,GAAmB7H,EAAK,CACtBhsB,EAAGg5E,EACH7jE,EAAG0jE,EAAS,EACZt8D,EAAGkyD,EAAW,EACdx2E,EAAGu2E,EAAY,EACfv+C,OAAQ23C,IAEV57C,EAAI4E,SAEJ5E,EAAIiH,UAAYv1B,EAAQo7E,mBACxB9sD,EAAIgtC,SAAS+f,EAAQF,EAAQpK,EAAUD,GACvCxiD,EAAIitD,WAAWF,EAAQF,EAAQpK,EAAUD,GACzCxiD,EAAIiH,UAAYyjD,EAAYzrD,gBAC5Be,EAAIgtC,SAASggB,EAAQH,EAAS,EAAGpK,EAAW,EAAGD,EAAY,IAG/DxiD,EAAIiH,UAAYx9B,KAAKmhF,gBAAgB78E,GAEvC,SAASukC,EAAItS,EAAKtuB,GAChB,MAAM,KAAC81E,GAAQ/9E,MACT,YAACg/E,EAAW,UAAEyE,EAAS,cAAE1E,EAAa,UAAEhG,EAAS,SAAEC,EAAQ,WAAE7nB,GAAclpD,EAC3Eg2E,EAAW1+C,GAAOt3B,EAAQg2E,UAChC,IAAIa,EAAiBb,EAAS5nD,WAC1BqtD,EAAe,EACnB,MAAMjJ,EAAY5rC,GAAc5mC,EAAQ6R,IAAK9Z,KAAKuK,EAAGvK,KAAKiY,OACpD0rE,EAAiB,SAAS5mD,GAC9BxG,EAAI8G,SAASN,EAAM09C,EAAUlwE,EAAEs+B,EAAGt+B,EAAIm5E,GAAe76C,EAAGnpB,EAAIo/D,EAAiB,GAC7Ej2C,EAAGnpB,GAAKo/D,EAAiBE,GAErB4E,EAA0BnJ,EAAUh9C,UAAUgmD,GACpD,IAAIlF,EAAUsF,EAAWjnD,EAAOt4B,EAAGouB,EAAGlX,EAAM2d,EAU5C,IATA5C,EAAIkH,UAAYgmD,EAChBltD,EAAImH,aAAe,SACnBnH,EAAIL,KAAO+nD,EAAStlD,OACpBkQ,EAAGt+B,EAAI61E,GAAYpgF,KAAM4jF,EAAyB37E,GAClDsuB,EAAIiH,UAAYv1B,EAAQ67E,UACxB9oE,GAAKhb,KAAK0+E,WAAYiF,GACtBD,EAAe3E,GAA6C,UAA5B6E,EACd,WAAdH,EAA0BzK,EAAW,EAAI7nB,EAAe6nB,EAAW,EAAI7nB,EACvE,EACC7sD,EAAI,EAAGkX,EAAOuiE,EAAK98E,OAAQqD,EAAIkX,IAAQlX,EAAG,CAU7C,IATAi6E,EAAWR,EAAKz5E,GAChBu/E,EAAY7jF,KAAKmhF,gBAAgB78E,GACjCiyB,EAAIiH,UAAYqmD,EAChB7oE,GAAKujE,EAASC,OAAQmF,GACtB/mD,EAAQ2hD,EAAS3hD,MACbmiD,GAAiBniD,EAAM37B,SACzBjB,KAAK+jF,cAAcxtD,EAAKsS,EAAIvkC,EAAGm2E,EAAWxyE,GAC1C62E,EAAiBpnE,KAAKyI,IAAI89D,EAAS5nD,WAAY0iD,IAE5CrmD,EAAI,EAAGyG,EAAOyD,EAAM37B,OAAQyxB,EAAIyG,IAAQzG,EAC3CixD,EAAe/mD,EAAMlK,IACrBosD,EAAiBb,EAAS5nD,WAE5Brb,GAAKujE,EAASE,MAAOkF,GAEvBD,EAAe,EACf5E,EAAiBb,EAAS5nD,WAC1Brb,GAAKhb,KAAK2+E,UAAWgF,GACrB96C,EAAGnpB,GAAKs/D,EAEV,WAAWn2C,EAAItS,EAAKtuB,GAClB,MAAM+1E,EAASh+E,KAAKg+E,OACd/8E,EAAS+8E,EAAO/8E,OACtB,IAAIi9E,EAAY55E,EAChB,GAAIrD,EAAQ,CACV,MAAMw5E,EAAY5rC,GAAc5mC,EAAQ6R,IAAK9Z,KAAKuK,EAAGvK,KAAKiY,OAQ1D,IAPA4wB,EAAGt+B,EAAI61E,GAAYpgF,KAAMiI,EAAQ+7E,YAAa/7E,GAC9C4gC,EAAGnpB,GAAKzX,EAAQg3E,gBAChB1oD,EAAIkH,UAAYg9C,EAAUh9C,UAAUx1B,EAAQ+7E,aAC5CztD,EAAImH,aAAe,SACnBwgD,EAAa3+C,GAAOt3B,EAAQi2E,YAC5B3nD,EAAIiH,UAAYv1B,EAAQg8E,YACxB1tD,EAAIL,KAAOgoD,EAAWvlD,OACjBr0B,EAAI,EAAGA,EAAIrD,IAAUqD,EACxBiyB,EAAI8G,SAAS2gD,EAAO15E,GAAIm2E,EAAUlwE,EAAEs+B,EAAGt+B,GAAIs+B,EAAGnpB,EAAIw+D,EAAW7nD,WAAa,GAC1EwS,EAAGnpB,GAAKw+D,EAAW7nD,WAAapuB,EAAQi3E,eAI9C,eAAer2C,EAAItS,EAAK2tD,EAAaj8E,GACnC,MAAM,OAACs3E,EAAM,OAAEK,GAAU5/E,MACnB,EAACuK,EAAC,EAAEmV,GAAKmpB,GACT,MAAC5wB,EAAK,OAAEC,GAAUgsE,GAClB,QAAC7lD,EAAO,SAAEG,EAAQ,WAAEF,EAAU,YAAEC,GAAec,GAAcp3B,EAAQoyB,cAC3E9D,EAAIiH,UAAYv1B,EAAQutB,gBACxBe,EAAI0G,YAAch1B,EAAQwtB,YAC1Bc,EAAI2G,UAAYj1B,EAAQmzB,YACxB7E,EAAIqE,YACJrE,EAAIwE,OAAOxwB,EAAI8zB,EAAS3e,GACT,QAAXkgE,GACF5/E,KAAKmkF,UAAUt7C,EAAItS,EAAK2tD,EAAaj8E,GAEvCsuB,EAAIyE,OAAOzwB,EAAI0N,EAAQumB,EAAU9e,GACjC6W,EAAI6tD,iBAAiB75E,EAAI0N,EAAOyH,EAAGnV,EAAI0N,EAAOyH,EAAI8e,GACnC,WAAXohD,GAAkC,UAAXL,GACzBv/E,KAAKmkF,UAAUt7C,EAAItS,EAAK2tD,EAAaj8E,GAEvCsuB,EAAIyE,OAAOzwB,EAAI0N,EAAOyH,EAAIxH,EAASqmB,GACnChI,EAAI6tD,iBAAiB75E,EAAI0N,EAAOyH,EAAIxH,EAAQ3N,EAAI0N,EAAQsmB,EAAa7e,EAAIxH,GAC1D,WAAX0nE,GACF5/E,KAAKmkF,UAAUt7C,EAAItS,EAAK2tD,EAAaj8E,GAEvCsuB,EAAIyE,OAAOzwB,EAAI+zB,EAAY5e,EAAIxH,GAC/Bqe,EAAI6tD,iBAAiB75E,EAAGmV,EAAIxH,EAAQ3N,EAAGmV,EAAIxH,EAASomB,GACrC,WAAXshD,GAAkC,SAAXL,GACzBv/E,KAAKmkF,UAAUt7C,EAAItS,EAAK2tD,EAAaj8E,GAEvCsuB,EAAIyE,OAAOzwB,EAAGmV,EAAI2e,GAClB9H,EAAI6tD,iBAAiB75E,EAAGmV,EAAGnV,EAAI8zB,EAAS3e,GACxC6W,EAAIuE,YACJvE,EAAI4E,OACAlzB,EAAQmzB,YAAc,GACxB7E,EAAI8E,SAGR,uBAAuBpzB,GACrB,MAAM4tB,EAAQ71B,KAAK61B,MACb8c,EAAQ3yC,KAAK42C,YACbytC,EAAQ1xC,GAASA,EAAMpoC,EACvB+5E,EAAQ3xC,GAASA,EAAMjzB,EAC7B,GAAI2kE,GAASC,EAAO,CAClB,MAAMz2B,EAAWsvB,GAAYl1E,EAAQ4lD,UAAU/0C,KAAK9Y,KAAMA,KAAKuzC,QAASvzC,KAAK0gF,gBAC7E,IAAK7yB,EACH,OAEF,MAAMhwC,EAAO7d,KAAK2gF,MAAQ7C,GAAe99E,KAAMiI,GACzCq6E,EAAkB7gF,OAAOoyB,OAAO,GAAIg6B,EAAU7tD,KAAK2gF,OACnDR,EAAYL,GAAmBjqD,EAAO5tB,EAASq6E,GAC/C/mD,EAAQ2kD,GAAmBj4E,EAASq6E,EAAiBnC,EAAWtqD,GAClEwuD,EAAMlvC,MAAQ5Z,EAAMhxB,GAAK+5E,EAAMnvC,MAAQ5Z,EAAM7b,IAC/C1f,KAAKu/E,OAASY,EAAUZ,OACxBv/E,KAAK4/E,OAASO,EAAUP,OACxB5/E,KAAKiY,MAAQ4F,EAAK5F,MAClBjY,KAAKkY,OAAS2F,EAAK3F,OACnBlY,KAAK+gF,OAASlzB,EAAStjD,EACvBvK,KAAKghF,OAASnzB,EAASnuC,EACvB1f,KAAKkgD,qBAAqBnJ,OAAO/2C,KAAMu7B,KAI7C,cACE,QAASv7B,KAAKygF,QAEhB,KAAKlqD,GACH,MAAMtuB,EAAUjI,KAAKiI,QAAQi8B,WAAWlkC,KAAK+5B,cAC7C,IAAI0mD,EAAUzgF,KAAKygF,QACnB,IAAKA,EACH,OAEFzgF,KAAKukF,uBAAuBt8E,GAC5B,MAAMi8E,EAAc,CAClBjsE,MAAOjY,KAAKiY,MACZC,OAAQlY,KAAKkY,QAET2wB,EAAK,CACTt+B,EAAGvK,KAAKuK,EACRmV,EAAG1f,KAAK0f,GAEV+gE,EAAU/oE,KAAKkI,IAAI6gE,GAAW,KAAO,EAAIA,EACzC,MAAMjuB,EAAUlzB,GAAUr3B,EAAQuqD,SAC5BgyB,EAAoBxkF,KAAK8T,MAAM7S,QAAUjB,KAAK0+E,WAAWz9E,QAAUjB,KAAK+9E,KAAK98E,QAAUjB,KAAK2+E,UAAU19E,QAAUjB,KAAKg+E,OAAO/8E,OAC9HgH,EAAQmwD,SAAWosB,IACrBjuD,EAAI2C,OACJ3C,EAAIkuD,YAAchE,EAClBzgF,KAAKgkE,eAAen7B,EAAItS,EAAK2tD,EAAaj8E,GAC1C6mC,GAAsBvY,EAAKtuB,EAAQuzE,eACnC3yC,EAAGnpB,GAAK8yC,EAAQ92B,IAChB17B,KAAKkkE,UAAUr7B,EAAItS,EAAKtuB,GACxBjI,KAAK0kF,SAAS77C,EAAItS,EAAKtuB,GACvBjI,KAAK2kF,WAAW97C,EAAItS,EAAKtuB,GACzBmnC,GAAqB7Y,EAAKtuB,EAAQuzE,eAClCjlD,EAAI+C,WAGR,oBACE,OAAOt5B,KAAKuzC,SAAW,GAEzB,kBAAkBw9B,EAAgBuM,GAChC,MAAMtM,EAAahxE,KAAKuzC,QAClB9oC,EAASsmE,EAAej1D,IAAI,EAAEH,eAAcra,YAChD,MAAM6kC,EAAOnmC,KAAK61B,MAAMknB,eAAephC,GACvC,IAAKwqB,EACH,MAAM,IAAIjB,MAAM,kCAAoCvpB,GAEtD,MAAO,CACLA,eACA7N,QAASq4B,EAAKpkC,KAAKT,GACnBA,WAGEmqD,GAAWpwC,GAAe21D,EAAYvmE,GACtCm6E,EAAkB5kF,KAAK6kF,iBAAiBp6E,EAAQ6yE,IAClD7xB,GAAWm5B,KACb5kF,KAAKuzC,QAAU9oC,EACfzK,KAAK0gF,eAAiBpD,EACtBt9E,KAAK8kF,qBAAsB,EAC3B9kF,KAAK+2C,QAAO,IAGhB,YAAYlyC,EAAGqsE,EAAQlG,GAAc,GACnC,GAAIkG,GAAUlxE,KAAK8kF,oBACjB,OAAO,EAET9kF,KAAK8kF,qBAAsB,EAC3B,MAAM78E,EAAUjI,KAAKiI,QACf+oE,EAAahxE,KAAKuzC,SAAW,GAC7B9oC,EAASzK,KAAKyxE,mBAAmB5sE,EAAGmsE,EAAYE,EAAQlG,GACxD4Z,EAAkB5kF,KAAK6kF,iBAAiBp6E,EAAQ5F,GAChD4mD,EAAUylB,IAAW71D,GAAe5Q,EAAQumE,IAAe4T,EAWjE,OAVIn5B,IACFzrD,KAAKuzC,QAAU9oC,GACXxC,EAAQmwD,SAAWnwD,EAAQu6E,YAC7BxiF,KAAK0gF,eAAiB,CACpBn2E,EAAG1F,EAAE0F,EACLmV,EAAG7a,EAAE6a,GAEP1f,KAAK+2C,QAAO,EAAMm6B,KAGfzlB,EAET,mBAAmB5mD,EAAGmsE,EAAYE,EAAQlG,GACxC,MAAM/iE,EAAUjI,KAAKiI,QACrB,GAAe,aAAXpD,EAAE0E,KACJ,MAAO,GAET,IAAKyhE,EACH,OAAOgG,EAET,MAAMvmE,EAASzK,KAAK61B,MAAM67C,0BAA0B7sE,EAAGoD,EAAQ2uB,KAAM3uB,EAASipE,GAI9E,OAHIjpE,EAAQiT,SACVzQ,EAAOyQ,UAEFzQ,EAET,iBAAiBA,EAAQ5F,GACvB,MAAM,OAACk8E,EAAM,OAAEC,EAAM,QAAE/4E,GAAWjI,KAC5B6tD,EAAWsvB,GAAYl1E,EAAQ4lD,UAAU/0C,KAAK9Y,KAAMyK,EAAQ5F,GAClE,OAAoB,IAAbgpD,IAAuBkzB,IAAWlzB,EAAStjD,GAAKy2E,IAAWnzB,EAASnuC,IAG/E,GAAQy9D,YAAcA,GACtB,IAAI4H,GAAiB,CACnBpjF,GAAI,UACJ26E,SAAU,GACVa,eACA,UAAUtnD,EAAO0mD,EAAOt0E,GAClBA,IACF4tB,EAAM9sB,QAAU,IAAI,GAAQ,CAAC8sB,QAAO5tB,cAGxC,aAAa4tB,EAAO0mD,EAAOt0E,GACrB4tB,EAAM9sB,SACR8sB,EAAM9sB,QAAQ+yC,WAAW7zC,IAG7B,MAAM4tB,EAAO0mD,EAAOt0E,GACd4tB,EAAM9sB,SACR8sB,EAAM9sB,QAAQ+yC,WAAW7zC,IAG7B,UAAU4tB,GACR,MAAM9sB,EAAU8sB,EAAM9sB,QACtB,GAAIA,GAAWA,EAAQi8E,cAAe,CACpC,MAAMrsE,EAAO,CACX5P,WAEF,IAAuD,IAAnD8sB,EAAMgpC,cAAc,oBAAqBlmD,GAC3C,OAEF5P,EAAQuqC,KAAKzd,EAAMU,KACnBV,EAAMgpC,cAAc,mBAAoBlmD,KAG5C,WAAWkd,EAAOld,GAChB,GAAIkd,EAAM9sB,QAAS,CACjB,MAAMulD,EAAmB31C,EAAKu4D,OAC1Br7C,EAAM9sB,QAAQ0zE,YAAY9jE,EAAKm7B,MAAOwa,EAAkB31C,EAAKqyD,eAC/DryD,EAAK8yC,SAAU,KAIrBvzB,SAAU,CACRkgC,SAAS,EACToqB,SAAU,KACV30B,SAAU,UACVr4B,gBAAiB,kBACjBwtD,WAAY,OACZrH,UAAW,CACTvnD,OAAQ,QAEVwqD,aAAc,EACdC,kBAAmB,EACnBrjB,WAAY,OACZsoB,UAAW,OACX9E,YAAa,EACbf,SAAU,GAEVwF,UAAW,OACXQ,YAAa,OACb/E,cAAe,EACfD,gBAAiB,EACjBf,WAAY,CACV9pD,OAAQ,QAEV4vD,YAAa,OACbxxB,QAAS,EACTktB,aAAc,EACdD,UAAW,EACXplD,aAAc,EACd0+C,UAAW,CAACxiD,EAAKoG,IAASA,EAAKshD,SAASpgE,KACxCm7D,SAAU,CAACziD,EAAKoG,IAASA,EAAKshD,SAASpgE,KACvCwlE,mBAAoB,OACpBtE,eAAe,EACf5tB,WAAY,EACZ17B,YAAa,gBACb2F,YAAa,EACb7F,UAAW,CACTud,SAAU,IACVgC,OAAQ,gBAEViB,WAAY,CACVJ,QAAS,CACPpsC,KAAM,SACNssC,WAAY,CAAC,IAAK,IAAK,QAAS,SAAU,SAAU,WAEtD4qC,QAAS,CACP3rC,OAAQ,SACRhC,SAAU,MAGdF,UAAW,CACTwuC,YAAapnE,GACb,MAAMumE,GACJ,GAAIA,EAAat/E,OAAS,EAAG,CAC3B,MAAMG,EAAOm/E,EAAa,GACpBriC,EAAS98C,EAAKy0B,MAAM9zB,KAAKm8C,OACzB+mC,EAAa/mC,EAASA,EAAOj9C,OAAS,EAC5C,GAAIjB,MAAQA,KAAKiI,SAAiC,YAAtBjI,KAAKiI,QAAQ2uB,KACvC,OAAOx1B,EAAK+4C,QAAQ6E,OAAS,GACxB,GAAI59C,EAAK49C,MACd,OAAO59C,EAAK49C,MACP,GAAIimC,EAAa,GAAK7jF,EAAKi5C,UAAY4qC,EAC5C,OAAO/mC,EAAO98C,EAAKi5C,WAGvB,MAAO,IAETgnC,WAAYrnE,GACZ0kE,WAAY1kE,GACZwnE,YAAaxnE,GACb,MAAMkwC,GACJ,GAAIlqD,MAAQA,KAAKiI,SAAiC,YAAtBjI,KAAKiI,QAAQ2uB,KACvC,OAAOszB,EAAYlL,MAAQ,KAAOkL,EAAYE,gBAAkBF,EAAYE,eAE9E,IAAIpL,EAAQkL,EAAY/P,QAAQ6E,OAAS,GACrCA,IACFA,GAAS,MAEX,MAAMh+C,EAAQkpD,EAAYE,eAI1B,OAHKlwC,GAAclZ,KACjBg+C,GAASh+C,GAEJg+C,GAET,WAAWkL,GACT,MAAM/jB,EAAO+jB,EAAYr0B,MAAMknB,eAAemN,EAAYvuC,cACpD1T,EAAUk+B,EAAKoT,WAAWnP,SAAS8f,EAAY7P,WACrD,MAAO,CACL5kB,YAAaxtB,EAAQwtB,YACrBD,gBAAiBvtB,EAAQutB,gBACzB4F,YAAanzB,EAAQmzB,YACrBgX,WAAYnqC,EAAQmqC,WACpBC,iBAAkBpqC,EAAQoqC,iBAC1B8/B,aAAc,IAGlB,iBACE,OAAOnyE,KAAKiI,QAAQ67E,WAEtB,gBAAgB55B,GACd,MAAM/jB,EAAO+jB,EAAYr0B,MAAMknB,eAAemN,EAAYvuC,cACpD1T,EAAUk+B,EAAKoT,WAAWnP,SAAS8f,EAAY7P,WACrD,MAAO,CACL/f,WAAYryB,EAAQqyB,WACpBC,SAAUtyB,EAAQsyB,WAGtBknD,WAAYznE,GACZ2kE,UAAW3kE,GACX0nE,aAAc1nE,GACdgkE,OAAQhkE,GACR2nE,YAAa3nE,KAGjBi9C,cAAe,CACbgnB,SAAU,OACVC,WAAY,OACZvC,UAAW,QAEb52C,YAAa,CACX5M,YAAcr4B,GAAkB,WAATA,GAA8B,aAATA,GAAgC,aAATA,EACnEu4B,YAAY,EACZua,UAAW,CACTza,aAAa,EACbE,YAAY,GAEd9C,UAAW,CACT+C,WAAW,GAEbyd,WAAY,CACVzd,UAAW,cAGf4wC,uBAAwB,CAAC,gBAa3B,MAAMgc,GAAc,CAAChnC,EAAQ5D,EAAKh5C,EAAO6jF,KACpB,kBAAR7qC,GACTh5C,EAAQ48C,EAAOpxC,KAAKwtC,GAAO,EAC3B6qC,EAAYC,QAAQ,CAAC9jF,QAAO09C,MAAO1E,KAC1B9iC,MAAM8iC,KACfh5C,EAAQ,MAEHA,GAET,SAAS+jF,GAAennC,EAAQ5D,EAAKh5C,EAAO6jF,GAC1C,MAAM5sB,EAAQra,EAAO9hC,QAAQk+B,GAC7B,IAAe,IAAXie,EACF,OAAO2sB,GAAYhnC,EAAQ5D,EAAKh5C,EAAO6jF,GAEzC,MAAMv0C,EAAOsN,EAAOonC,YAAYhrC,GAChC,OAAOie,IAAU3nB,EAAOtvC,EAAQi3D,EAElC,MAAM0C,GAAa,CAAC35D,EAAO6e,IAAkB,OAAV7e,EAAiB,KAAOygB,GAAYrK,KAAKC,MAAMrW,GAAQ,EAAG6e,GAC7F,MAAM,WAAsB,GAC1B,YAAYu0B,GACV6P,MAAM7P,GACN10C,KAAKulF,iBAAc9+D,EACnBzmB,KAAKwlF,YAAc,EACnBxlF,KAAKylF,aAAe,GAEtB,KAAKhe,GACH,MAAMie,EAAQ1lF,KAAKylF,aACnB,GAAIC,EAAMzkF,OAAQ,CAChB,MAAMi9C,EAASl+C,KAAKm+C,YACpB,IAAK,MAAM,MAAC78C,EAAK,MAAE09C,KAAU0mC,EACvBxnC,EAAO58C,KAAW09C,GACpBd,EAAO1kB,OAAOl4B,EAAO,GAGzBtB,KAAKylF,aAAe,GAEtBlhC,MAAMgpB,KAAK9F,GAEb,MAAMntB,EAAKh5C,GACT,GAAI4Y,GAAcogC,GAChB,OAAO,KAET,MAAM4D,EAASl+C,KAAKm+C,YAGpB,OAFA78C,EAAQiZ,SAASjZ,IAAU48C,EAAO58C,KAAWg5C,EAAMh5C,EAC/C+jF,GAAennC,EAAQ5D,EAAK5/B,GAAepZ,EAAOg5C,GAAMt6C,KAAKylF,cAC1DxqB,GAAW35D,EAAO48C,EAAOj9C,OAAS,GAE3C,sBACE,MAAM,WAACy3C,EAAU,WAAEC,GAAc34C,KAAKy4C,gBACtC,IAAI,IAACv4B,EAAG,IAAEC,GAAOngB,KAAKk9D,WAAU,GACJ,UAAxBl9D,KAAKiI,QAAQ2nC,SACV8I,IACHx4B,EAAM,GAEHy4B,IACHx4B,EAAMngB,KAAKm+C,YAAYl9C,OAAS,IAGpCjB,KAAKkgB,IAAMA,EACXlgB,KAAKmgB,IAAMA,EAEb,aACE,MAAMD,EAAMlgB,KAAKkgB,IACXC,EAAMngB,KAAKmgB,IACXwmC,EAAS3mD,KAAKiI,QAAQ0+C,OACtB9E,EAAQ,GACd,IAAI3D,EAASl+C,KAAKm+C,YAClBD,EAAkB,IAARh+B,GAAaC,IAAQ+9B,EAAOj9C,OAAS,EAAKi9C,EAASA,EAAOrlC,MAAMqH,EAAKC,EAAM,GACrFngB,KAAKwlF,YAAc9tE,KAAKyI,IAAI+9B,EAAOj9C,QAAU0lD,EAAS,EAAI,GAAI,GAC9D3mD,KAAKulF,YAAcvlF,KAAKkgB,KAAOymC,EAAS,GAAM,GAC9C,IAAK,IAAI3lD,EAAQkf,EAAKlf,GAASmf,EAAKnf,IAClC6gD,EAAM/0C,KAAK,CAAC9L,UAEd,OAAO6gD,EAET,iBAAiB7gD,GACf,MAAMk9C,EAASl+C,KAAKm+C,YACpB,OAAIn9C,GAAS,GAAKA,EAAQk9C,EAAOj9C,OACxBi9C,EAAOl9C,GAETA,EAET,YACEujD,MAAMnO,YACDp2C,KAAKujD,iBACRvjD,KAAK0tD,gBAAkB1tD,KAAK0tD,gBAGhC,iBAAiB1sD,GAIf,MAHqB,kBAAVA,IACTA,EAAQhB,KAAKwmC,MAAMxlC,IAEJ,OAAVA,EAAiBw9C,IAAMx+C,KAAKgmD,oBAAoBhlD,EAAQhB,KAAKulF,aAAevlF,KAAKwlF,aAE1F,gBAAgBlkF,GACd,MAAMugD,EAAQ7hD,KAAK6hD,MACnB,OAAIvgD,EAAQ,GAAKA,EAAQugD,EAAM5gD,OAAS,EAC/B,KAEFjB,KAAK4hD,iBAAiBC,EAAMvgD,GAAON,OAE5C,iBAAiB04B,GACf,OAAOhiB,KAAKC,MAAM3X,KAAKulF,YAAcvlF,KAAK2lF,mBAAmBjsD,GAAS15B,KAAKwlF,aAE7E,eACE,OAAOxlF,KAAK27B,QAUhB,SAASiqD,GAAgBC,EAAmBC,GAC1C,MAAMjkC,EAAQ,GACRkkC,EAAc,OACd,OAACn2C,EAAM,KAAE4yB,EAAI,IAAEtiD,EAAG,IAAEC,EAAG,UAAE6lE,EAAS,MAAE5/C,EAAK,SAAE6/C,EAAQ,UAAEC,EAAS,cAAEC,GAAiBN,EACjF34B,EAAOsV,GAAQ,EACf4jB,EAAYH,EAAW,GACtB/lE,IAAKmmE,EAAMlmE,IAAKmmE,GAAQR,EACzBptC,GAAcx+B,GAAcgG,GAC5By4B,GAAcz+B,GAAciG,GAC5BomE,GAAgBrsE,GAAcksB,GAC9BogD,GAAcF,EAAOD,IAASH,EAAY,GAChD,IACI3xC,EAAQkyC,EAASC,EAASC,EAD1Br+B,EAAU3pC,IAAS2nE,EAAOD,GAAQD,EAAYl5B,GAAQA,EAE1D,GAAI5E,EAAUy9B,IAAgBrtC,IAAeC,EAC3C,MAAO,CAAC,CAAC33C,MAAOqlF,GAAO,CAACrlF,MAAOslF,IAEjCK,EAAYjvE,KAAK0hD,KAAKktB,EAAOh+B,GAAW5wC,KAAKuH,MAAMonE,EAAO/9B,GACtDq+B,EAAYP,IACd99B,EAAU3pC,GAAQgoE,EAAYr+B,EAAU89B,EAAYl5B,GAAQA,GAEzDhzC,GAAc8rE,KACjBzxC,EAAS78B,KAAKsH,IAAI,GAAIgnE,GACtB19B,EAAU5wC,KAAK0hD,KAAK9Q,EAAU/T,GAAUA,GAE3B,UAAX3E,GACF62C,EAAU/uE,KAAKuH,MAAMonE,EAAO/9B,GAAWA,EACvCo+B,EAAUhvE,KAAK0hD,KAAKktB,EAAOh+B,GAAWA,IAEtCm+B,EAAUJ,EACVK,EAAUJ,GAER5tC,GAAcC,GAAc6pB,GAAQ3iD,IAAaM,EAAMD,GAAOsiD,EAAMla,EAAU,MAChFq+B,EAAYjvE,KAAKC,MAAMD,KAAKwI,KAAKC,EAAMD,GAAOooC,EAAS29B,IACvD39B,GAAWnoC,EAAMD,GAAOymE,EACxBF,EAAUvmE,EACVwmE,EAAUvmE,GACDomE,GACTE,EAAU/tC,EAAax4B,EAAMumE,EAC7BC,EAAU/tC,EAAax4B,EAAMumE,EAC7BC,EAAYvgD,EAAQ,EACpBkiB,GAAWo+B,EAAUD,GAAWE,IAEhCA,GAAaD,EAAUD,GAAWn+B,EAEhCq+B,EADE7nE,GAAa6nE,EAAWjvE,KAAKC,MAAMgvE,GAAYr+B,EAAU,KAC/C5wC,KAAKC,MAAMgvE,GAEXjvE,KAAK0hD,KAAKutB,IAG1B,MAAMC,EAAgBlvE,KAAKyI,IACzBK,GAAe8nC,GACf9nC,GAAeimE,IAEjBlyC,EAAS78B,KAAKsH,IAAI,GAAI9E,GAAc8rE,GAAaY,EAAgBZ,GACjES,EAAU/uE,KAAKC,MAAM8uE,EAAUlyC,GAAUA,EACzCmyC,EAAUhvE,KAAKC,MAAM+uE,EAAUnyC,GAAUA,EACzC,IAAI7hB,EAAI,EAcR,IAbIgmB,IACEytC,GAAiBM,IAAYvmE,GAC/B2hC,EAAM/0C,KAAK,CAAC9L,MAAOkf,IACfumE,EAAUvmE,GACZwS,IAEE5T,GAAapH,KAAKC,OAAO8uE,EAAU/zD,EAAI41B,GAAW/T,GAAUA,EAAQr0B,EAAK2mE,GAAkB3mE,EAAKsmE,EAAYX,KAC9GnzD,KAEO+zD,EAAUvmE,GACnBwS,KAGGA,EAAIi0D,IAAaj0D,EACtBmvB,EAAM/0C,KAAK,CAAC9L,MAAO0W,KAAKC,OAAO8uE,EAAU/zD,EAAI41B,GAAW/T,GAAUA,IAWpE,OATIoE,GAAcwtC,GAAiBO,IAAYvmE,EACzC0hC,EAAM5gD,QAAU6d,GAAa+iC,EAAMA,EAAM5gD,OAAS,GAAGD,MAAOmf,EAAK0mE,GAAkB1mE,EAAKqmE,EAAYX,IACtGhkC,EAAMA,EAAM5gD,OAAS,GAAGD,MAAQmf,EAEhC0hC,EAAM/0C,KAAK,CAAC9L,MAAOmf,IAEXw4B,GAAc+tC,IAAYvmE,GACpC0hC,EAAM/0C,KAAK,CAAC9L,MAAO0lF,IAEd7kC,EAET,SAASglC,GAAkB7lF,EAAOwlF,GAAY,WAAC/iC,EAAU,YAAEoW,IACzD,MAAMp/B,EAAMra,GAAUy5C,GAChBpmC,GAASgwB,EAAa/rC,KAAK2K,IAAIoY,GAAO/iB,KAAK4L,IAAImX,KAAS,KACxDx5B,EAAS,IAAOulF,GAAc,GAAKxlF,GAAOC,OAChD,OAAOyW,KAAKwI,IAAIsmE,EAAa/yD,EAAOxyB,GA/FtC,GAAcU,GAAK,WACnB,GAAcu2B,SAAW,CACvB2pB,MAAO,CACLz6C,SAAU,GAAcwR,UAAUqmC,mBA8FtC,MAAM,WAAwB,GAC5B,YAAYvK,GACV6P,MAAM7P,GACN10C,KAAKyZ,WAAQgN,EACbzmB,KAAK0Z,SAAM+M,EACXzmB,KAAKulF,iBAAc9+D,EACnBzmB,KAAK8mF,eAAYrgE,EACjBzmB,KAAKwlF,YAAc,EAErB,MAAMlrC,EAAKh5C,GACT,OAAI4Y,GAAcogC,KAGE,kBAARA,GAAoBA,aAAe9wC,UAAY+Q,UAAU+/B,GAF5D,MAKDA,EAEV,yBACE,MAAM,YAACra,GAAejgC,KAAKiI,SACrB,WAACywC,EAAU,WAAEC,GAAc34C,KAAKy4C,gBACtC,IAAI,IAACv4B,EAAG,IAAEC,GAAOngB,KACjB,MAAM+mF,EAAS1iE,GAAMnE,EAAMw4B,EAAax4B,EAAMmE,EACxC2iE,EAAS3iE,GAAMlE,EAAMw4B,EAAax4B,EAAMkE,EAC9C,GAAI4b,EAAa,CACf,MAAMgnD,EAAUvoE,GAAKwB,GACfgnE,EAAUxoE,GAAKyB,GACjB8mE,EAAU,GAAKC,EAAU,EAC3BF,EAAO,GACEC,EAAU,GAAKC,EAAU,GAClCH,EAAO,GAGX,GAAI7mE,IAAQC,EAAK,CACf,IAAIwmC,EAAS,GACTxmC,GAAO3W,OAAO29E,kBAAoBjnE,GAAO1W,OAAO49E,oBAClDzgC,EAASjvC,KAAKkI,IAAU,IAANO,IAEpB6mE,EAAO7mE,EAAMwmC,GACR1mB,GACH8mD,EAAO7mE,EAAMymC,GAGjB3mD,KAAKkgB,IAAMA,EACXlgB,KAAKmgB,IAAMA,EAEb,eACE,MAAM23C,EAAW93D,KAAKiI,QAAQ45C,MAC9B,IACIokC,GADA,cAACjuB,EAAa,SAAEqvB,GAAYvvB,EAehC,OAbIuvB,GACFpB,EAAWvuE,KAAK0hD,KAAKp5D,KAAKmgB,IAAMknE,GAAY3vE,KAAKuH,MAAMjf,KAAKkgB,IAAMmnE,GAAY,EAC1EpB,EAAW,MACbxmD,QAAQC,KAAK,UAAU1/B,KAAK2B,sBAAsB0lF,mCAA0CpB,8BAC5FA,EAAW,OAGbA,EAAWjmF,KAAKsnF,mBAChBtvB,EAAgBA,GAAiB,IAE/BA,IACFiuB,EAAWvuE,KAAKwI,IAAI83C,EAAeiuB,IAE9BA,EAET,mBACE,OAAOz8E,OAAO4U,kBAEhB,aACE,MAAMue,EAAO38B,KAAKiI,QACZ6vD,EAAWn7B,EAAKklB,MACtB,IAAIokC,EAAWjmF,KAAKunF,eACpBtB,EAAWvuE,KAAKyI,IAAI,EAAG8lE,GACvB,MAAMuB,EAA0B,CAC9BvB,WACAr2C,OAAQjT,EAAKiT,OACb1vB,IAAKyc,EAAKzc,IACVC,IAAKwc,EAAKxc,IACV6lE,UAAWluB,EAASkuB,UACpBxjB,KAAM1K,EAASuvB,SACfjhD,MAAO0xB,EAAS1xB,MAChB8/C,UAAWlmF,KAAKynF,aAChBhkC,WAAYzjD,KAAKujD,eACjBsW,YAAa/B,EAAS+B,aAAe,EACrCssB,eAA0C,IAA3BruB,EAASquB,eAEpBL,EAAY9lF,KAAKm8D,QAAUn8D,KAC3B6hD,EAAQ+jC,GAAgB4B,EAAyB1B,GAYvD,MAXoB,UAAhBnpD,EAAKiT,QACP7vB,GAAmB8hC,EAAO7hD,KAAM,SAE9B28B,EAAKzhB,SACP2mC,EAAM3mC,UACNlb,KAAKyZ,MAAQzZ,KAAKmgB,IAClBngB,KAAK0Z,IAAM1Z,KAAKkgB,MAEhBlgB,KAAKyZ,MAAQzZ,KAAKkgB,IAClBlgB,KAAK0Z,IAAM1Z,KAAKmgB,KAEX0hC,EAET,YACE,MAAMA,EAAQ7hD,KAAK6hD,MACnB,IAAIpoC,EAAQzZ,KAAKkgB,IACbxG,EAAM1Z,KAAKmgB,IAEf,GADAokC,MAAMnO,YACFp2C,KAAKiI,QAAQ0+C,QAAU9E,EAAM5gD,OAAQ,CACvC,MAAM0lD,GAAUjtC,EAAMD,GAAS/B,KAAKyI,IAAI0hC,EAAM5gD,OAAS,EAAG,GAAK,EAC/DwY,GAASktC,EACTjtC,GAAOitC,EAET3mD,KAAKulF,YAAc9rE,EACnBzZ,KAAK8mF,UAAYptE,EACjB1Z,KAAKwlF,YAAc9rE,EAAMD,EAE3B,iBAAiBzY,GACf,OAAOstC,GAAattC,EAAOhB,KAAK61B,MAAM5tB,QAAQ6lC,OAAQ9tC,KAAKiI,QAAQ45C,MAAM33C,SAI7E,MAAM,WAAoB,GACxB,sBACE,MAAM,IAACgW,EAAG,IAAEC,GAAOngB,KAAKk9D,WAAU,GAClCl9D,KAAKkgB,IAAM5F,GAAe4F,GAAOA,EAAM,EACvClgB,KAAKmgB,IAAM7F,GAAe6F,GAAOA,EAAM,EACvCngB,KAAK0nF,yBAEP,mBACE,MAAMjkC,EAAazjD,KAAKujD,eAClBtiD,EAASwiD,EAAazjD,KAAKiY,MAAQjY,KAAKkY,OACxC2hD,EAAcz5C,GAAUpgB,KAAKiI,QAAQ45C,MAAMgY,aAC3CpmC,GAASgwB,EAAa/rC,KAAK2K,IAAIw3C,GAAeniD,KAAK4L,IAAIu2C,KAAiB,KACxE+G,EAAW5gE,KAAKihE,wBAAwB,GAC9C,OAAOvpD,KAAK0hD,KAAKn4D,EAASyW,KAAKwI,IAAI,GAAI0gD,EAASvqC,WAAa5C,IAE/D,iBAAiBzyB,GACf,OAAiB,OAAVA,EAAiBw9C,IAAMx+C,KAAKgmD,oBAAoBhlD,EAAQhB,KAAKulF,aAAevlF,KAAKwlF,aAE1F,iBAAiB9rD,GACf,OAAO15B,KAAKulF,YAAcvlF,KAAK2lF,mBAAmBjsD,GAAS15B,KAAKwlF,aAUpE,SAASmC,GAAQC,GACf,MAAMtyC,EAASsyC,EAAWlwE,KAAKsH,IAAI,GAAItH,KAAKuH,MAAMR,GAAMmpE,KACxD,OAAkB,IAAXtyC,EAET,SAASuyC,GAAchC,EAAmBC,GACxC,MAAMgC,EAASpwE,KAAKuH,MAAMR,GAAMqnE,EAAU3lE,MACpC4nE,EAAiBrwE,KAAK0hD,KAAK0sB,EAAU3lE,IAAMzI,KAAKsH,IAAI,GAAI8oE,IACxDjmC,EAAQ,GACd,IAAI+lC,EAAUptE,GAAgBqrE,EAAkB3lE,IAAKxI,KAAKsH,IAAI,GAAItH,KAAKuH,MAAMR,GAAMqnE,EAAU5lE,QACzF8nE,EAAMtwE,KAAKuH,MAAMR,GAAMmpE,IACvBK,EAAcvwE,KAAKuH,MAAM2oE,EAAUlwE,KAAKsH,IAAI,GAAIgpE,IAChDhC,EAAYgC,EAAM,EAAItwE,KAAKsH,IAAI,GAAItH,KAAKkI,IAAIooE,IAAQ,EACxD,GACEnmC,EAAM/0C,KAAK,CAAC9L,MAAO4mF,EAASzvB,MAAOwvB,GAAQC,OACzCK,EACkB,KAAhBA,IACFA,EAAc,IACZD,EACFhC,EAAYgC,GAAO,EAAI,EAAIhC,GAE7B4B,EAAUlwE,KAAKC,MAAMswE,EAAcvwE,KAAKsH,IAAI,GAAIgpE,GAAOhC,GAAaA,QAC7DgC,EAAMF,GAAWE,IAAQF,GAAUG,EAAcF,GAC1D,MAAMG,EAAW1tE,GAAgBqrE,EAAkB1lE,IAAKynE,GAExD,OADA/lC,EAAM/0C,KAAK,CAAC9L,MAAOknF,EAAU/vB,MAAOwvB,GAAQC,KACrC/lC,EA/BT,GAAYlgD,GAAK,SACjB,GAAYu2B,SAAW,CACrB2pB,MAAO,CACLz6C,SAAUwwD,GAAMV,WAAWS,UA8B/B,MAAM,WAAyB,GAC7B,YAAYjjB,GACV6P,MAAM7P,GACN10C,KAAKyZ,WAAQgN,EACbzmB,KAAK0Z,SAAM+M,EACXzmB,KAAKulF,iBAAc9+D,EACnBzmB,KAAKwlF,YAAc,EAErB,MAAMlrC,EAAKh5C,GACT,MAAMN,EAAQ,GAAgB4X,UAAU4tB,MAAMvtB,MAAMjZ,KAAM,CAACs6C,EAAKh5C,IAChE,GAAc,IAAVN,EAIJ,OAAOsZ,GAAetZ,IAAUA,EAAQ,EAAIA,EAAQ,KAHlDhB,KAAKmoF,OAAQ,EAKjB,sBACE,MAAM,IAACjoE,EAAG,IAAEC,GAAOngB,KAAKk9D,WAAU,GAClCl9D,KAAKkgB,IAAM5F,GAAe4F,GAAOxI,KAAKyI,IAAI,EAAGD,GAAO,KACpDlgB,KAAKmgB,IAAM7F,GAAe6F,GAAOzI,KAAKyI,IAAI,EAAGA,GAAO,KAChDngB,KAAKiI,QAAQg4B,cACfjgC,KAAKmoF,OAAQ,GAEfnoF,KAAK0nF,yBAEP,yBACE,MAAM,WAAChvC,EAAU,WAAEC,GAAc34C,KAAKy4C,gBACtC,IAAIv4B,EAAMlgB,KAAKkgB,IACXC,EAAMngB,KAAKmgB,IACf,MAAM4mE,EAAS1iE,GAAMnE,EAAMw4B,EAAax4B,EAAMmE,EACxC2iE,EAAS3iE,GAAMlE,EAAMw4B,EAAax4B,EAAMkE,EACxC2jE,EAAM,CAAC3jE,EAAGF,IAAMzM,KAAKsH,IAAI,GAAItH,KAAKuH,MAAMR,GAAM4F,IAAMF,GACtDjE,IAAQC,IACND,GAAO,GACT6mE,EAAO,GACPC,EAAO,MAEPD,EAAOiB,EAAI9nE,GAAM,IACjB8mE,EAAOgB,EAAI7nE,EAAK,MAGhBD,GAAO,GACT6mE,EAAOiB,EAAI7nE,GAAM,IAEfA,GAAO,GACT6mE,EAAOgB,EAAI9nE,EAAK,IAEdlgB,KAAKmoF,OAASnoF,KAAKkgB,MAAQlgB,KAAK28D,eAAiBz8C,IAAQ8nE,EAAIhoF,KAAKkgB,IAAK,IACzE6mE,EAAOiB,EAAI9nE,GAAM,IAEnBlgB,KAAKkgB,IAAMA,EACXlgB,KAAKmgB,IAAMA,EAEb,aACE,MAAMwc,EAAO38B,KAAKiI,QACZ49E,EAAoB,CACxB3lE,IAAKlgB,KAAKy8D,SACVt8C,IAAKngB,KAAKw8D,UAEN3a,EAAQgmC,GAAchC,EAAmB7lF,MAY/C,MAXoB,UAAhB28B,EAAKiT,QACP7vB,GAAmB8hC,EAAO7hD,KAAM,SAE9B28B,EAAKzhB,SACP2mC,EAAM3mC,UACNlb,KAAKyZ,MAAQzZ,KAAKmgB,IAClBngB,KAAK0Z,IAAM1Z,KAAKkgB,MAEhBlgB,KAAKyZ,MAAQzZ,KAAKkgB,IAClBlgB,KAAK0Z,IAAM1Z,KAAKmgB,KAEX0hC,EAET,iBAAiB7gD,GACf,YAAiBylB,IAAVzlB,EACH,IACAstC,GAAattC,EAAOhB,KAAK61B,MAAM5tB,QAAQ6lC,OAAQ9tC,KAAKiI,QAAQ45C,MAAM33C,QAExE,YACE,MAAMuP,EAAQzZ,KAAKkgB,IACnBqkC,MAAMnO,YACNp2C,KAAKulF,YAAc9mE,GAAMhF,GACzBzZ,KAAKwlF,YAAc/mE,GAAMze,KAAKmgB,KAAO1B,GAAMhF,GAE7C,iBAAiBzY,GAIf,YAHcylB,IAAVzlB,GAAiC,IAAVA,IACzBA,EAAQhB,KAAKkgB,KAED,OAAVlf,GAAkBwW,MAAMxW,GACnBw9C,IAEFx+C,KAAKgmD,mBAAmBhlD,IAAUhB,KAAKkgB,IAC1C,GACCzB,GAAMzd,GAAShB,KAAKulF,aAAevlF,KAAKwlF,aAE/C,iBAAiB9rD,GACf,MAAMynC,EAAUnhE,KAAK2lF,mBAAmBjsD,GACxC,OAAOhiB,KAAKsH,IAAI,GAAIhf,KAAKulF,YAAcpkB,EAAUnhE,KAAKwlF,cAa1D,SAAS4C,GAAsBzrD,GAC7B,MAAMm7B,EAAWn7B,EAAKklB,MACtB,GAAIiW,EAAStL,SAAW7vB,EAAK6vB,QAAS,CACpC,MAAMgG,EAAUlzB,GAAUw4B,EAAS0C,iBACnC,OAAO9/C,GAAeo9C,EAAS5hC,MAAQ4hC,EAAS5hC,KAAKrY,KAAMqa,GAAShC,KAAKrY,MAAQ20C,EAAQt6C,OAE3F,OAAO,EAET,SAASmwE,GAAiB9xD,EAAKL,EAAM8oB,GAEnC,OADAA,EAAQ7kC,GAAQ6kC,GAASA,EAAQ,CAACA,GAC3B,CACLl4B,EAAGgS,GAAavC,EAAKL,EAAKyC,OAAQqmB,GAClCx8C,EAAGw8C,EAAM/9C,OAASi1B,EAAKG,YAG3B,SAASiyD,GAAgBtnE,EAAO7D,EAAKU,EAAMqC,EAAKC,GAC9C,OAAIa,IAAUd,GAAOc,IAAUb,EACtB,CACL1G,MAAO0D,EAAOU,EAAO,EACrBnE,IAAKyD,EAAOU,EAAO,GAEZmD,EAAQd,GAAOc,EAAQb,EACzB,CACL1G,MAAO0D,EAAMU,EACbnE,IAAKyD,GAGF,CACL1D,MAAO0D,EACPzD,IAAKyD,EAAMU,GAGf,SAAS0qE,GAAmBnxD,GAC1B,MAAM6sB,EAAO,CACX1/B,EAAG6S,EAAMxd,KAAOwd,EAAMulD,SAAS/iE,KAC/BwM,EAAGgR,EAAMvd,MAAQud,EAAMulD,SAAS9iE,MAChCsI,EAAGiV,EAAMsE,IAAMtE,EAAMulD,SAASjhD,IAC9B9d,EAAGwZ,EAAMuE,OAASvE,EAAMulD,SAAShhD,QAE7B6sD,EAAS/mF,OAAOoyB,OAAO,GAAIowB,GAC3Bmb,EAAa,GACb5M,EAAU,GACVi2B,EAAarxD,EAAMsxD,aAAaznF,OAChC0nF,EAAiBvxD,EAAMnvB,QAAQykD,YAC/Bk8B,EAAkBD,EAAeE,kBAAoB7qE,GAAKyqE,EAAa,EAC7E,IAAK,IAAInkF,EAAI,EAAGA,EAAImkF,EAAYnkF,IAAK,CACnC,MAAMq4B,EAAOgsD,EAAezkD,WAAW9M,EAAM0xD,qBAAqBxkF,IAClEkuD,EAAQluD,GAAKq4B,EAAK61B,QAClB,MAAM5F,EAAgBx1B,EAAM2xD,iBAAiBzkF,EAAG8yB,EAAM4xD,YAAcx2B,EAAQluD,GAAIskF,GAC1EK,EAAS1pD,GAAO5C,EAAKzG,MACrB0mD,EAAWyL,GAAiBjxD,EAAMb,IAAK0yD,EAAQ7xD,EAAMsxD,aAAapkF,IACxE86D,EAAW96D,GAAKs4E,EAChB,MAAM7c,EAAex+C,GAAgB6V,EAAM80B,cAAc5nD,GAAKskF,GACxD5nE,EAAQtJ,KAAKC,MAAM2I,GAAUy/C,IAC7BmpB,EAAUZ,GAAgBtnE,EAAO4rC,EAAcriD,EAAGqyE,EAAS91D,EAAG,EAAG,KACjEqiE,EAAUb,GAAgBtnE,EAAO4rC,EAAcltC,EAAGk9D,EAASp6E,EAAG,GAAI,KACxE4mF,GAAaZ,EAAQvkC,EAAM8b,EAAcmpB,EAASC,GAEpD/xD,EAAMiyD,eACJplC,EAAK1/B,EAAIikE,EAAOjkE,EAChBikE,EAAOpiE,EAAI69B,EAAK79B,EAChB69B,EAAK9hC,EAAIqmE,EAAOrmE,EAChBqmE,EAAO5qE,EAAIqmC,EAAKrmC,GAElBwZ,EAAMkyD,iBAAmBC,GAAqBnyD,EAAOgoC,EAAY5M,GAEnE,SAAS42B,GAAaZ,EAAQvkC,EAAMjjC,EAAOkoE,EAASC,GAClD,MAAM9mE,EAAM3K,KAAKkI,IAAIlI,KAAK2K,IAAIrB,IACxBsC,EAAM5L,KAAKkI,IAAIlI,KAAK4L,IAAItC,IAC9B,IAAIzW,EAAI,EACJmV,EAAI,EACJwpE,EAAQzvE,MAAQwqC,EAAK1/B,GACvBha,GAAK05C,EAAK1/B,EAAI2kE,EAAQzvE,OAAS4I,EAC/BmmE,EAAOjkE,EAAI7M,KAAKwI,IAAIsoE,EAAOjkE,EAAG0/B,EAAK1/B,EAAIha,IAC9B2+E,EAAQxvE,IAAMuqC,EAAK79B,IAC5B7b,GAAK2+E,EAAQxvE,IAAMuqC,EAAK79B,GAAK/D,EAC7BmmE,EAAOpiE,EAAI1O,KAAKyI,IAAIqoE,EAAOpiE,EAAG69B,EAAK79B,EAAI7b,IAErC4+E,EAAQ1vE,MAAQwqC,EAAK9hC,GACvBzC,GAAKukC,EAAK9hC,EAAIgnE,EAAQ1vE,OAAS6J,EAC/BklE,EAAOrmE,EAAIzK,KAAKwI,IAAIsoE,EAAOrmE,EAAG8hC,EAAK9hC,EAAIzC,IAC9BypE,EAAQzvE,IAAMuqC,EAAKrmC,IAC5B8B,GAAKypE,EAAQzvE,IAAMuqC,EAAKrmC,GAAK0F,EAC7BklE,EAAO5qE,EAAIlG,KAAKyI,IAAIqoE,EAAO5qE,EAAGqmC,EAAKrmC,EAAI8B,IAG3C,SAAS6pE,GAAqBnyD,EAAOgoC,EAAY5M,GAC/C,MAAM1wB,EAAQ,GACR2mD,EAAarxD,EAAMsxD,aAAaznF,OAChC07B,EAAOvF,EAAMnvB,QACbuhF,EAAQpB,GAAsBzrD,GAAQ,EACtC8sD,EAAgBryD,EAAM4xD,YACtBJ,EAAkBjsD,EAAK+vB,YAAYm8B,kBAAoB7qE,GAAKyqE,EAAa,EAC/E,IAAK,IAAInkF,EAAI,EAAGA,EAAImkF,EAAYnkF,IAAK,CACnC,MAAMolF,EAAqBtyD,EAAM2xD,iBAAiBzkF,EAAGmlF,EAAgBD,EAAQh3B,EAAQluD,GAAIskF,GACnF5nE,EAAQtJ,KAAKC,MAAM2I,GAAUiB,GAAgBmoE,EAAmB1oE,MAAQ1C,MACxET,EAAOuhD,EAAW96D,GAClBob,EAAIiqE,GAAUD,EAAmBhqE,EAAG7B,EAAKrb,EAAGwe,GAC5Cyc,EAAYmsD,GAAqB5oE,GACjCpH,EAAOiwE,GAAiBH,EAAmBn/E,EAAGsT,EAAKiJ,EAAG2W,GAC5DqE,EAAMh1B,KAAK,CACTvC,EAAGm/E,EAAmBn/E,EACtBmV,IACA+d,YACA7jB,OACA8hB,IAAKhc,EACL7F,MAAOD,EAAOiE,EAAKiJ,EACnB6U,OAAQjc,EAAI7B,EAAKrb,IAGrB,OAAOs/B,EAET,SAAS8nD,GAAqB5oE,GAC5B,OAAc,IAAVA,GAAyB,MAAVA,EACV,SACEA,EAAQ,IACV,OAEF,QAET,SAAS6oE,GAAiBt/E,EAAGuc,EAAGvN,GAM9B,MALc,UAAVA,EACFhP,GAAKuc,EACc,WAAVvN,IACThP,GAAMuc,EAAI,GAELvc,EAET,SAASo/E,GAAUjqE,EAAGld,EAAGwe,GAMvB,OALc,KAAVA,GAA0B,MAAVA,EAClBtB,GAAMld,EAAI,GACDwe,EAAQ,KAAOA,EAAQ,MAChCtB,GAAKld,GAEAkd,EAET,SAASoqE,GAAgB1yD,EAAO6tD,GAC9B,MAAM,IAAC1uD,EAAKtuB,SAAS,YAACykD,IAAgBt1B,EACtC,IAAK,IAAI9yB,EAAI2gF,EAAa,EAAG3gF,GAAK,EAAGA,IAAK,CACxC,MAAMm+D,EAAc/V,EAAYxoB,WAAW9M,EAAM0xD,qBAAqBxkF,IAChE2kF,EAAS1pD,GAAOkjC,EAAYvsC,OAC5B,EAAC3rB,EAAC,EAAEmV,EAAC,UAAE+d,EAAS,KAAE7jB,EAAI,IAAE8hB,EAAG,MAAE7hB,EAAK,OAAE8hB,GAAUvE,EAAMkyD,iBAAiBhlF,IACrE,cAACi2D,GAAiBkI,EACxB,IAAKvoD,GAAcqgD,GAAgB,CACjC,MAAM4X,EAAe9yC,GAAcojC,EAAY0P,cACzC3f,EAAUlzB,GAAUmjC,EAAYjI,iBACtCjkC,EAAIiH,UAAY+8B,EAChB,MAAMwvB,EAAenwE,EAAO44C,EAAQ54C,KAC9BowE,EAActuD,EAAM82B,EAAQ92B,IAC5BuuD,EAAgBpwE,EAAQD,EAAO44C,EAAQv6C,MACvCiyE,EAAiBvuD,EAASD,EAAM82B,EAAQt6C,OAC1CzW,OAAO2zB,OAAO+8C,GAActL,KAAKxiD,GAAW,IAANA,IACxCkS,EAAIqE,YACJwD,GAAmB7H,EAAK,CACtBhsB,EAAGw/E,EACHrqE,EAAGsqE,EACHljE,EAAGmjE,EACHznF,EAAG0nF,EACH1vD,OAAQ23C,IAEV57C,EAAI4E,QAEJ5E,EAAIgtC,SAASwmB,EAAcC,EAAaC,EAAeC,GAG3DztD,GACElG,EACAa,EAAMsxD,aAAapkF,GACnBiG,EACAmV,EAAKupE,EAAO5yD,WAAa,EACzB4yD,EACA,CACE90D,MAAOsuC,EAAYtuC,MACnBsJ,UAAWA,EACXC,aAAc,YAKtB,SAASysD,GAAe/yD,EAAOoD,EAAQiyB,EAAUw4B,GAC/C,MAAM,IAAC1uD,GAAOa,EACd,GAAIq1B,EACFl2B,EAAIsE,IAAIzD,EAAM20B,QAAS30B,EAAM40B,QAASxxB,EAAQ,EAAGvc,QAC5C,CACL,IAAI2uC,EAAgBx1B,EAAM2xD,iBAAiB,EAAGvuD,GAC9CjE,EAAIwE,OAAO6xB,EAAcriD,EAAGqiD,EAAcltC,GAC1C,IAAK,IAAIpb,EAAI,EAAGA,EAAI2gF,EAAY3gF,IAC9BsoD,EAAgBx1B,EAAM2xD,iBAAiBzkF,EAAGk2B,GAC1CjE,EAAIyE,OAAO4xB,EAAcriD,EAAGqiD,EAAcltC,IAIhD,SAAS0qE,GAAehzD,EAAOizD,EAAc7vD,EAAQyqD,GACnD,MAAM1uD,EAAMa,EAAMb,IACZk2B,EAAW49B,EAAa59B,UACxB,MAACt4B,EAAK,UAAE+I,GAAamtD,GACrB59B,IAAaw4B,IAAgB9wD,IAAU+I,GAAa1C,EAAS,IAGnEjE,EAAI2C,OACJ3C,EAAI0G,YAAc9I,EAClBoC,EAAI2G,UAAYA,EAChB3G,EAAIotC,YAAY0mB,EAAaj4C,YAC7B7b,EAAIqtC,eAAiBymB,EAAah4C,iBAClC9b,EAAIqE,YACJuvD,GAAe/yD,EAAOoD,EAAQiyB,EAAUw4B,GACxC1uD,EAAIuE,YACJvE,EAAI8E,SACJ9E,EAAI+C,WAEN,SAASgxD,GAAwB5kD,EAAQpkC,EAAO09C,GAC9C,OAAO5e,GAAcsF,EAAQ,CAC3BsZ,QACA19C,QACAiI,KAAM,eAhOV,GAAiB5H,GAAK,cACtB,GAAiBu2B,SAAW,CAC1B2pB,MAAO,CACLz6C,SAAUwwD,GAAMV,WAAWqzB,YAC3BpyB,MAAO,CACLC,SAAS,KA8Nf,MAAM,WAA0B,GAC9B,YAAY1jB,GACV6P,MAAM7P,GACN10C,KAAK+rD,aAAUtlC,EACfzmB,KAAKgsD,aAAUvlC,EACfzmB,KAAKgpF,iBAAcviE,EACnBzmB,KAAK0oF,aAAe,GACpB1oF,KAAKspF,iBAAmB,GAE1B,gBACE,MAAM92B,EAAUxyD,KAAK28E,SAAWr9C,GAAU8oD,GAAsBpoF,KAAKiI,SAAW,GAC1E6e,EAAI9mB,KAAKiY,MAAQjY,KAAKo9B,SAAWo1B,EAAQv6C,MACzCzV,EAAIxC,KAAKkY,OAASlY,KAAK4rC,UAAY4mB,EAAQt6C,OACjDlY,KAAK+rD,QAAUr0C,KAAKuH,MAAMjf,KAAK4Z,KAAOkN,EAAI,EAAI0rC,EAAQ54C,MACtD5Z,KAAKgsD,QAAUt0C,KAAKuH,MAAMjf,KAAK07B,IAAMl5B,EAAI,EAAIgwD,EAAQ92B,KACrD17B,KAAKgpF,YAActxE,KAAKuH,MAAMvH,KAAKwI,IAAI4G,EAAGtkB,GAAK,GAEjD,sBACE,MAAM,IAAC0d,EAAG,IAAEC,GAAOngB,KAAKk9D,WAAU,GAClCl9D,KAAKkgB,IAAM5F,GAAe4F,KAAS1I,MAAM0I,GAAOA,EAAM,EACtDlgB,KAAKmgB,IAAM7F,GAAe6F,KAAS3I,MAAM2I,GAAOA,EAAM,EACtDngB,KAAK0nF,yBAEP,mBACE,OAAOhwE,KAAK0hD,KAAKp5D,KAAKgpF,YAAcZ,GAAsBpoF,KAAKiI,UAEjE,mBAAmB45C,GACjB,GAAgBjpC,UAAU4nD,mBAAmB1nD,KAAK9Y,KAAM6hD,GACxD7hD,KAAK0oF,aAAe1oF,KAAKm+C,YACtBriC,IAAI,CAAC9a,EAAOM,KACX,MAAM09C,EAAQ53C,GAASpH,KAAKiI,QAAQykD,YAAYtlD,SAAU,CAACpG,EAAOM,GAAQtB,MAC1E,OAAOg/C,GAAmB,IAAVA,EAAcA,EAAQ,KAEvC/6C,OAAO,CAACogB,EAAG/f,IAAMtE,KAAK61B,MAAMiwB,kBAAkBxhD,IAEnD,MACE,MAAMq4B,EAAO38B,KAAKiI,QACd00B,EAAK6vB,SAAW7vB,EAAK+vB,YAAYF,QACnC+7B,GAAmBvoF,MAEnBA,KAAKqpF,eAAe,EAAG,EAAG,EAAG,GAGjC,eAAemB,EAAcC,EAAeC,EAAaC,GACvD3qF,KAAK+rD,SAAWr0C,KAAKuH,OAAOurE,EAAeC,GAAiB,GAC5DzqF,KAAKgsD,SAAWt0C,KAAKuH,OAAOyrE,EAAcC,GAAkB,GAC5D3qF,KAAKgpF,aAAetxE,KAAKwI,IAAIlgB,KAAKgpF,YAAc,EAAGtxE,KAAKyI,IAAIqqE,EAAcC,EAAeC,EAAaC,IAExG,cAAcrpF,GACZ,MAAMspF,EAAkB3sE,IAAOje,KAAK0oF,aAAaznF,QAAU,GACrDkmD,EAAannD,KAAKiI,QAAQk/C,YAAc,EAC9C,OAAO5lC,GAAgBjgB,EAAQspF,EAAkBxqE,GAAU+mC,IAE7D,8BAA8BnmD,GAC5B,GAAIkZ,GAAclZ,GAChB,OAAOw9C,IAET,MAAMqsC,EAAgB7qF,KAAKgpF,aAAehpF,KAAKmgB,IAAMngB,KAAKkgB,KAC1D,OAAIlgB,KAAKiI,QAAQiT,SACPlb,KAAKmgB,IAAMnf,GAAS6pF,GAEtB7pF,EAAQhB,KAAKkgB,KAAO2qE,EAE9B,8BAA8B3pE,GAC5B,GAAIhH,GAAcgH,GAChB,OAAOs9B,IAET,MAAMssC,EAAiB5pE,GAAYlhB,KAAKgpF,aAAehpF,KAAKmgB,IAAMngB,KAAKkgB,MACvE,OAAOlgB,KAAKiI,QAAQiT,QAAUlb,KAAKmgB,IAAM2qE,EAAiB9qF,KAAKkgB,IAAM4qE,EAEvE,qBAAqBxpF,GACnB,MAAMorD,EAAc1sD,KAAK0oF,cAAgB,GACzC,GAAIpnF,GAAS,GAAKA,EAAQorD,EAAYzrD,OAAQ,CAC5C,MAAM8pF,EAAar+B,EAAYprD,GAC/B,OAAOgpF,GAAwBtqF,KAAK+5B,aAAcz4B,EAAOypF,IAG7D,iBAAiBzpF,EAAO0pF,EAAoBpC,EAAkB,GAC5D,MAAM5nE,EAAQhhB,KAAKksD,cAAc5qD,GAASgd,GAAUsqE,EACpD,MAAO,CACLr+E,EAAGmN,KAAK4L,IAAItC,GAASgqE,EAAqBhrF,KAAK+rD,QAC/CrsC,EAAGhI,KAAK2K,IAAIrB,GAASgqE,EAAqBhrF,KAAKgsD,QAC/ChrC,SAGJ,yBAAyB1f,EAAON,GAC9B,OAAOhB,KAAK+oF,iBAAiBznF,EAAOtB,KAAKssD,8BAA8BtrD,IAEzE,gBAAgBM,GACd,OAAOtB,KAAK6sD,yBAAyBvrD,GAAS,EAAGtB,KAAKohE,gBAExD,sBAAsB9/D,GACpB,MAAM,KAACsY,EAAI,IAAE8hB,EAAG,MAAE7hB,EAAK,OAAE8hB,GAAU37B,KAAKspF,iBAAiBhoF,GACzD,MAAO,CACLsY,OACA8hB,MACA7hB,QACA8hB,UAGJ,iBACE,MAAM,gBAACnG,EAAiBoxB,MAAM,SAAC6F,IAAazsD,KAAKiI,QACjD,GAAIutB,EAAiB,CACnB,MAAMe,EAAMv2B,KAAKu2B,IACjBA,EAAI2C,OACJ3C,EAAIqE,YACJuvD,GAAenqF,KAAMA,KAAKssD,8BAA8BtsD,KAAK8mF,WAAYr6B,EAAUzsD,KAAK0oF,aAAaznF,QACrGs1B,EAAIuE,YACJvE,EAAIiH,UAAYhI,EAChBe,EAAI4E,OACJ5E,EAAI+C,WAGR,WACE,MAAM/C,EAAMv2B,KAAKu2B,IACXoG,EAAO38B,KAAKiI,SACZ,WAACskD,EAAU,KAAE3F,GAAQjqB,EACrBsoD,EAAajlF,KAAK0oF,aAAaznF,OACrC,IAAIqD,EAAGqiD,EAAQkH,EAaf,GAZIlxB,EAAK+vB,YAAYF,SACnBs9B,GAAgB9pF,KAAMilF,GAEpBr+B,EAAK4F,SACPxsD,KAAK6hD,MAAMvgB,QAAQ,CAACmS,EAAMnyC,KACxB,GAAc,IAAVA,EAAa,CACfqlD,EAAS3mD,KAAKssD,8BAA8B7Y,EAAKzyC,OACjD,MAAMyhE,EAAc7b,EAAK1iB,WAAWlkC,KAAK+5B,WAAWz4B,EAAQ,IAC5D8oF,GAAepqF,KAAMyiE,EAAa9b,EAAQs+B,MAI5C14B,EAAWC,QAAS,CAEtB,IADAj2B,EAAI2C,OACC50B,EAAI2gF,EAAa,EAAG3gF,GAAK,EAAGA,IAAK,CACpC,MAAMm+D,EAAclW,EAAWroB,WAAWlkC,KAAK8oF,qBAAqBxkF,KAC9D,MAAC6vB,EAAK,UAAE+I,GAAaulC,EACtBvlC,GAAc/I,IAGnBoC,EAAI2G,UAAYA,EAChB3G,EAAI0G,YAAc9I,EAClBoC,EAAIotC,YAAYlB,EAAYrwB,YAC5B7b,EAAIqtC,eAAiBnB,EAAYpwB,iBACjCsU,EAAS3mD,KAAKssD,8BAA8B3vB,EAAKklB,MAAM3mC,QAAUlb,KAAKkgB,IAAMlgB,KAAKmgB,KACjF0tC,EAAW7tD,KAAK+oF,iBAAiBzkF,EAAGqiD,GACpCpwB,EAAIqE,YACJrE,EAAIwE,OAAO/6B,KAAK+rD,QAAS/rD,KAAKgsD,SAC9Bz1B,EAAIyE,OAAO6yB,EAAStjD,EAAGsjD,EAASnuC,GAChC6W,EAAI8E,UAEN9E,EAAI+C,WAGR,cACA,aACE,MAAM/C,EAAMv2B,KAAKu2B,IACXoG,EAAO38B,KAAKiI,QACZ6vD,EAAWn7B,EAAKklB,MACtB,IAAKiW,EAAStL,QACZ,OAEF,MAAMrF,EAAannD,KAAKksD,cAAc,GACtC,IAAIvF,EAAQ1uC,EACZse,EAAI2C,OACJ3C,EAAImE,UAAU16B,KAAK+rD,QAAS/rD,KAAKgsD,SACjCz1B,EAAI5O,OAAOw/B,GACX5wB,EAAIkH,UAAY,SAChBlH,EAAImH,aAAe,SACnB19B,KAAK6hD,MAAMvgB,QAAQ,CAACmS,EAAMnyC,KACxB,GAAc,IAAVA,IAAgBq7B,EAAKzhB,QACvB,OAEF,MAAMunD,EAAc3K,EAAS5zB,WAAWlkC,KAAK+5B,WAAWz4B,IAClDs/D,EAAWrhC,GAAOkjC,EAAYvsC,MAEpC,GADAywB,EAAS3mD,KAAKssD,8BAA8BtsD,KAAK6hD,MAAMvgD,GAAON,OAC1DyhE,EAAYnI,kBAAmB,CACjC/jC,EAAIL,KAAO0qC,EAASjoC,OACpB1gB,EAAQse,EAAIsC,YAAY4a,EAAKuL,OAAO/mC,MACpCse,EAAIiH,UAAYilC,EAAYlI,cAC5B,MAAM/H,EAAUlzB,GAAUmjC,EAAYjI,iBACtCjkC,EAAIgtC,UACDtrD,EAAQ,EAAIu6C,EAAQ54C,MACpB+sC,EAASia,EAAS/iD,KAAO,EAAI20C,EAAQ92B,IACtCzjB,EAAQu6C,EAAQv6C,MAChB2oD,EAAS/iD,KAAO20C,EAAQt6C,QAG5BukB,GAAWlG,EAAKkd,EAAKuL,MAAO,GAAI2H,EAAQia,EAAU,CAChDzsC,MAAOsuC,EAAYtuC,UAGvBoC,EAAI+C,UAEN,cAEF,GAAkB33B,GAAK,eACvB,GAAkBu2B,SAAW,CAC3Bs0B,SAAS,EACTy+B,SAAS,EACTp9B,SAAU,YACVtB,WAAY,CACVC,SAAS,EACTtvB,UAAW,EACXkV,WAAY,GACZC,iBAAkB,GAEpBuU,KAAM,CACJ6F,UAAU,GAEZtF,WAAY,EACZtF,MAAO,CACLyY,mBAAmB,EACnBlzD,SAAUwwD,GAAMV,WAAWS,SAE7BjL,YAAa,CACX6N,mBAAe9zC,EACf+zC,gBAAiB,EACjBhO,SAAS,EACTt2B,KAAM,CACJrY,KAAM,IAER,SAASmhC,GACP,OAAOA,GAETwT,QAAS,EACTq2B,mBAAmB,IAGvB,GAAkB5xB,cAAgB,CAChC,mBAAoB,cACpB,oBAAqB,QACrB,cAAe,SAEjB,GAAkBlyB,YAAc,CAC9BwnB,WAAY,CACVj0B,UAAW,SAIf,MAAM4yD,GAAY,CAChBC,YAAa,CAACC,QAAQ,EAAMvtE,KAAM,EAAGwtE,MAAO,KAC5CC,OAAQ,CAACF,QAAQ,EAAMvtE,KAAM,IAAMwtE,MAAO,IAC1CE,OAAQ,CAACH,QAAQ,EAAMvtE,KAAM,IAAOwtE,MAAO,IAC3CG,KAAM,CAACJ,QAAQ,EAAMvtE,KAAM,KAASwtE,MAAO,IAC3CvgF,IAAK,CAACsgF,QAAQ,EAAMvtE,KAAM,MAAUwtE,MAAO,IAC3CI,KAAM,CAACL,QAAQ,EAAOvtE,KAAM,OAAWwtE,MAAO,GAC9Cj9E,MAAO,CAACg9E,QAAQ,EAAMvtE,KAAM,OAASwtE,MAAO,IAC5CK,QAAS,CAACN,QAAQ,EAAOvtE,KAAM,OAASwtE,MAAO,GAC/CrhF,KAAM,CAACohF,QAAQ,EAAMvtE,KAAM,SAEvB8tE,GAASlqF,OAAO2Z,KAAK8vE,IAC3B,SAASU,GAAOjuE,EAAGC,GACjB,OAAOD,EAAIC,EAEb,SAAS4oB,GAAMpP,EAAOxzB,GACpB,GAAIsW,GAActW,GAChB,OAAO,KAET,MAAMioF,EAAUz0D,EAAM00D,UAChB,OAACC,EAAM,MAAEp0E,EAAK,WAAEzC,GAAckiB,EAAM40D,WAC1C,IAAIhrF,EAAQ4C,EASZ,MARsB,oBAAXmoF,IACT/qF,EAAQ+qF,EAAO/qF,IAEZsZ,GAAetZ,KAClBA,EAA0B,kBAAX+qF,EACXF,EAAQrlD,MAAMxlC,EAAO+qF,GACrBF,EAAQrlD,MAAMxlC,IAEN,OAAVA,EACK,MAEL2W,IACF3W,EAAkB,SAAV2W,IAAqB6H,GAAStK,KAA8B,IAAfA,EAEjD22E,EAAQI,QAAQjrF,EAAO2W,GADvBk0E,EAAQI,QAAQjrF,EAAO,UAAWkU,KAGhClU,GAEV,SAASkrF,GAA0BC,EAASjsE,EAAKC,EAAKisE,GACpD,MAAM5wE,EAAOmwE,GAAM1qF,OACnB,IAAK,IAAIqD,EAAIqnF,GAAMvvE,QAAQ+vE,GAAU7nF,EAAIkX,EAAO,IAAKlX,EAAG,CACtD,MAAM+nF,EAAWnB,GAAUS,GAAMrnF,IAC3BiwC,EAAS83C,EAAShB,MAAQgB,EAAShB,MAAQ7hF,OAAO29E,iBACxD,GAAIkF,EAASjB,QAAU1zE,KAAK0hD,MAAMj5C,EAAMD,IAAQq0B,EAAS83C,EAASxuE,QAAUuuE,EAC1E,OAAOT,GAAMrnF,GAGjB,OAAOqnF,GAAMnwE,EAAO,GAEtB,SAAS8wE,GAA2Bl1D,EAAO6nC,EAAUktB,EAASjsE,EAAKC,GACjE,IAAK,IAAI7b,EAAIqnF,GAAM1qF,OAAS,EAAGqD,GAAKqnF,GAAMvvE,QAAQ+vE,GAAU7nF,IAAK,CAC/D,MAAM4oD,EAAOy+B,GAAMrnF,GACnB,GAAI4mF,GAAUh+B,GAAMk+B,QAAUh0D,EAAM00D,SAASvyB,KAAKp5C,EAAKD,EAAKgtC,IAAS+R,EAAW,EAC9E,OAAO/R,EAGX,OAAOy+B,GAAMQ,EAAUR,GAAMvvE,QAAQ+vE,GAAW,GAElD,SAASI,GAAmBr/B,GAC1B,IAAK,IAAI5oD,EAAIqnF,GAAMvvE,QAAQ8wC,GAAQ,EAAG1xC,EAAOmwE,GAAM1qF,OAAQqD,EAAIkX,IAAQlX,EACrE,GAAI4mF,GAAUS,GAAMrnF,IAAI8mF,OACtB,OAAOO,GAAMrnF,GAInB,SAASkoF,GAAQ3qC,EAAO4qC,EAAMC,GAC5B,GAAKA,GAEE,GAAIA,EAAWzrF,OAAQ,CAC5B,MAAM,GAAC0/B,EAAE,GAAED,GAAMJ,GAAQosD,EAAYD,GAC/Bz/B,EAAY0/B,EAAW/rD,IAAO8rD,EAAOC,EAAW/rD,GAAM+rD,EAAWhsD,GACvEmhB,EAAMmL,IAAa,QAJnBnL,EAAM4qC,IAAQ,EAOlB,SAASE,GAAcv1D,EAAOyqB,EAAO/lC,EAAK8wE,GACxC,MAAMf,EAAUz0D,EAAM00D,SAChBvzB,GAASszB,EAAQI,QAAQpqC,EAAM,GAAG7gD,MAAO4rF,GACzCh8C,EAAOiR,EAAMA,EAAM5gD,OAAS,GAAGD,MACrC,IAAIm3D,EAAO72D,EACX,IAAK62D,EAAQI,EAAOJ,GAASvnB,EAAMunB,GAAS0zB,EAAQ52E,IAAIkjD,EAAO,EAAGy0B,GAChEtrF,EAAQwa,EAAIq8C,GACR72D,GAAS,IACXugD,EAAMvgD,GAAO62D,OAAQ,GAGzB,OAAOtW,EAET,SAASgrC,GAAoBz1D,EAAOhC,EAAQw3D,GAC1C,MAAM/qC,EAAQ,GACR/lC,EAAM,GACNN,EAAO4Z,EAAOn0B,OACpB,IAAIqD,EAAGtD,EACP,IAAKsD,EAAI,EAAGA,EAAIkX,IAAQlX,EACtBtD,EAAQo0B,EAAO9wB,GACfwX,EAAI9a,GAASsD,EACbu9C,EAAM/0C,KAAK,CACT9L,QACAm3D,OAAO,IAGX,OAAiB,IAAT38C,GAAeoxE,EAAqBD,GAAcv1D,EAAOyqB,EAAO/lC,EAAK8wE,GAAzC/qC,EAEtC,MAAM,WAAkB,GACtB,YAAY5hD,GACVskD,MAAMtkD,GACND,KAAKmhD,OAAS,CACZp/C,KAAM,GACNm8C,OAAQ,GACRhH,IAAK,IAEPl3C,KAAK8sF,MAAQ,MACb9sF,KAAK+sF,gBAAatmE,EAClBzmB,KAAKgtF,SAAW,GAChBhtF,KAAKitF,aAAc,EACnBjtF,KAAKgsF,gBAAavlE,EAEpB,KAAKsmD,EAAWpwC,GACd,MAAM8vD,EAAO1f,EAAU0f,OAAS1f,EAAU0f,KAAO,IAC3CZ,EAAU7rF,KAAK8rF,SAAW,IAAIz+B,GAASC,MAAMyf,EAAU1f,SAASn5C,MACtEyI,GAAQ8vE,EAAKS,eAAgBrB,EAAQsB,WACrCntF,KAAKgsF,WAAa,CAChBD,OAAQU,EAAKV,OACbp0E,MAAO80E,EAAK90E,MACZzC,WAAYu3E,EAAKv3E,YAEnBqvC,MAAMgpB,KAAKR,GACX/sE,KAAKitF,YAActwD,EAAKywD,WAE1B,MAAM9yC,EAAKh5C,GACT,YAAYmlB,IAAR6zB,EACK,KAEF9T,GAAMxmC,KAAMs6C,GAErB,eACEiK,MAAMyO,eACNhzD,KAAKmhD,OAAS,CACZp/C,KAAM,GACNm8C,OAAQ,GACRhH,IAAK,IAGT,sBACE,MAAMjvC,EAAUjI,KAAKiI,QACf4jF,EAAU7rF,KAAK8rF,SACf5+B,EAAOjlD,EAAQwkF,KAAKv/B,MAAQ,MAClC,IAAI,IAAChtC,EAAG,IAAEC,EAAG,WAAEu4B,EAAU,WAAEC,GAAc34C,KAAKy4C,gBAC9C,SAAS40C,EAAaz9C,GACf8I,GAAelhC,MAAMo4B,EAAO1vB,OAC/BA,EAAMxI,KAAKwI,IAAIA,EAAK0vB,EAAO1vB,MAExBy4B,GAAenhC,MAAMo4B,EAAOzvB,OAC/BA,EAAMzI,KAAKyI,IAAIA,EAAKyvB,EAAOzvB,MAG1Bu4B,GAAeC,IAClB00C,EAAartF,KAAKstF,mBACK,UAAnBrlF,EAAQ2nC,QAA+C,WAAzB3nC,EAAQ45C,MAAMhmC,QAC9CwxE,EAAartF,KAAKk9D,WAAU,KAGhCh9C,EAAM5F,GAAe4F,KAAS1I,MAAM0I,GAAOA,GAAO2rE,EAAQI,QAAQ7/E,KAAK+mC,MAAO+Z,GAC9E/sC,EAAM7F,GAAe6F,KAAS3I,MAAM2I,GAAOA,GAAO0rE,EAAQ0B,MAAMnhF,KAAK+mC,MAAO+Z,GAAQ,EACpFltD,KAAKkgB,IAAMxI,KAAKwI,IAAIA,EAAKC,EAAM,GAC/BngB,KAAKmgB,IAAMzI,KAAKyI,IAAID,EAAM,EAAGC,GAE/B,kBACE,MAAMmlB,EAAMtlC,KAAKwtF,qBACjB,IAAIttE,EAAM1W,OAAO4U,kBACb+B,EAAM3W,OAAOovC,kBAKjB,OAJItT,EAAIrkC,SACNif,EAAMolB,EAAI,GACVnlB,EAAMmlB,EAAIA,EAAIrkC,OAAS,IAElB,CAACif,MAAKC,OAEf,aACE,MAAMlY,EAAUjI,KAAKiI,QACfwlF,EAAWxlF,EAAQwkF,KACnB30B,EAAW7vD,EAAQ45C,MACnB6qC,EAAiC,WAApB50B,EAASj8C,OAAsB7b,KAAKwtF,qBAAuBxtF,KAAK0tF,YAC5D,UAAnBzlF,EAAQ2nC,QAAsB88C,EAAWzrF,SAC3CjB,KAAKkgB,IAAMlgB,KAAKy8D,UAAYiwB,EAAW,GACvC1sF,KAAKmgB,IAAMngB,KAAKw8D,UAAYkwB,EAAWA,EAAWzrF,OAAS,IAE7D,MAAMif,EAAMlgB,KAAKkgB,IACXC,EAAMngB,KAAKmgB,IACX0hC,EAAQ/gB,GAAe4rD,EAAYxsE,EAAKC,GAU9C,OATAngB,KAAK8sF,MAAQW,EAASvgC,OAAS4K,EAASD,SACpCq0B,GAA0BuB,EAAStB,QAASnsF,KAAKkgB,IAAKlgB,KAAKmgB,IAAKngB,KAAK2tF,kBAAkBztE,IACvFosE,GAA2BtsF,KAAM6hD,EAAM5gD,OAAQwsF,EAAStB,QAASnsF,KAAKkgB,IAAKlgB,KAAKmgB,MACpFngB,KAAK+sF,WAAcj1B,EAASK,MAAMC,SAA0B,SAAfp4D,KAAK8sF,MAC9CP,GAAmBvsF,KAAK8sF,YADyCrmE,EAErEzmB,KAAK4tF,YAAYlB,GACbzkF,EAAQiT,SACV2mC,EAAM3mC,UAED2xE,GAAoB7sF,KAAM6hD,EAAO7hD,KAAK+sF,YAE/C,gBACM/sF,KAAKiI,QAAQ4lF,qBACf7tF,KAAK4tF,YAAY5tF,KAAK6hD,MAAM/lC,IAAI23B,IAASA,EAAKzyC,QAGlD,YAAY0rF,GACV,IAEIn0B,EAAO3nB,EAFPn3B,EAAQ,EACRC,EAAM,EAEN1Z,KAAKiI,QAAQ0+C,QAAU+lC,EAAWzrF,SACpCs3D,EAAQv4D,KAAK8tF,mBAAmBpB,EAAW,IAEzCjzE,EADwB,IAAtBizE,EAAWzrF,OACL,EAAIs3D,GAEHv4D,KAAK8tF,mBAAmBpB,EAAW,IAAMn0B,GAAS,EAE7D3nB,EAAO5wC,KAAK8tF,mBAAmBpB,EAAWA,EAAWzrF,OAAS,IAE5DyY,EADwB,IAAtBgzE,EAAWzrF,OACP2vC,GAECA,EAAO5wC,KAAK8tF,mBAAmBpB,EAAWA,EAAWzrF,OAAS,KAAO,GAGhF,MAAMshE,EAAQmqB,EAAWzrF,OAAS,EAAI,GAAM,IAC5CwY,EAAQsI,GAAYtI,EAAO,EAAG8oD,GAC9B7oD,EAAMqI,GAAYrI,EAAK,EAAG6oD,GAC1BviE,KAAKgtF,SAAW,CAACvzE,QAAOC,MAAK66B,OAAQ,GAAK96B,EAAQ,EAAIC,IAExD,YACE,MAAMmyE,EAAU7rF,KAAK8rF,SACf5rE,EAAMlgB,KAAKkgB,IACXC,EAAMngB,KAAKmgB,IACXlY,EAAUjI,KAAKiI,QACfwlF,EAAWxlF,EAAQwkF,KACnBryB,EAAQqzB,EAASvgC,MAAQg/B,GAA0BuB,EAAStB,QAASjsE,EAAKC,EAAKngB,KAAK2tF,kBAAkBztE,IACtGmnE,EAAW3sE,GAAe+yE,EAASpG,SAAU,GAC7Cl6B,EAAoB,SAAViN,GAAmBqzB,EAASv4E,WACtC64E,EAAavuE,GAAS2tC,KAAwB,IAAZA,EAClCtL,EAAQ,GACd,IACI4qC,EAAMrmD,EADNmyB,EAAQr4C,EAMZ,GAJI6tE,IACFx1B,GAASszB,EAAQI,QAAQ1zB,EAAO,UAAWpL,IAE7CoL,GAASszB,EAAQI,QAAQ1zB,EAAOw1B,EAAa,MAAQ3zB,GACjDyxB,EAAQtyB,KAAKp5C,EAAKD,EAAKk6C,GAAS,IAASitB,EAC3C,MAAM,IAAIniD,MAAMhlB,EAAM,QAAUC,EAAM,uCAAyCknE,EAAW,IAAMjtB,GAElG,MAAMsyB,EAAsC,SAAzBzkF,EAAQ45C,MAAMhmC,QAAqB7b,KAAKguF,oBAC3D,IAAKvB,EAAOl0B,EAAOnyB,EAAQ,EAAGqmD,EAAOtsE,EAAKssE,GAAQZ,EAAQ52E,IAAIw3E,EAAMpF,EAAUjtB,GAAQh0B,IACpFomD,GAAQ3qC,EAAO4qC,EAAMC,GAKvB,OAHID,IAAStsE,GAA0B,UAAnBlY,EAAQ2nC,QAAgC,IAAVxJ,GAChDomD,GAAQ3qC,EAAO4qC,EAAMC,GAEhBjrF,OAAO2Z,KAAKymC,GAAOviC,KAAK,CAAC3B,EAAGC,IAAMD,EAAIC,GAAG9B,IAAIvR,IAAMA,GAE5D,iBAAiBvJ,GACf,MAAM6qF,EAAU7rF,KAAK8rF,SACf2B,EAAWztF,KAAKiI,QAAQwkF,KAC9B,OAAIgB,EAASQ,cACJpC,EAAQ3hF,OAAOlJ,EAAOysF,EAASQ,eAEjCpC,EAAQ3hF,OAAOlJ,EAAOysF,EAASP,eAAegB,UAEvD,oBAAoBzB,EAAMnrF,EAAOugD,EAAO33C,GACtC,MAAMjC,EAAUjI,KAAKiI,QACfklF,EAAUllF,EAAQwkF,KAAKS,eACvBhgC,EAAOltD,KAAK8sF,MACZF,EAAY5sF,KAAK+sF,WACjBoB,EAAcjhC,GAAQigC,EAAQjgC,GAC9BkhC,EAAcxB,GAAaO,EAAQP,GACnCn5C,EAAOoO,EAAMvgD,GACb62D,EAAQy0B,GAAawB,GAAe36C,GAAQA,EAAK0kB,MACjDnZ,EAAQh/C,KAAK8rF,SAAS5hF,OAAOuiF,EAAMviF,IAAWiuD,EAAQi2B,EAAcD,IACpEjgD,EAAYjmC,EAAQ45C,MAAMz6C,SAChC,OAAO8mC,EAAY9mC,GAAS8mC,EAAW,CAAC8Q,EAAO19C,EAAOugD,GAAQ7hD,MAAQg/C,EAExE,mBAAmB6C,GACjB,IAAIv9C,EAAGkX,EAAMi4B,EACb,IAAKnvC,EAAI,EAAGkX,EAAOqmC,EAAM5gD,OAAQqD,EAAIkX,IAAQlX,EAC3CmvC,EAAOoO,EAAMv9C,GACbmvC,EAAKuL,MAAQh/C,KAAKquF,oBAAoB56C,EAAKzyC,MAAOsD,EAAGu9C,GAGzD,mBAAmB7gD,GACjB,OAAiB,OAAVA,EAAiBw9C,KAAOx9C,EAAQhB,KAAKkgB,MAAQlgB,KAAKmgB,IAAMngB,KAAKkgB,KAEtE,iBAAiBlf,GACf,MAAMstF,EAAUtuF,KAAKgtF,SACf7vE,EAAMnd,KAAK8tF,mBAAmB9sF,GACpC,OAAOhB,KAAKgmD,oBAAoBsoC,EAAQ70E,MAAQ0D,GAAOmxE,EAAQ/5C,QAEjE,iBAAiB7a,GACf,MAAM40D,EAAUtuF,KAAKgtF,SACf7vE,EAAMnd,KAAK2lF,mBAAmBjsD,GAAS40D,EAAQ/5C,OAAS+5C,EAAQ50E,IACtE,OAAO1Z,KAAKkgB,IAAM/C,GAAOnd,KAAKmgB,IAAMngB,KAAKkgB,KAE3C,cAAc8+B,GACZ,MAAMuvC,EAAYvuF,KAAKiI,QAAQ45C,MACzB2sC,EAAiBxuF,KAAKu2B,IAAIsC,YAAYmmB,GAAO/mC,MAC7C+I,EAAQZ,GAAUpgB,KAAKujD,eAAiBgrC,EAAUz0B,YAAcy0B,EAAU10B,aAC1E40B,EAAc/2E,KAAK4L,IAAItC,GACvB0tE,EAAch3E,KAAK2K,IAAIrB,GACvB2tE,EAAe3uF,KAAKihE,wBAAwB,GAAGpjD,KACrD,MAAO,CACLiJ,EAAI0nE,EAAiBC,EAAgBE,EAAeD,EACpDlsF,EAAIgsF,EAAiBE,EAAgBC,EAAeF,GAGxD,kBAAkBG,GAChB,MAAMnB,EAAWztF,KAAKiI,QAAQwkF,KACxBS,EAAiBO,EAASP,eAC1BhjF,EAASgjF,EAAeO,EAASvgC,OAASggC,EAAe/B,YACzD0D,EAAe7uF,KAAKquF,oBAAoBO,EAAa,EAAG/B,GAAoB7sF,KAAM,CAAC4uF,GAAc5uF,KAAK+sF,YAAa7iF,GACnH2T,EAAO7d,KAAK8uF,cAAcD,GAC1BzC,EAAW10E,KAAKuH,MAAMjf,KAAKujD,eAAiBvjD,KAAKiY,MAAQ4F,EAAKiJ,EAAI9mB,KAAKkY,OAAS2F,EAAKrb,GAAK,EAChG,OAAO4pF,EAAW,EAAIA,EAAW,EAEnC,oBACE,IACI9nF,EAAGkX,EADHkxE,EAAa1sF,KAAKmhD,OAAOp/C,MAAQ,GAErC,GAAI2qF,EAAWzrF,OACb,OAAOyrF,EAET,MAAMzvB,EAAQj9D,KAAKq5C,0BACnB,GAAIr5C,KAAKitF,aAAehwB,EAAMh8D,OAC5B,OAAQjB,KAAKmhD,OAAOp/C,KAAOk7D,EAAM,GAAG1jB,WAAWgI,mBAAmBvhD,MAEpE,IAAKsE,EAAI,EAAGkX,EAAOyhD,EAAMh8D,OAAQqD,EAAIkX,IAAQlX,EAC3CooF,EAAaA,EAAWprC,OAAO2b,EAAM34D,GAAGi1C,WAAWgI,mBAAmBvhD,OAExE,OAAQA,KAAKmhD,OAAOp/C,KAAO/B,KAAKwvC,UAAUk9C,GAE5C,qBACE,MAAMA,EAAa1sF,KAAKmhD,OAAOjD,QAAU,GACzC,IAAI55C,EAAGkX,EACP,GAAIkxE,EAAWzrF,OACb,OAAOyrF,EAET,MAAMxuC,EAASl+C,KAAKm+C,YACpB,IAAK75C,EAAI,EAAGkX,EAAO0iC,EAAOj9C,OAAQqD,EAAIkX,IAAQlX,EAC5CooF,EAAW5/E,KAAK05B,GAAMxmC,KAAMk+C,EAAO55C,KAErC,OAAQtE,KAAKmhD,OAAOjD,OAASl+C,KAAKitF,YAAcP,EAAa1sF,KAAKwvC,UAAUk9C,GAE9E,UAAUt3D,GACR,OAAOyM,GAAazM,EAAO9V,KAAKssE,MAuBpC,SAAS,GAAYrrD,EAAO18B,EAAKqX,GAC/B,IAEI6zE,EAAYC,EAAYC,EAAYC,EAFpCvuD,EAAK,EACLD,EAAKH,EAAMt/B,OAAS,EAEpBia,GACErX,GAAO08B,EAAMI,GAAIxjB,KAAOtZ,GAAO08B,EAAMG,GAAIvjB,OACzCwjB,KAAID,MAAME,GAAaL,EAAO,MAAO18B,MAEvCsZ,IAAK4xE,EAAYtC,KAAMwC,GAAc1uD,EAAMI,MAC3CxjB,IAAK6xE,EAAYvC,KAAMyC,GAAc3uD,EAAMG,MAEzC78B,GAAO08B,EAAMI,GAAI8rD,MAAQ5oF,GAAO08B,EAAMG,GAAI+rD,QAC1C9rD,KAAID,MAAME,GAAaL,EAAO,OAAQ18B,MAExC4oF,KAAMsC,EAAY5xE,IAAK8xE,GAAc1uD,EAAMI,MAC3C8rD,KAAMuC,EAAY7xE,IAAK+xE,GAAc3uD,EAAMG,KAE/C,MAAMyuD,EAAOH,EAAaD,EAC1B,OAAOI,EAAOF,GAAcC,EAAaD,IAAeprF,EAAMkrF,GAAcI,EAAOF,EAtCrF,GAAUttF,GAAK,OACf,GAAUu2B,SAAW,CACnB0X,OAAQ,OACRyd,SAAU,GACVo/B,KAAM,CACJV,QAAQ,EACR7+B,MAAM,EACNv1C,OAAO,EACPzC,YAAY,EACZi3E,QAAS,cACTe,eAAgB,IAElBrrC,MAAO,CACLhmC,OAAQ,OACRs8C,MAAO,CACLC,SAAS,KAyBf,MAAMg3B,WAAwB,GAC5B,YAAYnvF,GACVskD,MAAMtkD,GACND,KAAKqvF,OAAS,GACdrvF,KAAKsvF,aAAU7oE,EACfzmB,KAAKuvF,iBAAc9oE,EAErB,cACE,MAAMimE,EAAa1sF,KAAKwvF,yBAClBjvD,EAAQvgC,KAAKqvF,OAASrvF,KAAKyvF,iBAAiB/C,GAClD1sF,KAAKsvF,QAAU,GAAY/uD,EAAOvgC,KAAKkgB,KACvClgB,KAAKuvF,YAAc,GAAYhvD,EAAOvgC,KAAKmgB,KAAOngB,KAAKsvF,QACvD/qC,MAAMqpC,YAAYlB,GAEpB,iBAAiBA,GACf,MAAM,IAACxsE,EAAG,IAAEC,GAAOngB,KACb8hC,EAAQ,GACRvB,EAAQ,GACd,IAAIj8B,EAAGkX,EAAM+tB,EAAMkY,EAAMta,EACzB,IAAK7iC,EAAI,EAAGkX,EAAOkxE,EAAWzrF,OAAQqD,EAAIkX,IAAQlX,EAChDm9C,EAAOirC,EAAWpoF,GACdm9C,GAAQvhC,GAAOuhC,GAAQthC,GACzB2hB,EAAMh1B,KAAK20C,GAGf,GAAI3f,EAAM7gC,OAAS,EACjB,MAAO,CACL,CAACwrF,KAAMvsE,EAAK/C,IAAK,GACjB,CAACsvE,KAAMtsE,EAAKhD,IAAK,IAGrB,IAAK7Y,EAAI,EAAGkX,EAAOsmB,EAAM7gC,OAAQqD,EAAIkX,IAAQlX,EAC3C6iC,EAAOrF,EAAMx9B,EAAI,GACjBilC,EAAOzH,EAAMx9B,EAAI,GACjBm9C,EAAO3f,EAAMx9B,GACToT,KAAKC,OAAOwvB,EAAOoC,GAAQ,KAAOkY,GACpClhB,EAAMzzB,KAAK,CAAC2/E,KAAMhrC,EAAMtkC,IAAK7Y,GAAKkX,EAAO,KAG7C,OAAO+kB,EAET,yBACE,IAAImsD,EAAa1sF,KAAKmhD,OAAOjK,KAAO,GACpC,GAAIw1C,EAAWzrF,OACb,OAAOyrF,EAET,MAAM3qF,EAAO/B,KAAKguF,oBACZhvC,EAAQh/C,KAAKwtF,qBAOnB,OALEd,EADE3qF,EAAKd,QAAU+9C,EAAM/9C,OACVjB,KAAKwvC,UAAUztC,EAAKu/C,OAAOtC,IAE3Bj9C,EAAKd,OAASc,EAAOi9C,EAEpC0tC,EAAa1sF,KAAKmhD,OAAOjK,IAAMw1C,EACxBA,EAET,mBAAmB1rF,GACjB,OAAQ,GAAYhB,KAAKqvF,OAAQruF,GAAShB,KAAKsvF,SAAWtvF,KAAKuvF,YAEjE,iBAAiB71D,GACf,MAAM40D,EAAUtuF,KAAKgtF,SACf7rB,EAAUnhE,KAAK2lF,mBAAmBjsD,GAAS40D,EAAQ/5C,OAAS+5C,EAAQ50E,IAC1E,OAAO,GAAY1Z,KAAKqvF,OAAQluB,EAAUnhE,KAAKuvF,YAAcvvF,KAAKsvF,SAAS,IAG/EF,GAAgBztF,GAAK,aACrBytF,GAAgBl3D,SAAW,GAAUA,SCj7UrC,IAAIw3D,GAOJ,SAASC,GAAYC,EAAqB53E,EAAW63E,EAAcj6D,GAC/Dg6D,EAAoB53E,EAAW63E,QACfppE,IAAZmP,GACAA,EAAQhtB,KAAK8mF,GAAWI,eAGhC,SAASC,GAAYl6D,EAAOD,GACxBC,EAAMkhB,cACUtwB,IAAZmP,GACAA,EAAQhtB,KAAK8mF,GAAWM,cAGhC,SAASC,GAAap6D,EAAOD,GACzBC,EAAMq6D,eACUzpE,IAAZmP,GACAA,EAAQhtB,KAAK8mF,GAAWS,gBAGhC,SAASC,GAAaruF,EAAMsuF,GACxB,MAAMC,EAAW,CACbpyC,OAA+B,qBAAhBn8C,EAAKm8C,OAAyB,GAAK,IAC3Cn8C,EAAKm8C,QAEZxoB,SAAU,IAKd,OAHA66D,GAAiBD,EAAU,IACpBvuF,GACJsuF,GACIC,EAEX,SAASC,GAAiBC,EAASC,EAASJ,GACxC,MAAMK,EAAgB,GACtBF,EAAQ96D,SAAW+6D,EAAQ/6D,SAAS5Z,IAAK60E,IAErC,MAAMC,EAAiBJ,EAAQ96D,SAASrxB,KAAM81C,GAAUA,EAAQk2C,KAAkBM,EAAYN,IAG9F,OAAKO,GAAmBD,EAAY5uF,OAAQ2uF,EAAcntD,SAASqtD,IAKnEF,EAAc5jF,KAAK8jF,GACnBnvF,OAAOoyB,OAAO+8D,EAAgBD,GACvBC,GANI,IACAD,KAQnB,SAASE,GAAeh7D,EAAOqoB,EAAQtoB,GACnCC,EAAM9zB,KAAKm8C,OAASA,OACJz3B,IAAZmP,GACAA,EAAQhtB,KAAK8mF,GAAWoB,eAGhC,SAASC,GAAgBl7D,EAAO5tB,GAC5B4tB,EAAM5tB,QAAU,IACTA,GAGX,SAAS+oF,GAAYP,EAASD,GAE1B,MAAMS,EAAmBR,EAAQ/6D,SAAS5Z,IAAKq+B,GACpCA,EAAQ6E,OAEbkyC,EAAmBV,EAAQ96D,SAAS5Z,IAAKq+B,GACpCA,EAAQ6E,OAGnB,OAAOwxC,EAAQ96D,SAASz0B,SAAWwvF,EAAQ/6D,SAASz0B,QAAUgwF,EAAiBE,MAAM,CAACnwF,EAAOM,IAAQN,IAAUkwF,EAAiB5vF,KAzEpI,SAAUouF,GACNA,EAAW,iBAAmB,iBAC9BA,EAAW,gBAAkB,gBAC7BA,EAAW,kBAAoB,kBAC/BA,EAAW,iBAAmB,kBAJlC,CAKGA,KAAeA,GAAa,KAuE/B,MAAM0B,GAAgB,wIAEhBC,GAAwB,aAC9B,SAASC,GAAcC,EAASC,EAAWC,GACvC,IAAIC,EAAY,KAChB,MAAO,CACHzxF,MAAO,CACH+X,UAAW,CACPzO,KAAM9H,OACNgK,UAAU,GAEdokF,aAAc,CACVtmF,KAAM9H,OACNgI,QAAS,QAEb4mF,aAAc,CACV9mF,KAAMyC,OACNvC,QAAS,SAEb8nF,QAAS,CACLhoF,KAAMyC,OACNvC,QAAS8nF,GAEbt5E,MAAO,CACH1O,KAAMC,OACNC,QAAS,KAEbyO,OAAQ,CACJ3O,KAAMC,OACNC,QAAS,KAEbkoF,WAAY,CACRpoF,KAAMyC,OACNvC,QAAS,IAEbghC,OAAQ,CACJlhC,KAAM9H,OACNgI,QAAS,QAEb0O,QAAS,CACL5O,KAAMxI,MACN0I,QAAS,IAAI,KAGrB,OACI,MAAO,CACH8nC,OAAQ,OAGhB3wC,SAAU,CACN,sBACI,IAAI4H,EAAKopF,EACT,MAAMC,EAA+C,QAA7BrpF,EAAMxI,KAAK6vF,oBAAkC,IAARrnF,GAAmD,QAAxBopF,EAAOppF,EAAI2P,eAA8B,IAATy5E,OAA1C,EAAqEA,EAAKP,IACxJ,MAAiC,qBAAnBQ,IAGtB,UACI,GAAMltB,SAAS8sB,IAEnB,UACIC,EAAY,CACRxqD,QAAS,MAET,aAAclnC,KAAKgY,WAAahY,KAAKgY,UAAU0d,SAASz0B,OAAS,IACjE0uF,GAAY3vF,KAAK8xF,YAAa9xF,KAAKgY,UAAWhY,KAAK6vF,cACnD7vF,KAAK8E,MAAM4qF,GAAWI,iBAG9B5tF,MAAO,CACH8V,UAAW,CACP81C,QAAS,SAASikC,EAAUC,GACxBhyF,KAAKiyF,iBAAiBF,EAAUC,IAEpCtuF,MAAM,GAEVmsF,aAAc,CACV/hC,QAAS,SAASikC,GACd/xF,KAAKkyF,oBAAoBH,IAE7BruF,MAAM,IAGdxC,QAAS,CACL,YAAaa,EAAMkG,GACf,MAAMkqF,EAAenyF,KAAKoyF,kBAK1B,GAJqB,OAAjBD,IACAlC,GAAakC,GACbnyF,KAAK8E,MAAM4qF,GAAWS,kBAErBnwF,KAAKoR,MAAM0oB,OACZ,MAAM,IAAIoL,MAAMksD,IACb,CACH,MAAMp5E,EAAYo4E,GAAaruF,EAAM/B,KAAKqwF,cACpCgC,EAAoBryF,KAAKoR,MAAM0oB,OAAOC,WAAW,MAC7B,OAAtBs4D,GACAryF,KAAKsyF,gBAAgB,IAAI,GAAMD,EAAmB,CAC9C9oF,KAAMioF,EACNzvF,KAAMiW,EACN/P,UACAkQ,QAASnY,KAAKmY,aAK9B,iBAAkB45E,EAAUC,GACxB,MAAMvB,EAAU,IACTsB,GAEDvB,EAAU,IACTwB,GAEDG,EAAenyF,KAAKoyF,kBAC1B,GAAI3wF,OAAO2Z,KAAKo1E,GAASvvF,OAAS,EAAG,CACjC,MAAMsxF,EAAiCvB,GAAYP,EAASD,GACxD+B,GAAmD,OAAjBJ,GAClC5B,GAAiB4B,EAAapwF,KAAM0uF,EAASzwF,KAAKqwF,mBAC3B5pE,IAAnBgqE,EAAQvyC,SACR2yC,GAAesB,EAAc1B,EAAQvyC,QACrCl+C,KAAK8E,MAAM4qF,GAAWoB,gBAE1B9wF,KAAKwyF,cACLxyF,KAAK8E,MAAM4qF,GAAWM,gBAED,OAAjBmC,IACAlC,GAAakC,GACbnyF,KAAK8E,MAAM4qF,GAAWS,iBAE1BR,GAAY3vF,KAAK8xF,YAAa9xF,KAAKgY,UAAWhY,KAAK6vF,cACnD7vF,KAAK8E,MAAM4qF,GAAWI,qBAGL,OAAjBqC,IACAlC,GAAakC,GACbnyF,KAAK8E,MAAM4qF,GAAWS,iBAE1BR,GAAY3vF,KAAK8xF,YAAa9xF,KAAKgY,UAAWhY,KAAK6vF,cACnD7vF,KAAK8E,MAAM4qF,GAAWI,gBAG9B,oBAAqB7nF,GACjB,MAAMkqF,EAAenyF,KAAKoyF,kBACL,OAAjBD,GACApB,GAAgBoB,EAAclqF,GAC9BjI,KAAKwyF,eAEL7C,GAAY3vF,KAAK8xF,YAAa9xF,KAAKgY,UAAWhY,KAAK6vF,eAG3D,cACI,MAAMsC,EAAenyF,KAAKoyF,kBAC1BrC,GAAYoC,IAEhB,kBACI,OAAOnyF,KAAKyyF,oBAAsBf,EAAUxqD,QAAUlnC,KAAK0yF,MAAMnhD,QAErE,gBAAiB1b,GACb71B,KAAKyyF,oBAAsBf,EAAUxqD,QAAUrR,EAAQ71B,KAAK0yF,MAAMnhD,OAAS1b,IAGnF,gBACI,MAAMs8D,EAAenyF,KAAKoyF,kBACL,OAAjBD,IACAlC,GAAakC,GACbnyF,KAAK8E,MAAM4qF,GAAWS,kBAG9BvjB,OAAQ,SAAS+lB,GACb,OAAOA,EAAc,MAAO,CACxBv8D,MAAOp2B,KAAKyqC,OACZ5nC,MAAO7C,KAAK2xF,YACb,CACCgB,EAAc,SAAU,CACpBnuF,MAAO,CACH7C,GAAI3B,KAAKuxF,QACTt5E,MAAOjY,KAAKiY,MACZC,OAAQlY,KAAKkY,QAEjB1P,IAAK,eAML,MACMoqF,GAA2BtB,GAAc,iBAAkB,WAAY,I,iBCvPjG,+BAEA,QACExxF,KAAM,mCACNiM,WAAY,CAAd,aACE3C,OAAQ,CAACC,EAAX,MACEpJ,MAAO,CACL4yF,cAAe,CACbtpF,KAAMwN,GACNtN,QAAS,MAEXyO,OAAQ,CACN3O,KAAMC,OACNC,QAAS,KAEXwO,MAAO,CACL1O,KAAMC,OACNC,QAAS,KAEXqpF,OAAQ,CACNvpF,KAAMC,OACNC,QAAS,IAEXspF,aAAc,CACZxpF,KAAM5I,SAERi8E,SAAU,CACRrzE,KAAMyC,OACNvC,QAAS,KAGb1H,KAAM,KACG,CACLiW,UAAW,GACX/P,QAAS,CACPkQ,QAAS,CACP4xC,OAAQ,CACNyC,SAAS,GAEXwmC,iBAAkB,CAChBxmC,SAAS,EACTr4B,MAAO,WAET8+D,UAAW,CACTzmC,SAAS,EACT0mC,iBAAiB,EACjBtW,SAAU,KAGd51B,OAAQ,GACR7vB,YAAY,EACZg7C,aAAc,GACd18C,YAAa,YACbD,gBAAiB,OACjB4pB,UAAW,CACT5pB,gBAAiB,2BAGrBrd,QAAS,OAGbvX,SAAU,CACR,iBACE,QAASZ,KAAK6yF,gBAGlB3wF,MAAO,CACL2wF,cAAe,CACbnvF,MAAM,EACN,gBACE1D,KAAKgY,UAAY,WACXhY,KAAKuC,YACXvC,KAAKmzF,eAIX,UAIE,MAAMA,EAAYnzF,KAAKmzF,UACvBjvF,YAAW,WACTivF,MACN,MAEEjyF,QAAS,CACP,cACE,MAAMkyF,EAAsB,IAExBpzF,KAAK6yF,cAAcp7E,WAAa27E,EAGlCpzF,KAAKiI,QAAQkqE,aAAe,EAE5BnyE,KAAKiI,QAAQkqE,aAAe,GAG9BnyE,KAAKiI,QAAQ++C,OAAShnD,KAAK8yF,OAE3B9yF,KAAKiI,QAAQkQ,QAAQ86E,UAAUC,iBAAmBlzF,KAAK+yF,aACvD/yF,KAAKiI,QAAQkQ,QAAQ86E,UAAUrW,SAAW58E,KAAK48E,UAEjD,gBACE58E,KAAKgY,UAAY,CACfkmC,OAAQ,CAChB,uDACA,0DAEQxoB,SAAU,CAClB,CACU,gBAAV,wBACU,KAAV,4DAKI,mBACE,MAAMyF,EACZ,8BACA,KACA,gCAMY63D,EAAmB,CACvBrxF,GAAI,mBACJ,mBAAmBk0B,EAAOld,EAAM06E,GAAxC,oBACU,MAAM,IAAhB,cAEgBC,EAAhB,OACA,QADA,IACA,GADA,UACA,iBADA,iBACA,iBADA,iBACA,iBADA,iBACA,0BADA,aACA,UAEU,IAAKA,EAAe,OAEpB,MAAM99D,GAChB,uLACA,UAEUe,EAAI2C,OAEJ,MAAMq6D,EAAQ19D,EAAMknB,eAAe,GAAGh7C,KAAK,GAAGwI,EACxCipF,EAAQ39D,EAAMknB,eAAe,GAAGh7C,KAAK,GAAG2d,EACxCqoC,EAAclyB,EAAMknB,eAAe,GAAGh7C,KAAK,GAAGgmD,YAC9CC,EAAcnyB,EAAMknB,eAAe,GAAGh7C,KAAK,GAAGimD,YAC9ChnC,EAAQtJ,KAAKsG,GAAK,IAElB/F,EAAQ+vC,EAAcD,EAE5BxxB,EAAIqE,YACJrE,EAAI2G,UAAYjlB,EAChBse,EAAI0G,YAAczH,EAClBe,EAAIsE,IAAI04D,EAAOC,EAAOxrC,EAAc/vC,EAAQ,EAAG,EAAW,IAAR+I,GAAa,GAC/DuV,EAAI8E,WAOF43D,EAAY,CAChBtxF,GAAI,YACJ8xF,WAAY,SAApB,+BACU,MAAM,IAAhB,+BAEgBH,EAAhB,OACA,QADA,IACA,GADA,UACA,iBADA,iBACA,iBADA,iBACA,iBADA,iBACA,mBADA,aACA,UAEgBI,EAAhB,OACA,QADA,IACA,GADA,UACA,iBADA,iBACA,iBADA,iBACA,iBADA,iBACA,mBADA,aACA,kBAEgB9W,EAAhB,OACA,QADA,IACA,GADA,UACA,iBADA,iBACA,iBADA,iBACA,iBADA,iBACA,mBADA,aACA,WAEU,IAAK0W,EAAe,OAEpB/8D,EAAI+C,UAGJ,IAAIirC,EAAWqY,IAAgB1kE,EAAS,IAAIy7E,QAAQ,GAAzB,KACvBC,EAAa,MACjB,MAAMC,EAAa,UACnBt9D,EAAIL,KAAO,GAAG09D,KAAcrvB,KAAYsvB,IAExCt9D,EAAImH,aAAe,SACnBnH,EAAIkH,UAAY,QAEhB,MAAMq2D,EAAiBJ,EAAwB,IAAM,EAE/Ch3D,EAAOvB,EACb,IAAI44D,EAAQr8E,KAAKC,OAAOM,EAAQse,EAAIsC,YAAY6D,GAAMzkB,OAAS,GAC3D+7E,EAAQ97E,EAAS47E,EAKrB,GAHAv9D,EAAI8G,SAASX,EAAMq3D,EAAOC,GAGtBN,EAAuB,CAEzB,MAAMO,EAAW,GAA7B,wDAEY1vB,GAAersD,EAAS,KAAKy7E,QAAQ,GAA1B,KACXC,EAAa,MACbr9D,EAAIL,KAAO,GAAG09D,KAAcrvB,KAAYsvB,IAExCt9D,EAAImH,aAAe,SACnBnH,EAAIkH,UAAY,QAEhBs2D,EAAQr8E,KAAKC,OAAOM,EAAQse,EAAIsC,YAAYo7D,GAAUh8E,OAAS,GAC/D+7E,EAAQ97E,EAAS,IAEjBqe,EAAI8G,SAAS42D,EAAUF,EAAOC,GAGhCz9D,EAAI2C,SAIRl5B,KAAKmY,QAAU,CAAC86E,EAAWD,IAE7B,YACOhzF,KAAK+X,iBACV/X,KAAKooE,cACLpoE,KAAKk0F,gBACLl0F,KAAKm0F,uBChPmX,MCO1X,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,MAAiB,QAKhC,IAAkB,GAAW,CAACvqF,QAAA,OCjB9B,QACE9J,KAAM,yBACNiM,WAAY,CAAd,qCACE3C,OAAQ,CAACC,EAAX,MACEpJ,MAAO,CACLwF,MAAO,CACL8D,KAAMwN,GACNtN,QAAS,IAAIsN,KAGjBnW,SAAU,CACR,kBACE,OAAO,OAAb,QAAa,CAAb,oBAEI,wBACE,OAAOZ,KAAKyF,MAAMwR,cAEpB,qBACE,OAAOjX,KAAKyF,MAAM0R,QAEpB,uBACE,OAAOnX,KAAKyF,MAAM2R,UAEpB,oBACE,OAAOpX,KAAKyF,MAAMyR,iBC9B0V,MCO9W,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAIlS,EAAIhF,KAASiF,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,eAAe,CAACX,MAAM,CAAC,MAAQQ,EAAIf,OAAO,MAAQ,GAAG,MAAQ,GAAG,MAAQ,UAAU,UAAY,IAAIU,GAAG,CAAC,OAASK,EAAIa,gBAAgBb,EAAIgD,GAAKhD,EAAIiD,QAAqCjD,EAAIiD,QAA/BjD,EAAIkD,sBAAoC,SAASC,GAAQ,OAAOhD,EAAG,YAAY,CAACiD,IAAID,EAAOxG,GAAG6C,MAAM,CAAC,OAAS,IAAI6D,YAAYrD,EAAIsD,GAAG,CAAC,CAACF,IAAI,YAAYG,GAAG,SAASC,GACha,IAAI7D,EAAK6D,EAAI7D,GACTH,EAAQgE,EAAIhE,MAChB,MAAO,CAACW,EAAG,QAAQH,EAAIyD,GAAGzD,EAAI0D,GAAG,CAAC/F,YAAY,UAAU6B,MAAM,CAAC,GAAK2D,EAAOxG,GAAG,MAAQ,KAAK,QAAQ6C,GAAM,GAAOG,GAAI,CAAEK,EAAW,QAAEG,EAAG,SAAS,CAACX,MAAM,CAAC,MAAQ,KAAK,CAACQ,EAAI2B,GAAG3B,EAAI4B,GAAGuB,EAAOU,SAAS7D,EAAIU,KAAMV,EAAW,QAAEG,EAAG,OAAO,CAACH,EAAI2B,GAAG3B,EAAI4B,GAAGuB,EAAOu0B,SAAS13B,EAAIU,MAAM,OAAO,MAAK,IAAO,CAACP,EAAG,OAAO,CAAC2D,SAAS,CAAC,YAAc9D,EAAI4B,GAAGuB,EAAOY,iBAAgB,IAC9V,GAAkB,GCDtB,IACEjJ,KAAM,uBACNsJ,OAAQ,CAACC,EAAX,MACElC,MAAO,CACLg4B,KAAM,SACN2U,MAAO,iBAET7zC,MAAO,CACLgE,OAAQ,CAAZ,yBACIgE,QAAS,CACPsB,KAAMxI,MACN0K,UAAU,IAGdvK,QAAS,CACP,QAAQiH,GACN,OAAN,OAAaA,QAAb,qBAEI,QAAQA,GACN,OAAN,OAAaA,QAAb,qBAEI,cAAcnH,GACZhB,KAAK8E,MAAM,gBAAiB9D,GAC5BhB,KAAK8E,MAAM,gBAAiB9D,MC1B8U,MCO5W,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,MAAiB,QAQhC,IAAkB,GAAW,CAAC0I,OAAA,KAAKC,aAAA,KAAWC,QAAA,KAAMC,WAAA,OC1BrCpI,cAAOC,OAAO,CAI3B0yF,cAAe,EAIf/nF,aAAc,I,0BCJD,IACbzL,SAAU,IACLyzF,eAAW,CACZC,eAAgB,0BAChBC,6BAA8B,sCAEhCC,mBACE,OAAOC,gBAAuBz0F,KAAKs0F,iBAErC9uF,oCACE,OAAOkvF,gBACL10F,KAAKw0F,iBACLx0F,KAAKu0F,iCChBT,GAAS,WAAa,IAAIvvF,EAAIhF,KAASiF,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAASD,EAAI4L,UAA22BzL,EAAG,gCAAgC,CAACX,MAAM,CAAC,MAAQQ,EAAI2vF,gBAAv5BxvF,EAAG,qBAAqB,CAACX,MAAM,CAAC,UAAY,GAAG,KAAO,GAAG,SAAW,GAAG,MAAQ,IAAI2C,MAAM,CAACnG,MAAOgE,EAAa,UAAEoC,SAAS,SAAUC,GAAMrC,EAAI9E,UAAUmH,GAAKE,WAAW,cAAcvC,EAAIgD,GAAIhD,EAAY,UAAE,SAAS4vF,GAAQ,OAAOzvF,EAAG,oBAAoB,CAACiD,IAAIwsF,EAAOC,SAASlyF,YAAY,eAAe,CAACwC,EAAG,2BAA2B,CAACH,EAAI2B,GAAG3B,EAAI4B,GAAGguF,EAAOE,eAAe3vF,EAAG,4BAA4BH,EAAIgD,GAAI4sF,EAAgB,WAAE,SAAS5jF,GAAU,OAAO7L,EAAG,MAAM,CAACiD,IAAK,kCAAqC4I,EAAmB,YAAI,CAAC7L,EAAG,IAAI,CAACxC,YAAY,2CAA2C,CAACqC,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAGoK,EAAS+jF,cAAc,OAAO/vF,EAAIgD,GAAIgJ,EAAiB,UAAE,SAAS3D,GAAS,OAAOlI,EAAG,cAAc,CAACiD,IAAK,eAAkBiF,EAAU,GAAG7I,MAAM,CAAC,QAAU6I,GAAS1I,GAAG,CAAC,cAAgBK,EAAIgwF,cAAc,cAAgBhwF,EAAI8R,qBAAoB,MAAK,IAAI,MAAK,IAC18B,GAAkB,GCDlB,GAAS,WAAa,IAAI9R,EAAIhF,KAASiF,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,UAAUH,EAAIgD,GAAIhD,EAAS,OAAE,SAASya,GAAG,OAAOta,EAAG,4BAA4B,CAACiD,IAAK,2CAA6CqX,OAAO,IACxO,GAAkB,GCDlB,GAAS,WAAa,IAAIza,EAAIhF,KAASiF,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,SAAS,CAACxC,YAAY,gDAAgD6B,MAAM,CAAC,UAAY,MAAM,CAACW,EAAG,cAAc,CAACA,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAACxC,YAAY,SAAS6B,MAAM,CAAC,KAAO,KAAK,GAAK,IAAI,GAAK,MAAM,CAACW,EAAG,MAAM,CAACA,EAAG,SAAS,CAACA,EAAG,iBAAiB,CAACX,MAAM,CAAC,IAAM,EAAE,aAAa,WAAW,YAAY,SAAS,QAAU,GAAG,KAAO,WAAW,IAAI,GAAGW,EAAG,MAAM,CAACA,EAAG,oBAAoB,CAACxC,YAAY,OAAO6B,MAAM,CAAC,KAAO,UAAU,MAAQ,SAASW,EAAG,oBAAoB,CAACX,MAAM,CAAC,KAAO,YAAY,MAAQ,SAASW,EAAG,oBAAoB,CAACX,MAAM,CAAC,KAAO,YAAY,MAAQ,UAAU,KAAKW,EAAG,QAAQ,CAACX,MAAM,CAAC,KAAO,KAAK,GAAK,IAAI,GAAK,MAAM,CAACW,EAAG,MAAM,CAACA,EAAG,oBAAoB,CAACX,MAAM,CAAC,KAAO,YAAY,MAAQ,UAAU,MAAM,GAAGW,EAAG,MAAM,CAACxC,YAAY,cAAc,IAAI,IACj1B,GAAkB,G,aCGtB,IACE7C,KAAM,4BACNiM,WAAY,CACVkpF,eAAJ,SAEE7rF,OAAQ,CAACC,EAAX,OCTqX,M,0BCOjX,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,MAAiB,QAUhC,IAAkB,GAAW,CAACyC,QAAA,KAAM2F,UAAA,QAAU6D,QAAA,KAAK4/E,SAAA,KAAM3/E,QAAA,KAAK4/E,mBAAA,OCxB9D,QACEr1F,KAAM,gCACNiM,WAAY,CAAd,8BACE3C,OAAQ,CAACC,EAAX,MACEpJ,MAAO,CACLmmC,MAAO,CACL78B,KAAMC,OACNC,QAAS,KCX2W,MCOtX,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAIzE,EAAIhF,KAASiF,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,SAAS,CAACxC,YAAY,gDAAgD6B,MAAM,CAAC,UAAY,MAAM,CAACW,EAAG,cAAc,CAACA,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAACxC,YAAY,SAAS6B,MAAM,CAAC,KAAO,KAAK,GAAK,IAAI,GAAK,IAAI,GAAK,MAAM,CAACW,EAAG,MAAM,CAACA,EAAG,SAAS,CAACA,EAAG,iBAAiB,CAACX,MAAM,CAAC,GAAKQ,EAAIowF,sBAAsB,aAAapwF,EAAIqwF,6BAA6B,YAAYrwF,EAAIswF,4BAA4B,QAAU,GAAG,KAAO,OAAO,UAAY,IAAI3wF,GAAG,CAAC,cAAgBK,EAAIuwF,mBAAmB,MAAQvwF,EAAIgwF,kBAAkB,IAAI,GAAG7vF,EAAG,MAAM,CAACxC,YAAY,eAAe,CAACwC,EAAG,qBAAqB,CAACX,MAAM,CAAC,QAAUQ,EAAIqI,WAAWlI,EAAG,KAAK,CAACxC,YAAY,iCAAiC,CAAEqC,EAAgB,aAAEG,EAAG,IAAI,CAACX,MAAM,CAAC,MAAQ,gBAAgBG,GAAG,CAAC,MAAQK,EAAIgwF,gBAAgB,CAAChwF,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIwwF,uBAAuB,OAAOrwF,EAAG,OAAO,CAACH,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5G,KAAKoP,GAAG,gCAAgC,SAASjK,EAAG,IAAI,CAACtC,MAAM,CAC78B,qCACAmC,EAAIywF,uBAAwB,CAACzwF,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAI0wF,cAAc,KAAM1wF,EAAIqI,QAAmB,YAAElI,EAAG,OAAO,CAACxC,YAAY,8BAA8B,CAACqC,EAAI2B,GAAG,KAAK3B,EAAI4B,GAAG5B,EAAIoK,GAAG,uBAAwB,CAAEg3B,MAAOphC,EAAI2wF,WAAY,OAAO3wF,EAAIU,KAAKP,EAAG,OAAO,CAACxC,YAAY,4CAA4C6B,MAAM,CAAC,MAAQ,mBAAmB,CAACQ,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIqI,QAAQ9D,MAAM,SAAUvE,EAAIqI,QAAiB,UAAElI,EAAG,MAAM,CAACxC,YAAY,2BAA2B,CAACqC,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIoK,GAAG,2BAA2B,MAAMjK,EAAG,OAAO,CAACxC,YAAY,qCAAqC,CAACqC,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAK5B,EAAIqI,QAAQuoF,UAAmB,UAAI,IAAO5wF,EAAIqI,QAAQuoF,UAAkB,UAAI,SAAS5wF,EAAIU,KAAMV,EAAa,UAAEG,EAAG,YAAY,CAACX,MAAM,CAAC,OAASQ,EAAIqI,QAAQ0D,UAAU/L,EAAIU,KAAMV,EAAgB,aAAEG,EAAG,MAAM,CAACxC,YAAY,eAAe,CAACwC,EAAG,YAAY,CAACX,MAAM,CAAC,eAAiBQ,EAAIqI,QAAQwoF,cAAc1wF,EAAG,sBAAsB,CAACX,MAAM,CAAC,SAAWQ,EAAIqI,QAAQyoF,eAAe,GAAG9wF,EAAIU,MAAM,KAAKP,EAAG,QAAQ,CAACX,MAAM,CAAC,KAAO,KAAK,GAAK,IAAI,GAAK,IAAI,GAAK,MAAM,CAACW,EAAG,MAAM,CAACxC,YAAY,yBAAyB,CAAEqC,EAAIqI,QAAkB,WAAElI,EAAG,MAAM,CAACxC,YAAY,sBAAsB,CAACqC,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIoK,GAAG,sBAAsB,MAAMjK,EAAG,OAAO,CAACxC,YAAY,sBAAsB,CAACqC,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIqI,QAAQ0oF,YAAY,SAAS/wF,EAAIU,KAAMV,EAAIqI,QAAa,MAAElI,EAAG,MAAM,CAACxC,YAAY,uBAAuB,CAACqC,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIoK,GAAG,uBAAuB,MAAMjK,EAAG,OAAO,CAACH,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIqI,QAAQ2oF,OAAO,SAAShxF,EAAIU,SAASP,EAAG,QAAQ,CAACxC,YAAY,kCAAkC6B,MAAM,CAAC,KAAO,KAAK,GAAK,KAAK,GAAK,MAAM,CAAEQ,EAAIixF,oBAAsBjxF,EAAIkxF,yBAA0B/wF,EAAG,MAAM,CAACxC,YAAY,mDAAmD,CAACwC,EAAG,kBAAkB,CAACR,GAAG,CAAC,wBAA0BK,EAAI0C,2BAA4B1C,EAAgB,aAAEG,EAAG,sBAAsB,CAACX,MAAM,CAAC,aAAaQ,EAAIqI,QAAQ1L,GAAG,UAAYqD,EAAIqI,QAAQ+I,UAAU,SAAWpR,EAAIqI,QAAQ8oF,YAAYnxF,EAAIU,MAAM,GAAGV,EAAIU,QAAQ,GAAGP,EAAG,MAAM,CAACxC,YAAY,cAAc,IAAI,IACtgE,GAAkB,GCHlB,GAAS,WAAa,IAAIqC,EAAIhF,KAASiF,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,UAAU,CAAEH,EAAIoxF,gBAAkBpxF,EAAIoxF,eAAen1F,OAAS,EAAGkE,EAAG,OAAO,CAACxC,YAAY,WAAW,CAACqC,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIoK,GAAG,gCAAgC,QAAQpK,EAAIU,KAAKV,EAAIgD,GAAIhD,EAAkB,gBAAE,SAASqxF,GAAM,OAAOlxF,EAAG,SAAS,CAACiD,IAAIiuF,EAAK10F,GAAGkB,MAAM,CAAC,eAAe2B,MAAM,CAAC,MAAQ,GAAG,MAAQ,GAAG,SAAW,KAAK,CAACQ,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAKyvF,EAAU,MAAI,KAAQA,EAAc,WAAI,WAAU,IACle,GAAkB,GCAtB,IACEp2F,MAAO,CACLm2F,eAAgB,CACd7sF,KAAMxI,MACN0I,QAAS,WACP,MAAO,OCNqU,M,aCOhV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,MAAiB,QAKhC,IAAkB,GAAW,CAAC6sF,SAAA,O,iBCvB1B,GAAS,WAAa,IAAItxF,EAAIhF,KAASiF,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,UAAU,CAACxC,YAAY,YAAY,CAACwC,EAAG,OAAO,CAACtC,MAAM,CAAC,UAAWmC,EAAIc,iBAAmB,UAAY,KAAK,CAACd,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIuxF,kBAAkB,OAAOvxF,EAAIgD,GAAIhD,EAAY,UAAE,SAASyb,EAAEnf,GAAO,OAAO6D,EAAG,SAAS,CAACiD,IAAI,SAAW9G,EAAMqB,YAAY,sBAAsB6B,MAAM,CAAC,MAAQic,EAAE+1E,UAAU,UAAU,KAAK,CAAE/1E,EAAW,UAAEtb,EAAG,SAAS,CAACX,MAAM,CAAC,KAAO,GAAG,UAAU,GAAG,MAAQ,UAAU,CAACQ,EAAI2B,GAAG,iBAAiBxB,EAAG,SAAS,CAACX,MAAM,CAAC,UAAU,GAAG,KAAO,GAAG,MAAQ,QAAQ,CAACQ,EAAI2B,GAAG,iBAAiB3B,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG6Z,EAAEg2E,UAAU,MAAM,OAAM,IACxnB,GAAkB,GCEtB,IACErtF,OAAQ,CAACC,EAAX,MACEpJ,MAAO,CACLy2F,SAAU,CACRntF,KAAMxI,MACN0I,QAAS,WACP,MAAO,MAIb1H,KAAM,WACJ,MAAO,CAAX,cAEEnB,SAAU,CACR,mBACE,GAA6B,IAAzBZ,KAAK02F,SAASz1F,OAChB,MAAO,GAGT,MAAM01F,EAAiB32F,KAAK02F,SAASzyF,OAAO,GACnC2yF,EAAOJ,WAGhB,OACN,gDACQ,MAAR,WACA,OC7B8W,MCO1W,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,MAAiB,QAMhC,IAAkB,GAAW,CAACF,SAAA,KAAM1sF,QAAA,OCxBpC,IAAI,GAAS,WAAa,IAAI5E,EAAIhF,KAASiF,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAAEH,EAAoB,iBAAEG,EAAG,MAAM,CAACA,EAAG,SAAS,CAACxC,YAAY,OAAO6B,MAAM,CAAC,MAAQ,GAAG,MAAQ,UAAU,CAACQ,EAAI2B,GAAG,eAAe3B,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIoK,GAAG,kCAAkC,MAAM,GAAGjK,EAAG,MAAM,CAACA,EAAG,QAAQ,CAACxC,YAAY,6BAA6B6B,MAAM,CAAC,MAAQ,GAAG,KAAO,IAAIG,GAAG,CAAC,MAAQK,EAAI6xF,eAAe,CAAC7xF,EAAI2B,GAAG3B,EAAI4B,GAAG5B,EAAIoK,GAAG,mCAAmCjK,EAAG,WAAW,CAACX,MAAM,CAAC,WAAa,GAAG,YAAY,OAAO2C,MAAM,CAACnG,MAAOgE,EAAU,OAAEoC,SAAS,SAAUC,GAAMrC,EAAI8xF,OAAOzvF,GAAKE,WAAW,WAAW,CAACpC,EAAG,SAAS,CAACxC,YAAY,2BAA2B,CAACwC,EAAG,eAAe,CAACH,EAAI2B,GAAG3B,EAAI4B,GAAG5B,EAAIoK,GAAG,mCAAmCjK,EAAG,cAAc,CAACA,EAAG,MAAM,CAACxC,YAAY,oBAAoB,CAACwC,EAAG,WAAW,CAACxC,YAAY,wBAAwB6B,MAAM,CAAC,mBAAmB,mBAAmB,MAAQ,SAAS,MAAQ,GAAG,OAAS,KAAK2C,MAAM,CAACnG,MAAOgE,EAAU,OAAEoC,SAAS,SAAUC,GAAMrC,EAAI+xF,OAAO1vF,GAAKE,WAAW,YAAYpC,EAAG,QAAQ,CAACX,MAAM,CAAC,KAAO,GAAG,QAAUQ,EAAIgyF,WAAW,SAAWhyF,EAAIiyF,2BAA2BtyF,GAAG,CAAC,MAAQK,EAAIkyF,0BAA0B,CAAClyF,EAAI2B,GAAG3B,EAAI4B,GAAG5B,EAAIoK,GAAG,qCAAqC,GAAGjK,EAAG,gBAAgB,CAACxC,YAAY,wBAAwB6B,MAAM,CAAC,UAAY,GAAG,OAAS,IAAI6D,YAAYrD,EAAIsD,GAAG,CAAC,CAACF,IAAI,QAAQG,GAAG,WAAW,MAAO,CAACpD,EAAG,MAAM,CAACH,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIoK,GAAG,gCAAiC3N,OAAOoyB,OAAO,GAAI7uB,EAAIoR,aAAa,SAASutB,OAAM,KAAQx8B,MAAM,CAACnG,MAAOgE,EAAY,SAAEoC,SAAS,SAAUC,GAAMrC,EAAImyF,SAAS9vF,GAAKE,WAAW,aAAa,CAACpC,EAAG,UAAU,CAACtC,MAAO,mBAAsBmC,EAAIoyF,kBAA2B,UAAG5yF,MAAM,CAAC,MAAQQ,EAAIoK,GAAG,oCAAoC,MAAQpK,EAAIoyF,kBAAkBC,aAAalyF,EAAG,UAAU,CAACtC,MAAO,mBAAsBmC,EAAIoyF,kBAAqB,IAAG5yF,MAAM,CAAC,MAAQQ,EAAIoK,GAAG,8BAA8B,MAAQpK,EAAIoyF,kBAAkBE,OAAOnyF,EAAG,UAAU,CAACtC,MAAO,mBAAsBmC,EAAIoyF,kBAAoB,GAAG5yF,MAAM,CAAC,MAAQQ,EAAIoK,GAAG,6BAA6B,MAAQpK,EAAIoyF,kBAAkBG,OAAO,GAAGpyF,EAAG,sBAAsB,CAAEH,EAAImyF,WAAanyF,EAAIoyF,kBAAkBG,GAAIpyF,EAAG,aAAa,CAACxC,YAAY,mBAAmB6B,MAAM,CAAC,SAAW,GAAG,MAAQQ,EAAIoK,GAAG,gCAAgC,MAAQpK,EAAIwyF,aAAa,QAAU,IAAI7yF,GAAG,CAAC,eAAeK,EAAIyyF,wBAAwBtwF,MAAM,CAACnG,MAAOgE,EAAe,YAAEoC,SAAS,SAAUC,GAAMrC,EAAI0yF,YAAYrwF,GAAKE,WAAW,iBAAiBvC,EAAIU,MAAM,IAAI,GAAGP,EAAG,iBAAiB,CAACA,EAAG,YAAYA,EAAG,QAAQ,CAACxC,YAAY,aAAa6B,MAAM,CAAC,KAAO,GAAG,SAAWQ,EAAIiyF,2BAA2BtyF,GAAG,CAAC,MAAQK,EAAI2yF,gBAAgB,CAAC3yF,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIoK,GAAG,oCAAoC,OAAOjK,EAAG,QAAQ,CAACxC,YAAY,WAAW6B,MAAM,CAAC,MAAQ,UAAU,QAAUQ,EAAIiyF,0BAA0B,UAAYjyF,EAAI4yF,UAAU,KAAO,IAAIjzF,GAAG,CAAC,MAAQK,EAAI6yF,eAAe,CAAC7yF,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIoK,GAAG,kCAAkC,QAAQ,GAAIpK,EAAa,UAAEG,EAAG,aAAa,CAACxC,YAAY,OAAO6B,MAAM,CAAC,KAAO,QAAQ,MAAQQ,EAAIgjE,SAAShjE,EAAIU,MAAM,IAAI,IAAI,MAC5gG,GAAkB,GCDf,MAAM0xF,GAAoB31F,OAAOC,OAAO,CAI7C41F,IAAK,EAILC,GAAI,EAIJF,UAAW,I,8BCJb,IACEtrF,WAAY,CACV+rF,WAAJ,SAEE1uF,OAAQ,CAACC,EAAX,MACEpJ,MAAO,CACL0W,UAAW,CACTpN,KAAMC,OACNiC,UAAU,GAEZ2K,UAAW,CACT7M,KAAM9H,OACNgK,UAAU,GAEZ0qF,SAAU,CACR5sF,KAAM9H,OACNgK,UAAU,IAGd1J,KAAM,WACJ,MAAO,CACLg1F,OAAQ,EACRC,YAAY,EACZe,gBAAgB,EAChBZ,SAAUC,GAAkBC,UAC5BD,kBAAN,GACMI,aAAc,CAAC,GAArB,eACME,YAAa,GACbM,kBAAkB,EAClBC,WAAW,EACXjwB,MAAO,GACP8uB,QAAQ,EACRoB,sBAAsB,IAG1Bt3F,SAAU,IACZ,gBACMq2F,0BAA2B,uCAE7B,YACE,OAAQj3F,KAAKg4F,kBAAoBh4F,KAAK+2F,OAAS,GAEjD,mBACE,OAAO/2F,KAAKm2F,SAASgC,UAAYn4F,KAAKk4F,uBAG1C,UACEl4F,KAAKo4F,4BAA8B,OAAvC,cAAuC,CAAvC,8BAEEl3F,QAAS,IACX,gBACMm3F,uBAAwB,kCACxBC,oBAAqB,iCAEvB,gCACEt4F,KAAK+2F,OAAS,EACd/2F,KAAKg3F,YAAa,EAElB,IACE,MAAM3jF,QAAiBrT,KAAKq4F,uBAAuB,CACjD1hF,UAAW3W,KAAK2W,YAGlB0B,OAAOkgF,KAAKllF,EAAStR,KAAKy2F,IAAK,UALtC,QAOOx4F,KAAKg3F,YAAa,EAClBh3F,KAAK23F,kBAGT,eACE33F,KAAK82F,QAAS,EACT92F,KAAKy4F,OAAOz4F,KAAKo4F,+BAExB,qBACEp4F,KAAK04F,aACL14F,KAAK+3F,gBAAiB,EAEtB,MAAM1kF,QAAiBrT,KAAKs4F,oBAAoB,CAC9C3hF,UAAW3W,KAAK2W,UAChB5U,KAAM,CACJg1F,OAAQ/2F,KAAK24F,cACbxB,SAAUn3F,KAAKm3F,SACfyB,QAAS54F,KAAK03F,eAIbrkF,EAAS1E,WAIZ3O,KAAKk4F,sBAAuB,EAC5Bl4F,KAAK23F,kBAJL33F,KAAKi4F,WAAY,EACjBj4F,KAAKgoE,MAAQ30D,EAAS20D,OAMxBhoE,KAAK+3F,gBAAiB,GAExB,cACE,IAAIc,EAAoB74F,KAAK+2F,OAAS,EAStC,OANI8B,EAAoB,EACtBA,EAAoB,EAC5B,MACQA,EAAoB,GAGfA,GAET,gBACE74F,KAAK+2F,OAAS,EACd/2F,KAAKm3F,SAAWC,GAAkBC,UAClCr3F,KAAK03F,YAAc,GACnB13F,KAAK04F,aACL14F,KAAK82F,QAAS,GAEhB,aACE92F,KAAKgoE,MAAQ,GACbhoE,KAAKi4F,WAAY,GAEnB,uBAAuBa,GACrB94F,KAAKg4F,iBAAmBc,GAE1B,qBACE,MAAMC,EAAmB,OAA/B,QAA+B,CAC/B,YACA,CACQ,UAAR,eACQ,WAAR,0BAEA,GAEM/4F,KAAKg5F,aAAaC,WAAW,CAC3Bn5F,KAAM,gBACN+1C,WAAYkjD,OC7I0V,M,wKCyB9W,MAAMj3F,GAAa,OAAAsH,EAAA,MAAO,GAAD,qBAIvB,eAJuB,cAAzB,SAae,OAAAtH,GAAA,gBAAoC,CACjDhC,KADiD,UAGjDsD,cAHiD,EAKjDnD,MAAO,CACLE,SADK,QAELwB,GAFK,OAGLq9C,MAHK,OAILl/C,KAJK,OAKLo5F,QAAS,CACP3vF,KADO,OAEPE,QAAS,aAEX0vF,OAAQ,CACN5vF,KADM,OAENE,QAAS,YAEXhJ,SAbK,QAcLO,MAAO,CACLyI,QAAS,OAIb1H,KAAM,KAAM,CACVq3F,WAAW,IAGbx4F,SAAU,CACR,UACE,MAAO,CACL,uBAAwBZ,KADnB,WAEL,sBAAuBA,KAFlB,aAGFA,KAHE,gBAIFA,KAAKq5F,eAGZ,gBACE,OAAO,4CAAP,OAEF,eACE,OAAOr5F,KAAKgC,SACRhC,KADG,OAEHA,KAFJ,SAIF,aACE,OAAOs5F,GAAA,sCAAP,OAEFC,SAAUD,GAAA,sBApBF,SAqBR,WACE,OAAQt5F,KAAKw5F,YAAN,IAAP,UAEF,aACE,OAAOx5F,KAAKG,YACRH,KAAF,YACAA,KAAKw5F,WAFP,YAKF,aACE,OAAOx5F,KAAKS,YACRT,KAAF,YACAA,KAAKw5F,WAFP,YAKF,eACE,OAAIx5F,KAAKF,OAASE,KAAlB,WACSA,KAAP,KAGKA,KAAKw5F,WAAW15F,MAAQ,SAASE,KAAKw5F,WAAW11F,MAE1D,cACE,OAAO,0CAAP,OAEF,kBACE,OAAQ9D,KAAKw5F,YAAN,qBAA2Cx5F,KAAlD,gBAIJkB,QAAS,CACP,SAAQ,GAIN,OAAO,mDAAP,IAEF,WACE,OAAKlB,KAAL,SAEOA,KAAKkF,eAAeu0F,GAApB,KAA4B,CACjC90F,GAAI,CAEF+0F,MAAO,SAETl1F,MAAO,CACLm1F,IAAK35F,KAAK45F,YAEZ35F,MAAO,CACLk0B,MAAOn0B,KADF,gBAEL65F,QAAS75F,KAAK85F,WAEf,gBAAQ95F,KAAR,UAA0BA,KAZ7B,OAF2B,MAgB7B,WACE,MAAM,WAAY+5F,GAAe/5F,KAAjC,OAEA,OAAOA,KAAKkF,eAAe,MAAO,CAChCvC,YAAa,sCACZ,CACD3C,KAAKkF,eAAe,GAApB,KAA2BlF,KAAKg6F,aAAah6F,KAAlB,gBAAwC,CACjEC,MAAO,CACLg6F,MAAOj6F,KAAKw5F,YAAcx5F,KAAKw5F,WAAWS,SAE1Cj6F,KALH,cAMDA,KAAKk6F,SAAS,CACZp6F,KAAME,KADM,aAEZgB,MAAOhB,KAFK,SAGT+5F,IAEL/5F,KAAKm6F,UAAUn6F,KAAKg6F,aAAah6F,KAbnC,iBAgBF,QAAO,GACLA,KAAA,aACAA,KAAA,kBAEF,OAAM,GACJA,KAAA,aACAA,KAAA,iBAEF,WACMA,KAAKo6F,YAAcp6F,KAAnB,YAAsCA,KAA1C,UAEAA,KAAA,UAEFq6F,UAAW,QAGb,OAAM,GACJ,MAAMt4F,EAAkB,CACtBY,YADsB,UAEtBE,MAAO7C,KAFe,QAGtB2E,GAAI,gBAAe,CACjB+0F,MAAO15F,KAAKs6F,UACXt6F,KALmB,YAMtBwE,MAAO,CAAEsP,MAAO9T,KAAK0E,OAAOoP,QAG9B,OAAOtR,EAAE,MAAOT,EAAM,CACpB/B,KADoB,WAEpBA,KAFF,gB,mCC9KJ,MAAM,GAAa,OAAAoJ,EAAA,MAAO,GAAD,KAAzB,SAMe,iBAAkB,CAC/BtJ,KAD+B,gBAG/B,UACE,MAAO,CACL05F,WAAYx5F,OAIhBC,MAAO,CACLs6F,OAAQ,CACNhxF,KADM,QAENE,SAAS,GAEXyO,OAAQ,CACN3O,KAAM,CAACC,OADD,QAENC,QAAS,QAEX3J,KATK,OAULq6E,IAVK,QAcLn5E,MAAO,MAGTJ,SAAU,CACR,UACE,MAAO,IACF04F,GAAA,mCADE,MAEL,oDAFK,EAGL,+BAAgCt5F,KAAKu6F,SAAWv6F,KAH3C,IAIL,4BAA6BA,KAAKm6E,OAKxCj5E,QAAS,CACP,iBACE,OAAOlB,KAAKkF,eAAe,MAAO,CAChCvC,YADgC,8BAEhC6B,MAAO,CACL7C,GAAI3B,KADC,GAELw6F,KAFK,aAGL,kBAAmBx6F,KAAK45F,aAEzBN,GAAA,yCAPH,QASF,eACE,MAAM1sB,EAAS0sB,GAAA,uCAAf,MAIA,cAFO1sB,EAAA,QAAP,MAEA,GAEF,WACE,MAAM5tB,EAAQs6C,GAAA,mCAAd,MAEA,UAEAt6C,EAAA,cAAwBh/C,KALlB,kBAOCg/C,EAAA,WAAP,IACAA,EAAA,aAEA,GAPmB,MASrB/nB,QAAS,wBAA8BA,SAGzC,OAAM,GACJ,MAAMwjE,EAAQnB,GAAA,8BAAd,GAIA,OAFAt5F,KAAA,GAAQy6F,EAAR,WAA4Bz6F,KAA5B,QAEA,K,sCC9DW,UAAAoJ,EAAA,MAAO,GAAD,6BAAN,gBAMN,CACPtJ,KADO,WAGPG,MAAO,CACLu1B,gBAAiB,CACfjsB,KADe,OAEfE,QAAS,UAEX0qB,MAAO,CACL5qB,KADK,OAELE,QAAS,WAEXixF,UATK,QAULT,MAVK,QAWLU,UAAW,CACTpxF,KADS,OAETE,QAAS,gBAEXmxF,SAAU,CACRrxF,KADQ,OAERE,QAAS,eAEXoxF,SAAU,CACRtxF,KADQ,OAERE,QAAS,eAEXqxF,eAvBK,QAwBLz6F,MAxBK,QAyBLY,OAAQ,CACNsI,KAAM,CAACC,OADD,QAENC,QAAS,GAEXhJ,SA7BK,QA8BLod,KAAM,CAACrU,OA9BF,QA+BLxI,MAAO,CACLuI,KADK,OAELE,QAAS,GAEXsxF,UAAW,CACTxxF,KADS,OAETE,QAAS,mCAIb,OACE,MAAO,CACLuxF,YADK,EAELC,cAAej7F,KAAKgB,QAIxBJ,SAAU,CACR,aACE,OAAIZ,KAAKS,WAAaT,KAAtB,OAA0C,GAEnC,CAAC,CACNF,KADM,SAENkB,MAAO,CAAEk6F,QAAQ,MAGrB,YACE,MAAM,+DAQJC,GACEn7F,KATJ,OAWA,MAAO,yDAQLm7F,WAGJ,aACE,OAAOn7F,KAAKK,OAASL,KAAKg7F,YAA1B,IAIJ94F,MAAO,CACL,cAAa,GACX2B,IAAQ7D,KAAR,OAAsBA,KAAK8E,MAAM,QAAjCjB,IAEF,MAAK,GACH7D,KAAA,kBAIJkB,QAAS,CACP,cAAa,GACX,OAAQ2D,IACN,GAAI7E,KAAJ,SAAmB,OAEnB,MAAM+xF,EAAW/xF,KAAKo7F,cAAcv2F,EAApC,GACI7E,KAAK06F,WAAa16F,KAAKi7F,gBAA3B,EACEj7F,KAAA,gBAEAA,KAAA,kBAIN,YAAW,GACT,MAAMC,EAAuB,CAC3BqB,MAD2B,EAE3BN,MAAOhB,KAFoB,cAG3B05F,MAAO15F,KAAKq7F,cAHe,GAI3BC,SAAU5jF,KAAA,MAAW1X,KAAX,eAJiB,EAK3Bu7F,UAAW7jF,KAAA,MAAW1X,KAAX,YAA8BsE,GAQ3C,OALItE,KAAJ,iBACEC,EAAA,eAAuBA,EAAD,YAAqBD,KAAKg7F,WAAN,KAA1C,EACA/6F,EAAA,cAAsBA,EAAD,WAAoBD,KAAKi7F,cAAN,KAAxC,GAGF,GAEF,cAAa,KACX,IAAIO,EAASx7F,KAAKy7F,YAAlB,GASA,OANEz7F,KAAK86F,gBACL96F,KAAK07F,SAFP,MAIEF,MAGKl3F,GAAKk3F,EAAS,GAArB,IAEF,YAAW,GACT,MAAMG,EAAS37F,KAAK47F,WAAa37F,EAAlB,UAAoCA,EAAnD,SACMu7F,EAASx7F,KAAK47F,WAAa37F,EAAlB,cAAwCA,EAAvD,aAEA,OAAO07F,EAAS37F,KAAH,SAAmBw7F,EAASx7F,KAAH,SAAmBA,KAAzD,WAEF,SAAQ,GACN,GAAIA,KAAJ,YACE,GAAIC,EAAA,WAAmBA,EAAvB,cAA4C,OAAOD,KAAP,WAE5C,GAAIC,EAAA,UAAkBA,EAAtB,aAA0C,OAAOD,KAAP,MAG5C,OAAOA,KAAP,iBAEF,YAAW,GACT,GAAIA,KAAJ,eAAyB,CACvB,MAAMk7B,EAAOr2B,EAAA,QAAaA,EAAA,OAA1B,wBACA,GAAIq2B,GAASr2B,EAAA,MAAUq2B,EAAX,KAAwBA,EAAA,MAApC,EAAoD,OAAO,EAG7D,UAEF,aAAY,KACVl7B,KAAA,gBAAsB,KACpBA,KAAA,WAAkBA,KAAKo7F,cAAcv2F,EAArC,MAGJ,eACE7E,KAAA,iBAAuB,IAAOA,KAAKg7F,YAAnC,IAEF,QAAO,GACL,MAAM/6F,EAAQD,KAAK67F,YAAnB,GAEA,GAAI77F,KAAK6N,aAAT,KAA4B,OAAO7N,KAAK6N,aAAazM,KAAzB,GAE5B,MAAM+/B,EAAsC,CAC1Cu4D,MAAOz5F,EAAMy5F,OAYf,OATI15F,KAAJ,QACEmhC,EAAA,WAAwBt8B,GAAkB7E,KAAK87F,aAAaj3F,EAA5D,GACAs8B,EAAA,WAAuBnhC,KAAvB,aAEIA,KAAJ,iBACEmhC,EAAA,UAAuBt8B,GAAkB7E,KAAK87F,aAAaj3F,EAA3D,KAIG7E,KAAKkF,eAAe,GAApB,KAA2BlF,KAAKg6F,aAAah6F,KAAK+7F,SAAvB,GAAwC,CACxEv3F,MAAO,CACL,aAAcxE,KAAK07F,SAASM,KAAK75E,EAAEniB,KAArB,UAAqCsE,EAArC,EAA4CkF,OAAOxJ,KAAnD,UAEhB4C,WAAY5C,KAJ4D,WAKxEC,MAAOD,KALiE,UAMxE2E,GAAIw8B,IACF,CAACnhC,KAAKi8F,YAPV,OAWJ,OAAM,GACJ,MAAMC,EAAW,gBAAY1yF,OAAOxJ,KAAnB,aAAqCsE,GAAKtE,KAAKm8F,QAAhE,IAEA,OAAO35F,EAAE,MAAO,CACdG,YADc,WAEdE,MAAO,CACL,qBAAsB7C,KADjB,SAEL,kBAAmBA,KAAKi6F,QAJ5B,MCtOJ,SAASmC,GAAcxmE,GAErB51B,KAAK,UAAa,cAAOq8F,QAAU,cAMrC,IAAI,GAAY,eACd,GACA,GACA,IACA,EACAD,GACA,KACA,MAIa,MAAiB,QAiBhC,IAAkB,GAAW,CAAC1yF,OAAA,KAAKoC,QAAA,KAAM0F,aAAA,QAAaC,UAAA,QAAUC,WAAA,QAAWkC,WAAA,KAAQ0oF,kBAAA,QAAkB1yF,QAAA,KAAM2yF,OAAA,GAAOC,YAAA,GAAYC,QAAA,GAAQ3qF,WAAA,KAAQE,aAAA,O,8BCrC/HvQ,I,UAAAA,OAAOC,OAAO,CAM3Bg7F,gBAAiB,kBAKjBvlF,OAAQ,SAKRC,SAAU,WAKVulF,SAAU,cC5BR,GAAS,WAAa,IAAI33F,EAAIhF,KAASiF,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,SAAS,CAACX,MAAM,CAAC,SAAWQ,EAAI7E,SAAS,WAAW,IAAIkI,YAAYrD,EAAIsD,GAAG,CAAC,CAACF,IAAI,YAAYG,GAAG,SAASC,GAC5M,IAAI7D,EAAK6D,EAAI7D,GACTH,EAAQgE,EAAIhE,MAChB,MAAO,CAACW,EAAG,QAAQH,EAAIyD,GAAGzD,EAAI0D,GAAG,CAAC/F,YAAY,oCAAoC6B,MAAM,CAAC,KAAO,KAAK,QAAQA,GAAM,GAAOG,GAAI,CAACQ,EAAG,SAAS,CAACH,EAAI2B,GAAG,wBAAwB,SAAS,CAACxB,EAAG,SAAS,CAACA,EAAG,cAAc,CAACxC,YAAY,uCAAuCgC,GAAG,CAAC,MAAQ,SAASuB,GAAQ,OAAOlB,EAAIF,MAAM,8BAA8B,CAACK,EAAG,mBAAmB,CAACA,EAAG,SAAS,CAACX,MAAM,CAAC,MAAQ,MAAM,KAAO,KAAK,CAACQ,EAAI2B,GAAG,gBAAgB,GAAGxB,EAAG,sBAAsB,CAACA,EAAG,oBAAoB,CAACxC,YAAY,aAAa,CAACqC,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIoK,GAAG,6BAA6B,QAAQ,IAAI,IAAI,IAAI,IACtkB,GAAkB,GCDtB,IACEtP,KAAM,kBACNsJ,OAAQ,CAACC,EAAX,MACEpJ,MAAO,CACLE,SAAU,CACRoJ,KAAM5I,WCR8V,M,iECOtW,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,MAAiB,QAYhC,IAAkB,GAAW,CAAC+I,OAAA,KAAKE,QAAA,KAAMgzF,SAAA,KAAMC,aAAA,KAAUC,iBAAA,QAAiBC,iBAAA,KAAcC,eAAA,QAAeC,SAAA,OC9BvG,IAAI,GAAS,WAAa,IAAIj4F,EAAIhF,KAASiF,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,IAAI,CAACxC,YAAY,gEAAgE,CAACqC,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAI,IAAO5B,EAAIqI,QAAU,IAAI,KAAMrI,EAAmB,gBAAEG,EAAG,OAAO,CAACxC,YAAY,eAAe,CAACwC,EAAG,YAAY,CAACX,MAAM,CAAC,OAASQ,EAAIc,iBAAiB,IAAMd,EAAIc,kBAAkBuC,YAAYrD,EAAIsD,GAAG,CAAC,CAACF,IAAI,YAAYG,GAAG,SAASC,GACra,IAAI7D,EAAK6D,EAAI7D,GACTH,EAAQgE,EAAIhE,MAChB,MAAO,CAACW,EAAG,OAAOH,EAAIyD,GAAGzD,EAAI0D,GAAG,GAAG,OAAOlE,GAAM,GAAOG,GAAI,CAACQ,EAAG,OAAO,CAACxC,YAAY,QAAQ,CAACqC,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAI,MAAS5B,EAAIqI,QAAiB,WAAI,aAAa,MAAK,EAAM,aAAa,CAAClI,EAAG,OAAO,CAACH,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIqI,QAAQ6vF,kBAAkB,UAAU,GAAGl4F,EAAIU,KAAMV,EAA4B,yBAAEG,EAAG,SAAS,CAACxC,YAAY,OAAO6B,MAAM,CAAC,KAAO,GAAG,MAAQ,UAAU,UAAU,KAAK,CAACQ,EAAI2B,GAAG3B,EAAI4B,GAAG5B,EAAIoK,GAAG,qCAAqCpK,EAAIU,MAAM,IAC1b,GAAkB,GCAtB,IACE5F,KAAM,qBACNsJ,OAAQ,CAACC,EAAX,MACEpJ,MAAO,CACLoN,QAAS,CACP9D,KAAM9H,OACNgK,UAAU,IAGd7K,SAAU,CACR,kBAAJ,MACM,QAAN,oDAEI,2BACE,OAAOZ,KAAKqN,QAAQoG,SAAW0pF,GAAoBT,mBClBqT,MCO1W,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,MAAiB,QAMhC,IAAkB,GAAW,CAACpG,SAAA,KAAMzsF,WAAA,OCVpC,QACE/J,KAAM,cACNiM,WAAY,CACVqxF,UAAJ,GACIC,oBAAJ,GACIC,UAAJ,QACIC,oBAAJ,GACItI,eAAJ,QACIuI,gBAAJ,GACIC,mBAAJ,IAEEr0F,OAAQ,CAACC,EAAX,cACEpJ,MAAO,CACLoN,QAAS,CACP9D,KAAM9H,OACNgK,UAAU,IAGd1J,KAAM,KACG,CACL27F,cAAe,OAGnB98F,SAAU,IACZ,gBACM0N,mBAAoB,4BACpBqvF,iEACN,0EAEI,UACE,IAAK39F,KAAKqN,QAAQuwF,YAAa,OAAO,EAEtC,MAAM97D,EAAQ9hC,KAAKqN,QAAQwwF,SAAS55F,OAC1C,0BAEM,GAAqB,IAAjB69B,EAAM7gC,OAAc,OAAO,EAE/B,MAAM68F,EAAU9vD,KAAKxH,MAAM1E,EAAM,GAAGpF,MACpC,OAAOohE,EAAQC,UAEjB,YACE,OAAO/9F,KAAKqN,QAAQ0D,OAAO9P,OAAS,GAEtC,eACE,OAAOjB,KAAKqN,QAAQ+I,WAAapW,KAAKqN,QAAQ+I,UAAUzU,GAAK,GAE/D,uBACE,OAAQ3B,KAAKqN,QAAQuwF,YAAmB,+BAAL,IAErC,eACE,MAAO,GAAG59F,KAAKg+F,aACrB,sCACA,oDAEI,wBACE,OAAKh+F,KAAKi+F,aACH,GAAGj+F,KAAKqN,QAAQ+I,UAAU8nF,aAAal+F,KAAKqN,QAAQ+I,UAAU+nF,WADtC,IAGjC,wBACE,OAAOn+F,KAAKi+F,aAAej+F,KAAKqN,QAAQ+I,UAAUzU,IAAM,GAE1D,+BACE,OAAQ3B,KAAKi+F,aAAsBj+F,KAAKqN,QAAQ+I,UAAU8nF,UAA9B,MAE9B,8BACE,OAAQl+F,KAAKi+F,aAAsBj+F,KAAKqN,QAAQ+I,UAAU+nF,SAA9B,MAE9B,oBACE,OAAOn+F,KAAK29F,iEAClB,0BAGI,2BACE,OAAO39F,KAAKqN,QAAQoG,SAAW0pF,GAAoBT,kBAGvDx7F,QAAS,CACP,gBACE,GAAIlB,KAAKi+F,aAAc,CACrB,MAAMG,EAAiB,CACrBz8F,GAAI3B,KAAKqN,QAAQ+I,UAAUzU,GAC3B08F,SACV,iCACA,IACA,gCACUC,cAAet+F,KAAK09F,eAEtB19F,KAAK8E,MAAM,gBAAiBs5F,KAGhC,mBAAmBr8F,GACjB/B,KAAK09F,cAAgB37F,GAEvB,0BACE/B,KAAK8E,MAAM,gBAAiB9E,KAAKqN,YC5G8T,MCOjW,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,MAAiB,QAShC,IAAkB,GAAW,CAACvB,QAAA,KAAM2F,UAAA,QAAU6D,QAAA,KAAK4/E,SAAA,KAAM3/E,QAAA,OCrBzD,QACEzV,KAAM,yBACNiM,WAAY,CAAd,iDACE3C,OAAQ,CAACC,EAAX,MACEpJ,MAAO,CACL00F,aAAc,CACZprF,KAAMC,OACNC,QAAS,GAEXwC,SAAU,CACR1C,KAAMxI,MACN0I,QAAS,IAAM,IAEjB/C,UAAW,CACT6C,KAAM5I,UAGVoB,KAAM,KACG,CACL7B,UAAW,KAGfU,SAAU,CACR,YACE,OAAOZ,KAAK20F,aAAe,IAG/BzyF,MAAO,CACL,YACElC,KAAKu+F,6BAEP,eACOv+F,KAAK0G,UAIR1G,KAAKu+F,4BAFLv+F,KAAKE,UAAU4M,KAAK,KAM1B5L,QAAS,CACP,4BACElB,KAAKE,UAAYF,KAAK0G,UAC5B,sDACA,IAEI,cAAc1F,GACZhB,KAAK8E,MAAM,gBAAiB9D,IAE9B,cAAcA,GACZhB,KAAK8E,MAAM,gBAAiB9D,MCxD+V,M,oDCO7X,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,MAAiB,QAQhC,IAAkB,GAAW,CAACw9F,mBAAA,KAAgBC,0BAAA,KAAuBC,yBAAA,KAAsBC,oBAAA,OC1B3F,IAAI,GAAS,WAAa,IAAI35F,EAAIhF,KAASiF,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAASD,EAAI4L,UAAg1BzL,EAAG,2BAA2B,CAACX,MAAM,CAAC,KAAOQ,EAAI2vF,gBAAt3BxvF,EAAG,qBAAqB,CAACX,MAAM,CAAC,UAAY,GAAG,KAAO,GAAG,SAAW,GAAG,MAAQ,IAAI2C,MAAM,CAACnG,MAAOgE,EAAa,UAAEoC,SAAS,SAAUC,GAAMrC,EAAI9E,UAAUmH,GAAKE,WAAW,cAAcvC,EAAIgD,GAAIhD,EAAY,UAAE,SAAS4vF,GAAQ,OAAOzvF,EAAG,oBAAoB,CAACiD,IAAIwsF,EAAOC,SAASlyF,YAAY,eAAe,CAACwC,EAAG,2BAA2B,CAACH,EAAI2B,GAAG3B,EAAI4B,GAAGguF,EAAOE,eAAe3vF,EAAG,4BAA4BH,EAAIgD,GAAI4sF,EAAgB,WAAE,SAAS5jF,GAAU,OAAO7L,EAAG,MAAM,CAACiD,IAAK,kCAAqC4I,EAAmB,YAAI,CAAC7L,EAAG,YAAY,CAACxC,YAAY,mBAAmB6B,MAAM,CAAC,KAAO,GAAG,MAAQ,KAAK,CAACW,EAAG,kBAAkB,CAACxC,YAAY,iCAAiC,CAACqC,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAGoK,EAAS+jF,cAAc,QAAQ,GAAG5vF,EAAG,cAAc,CAACX,MAAM,CAAC,SAAWwM,EAAS/E,UAAUtH,GAAG,CAAC,cAAgBK,EAAI8R,kBAAkB,MAAK,IAAI,MAAK,IAC/6B,GAAkB,GCDlB,GAAS,WAAa,IAAI9R,EAAIhF,KAASiF,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,UAAUH,EAAIgD,GAAIhD,EAAU,QAAE,SAAS45F,EAAMt9F,GAAO,OAAO6D,EAAG,MAAM,CAACiD,IAAI9G,GAAO,CAAC6D,EAAG,oBAAoB,CAACxC,YAAY,YAAY6B,MAAM,CAAC,KAAO,UAAU,MAAQ,WAAWW,EAAG,sBAAsB,CAACX,MAAM,CAAC,KAAOQ,EAAI65F,SAAS,MAAK,IACrU,GAAkB,GCDlB,GAAS,WAAa,IAAI75F,EAAIhF,KAASiF,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,UAAU,CAACA,EAAG,eAAe,CAACxC,YAAY,mCAAmC6B,MAAM,CAAC,QAAUQ,EAAI85F,QAAQ,MAAQ95F,EAAI+5F,oBAAoB,sBAAsB,GAAG,eAAe,IAAI12F,YAAYrD,EAAIsD,GAAG,CAAC,CAACF,IAAI,UAAUG,GAAG,WAAW,MAAO,CAACpD,EAAG,oBAAoB,CAACX,MAAM,CAAC,KAAO,YAAYm/B,OAAM,GAAM,CAACv7B,IAAI,YAAYG,GAAG,WAAW,MAAO,CAACpD,EAAG,oBAAoB,CAACX,MAAM,CAAC,KAAO,YAAYm/B,OAAM,GAAM,CAACv7B,IAAI,YAAYG,GAAG,WAAW,MAAO,CAACpD,EAAG,oBAAoB,CAACX,MAAM,CAAC,KAAO,YAAYm/B,OAAM,GAAM,CAACv7B,IAAI,YAAYG,GAAG,WAAW,MAAO,CAACpD,EAAG,oBAAoB,CAACX,MAAM,CAAC,KAAO,YAAYm/B,OAAM,GAAM,CAACv7B,IAAI,cAAcG,GAAG,WAAW,MAAO,CAACpD,EAAG,MAAM,CAACxC,YAAY,oBAAoB,CAACwC,EAAG,oBAAoB,CAACxC,YAAY,OAAO6B,MAAM,CAAC,KAAO,UAAUW,EAAG,oBAAoB,CAACX,MAAM,CAAC,KAAO,WAAW,KAAKm/B,OAAM,GAAM,CAACv7B,IAAI,sBAAsBG,GAAG,WAAW,MAAO,CAACpD,EAAG,MAAM,CAACxC,YAAY,oBAAoB,CAACwC,EAAG,oBAAoB,CAACxC,YAAY,OAAO6B,MAAM,CAAC,KAAO,UAAUW,EAAG,oBAAoB,CAACX,MAAM,CAAC,KAAO,WAAW,KAAKm/B,OAAM,GAAM,CAACv7B,IAAI,gBAAgBG,GAAG,WAAW,MAAO,CAACpD,EAAG,MAAM,CAACxC,YAAY,oBAAoB,CAACwC,EAAG,oBAAoB,CAACxC,YAAY,OAAO6B,MAAM,CAAC,KAAO,UAAUW,EAAG,oBAAoB,CAACX,MAAM,CAAC,KAAO,WAAW,KAAKm/B,OAAM,GAAM,CAACv7B,IAAI,iBAAiBG,GAAG,WAAW,MAAO,CAACpD,EAAG,oBAAoB,CAACX,MAAM,CAAC,KAAO,YAAYm/B,OAAM,GAAM,CAACv7B,IAAI,gBAAgBG,GAAG,WAAW,MAAO,CAACpD,EAAG,QAAQ,CAACX,MAAM,CAAC,MAAQ,GAAG,KAAO,GAAG,SAAW,KAAK,CAACQ,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIoK,GAAG,gCAAgC,SAASu0B,OAAM,GAAM,CAACv7B,IAAI,eAAeG,GAAG,WAAW,MAAO,CAACpD,EAAG,QAAQ,CAACX,MAAM,CAAC,SAAW,GAAG,KAAO,KAAK,CAACW,EAAG,SAAS,CAACH,EAAI2B,GAAG,wBAAwB,KAAKg9B,OAAM,IAAO,MAAK,MAAS,IAChxD,GAAkB,GCCP,IACb/iC,SAAU,IACLyzF,eAAW,CACZ/lF,mBAAoB,4BACpBqvF,iEACE,0EAEJ1H,oBACE,OAAOj2F,KAAK29F,iEACV39F,KAAKsO,qBAGTwwF,UACE,MAAME,EAAU,CACd,CACEr9F,GAAI,yBACJX,MAAO,KACP07B,KAAM18B,KAAKoP,GAAG,mBACdmK,MAAO,OACPtB,MAAO,MACPu0C,SAAS,GAEX,CACE7qD,GAAI,2BACJX,MAAO,OACP07B,KAAM18B,KAAKoP,GAAG,qBACdmK,MAAO,OACPtB,MAAO,MACPu0C,SAAS,GAEX,CACE7qD,GAAI,2BACJX,MAAO,OACP07B,KAAM18B,KAAKoP,GAAG,qBACdmK,MAAO,OACPtB,MAAO,KACPu0C,SAAS,GAEX,CACE7qD,GAAI,2BACJX,MAAO,OACP07B,KAAM18B,KAAKoP,GAAG,qBACdmK,MAAO,OACPtB,MAAO,MACPu0C,SAAS,GAEX,CACE7qD,GAAI,6BACJX,MAAO,SACP07B,KAAM18B,KAAKoP,GAAG,uBACdmK,MAAO,OACPtB,MAAO,MACPu0C,SAAS,GAEX,CACE7qD,GAAI,qCACJX,MAAO,iBACP07B,KAAM18B,KAAKoP,GAAG,+BACdmK,MAAO,OACPtB,MAAO,MACPu0C,SAAS,GAEX,CACE7qD,GAAI,+BACJX,MAAO,WACP07B,KAAM18B,KAAKoP,GAAG,yBACdmK,MAAO,OACPtB,MAAO,MACPu0C,SAAS,GAEX,CACE7qD,GAAI,gCACJX,MAAO,YACP07B,KAAM18B,KAAKoP,GAAG,0BACdmK,MAAO,OACPtB,MAAO,MACPu0C,SAAS,GAEX,CACE7qD,GAAI,+BACJX,MAAO,WACP07B,KAAM18B,KAAKoP,GAAG,yBACdmK,MAAO,OACPtB,MAAO,KACPu0C,QAASxsD,KAAKi2F,mBAEhB,CACEt0F,GAAI,8BACJX,MAAO,UACP07B,KAAM,KACNnjB,MAAO,QACPtB,MAAO,KACPu0C,QAASxsD,KAAKi2F,oBAIlB,OAAO+I,EAAQ/6F,OAAQg7F,GAAWA,EAAOzyC,Y,aC7F/C,IACE1sD,KAAM,sBACNsJ,OAAQ,CAACC,EAAX,SACEpJ,MAAO,CACL4+F,KAAM,CACJt1F,KAAMC,OACNC,QAAS,IAGb7I,SAAU,CACR,sBACE,MAAMs+F,EAAgB,GAGtB,IAAK,IAAI56F,EAAI,EAAGA,EAAItE,KAAK6+F,OAAQv6F,EAAG,CAClC,MAAM66F,EAAc,GAIpB,IAAK,MAAM5E,KAAUv6F,KAAK8+F,QACxBK,EAAY,GAAG5E,EAAOv5F,OAAW,OAA3C,QAA2C,GAGnCk+F,EAAcpyF,KAAKqyF,GAGrB,OAAOD,KC/BiW,M,yBCQ1W,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIa,MAAiB,QAQhC,IAAkB,GAAW,CAACx1F,OAAA,KAAK01F,cAAA,KAAWx1F,QAAA,KAAMurF,mBAAA,OCvBpD,QACEr1F,KAAM,2BACNiM,WAAY,CAAd,wBACE3C,OAAQ,CAACC,EAAX,MACEpJ,MAAO,CACLo/F,OAAQ,CACN91F,KAAMC,OACNC,QAAS,GAEXo1F,KAAM,CACJt1F,KAAMC,OACNC,QAAS,KCfqW,MCOhX,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,MAAiB,QAKhC,IAAkB,GAAW,CAAC0rF,mBAAA,OCvB9B,IAAI,GAAS,WAAa,IAAInwF,EAAIhF,KAASiF,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,UAAU,CAACA,EAAG,eAAe,CAACxC,YAAY,mCAAmC6B,MAAM,CAAC,QAAUQ,EAAI85F,QAAQ,MAAQ95F,EAAIiH,SAAS,sBAAsB,GAAG,eAAe,IAAI5D,YAAYrD,EAAIsD,GAAG,CAAC,CAACF,IAAI,UAAUG,GAAG,SAASC,GAC7T,IAAIpH,EAAOoH,EAAIpH,KACf,MAAO,CAAC+D,EAAG,MAAM,CAACxC,YAAY,uBAAuB,CAACqC,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAI,IAAOxF,EAAO,IAAI,KAAM4D,EAAIs6F,2BAA2Bl+F,GAAO+D,EAAG,OAAO,CAACxC,YAAY,eAAe,CAACwC,EAAG,YAAY,CAACX,MAAM,CAAC,OAASQ,EAAIc,iBAAiB,IAAMd,EAAIc,kBAAkBuC,YAAYrD,EAAIsD,GAAG,CAAC,CAACF,IAAI,YAAYG,GAAG,SAASC,GAChT,IAAI7D,EAAK6D,EAAI7D,GACTH,EAAQgE,EAAIhE,MAChB,MAAO,CAACW,EAAG,OAAOH,EAAIyD,GAAGzD,EAAI0D,GAAG,GAAG,OAAOlE,GAAM,GAAOG,GAAI,CAACK,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAI,MAASxF,EAAc,WAAI,WAAW,MAAK,IAAO,CAAC+D,EAAG,OAAO,CAACH,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAGxF,EAAK87F,kBAAkB,UAAU,GAAGl4F,EAAIU,OAAQV,EAAIkxF,yBAAyB90F,GAAO+D,EAAG,SAAS,CAACX,MAAM,CAAC,KAAO,GAAG,MAAQ,UAAU,UAAU,KAAK,CAACQ,EAAI2B,GAAG3B,EAAI4B,GAAG5B,EAAIoK,GAAG,qCAAqCpK,EAAIU,QAAQ,CAAC0C,IAAI,YAAYG,GAAG,SAASC,GACtZ,IAAIpH,EAAOoH,EAAIpH,KACf,MAAO,CAAC4D,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIu6F,0BAA0Bn+F,IAAO,QAAQ,CAACgH,IAAI,YAAYG,GAAG,SAASC,GACpG,IAAIpH,EAAOoH,EAAIpH,KACf,MAAO,CAAC4D,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIw6F,+BAA+Bp+F,IAAO,QAAQ,CAACgH,IAAI,cAAcG,GAAG,SAASC,GAC3G,IAAIpH,EAAOoH,EAAIpH,KACf,MAAO,CAAC+D,EAAG,YAAY,CAACX,MAAM,CAAC,OAASpD,EAAK2P,aAAa,CAAC3I,IAAI,sBAAsBG,GAAG,SAASC,GACjG,IAAIpH,EAAOoH,EAAIpH,KACf,MAAO,CAAC+D,EAAG,YAAY,CAACX,MAAM,CAAC,eAAiBpD,EAAKy0F,iBAAiB,CAACztF,IAAI,gBAAgBG,GAAG,SAASC,GACvG,IAAIpH,EAAOoH,EAAIpH,KACf,MAAO,CAAC+D,EAAG,sBAAsB,CAACX,MAAM,CAAC,SAAWpD,EAAK00F,iBAAiB,CAAC1tF,IAAI,iBAAiBG,GAAG,SAASC,GAC5G,IAAIpH,EAAOoH,EAAIpH,KACf,MAAO,CAAC+D,EAAG,OAAO,CAACxC,YAAY,2BAA2B,CAACqC,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIy6F,wBAAwBr+F,IAAO,UAAU,CAACgH,IAAI,gBAAgBG,GAAG,SAASC,GAC3J,IAAIpH,EAAOoH,EAAIpH,KACf,MAAO,CAAE4D,EAAI06F,oBAAoBt+F,KAAU4D,EAAIkxF,yBAAyB90F,GAAO+D,EAAG,sBAAsB,CAACX,MAAM,CAAC,aAAapD,EAAKO,GAAG,UAAYP,EAAKgV,UAAU,SAAWhV,EAAK+0F,YAAYnxF,EAAIU,QAAQ,CAAC0C,IAAI,eAAeG,GAAG,SAASC,GACxO,IAAIpH,EAAOoH,EAAIpH,KACf,MAAO,CAAG4D,EAAIkxF,yBAAyB90F,GAAyH4D,EAAIU,KAAtHP,EAAG,kBAAkB,CAACR,GAAG,CAAC,wBAA0B,SAASuB,GAAQ,OAAOlB,EAAI0C,wBAAwBtG,WAAuB,MAAK,MAAS,IACvL,GAAkB,GCXtB,IACE2K,WAAY,CACVqxF,UAAJ,GACIC,oBAAJ,GACIC,UAAJ,QACIC,oBAAJ,GACIC,gBAAJ,IAEEp0F,OAAQ,CAACC,EAAX,iBACEpJ,MAAO,CACLgM,SAAU,CACR1C,KAAMxI,MACN0I,QAAS,WACP,MAAO,MAIbvI,QAAS,CACP,oBAAoBmM,GAClB,OAAOA,EAAQ+I,WAAa/I,EAAQ+I,UAAUzU,GAAK,GAErD,0BAA0B0L,GACxB,OAAIrN,KAAK0/F,oBAAoBryF,GACnC,mDACarN,KAAKoP,GAAG,gCAEjB,+BAA+B/B,GAC7B,MAAO,GAAGrN,KAAKg+F,aACrB,2BACA,yCAEI,wBAAwB3wF,GAA5B,YACM,MAAMvN,EAAO,GAAnB,2IACA,gBADA,QACA,KACM,OAAOA,EAAK6/F,QAEd,wBAAwBtyF,GACtBrN,KAAK8E,MAAM,gBAAiBuI,IAE9B,2BAA2BA,GACzB,QAAN,qCAEI,yBAAyBA,GACvB,OAAOA,EAAQoG,SAAW0pF,GAAoBT,mBCtDiT,MCOjW,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,MAAiB,QAOhC,IAAkB,GAAW,CAACpG,SAAA,KAAM8I,cAAA,KAAWv1F,WAAA,OCpB/C,QACE/J,KAAM,qBACNiM,WAAY,CACV6zF,YAAJ,GACIC,yBAAJ,IAEEz2F,OAAQ,CAACC,EAAX,MACEpJ,MAAO,CACL00F,aAAc,CACZprF,KAAMC,OACNC,QAAS,GAEXwC,SAAU,CACR1C,KAAMxI,MACN0I,QAAS,IAAM,IAEjB/C,UAAW,CACT6C,KAAM5I,UAGVoB,KAAM,KACG,CACL7B,UAAW,KAGfU,SAAU,CACR,YACE,OAAOZ,KAAK20F,aAAe,IAG/BzyF,MAAO,CACL,YACElC,KAAKu+F,6BAEP,eACOv+F,KAAK0G,UAIR1G,KAAKu+F,4BAFLv+F,KAAKE,UAAU4M,KAAK,KAM1B5L,QAAS,CACP,4BACElB,KAAKE,UAAYF,KAAK0G,UAC5B,sDACA,IAEI,cAAc1F,GACZhB,KAAK8E,MAAM,gBAAiB9D,MCvD0V,M,0BCOxX,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,MAAiB,QAUhC,IAAkB,GAAW,CAACw9F,mBAAA,KAAgBC,0BAAA,KAAuBC,yBAAA,KAAsBC,oBAAA,KAAiBmB,YAAA,KAASC,cAAA,UCDrH,QACEjgG,KAAM,WACNiM,WAAY,CACVi0F,OAAJ,OACIC,aAAJ,EACIC,cAAJ,OACIC,iBAAJ,EACIC,gBAAJ,GACIC,4BAAJ,GACIC,uBAAJ,GACIC,oBAAJ,GACIC,mBAAJ,GACIC,uBAAJ,GACIC,qBAAJ,GACIC,uBAAJ,IAEE,WAAF,QACI,MAAO,CACL7sF,MAAN,iFACMqyB,KAAM,CAAC,CAAb,6CAGE/8B,OAAQ,CAACC,EAAX,SACE,OACE,MAAO,CACLuH,WAAW,EACXpK,OAAQwC,EAAaC,KACrB83B,YAAa,GACb6/D,OAAQ,aACR36F,YAAa,OAAnB,OAAmB,GACb46F,kBAAmB,KACnBv5F,oBAAoB,EACpBE,kBAAmB,KACnBs5F,eAAgB,GAChBC,YAAa,GACb/6F,oBAAoB,EACpBg7F,6BAA8B,EAC9Br5F,gBAAiB,KACjBD,yBAAyB,EACzB/B,mBAAoBs7F,GAAmB7M,cACvC3uF,MAAO,KACPiB,WAAW,IAGf9F,SAAU,IACZ,gBACMsgG,KAAM,mBACNC,sDACN,6DACMC,UAAW,iBACXC,WAAY,kBACZ/yF,mBAAoB,4BACpBgzF,cAAe,qBACfC,6BAA8B,oCAC9BC,qCACN,4CACMv3F,gBAAiB,2BACjBw3F,wBAAyB,mCACzB9D,iEACN,wEACM+D,6BAA8B,oCAC9BC,qCACN,4CACMC,2BAA4B,kCAC5BC,mCACN,0CACMC,+BAAgC,wCAElC,eAIE,GAAI,OAAV,QAAU,CAAV,+CACA,SAEM,MAAMC,EAA8B,GAEpC,IAAK,MAAMnN,KAAU50F,KAAK+gG,YAAa,CACrC,MAAMiB,EAAkC,CACtCnN,SAAUD,EAAOC,SACjBC,WAAYF,EAAOE,WACnB1kF,UAAW,IAGb,IAAK,MAAMY,KAAY4jF,EAAOxkF,UAC5B,IAAI,OAAd,QAAc,CAAd,YAAU,CAEA,IAAK,MAAM/C,KAAW2D,EAAS/E,SACzC,uCAEYoB,EAAQ40F,UAAYjiG,KAAKoP,GAAG,yBAA0B,CACpD8yF,gBAAiB70F,EAAQ80F,aAAaD,gBACtCE,WAAY/0F,EAAQ80F,aAAaE,gBAGnCh1F,EAAQ6vF,iBAAmBl9F,KAAKoP,GAAG,2BAA4B,CAC7DkzF,UAAW,OAAzB,OAAyB,CAAzB,+BACA,wCACA,YACcC,QAAS,OAAvB,OAAuB,CAAvB,6BACA,wCACA,eAIUP,EAAgC5xF,UAAUtD,KAAKkE,GAK7C,OAAZ,QAAY,CAAZ,cAGQ+wF,EAA4Bj1F,KAAKk1F,GAGnC,OAAOD,GAET,kBACE,OACN,sEACA,0BAEA,oCACA,wBACA,eAEA,oCACA,wBACA,iBAII,iCACE,OAAO/hG,KAAK4Q,WAAa5Q,KAAKyhG,yBAEhC,qBACE,OAAOzhG,KAAK0S,iBAAiB1S,KAAKsO,mBAAmB,KAEvD,eACE,OAAOtO,KAAKwG,SAAWwC,EAAaC,MAEtC,YACE,GAAIjJ,KAAKsO,mBAAmBrN,OAAS,EACnC,OAAOjB,KAAKoP,GAAG,gCAAiC,CACxD,iCAIM,MAAMwlF,EAAS50F,KAAKohG,UAAUphG,KAAKsO,mBAAmB,IACtD,OAAN,sDAEI,gCAAJ,QAEM,MAAMk0F,EAAS,CACrB,sHACA,yBACA,+BACA,+CACA,QACA,gBAGM,OAAOA,EAAO9qF,KAAKuH,MAAMvH,KAAK+qF,SAAWD,EAAOvhG,UAElD,oBACE,OAAOjB,KAAK29F,iEAClB,0BAGI,wBAAJ,MACM,OAAO39F,KAAK8G,eAAlB,6DAOI,wCACE,IAAK9G,KAAKuG,+BAAgC,OAAO,EAEjD,MAAMm8F,EAAuB,GAC7B,OAAO1iG,KAAK+gG,YAAY9/F,OAASyhG,EACvC,EACA,yBAEI,oBACE,OAAO1iG,KAAK0G,UAAY,eAAiB,eAG7CxE,MAAO,CACL,qBACElC,KAAK2iG,qBAEP,cACE3iG,KAAK4iG,0BACL5iG,KAAK2iG,qBAEP,gCACQ3iG,KAAKuC,YACPvC,KAAK2F,qBAAuBs7F,GAAmB7M,eAEnDp0F,KAAK2iG,qBAMP,2BACO3iG,KAAK6iG,wBAEJ7iG,KAAK+F,8BAEX/F,KAAK2iG,uBAGT,gBAEO3iG,KAAK6iG,wBAEJ7iG,KAAK8iG,yBAEX9iG,KAAK2iG,sBAEP,UACO3iG,KAAK6iG,kBACV7iG,KAAK+gC,YAAc,IAAIhgC,MAAM,IAAI+a,IAAI,KACnC,MAAMhR,EAAM4M,KAAKuH,MAAsB,GAAhBvH,KAAK+qF,UACtBjsF,EAAI,IAAIpK,KAEd,OADAoK,EAAEusF,QAAQj4F,GACH0L,EAAEwsF,cAAcC,OAAO,EAAG,QAGrC/hG,QAAS,IACX,gBACMgiG,4BAA6B,uCAC7BC,oCACN,iDAEI,0BAEEnjG,KAAK0G,UAAY1G,KAAK+gG,YAAY9/F,QAAU,GAE9C,oBACE,OAAQjB,KAAK2F,oBACX,KAAKs7F,GAAmB50F,aACtB,OAAOrM,KAAKiG,YACd,KAAKg7F,GAAmB7M,cAGhC,8BACA,uBADA,mBAKI,0BAA0BgP,GACxB,MAAMC,EACZ,2CACA,cACA,gBAEYC,EAAiBtjG,KAAKujG,oBAEtBl3F,EAAe,OAA3B,OAA2B,CAA3B,aAEYm3F,EAAc,OAA1B,OAA0B,CAA1B,uBAEM,OAAOA,IAAgBn3F,GAEzB,oBACE,MAAM5G,EAAQ,IAAIsR,GAAiB,IAEnC,GAAI,OAAV,QAAU,CAAV,+BAEM,MAAM9K,EAAWjM,KAAKiK,gBAAgBhG,OAC5C,gCAGM,GAAI,OAAV,QAAU,CAAV,YAEM,MAAMwK,EAASxC,EAASgoC,OAAO,CAACwvD,EAAa9uD,KAC3C8uD,EAAYvsF,eAAiBy9B,EAAapnC,mBAC1Ck2F,EAAYrsF,UAAYu9B,EAAa+uD,kBACrCD,EAAYtsF,OAASssF,EAAYvsF,cAAgBusF,EAAYrsF,SACtDqsF,GACf,GAEM,OAAO,IAAI1sF,GAAiB,CAC1BE,aAAcxI,EAAO2I,SACrBF,cAAezI,EAAOyI,iBAG1B,oBACElX,KAAKyF,MAAQzF,KAAK2jG,qBAEpB,gCACE,MAAO,CACb,CACQ,GAAR,iBACQ,KAAR,8CACA,mEAEQ,QAAR,sCAEA,CACQ,GAAR,eACQ,KAAR,iCACA,0BACA,kBACQ,QAAR,uCAII,cAAcC,GACZ,GAAI,OAAV,QAAU,CAAV,YAEM,MAAMC,EAAU7jG,KAAKqhG,WAAWrhG,KAAKsO,oBAErC,GAAI,OAAV,QAAU,CAAV,YAEM,MAAMw1F,EAA+B,GAE/BC,EAAwB,IAApC,CACQ1xF,WAAYrB,EAASqB,WACrB0iF,aAAc/jF,EAAS+jF,aACvB9oF,SAAU,OAAlB,aAAkB,CAAlB,OACA,QADA,IACA,OADA,EACA,SACA,IAAU,IAAV,EAAU,OAAV,sFAEA,6CACA,iBAIM,IAAK,MAAM2oF,KAAUiP,EAAS,CAC5B,MAAMG,EAA0B,CAC9BnP,SAAUD,EAAOC,SACjBC,WAAYF,EAAOE,WACnB1kF,UAAW,IAGb,IAAK,MAAMY,KAAY4jF,EAAOxkF,UAC5B4zF,EAAwB5zF,UAAUtD,KAC5C,MAIa,OAAb,QAAa,CAAb,cACA,UAGM,OAAO,OAAb,aAAa,CAAb,2BAEI,6BAA6Bm3F,EAAiB,OAAlD,OAAkD,IAC5CjkG,KAAK4gG,OAAS,OAApB,OAAoB,CAApB,wBAEM5gG,KAAK4Q,WAAY,EAEjB5Q,KAAKkkG,aAAalkG,KAAKghG,8BAEvB,MAAMmD,EAAc,OAA1B,OAA0B,CAA1B,aAEY11F,QAAezO,KAAKkjG,4BAChC,wBAGMljG,KAAK+gG,YAAc/gG,KAAKokG,cAAc31F,EAAO1M,MAC7C/B,KAAK4Q,WAAY,GAEnB,aAAapK,GACXxG,KAAK4iG,0BACL5iG,KAAKwG,OAASA,GAMhB,aAAawI,GACXhP,KAAK+gG,YAAchgG,MAAMkhC,KAAKlhC,MAAMiO,GAAQoM,SAE9C,gBAAgBpQ,EAAYgE,GAM1B,GALAhP,KAAKiG,YAAc,WACbjG,KAAKuC,YACXvC,KAAKiG,YAAc,OAAzB,OAAyB,CAAzB,GAGUjG,KAAK4gG,SAAW51F,EAAY,OAEhChL,KAAK4gG,OAAS51F,EAEdhL,KAAK4Q,WAAY,EAEjB5Q,KAAKkkG,aAAal1F,GAElB,MAAMm1F,EAAc,OAA1B,OAA0B,CAA1B,GAGM,GAAe,IAAXn1F,EAGF,OAFAhP,KAAK4Q,WAAY,OACjB5Q,KAAK+gG,YAAc,IAIrB,MAAMtyF,QAAezO,KAAKkjG,4BAChC,2BAGMljG,KAAK+gG,YAAc/gG,KAAKokG,cAAc31F,EAAO1M,MAC7C/B,KAAK4Q,WAAY,GAEnB,iCACQ5Q,KAAKmG,UAAU,OAA3B,OAA2B,GAA3B,oCAEI,oCACEnG,KAAKgG,oBAAqB,QACpBhG,KAAK8iG,uBAAuB9iG,KAAK4gG,SAEzC,oBAAoByD,GAClBrkG,KAAKwH,kBAAoB68F,EACzBrkG,KAAKsH,oBAAqB,GAE5B,uBACEtH,KAAKwH,kBAAoB,KACzBxH,KAAKsH,oBAAqB,GAE5B,wBAAwB+F,GACtBrN,KAAK2H,gBAAkB0F,EACvBrN,KAAK0H,yBAA0B,GAEjC,2BACE1H,KAAK2H,gBAAkB,KACvB3H,KAAK0H,yBAA0B,GAEjC,2CACE1H,KAAK4H,iCACC5H,KAAK+F,+BAEb,cAAc/E,GACZhB,KAAK2F,mBAAqB3E,GAE5B,aAAaA,GACXhB,KAAK6gG,kBAAoB7/F,GAE3B,YAAYA,GACVhB,KAAK6gG,kBAAoB7/F,KCvd8T,M,aCOzV,GAAY,eACd,GACA,EACA8G,GACA,EACA,KACA,KACA,MAIa,gBAAiB,QAUhC,IAAkB,GAAW,CAAC4B,OAAA,KAAK4L,QAAA,KAAK1B,WAAA,KAAQhK,QAAA,KAAM2L,QAAA,KAAK+uF,UAAA,Q,kCC5B3D,IAAI13B,EAAS,WAAa,IAAI5nE,EAAIhF,KAASiF,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,UAAUH,EAAIyD,GAAGzD,EAAI0D,GAAG,GAAG,UAAU1D,EAAInE,QAAO,GAAOmE,EAAIu/F,YAAY,CAACv/F,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG5B,EAAIw/F,cAAc,QAC3M18F,EAAkB,G,YCEtB,GACEhI,KAAM,aACNsJ,OAAQ,CAACC,EAAX,MACEpJ,MAAO,CACL+nE,MAAO,CACLz+D,KAAM9H,OACNgK,UAAU,IAGd7K,SAAU,CACR,eACE,IACE,OAAOZ,KAAKgoE,MAAMy8B,QAC1B,MACQ,MAAO,6DCjBqV,I,6CCOhWz+B,EAAY,eACd,EACA4G,EACA9kE,GACA,EACA,KACA,KACA,MAIa,OAAAk+D,EAAiB,QAKhC,IAAkBA,EAAW,CAACryD,SAAA,Q,2DCvB9B,IAAIi5D,EAAS,WAAa,IAAI5nE,EAAIhF,KAASiF,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,UAAU,CAACxC,YAAY,OAAO6B,MAAM,CAAC,MAAQQ,EAAIoK,GAAG,yBAAyBpK,EAAIgD,GAAIhD,EAAU,QAAE,SAASyb,EAAEnf,GAAO,OAAO6D,EAAG,SAAS,CAACiD,IAAI,QAAU9G,EAAQmf,EAAE9e,GAAGgB,YAAY,uBAAuB6B,MAAM,CAAC,MAAQ,GAAG,MAAQ,yBAAyB,CAACQ,EAAI2B,GAAG,IAAI3B,EAAI4B,GAAG6Z,EAAE3M,OAAO,UAAS,IAC5XhM,EAAkB,GCAtB,GACEhI,KAAM,YACNG,MAAO,CACL8Q,OAAQ,CACNxH,KAAMxI,MACN0I,QAAS,WACP,MAAO,OCPoV,I,6CCO/Vu8D,EAAY,eACd,EACA4G,EACA9kE,GACA,EACA,KACA,KACA,MAIa,OAAAk+D,EAAiB,QAKhC,IAAkBA,EAAW,CAACswB,QAAA,Q,oCCnBf70F,cAAOC,OAAO,CAO3BgjG,GAAI,KAKJC,KAAM,OAKNh8E,EAAG,IAKHi8E,GAAI,KAKJC,IAAK,MAKLC,KAAM,OAKNp/E,EAAG,IAKHq/E,GAAI,KAKJvuF,EAAG,IAKHwuF,GAAI,KAKJC,IAAK,MAKLC,KAAM,OAKN38E,EAAG,IAKH48E,GAAI,KAKJn9E,EAAG,IAKHzd,EAAG,IAQHwe,EAAG,IAKHq8E,GAAI,KAKJ5iG,EAAG,IAKH6iG,GAAI,KAKJlhF,EAAG,IAKHmhF,GAAI,KAKJ5jF,EAAG,IAKH6jF,GAAI,KAKJC,IAAK,MAKL19E,EAAG,IAKH29E,GAAI,KAKJlgF,EAAG,IAKH5H,EAAG,IAQH+nF,GAAI,KAKJC,IAAK,MAKL/8E,EAAG,IAKHg9E,GAAI,KAKJC,IAAK,MAKLC,KAAM,OAKNvhF,EAAG,IAKHwhF,GAAI,KAKJC,IAAK,MAKLC,KAAM,OAONC,MAAO,SAIPC,MAAO,SAIPC,UAAW,cAIXC,UAAW,cAIXC,KAAM,QAINC,MAAO,UAIPC,OAAQ,WAKRC,kBAAmB,aAInBC,qBAAsB,iBAItBC,qBAAsB,iBAItBC,OAAQ,UAIRC,SAAU,aAIVC,SAAU,aAIVC,WAAY,sBAKZC,SAAU,cAIVC,SAAU,cAIVC,MAAO,SAKPC,KAAM,QAKNC,MAAO,UAKPC,OAAQ,WAIRC,WAAY,gBAIZC,eAAgB,wB,oCC/SlB,W,kCCAA,oEAAO,MAAMC,EAAgB/lG,OAAOC,OAAO,CAIzC+lG,sBAAuB,GAIvBC,gBAAiB,GAIjBC,aAAc,GAIdC,mBAAoB,GAIpBC,QAAS,IAITC,4BAA6B,IAI7BC,WAAY,EAIZC,mBAAoB,IAIpBC,UAAW,IAIXC,eAAgB,GAIhBC,oBAAqB,GAIrBC,iBAAkB,GAIlBC,oBAAqB,GAIrBC,sCAAuC,IAIvCC,oCAAqC,IAIrCC,0CAA2C,IAI3CC,yCAA0C,IAI1CC,uCAAwC,IAIxCC,6CAA8C,IAK9CC,8BAA+B,IAI/BC,mBAAoB,GAIpBC,cAAe,GAIfC,iBAAkB,IAIlBC,qBAAsB,GAItBC,wBAAyB,IAIzBC,yBAA0B,GAI1BC,UAAW,GAIXC,OAAQ,GAIRC,qBAAsB,GAMtBC,0CAA2C,IAI3CC,iCAAkC,MAGvBC,EAAkD,IACtD,CACLhC,EAAckB,uCACdlB,EAAcmB,8CAILc,EACXC,GAEOF,IAAkDjmE,SACvDmmE,I,kCC7IJ,sCAkBA,MAAM5nG,EAAa,eAAnB,QAOe,OAAAA,EAAA,OAAkB,CAC/BhC,KAD+B,aAG/BG,MAAO,CACL0pG,SADK,QAELC,SAFK,QAGLC,UAAW,CACTtgG,KAAM,CAACC,OADE,QAETC,QAFS,GAGTqgG,UAAYzlF,IAAY7M,MAAMsD,WAAD,KAE/B+jF,KAAM,CACJt1F,KAAM,CAACC,OADH,QAEJC,QAFI,EAGJqgG,UAAYzlF,IAAY7M,MAAMsb,SAASzO,EAAV,OAIjCzjB,SAAU,CACR,UACE,MAAO,CACL,cADK,EAEL,wBAAyBZ,KAFpB,SAGL,wBAAyBA,KAHpB,kBAIF,6CAGP,iBACE,OAAOA,KAAK4pG,UAAY5pG,KAAxB,WAIJkC,MAAO,CACL,SAAQ,GACNlC,KAAA,UAAe,KAAK,MAClB6D,EACI7D,KADD,gCAECA,KAAKoR,MAFN,QAEC,uBAFJ,aAKJ,YACEpR,KAAA,UAAiBA,KAAKuC,UAAUvC,KAAhC,uBAEF,YACEA,KAAA,UAAiBA,KAAKuC,UAAUvC,KAAhC,wBAIJ,UACEkE,WAAW,KACTlE,KAAA,UAAiBA,KAAjB,wBADF,IAKFkB,QAAS,CACP,uBACE,MAAM0C,EAAQ5D,KAAKoR,MAAnB,MACA,MAAY,OAEZxN,EAAA,iBACA,MAAMsU,EAAStU,EAAf,aACMmmG,EAAYj3E,SAAS9yB,KAAD,KAAR,IAA0B8a,WAAW9a,KANrC,WASlB4D,EAAA,aAAqB8T,KAAA,SAArB,MAEF,WACE,MAAM9T,EAAQ,qCAAd,MAMA,OAJAA,EAAA,sBACOA,EAAA,WAAP,KACAA,EAAA,gBAA0B5D,KAA1B,KAEA,GAEF,QAAO,GACL,4CACAA,KAAA,UAAiBA,KAAjB,wBAEF,UAAS,GAIHA,KAAKo5F,WAAT,KAAsBv0F,EAAA,SACpBA,EAAA,kBAGF7E,KAAA,wB,wMChHN,oE,kCCAA,8DAmBA,MAAMgqG,EAAmB,WAEvBh/D,SAFuB,EAGvBi/D,gBAHuB,EAIvBnqD,YAAY,GAIC,qBAAe,CAC5BhgD,KAD4B,iBAG5BG,MAAO,CACLiqG,cAAe,CACb3gG,KADa,QAEbE,SAAS,GAEX0gG,gBAAiB,CACf5gG,KADe,QAEfE,SAAS,GAEXxF,OAAQ,CACNsF,KADM,SAENE,QAAS,CAACrI,EAAD,MACAgpG,EAAA,4BAAqCC,EAArC,sBAAP,GAGJC,WAfK,QAgBLC,UAAW,CACThhG,KAAM,+BADG,KAETE,QAAS,IAAMugG,GAEjBQ,SApBK,QAqBLC,YAAa,CACXlhG,KAAMyC,SAIV,OACE,MAAO,CACL0+F,WAAY1qG,KAAKyqG,cAIrB7pG,SAAU,CACR,UACE,MAAO,IACF,qCADE,MAEL,kBAFK,EAGL,qCAAsCZ,KAAK2qG,eAAiB,IAGhE,gBACE,OAAO3qG,KAAP,eAEF,iBACE,OAAOA,KAAK4qG,cAAc9uF,IAAI1a,GAAQpB,KAAKmB,SAA3C,KAEF,oBACE,OAAOnB,KAAK6qG,aACR7qG,KAAK8qG,cAAcjkC,KAAKzlE,IAASpB,KAAK+qG,QADnC,IAEH/qG,KAAK8qG,cAAc7pG,OAFvB,GAIF,eACE,aAAIjB,KAAKgrG,aAA6B,EAE/Bh/F,OAAOhM,KAAKirG,QAAQjrG,KAApB,eAAP,QAEF,gBACE,OAAKA,KAAD,aAAqBA,KAArB,UAAJ,MAA0CA,KAAKkrG,eAA+BlrG,KAAP,SAEhEA,KAAKmrG,SAASlnG,OAAO7C,IAC1B,MAAMJ,EAAQ,eAAoBI,EAAMpB,KAAxC,UACM08B,EAAO,MAAA17B,EAAgBgL,OAAhBhL,GAAb,GAEA,OAAOhB,KAAKiE,OAAO7C,EAAM4K,OAAOhM,KAAzB,gBAAP,MAGJkrG,eAAgB,CACd,MACE,OAAOlrG,KAAP,YAEF,IAAG,GAGGA,KAAK0qG,aAAT,IACE1qG,KAAA,aACAA,KAAA,kCAIN,oBACE,UAEF,UACE,OAAOA,KAAKorG,eAAiBprG,KAAK4qG,cAAc3pG,OAAhD,GAEF,cACE,OACEjB,KAAKqrG,UACLrrG,KAFK,eAILA,KAAKorG,eACLprG,KAAKkrG,iBAAmBlrG,KAAKirG,QAAQjrG,KALvC,eAQF,cACE,QAAKA,KAAL,YAEOA,KAAKsrG,oBAAsBtrG,KAAlC,aAEF,cACE,MAAMC,EAAQ,yCAAd,MAEA,OADCA,EAAA,cAA6B,4BAA4BA,EAAA,cAA8B,KAAvF,OACM,SAEFA,IAGP,gBACE,OAA8B,MAAvBD,KAAKkrG,gBAAZ,KACElrG,KAAKkrG,gBAET,eACE,OAAIlrG,KAAJ,SAA0B,KAEnBA,KAAK4qG,cAAcvmG,KAAKC,GACtBtE,KAAKurG,gBAAgBvrG,KAAKmB,SAA1B,GAAuCnB,KAAKmB,SAASnB,KAA5D,kBAGJ,WACE,MAAM+B,EAAO,sCAAb,MAaA,OAXAA,EAAA,MAAa,IACRA,EADQ,MAEX+/B,MAAO9hC,KAFI,iBAGXwqG,SACExqG,KAAKwqG,WACJxqG,KADD,cAECA,KAAK8qG,cANG,OAQXL,YAAazqG,KAAKkrG,gBAGpB,IAIJhpG,MAAO,CACL4oG,cADK,yBAEL7P,cAFK,YAGL,UAAS,GACP,GACEvxD,SAAA,wBAAkC1pC,KAAlC,QACAA,KAAA,aAAoBA,KAAKoR,MAAMxN,MAA/B,WAEA8lC,SAAA,2BAAqC1pC,KAArC,QACAA,KAAA,OACAA,KAAA,eAGJ,aAAY,IACN6D,GAAQ7D,KAAZ,UAEAA,KAAA,kBAEF,MAAK,KAOCsC,GAAUA,EAAZ,SACAtC,KADA,aAEAA,KAFA,WAGCA,KAHD,eAIA6D,EALF,QAME7D,KAAKwrG,gBAET,YAAW,GACTxrG,KAAA,cAEFkrG,eAnCK,0BAoCLd,SAAU,cAGZ,UACEpqG,KAAA,aAGF,YACE0pC,SAAA,2BAAqC1pC,KAArC,SAGFkB,QAAS,CACP,uBAAsB,KAGpB,GAAI2C,IAAJ,GAEA,IAAK7D,KAAL,gBAA2B,CACzB,MAAMyrG,EAAkBnpG,EAAOtC,KAAKoR,MAAMlF,KAA1C,WAEA,EACElM,KAAA,aAAkB6D,EAAA,UAAcS,GAAKA,IAArC,IAEAtE,KAAA,iBAEFA,KAAA,0BAAgCA,KAAKoR,MAAMlF,KAA3C,WAGFlM,KAAA,UAAe,KAEVA,KAAD,iBACC,IAAA6D,EAAA,QACE7D,KAHL,mBAMAA,KAAA,sBAEIA,KAAKmqG,iBAAmBtmG,EAA5B,SACE7D,KAAA,gBACAA,KAAA,0BAAgCA,KAAKoR,MAAMlF,KAA3C,iBAIN,0BACElM,KAAA,wBAEF,uBAEEA,KAAA,cAAqBA,KAAKoR,MAA1B,MAAwCpR,KAAKoR,MAAMlF,KAAnD,oBAEF,oBAAmB,GAGblM,KAAJ,gBAEIA,KAAKqrG,UAAYK,IAAY,OAAjC,MACE,IAAI1rG,KAAK2qG,cACP3qG,KAAA,cAAqBA,KAAK4qG,cAAc3pG,OAAxC,EAEAjB,KAAA,gBAEOA,KAAKqrG,UAAYK,IAAY,OAAjC,MACD1rG,KAAK2qG,eAAiB3qG,KAAK4qG,cAAc3pG,OAA7C,EACEjB,KAAA,iBAEAA,KAAA,gBAEO0rG,IAAY,OAAZ,WAAkCA,IAAY,OAAlD,QACL1rG,KAAA,sBAGJ,oBACE,MAAM2rG,EAAW3rG,KAAjB,cACM4rG,EAAU5rG,KAAK4qG,cAFN,GAKf,IACG5qG,KAAD,eACAA,KAAK6rG,YAFP,GAGE,OAEF,MAAMC,EAAY9rG,KAAK4qG,cAAc3pG,OAVtB,EAcf,IACE,IAAAjB,KAAK2qG,eADP,IAEEmB,EAIA,YAFA9rG,KAAA,iBAKF,MAAMiB,EAASjB,KAAK4qG,cAApB,OACMmB,EAAYJ,IAAa1qG,EAAb,EAAA0qG,EAEdA,EAFJ,EAGMK,EAAWhsG,KAAK4qG,cAAtB,GAEA,EAGE5qG,KAAA,cAFAA,KAAA,SAAcA,KAAKqrG,SAAW,GAA9B,MAKFrrG,KAAA,iBAEF,oBACEA,KAAA,oBAEA,qDAEF,WACE,MAAM4D,EAAQ,qCAAd,MAUA,OARAA,EAAA,KAAa,eAAUA,EAAD,KAAc,CAClCY,MAAO,CACL,wBAAyB,eAAqBxE,KAAKoR,MAAN,KADxC,iBAEL66F,aAAc,eAAqBroG,EAAD,kCAEpCkF,SAAU,CAAE9H,MAAOhB,KAAKkrG,kBAG1B,GAEF,eACE,MAAMgB,EAAO,yCAAb,MAIA,OAFAA,EAAA,2BAEA,GAEF,gBACE,OAAOlsG,KAAKmsG,SAAWnsG,KAAhB,SACH,0CADGA,MAAP,IAIF,QAAO,GACAA,KAAL,gBAEAA,KAAA,iBACKA,KAAK2qG,eADV,EAEI3qG,KAFJ,UAIKA,KAAKosG,cAAcvnG,EAAxB,SAAmC7E,KAAKwrG,iBAE1C,QAAO,GACL,GACExrG,KAAK2qG,eAAL,IACC9lG,EAFH,OAGE,OAEF,MAAMkX,EAASlX,EAAf,OACM7D,EAAQ+a,EAPC,MAUXA,EAAJ,OAAkB/b,KAAKwrG,eAElBxrG,KAAD,UAAJ,KAAsBgB,GAAchB,KAAKqsG,oBAEzCrsG,KAAA,iBACAA,KAAA,SAAgB+b,EAAA,UAAmBA,EAAA,SAAnC,UAEF,UAAS,GACP,MAAM2vF,EAAU7mG,EAAhB,SAGEA,EAAA,SACC,CAAC,OAAD,KAAgB,OAAhB,cAFH,IAIE,8CAOF7E,KAAA,wBAEF,YAAW,KACX,UAAS,GACP,8CACAA,KAAA,cAEF,SAAQ,GAEN6E,EAFgB,iBAOhB7E,KAAA,gBAEF,WAAU,GACR,+CACAA,KAAA,aAEF,mBACE,6CADc,MAKTA,KAAL,WAAqBA,KAAKssG,aAE5B,YAGEtsG,KAAA,UAAe,KAEVA,KAAD,UACCA,KADD,gBAECA,KAHH,eAKEA,KAAA,gBACGA,KAAK4qG,cAAN,QACA5qG,KADA,UAEAA,KAHoB,aAMlBA,KAAKirG,QAAQjrG,KANjB,kBAUN,cAEKA,KAAD,eACCA,KAFH,iBAMGA,KAAD,UACCA,KAAKurG,gBACJvrG,KADD,eAECA,KAAKmB,SAASnB,KAJlB,iBAOEA,KAAA,cAGJ,QAAO,GACL,OAAOA,KAAKusG,eAAenwF,QAAQpc,KAAKmB,SAAjC,KAAP,GAEF,OAAM,GAAuB,QAC3B,QAAInB,KAAK2qG,cAAsB,OAE/B,MAAM6B,EAAcxsG,KAAK4qG,cAAc5qG,KAAvC,eACMysG,EAAkBzsG,KAAKirG,QAA7B,GACA,SAAAn3D,EAAA,0CACA,SAAAA,EAAA,wEACAA,EAAA,sB,kCCpcN,wFAmBA,MAAMhyC,EAAa,eAAO,EAAD,KAEvB,eAAiB,4CAFnB,sBAUe,OAAAA,EAAA,gBAAoC,CACjDhC,KADiD,2BAGjD8C,WAAY,CAAE8pG,OAAA,QAEdzsG,MAAO,CACL0sG,kBADK,QAELC,WAAY,CACVrjG,KADU,OAEVE,QAAS,WAEXojG,YANK,QAOLH,OAAQ,CACNnjG,KAAM,CAAC5I,QADD,QAEN8I,SAAS,IAIb1H,KAAM,KAAM,CACV+qG,cAAc,IAGhBlsG,SAAU,CACR,UACE,MAAO,CACL,mCAAoCZ,KAD/B,SAEL,sCAAuCA,KAAK8sG,eAGhD,WACE,OAAO9sG,KAAKiC,eAAZ,UAEF,aACE,OAAOjC,KAAKiC,eAAZ,YAEF,aACE,OAAOjC,KAAKiC,eAAZ,aAIJ,UACEjC,KAAA,8BAAAA,OAGF,gBACEA,KAAA,mCAGFkB,QAAS,CACP,QAAO,GACLlB,KAAA,kBAEF,UACE,MAAM6I,EAAO,eAAQ7I,KAAR,YACX,CAACA,KAAKkF,eAAe,EAApB,KAA2BlF,KAD9B,aAGA,OAAOA,KAAKkF,eAAe,EAApB,KAAqC,CAC1ClF,KAAKkF,eAAe,MAAO,CACzBvC,YADyB,iCAEzBE,MAAO,CACL,iDAAkD7C,KAAK2sG,mBAEzD/pG,WAAY,CAAC,CACX9C,KADW,OAEXkB,OAAQhB,KAAKo6F,cARnB,OAeJ,OAAM,GACJ,OAAO53F,EAAE,SAAUxC,KAAK0C,mBAAmB1C,KAAxB,MAAoC,CACrD2C,YADqD,2BAErDE,MAAO7C,KAF8C,QAGrDwE,MAAO,CACLuoG,SAAU/sG,KAAKo6F,YAAL,EADL,KAEL7wF,KAFK,SAGL,gBAAiBvJ,KAAKgC,UAExBY,WAAY,CAAC,CACX9C,KADW,SAEXkB,MAAOhB,KAAK0sG,SAEd/nG,GAAI,IACC3E,KADD,WAEF05F,MAAO15F,KAFL,QAGFgtG,UAAW,IAAOhtG,KAAK8sG,cAHrB,EAIFG,QAAS,IAAOjtG,KAAK8sG,cAAe,KAEpC,CACF,eAAQ9sG,KAAM,UAAW,CAAEu4F,KAAMv4F,KAAKgC,WADpC,GAEFhC,KAAK6sG,aAAe7sG,KApBtB,gB,kCChGJ,oDAce,sBACb,eAAgB,sCADG,sBAEnB,eAAmB,kBAAkB,IAFxB,OAIN,CACPF,KADO,oBAGPG,MAAO,CACLE,SADK,QAELM,SAAUE,SAGZ,OACE,MAAO,CACLusG,QADK,KAELjO,OAFK,KAGLkO,cAAc,IAIlBvsG,SAAU,CACR,UACE,MAAO,CACL,4BAA6BZ,KADxB,SAEL,iCAAkCA,KAF7B,aAGL,8BAA+BA,KAH1B,cAIFA,KAAKq5F,eAGZ,aACE,OAAOr5F,KAAKD,gBAAgBI,UAAYH,KAAxC,UAEF,aACE,OAAOA,KAAKD,gBAAgBU,UAAYT,KAAxC,WAIJkB,QAAS,CACP,gBAAe,GACblB,KAAA,WAEF,oBACEA,KAAA,cAEF,eAAc,GACZA,KAAA,SACAotG,EAAA,YAAgBptG,KAAhB,UAEF,mBACEA,KAAA,aAEF,QAAO,GACD6E,EAAJ,QAAc7E,KAAKi/F,OAAL,WAEdj/F,KAAA,iBAEAA,KAAA,YAAmBA,KAAnB,YAAsCA,KAAtC,UAEF,SACEA,KAAA,UAAe,IAAMA,KAAK8E,MAA1B,aAIJ,OAAM,GACJ,OAAOtC,EAAE,MAAO,CACdG,YADc,oBAEdE,MAAO7C,KAFO,QAGdwE,MAAO,CACL,gBAAiBwH,OAAOhM,KAAD,YAExB,eANH,W,oEClDJ,IA2CIqtG,EAAS,CAACxvF,EAAO,MACnB,IAAIlc,EAAK,GACL2rG,EAAQC,OAAOC,gBAAgB,IAAIC,WAAW5vF,IAGlD,MAAOA,IAAQ,CAMb,IAAI6vF,EAAqB,GAAdJ,EAAMzvF,GAGflc,GAFE+rG,EAAO,GAEHA,EAAKtzF,SAAS,IACXszF,EAAO,IAETA,EAAO,IAAItzF,SAAS,IAAImD,cACtBmwF,EAAO,GACV,IAEA,IAGV,OAAO/rG,I,kDC/FM,SAASgsG,EAAwBlhB,GAE9C,MAAMmhB,EAAYnhB,EAAKx3D,MAAM,KAG7B,IAAK24E,GAAkC,IAArBA,EAAU3sG,OAC1B,MAAM,IAAIikC,MAAO,mDAAkDunD,GAGrE,MAAMohB,EAAa/6E,SAAS86E,EAAU,IAChCE,EAAeh7E,SAAS86E,EAAU,IAExC,GAAIp2F,MAAMq2F,GACR,MAAM,IAAI3oE,MACP,8CAA6C0oE,EAAU,IAI5D,GAAIp2F,MAAMs2F,GACR,MAAM,IAAI5oE,MACP,gDAA+C0oE,EAAU,IAI9D,MAAO,CAAEG,MAAOF,EAAYG,QAASF,G,wCCvBxB,QACbltG,SAAU,IACLyzF,eAAW,CACZ/lF,mBAAoB,4BACpB2/F,oCACE,6CAEJC,0BACE,IACE,OAAOP,EAAwBz3D,aAAO/H,IAAI,6BAC1C,MAAOggE,GAIP,OAHA1uE,QAAQC,KACN,gEAEK,CAAEquE,MAAO,EAAGC,QAAS,KAQhCh6F,8CACE,MAAM5D,EAAYpQ,KAAKiuG,oCACrBjuG,KAAKsO,mBAAmB,GACxB8/F,OAAgBC,SAGlB,IAAKj+F,GAAaA,EAAUnP,OAAS,EAAG,OAAO,EAE/C,IAAK,MAAM+P,KAAYZ,EACrB,IAAKpQ,KAAKsuG,uBAAuBt9F,EAASu9F,UAAW,OAAO,EAG9D,OAAO,IAGXrtG,QAAS,CACPstG,sBAAsBt6F,EAAMkwD,GAC1B,OAAOqqC,eAAMv6F,GAAMkwD,GAAGA,IAExBkqC,uBAAuBI,GACrB,MAAMhjG,EAAQ+iG,iBAAQrqC,GAAGsqC,GACnBC,EAASF,iBACZrqC,GAAGsqC,GACHziB,QAAQ,OACRh3E,IAAIjV,KAAKkuG,yBAEZ,OAAOxiG,EAAMyK,QAAQw4F","file":"js/chunk-1f92a8aa.859f34bb.js","sourcesContent":["// Styles\nimport './VExpansionPanel.sass'\n\n// Components\nimport { BaseItemGroup, GroupableInstance } from '../VItemGroup/VItemGroup'\nimport VExpansionPanel from './VExpansionPanel'\n\n// Utilities\nimport { breaking } from '../../util/console'\n\n// Types\ninterface VExpansionPanelInstance extends InstanceType {}\n\n/* @vue/component */\nexport default BaseItemGroup.extend({\n name: 'v-expansion-panels',\n\n provide (): object {\n return {\n expansionPanels: this,\n }\n },\n\n props: {\n accordion: Boolean,\n disabled: Boolean,\n flat: Boolean,\n hover: Boolean,\n focusable: Boolean,\n inset: Boolean,\n popout: Boolean,\n readonly: Boolean,\n tile: Boolean,\n },\n\n computed: {\n classes (): object {\n return {\n ...BaseItemGroup.options.computed.classes.call(this),\n 'v-expansion-panels': true,\n 'v-expansion-panels--accordion': this.accordion,\n 'v-expansion-panels--flat': this.flat,\n 'v-expansion-panels--hover': this.hover,\n 'v-expansion-panels--focusable': this.focusable,\n 'v-expansion-panels--inset': this.inset,\n 'v-expansion-panels--popout': this.popout,\n 'v-expansion-panels--tile': this.tile,\n }\n },\n },\n\n created () {\n /* istanbul ignore next */\n if (this.$attrs.hasOwnProperty('expand')) {\n breaking('expand', 'multiple', this)\n }\n\n /* istanbul ignore next */\n if (\n Array.isArray(this.value) &&\n this.value.length > 0 &&\n typeof this.value[0] === 'boolean'\n ) {\n breaking(':value=\"[true, false, true]\"', ':value=\"[0, 2]\"', this)\n }\n },\n\n methods: {\n updateItem (item: GroupableInstance & VExpansionPanelInstance, index: number) {\n const value = this.getValue(item, index)\n const nextValue = this.getValue(item, index + 1)\n\n item.isActive = this.toggleMethod(value)\n item.nextIsActive = this.toggleMethod(nextValue)\n },\n },\n})\n","// TODO: Create i10n for reason names\nexport const ReasonsForAbsence = Object.freeze([\n {\n id: 'Not Provided',\n name: 'Not Provided',\n },\n {\n id: 'Sick Leave Cover',\n name: 'Sick Leave Cover (Formerly Sickness)',\n },\n {\n id: 'Professional Development',\n name: 'Professional Development',\n },\n {\n id: 'Annual Leave Cover',\n name: 'Annual Leave Cover (Formerly Leave)',\n },\n {\n id: 'Break Cover',\n name: 'Break Cover',\n },\n {\n id: 'Vacant Position',\n name: 'Vacant Position',\n },\n {\n id: 'Training Cover',\n name: 'Training Cover',\n },\n {\n id: 'Government Funding',\n name: 'Government Funding',\n },\n {\n id: 'Rostered Day Off',\n name: 'Rostered Day Off',\n },\n {\n id: \"Carer's Leave\",\n name: \"Carer's Leave\",\n },\n {\n id: 'Long Service Leave',\n name: 'Long Service Leave',\n },\n {\n id: 'F&P Testing',\n name: 'F&P Testing',\n },\n {\n id: 'Professional Practice Day',\n name: 'Professional Practice Day',\n },\n {\n id: 'Other',\n name: 'Other',\n },\n])\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./booking-list-skeleton.vue?vue&type=style&index=0&id=a5b4eed4&lang=scss&scoped=true&\"","// extracted by mini-css-extract-plugin\nmodule.exports = {\"font-monospace\":\"booking-list-feedback_font-monospace_2aMm5\",\"text-overflow-unset\":\"booking-list-feedback_text-overflow-unset_1ewnR\",\"text-overflow-clip\":\"booking-list-feedback_text-overflow-clip_3QCDn\",\"text-overflow-ellipsis\":\"booking-list-feedback_text-overflow-ellipsis_23moN\",\"text-overflow-fade\":\"booking-list-feedback_text-overflow-fade_2GrVh\",\"white-space-unset\":\"booking-list-feedback_white-space-unset_1GQHW\",\"white-space-normal\":\"booking-list-feedback_white-space-normal_34z2z\",\"white-space-nowrap\":\"booking-list-feedback_white-space-nowrap_2BiN6\",\"white-space-pre\":\"booking-list-feedback_white-space-pre_3wfIp\",\"white-space-pre-wrap\":\"booking-list-feedback_white-space-pre-wrap_krdrm\",\"white-space-pre-line\":\"booking-list-feedback_white-space-pre-line_23XUi\",\"white-space-break-spaces\":\"booking-list-feedback_white-space-break-spaces_2aDQu\",\"animation--clockwise\":\"booking-list-feedback_animation--clockwise_bNSxH\",\"clockwise\":\"booking-list-feedback_clockwise_eU3FB\",\"animation--anti-clockwise\":\"booking-list-feedback_animation--anti-clockwise_3pi9i\",\"anti-clockwise\":\"booking-list-feedback_anti-clockwise_2nPsF\",\"animation--rotating\":\"booking-list-feedback_animation--rotating_2S_k6\",\"rotating\":\"booking-list-feedback_rotating_1yoxB\",\"animation--rotating-diagonal\":\"booking-list-feedback_animation--rotating-diagonal_1LqL0\",\"rotating-diagonal\":\"booking-list-feedback_rotating-diagonal_fmg3s\",\"animation\":\"booking-list-feedback_animation_2JO6q\",\"typed-cursor\":\"booking-list-feedback_typed-cursor_2W0Us\",\"blink\":\"booking-list-feedback_blink_GlnGR\",\"floating\":\"booking-list-feedback_floating_1sksp\",\"jump\":\"booking-list-feedback_jump_seq0l\",\"fade-out\":\"booking-list-feedback_fade-out_azGH6\",\"bubble-v\":\"booking-list-feedback_bubble-v_2Vky8\",\"bubble-v-left\":\"booking-list-feedback_bubble-v-left_1gnoX\",\"bubble-v-right\":\"booking-list-feedback_bubble-v-right_2NWPP\",\"shake-v\":\"booking-list-feedback_shake-v_dtoL7\"};","// Components\nimport VExpansionPanel from './VExpansionPanel'\nimport { VExpandTransition } from '../transitions'\n\n// Mixins\nimport Bootable from '../../mixins/bootable'\nimport Colorable from '../../mixins/colorable'\nimport { inject as RegistrableInject } from '../../mixins/registrable'\n\n// Utilities\nimport { getSlot } from '../../util/helpers'\nimport mixins, { ExtractVue } from '../../util/mixins'\n\n// Types\nimport Vue, { VNode, VueConstructor } from 'vue'\n\nconst baseMixins = mixins(\n Bootable,\n Colorable,\n RegistrableInject<'expansionPanel', VueConstructor>('expansionPanel', 'v-expansion-panel-content', 'v-expansion-panel')\n)\n\ninterface options extends ExtractVue {\n expansionPanel: InstanceType\n}\n\n/* @vue/component */\nexport default baseMixins.extend().extend({\n name: 'v-expansion-panel-content',\n\n data: () => ({\n isActive: false,\n }),\n\n computed: {\n parentIsActive (): boolean {\n return this.expansionPanel.isActive\n },\n },\n\n watch: {\n parentIsActive: {\n immediate: true,\n handler (val, oldVal) {\n if (val) this.isBooted = true\n\n if (oldVal == null) this.isActive = val\n else this.$nextTick(() => this.isActive = val)\n },\n },\n },\n\n created () {\n this.expansionPanel.registerContent(this)\n },\n\n beforeDestroy () {\n this.expansionPanel.unregisterContent()\n },\n\n render (h): VNode {\n return h(VExpandTransition, this.showLazyContent(() => [\n h('div', this.setBackgroundColor(this.color, {\n staticClass: 'v-expansion-panel-content',\n directives: [{\n name: 'show',\n value: this.isActive,\n }],\n }), [\n h('div', { class: 'v-expansion-panel-content__wrap' }, getSlot(this)),\n ]),\n ]))\n },\n})\n","export const BookingCommentType = Object.freeze({\n /**\n * Private comments - Shouldn't be shown to candidates (ShortTerm.ClientNotes)\n */\n PRIVATE: 'Private',\n /**\n * Candidate comments - Public comments that can be shown to candidates (ShortTerm.Notes)\n */\n CANDIDATE: 'Candidate',\n /**\n * Contact comments - Contains the room number when submitted by template is required by location (ShortTerm.ContactNotes)\n */\n CONTACT: 'Contact',\n /**\n * Indicates that the candidate is late. Will contain a json object with lateMins to indicate how many minutes late the candidate is.\n */\n LATE: 'LATE',\n})\n","// Components\nimport VInput from '../VInput/VInput'\n\n// Mixins\nimport mixins from '../../util/mixins'\nimport BindsAttrs from '../../mixins/binds-attrs'\nimport { provide as RegistrableProvide } from '../../mixins/registrable'\n\n// Helpers\nimport { VNode } from 'vue'\n\ntype ErrorBag = Record\ntype VInputInstance = InstanceType\ntype Watchers = {\n _uid: number\n valid: () => void\n shouldValidate: () => void\n}\n\n/* @vue/component */\nexport default mixins(\n BindsAttrs,\n RegistrableProvide('form')\n /* @vue/component */\n).extend({\n name: 'v-form',\n\n provide (): object {\n return { form: this }\n },\n\n inheritAttrs: false,\n\n props: {\n disabled: Boolean,\n lazyValidation: Boolean,\n readonly: Boolean,\n value: Boolean,\n },\n\n data: () => ({\n inputs: [] as VInputInstance[],\n watchers: [] as Watchers[],\n errorBag: {} as ErrorBag,\n }),\n\n watch: {\n errorBag: {\n handler (val) {\n const errors = Object.values(val).includes(true)\n\n this.$emit('input', !errors)\n },\n deep: true,\n immediate: true,\n },\n },\n\n methods: {\n watchInput (input: any): Watchers {\n const watcher = (input: any): (() => void) => {\n return input.$watch('hasError', (val: boolean) => {\n this.$set(this.errorBag, input._uid, val)\n }, { immediate: true })\n }\n\n const watchers: Watchers = {\n _uid: input._uid,\n valid: () => {},\n shouldValidate: () => {},\n }\n\n if (this.lazyValidation) {\n // Only start watching inputs if we need to\n watchers.shouldValidate = input.$watch('shouldValidate', (val: boolean) => {\n if (!val) return\n\n // Only watch if we're not already doing it\n if (this.errorBag.hasOwnProperty(input._uid)) return\n\n watchers.valid = watcher(input)\n })\n } else {\n watchers.valid = watcher(input)\n }\n\n return watchers\n },\n /** @public */\n validate (): boolean {\n return this.inputs.filter(input => !input.validate(true)).length === 0\n },\n /** @public */\n reset (): void {\n this.inputs.forEach(input => input.reset())\n this.resetErrorBag()\n },\n resetErrorBag () {\n if (this.lazyValidation) {\n // Account for timeout in validatable\n setTimeout(() => {\n this.errorBag = {}\n }, 0)\n }\n },\n /** @public */\n resetValidation () {\n this.inputs.forEach(input => input.resetValidation())\n this.resetErrorBag()\n },\n register (input: VInputInstance) {\n this.inputs.push(input)\n this.watchers.push(this.watchInput(input))\n },\n unregister (input: VInputInstance) {\n const found = this.inputs.find(i => i._uid === input._uid)\n\n if (!found) return\n\n const unwatch = this.watchers.find(i => i._uid === found._uid)\n if (unwatch) {\n unwatch.valid()\n unwatch.shouldValidate()\n }\n\n this.watchers = this.watchers.filter(i => i._uid !== found._uid)\n this.inputs = this.inputs.filter(i => i._uid !== found._uid)\n this.$delete(this.errorBag, found._uid)\n },\n },\n\n render (h): VNode {\n return h('form', {\n staticClass: 'v-form',\n attrs: {\n novalidate: true,\n ...this.attrs$,\n },\n on: {\n submit: (e: Event) => this.$emit('submit', e),\n },\n }, this.$slots.default)\n },\n})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Layout',[_c('div',{class:[_vm.isMediumOrLower ? '' : 'd-flex justify-space-between']},[_c('BasePageTitle',{attrs:{\"title\":_vm.compTitle,\"subtitle\":_vm.displayRandomSubtitleGreeting,\"subtitle-on-top\":\"\"}}),(_vm.clientGroupOverviewFeatureToggles.canViewDetails)?_c('div',{class:[\n _vm.isMediumOrLower ? 'align-start mb-4' : 'align-center',\n 'd-flex flex-column' ]},[(_vm.stats)?_c('DashboardFillRateStats',{attrs:{\"stats\":_vm.stats}}):_vm._e(),_c('ClientFillRateFilter',{attrs:{\"filter\":_vm.fillRateFilterType,\"options\":_vm.generateFillRateFilterOptions()},on:{\"filterChanged\":_vm.filterChanged}})],1):_vm._e()],1),_c('v-row',[_c('v-col',{class:_vm.isMobileViewPort ? 'px-0 mx-0' : '',attrs:{\"cols\":\"12\",\"md\":\"12\",\"lg\":\"12\"}},[_c('ReplaceMeBanner',{on:{\"refreshData\":_vm.refreshDashboardBookingData}}),(_vm.canViewBookings)?_c('v-sheet',{staticClass:\"transparent\",class:_vm.isMobileViewPort ? 'px-0 mx-0' : '',attrs:{\"elevation\":\"0\"}},[_c('div',{class:_vm.isMobileViewPort ? 'px-0 mx-0' : ''},[_c('BookingDateStrip',{attrs:{\"refresh-data\":_vm.refreshSummaryData,\"selected-day\":_vm.selectedDay},on:{\"refreshComplete\":function($event){_vm.refreshSummaryData = false},\"dateSelected\":_vm.changeDay,\"monthChanged\":_vm.monthChanged,\"yearChanged\":_vm.yearChanged}}),(_vm.selectedDayHasBooking || _vm.isLoadingSummaryOrOverviewData)?_c('div',[_c('div',{staticClass:\"my-4 d-flex justify-space-between align-center\"},[_c('LayoutFilter',{attrs:{\"pre-select\":_vm.layout},on:{\"layoutChanged\":_vm.changeLayout}}),_c('v-btn',{attrs:{\"color\":\"primary\",\"text\":\"\",\"outlined\":\"\"},on:{\"click\":function($event){_vm.expandAll = !_vm.expandAll}}},[_c('v-icon',{attrs:{\"left\":\"\"}},[_vm._v(_vm._s(_vm.expandAll ? 'mdi-collapse-all' : 'mdi-expand-all'))]),_vm._v(\" \"+_vm._s(_vm.compExpandBtnText))],1)],1),(_vm.isTileLayout)?_c('BookingSummaryCardList',{attrs:{\"bookings\":_vm.compBookings,\"loading-count\":_vm.compBookingSummarySkeletonLoaderCount,\"expand-all\":_vm.expandAll},on:{\"viewCandidate\":_vm.showCandidateDialog,\"cancelBooking\":_vm.openCancelBookingDialog}}):_c('BookingSummaryList',{attrs:{\"bookings\":_vm.compBookings,\"loading-count\":_vm.compBookingSummarySkeletonLoaderCount,\"expand-all\":_vm.expandAll},on:{\"cancelBooking\":_vm.openCancelBookingDialog}})],1):(_vm.selectedDay)?_c('BookingSummaryEmptyDayBlock',{attrs:{\"selected-date\":_vm.selectedDay},on:{\"viewTodaysBookings\":_vm.viewTodaysBookings}}):_vm._e()],1)]):_c('TheDashboardNavigation')],1)],1),(_vm.showCandidateModal)?_c('v-dialog',{attrs:{\"width\":\"720px\",\"content-class\":\"rounded-xl\"},model:{value:(_vm.showCandidateModal),callback:function ($$v) {_vm.showCandidateModal=$$v},expression:\"showCandidateModal\"}},[_c('CandidateZoom',{attrs:{\"candidate-prefill\":_vm.selectedCandidate},on:{\"closeModal\":_vm.closeCandidateDialog}})],1):_vm._e(),(_vm.showCancelBookingDialog)?_c('CancelBookingDialog',{attrs:{\"show\":_vm.showCancelBookingDialog,\"booking\":_vm.bookingToCancel},on:{\"closeModal\":_vm.closeCancelBookingDialog,\"closeModalAndRefresh\":_vm.closeCancelBookingDialogAndRefresh}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-btn-toggle',{attrs:{\"group\":\"\",\"dense\":\"\",\"color\":\"primary\",\"mandatory\":\"\"},model:{value:(_vm.layoutToggle),callback:function ($$v) {_vm.layoutToggle=$$v},expression:\"layoutToggle\"}},_vm._l((!_vm.options ? _vm.defaultLayoutOptions : _vm.options),function(option){return _c('v-tooltip',{key:option.id,attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({staticClass:\"rounded\",attrs:{\"id\":option.id},on:{\"click\":function($event){return _vm.layoutChanged(option.emit)}}},'v-btn',attrs,false),on),[_c('v-icon',{attrs:{\"small\":\"\"}},[_vm._v(_vm._s(option.icon))])],1)]}}],null,true)},[_c('span',{domProps:{\"textContent\":_vm._s(option.tooltip)}})])}),1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export const LayoutToggle = Object.freeze({\n TILE: 0,\n LIST: 1,\n MAP: 2,\n})\n","\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./layout-filter.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./layout-filter.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./layout-filter.vue?vue&type=template&id=72a5dec0&\"\nimport script from \"./layout-filter.vue?vue&type=script&lang=js&\"\nexport * from \"./layout-filter.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VBtnToggle } from 'vuetify/lib/components/VBtnToggle';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VBtn,VBtnToggle,VIcon,VTooltip})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{class:[_vm.isSmallOrLower ? '' : 'ml-n3']},[_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.changeYear(_vm.year - 1)}}},[_c('v-icon',[_vm._v(\"mdi-chevron-left\")])],1),_vm._v(\" \"+_vm._s(_vm.year)+\" \"),_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.changeYear(_vm.year + 1)}}},[_c('v-icon',[_vm._v(\"mdi-chevron-right\")])],1)],1),_c('DateStrip',{attrs:{\"bookings\":_vm.bookingOverview,\"year\":_vm.year,\"selected-day\":_vm.selectedDay ? _vm.selectedDay.format('YYYY-MM-DD') : _vm.getToday()},on:{\"monthChanged\":_vm.changeMonth,\"dateSelected\":_vm.dateSelected}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"dateStrip\"},[_c('div',{staticClass:\"yearMonth\"},[_c('div',{staticClass:\"month\"},[_c('v-slide-group',{class:[_vm.isMobileViewPort ? 'mx-0 mx-n2' : '', 'py-4'],attrs:{\"value\":_vm.selectedSliderMonth,\"center-active\":\"\",\"show-arrows\":\"\",\"mandatory\":\"\"},on:{\"change\":_vm.monthChanged}},_vm._l((_vm.returnMonthsArray),function(x,index){return _c('v-slide-item',{key:'bookingstrip_months_' + index,staticStyle:{\"flex-basis\":\"0\",\"flex-grow\":\"1\"},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar active = ref.active;\nvar toggle = ref.toggle;\nreturn [_c('v-btn',{class:[\n 'mb-2',\n _vm.isCurrentMonth(index) ? 'border border--blue' : '',\n active ? 'border--white custom-elevation' : '' ],attrs:{\"text\":!active,\"color\":\"blue\",\"dark\":\"\"},on:{\"click\":toggle}},[_vm._v(_vm._s(x.displayString))])]}}],null,true)})}),1)],1)]),_c('div',{staticClass:\"days\"},[_c('v-slide-group',{class:[_vm.isMobileViewPort ? 'mr-0 mx-n2' : 'mx-n3', 'py-4'],attrs:{\"center-active\":\"\",\"show-arrows\":\"\",\"mandatory\":\"\"},model:{value:(_vm.selectedSliderDay),callback:function ($$v) {_vm.selectedSliderDay=$$v},expression:\"selectedSliderDay\"}},_vm._l((_vm.returnDaysArray),function(day,index){return _c('v-slide-item',{key:'bookingstrip_' + _vm.year + '_' + index,staticClass:\"date-strip--group-item\"},[_c('DateStripDay',{attrs:{\"selected\":_vm.isSelected(day.dateObject),\"day\":day,\"counter\":_vm.numberOfBookings(day)},on:{\"handle-click\":_vm.handleDayClick}})],1)}),1)],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"text-center\"},[_c('v-card',{class:[\n _vm.selected\n ? 'blue white--text custom-elevation'\n : 'elevation-0 overflow-hidden',\n _vm.isToday ? 'border border--blue' : '',\n 'text-center rounded-lg transparent mb-2 py-3 px-1' ],attrs:{\"title\":_vm.compTitle},on:{\"click\":_vm.clickedDay}},[_c('div',{class:[_vm.isWeekend ? 'opacity-5' : '', '']},[_c('div',{staticClass:\"day-name caption\"},[_vm._v(\" \"+_vm._s(_vm.day.displayStringDayName)+\" \")]),_c('div',{staticClass:\"day-number text-h6 font-weight-medium\"},[_vm._v(\" \"+_vm._s(_vm.day.displayString)+\" \")])])]),(_vm.counter)?_c('div',{staticClass:\"day-nbookings\"},[_c('v-badge',{staticClass:\"font-weight-light\",attrs:{\"bottom\":\"\",\"content\":_vm.counter,\"inline\":\"\"}})],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./date-strip-day.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./date-strip-day.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./date-strip-day.vue?vue&type=template&id=4ba3524c&\"\nimport script from \"./date-strip-day.vue?vue&type=script&lang=js&\"\nexport * from \"./date-strip-day.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBadge } from 'vuetify/lib/components/VBadge';\nimport { VCard } from 'vuetify/lib/components/VCard';\ninstallComponents(component, {VBadge,VCard})\n","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./date-strip.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./date-strip.vue?vue&type=script&lang=js&\"","// Mixins\nimport { factory as GroupableFactory } from '../../mixins/groupable'\n\n// Utilities\nimport mixins from '../../util/mixins'\nimport { consoleWarn } from '../../util/console'\n\n// Types\nimport Vue from 'vue'\nimport { VNode, ScopedSlotChildren } from 'vue/types/vnode'\n\n/* @vue/component */\nexport const BaseItem = Vue.extend({\n props: {\n activeClass: String,\n value: {\n required: false,\n },\n },\n\n data: () => ({\n isActive: false,\n }),\n\n methods: {\n toggle () {\n this.isActive = !this.isActive\n },\n },\n\n render (): VNode {\n if (!this.$scopedSlots.default) {\n consoleWarn('v-item is missing a default scopedSlot', this)\n\n return null as any\n }\n\n let element: VNode | ScopedSlotChildren\n\n /* istanbul ignore else */\n if (this.$scopedSlots.default) {\n element = this.$scopedSlots.default({\n active: this.isActive,\n toggle: this.toggle,\n })\n }\n\n if (Array.isArray(element) && element.length === 1) {\n element = element[0]\n }\n\n if (!element || Array.isArray(element) || !element.tag) {\n consoleWarn('v-item should only contain a single element', this)\n\n return element as any\n }\n\n element.data = this._b(element.data || {}, element.tag!, {\n class: { [this.activeClass]: this.isActive },\n })\n\n return element\n },\n})\n\nexport default mixins(\n BaseItem,\n GroupableFactory('itemGroup', 'v-item', 'v-item-group')\n).extend({\n name: 'v-item',\n})\n","// Extensions\nimport { BaseItem } from '../VItemGroup/VItem'\n\n// Mixins\nimport { factory as GroupableFactory } from '../../mixins/groupable'\nimport mixins from '../../util/mixins'\n\nexport default mixins(\n BaseItem,\n GroupableFactory('slideGroup')\n /* @vue/component */\n).extend({\n name: 'v-slide-item',\n})\n","import { render, staticRenderFns } from \"./date-strip.vue?vue&type=template&id=8059c788&\"\nimport script from \"./date-strip.vue?vue&type=script&lang=js&\"\nexport * from \"./date-strip.vue?vue&type=script&lang=js&\"\nimport style0 from \"./date-strip.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VSlideGroup } from 'vuetify/lib/components/VSlideGroup';\nimport { VSlideItem } from 'vuetify/lib/components/VSlideGroup';\ninstallComponents(component, {VBtn,VSlideGroup,VSlideItem})\n","\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./booking-date-strip.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./booking-date-strip.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./booking-date-strip.vue?vue&type=template&id=6aa7f1d2&\"\nimport script from \"./booking-date-strip.vue?vue&type=script&lang=js&\"\nexport * from \"./booking-date-strip.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\ninstallComponents(component, {VBtn,VIcon})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isReplaceMeEnabled && _vm.statusCheckSuccess)?_c('article',[_c('v-alert',{staticClass:\"rounded-xl px-5 py-2\",attrs:{\"text\":\"\",\"color\":\"primary\",\"max-width\":\"fit-content\"}},[(!_vm.isLoadingReplaceMeStatusCheck)?_c('v-card',{staticClass:\"transparent blue--text pa-0 ma-0\",attrs:{\"elevation\":\"0\"}},[_c('header',{staticClass:\"align-center\"},[_c('v-card-text',{class:[\n !_vm.isMobileViewPort ? 'subtitle-1' : '',\n 'blue--text align-center mt-2 pt-0' ]},[_vm._v(\" \"+_vm._s(_vm.$t('replaceMe.bannerTitle'))+\", \"+_vm._s(_vm.$t('replaceMe.bannerSubtitle'))+\" \")])],1),_c('v-card-text',{class:[\n !_vm.isMobileViewPort\n ? 'd-flex flex-wrap align-center'\n : 'd-flex flex-wrap flex-column',\n 'pt-0 mt-0' ]},[_c('v-tooltip',{attrs:{\"disabled\":_vm.isTodayActive,\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\n var on = ref.on;\n var attrs = ref.attrs;\nreturn [_c('div',_vm._g(_vm._b({class:_vm.isTodayActive ? '' : 'cursor-not-allowed',attrs:{\"id\":\"replace-me-banner__today-btn-container\"}},'div',attrs,false),on),[_c('v-btn',{class:(_vm.isMobileViewPort ? 'mb-4' : '', 'custom-elevation'),attrs:{\"id\":\"replace-me-banner__today-btn\",\"large\":\"\",\"outlined\":\"\",\"color\":\"blue\",\"block\":\"\",\"disabled\":!_vm.isTodayActive},on:{\"click\":_vm.todaySelected}},[_c('v-icon',{attrs:{\"left\":\"\"}},[_vm._v(\" \"+_vm._s(_vm.compTodayIcon)+\" \")]),_c('p',{staticClass:\"mb-0\"},[_vm._v(\" \"+_vm._s(_vm.compTodayText)+\" \")])],1)],1)]}}],null,false,3636846)},[_c('span',[_vm._v(\" \"+_vm._s(_vm.compTodayTooltipText)+\" \")])]),(!_vm.isMobileViewPort)?_c('p',{staticClass:\"mb-0 mx-4 subtitle-2 blue--text\"},[_vm._v(\" \"+_vm._s(_vm.$t('replaceMe.bannerBtnSeparatorText'))+\" \")]):_vm._e(),_c('v-tooltip',{attrs:{\"disabled\":_vm.isTomorrowActive,\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\n var on = ref.on;\n var attrs = ref.attrs;\nreturn [(!_vm.isMobileViewPort)?_c('div',_vm._g(_vm._b({class:_vm.isTomorrowActive ? '' : 'cursor-not-allowed',attrs:{\"id\":\"replace-me-banner__tomorrow-btn-container\"}},'div',attrs,false),on),[_c('v-btn',{staticClass:\"d-flex flex-rows white--text custom-elevation\",attrs:{\"id\":\"replace-me-banner__tomorrow-btn\",\"color\":\"blue\",\"large\":\"\",\"block\":\"\",\"disabled\":!_vm.isTomorrowActive},on:{\"click\":_vm.tomorrowSelected}},[_c('v-icon',{attrs:{\"left\":\"\"}},[_vm._v(\" \"+_vm._s(_vm.compTomorrowIcon)+\" \")]),_c('p',{staticClass:\"mb-0\"},[_vm._v(\" \"+_vm._s(_vm.compTomorrowText)+\" \")])],1)],1):_vm._e()]}}],null,false,3781399173)},[_c('span',[_vm._v(\" \"+_vm._s(_vm.compTomorrowTooltipText)+\" \")])])],1)],1):_vm._e()],1),_c('v-dialog',{attrs:{\"persistent\":\"\",\"max-width\":\"600\"},model:{value:(_vm.showReplaceMeDialog),callback:function ($$v) {_vm.showReplaceMeDialog=$$v},expression:\"showReplaceMeDialog\"}},[_c('ReplaceMeForm',{attrs:{\"payload\":_vm.payload},on:{\"closeModal\":_vm.closeModal}})],1)],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',[_c('v-card-title',[_vm._v(_vm._s(_vm.$t('replaceMe.formTitle')))]),_c('v-card-text',[_c('v-form',{ref:\"replaceMeForm\",attrs:{\"lazy-validation\":\"\",\"autocomplete\":\"off\"},model:{value:(_vm.isValid),callback:function ($$v) {_vm.isValid=$$v},expression:\"isValid\"}},[_c('p',{staticClass:\"mb-0\"},[_vm._v(\" \"+_vm._s(_vm.$t('replaceMe.formLocationSelectQuestionText', { selectedDay: _vm.compSelectedDay, }))+\" \")]),(_vm.locations.length > 1)?_c('v-select',{ref:\"replace-me-form__location-select\",attrs:{\"id\":\"replace-me-form__location-select\",\"label\":_vm.$t('bookingCreate.formLocationTitle'),\"items\":_vm.locations,\"item-text\":\"locationName\",\"item-value\":\"locationId\",\"hint\":_vm.$t('replaceMe.formLocationSelectInputHint'),\"persistent-hint\":\"\",\"rules\":[_vm.rules.required]},model:{value:(_vm.payload.locationId),callback:function ($$v) {_vm.$set(_vm.payload, \"locationId\", $$v)},expression:\"payload.locationId\"}}):_c('v-text-field',{ref:\"replace-me-form__location-select\",attrs:{\"id\":\"replace-me-form__location-select\",\"label\":_vm.$t('bookingCreate.formLocationTitle'),\"readonly\":\"\",\"value\":_vm.selectedLocationsName}}),_c('p',{staticClass:\"mb-0 mt-6-\"},[_vm._v(\" \"+_vm._s(_vm.$t('replaceMe.formReasonSelectQuestionText', { selectedDay: _vm.compSelectedDay, }))+\" \")]),_c('v-select',{ref:\"replace-me-form__reason-select\",attrs:{\"id\":\"replace-me-form__reason-select\",\"label\":((_vm.$t('bookingCreate.formReasonInputLabel')) + \" *\"),\"items\":_vm.reasons,\"item-text\":\"name\",\"item-value\":\"id\",\"rules\":[_vm.rules.required]},model:{value:(_vm.payload.reasonForAbsence),callback:function ($$v) {_vm.$set(_vm.payload, \"reasonForAbsence\", $$v)},expression:\"payload.reasonForAbsence\"}}),_c('p',{staticClass:\"mb-0 mt-4\"},[_vm._v(\" \"+_vm._s(_vm.$t('replaceMe.formDutiesQuestionText'))+\" \")]),_c('v-autocomplete',{ref:\"replace-me-form__grade-select\",attrs:{\"id\":\"replace-me-form__grade-select\",\"label\":((_vm.$t('replaceMe.formSelectGradesInputLabel')) + \" *\"),\"items\":_vm.gradesList,\"item-text\":\"title\",\"item-value\":\"id\",\"multiple\":\"\",\"loading\":_vm.isLoadingGrades,\"chips\":\"\",\"small-chips\":\"\",\"rules\":[_vm.rules.requiredWithAtleastOneItemSelected]},model:{value:(_vm.payload.subjectList),callback:function ($$v) {_vm.$set(_vm.payload, \"subjectList\", $$v)},expression:\"payload.subjectList\"}}),_c('v-text-field',{attrs:{\"id\":\"replace-me-form__room-input\",\"label\":((_vm.$t('bookingCreate.formRoomInputLabel')) + \" *\"),\"rules\":[_vm.rules.required]},model:{value:(_vm.payload.room),callback:function ($$v) {_vm.$set(_vm.payload, \"room\", $$v)},expression:\"payload.room\"}}),_c('p',{staticClass:\"mb-0 mt-4\"},[_vm._v(\" \"+_vm._s(_vm.$t('replaceMe.formNotesQuestionText'))+\" \")]),_c('v-textarea',{ref:\"replace-me-form__notes-input\",attrs:{\"id\":\"replace-me-form__notes-input\",\"name\":\"notes\",\"label\":_vm.$t('bookingCreate.formNotesInputLabel'),\"auto-grow\":\"\",\"rows\":\"1\"},model:{value:(_vm.payload.additionalNotes),callback:function ($$v) {_vm.$set(_vm.payload, \"additionalNotes\", $$v)},expression:\"payload.additionalNotes\"}})],1)],1),_c('v-divider'),_c('v-card-actions',[_c('v-spacer'),_c('v-btn',{attrs:{\"id\":\"replace-me-form__cancel-btn\",\"large\":\"\",\"text\":\"\",\"disabled\":_vm.isLoading},on:{\"click\":function($event){return _vm.close(false)}}},[_vm._v(\" \"+_vm._s(_vm.$t('general.cancel'))+\" \")]),_c('v-btn',{attrs:{\"id\":\"replace-me-form__submit-btn\",\"disabled\":!_vm.isValid,\"loading\":_vm.isLoading,\"large\":\"\",\"color\":\"blue\",\"text\":\"\"},on:{\"click\":_vm.submit}},[_vm._v(\" \"+_vm._s(_vm.$t('general.submit'))+\" \")])],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./replace-me-form.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./replace-me-form.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./replace-me-form.vue?vue&type=template&id=09eeb1af&\"\nimport script from \"./replace-me-form.vue?vue&type=script&lang=js&\"\nexport * from \"./replace-me-form.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VAutocomplete } from 'vuetify/lib/components/VAutocomplete';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VForm } from 'vuetify/lib/components/VForm';\nimport { VSelect } from 'vuetify/lib/components/VSelect';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\nimport { VTextarea } from 'vuetify/lib/components/VTextarea';\ninstallComponents(component, {VAutocomplete,VBtn,VCard,VCardActions,VCardText,VCardTitle,VDivider,VForm,VSelect,VSpacer,VTextField,VTextarea})\n","import { ReasonsForAbsence } from '@/shared/constants/booking/ReasonsForAbsence'\n\nexport default function(\n payload,\n selectedDay,\n isNextMonday,\n firstAccessibleLocation\n) {\n return {\n selectedDay,\n isNextMonday,\n reasonForAbsence: payload?.reasonForAbsence\n ? payload?.reasonForAbsence\n : ReasonsForAbsence[0].id, // Default: Not Provided\n room: payload?.room ? payload?.room : '',\n additionalNotes: payload?.additionalNotes ? payload?.additionalNotes : '',\n locationId: firstAccessibleLocation?.locationId,\n classification: payload?.classification ? payload?.classification : null,\n subjectList: payload?.subjectList ? payload?.subjectList : [],\n }\n}\n","\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./replace-me-banner.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./replace-me-banner.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./replace-me-banner.vue?vue&type=template&id=b17bcc7a&\"\nimport script from \"./replace-me-banner.vue?vue&type=script&lang=js&\"\nexport * from \"./replace-me-banner.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VAlert } from 'vuetify/lib/components/VAlert';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VAlert,VBtn,VCard,VCardText,VDialog,VIcon,VTooltip})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.day)?_c('v-card',{class:[\n 'transparent d-flex flex-column justify-center align-center text-center',\n _vm.isMobileViewPort ? '' : 'pa-8 mb-6' ],attrs:{\"elevation\":\"0\"}},[_c('v-card-title',[_c('v-icon',{staticClass:\"mb-5\",staticStyle:{\"font-size\":\"80px\"}},[_vm._v(\" \"+_vm._s(_vm.icon)+\" \")])],1),_c('v-card-title',[_c('h4',{class:[_vm.description ? 'mb-2' : '', 'font-weight-medium']},[_vm._v(_vm._s(_vm.title))])]),_c('v-card-text',[_c('p',{staticClass:\"ws-pre-wrap subtitle-1\"},[_vm._v(_vm._s(_vm.description))])]),_c('v-card-actions',[(\n !_vm.isPast || (_vm.isToday && _vm.hasAtLeastOneLocationNotPassedSameDayCutOff)\n )?_c('v-btn',{staticClass:\"custom-elevation white--text px-4\",attrs:{\"id\":\"booking-summary-empty-day-block_create-booking-btn\",\"color\":\"blue\",\"large\":\"\",\"to\":{\n name: 'bookings-create',\n query: { date: _vm.compDateForCreateBooking },\n }}},[_vm._v(\" \"+_vm._s(this.$t('booking.createBtn'))+\" \")]):(!_vm.isToday)?_c('v-btn',{staticClass:\"custom-elevation white--text px-4\",attrs:{\"id\":\"booking-summary-empty-day-block_jump-btn\",\"color\":\"blue\",\"outlined\":\"\",\"large\":\"\"},on:{\"click\":_vm.jumpToToday}},[_vm._v(\" \"+_vm._s(this.$t('booking.emptDayBlockJumpToTodayBtn'))+\" \"),_c('v-icon',{attrs:{\"right\":\"\"}},[_vm._v(\"mdi-arrow-right\")])],1):_vm._e()],1)],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * Zero indexed week day mapping https://day.js.org/docs/en/get-set/day\n */\nexport const DayOfWeek = Object.freeze({\n SUNDAY: 0,\n MONDAY: 1,\n TUESDAY: 2,\n WEDNESDAY: 3,\n THURSDAY: 4,\n FRIDAY: 5,\n SATURDAY: 6,\n})\n","/**\n * ISO day of the week with 1 being Monday and 7 being Sunday https://day.js.org/docs/en/get-set/iso-weekday\n */\nexport const DayOfWeekIso = Object.freeze({\n MONDAY: 1,\n TUESDAY: 2,\n WEDNESDAY: 3,\n THURSDAY: 4,\n FRIDAY: 5,\n SATURDAY: 6,\n SUNDAY: 7,\n})\n","\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./booking-summary-empty-day-block.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./booking-summary-empty-day-block.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./booking-summary-empty-day-block.vue?vue&type=template&id=575d5c1e&\"\nimport script from \"./booking-summary-empty-day-block.vue?vue&type=script&lang=js&\"\nexport * from \"./booking-summary-empty-day-block.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\ninstallComponents(component, {VBtn,VCard,VCardActions,VCardText,VCardTitle,VIcon})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',{staticClass:\"transparent ma-0 pa-0\",attrs:{\"elevation\":\"0\"}},[_c('v-card-text',{staticClass:\"ma-0 pa-0\"},[_c('v-row',_vm._l((_vm.filteredNavItems),function(item){return _c('v-col',{key:((item.key) + \"-dashboard\"),attrs:{\"cols\":\"12\",\"xs\":\"6\",\"sm\":\"6\",\"md\":\"4\",\"lg\":\"4\",\"xl\":\"4\"}},[_c('theDashboardNavigationItem',{attrs:{\"payload\":item,\"is-active\":_vm.isActiveNavItem(item.to)}})],1)}),1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',{staticClass:\"custom-elevation rounded-xl d-flex flex-column justify-center align-center pa-4 overflow-hidden text-center\",attrs:{\"height\":\"100%\",\"to\":_vm.payload.to}},[_c('v-card-title',{staticClass:\"mb-1\"},[_c('v-icon',{attrs:{\"color\":_vm.isActive ? 'blue' : '',\"x-large\":\"\"}},[_vm._v(_vm._s(_vm.payload.icon))])],1),_c('v-card-actions',[_c('header',{staticClass:\"grow\"},[_c('p',{class:[\n 'subtitle-1 font-weight-medium',\n _vm.isActive ? 'blue--text' : '' ]},[_vm._v(\" \"+_vm._s(_vm.payload.title)+\" \")])])])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./the-dashboard-navigation-item.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./the-dashboard-navigation-item.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./the-dashboard-navigation-item.vue?vue&type=template&id=b837a158&\"\nimport script from \"./the-dashboard-navigation-item.vue?vue&type=script&lang=js&\"\nexport * from \"./the-dashboard-navigation-item.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\ninstallComponents(component, {VCard,VCardActions,VCardTitle,VIcon})\n","\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./the-dashboard-navigation.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./the-dashboard-navigation.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./the-dashboard-navigation.vue?vue&type=template&id=7aa85b94&\"\nimport script from \"./the-dashboard-navigation.vue?vue&type=script&lang=js&\"\nexport * from \"./the-dashboard-navigation.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VRow } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VCard,VCardText,VCol,VRow})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-dialog',{attrs:{\"max-width\":\"600\",\"persistent\":_vm.isLoadingCancelBooking},on:{\"input\":function($event){return _vm.$emit('closeModal')}},model:{value:(_vm.show),callback:function ($$v) {_vm.show=$$v},expression:\"show\"}},[_c('v-card',{attrs:{\"id\":\"cancel-booking-dialog\"}},[_c('v-card-title',[_vm._v(\" \"+_vm._s(_vm.compTitle)+\" \")]),(_vm.canCancelBooking)?_c('v-card-text',[_c('v-textarea',{ref:\"cancelBookingFormReason\",attrs:{\"id\":\"cancel-booking-form__reason\",\"name\":\"cancelReason\",\"label\":_vm.compInputLabel,\"required\":\"\"},model:{value:(_vm.payload.cancelReason),callback:function ($$v) {_vm.$set(_vm.payload, \"cancelReason\", $$v)},expression:\"payload.cancelReason\"}})],1):_c('v-card-text',{staticClass:\"cancel-booking-dialog__unable-to-cancel-section\"},[_c('p',[_vm._v(\" \"+_vm._s(_vm.unableToCancelDescription)+\" \")]),(_vm.compReasonForBeingUnableToCancel)?_c('div',[_c('span',{staticClass:\"caption\"},[_vm._v(\" \"+_vm._s(_vm.$t('booking.cancelBookingUnableReasonLabel'))+\" \")]),_c('p',[_vm._v(\" \"+_vm._s(_vm.compReasonForBeingUnableToCancel)+\" \")])]):_vm._e(),(_vm.owner)?_c('div',[_c('span',{staticClass:\"caption\"},[_vm._v(\" \"+_vm._s(_vm.compConsultantLabel)+\" \")]),_c('p',[_vm._v(\" \"+_vm._s(_vm.ownerName)+\" \"),_c('a',{attrs:{\"title\":(\"tel:\" + _vm.ownerPhone),\"href\":(\"tel:\" + _vm.ownerPhone)}},[_vm._v(\" \"+_vm._s(_vm.ownerPhone)+\" \")])])]):_vm._e()]),_c('v-card-actions',[_c('v-spacer'),_c('v-btn',{attrs:{\"text\":\"\",\"disabled\":_vm.isLoadingCancelBooking},on:{\"click\":function($event){return _vm.$emit('closeModal')}}},[_vm._v(\" \"+_vm._s(_vm.$t('general.close'))+\" \")]),_c('v-btn',{attrs:{\"id\":\"cancel-booking-dialog__submit-btn\",\"disabled\":_vm.isSubmitButtonDisabled,\"color\":\"red\",\"text\":\"\",\"loading\":_vm.isLoadingCancelBooking},on:{\"click\":_vm.submit}},[_vm._v(\" \"+_vm._s(_vm.$t('booking.cancelBookingBtn'))+\" \")])],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./cancel-booking-dialog.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./cancel-booking-dialog.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./cancel-booking-dialog.vue?vue&type=template&id=2c06ce1f&\"\nimport script from \"./cancel-booking-dialog.vue?vue&type=script&lang=js&\"\nexport * from \"./cancel-booking-dialog.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VTextarea } from 'vuetify/lib/components/VTextarea';\ninstallComponents(component, {VBtn,VCard,VCardActions,VCardText,VCardTitle,VDialog,VSpacer,VTextarea})\n","/**\n * Breakdown of booking status values to populate the stats UI\n */\nexport default class OverviewStatsDto {\n constructor({ openBookings = 0, totalBookings = 0 } = {}) {\n /**\n * Number of bookings filled\n * @type {Number}\n */\n this.filled = totalBookings - openBookings\n\n /**\n * Number of total bookings\n * @type {Number}\n */\n this.totalBookings = totalBookings\n\n /**\n * Number of unfilled bookings\n * @type {Number}\n */\n this.unfilled = openBookings\n\n const displayNA = openBookings === 0 && totalBookings === 0\n\n const percentage = (this.filled / totalBookings) * 100\n const skipRounding = percentage <= 0 || isNaN(percentage)\n\n let fillRate = skipRounding ? 0 : Math.round(percentage)\n\n if (displayNA) {\n fillRate = -1\n }\n\n /**\n * Percentage of bookings filled\n * @type {Number}\n */\n this.fillRate = fillRate\n }\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"d-flex justify-end align-center\"},[_c('div',{staticClass:\"text-center\"},[_c('header',{staticClass:\"caption\"},[_vm._v(\" \"+_vm._s(_vm.$t('clientGroupOverview.stats.totalFilledLabel'))+\" \")]),_c('p',{staticClass:\"text-h4 mb-0 text-center\"},[_vm._v(_vm._s(_vm.compFilledBookings))])]),_c('div',{staticClass:\"text-center ml-8\"},[_c('header',{staticClass:\"caption\"},[_vm._v(\" \"+_vm._s(_vm.$t('clientGroupOverview.stats.totalOpenLabel'))+\" \")]),_c('p',{staticClass:\"text-h4 mb-0 text-center\"},[_vm._v(_vm._s(_vm.compUnfilledBookings))])]),_c('div',{staticClass:\"text-center ml-8\"},[_c('header',{staticClass:\"caption\"},[_vm._v(\" \"+_vm._s(_vm.$t('clientGroupOverview.stats.totalBookingsLabel'))+\" \")]),_c('h4',{staticClass:\"text-h4 mb-0\"},[_vm._v(_vm._s(_vm.compTotalBookings))])]),_c('ClientGroupOverviewFillRateChart',{staticClass:\"ml-6 mt-4\",attrs:{\"overview-stats\":_vm.stats,\"width\":90,\"height\":90,\"cut-out\":35}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',{staticClass:\"d-flex align-center flex-column\"},[(_vm.hasStatsObject && _vm.chartData)?_c('Doughnut',{attrs:{\"width\":_vm.width,\"height\":_vm.height,\"chart-data\":_vm.chartData,\"chart-options\":_vm.options,\"plugins\":_vm.plugins}}):_c('div',{staticClass:\"d-flex flex-column justify-center text-center\",staticStyle:{\"width\":\"150px\",\"height\":\"150px\"}},[_c('p',{staticClass:\"text-h6\"},[_c('v-icon',{attrs:{\"left\":\"\",\"color\":\"primary\"}},[_vm._v(\"mdi-alert-circle\")]),_vm._v(\" \"+_vm._s(_vm.$t('clientGroupOverview.stats.donut.noDataText'))+\" \")],1)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/*!\n * Chart.js v3.8.0\n * https://www.chartjs.org\n * (c) 2022 Chart.js Contributors\n * Released under the MIT License\n */\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\nconst requestAnimFrame = (function() {\n if (typeof window === 'undefined') {\n return function(callback) {\n return callback();\n };\n }\n return window.requestAnimationFrame;\n}());\nfunction throttled(fn, thisArg, updateFn) {\n const updateArgs = updateFn || ((args) => Array.prototype.slice.call(args));\n let ticking = false;\n let args = [];\n return function(...rest) {\n args = updateArgs(rest);\n if (!ticking) {\n ticking = true;\n requestAnimFrame.call(window, () => {\n ticking = false;\n fn.apply(thisArg, args);\n });\n }\n };\n}\nfunction debounce(fn, delay) {\n let timeout;\n return function(...args) {\n if (delay) {\n clearTimeout(timeout);\n timeout = setTimeout(fn, delay, args);\n } else {\n fn.apply(this, args);\n }\n return delay;\n };\n}\nconst _toLeftRightCenter = (align) => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\nconst _alignStartEnd = (align, start, end) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\nconst _textX = (align, left, right, rtl) => {\n const check = rtl ? 'left' : 'right';\n return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n\nfunction noop() {}\nconst uid = (function() {\n let id = 0;\n return function() {\n return id++;\n };\n}());\nfunction isNullOrUndef(value) {\n return value === null || typeof value === 'undefined';\n}\nfunction isArray(value) {\n if (Array.isArray && Array.isArray(value)) {\n return true;\n }\n const type = Object.prototype.toString.call(value);\n if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n return true;\n }\n return false;\n}\nfunction isObject(value) {\n return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\nconst isNumberFinite = (value) => (typeof value === 'number' || value instanceof Number) && isFinite(+value);\nfunction finiteOrDefault(value, defaultValue) {\n return isNumberFinite(value) ? value : defaultValue;\n}\nfunction valueOrDefault(value, defaultValue) {\n return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension) =>\n typeof value === 'string' && value.endsWith('%') ?\n parseFloat(value) / 100\n : value / dimension;\nconst toDimension = (value, dimension) =>\n typeof value === 'string' && value.endsWith('%') ?\n parseFloat(value) / 100 * dimension\n : +value;\nfunction callback(fn, args, thisArg) {\n if (fn && typeof fn.call === 'function') {\n return fn.apply(thisArg, args);\n }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n let i, len, keys;\n if (isArray(loopable)) {\n len = loopable.length;\n if (reverse) {\n for (i = len - 1; i >= 0; i--) {\n fn.call(thisArg, loopable[i], i);\n }\n } else {\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[i], i);\n }\n }\n } else if (isObject(loopable)) {\n keys = Object.keys(loopable);\n len = keys.length;\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[keys[i]], keys[i]);\n }\n }\n}\nfunction _elementsEqual(a0, a1) {\n let i, ilen, v0, v1;\n if (!a0 || !a1 || a0.length !== a1.length) {\n return false;\n }\n for (i = 0, ilen = a0.length; i < ilen; ++i) {\n v0 = a0[i];\n v1 = a1[i];\n if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n return false;\n }\n }\n return true;\n}\nfunction clone$1(source) {\n if (isArray(source)) {\n return source.map(clone$1);\n }\n if (isObject(source)) {\n const target = Object.create(null);\n const keys = Object.keys(source);\n const klen = keys.length;\n let k = 0;\n for (; k < klen; ++k) {\n target[keys[k]] = clone$1(source[keys[k]]);\n }\n return target;\n }\n return source;\n}\nfunction isValidKey(key) {\n return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\nfunction _merger(key, target, source, options) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n merge(tval, sval, options);\n } else {\n target[key] = clone$1(sval);\n }\n}\nfunction merge(target, source, options) {\n const sources = isArray(source) ? source : [source];\n const ilen = sources.length;\n if (!isObject(target)) {\n return target;\n }\n options = options || {};\n const merger = options.merger || _merger;\n for (let i = 0; i < ilen; ++i) {\n source = sources[i];\n if (!isObject(source)) {\n continue;\n }\n const keys = Object.keys(source);\n for (let k = 0, klen = keys.length; k < klen; ++k) {\n merger(keys[k], target, source, options);\n }\n }\n return target;\n}\nfunction mergeIf(target, source) {\n return merge(target, source, {merger: _mergerIf});\n}\nfunction _mergerIf(key, target, source) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n mergeIf(tval, sval);\n } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n target[key] = clone$1(sval);\n }\n}\nfunction _deprecated(scope, value, previous, current) {\n if (value !== undefined) {\n console.warn(scope + ': \"' + previous +\n\t\t\t'\" is deprecated. Please use \"' + current + '\" instead');\n }\n}\nconst emptyString = '';\nconst dot = '.';\nfunction indexOfDotOrLength(key, start) {\n const idx = key.indexOf(dot, start);\n return idx === -1 ? key.length : idx;\n}\nfunction resolveObjectKey(obj, key) {\n if (key === emptyString) {\n return obj;\n }\n let pos = 0;\n let idx = indexOfDotOrLength(key, pos);\n while (obj && idx > pos) {\n obj = obj[key.slice(pos, idx)];\n pos = idx + 1;\n idx = indexOfDotOrLength(key, pos);\n }\n return obj;\n}\nfunction _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = (value) => typeof value !== 'undefined';\nconst isFunction = (value) => typeof value === 'function';\nconst setsEqual = (a, b) => {\n if (a.size !== b.size) {\n return false;\n }\n for (const item of a) {\n if (!b.has(item)) {\n return false;\n }\n }\n return true;\n};\nfunction _isClickEvent(e) {\n return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n\nconst PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction niceNum(range) {\n const roundedRange = Math.round(range);\n range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n const niceRange = Math.pow(10, Math.floor(log10(range)));\n const fraction = range / niceRange;\n const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n return niceFraction * niceRange;\n}\nfunction _factorize(value) {\n const result = [];\n const sqrt = Math.sqrt(value);\n let i;\n for (i = 1; i < sqrt; i++) {\n if (value % i === 0) {\n result.push(i);\n result.push(value / i);\n }\n }\n if (sqrt === (sqrt | 0)) {\n result.push(sqrt);\n }\n result.sort((a, b) => a - b).pop();\n return result;\n}\nfunction isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostEquals(x, y, epsilon) {\n return Math.abs(x - y) < epsilon;\n}\nfunction almostWhole(x, epsilon) {\n const rounded = Math.round(x);\n return ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);\n}\nfunction _setMinAndMaxByKey(array, target, property) {\n let i, ilen, value;\n for (i = 0, ilen = array.length; i < ilen; i++) {\n value = array[i][property];\n if (!isNaN(value)) {\n target.min = Math.min(target.min, value);\n target.max = Math.max(target.max, value);\n }\n }\n}\nfunction toRadians(degrees) {\n return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n return radians * (180 / PI);\n}\nfunction _decimalPlaces(x) {\n if (!isNumberFinite(x)) {\n return;\n }\n let e = 1;\n let p = 0;\n while (Math.round(x * e) / e !== x) {\n e *= 10;\n p++;\n }\n return p;\n}\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n const distanceFromXCenter = anglePoint.x - centrePoint.x;\n const distanceFromYCenter = anglePoint.y - centrePoint.y;\n const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n if (angle < (-0.5 * PI)) {\n angle += TAU;\n }\n return {\n angle,\n distance: radialDistanceFromCenter\n };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\nfunction _angleDiff(a, b) {\n return (a - b + PITAU) % TAU - PI;\n}\nfunction _normalizeAngle(a) {\n return (a % TAU + TAU) % TAU;\n}\nfunction _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n const a = _normalizeAngle(angle);\n const s = _normalizeAngle(start);\n const e = _normalizeAngle(end);\n const angleToStart = _normalizeAngle(s - a);\n const angleToEnd = _normalizeAngle(e - a);\n const startToAngle = _normalizeAngle(a - s);\n const endToAngle = _normalizeAngle(a - e);\n return a === s || a === e || (sameAngleIsFullCircle && s === e)\n || (angleToStart > angleToEnd && startToAngle < endToAngle);\n}\nfunction _limitValue(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\nfunction _int16Range(value) {\n return _limitValue(value, -32768, 32767);\n}\nfunction _isBetween(value, start, end, epsilon = 1e-6) {\n return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n\nconst atEdge = (t) => t === 0 || t === 1;\nconst elasticIn = (t, s, p) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\nconst effects = {\n linear: t => t,\n easeInQuad: t => t * t,\n easeOutQuad: t => -t * (t - 2),\n easeInOutQuad: t => ((t /= 0.5) < 1)\n ? 0.5 * t * t\n : -0.5 * ((--t) * (t - 2) - 1),\n easeInCubic: t => t * t * t,\n easeOutCubic: t => (t -= 1) * t * t + 1,\n easeInOutCubic: t => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t\n : 0.5 * ((t -= 2) * t * t + 2),\n easeInQuart: t => t * t * t * t,\n easeOutQuart: t => -((t -= 1) * t * t * t - 1),\n easeInOutQuart: t => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t * t\n : -0.5 * ((t -= 2) * t * t * t - 2),\n easeInQuint: t => t * t * t * t * t,\n easeOutQuint: t => (t -= 1) * t * t * t * t + 1,\n easeInOutQuint: t => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t * t * t\n : 0.5 * ((t -= 2) * t * t * t * t + 2),\n easeInSine: t => -Math.cos(t * HALF_PI) + 1,\n easeOutSine: t => Math.sin(t * HALF_PI),\n easeInOutSine: t => -0.5 * (Math.cos(PI * t) - 1),\n easeInExpo: t => (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)),\n easeOutExpo: t => (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1,\n easeInOutExpo: t => atEdge(t) ? t : t < 0.5\n ? 0.5 * Math.pow(2, 10 * (t * 2 - 1))\n : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n easeInCirc: t => (t >= 1) ? t : -(Math.sqrt(1 - t * t) - 1),\n easeOutCirc: t => Math.sqrt(1 - (t -= 1) * t),\n easeInOutCirc: t => ((t /= 0.5) < 1)\n ? -0.5 * (Math.sqrt(1 - t * t) - 1)\n : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n easeInElastic: t => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n easeOutElastic: t => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n easeInOutElastic(t) {\n const s = 0.1125;\n const p = 0.45;\n return atEdge(t) ? t :\n t < 0.5\n ? 0.5 * elasticIn(t * 2, s, p)\n : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n },\n easeInBack(t) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n },\n easeOutBack(t) {\n const s = 1.70158;\n return (t -= 1) * t * ((s + 1) * t + s) + 1;\n },\n easeInOutBack(t) {\n let s = 1.70158;\n if ((t /= 0.5) < 1) {\n return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\n }\n return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n },\n easeInBounce: t => 1 - effects.easeOutBounce(1 - t),\n easeOutBounce(t) {\n const m = 7.5625;\n const d = 2.75;\n if (t < (1 / d)) {\n return m * t * t;\n }\n if (t < (2 / d)) {\n return m * (t -= (1.5 / d)) * t + 0.75;\n }\n if (t < (2.5 / d)) {\n return m * (t -= (2.25 / d)) * t + 0.9375;\n }\n return m * (t -= (2.625 / d)) * t + 0.984375;\n },\n easeInOutBounce: t => (t < 0.5)\n ? effects.easeInBounce(t * 2) * 0.5\n : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5,\n};\n\n/*!\n * @kurkle/color v0.2.1\n * https://github.com/kurkle/color#readme\n * (c) 2022 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n return lim(round(v * 2.55), 0, 255);\n}\nfunction n2b(v) {\n return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n return lim(round(v * 100), 0, 100);\n}\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n var len = str.length;\n var ret;\n if (str[0] === '#') {\n if (len === 4 || len === 5) {\n ret = {\n r: 255 & map$1[str[1]] * 17,\n g: 255 & map$1[str[2]] * 17,\n b: 255 & map$1[str[3]] * 17,\n a: len === 5 ? map$1[str[4]] * 17 : 255\n };\n } else if (len === 7 || len === 9) {\n ret = {\n r: map$1[str[1]] << 4 | map$1[str[2]],\n g: map$1[str[3]] << 4 | map$1[str[4]],\n b: map$1[str[5]] << 4 | map$1[str[6]],\n a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n };\n }\n }\n return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n var f = isShort(v) ? h1 : h2;\n return v\n ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n : undefined;\n}\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n const a = s * Math.min(l, 1 - l);\n const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n const rgb = hsl2rgbn(h, 1, 0.5);\n let i;\n if (w + b > 1) {\n i = 1 / (w + b);\n w *= i;\n b *= i;\n }\n for (i = 0; i < 3; i++) {\n rgb[i] *= 1 - w - b;\n rgb[i] += w;\n }\n return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n if (r === max) {\n return ((g - b) / d) + (g < b ? 6 : 0);\n }\n if (g === max) {\n return (b - r) / d + 2;\n }\n return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n const range = 255;\n const r = v.r / range;\n const g = v.g / range;\n const b = v.b / range;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n let h, s, d;\n if (max !== min) {\n d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n h = hueValue(r, g, b, d, max);\n h = h * 60 + 0.5;\n }\n return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n return (\n Array.isArray(a)\n ? f(a[0], a[1], a[2])\n : f(a, b, c)\n ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n const m = HUE_RE.exec(str);\n let a = 255;\n let v;\n if (!m) {\n return;\n }\n if (m[5] !== v) {\n a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n }\n const h = hue(+m[2]);\n const p1 = +m[3] / 100;\n const p2 = +m[4] / 100;\n if (m[1] === 'hwb') {\n v = hwb2rgb(h, p1, p2);\n } else if (m[1] === 'hsv') {\n v = hsv2rgb(h, p1, p2);\n } else {\n v = hsl2rgb(h, p1, p2);\n }\n return {\n r: v[0],\n g: v[1],\n b: v[2],\n a: a\n };\n}\nfunction rotate(v, deg) {\n var h = rgb2hsl(v);\n h[0] = hue(h[0] + deg);\n h = hsl2rgb(h);\n v.r = h[0];\n v.g = h[1];\n v.b = h[2];\n}\nfunction hslString(v) {\n if (!v) {\n return;\n }\n const a = rgb2hsl(v);\n const h = a[0];\n const s = n2p(a[1]);\n const l = n2p(a[2]);\n return v.a < 255\n ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n : `hsl(${h}, ${s}%, ${l}%)`;\n}\nconst map = {\n x: 'dark',\n Z: 'light',\n Y: 're',\n X: 'blu',\n W: 'gr',\n V: 'medium',\n U: 'slate',\n A: 'ee',\n T: 'ol',\n S: 'or',\n B: 'ra',\n C: 'lateg',\n D: 'ights',\n R: 'in',\n Q: 'turquois',\n E: 'hi',\n P: 'ro',\n O: 'al',\n N: 'le',\n M: 'de',\n L: 'yello',\n F: 'en',\n K: 'ch',\n G: 'arks',\n H: 'ea',\n I: 'ightg',\n J: 'wh'\n};\nconst names$1 = {\n OiceXe: 'f0f8ff',\n antiquewEte: 'faebd7',\n aqua: 'ffff',\n aquamarRe: '7fffd4',\n azuY: 'f0ffff',\n beige: 'f5f5dc',\n bisque: 'ffe4c4',\n black: '0',\n blanKedOmond: 'ffebcd',\n Xe: 'ff',\n XeviTet: '8a2be2',\n bPwn: 'a52a2a',\n burlywood: 'deb887',\n caMtXe: '5f9ea0',\n KartYuse: '7fff00',\n KocTate: 'd2691e',\n cSO: 'ff7f50',\n cSnflowerXe: '6495ed',\n cSnsilk: 'fff8dc',\n crimson: 'dc143c',\n cyan: 'ffff',\n xXe: '8b',\n xcyan: '8b8b',\n xgTMnPd: 'b8860b',\n xWay: 'a9a9a9',\n xgYF: '6400',\n xgYy: 'a9a9a9',\n xkhaki: 'bdb76b',\n xmagFta: '8b008b',\n xTivegYF: '556b2f',\n xSange: 'ff8c00',\n xScEd: '9932cc',\n xYd: '8b0000',\n xsOmon: 'e9967a',\n xsHgYF: '8fbc8f',\n xUXe: '483d8b',\n xUWay: '2f4f4f',\n xUgYy: '2f4f4f',\n xQe: 'ced1',\n xviTet: '9400d3',\n dAppRk: 'ff1493',\n dApskyXe: 'bfff',\n dimWay: '696969',\n dimgYy: '696969',\n dodgerXe: '1e90ff',\n fiYbrick: 'b22222',\n flSOwEte: 'fffaf0',\n foYstWAn: '228b22',\n fuKsia: 'ff00ff',\n gaRsbSo: 'dcdcdc',\n ghostwEte: 'f8f8ff',\n gTd: 'ffd700',\n gTMnPd: 'daa520',\n Way: '808080',\n gYF: '8000',\n gYFLw: 'adff2f',\n gYy: '808080',\n honeyMw: 'f0fff0',\n hotpRk: 'ff69b4',\n RdianYd: 'cd5c5c',\n Rdigo: '4b0082',\n ivSy: 'fffff0',\n khaki: 'f0e68c',\n lavFMr: 'e6e6fa',\n lavFMrXsh: 'fff0f5',\n lawngYF: '7cfc00',\n NmoncEffon: 'fffacd',\n ZXe: 'add8e6',\n ZcSO: 'f08080',\n Zcyan: 'e0ffff',\n ZgTMnPdLw: 'fafad2',\n ZWay: 'd3d3d3',\n ZgYF: '90ee90',\n ZgYy: 'd3d3d3',\n ZpRk: 'ffb6c1',\n ZsOmon: 'ffa07a',\n ZsHgYF: '20b2aa',\n ZskyXe: '87cefa',\n ZUWay: '778899',\n ZUgYy: '778899',\n ZstAlXe: 'b0c4de',\n ZLw: 'ffffe0',\n lime: 'ff00',\n limegYF: '32cd32',\n lRF: 'faf0e6',\n magFta: 'ff00ff',\n maPon: '800000',\n VaquamarRe: '66cdaa',\n VXe: 'cd',\n VScEd: 'ba55d3',\n VpurpN: '9370db',\n VsHgYF: '3cb371',\n VUXe: '7b68ee',\n VsprRggYF: 'fa9a',\n VQe: '48d1cc',\n VviTetYd: 'c71585',\n midnightXe: '191970',\n mRtcYam: 'f5fffa',\n mistyPse: 'ffe4e1',\n moccasR: 'ffe4b5',\n navajowEte: 'ffdead',\n navy: '80',\n Tdlace: 'fdf5e6',\n Tive: '808000',\n TivedBb: '6b8e23',\n Sange: 'ffa500',\n SangeYd: 'ff4500',\n ScEd: 'da70d6',\n pOegTMnPd: 'eee8aa',\n pOegYF: '98fb98',\n pOeQe: 'afeeee',\n pOeviTetYd: 'db7093',\n papayawEp: 'ffefd5',\n pHKpuff: 'ffdab9',\n peru: 'cd853f',\n pRk: 'ffc0cb',\n plum: 'dda0dd',\n powMrXe: 'b0e0e6',\n purpN: '800080',\n YbeccapurpN: '663399',\n Yd: 'ff0000',\n Psybrown: 'bc8f8f',\n PyOXe: '4169e1',\n saddNbPwn: '8b4513',\n sOmon: 'fa8072',\n sandybPwn: 'f4a460',\n sHgYF: '2e8b57',\n sHshell: 'fff5ee',\n siFna: 'a0522d',\n silver: 'c0c0c0',\n skyXe: '87ceeb',\n UXe: '6a5acd',\n UWay: '708090',\n UgYy: '708090',\n snow: 'fffafa',\n sprRggYF: 'ff7f',\n stAlXe: '4682b4',\n tan: 'd2b48c',\n teO: '8080',\n tEstN: 'd8bfd8',\n tomato: 'ff6347',\n Qe: '40e0d0',\n viTet: 'ee82ee',\n JHt: 'f5deb3',\n wEte: 'ffffff',\n wEtesmoke: 'f5f5f5',\n Lw: 'ffff00',\n LwgYF: '9acd32'\n};\nfunction unpack() {\n const unpacked = {};\n const keys = Object.keys(names$1);\n const tkeys = Object.keys(map);\n let i, j, k, ok, nk;\n for (i = 0; i < keys.length; i++) {\n ok = nk = keys[i];\n for (j = 0; j < tkeys.length; j++) {\n k = tkeys[j];\n nk = nk.replace(k, map[k]);\n }\n k = parseInt(names$1[ok], 16);\n unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n }\n return unpacked;\n}\nlet names;\nfunction nameParse(str) {\n if (!names) {\n names = unpack();\n names.transparent = [0, 0, 0, 0];\n }\n const a = names[str.toLowerCase()];\n return a && {\n r: a[0],\n g: a[1],\n b: a[2],\n a: a.length === 4 ? a[3] : 255\n };\n}\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n const m = RGB_RE.exec(str);\n let a = 255;\n let r, g, b;\n if (!m) {\n return;\n }\n if (m[7] !== r) {\n const v = +m[7];\n a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n }\n r = +m[1];\n g = +m[3];\n b = +m[5];\n r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n return {\n r: r,\n g: g,\n b: b,\n a: a\n };\n}\nfunction rgbString(v) {\n return v && (\n v.a < 255\n ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n : `rgb(${v.r}, ${v.g}, ${v.b})`\n );\n}\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n const r = from(b2n(rgb1.r));\n const g = from(b2n(rgb1.g));\n const b = from(b2n(rgb1.b));\n return {\n r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n a: rgb1.a + t * (rgb2.a - rgb1.a)\n };\n}\nfunction modHSL(v, i, ratio) {\n if (v) {\n let tmp = rgb2hsl(v);\n tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n tmp = hsl2rgb(tmp);\n v.r = tmp[0];\n v.g = tmp[1];\n v.b = tmp[2];\n }\n}\nfunction clone(v, proto) {\n return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n var v = {r: 0, g: 0, b: 0, a: 255};\n if (Array.isArray(input)) {\n if (input.length >= 3) {\n v = {r: input[0], g: input[1], b: input[2], a: 255};\n if (input.length > 3) {\n v.a = n2b(input[3]);\n }\n }\n } else {\n v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n v.a = n2b(v.a);\n }\n return v;\n}\nfunction functionParse(str) {\n if (str.charAt(0) === 'r') {\n return rgbParse(str);\n }\n return hueParse(str);\n}\nclass Color {\n constructor(input) {\n if (input instanceof Color) {\n return input;\n }\n const type = typeof input;\n let v;\n if (type === 'object') {\n v = fromObject(input);\n } else if (type === 'string') {\n v = hexParse(input) || nameParse(input) || functionParse(input);\n }\n this._rgb = v;\n this._valid = !!v;\n }\n get valid() {\n return this._valid;\n }\n get rgb() {\n var v = clone(this._rgb);\n if (v) {\n v.a = b2n(v.a);\n }\n return v;\n }\n set rgb(obj) {\n this._rgb = fromObject(obj);\n }\n rgbString() {\n return this._valid ? rgbString(this._rgb) : undefined;\n }\n hexString() {\n return this._valid ? hexString(this._rgb) : undefined;\n }\n hslString() {\n return this._valid ? hslString(this._rgb) : undefined;\n }\n mix(color, weight) {\n if (color) {\n const c1 = this.rgb;\n const c2 = color.rgb;\n let w2;\n const p = weight === w2 ? 0.5 : weight;\n const w = 2 * p - 1;\n const a = c1.a - c2.a;\n const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n w2 = 1 - w1;\n c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n c1.a = p * c1.a + (1 - p) * c2.a;\n this.rgb = c1;\n }\n return this;\n }\n interpolate(color, t) {\n if (color) {\n this._rgb = interpolate(this._rgb, color._rgb, t);\n }\n return this;\n }\n clone() {\n return new Color(this.rgb);\n }\n alpha(a) {\n this._rgb.a = n2b(a);\n return this;\n }\n clearer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 - ratio;\n return this;\n }\n greyscale() {\n const rgb = this._rgb;\n const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n rgb.r = rgb.g = rgb.b = val;\n return this;\n }\n opaquer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 + ratio;\n return this;\n }\n negate() {\n const v = this._rgb;\n v.r = 255 - v.r;\n v.g = 255 - v.g;\n v.b = 255 - v.b;\n return this;\n }\n lighten(ratio) {\n modHSL(this._rgb, 2, ratio);\n return this;\n }\n darken(ratio) {\n modHSL(this._rgb, 2, -ratio);\n return this;\n }\n saturate(ratio) {\n modHSL(this._rgb, 1, ratio);\n return this;\n }\n desaturate(ratio) {\n modHSL(this._rgb, 1, -ratio);\n return this;\n }\n rotate(deg) {\n rotate(this._rgb, deg);\n return this;\n }\n}\nfunction index_esm(input) {\n return new Color(input);\n}\n\nfunction isPatternOrGradient(value) {\n if (value && typeof value === 'object') {\n const type = value.toString();\n return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n }\n return false;\n}\nfunction color(value) {\n return isPatternOrGradient(value) ? value : index_esm(value);\n}\nfunction getHoverColor(value) {\n return isPatternOrGradient(value)\n ? value\n : index_esm(value).saturate(0.5).darken(0.1).hexString();\n}\n\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\nfunction getScope$1(node, key) {\n if (!key) {\n return node;\n }\n const keys = key.split('.');\n for (let i = 0, n = keys.length; i < n; ++i) {\n const k = keys[i];\n node = node[k] || (node[k] = Object.create(null));\n }\n return node;\n}\nfunction set(root, scope, values) {\n if (typeof scope === 'string') {\n return merge(getScope$1(root, scope), values);\n }\n return merge(getScope$1(root, ''), scope);\n}\nclass Defaults {\n constructor(_descriptors) {\n this.animation = undefined;\n this.backgroundColor = 'rgba(0,0,0,0.1)';\n this.borderColor = 'rgba(0,0,0,0.1)';\n this.color = '#666';\n this.datasets = {};\n this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio();\n this.elements = {};\n this.events = [\n 'mousemove',\n 'mouseout',\n 'click',\n 'touchstart',\n 'touchmove'\n ];\n this.font = {\n family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n size: 12,\n style: 'normal',\n lineHeight: 1.2,\n weight: null\n };\n this.hover = {};\n this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);\n this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);\n this.hoverColor = (ctx, options) => getHoverColor(options.color);\n this.indexAxis = 'x';\n this.interaction = {\n mode: 'nearest',\n intersect: true,\n includeInvisible: false\n };\n this.maintainAspectRatio = true;\n this.onHover = null;\n this.onClick = null;\n this.parsing = true;\n this.plugins = {};\n this.responsive = true;\n this.scale = undefined;\n this.scales = {};\n this.showLine = true;\n this.drawActiveElementsOnTop = true;\n this.describe(_descriptors);\n }\n set(scope, values) {\n return set(this, scope, values);\n }\n get(scope) {\n return getScope$1(this, scope);\n }\n describe(scope, values) {\n return set(descriptors, scope, values);\n }\n override(scope, values) {\n return set(overrides, scope, values);\n }\n route(scope, name, targetScope, targetName) {\n const scopeObject = getScope$1(this, scope);\n const targetScopeObject = getScope$1(this, targetScope);\n const privateName = '_' + name;\n Object.defineProperties(scopeObject, {\n [privateName]: {\n value: scopeObject[name],\n writable: true\n },\n [name]: {\n enumerable: true,\n get() {\n const local = this[privateName];\n const target = targetScopeObject[targetName];\n if (isObject(local)) {\n return Object.assign({}, target, local);\n }\n return valueOrDefault(local, target);\n },\n set(value) {\n this[privateName] = value;\n }\n }\n });\n }\n}\nvar defaults = new Defaults({\n _scriptable: (name) => !name.startsWith('on'),\n _indexable: (name) => name !== 'events',\n hover: {\n _fallback: 'interaction'\n },\n interaction: {\n _scriptable: false,\n _indexable: false,\n }\n});\n\nfunction toFontString(font) {\n if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n return null;\n }\n return (font.style ? font.style + ' ' : '')\n\t\t+ (font.weight ? font.weight + ' ' : '')\n\t\t+ font.size + 'px '\n\t\t+ font.family;\n}\nfunction _measureText(ctx, data, gc, longest, string) {\n let textWidth = data[string];\n if (!textWidth) {\n textWidth = data[string] = ctx.measureText(string).width;\n gc.push(string);\n }\n if (textWidth > longest) {\n longest = textWidth;\n }\n return longest;\n}\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n cache = cache || {};\n let data = cache.data = cache.data || {};\n let gc = cache.garbageCollect = cache.garbageCollect || [];\n if (cache.font !== font) {\n data = cache.data = {};\n gc = cache.garbageCollect = [];\n cache.font = font;\n }\n ctx.save();\n ctx.font = font;\n let longest = 0;\n const ilen = arrayOfThings.length;\n let i, j, jlen, thing, nestedThing;\n for (i = 0; i < ilen; i++) {\n thing = arrayOfThings[i];\n if (thing !== undefined && thing !== null && isArray(thing) !== true) {\n longest = _measureText(ctx, data, gc, longest, thing);\n } else if (isArray(thing)) {\n for (j = 0, jlen = thing.length; j < jlen; j++) {\n nestedThing = thing[j];\n if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n longest = _measureText(ctx, data, gc, longest, nestedThing);\n }\n }\n }\n }\n ctx.restore();\n const gcLen = gc.length / 2;\n if (gcLen > arrayOfThings.length) {\n for (i = 0; i < gcLen; i++) {\n delete data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n return longest;\n}\nfunction _alignPixel(chart, pixel, width) {\n const devicePixelRatio = chart.currentDevicePixelRatio;\n const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\nfunction clearCanvas(canvas, ctx) {\n ctx = ctx || canvas.getContext('2d');\n ctx.save();\n ctx.resetTransform();\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.restore();\n}\nfunction drawPoint(ctx, options, x, y) {\n let type, xOffset, yOffset, size, cornerRadius;\n const style = options.pointStyle;\n const rotation = options.rotation;\n const radius = options.radius;\n let rad = (rotation || 0) * RAD_PER_DEG;\n if (style && typeof style === 'object') {\n type = style.toString();\n if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(rad);\n ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n ctx.restore();\n return;\n }\n }\n if (isNaN(radius) || radius <= 0) {\n return;\n }\n ctx.beginPath();\n switch (style) {\n default:\n ctx.arc(x, y, radius, 0, TAU);\n ctx.closePath();\n break;\n case 'triangle':\n ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n ctx.closePath();\n break;\n case 'rectRounded':\n cornerRadius = radius * 0.516;\n size = radius - cornerRadius;\n xOffset = Math.cos(rad + QUARTER_PI) * size;\n yOffset = Math.sin(rad + QUARTER_PI) * size;\n ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n ctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n ctx.closePath();\n break;\n case 'rect':\n if (!rotation) {\n size = Math.SQRT1_2 * radius;\n ctx.rect(x - size, y - size, 2 * size, 2 * size);\n break;\n }\n rad += QUARTER_PI;\n case 'rectRot':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + yOffset, y - xOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n ctx.closePath();\n break;\n case 'crossRot':\n rad += QUARTER_PI;\n case 'cross':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n break;\n case 'star':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n rad += QUARTER_PI;\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n break;\n case 'line':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n break;\n case 'dash':\n ctx.moveTo(x, y);\n ctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);\n break;\n }\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n}\nfunction _isPointInArea(point, area, margin) {\n margin = margin || 0.5;\n return !area || (point && point.x > area.left - margin && point.x < area.right + margin &&\n\t\tpoint.y > area.top - margin && point.y < area.bottom + margin);\n}\nfunction clipArea(ctx, area) {\n ctx.save();\n ctx.beginPath();\n ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n ctx.clip();\n}\nfunction unclipArea(ctx) {\n ctx.restore();\n}\nfunction _steppedLineTo(ctx, previous, target, flip, mode) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n if (mode === 'middle') {\n const midpoint = (previous.x + target.x) / 2.0;\n ctx.lineTo(midpoint, previous.y);\n ctx.lineTo(midpoint, target.y);\n } else if (mode === 'after' !== !!flip) {\n ctx.lineTo(previous.x, target.y);\n } else {\n ctx.lineTo(target.x, previous.y);\n }\n ctx.lineTo(target.x, target.y);\n}\nfunction _bezierCurveTo(ctx, previous, target, flip) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n ctx.bezierCurveTo(\n flip ? previous.cp1x : previous.cp2x,\n flip ? previous.cp1y : previous.cp2y,\n flip ? target.cp2x : target.cp1x,\n flip ? target.cp2y : target.cp1y,\n target.x,\n target.y);\n}\nfunction renderText(ctx, text, x, y, font, opts = {}) {\n const lines = isArray(text) ? text : [text];\n const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n let i, line;\n ctx.save();\n ctx.font = font.string;\n setRenderOpts(ctx, opts);\n for (i = 0; i < lines.length; ++i) {\n line = lines[i];\n if (stroke) {\n if (opts.strokeColor) {\n ctx.strokeStyle = opts.strokeColor;\n }\n if (!isNullOrUndef(opts.strokeWidth)) {\n ctx.lineWidth = opts.strokeWidth;\n }\n ctx.strokeText(line, x, y, opts.maxWidth);\n }\n ctx.fillText(line, x, y, opts.maxWidth);\n decorateText(ctx, x, y, line, opts);\n y += font.lineHeight;\n }\n ctx.restore();\n}\nfunction setRenderOpts(ctx, opts) {\n if (opts.translation) {\n ctx.translate(opts.translation[0], opts.translation[1]);\n }\n if (!isNullOrUndef(opts.rotation)) {\n ctx.rotate(opts.rotation);\n }\n if (opts.color) {\n ctx.fillStyle = opts.color;\n }\n if (opts.textAlign) {\n ctx.textAlign = opts.textAlign;\n }\n if (opts.textBaseline) {\n ctx.textBaseline = opts.textBaseline;\n }\n}\nfunction decorateText(ctx, x, y, line, opts) {\n if (opts.strikethrough || opts.underline) {\n const metrics = ctx.measureText(line);\n const left = x - metrics.actualBoundingBoxLeft;\n const right = x + metrics.actualBoundingBoxRight;\n const top = y - metrics.actualBoundingBoxAscent;\n const bottom = y + metrics.actualBoundingBoxDescent;\n const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n ctx.strokeStyle = ctx.fillStyle;\n ctx.beginPath();\n ctx.lineWidth = opts.decorationWidth || 2;\n ctx.moveTo(left, yDecoration);\n ctx.lineTo(right, yDecoration);\n ctx.stroke();\n }\n}\nfunction addRoundedRectPath(ctx, rect) {\n const {x, y, w, h, radius} = rect;\n ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, -HALF_PI, PI, true);\n ctx.lineTo(x, y + h - radius.bottomLeft);\n ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n ctx.lineTo(x + w - radius.bottomRight, y + h);\n ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n ctx.lineTo(x + w, y + radius.topRight);\n ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n ctx.lineTo(x + radius.topLeft, y);\n}\n\nconst LINE_HEIGHT = new RegExp(/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/);\nconst FONT_STYLE = new RegExp(/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/);\nfunction toLineHeight(value, size) {\n const matches = ('' + value).match(LINE_HEIGHT);\n if (!matches || matches[1] === 'normal') {\n return size * 1.2;\n }\n value = +matches[2];\n switch (matches[3]) {\n case 'px':\n return value;\n case '%':\n value /= 100;\n break;\n }\n return size * value;\n}\nconst numberOrZero = v => +v || 0;\nfunction _readValueToProps(value, props) {\n const ret = {};\n const objProps = isObject(props);\n const keys = objProps ? Object.keys(props) : props;\n const read = isObject(value)\n ? objProps\n ? prop => valueOrDefault(value[prop], value[props[prop]])\n : prop => value[prop]\n : () => value;\n for (const prop of keys) {\n ret[prop] = numberOrZero(read(prop));\n }\n return ret;\n}\nfunction toTRBL(value) {\n return _readValueToProps(value, {top: 'y', right: 'x', bottom: 'y', left: 'x'});\n}\nfunction toTRBLCorners(value) {\n return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\nfunction toPadding(value) {\n const obj = toTRBL(value);\n obj.width = obj.left + obj.right;\n obj.height = obj.top + obj.bottom;\n return obj;\n}\nfunction toFont(options, fallback) {\n options = options || {};\n fallback = fallback || defaults.font;\n let size = valueOrDefault(options.size, fallback.size);\n if (typeof size === 'string') {\n size = parseInt(size, 10);\n }\n let style = valueOrDefault(options.style, fallback.style);\n if (style && !('' + style).match(FONT_STYLE)) {\n console.warn('Invalid font style specified: \"' + style + '\"');\n style = '';\n }\n const font = {\n family: valueOrDefault(options.family, fallback.family),\n lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n size,\n style,\n weight: valueOrDefault(options.weight, fallback.weight),\n string: ''\n };\n font.string = toFontString(font);\n return font;\n}\nfunction resolve(inputs, context, index, info) {\n let cacheable = true;\n let i, ilen, value;\n for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n value = inputs[i];\n if (value === undefined) {\n continue;\n }\n if (context !== undefined && typeof value === 'function') {\n value = value(context);\n cacheable = false;\n }\n if (index !== undefined && isArray(value)) {\n value = value[index % value.length];\n cacheable = false;\n }\n if (value !== undefined) {\n if (info && !cacheable) {\n info.cacheable = false;\n }\n return value;\n }\n }\n}\nfunction _addGrace(minmax, grace, beginAtZero) {\n const {min, max} = minmax;\n const change = toDimension(grace, (max - min) / 2);\n const keepZero = (value, add) => beginAtZero && value === 0 ? 0 : value + add;\n return {\n min: keepZero(min, -Math.abs(change)),\n max: keepZero(max, change)\n };\n}\nfunction createContext(parentContext, context) {\n return Object.assign(Object.create(parentContext), context);\n}\n\nfunction _lookup(table, value, cmp) {\n cmp = cmp || ((index) => table[index] < value);\n let hi = table.length - 1;\n let lo = 0;\n let mid;\n while (hi - lo > 1) {\n mid = (lo + hi) >> 1;\n if (cmp(mid)) {\n lo = mid;\n } else {\n hi = mid;\n }\n }\n return {lo, hi};\n}\nconst _lookupByKey = (table, key, value) =>\n _lookup(table, value, index => table[index][key] < value);\nconst _rlookupByKey = (table, key, value) =>\n _lookup(table, value, index => table[index][key] >= value);\nfunction _filterBetween(values, min, max) {\n let start = 0;\n let end = values.length;\n while (start < end && values[start] < min) {\n start++;\n }\n while (end > start && values[end - 1] > max) {\n end--;\n }\n return start > 0 || end < values.length\n ? values.slice(start, end)\n : values;\n}\nconst arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];\nfunction listenArrayEvents(array, listener) {\n if (array._chartjs) {\n array._chartjs.listeners.push(listener);\n return;\n }\n Object.defineProperty(array, '_chartjs', {\n configurable: true,\n enumerable: false,\n value: {\n listeners: [listener]\n }\n });\n arrayEvents.forEach((key) => {\n const method = '_onData' + _capitalize(key);\n const base = array[key];\n Object.defineProperty(array, key, {\n configurable: true,\n enumerable: false,\n value(...args) {\n const res = base.apply(this, args);\n array._chartjs.listeners.forEach((object) => {\n if (typeof object[method] === 'function') {\n object[method](...args);\n }\n });\n return res;\n }\n });\n });\n}\nfunction unlistenArrayEvents(array, listener) {\n const stub = array._chartjs;\n if (!stub) {\n return;\n }\n const listeners = stub.listeners;\n const index = listeners.indexOf(listener);\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n if (listeners.length > 0) {\n return;\n }\n arrayEvents.forEach((key) => {\n delete array[key];\n });\n delete array._chartjs;\n}\nfunction _arrayUnique(items) {\n const set = new Set();\n let i, ilen;\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n set.add(items[i]);\n }\n if (set.size === ilen) {\n return items;\n }\n return Array.from(set);\n}\n\nfunction _createResolver(scopes, prefixes = [''], rootScopes = scopes, fallback, getTarget = () => scopes[0]) {\n if (!defined(fallback)) {\n fallback = _resolve('_fallback', scopes);\n }\n const cache = {\n [Symbol.toStringTag]: 'Object',\n _cacheable: true,\n _scopes: scopes,\n _rootScopes: rootScopes,\n _fallback: fallback,\n _getTarget: getTarget,\n override: (scope) => _createResolver([scope, ...scopes], prefixes, rootScopes, fallback),\n };\n return new Proxy(cache, {\n deleteProperty(target, prop) {\n delete target[prop];\n delete target._keys;\n delete scopes[0][prop];\n return true;\n },\n get(target, prop) {\n return _cached(target, prop,\n () => _resolveWithPrefixes(prop, prefixes, scopes, target));\n },\n getOwnPropertyDescriptor(target, prop) {\n return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n },\n getPrototypeOf() {\n return Reflect.getPrototypeOf(scopes[0]);\n },\n has(target, prop) {\n return getKeysFromAllScopes(target).includes(prop);\n },\n ownKeys(target) {\n return getKeysFromAllScopes(target);\n },\n set(target, prop, value) {\n const storage = target._storage || (target._storage = getTarget());\n target[prop] = storage[prop] = value;\n delete target._keys;\n return true;\n }\n });\n}\nfunction _attachContext(proxy, context, subProxy, descriptorDefaults) {\n const cache = {\n _cacheable: false,\n _proxy: proxy,\n _context: context,\n _subProxy: subProxy,\n _stack: new Set(),\n _descriptors: _descriptors(proxy, descriptorDefaults),\n setContext: (ctx) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),\n override: (scope) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n };\n return new Proxy(cache, {\n deleteProperty(target, prop) {\n delete target[prop];\n delete proxy[prop];\n return true;\n },\n get(target, prop, receiver) {\n return _cached(target, prop,\n () => _resolveWithContext(target, prop, receiver));\n },\n getOwnPropertyDescriptor(target, prop) {\n return target._descriptors.allKeys\n ? Reflect.has(proxy, prop) ? {enumerable: true, configurable: true} : undefined\n : Reflect.getOwnPropertyDescriptor(proxy, prop);\n },\n getPrototypeOf() {\n return Reflect.getPrototypeOf(proxy);\n },\n has(target, prop) {\n return Reflect.has(proxy, prop);\n },\n ownKeys() {\n return Reflect.ownKeys(proxy);\n },\n set(target, prop, value) {\n proxy[prop] = value;\n delete target[prop];\n return true;\n }\n });\n}\nfunction _descriptors(proxy, defaults = {scriptable: true, indexable: true}) {\n const {_scriptable = defaults.scriptable, _indexable = defaults.indexable, _allKeys = defaults.allKeys} = proxy;\n return {\n allKeys: _allKeys,\n scriptable: _scriptable,\n indexable: _indexable,\n isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,\n isIndexable: isFunction(_indexable) ? _indexable : () => _indexable\n };\n}\nconst readKey = (prefix, name) => prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value) => isObject(value) && prop !== 'adapters' &&\n (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve) {\n if (Object.prototype.hasOwnProperty.call(target, prop)) {\n return target[prop];\n }\n const value = resolve();\n target[prop] = value;\n return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n let value = _proxy[prop];\n if (isFunction(value) && descriptors.isScriptable(prop)) {\n value = _resolveScriptable(prop, value, target, receiver);\n }\n if (isArray(value) && value.length) {\n value = _resolveArray(prop, value, target, descriptors.isIndexable);\n }\n if (needsSubResolver(prop, value)) {\n value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n }\n return value;\n}\nfunction _resolveScriptable(prop, value, target, receiver) {\n const {_proxy, _context, _subProxy, _stack} = target;\n if (_stack.has(prop)) {\n throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n }\n _stack.add(prop);\n value = value(_context, _subProxy || receiver);\n _stack.delete(prop);\n if (needsSubResolver(prop, value)) {\n value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n }\n return value;\n}\nfunction _resolveArray(prop, value, target, isIndexable) {\n const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n if (defined(_context.index) && isIndexable(prop)) {\n value = value[_context.index % value.length];\n } else if (isObject(value[0])) {\n const arr = value;\n const scopes = _proxy._scopes.filter(s => s !== arr);\n value = [];\n for (const item of arr) {\n const resolver = createSubResolver(scopes, _proxy, prop, item);\n value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n }\n }\n return value;\n}\nfunction resolveFallback(fallback, prop, value) {\n return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent) => key === true ? parent\n : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\n for (const parent of parentScopes) {\n const scope = getScope(key, parent);\n if (scope) {\n set.add(scope);\n const fallback = resolveFallback(scope._fallback, key, value);\n if (defined(fallback) && fallback !== key && fallback !== parentFallback) {\n return fallback;\n }\n } else if (scope === false && defined(parentFallback) && key !== parentFallback) {\n return null;\n }\n }\n return false;\n}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n const rootScopes = resolver._rootScopes;\n const fallback = resolveFallback(resolver._fallback, prop, value);\n const allScopes = [...parentScopes, ...rootScopes];\n const set = new Set();\n set.add(value);\n let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n if (key === null) {\n return false;\n }\n if (defined(fallback) && fallback !== prop) {\n key = addScopesFromKey(set, allScopes, fallback, key, value);\n if (key === null) {\n return false;\n }\n }\n return _createResolver(Array.from(set), [''], rootScopes, fallback,\n () => subGetTarget(resolver, prop, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n while (key) {\n key = addScopes(set, allScopes, key, fallback, item);\n }\n return key;\n}\nfunction subGetTarget(resolver, prop, value) {\n const parent = resolver._getTarget();\n if (!(prop in parent)) {\n parent[prop] = {};\n }\n const target = parent[prop];\n if (isArray(target) && isObject(value)) {\n return value;\n }\n return target;\n}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n let value;\n for (const prefix of prefixes) {\n value = _resolve(readKey(prefix, prop), scopes);\n if (defined(value)) {\n return needsSubResolver(prop, value)\n ? createSubResolver(scopes, proxy, prop, value)\n : value;\n }\n }\n}\nfunction _resolve(key, scopes) {\n for (const scope of scopes) {\n if (!scope) {\n continue;\n }\n const value = scope[key];\n if (defined(value)) {\n return value;\n }\n }\n}\nfunction getKeysFromAllScopes(target) {\n let keys = target._keys;\n if (!keys) {\n keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n }\n return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n const set = new Set();\n for (const scope of scopes) {\n for (const key of Object.keys(scope).filter(k => !k.startsWith('_'))) {\n set.add(key);\n }\n }\n return Array.from(set);\n}\nfunction _parseObjectDataRadialScale(meta, data, start, count) {\n const {iScale} = meta;\n const {key = 'r'} = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n r: iScale.parse(resolveObjectKey(item, key), index)\n };\n }\n return parsed;\n}\n\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i) => i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis) => indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n const previous = firstPoint.skip ? middlePoint : firstPoint;\n const current = middlePoint;\n const next = afterPoint.skip ? middlePoint : afterPoint;\n const d01 = distanceBetweenPoints(current, previous);\n const d12 = distanceBetweenPoints(next, current);\n let s01 = d01 / (d01 + d12);\n let s12 = d12 / (d01 + d12);\n s01 = isNaN(s01) ? 0 : s01;\n s12 = isNaN(s12) ? 0 : s12;\n const fa = t * s01;\n const fb = t * s12;\n return {\n previous: {\n x: current.x - fa * (next.x - previous.x),\n y: current.y - fa * (next.y - previous.y)\n },\n next: {\n x: current.x + fb * (next.x - previous.x),\n y: current.y + fb * (next.y - previous.y)\n }\n };\n}\nfunction monotoneAdjust(points, deltaK, mK) {\n const pointsLen = points.length;\n let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for (let i = 0; i < pointsLen - 1; ++i) {\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent || !pointAfter) {\n continue;\n }\n if (almostEquals(deltaK[i], 0, EPSILON)) {\n mK[i] = mK[i + 1] = 0;\n continue;\n }\n alphaK = mK[i] / deltaK[i];\n betaK = mK[i + 1] / deltaK[i];\n squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n if (squaredMagnitude <= 9) {\n continue;\n }\n tauK = 3 / Math.sqrt(squaredMagnitude);\n mK[i] = alphaK * tauK * deltaK[i];\n mK[i + 1] = betaK * tauK * deltaK[i];\n }\n}\nfunction monotoneCompute(points, mK, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n let delta, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for (let i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n const iPixel = pointCurrent[indexAxis];\n const vPixel = pointCurrent[valueAxis];\n if (pointBefore) {\n delta = (iPixel - pointBefore[indexAxis]) / 3;\n pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n }\n if (pointAfter) {\n delta = (pointAfter[indexAxis] - iPixel) / 3;\n pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n }\n }\n}\nfunction splineCurveMonotone(points, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n const deltaK = Array(pointsLen).fill(0);\n const mK = Array(pointsLen);\n let i, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for (i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n if (pointAfter) {\n const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n }\n mK[i] = !pointBefore ? deltaK[i]\n : !pointAfter ? deltaK[i - 1]\n : (sign(deltaK[i - 1]) !== sign(deltaK[i])) ? 0\n : (deltaK[i - 1] + deltaK[i]) / 2;\n }\n monotoneAdjust(points, deltaK, mK);\n monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\n let i, ilen, point, inArea, inAreaPrev;\n let inAreaNext = _isPointInArea(points[0], area);\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n inAreaPrev = inArea;\n inArea = inAreaNext;\n inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n if (!inArea) {\n continue;\n }\n point = points[i];\n if (inAreaPrev) {\n point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n }\n if (inAreaNext) {\n point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n }\n }\n}\nfunction _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n let i, ilen, point, controlPoints;\n if (options.spanGaps) {\n points = points.filter((pt) => !pt.skip);\n }\n if (options.cubicInterpolationMode === 'monotone') {\n splineCurveMonotone(points, indexAxis);\n } else {\n let prev = loop ? points[points.length - 1] : points[0];\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n point = points[i];\n controlPoints = splineCurve(\n prev,\n point,\n points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen],\n options.tension\n );\n point.cp1x = controlPoints.previous.x;\n point.cp1y = controlPoints.previous.y;\n point.cp2x = controlPoints.next.x;\n point.cp2y = controlPoints.next.y;\n prev = point;\n }\n }\n if (options.capBezierPoints) {\n capBezierPoints(points, area);\n }\n}\n\nfunction _isDomSupported() {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\nfunction _getParentNode(domNode) {\n let parent = domNode.parentNode;\n if (parent && parent.toString() === '[object ShadowRoot]') {\n parent = parent.host;\n }\n return parent;\n}\nfunction parseMaxStyle(styleValue, node, parentProperty) {\n let valueInPixels;\n if (typeof styleValue === 'string') {\n valueInPixels = parseInt(styleValue, 10);\n if (styleValue.indexOf('%') !== -1) {\n valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n }\n } else {\n valueInPixels = styleValue;\n }\n return valueInPixels;\n}\nconst getComputedStyle = (element) => window.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = ['top', 'right', 'bottom', 'left'];\nfunction getPositionedStyle(styles, style, suffix) {\n const result = {};\n suffix = suffix ? '-' + suffix : '';\n for (let i = 0; i < 4; i++) {\n const pos = positions[i];\n result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n }\n result.width = result.left + result.right;\n result.height = result.top + result.bottom;\n return result;\n}\nconst useOffsetPos = (x, y, target) => (x > 0 || y > 0) && (!target || !target.shadowRoot);\nfunction getCanvasPosition(e, canvas) {\n const touches = e.touches;\n const source = touches && touches.length ? touches[0] : e;\n const {offsetX, offsetY} = source;\n let box = false;\n let x, y;\n if (useOffsetPos(offsetX, offsetY, e.target)) {\n x = offsetX;\n y = offsetY;\n } else {\n const rect = canvas.getBoundingClientRect();\n x = source.clientX - rect.left;\n y = source.clientY - rect.top;\n box = true;\n }\n return {x, y, box};\n}\nfunction getRelativePosition(evt, chart) {\n if ('native' in evt) {\n return evt;\n }\n const {canvas, currentDevicePixelRatio} = chart;\n const style = getComputedStyle(canvas);\n const borderBox = style.boxSizing === 'border-box';\n const paddings = getPositionedStyle(style, 'padding');\n const borders = getPositionedStyle(style, 'border', 'width');\n const {x, y, box} = getCanvasPosition(evt, canvas);\n const xOffset = paddings.left + (box && borders.left);\n const yOffset = paddings.top + (box && borders.top);\n let {width, height} = chart;\n if (borderBox) {\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n return {\n x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n };\n}\nfunction getContainerSize(canvas, width, height) {\n let maxWidth, maxHeight;\n if (width === undefined || height === undefined) {\n const container = _getParentNode(canvas);\n if (!container) {\n width = canvas.clientWidth;\n height = canvas.clientHeight;\n } else {\n const rect = container.getBoundingClientRect();\n const containerStyle = getComputedStyle(container);\n const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n const containerPadding = getPositionedStyle(containerStyle, 'padding');\n width = rect.width - containerPadding.width - containerBorder.width;\n height = rect.height - containerPadding.height - containerBorder.height;\n maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n }\n }\n return {\n width,\n height,\n maxWidth: maxWidth || INFINITY,\n maxHeight: maxHeight || INFINITY\n };\n}\nconst round1 = v => Math.round(v * 10) / 10;\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n const style = getComputedStyle(canvas);\n const margins = getPositionedStyle(style, 'margin');\n const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n let {width, height} = containerSize;\n if (style.boxSizing === 'content-box') {\n const borders = getPositionedStyle(style, 'border', 'width');\n const paddings = getPositionedStyle(style, 'padding');\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n width = Math.max(0, width - margins.width);\n height = Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height - margins.height);\n width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n if (width && !height) {\n height = round1(width / 2);\n }\n return {\n width,\n height\n };\n}\nfunction retinaScale(chart, forceRatio, forceStyle) {\n const pixelRatio = forceRatio || 1;\n const deviceHeight = Math.floor(chart.height * pixelRatio);\n const deviceWidth = Math.floor(chart.width * pixelRatio);\n chart.height = deviceHeight / pixelRatio;\n chart.width = deviceWidth / pixelRatio;\n const canvas = chart.canvas;\n if (canvas.style && (forceStyle || (!canvas.style.height && !canvas.style.width))) {\n canvas.style.height = `${chart.height}px`;\n canvas.style.width = `${chart.width}px`;\n }\n if (chart.currentDevicePixelRatio !== pixelRatio\n || canvas.height !== deviceHeight\n || canvas.width !== deviceWidth) {\n chart.currentDevicePixelRatio = pixelRatio;\n canvas.height = deviceHeight;\n canvas.width = deviceWidth;\n chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n return true;\n }\n return false;\n}\nconst supportsEventListenerOptions = (function() {\n let passiveSupported = false;\n try {\n const options = {\n get passive() {\n passiveSupported = true;\n return false;\n }\n };\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n }\n return passiveSupported;\n}());\nfunction readUsedSize(element, property) {\n const value = getStyle(element, property);\n const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n return matches ? +matches[1] : undefined;\n}\n\nfunction _pointInLine(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: p1.y + t * (p2.y - p1.y)\n };\n}\nfunction _steppedInterpolation(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y\n : mode === 'after' ? t < 1 ? p1.y : p2.y\n : t > 0 ? p2.y : p1.y\n };\n}\nfunction _bezierInterpolation(p1, p2, t, mode) {\n const cp1 = {x: p1.cp2x, y: p1.cp2y};\n const cp2 = {x: p2.cp1x, y: p2.cp1y};\n const a = _pointInLine(p1, cp1, t);\n const b = _pointInLine(cp1, cp2, t);\n const c = _pointInLine(cp2, p2, t);\n const d = _pointInLine(a, b, t);\n const e = _pointInLine(b, c, t);\n return _pointInLine(d, e, t);\n}\n\nconst intlCache = new Map();\nfunction getNumberFormat(locale, options) {\n options = options || {};\n const cacheKey = locale + JSON.stringify(options);\n let formatter = intlCache.get(cacheKey);\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, options);\n intlCache.set(cacheKey, formatter);\n }\n return formatter;\n}\nfunction formatNumber(num, locale, options) {\n return getNumberFormat(locale, options).format(num);\n}\n\nconst getRightToLeftAdapter = function(rectX, width) {\n return {\n x(x) {\n return rectX + rectX + width - x;\n },\n setWidth(w) {\n width = w;\n },\n textAlign(align) {\n if (align === 'center') {\n return align;\n }\n return align === 'right' ? 'left' : 'right';\n },\n xPlus(x, value) {\n return x - value;\n },\n leftForLtr(x, itemWidth) {\n return x - itemWidth;\n },\n };\n};\nconst getLeftToRightAdapter = function() {\n return {\n x(x) {\n return x;\n },\n setWidth(w) {\n },\n textAlign(align) {\n return align;\n },\n xPlus(x, value) {\n return x + value;\n },\n leftForLtr(x, _itemWidth) {\n return x;\n },\n };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n let style, original;\n if (direction === 'ltr' || direction === 'rtl') {\n style = ctx.canvas.style;\n original = [\n style.getPropertyValue('direction'),\n style.getPropertyPriority('direction'),\n ];\n style.setProperty('direction', direction, 'important');\n ctx.prevTextDirection = original;\n }\n}\nfunction restoreTextDirection(ctx, original) {\n if (original !== undefined) {\n delete ctx.prevTextDirection;\n ctx.canvas.style.setProperty('direction', original[0], original[1]);\n }\n}\n\nfunction propertyFn(property) {\n if (property === 'angle') {\n return {\n between: _angleBetween,\n compare: _angleDiff,\n normalize: _normalizeAngle,\n };\n }\n return {\n between: _isBetween,\n compare: (a, b) => a - b,\n normalize: x => x\n };\n}\nfunction normalizeSegment({start, end, count, loop, style}) {\n return {\n start: start % count,\n end: end % count,\n loop: loop && (end - start + 1) % count === 0,\n style\n };\n}\nfunction getSegment(segment, points, bounds) {\n const {property, start: startBound, end: endBound} = bounds;\n const {between, normalize} = propertyFn(property);\n const count = points.length;\n let {start, end, loop} = segment;\n let i, ilen;\n if (loop) {\n start += count;\n end += count;\n for (i = 0, ilen = count; i < ilen; ++i) {\n if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n break;\n }\n start--;\n end--;\n }\n start %= count;\n end %= count;\n }\n if (end < start) {\n end += count;\n }\n return {start, end, loop, style: segment.style};\n}\nfunction _boundSegment(segment, points, bounds) {\n if (!bounds) {\n return [segment];\n }\n const {property, start: startBound, end: endBound} = bounds;\n const count = points.length;\n const {compare, between, normalize} = propertyFn(property);\n const {start, end, loop, style} = getSegment(segment, points, bounds);\n const result = [];\n let inside = false;\n let subStart = null;\n let value, point, prevValue;\n const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value);\n const shouldStart = () => inside || startIsBefore();\n const shouldStop = () => !inside || endIsBefore();\n for (let i = start, prev = start; i <= end; ++i) {\n point = points[i % count];\n if (point.skip) {\n continue;\n }\n value = normalize(point[property]);\n if (value === prevValue) {\n continue;\n }\n inside = between(value, startBound, endBound);\n if (subStart === null && shouldStart()) {\n subStart = compare(value, startBound) === 0 ? i : prev;\n }\n if (subStart !== null && shouldStop()) {\n result.push(normalizeSegment({start: subStart, end: i, loop, count, style}));\n subStart = null;\n }\n prev = i;\n prevValue = value;\n }\n if (subStart !== null) {\n result.push(normalizeSegment({start: subStart, end, loop, count, style}));\n }\n return result;\n}\nfunction _boundSegments(line, bounds) {\n const result = [];\n const segments = line.segments;\n for (let i = 0; i < segments.length; i++) {\n const sub = _boundSegment(segments[i], line.points, bounds);\n if (sub.length) {\n result.push(...sub);\n }\n }\n return result;\n}\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n let start = 0;\n let end = count - 1;\n if (loop && !spanGaps) {\n while (start < count && !points[start].skip) {\n start++;\n }\n }\n while (start < count && points[start].skip) {\n start++;\n }\n start %= count;\n if (loop) {\n end += start;\n }\n while (end > start && points[end % count].skip) {\n end--;\n }\n end %= count;\n return {start, end};\n}\nfunction solidSegments(points, start, max, loop) {\n const count = points.length;\n const result = [];\n let last = start;\n let prev = points[start];\n let end;\n for (end = start + 1; end <= max; ++end) {\n const cur = points[end % count];\n if (cur.skip || cur.stop) {\n if (!prev.skip) {\n loop = false;\n result.push({start: start % count, end: (end - 1) % count, loop});\n start = last = cur.stop ? end : null;\n }\n } else {\n last = end;\n if (prev.skip) {\n start = end;\n }\n }\n prev = cur;\n }\n if (last !== null) {\n result.push({start: start % count, end: last % count, loop});\n }\n return result;\n}\nfunction _computeSegments(line, segmentOptions) {\n const points = line.points;\n const spanGaps = line.options.spanGaps;\n const count = points.length;\n if (!count) {\n return [];\n }\n const loop = !!line._loop;\n const {start, end} = findStartAndEnd(points, count, loop, spanGaps);\n if (spanGaps === true) {\n return splitByStyles(line, [{start, end, loop}], points, segmentOptions);\n }\n const max = end < start ? end + count : end;\n const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\nfunction splitByStyles(line, segments, points, segmentOptions) {\n if (!segmentOptions || !segmentOptions.setContext || !points) {\n return segments;\n }\n return doSplitByStyles(line, segments, points, segmentOptions);\n}\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n const chartContext = line._chart.getContext();\n const baseStyle = readStyle(line.options);\n const {_datasetIndex: datasetIndex, options: {spanGaps}} = line;\n const count = points.length;\n const result = [];\n let prevStyle = baseStyle;\n let start = segments[0].start;\n let i = start;\n function addStyle(s, e, l, st) {\n const dir = spanGaps ? -1 : 1;\n if (s === e) {\n return;\n }\n s += count;\n while (points[s % count].skip) {\n s -= dir;\n }\n while (points[e % count].skip) {\n e += dir;\n }\n if (s % count !== e % count) {\n result.push({start: s % count, end: e % count, loop: l, style: st});\n prevStyle = st;\n start = e % count;\n }\n }\n for (const segment of segments) {\n start = spanGaps ? start : segment.start;\n let prev = points[start % count];\n let style;\n for (i = start + 1; i <= segment.end; i++) {\n const pt = points[i % count];\n style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n type: 'segment',\n p0: prev,\n p1: pt,\n p0DataIndex: (i - 1) % count,\n p1DataIndex: i % count,\n datasetIndex\n })));\n if (styleChanged(style, prevStyle)) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n prev = pt;\n prevStyle = style;\n }\n if (start < i - 1) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n }\n return result;\n}\nfunction readStyle(options) {\n return {\n backgroundColor: options.backgroundColor,\n borderCapStyle: options.borderCapStyle,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderJoinStyle: options.borderJoinStyle,\n borderWidth: options.borderWidth,\n borderColor: options.borderColor\n };\n}\nfunction styleChanged(style, prevStyle) {\n return prevStyle && JSON.stringify(style) !== JSON.stringify(prevStyle);\n}\n\nexport { toFont as $, _rlookupByKey as A, _isPointInArea as B, getAngleFromPoint as C, toPadding as D, each as E, getMaximumSize as F, _getParentNode as G, HALF_PI as H, readUsedSize as I, throttled as J, supportsEventListenerOptions as K, _isDomSupported as L, log10 as M, _factorize as N, finiteOrDefault as O, PI as P, callback as Q, _addGrace as R, toDegrees as S, TAU as T, _measureText as U, _int16Range as V, _alignPixel as W, clipArea as X, renderText as Y, unclipArea as Z, _arrayUnique as _, resolve as a, QUARTER_PI as a$, _toLeftRightCenter as a0, _alignStartEnd as a1, overrides as a2, merge as a3, _capitalize as a4, descriptors as a5, isFunction as a6, _attachContext as a7, _createResolver as a8, _descriptors as a9, _textX as aA, restoreTextDirection as aB, noop as aC, distanceBetweenPoints as aD, _setMinAndMaxByKey as aE, niceNum as aF, almostWhole as aG, almostEquals as aH, _decimalPlaces as aI, _longestText as aJ, _filterBetween as aK, _lookup as aL, isPatternOrGradient as aM, getHoverColor as aN, clone$1 as aO, _merger as aP, _mergerIf as aQ, _deprecated as aR, toFontString as aS, splineCurve as aT, splineCurveMonotone as aU, getStyle as aV, fontString as aW, toLineHeight as aX, PITAU as aY, INFINITY as aZ, RAD_PER_DEG as a_, mergeIf as aa, uid as ab, debounce as ac, retinaScale as ad, clearCanvas as ae, setsEqual as af, _elementsEqual as ag, _isClickEvent as ah, _isBetween as ai, _readValueToProps as aj, _updateBezierControlPoints as ak, _computeSegments as al, _boundSegments as am, _steppedInterpolation as an, _bezierInterpolation as ao, _pointInLine as ap, _steppedLineTo as aq, _bezierCurveTo as ar, drawPoint as as, addRoundedRectPath as at, toTRBL as au, toTRBLCorners as av, _boundSegment as aw, _normalizeAngle as ax, getRtlAdapter as ay, overrideTextDirection as az, isArray as b, TWO_THIRDS_PI as b0, _angleDiff as b1, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, createContext as h, isObject as i, defined as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, isNumber as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _limitValue as w, _lookupByKey as x, _parseObjectDataRadialScale as y, getRelativePosition as z };\n","/*!\n * Chart.js v3.8.0\n * https://www.chartjs.org\n * (c) 2022 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, d as defaults, i as isObject, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as createContext, j as defined, s as sign, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as isNumber, w as _limitValue, x as _lookupByKey, y as _parseObjectDataRadialScale, z as getRelativePosition, A as _rlookupByKey, B as _isPointInArea, C as getAngleFromPoint, D as toPadding, E as each, F as getMaximumSize, G as _getParentNode, I as readUsedSize, J as throttled, K as supportsEventListenerOptions, L as _isDomSupported, M as log10, N as _factorize, O as finiteOrDefault, Q as callback, R as _addGrace, S as toDegrees, U as _measureText, V as _int16Range, W as _alignPixel, X as clipArea, Y as renderText, Z as unclipArea, $ as toFont, a0 as _toLeftRightCenter, a1 as _alignStartEnd, a2 as overrides, a3 as merge, a4 as _capitalize, a5 as descriptors, a6 as isFunction, a7 as _attachContext, a8 as _createResolver, a9 as _descriptors, aa as mergeIf, ab as uid, ac as debounce, ad as retinaScale, ae as clearCanvas, af as setsEqual, ag as _elementsEqual, ah as _isClickEvent, ai as _isBetween, aj as _readValueToProps, ak as _updateBezierControlPoints, al as _computeSegments, am as _boundSegments, an as _steppedInterpolation, ao as _bezierInterpolation, ap as _pointInLine, aq as _steppedLineTo, ar as _bezierCurveTo, as as drawPoint, at as addRoundedRectPath, au as toTRBL, av as toTRBLCorners, aw as _boundSegment, ax as _normalizeAngle, ay as getRtlAdapter, az as overrideTextDirection, aA as _textX, aB as restoreTextDirection, aC as noop, aD as distanceBetweenPoints, aE as _setMinAndMaxByKey, aF as niceNum, aG as almostWhole, aH as almostEquals, aI as _decimalPlaces, aJ as _longestText, aK as _filterBetween, aL as _lookup } from './chunks/helpers.segment.js';\nexport { d as defaults } from './chunks/helpers.segment.js';\n\nclass Animator {\n constructor() {\n this._request = null;\n this._charts = new Map();\n this._running = false;\n this._lastDate = undefined;\n }\n _notify(chart, anims, date, type) {\n const callbacks = anims.listeners[type];\n const numSteps = anims.duration;\n callbacks.forEach(fn => fn({\n chart,\n initial: anims.initial,\n numSteps,\n currentStep: Math.min(date - anims.start, numSteps)\n }));\n }\n _refresh() {\n if (this._request) {\n return;\n }\n this._running = true;\n this._request = requestAnimFrame.call(window, () => {\n this._update();\n this._request = null;\n if (this._running) {\n this._refresh();\n }\n });\n }\n _update(date = Date.now()) {\n let remaining = 0;\n this._charts.forEach((anims, chart) => {\n if (!anims.running || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n let draw = false;\n let item;\n for (; i >= 0; --i) {\n item = items[i];\n if (item._active) {\n if (item._total > anims.duration) {\n anims.duration = item._total;\n }\n item.tick(date);\n draw = true;\n } else {\n items[i] = items[items.length - 1];\n items.pop();\n }\n }\n if (draw) {\n chart.draw();\n this._notify(chart, anims, date, 'progress');\n }\n if (!items.length) {\n anims.running = false;\n this._notify(chart, anims, date, 'complete');\n anims.initial = false;\n }\n remaining += items.length;\n });\n this._lastDate = date;\n if (remaining === 0) {\n this._running = false;\n }\n }\n _getAnims(chart) {\n const charts = this._charts;\n let anims = charts.get(chart);\n if (!anims) {\n anims = {\n running: false,\n initial: true,\n items: [],\n listeners: {\n complete: [],\n progress: []\n }\n };\n charts.set(chart, anims);\n }\n return anims;\n }\n listen(chart, event, cb) {\n this._getAnims(chart).listeners[event].push(cb);\n }\n add(chart, items) {\n if (!items || !items.length) {\n return;\n }\n this._getAnims(chart).items.push(...items);\n }\n has(chart) {\n return this._getAnims(chart).items.length > 0;\n }\n start(chart) {\n const anims = this._charts.get(chart);\n if (!anims) {\n return;\n }\n anims.running = true;\n anims.start = Date.now();\n anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);\n this._refresh();\n }\n running(chart) {\n if (!this._running) {\n return false;\n }\n const anims = this._charts.get(chart);\n if (!anims || !anims.running || !anims.items.length) {\n return false;\n }\n return true;\n }\n stop(chart) {\n const anims = this._charts.get(chart);\n if (!anims || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n for (; i >= 0; --i) {\n items[i].cancel();\n }\n anims.items = [];\n this._notify(chart, anims, Date.now(), 'complete');\n }\n remove(chart) {\n return this._charts.delete(chart);\n }\n}\nvar animator = new Animator();\n\nconst transparent = 'transparent';\nconst interpolators = {\n boolean(from, to, factor) {\n return factor > 0.5 ? to : from;\n },\n color(from, to, factor) {\n const c0 = color(from || transparent);\n const c1 = c0.valid && color(to || transparent);\n return c1 && c1.valid\n ? c1.mix(c0, factor).hexString()\n : to;\n },\n number(from, to, factor) {\n return from + (to - from) * factor;\n }\n};\nclass Animation {\n constructor(cfg, target, prop, to) {\n const currentValue = target[prop];\n to = resolve([cfg.to, to, currentValue, cfg.from]);\n const from = resolve([cfg.from, currentValue, to]);\n this._active = true;\n this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n this._easing = effects[cfg.easing] || effects.linear;\n this._start = Math.floor(Date.now() + (cfg.delay || 0));\n this._duration = this._total = Math.floor(cfg.duration);\n this._loop = !!cfg.loop;\n this._target = target;\n this._prop = prop;\n this._from = from;\n this._to = to;\n this._promises = undefined;\n }\n active() {\n return this._active;\n }\n update(cfg, to, date) {\n if (this._active) {\n this._notify(false);\n const currentValue = this._target[this._prop];\n const elapsed = date - this._start;\n const remain = this._duration - elapsed;\n this._start = date;\n this._duration = Math.floor(Math.max(remain, cfg.duration));\n this._total += elapsed;\n this._loop = !!cfg.loop;\n this._to = resolve([cfg.to, to, currentValue, cfg.from]);\n this._from = resolve([cfg.from, currentValue, to]);\n }\n }\n cancel() {\n if (this._active) {\n this.tick(Date.now());\n this._active = false;\n this._notify(false);\n }\n }\n tick(date) {\n const elapsed = date - this._start;\n const duration = this._duration;\n const prop = this._prop;\n const from = this._from;\n const loop = this._loop;\n const to = this._to;\n let factor;\n this._active = from !== to && (loop || (elapsed < duration));\n if (!this._active) {\n this._target[prop] = to;\n this._notify(true);\n return;\n }\n if (elapsed < 0) {\n this._target[prop] = from;\n return;\n }\n factor = (elapsed / duration) % 2;\n factor = loop && factor > 1 ? 2 - factor : factor;\n factor = this._easing(Math.min(1, Math.max(0, factor)));\n this._target[prop] = this._fn(from, to, factor);\n }\n wait() {\n const promises = this._promises || (this._promises = []);\n return new Promise((res, rej) => {\n promises.push({res, rej});\n });\n }\n _notify(resolved) {\n const method = resolved ? 'res' : 'rej';\n const promises = this._promises || [];\n for (let i = 0; i < promises.length; i++) {\n promises[i][method]();\n }\n }\n}\n\nconst numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nconst colors = ['color', 'borderColor', 'backgroundColor'];\ndefaults.set('animation', {\n delay: undefined,\n duration: 1000,\n easing: 'easeOutQuart',\n fn: undefined,\n from: undefined,\n loop: undefined,\n to: undefined,\n type: undefined,\n});\nconst animationOptions = Object.keys(defaults.animation);\ndefaults.describe('animation', {\n _fallback: false,\n _indexable: false,\n _scriptable: (name) => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn',\n});\ndefaults.set('animations', {\n colors: {\n type: 'color',\n properties: colors\n },\n numbers: {\n type: 'number',\n properties: numbers\n },\n});\ndefaults.describe('animations', {\n _fallback: 'animation',\n});\ndefaults.set('transitions', {\n active: {\n animation: {\n duration: 400\n }\n },\n resize: {\n animation: {\n duration: 0\n }\n },\n show: {\n animations: {\n colors: {\n from: 'transparent'\n },\n visible: {\n type: 'boolean',\n duration: 0\n },\n }\n },\n hide: {\n animations: {\n colors: {\n to: 'transparent'\n },\n visible: {\n type: 'boolean',\n easing: 'linear',\n fn: v => v | 0\n },\n }\n }\n});\nclass Animations {\n constructor(chart, config) {\n this._chart = chart;\n this._properties = new Map();\n this.configure(config);\n }\n configure(config) {\n if (!isObject(config)) {\n return;\n }\n const animatedProps = this._properties;\n Object.getOwnPropertyNames(config).forEach(key => {\n const cfg = config[key];\n if (!isObject(cfg)) {\n return;\n }\n const resolved = {};\n for (const option of animationOptions) {\n resolved[option] = cfg[option];\n }\n (isArray(cfg.properties) && cfg.properties || [key]).forEach((prop) => {\n if (prop === key || !animatedProps.has(prop)) {\n animatedProps.set(prop, resolved);\n }\n });\n });\n }\n _animateOptions(target, values) {\n const newOptions = values.options;\n const options = resolveTargetOptions(target, newOptions);\n if (!options) {\n return [];\n }\n const animations = this._createAnimations(options, newOptions);\n if (newOptions.$shared) {\n awaitAll(target.options.$animations, newOptions).then(() => {\n target.options = newOptions;\n }, () => {\n });\n }\n return animations;\n }\n _createAnimations(target, values) {\n const animatedProps = this._properties;\n const animations = [];\n const running = target.$animations || (target.$animations = {});\n const props = Object.keys(values);\n const date = Date.now();\n let i;\n for (i = props.length - 1; i >= 0; --i) {\n const prop = props[i];\n if (prop.charAt(0) === '$') {\n continue;\n }\n if (prop === 'options') {\n animations.push(...this._animateOptions(target, values));\n continue;\n }\n const value = values[prop];\n let animation = running[prop];\n const cfg = animatedProps.get(prop);\n if (animation) {\n if (cfg && animation.active()) {\n animation.update(cfg, value, date);\n continue;\n } else {\n animation.cancel();\n }\n }\n if (!cfg || !cfg.duration) {\n target[prop] = value;\n continue;\n }\n running[prop] = animation = new Animation(cfg, target, prop, value);\n animations.push(animation);\n }\n return animations;\n }\n update(target, values) {\n if (this._properties.size === 0) {\n Object.assign(target, values);\n return;\n }\n const animations = this._createAnimations(target, values);\n if (animations.length) {\n animator.add(this._chart, animations);\n return true;\n }\n }\n}\nfunction awaitAll(animations, properties) {\n const running = [];\n const keys = Object.keys(properties);\n for (let i = 0; i < keys.length; i++) {\n const anim = animations[keys[i]];\n if (anim && anim.active()) {\n running.push(anim.wait());\n }\n }\n return Promise.all(running);\n}\nfunction resolveTargetOptions(target, newOptions) {\n if (!newOptions) {\n return;\n }\n let options = target.options;\n if (!options) {\n target.options = newOptions;\n return;\n }\n if (options.$shared) {\n target.options = options = Object.assign({}, options, {$shared: false, $animations: {}});\n }\n return options;\n}\n\nfunction scaleClip(scale, allowedOverflow) {\n const opts = scale && scale.options || {};\n const reverse = opts.reverse;\n const min = opts.min === undefined ? allowedOverflow : 0;\n const max = opts.max === undefined ? allowedOverflow : 0;\n return {\n start: reverse ? max : min,\n end: reverse ? min : max\n };\n}\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n if (allowedOverflow === false) {\n return false;\n }\n const x = scaleClip(xScale, allowedOverflow);\n const y = scaleClip(yScale, allowedOverflow);\n return {\n top: y.end,\n right: x.end,\n bottom: y.start,\n left: x.start\n };\n}\nfunction toClip(value) {\n let t, r, b, l;\n if (isObject(value)) {\n t = value.top;\n r = value.right;\n b = value.bottom;\n l = value.left;\n } else {\n t = r = b = l = value;\n }\n return {\n top: t,\n right: r,\n bottom: b,\n left: l,\n disabled: value === false\n };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n const keys = [];\n const metasets = chart._getSortedDatasetMetas(filterVisible);\n let i, ilen;\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n keys.push(metasets[i].index);\n }\n return keys;\n}\nfunction applyStack(stack, value, dsIndex, options = {}) {\n const keys = stack.keys;\n const singleMode = options.mode === 'single';\n let i, ilen, datasetIndex, otherValue;\n if (value === null) {\n return;\n }\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n datasetIndex = +keys[i];\n if (datasetIndex === dsIndex) {\n if (options.all) {\n continue;\n }\n break;\n }\n otherValue = stack.values[datasetIndex];\n if (isNumberFinite(otherValue) && (singleMode || (value === 0 || sign(value) === sign(otherValue)))) {\n value += otherValue;\n }\n }\n return value;\n}\nfunction convertObjectDataToArray(data) {\n const keys = Object.keys(data);\n const adata = new Array(keys.length);\n let i, ilen, key;\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n key = keys[i];\n adata[i] = {\n x: key,\n y: data[key]\n };\n }\n return adata;\n}\nfunction isStacked(scale, meta) {\n const stacked = scale && scale.options.stacked;\n return stacked || (stacked === undefined && meta.stack !== undefined);\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\nfunction getUserBounds(scale) {\n const {min, max, minDefined, maxDefined} = scale.getUserBounds();\n return {\n min: minDefined ? min : Number.NEGATIVE_INFINITY,\n max: maxDefined ? max : Number.POSITIVE_INFINITY\n };\n}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n return subStack[indexValue] || (subStack[indexValue] = {});\n}\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {\n const value = stack[meta.index];\n if ((positive && value > 0) || (!positive && value < 0)) {\n return meta.index;\n }\n }\n return null;\n}\nfunction updateStacks(controller, parsed) {\n const {chart, _cachedMeta: meta} = controller;\n const stacks = chart._stacks || (chart._stacks = {});\n const {iScale, vScale, index: datasetIndex} = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const key = getStackKey(iScale, vScale, meta);\n const ilen = parsed.length;\n let stack;\n for (let i = 0; i < ilen; ++i) {\n const item = parsed[i];\n const {[iAxis]: index, [vAxis]: value} = item;\n const itemStacks = item._stacks || (item._stacks = {});\n stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n stack[datasetIndex] = value;\n stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n }\n}\nfunction getFirstScaleId(chart, axis) {\n const scales = chart.scales;\n return Object.keys(scales).filter(key => scales[key].axis === axis).shift();\n}\nfunction createDatasetContext(parent, index) {\n return createContext(parent,\n {\n active: false,\n dataset: undefined,\n datasetIndex: index,\n index,\n mode: 'default',\n type: 'dataset'\n }\n );\n}\nfunction createDataContext(parent, index, element) {\n return createContext(parent, {\n active: false,\n dataIndex: index,\n parsed: undefined,\n raw: undefined,\n element,\n index,\n mode: 'default',\n type: 'data'\n });\n}\nfunction clearStacks(meta, items) {\n const datasetIndex = meta.controller.index;\n const axis = meta.vScale && meta.vScale.axis;\n if (!axis) {\n return;\n }\n items = items || meta._parsed;\n for (const parsed of items) {\n const stacks = parsed._stacks;\n if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n return;\n }\n delete stacks[axis][datasetIndex];\n }\n}\nconst isDirectUpdateMode = (mode) => mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked\n && {keys: getSortedDatasetIndices(chart, true), values: null};\nclass DatasetController {\n constructor(chart, datasetIndex) {\n this.chart = chart;\n this._ctx = chart.ctx;\n this.index = datasetIndex;\n this._cachedDataOpts = {};\n this._cachedMeta = this.getMeta();\n this._type = this._cachedMeta.type;\n this.options = undefined;\n this._parsing = false;\n this._data = undefined;\n this._objectData = undefined;\n this._sharedOptions = undefined;\n this._drawStart = undefined;\n this._drawCount = undefined;\n this.enableOptionSharing = false;\n this.supportsDecimation = false;\n this.$context = undefined;\n this._syncList = [];\n this.initialize();\n }\n initialize() {\n const meta = this._cachedMeta;\n this.configure();\n this.linkScales();\n meta._stacked = isStacked(meta.vScale, meta);\n this.addElements();\n }\n updateIndex(datasetIndex) {\n if (this.index !== datasetIndex) {\n clearStacks(this._cachedMeta);\n }\n this.index = datasetIndex;\n }\n linkScales() {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y;\n const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n const indexAxis = meta.indexAxis;\n const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n meta.xScale = this.getScaleForId(xid);\n meta.yScale = this.getScaleForId(yid);\n meta.rScale = this.getScaleForId(rid);\n meta.iScale = this.getScaleForId(iid);\n meta.vScale = this.getScaleForId(vid);\n }\n getDataset() {\n return this.chart.data.datasets[this.index];\n }\n getMeta() {\n return this.chart.getDatasetMeta(this.index);\n }\n getScaleForId(scaleID) {\n return this.chart.scales[scaleID];\n }\n _getOtherScale(scale) {\n const meta = this._cachedMeta;\n return scale === meta.iScale\n ? meta.vScale\n : meta.iScale;\n }\n reset() {\n this._update('reset');\n }\n _destroy() {\n const meta = this._cachedMeta;\n if (this._data) {\n unlistenArrayEvents(this._data, this);\n }\n if (meta._stacked) {\n clearStacks(meta);\n }\n }\n _dataCheck() {\n const dataset = this.getDataset();\n const data = dataset.data || (dataset.data = []);\n const _data = this._data;\n if (isObject(data)) {\n this._data = convertObjectDataToArray(data);\n } else if (_data !== data) {\n if (_data) {\n unlistenArrayEvents(_data, this);\n const meta = this._cachedMeta;\n clearStacks(meta);\n meta._parsed = [];\n }\n if (data && Object.isExtensible(data)) {\n listenArrayEvents(data, this);\n }\n this._syncList = [];\n this._data = data;\n }\n }\n addElements() {\n const meta = this._cachedMeta;\n this._dataCheck();\n if (this.datasetElementType) {\n meta.dataset = new this.datasetElementType();\n }\n }\n buildOrUpdateElements(resetNewElements) {\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n let stackChanged = false;\n this._dataCheck();\n const oldStacked = meta._stacked;\n meta._stacked = isStacked(meta.vScale, meta);\n if (meta.stack !== dataset.stack) {\n stackChanged = true;\n clearStacks(meta);\n meta.stack = dataset.stack;\n }\n this._resyncElements(resetNewElements);\n if (stackChanged || oldStacked !== meta._stacked) {\n updateStacks(this, meta._parsed);\n }\n }\n configure() {\n const config = this.chart.config;\n const scopeKeys = config.datasetScopeKeys(this._type);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n this.options = config.createResolver(scopes, this.getContext());\n this._parsing = this.options.parsing;\n this._cachedDataOpts = {};\n }\n parse(start, count) {\n const {_cachedMeta: meta, _data: data} = this;\n const {iScale, _stacked} = meta;\n const iAxis = iScale.axis;\n let sorted = start === 0 && count === data.length ? true : meta._sorted;\n let prev = start > 0 && meta._parsed[start - 1];\n let i, cur, parsed;\n if (this._parsing === false) {\n meta._parsed = data;\n meta._sorted = true;\n parsed = data;\n } else {\n if (isArray(data[start])) {\n parsed = this.parseArrayData(meta, data, start, count);\n } else if (isObject(data[start])) {\n parsed = this.parseObjectData(meta, data, start, count);\n } else {\n parsed = this.parsePrimitiveData(meta, data, start, count);\n }\n const isNotInOrderComparedToPrev = () => cur[iAxis] === null || (prev && cur[iAxis] < prev[iAxis]);\n for (i = 0; i < count; ++i) {\n meta._parsed[i + start] = cur = parsed[i];\n if (sorted) {\n if (isNotInOrderComparedToPrev()) {\n sorted = false;\n }\n prev = cur;\n }\n }\n meta._sorted = sorted;\n }\n if (_stacked) {\n updateStacks(this, parsed);\n }\n }\n parsePrimitiveData(meta, data, start, count) {\n const {iScale, vScale} = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = new Array(count);\n let i, ilen, index;\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n parsed[i] = {\n [iAxis]: singleScale || iScale.parse(labels[index], index),\n [vAxis]: vScale.parse(data[index], index)\n };\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const {xScale, yScale} = meta;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(item[0], index),\n y: yScale.parse(item[1], index)\n };\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const {xScale, yScale} = meta;\n const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n };\n }\n return parsed;\n }\n getParsed(index) {\n return this._cachedMeta._parsed[index];\n }\n getDataElement(index) {\n return this._cachedMeta.data[index];\n }\n applyStack(scale, parsed, mode) {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const value = parsed[scale.axis];\n const stack = {\n keys: getSortedDatasetIndices(chart, true),\n values: parsed._stacks[scale.axis]\n };\n return applyStack(stack, value, meta.index, {mode});\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n const parsedValue = parsed[scale.axis];\n let value = parsedValue === null ? NaN : parsedValue;\n const values = stack && parsed._stacks[scale.axis];\n if (stack && values) {\n stack.values = values;\n value = applyStack(stack, parsedValue, this._cachedMeta.index);\n }\n range.min = Math.min(range.min, value);\n range.max = Math.max(range.max, value);\n }\n getMinMax(scale, canStack) {\n const meta = this._cachedMeta;\n const _parsed = meta._parsed;\n const sorted = meta._sorted && scale === meta.iScale;\n const ilen = _parsed.length;\n const otherScale = this._getOtherScale(scale);\n const stack = createStack(canStack, meta, this.chart);\n const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n const {min: otherMin, max: otherMax} = getUserBounds(otherScale);\n let i, parsed;\n function _skip() {\n parsed = _parsed[i];\n const otherValue = parsed[otherScale.axis];\n return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n }\n for (i = 0; i < ilen; ++i) {\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n if (sorted) {\n break;\n }\n }\n if (sorted) {\n for (i = ilen - 1; i >= 0; --i) {\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n break;\n }\n }\n return range;\n }\n getAllParsedValues(scale) {\n const parsed = this._cachedMeta._parsed;\n const values = [];\n let i, ilen, value;\n for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n value = parsed[i][scale.axis];\n if (isNumberFinite(value)) {\n values.push(value);\n }\n }\n return values;\n }\n getMaxOverflow() {\n return false;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n };\n }\n _update(mode) {\n const meta = this._cachedMeta;\n this.update(mode || 'default');\n meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n }\n update(mode) {}\n draw() {\n const ctx = this._ctx;\n const chart = this.chart;\n const meta = this._cachedMeta;\n const elements = meta.data || [];\n const area = chart.chartArea;\n const active = [];\n const start = this._drawStart || 0;\n const count = this._drawCount || (elements.length - start);\n const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n let i;\n if (meta.dataset) {\n meta.dataset.draw(ctx, area, start, count);\n }\n for (i = start; i < start + count; ++i) {\n const element = elements[i];\n if (element.hidden) {\n continue;\n }\n if (element.active && drawActiveElementsOnTop) {\n active.push(element);\n } else {\n element.draw(ctx, area);\n }\n }\n for (i = 0; i < active.length; ++i) {\n active[i].draw(ctx, area);\n }\n }\n getStyle(index, active) {\n const mode = active ? 'active' : 'default';\n return index === undefined && this._cachedMeta.dataset\n ? this.resolveDatasetElementOptions(mode)\n : this.resolveDataElementOptions(index || 0, mode);\n }\n getContext(index, active, mode) {\n const dataset = this.getDataset();\n let context;\n if (index >= 0 && index < this._cachedMeta.data.length) {\n const element = this._cachedMeta.data[index];\n context = element.$context ||\n (element.$context = createDataContext(this.getContext(), index, element));\n context.parsed = this.getParsed(index);\n context.raw = dataset.data[index];\n context.index = context.dataIndex = index;\n } else {\n context = this.$context ||\n (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n context.dataset = dataset;\n context.index = context.datasetIndex = this.index;\n }\n context.active = !!active;\n context.mode = mode;\n return context;\n }\n resolveDatasetElementOptions(mode) {\n return this._resolveElementOptions(this.datasetElementType.id, mode);\n }\n resolveDataElementOptions(index, mode) {\n return this._resolveElementOptions(this.dataElementType.id, mode, index);\n }\n _resolveElementOptions(elementType, mode = 'default', index) {\n const active = mode === 'active';\n const cache = this._cachedDataOpts;\n const cacheKey = elementType + '-' + mode;\n const cached = cache[cacheKey];\n const sharing = this.enableOptionSharing && defined(index);\n if (cached) {\n return cloneIfNotShared(cached, sharing);\n }\n const config = this.chart.config;\n const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n const prefixes = active ? [`${elementType}Hover`, 'hover', elementType, ''] : [elementType, ''];\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n const names = Object.keys(defaults.elements[elementType]);\n const context = () => this.getContext(index, active);\n const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n if (values.$shared) {\n values.$shared = sharing;\n cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n }\n return values;\n }\n _resolveAnimations(index, transition, active) {\n const chart = this.chart;\n const cache = this._cachedDataOpts;\n const cacheKey = `animation-${transition}`;\n const cached = cache[cacheKey];\n if (cached) {\n return cached;\n }\n let options;\n if (chart.options.animation !== false) {\n const config = this.chart.config;\n const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n options = config.createResolver(scopes, this.getContext(index, active, transition));\n }\n const animations = new Animations(chart, options && options.animations);\n if (options && options._cacheable) {\n cache[cacheKey] = Object.freeze(animations);\n }\n return animations;\n }\n getSharedOptions(options) {\n if (!options.$shared) {\n return;\n }\n return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n }\n includeOptions(mode, sharedOptions) {\n return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n }\n updateElement(element, index, properties, mode) {\n if (isDirectUpdateMode(mode)) {\n Object.assign(element, properties);\n } else {\n this._resolveAnimations(index, mode).update(element, properties);\n }\n }\n updateSharedOptions(sharedOptions, mode, newOptions) {\n if (sharedOptions && !isDirectUpdateMode(mode)) {\n this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n }\n }\n _setStyle(element, index, mode, active) {\n element.active = active;\n const options = this.getStyle(index, active);\n this._resolveAnimations(index, mode, active).update(element, {\n options: (!active && this.getSharedOptions(options)) || options\n });\n }\n removeHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', false);\n }\n setHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', true);\n }\n _removeDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', false);\n }\n }\n _setDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', true);\n }\n }\n _resyncElements(resetNewElements) {\n const data = this._data;\n const elements = this._cachedMeta.data;\n for (const [method, arg1, arg2] of this._syncList) {\n this[method](arg1, arg2);\n }\n this._syncList = [];\n const numMeta = elements.length;\n const numData = data.length;\n const count = Math.min(numData, numMeta);\n if (count) {\n this.parse(0, count);\n }\n if (numData > numMeta) {\n this._insertElements(numMeta, numData - numMeta, resetNewElements);\n } else if (numData < numMeta) {\n this._removeElements(numData, numMeta - numData);\n }\n }\n _insertElements(start, count, resetNewElements = true) {\n const meta = this._cachedMeta;\n const data = meta.data;\n const end = start + count;\n let i;\n const move = (arr) => {\n arr.length += count;\n for (i = arr.length - 1; i >= end; i--) {\n arr[i] = arr[i - count];\n }\n };\n move(data);\n for (i = start; i < end; ++i) {\n data[i] = new this.dataElementType();\n }\n if (this._parsing) {\n move(meta._parsed);\n }\n this.parse(start, count);\n if (resetNewElements) {\n this.updateElements(data, start, count, 'reset');\n }\n }\n updateElements(element, start, count, mode) {}\n _removeElements(start, count) {\n const meta = this._cachedMeta;\n if (this._parsing) {\n const removed = meta._parsed.splice(start, count);\n if (meta._stacked) {\n clearStacks(meta, removed);\n }\n }\n meta.data.splice(start, count);\n }\n _sync(args) {\n if (this._parsing) {\n this._syncList.push(args);\n } else {\n const [method, arg1, arg2] = args;\n this[method](arg1, arg2);\n }\n this.chart._dataChanges.push([this.index, ...args]);\n }\n _onDataPush() {\n const count = arguments.length;\n this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n }\n _onDataPop() {\n this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n }\n _onDataShift() {\n this._sync(['_removeElements', 0, 1]);\n }\n _onDataSplice(start, count) {\n if (count) {\n this._sync(['_removeElements', start, count]);\n }\n const newCount = arguments.length - 2;\n if (newCount) {\n this._sync(['_insertElements', start, newCount]);\n }\n }\n _onDataUnshift() {\n this._sync(['_insertElements', 0, arguments.length]);\n }\n}\nDatasetController.defaults = {};\nDatasetController.prototype.datasetElementType = null;\nDatasetController.prototype.dataElementType = null;\n\nfunction getAllScaleValues(scale, type) {\n if (!scale._cache.$bar) {\n const visibleMetas = scale.getMatchingVisibleMetas(type);\n let values = [];\n for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {\n values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n }\n scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));\n }\n return scale._cache.$bar;\n}\nfunction computeMinSampleSize(meta) {\n const scale = meta.iScale;\n const values = getAllScaleValues(scale, meta.type);\n let min = scale._length;\n let i, ilen, curr, prev;\n const updateMinAndPrev = () => {\n if (curr === 32767 || curr === -32768) {\n return;\n }\n if (defined(prev)) {\n min = Math.min(min, Math.abs(curr - prev) || min);\n }\n prev = curr;\n };\n for (i = 0, ilen = values.length; i < ilen; ++i) {\n curr = scale.getPixelForValue(values[i]);\n updateMinAndPrev();\n }\n prev = undefined;\n for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n curr = scale.getPixelForTick(i);\n updateMinAndPrev();\n }\n return min;\n}\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n const thickness = options.barThickness;\n let size, ratio;\n if (isNullOrUndef(thickness)) {\n size = ruler.min * options.categoryPercentage;\n ratio = options.barPercentage;\n } else {\n size = thickness * stackCount;\n ratio = 1;\n }\n return {\n chunk: size / stackCount,\n ratio,\n start: ruler.pixels[index] - (size / 2)\n };\n}\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n const pixels = ruler.pixels;\n const curr = pixels[index];\n let prev = index > 0 ? pixels[index - 1] : null;\n let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n const percent = options.categoryPercentage;\n if (prev === null) {\n prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n }\n if (next === null) {\n next = curr + curr - prev;\n }\n const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n const size = Math.abs(next - prev) / 2 * percent;\n return {\n chunk: size / stackCount,\n ratio: options.barPercentage,\n start\n };\n}\nfunction parseFloatBar(entry, item, vScale, i) {\n const startValue = vScale.parse(entry[0], i);\n const endValue = vScale.parse(entry[1], i);\n const min = Math.min(startValue, endValue);\n const max = Math.max(startValue, endValue);\n let barStart = min;\n let barEnd = max;\n if (Math.abs(min) > Math.abs(max)) {\n barStart = max;\n barEnd = min;\n }\n item[vScale.axis] = barEnd;\n item._custom = {\n barStart,\n barEnd,\n start: startValue,\n end: endValue,\n min,\n max\n };\n}\nfunction parseValue(entry, item, vScale, i) {\n if (isArray(entry)) {\n parseFloatBar(entry, item, vScale, i);\n } else {\n item[vScale.axis] = vScale.parse(entry, i);\n }\n return item;\n}\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = [];\n let i, ilen, item, entry;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n entry = data[i];\n item = {};\n item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n parsed.push(parseValue(entry, item, vScale, i));\n }\n return parsed;\n}\nfunction isFloatBar(custom) {\n return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\nfunction barSign(size, vScale, actualBase) {\n if (size !== 0) {\n return sign(size);\n }\n return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\nfunction borderProps(properties) {\n let reverse, start, end, top, bottom;\n if (properties.horizontal) {\n reverse = properties.base > properties.x;\n start = 'left';\n end = 'right';\n } else {\n reverse = properties.base < properties.y;\n start = 'bottom';\n end = 'top';\n }\n if (reverse) {\n top = 'end';\n bottom = 'start';\n } else {\n top = 'start';\n bottom = 'end';\n }\n return {start, end, reverse, top, bottom};\n}\nfunction setBorderSkipped(properties, options, stack, index) {\n let edge = options.borderSkipped;\n const res = {};\n if (!edge) {\n properties.borderSkipped = res;\n return;\n }\n const {start, end, reverse, top, bottom} = borderProps(properties);\n if (edge === 'middle' && stack) {\n properties.enableBorderRadius = true;\n if ((stack._top || 0) === index) {\n edge = top;\n } else if ((stack._bottom || 0) === index) {\n edge = bottom;\n } else {\n res[parseEdge(bottom, start, end, reverse)] = true;\n edge = top;\n }\n }\n res[parseEdge(edge, start, end, reverse)] = true;\n properties.borderSkipped = res;\n}\nfunction parseEdge(edge, a, b, reverse) {\n if (reverse) {\n edge = swap(edge, a, b);\n edge = startEnd(edge, b, a);\n } else {\n edge = startEnd(edge, a, b);\n }\n return edge;\n}\nfunction swap(orig, v1, v2) {\n return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n return v === 'start' ? start : v === 'end' ? end : v;\n}\nfunction setInflateAmount(properties, {inflateAmount}, ratio) {\n properties.inflateAmount = inflateAmount === 'auto'\n ? ratio === 1 ? 0.33 : 0\n : inflateAmount;\n}\nclass BarController extends DatasetController {\n parsePrimitiveData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseArrayData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseObjectData(meta, data, start, count) {\n const {iScale, vScale} = meta;\n const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n const parsed = [];\n let i, ilen, item, obj;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n obj = data[i];\n item = {};\n item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n }\n return parsed;\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n super.updateRangeFromParsed(range, scale, parsed, stack);\n const custom = parsed._custom;\n if (custom && scale === this._cachedMeta.vScale) {\n range.min = Math.min(range.min, custom.min);\n range.max = Math.max(range.max, custom.max);\n }\n }\n getMaxOverflow() {\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const {iScale, vScale} = meta;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const value = isFloatBar(custom)\n ? '[' + custom.start + ', ' + custom.end + ']'\n : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n return {\n label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n value\n };\n }\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n const meta = this._cachedMeta;\n meta.stack = this.getDataset().stack;\n }\n update(mode) {\n const meta = this._cachedMeta;\n this.updateElements(meta.data, 0, meta.data.length, mode);\n }\n updateElements(bars, start, count, mode) {\n const reset = mode === 'reset';\n const {index, _cachedMeta: {vScale}} = this;\n const base = vScale.getBasePixel();\n const horizontal = vScale.isHorizontal();\n const ruler = this._getRuler();\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n for (let i = start; i < start + count; i++) {\n const parsed = this.getParsed(i);\n const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {base, head: base} : this._calculateBarValuePixels(i);\n const ipixels = this._calculateBarIndexPixels(i, ruler);\n const stack = (parsed._stacks || {})[vScale.axis];\n const properties = {\n horizontal,\n base: vpixels.base,\n enableBorderRadius: !stack || isFloatBar(parsed._custom) || (index === stack._top || index === stack._bottom),\n x: horizontal ? vpixels.head : ipixels.center,\n y: horizontal ? ipixels.center : vpixels.head,\n height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n }\n const options = properties.options || bars[i].options;\n setBorderSkipped(properties, options, stack, index);\n setInflateAmount(properties, options, ruler.ratio);\n this.updateElement(bars[i], i, properties, mode);\n }\n }\n _getStacks(last, dataIndex) {\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const metasets = iScale.getMatchingVisibleMetas(this._type);\n const stacked = iScale.options.stacked;\n const ilen = metasets.length;\n const stacks = [];\n let i, item;\n for (i = 0; i < ilen; ++i) {\n item = metasets[i];\n if (!item.controller.options.grouped) {\n continue;\n }\n if (typeof dataIndex !== 'undefined') {\n const val = item.controller.getParsed(dataIndex)[\n item.controller._cachedMeta.vScale.axis\n ];\n if (isNullOrUndef(val) || isNaN(val)) {\n continue;\n }\n }\n if (stacked === false || stacks.indexOf(item.stack) === -1 ||\n\t\t\t\t(stacked === undefined && item.stack === undefined)) {\n stacks.push(item.stack);\n }\n if (item.index === last) {\n break;\n }\n }\n if (!stacks.length) {\n stacks.push(undefined);\n }\n return stacks;\n }\n _getStackCount(index) {\n return this._getStacks(undefined, index).length;\n }\n _getStackIndex(datasetIndex, name, dataIndex) {\n const stacks = this._getStacks(datasetIndex, dataIndex);\n const index = (name !== undefined)\n ? stacks.indexOf(name)\n : -1;\n return (index === -1)\n ? stacks.length - 1\n : index;\n }\n _getRuler() {\n const opts = this.options;\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const pixels = [];\n let i, ilen;\n for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n }\n const barThickness = opts.barThickness;\n const min = barThickness || computeMinSampleSize(meta);\n return {\n min,\n pixels,\n start: iScale._startPixel,\n end: iScale._endPixel,\n stackCount: this._getStackCount(),\n scale: iScale,\n grouped: opts.grouped,\n ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n };\n }\n _calculateBarValuePixels(index) {\n const {_cachedMeta: {vScale, _stacked}, options: {base: baseValue, minBarLength}} = this;\n const actualBase = baseValue || 0;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const floating = isFloatBar(custom);\n let value = parsed[vScale.axis];\n let start = 0;\n let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n let head, size;\n if (length !== value) {\n start = length - value;\n length = value;\n }\n if (floating) {\n value = custom.barStart;\n length = custom.barEnd - custom.barStart;\n if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n start = 0;\n }\n start += value;\n }\n const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n let base = vScale.getPixelForValue(startValue);\n if (this.chart.getDataVisibility(index)) {\n head = vScale.getPixelForValue(start + length);\n } else {\n head = base;\n }\n size = head - base;\n if (Math.abs(size) < minBarLength) {\n size = barSign(size, vScale, actualBase) * minBarLength;\n if (value === actualBase) {\n base -= size / 2;\n }\n const startPixel = vScale.getPixelForDecimal(0);\n const endPixel = vScale.getPixelForDecimal(1);\n const min = Math.min(startPixel, endPixel);\n const max = Math.max(startPixel, endPixel);\n base = Math.max(Math.min(base, max), min);\n head = base + size;\n }\n if (base === vScale.getPixelForValue(actualBase)) {\n const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n base += halfGrid;\n size -= halfGrid;\n }\n return {\n size,\n base,\n head,\n center: head + size / 2\n };\n }\n _calculateBarIndexPixels(index, ruler) {\n const scale = ruler.scale;\n const options = this.options;\n const skipNull = options.skipNull;\n const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n let center, size;\n if (ruler.grouped) {\n const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n const range = options.barThickness === 'flex'\n ? computeFlexCategoryTraits(index, ruler, options, stackCount)\n : computeFitCategoryTraits(index, ruler, options, stackCount);\n const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);\n center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\n size = Math.min(maxBarThickness, range.chunk * range.ratio);\n } else {\n center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n }\n return {\n base: center - size / 2,\n head: center + size / 2,\n center,\n size\n };\n }\n draw() {\n const meta = this._cachedMeta;\n const vScale = meta.vScale;\n const rects = meta.data;\n const ilen = rects.length;\n let i = 0;\n for (; i < ilen; ++i) {\n if (this.getParsed(i)[vScale.axis] !== null) {\n rects[i].draw(this._ctx);\n }\n }\n }\n}\nBarController.id = 'bar';\nBarController.defaults = {\n datasetElementType: false,\n dataElementType: 'bar',\n categoryPercentage: 0.8,\n barPercentage: 0.9,\n grouped: true,\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'base', 'width', 'height']\n }\n }\n};\nBarController.overrides = {\n scales: {\n _index_: {\n type: 'category',\n offset: true,\n grid: {\n offset: true\n }\n },\n _value_: {\n type: 'linear',\n beginAtZero: true,\n }\n }\n};\n\nclass BubbleController extends DatasetController {\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n }\n parsePrimitiveData(meta, data, start, count) {\n const parsed = super.parsePrimitiveData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const parsed = super.parseArrayData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const parsed = super.parseObjectData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n getMaxOverflow() {\n const data = this._cachedMeta.data;\n let max = 0;\n for (let i = data.length - 1; i >= 0; --i) {\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const {xScale, yScale} = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n const r = parsed._custom;\n return {\n label: meta.label,\n value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n };\n }\n update(mode) {\n const points = this._cachedMeta.data;\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale} = this._cachedMeta;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n for (let i = start; i < start + count; i++) {\n const point = points[i];\n const parsed = !reset && this.getParsed(i);\n const properties = {};\n const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n properties.skip = isNaN(iPixel) || isNaN(vPixel);\n if (includeOptions) {\n properties.options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n if (reset) {\n properties.options.radius = 0;\n }\n }\n this.updateElement(point, i, properties, mode);\n }\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n resolveDataElementOptions(index, mode) {\n const parsed = this.getParsed(index);\n let values = super.resolveDataElementOptions(index, mode);\n if (values.$shared) {\n values = Object.assign({}, values, {$shared: false});\n }\n const radius = values.radius;\n if (mode !== 'active') {\n values.radius = 0;\n }\n values.radius += valueOrDefault(parsed && parsed._custom, radius);\n return values;\n }\n}\nBubbleController.id = 'bubble';\nBubbleController.defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'borderWidth', 'radius']\n }\n }\n};\nBubbleController.overrides = {\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n },\n plugins: {\n tooltip: {\n callbacks: {\n title() {\n return '';\n }\n }\n }\n }\n};\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n let ratioX = 1;\n let ratioY = 1;\n let offsetX = 0;\n let offsetY = 0;\n if (circumference < TAU) {\n const startAngle = rotation;\n const endAngle = startAngle + circumference;\n const startX = Math.cos(startAngle);\n const startY = Math.sin(startAngle);\n const endX = Math.cos(endAngle);\n const endY = Math.sin(endAngle);\n const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n const maxX = calcMax(0, startX, endX);\n const maxY = calcMax(HALF_PI, startY, endY);\n const minX = calcMin(PI, startX, endX);\n const minY = calcMin(PI + HALF_PI, startY, endY);\n ratioX = (maxX - minX) / 2;\n ratioY = (maxY - minY) / 2;\n offsetX = -(maxX + minX) / 2;\n offsetY = -(maxY + minY) / 2;\n }\n return {ratioX, ratioY, offsetX, offsetY};\n}\nclass DoughnutController extends DatasetController {\n constructor(chart, datasetIndex) {\n super(chart, datasetIndex);\n this.enableOptionSharing = true;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.offsetX = undefined;\n this.offsetY = undefined;\n }\n linkScales() {}\n parse(start, count) {\n const data = this.getDataset().data;\n const meta = this._cachedMeta;\n if (this._parsing === false) {\n meta._parsed = data;\n } else {\n let getter = (i) => +data[i];\n if (isObject(data[start])) {\n const {key = 'value'} = this._parsing;\n getter = (i) => +resolveObjectKey(data[i], key);\n }\n let i, ilen;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n meta._parsed[i] = getter(i);\n }\n }\n }\n _getRotation() {\n return toRadians(this.options.rotation - 90);\n }\n _getCircumference() {\n return toRadians(this.options.circumference);\n }\n _getRotationExtents() {\n let min = TAU;\n let max = -TAU;\n for (let i = 0; i < this.chart.data.datasets.length; ++i) {\n if (this.chart.isDatasetVisible(i)) {\n const controller = this.chart.getDatasetMeta(i).controller;\n const rotation = controller._getRotation();\n const circumference = controller._getCircumference();\n min = Math.min(min, rotation);\n max = Math.max(max, rotation + circumference);\n }\n }\n return {\n rotation: min,\n circumference: max - min,\n };\n }\n update(mode) {\n const chart = this.chart;\n const {chartArea} = chart;\n const meta = this._cachedMeta;\n const arcs = meta.data;\n const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n const chartWeight = this._getRingWeight(this.index);\n const {circumference, rotation} = this._getRotationExtents();\n const {ratioX, ratioY, offsetX, offsetY} = getRatioAndOffset(rotation, circumference, cutout);\n const maxWidth = (chartArea.width - spacing) / ratioX;\n const maxHeight = (chartArea.height - spacing) / ratioY;\n const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n const outerRadius = toDimension(this.options.radius, maxRadius);\n const innerRadius = Math.max(outerRadius * cutout, 0);\n const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n this.offsetX = offsetX * outerRadius;\n this.offsetY = offsetY * outerRadius;\n meta.total = this.calculateTotal();\n this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n _circumference(i, reset) {\n const opts = this.options;\n const meta = this._cachedMeta;\n const circumference = this._getCircumference();\n if ((reset && opts.animation.animateRotate) || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n return 0;\n }\n return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const centerX = (chartArea.left + chartArea.right) / 2;\n const centerY = (chartArea.top + chartArea.bottom) / 2;\n const animateScale = reset && animationOpts.animateScale;\n const innerRadius = animateScale ? 0 : this.innerRadius;\n const outerRadius = animateScale ? 0 : this.outerRadius;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n let startAngle = this._getRotation();\n let i;\n for (i = 0; i < start; ++i) {\n startAngle += this._circumference(i, reset);\n }\n for (i = start; i < start + count; ++i) {\n const circumference = this._circumference(i, reset);\n const arc = arcs[i];\n const properties = {\n x: centerX + this.offsetX,\n y: centerY + this.offsetY,\n startAngle,\n endAngle: startAngle + circumference,\n circumference,\n outerRadius,\n innerRadius\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n }\n startAngle += circumference;\n this.updateElement(arc, i, properties, mode);\n }\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n calculateTotal() {\n const meta = this._cachedMeta;\n const metaData = meta.data;\n let total = 0;\n let i;\n for (i = 0; i < metaData.length; i++) {\n const value = meta._parsed[i];\n if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n total += Math.abs(value);\n }\n }\n return total;\n }\n calculateCircumference(value) {\n const total = this._cachedMeta.total;\n if (total > 0 && !isNaN(value)) {\n return TAU * (Math.abs(value) / total);\n }\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index], chart.options.locale);\n return {\n label: labels[index] || '',\n value,\n };\n }\n getMaxBorderWidth(arcs) {\n let max = 0;\n const chart = this.chart;\n let i, ilen, meta, controller, options;\n if (!arcs) {\n for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n if (chart.isDatasetVisible(i)) {\n meta = chart.getDatasetMeta(i);\n arcs = meta.data;\n controller = meta.controller;\n break;\n }\n }\n }\n if (!arcs) {\n return 0;\n }\n for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n options = controller.resolveDataElementOptions(i);\n if (options.borderAlign !== 'inner') {\n max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n }\n }\n return max;\n }\n getMaxOffset(arcs) {\n let max = 0;\n for (let i = 0, ilen = arcs.length; i < ilen; ++i) {\n const options = this.resolveDataElementOptions(i);\n max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n }\n return max;\n }\n _getRingWeightOffset(datasetIndex) {\n let ringWeightOffset = 0;\n for (let i = 0; i < datasetIndex; ++i) {\n if (this.chart.isDatasetVisible(i)) {\n ringWeightOffset += this._getRingWeight(i);\n }\n }\n return ringWeightOffset;\n }\n _getRingWeight(datasetIndex) {\n return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n }\n _getVisibleDatasetWeightTotal() {\n return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n }\n}\nDoughnutController.id = 'doughnut';\nDoughnutController.defaults = {\n datasetElementType: false,\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: false\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']\n },\n },\n cutout: '50%',\n rotation: 0,\n circumference: 360,\n radius: '100%',\n spacing: 0,\n indexAxis: 'r',\n};\nDoughnutController.descriptors = {\n _scriptable: (name) => name !== 'spacing',\n _indexable: (name) => name !== 'spacing',\n};\nDoughnutController.overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels(chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const {labels: {pointStyle}} = chart.legend.options;\n return data.labels.map((label, i) => {\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n },\n tooltip: {\n callbacks: {\n title() {\n return '';\n },\n label(tooltipItem) {\n let dataLabel = tooltipItem.label;\n const value = ': ' + tooltipItem.formattedValue;\n if (isArray(dataLabel)) {\n dataLabel = dataLabel.slice();\n dataLabel[0] += value;\n } else {\n dataLabel += value;\n }\n return dataLabel;\n }\n }\n }\n }\n};\n\nclass LineController extends DatasetController {\n initialize() {\n this.enableOptionSharing = true;\n this.supportsDecimation = true;\n super.initialize();\n }\n update(mode) {\n const meta = this._cachedMeta;\n const {dataset: line, data: points = [], _dataset} = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let {start, count} = getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n this.updateElements(points, start, count, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const {spanGaps, segment} = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n let prevParsed = start > 0 && this.getParsed(start - 1);\n for (let i = start; i < start + count; ++i) {\n const point = points[i];\n const parsed = this.getParsed(i);\n const properties = directUpdate ? point : {};\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n const data = meta.data || [];\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n draw() {\n const meta = this._cachedMeta;\n meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n super.draw();\n }\n}\nLineController.id = 'line';\nLineController.defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n showLine: true,\n spanGaps: false,\n};\nLineController.overrides = {\n scales: {\n _index_: {\n type: 'category',\n },\n _value_: {\n type: 'linear',\n },\n }\n};\nfunction getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n const pointCount = points.length;\n let start = 0;\n let count = pointCount;\n if (meta._sorted) {\n const {iScale, _parsed} = meta;\n const axis = iScale.axis;\n const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(Math.min(\n _lookupByKey(_parsed, iScale.axis, min).lo,\n animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo),\n 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(Math.max(\n _lookupByKey(_parsed, iScale.axis, max).hi + 1,\n animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max)).hi + 1),\n start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n }\n return {start, count};\n}\nfunction scaleRangesChanged(meta) {\n const {xScale, yScale, _scaleRanges} = meta;\n const newRanges = {\n xmin: xScale.min,\n xmax: xScale.max,\n ymin: yScale.min,\n ymax: yScale.max\n };\n if (!_scaleRanges) {\n meta._scaleRanges = newRanges;\n return true;\n }\n const changed = _scaleRanges.xmin !== xScale.min\n\t\t|| _scaleRanges.xmax !== xScale.max\n\t\t|| _scaleRanges.ymin !== yScale.min\n\t\t|| _scaleRanges.ymax !== yScale.max;\n Object.assign(_scaleRanges, newRanges);\n return changed;\n}\n\nclass PolarAreaController extends DatasetController {\n constructor(chart, datasetIndex) {\n super(chart, datasetIndex);\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n return {\n label: labels[index] || '',\n value,\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n update(mode) {\n const arcs = this._cachedMeta.data;\n this._updateRadius();\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n getMinMax() {\n const meta = this._cachedMeta;\n const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n meta.data.forEach((element, index) => {\n const parsed = this.getParsed(index).r;\n if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n if (parsed < range.min) {\n range.min = parsed;\n }\n if (parsed > range.max) {\n range.max = parsed;\n }\n }\n });\n return range;\n }\n _updateRadius() {\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n const outerRadius = Math.max(minSize / 2, 0);\n const innerRadius = Math.max(opts.cutoutPercentage ? (outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\n const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n this.outerRadius = outerRadius - (radiusLength * this.index);\n this.innerRadius = this.outerRadius - radiusLength;\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const scale = this._cachedMeta.rScale;\n const centerX = scale.xCenter;\n const centerY = scale.yCenter;\n const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n let angle = datasetStartAngle;\n let i;\n const defaultAngle = 360 / this.countVisibleElements();\n for (i = 0; i < start; ++i) {\n angle += this._computeAngle(i, mode, defaultAngle);\n }\n for (i = start; i < start + count; i++) {\n const arc = arcs[i];\n let startAngle = angle;\n let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n angle = endAngle;\n if (reset) {\n if (animationOpts.animateScale) {\n outerRadius = 0;\n }\n if (animationOpts.animateRotate) {\n startAngle = endAngle = datasetStartAngle;\n }\n }\n const properties = {\n x: centerX,\n y: centerY,\n innerRadius: 0,\n outerRadius,\n startAngle,\n endAngle,\n options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n };\n this.updateElement(arc, i, properties, mode);\n }\n }\n countVisibleElements() {\n const meta = this._cachedMeta;\n let count = 0;\n meta.data.forEach((element, index) => {\n if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n count++;\n }\n });\n return count;\n }\n _computeAngle(index, mode, defaultAngle) {\n return this.chart.getDataVisibility(index)\n ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle)\n : 0;\n }\n}\nPolarAreaController.id = 'polarArea';\nPolarAreaController.defaults = {\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: true\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']\n },\n },\n indexAxis: 'r',\n startAngle: 0,\n};\nPolarAreaController.overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels(chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const {labels: {pointStyle}} = chart.legend.options;\n return data.labels.map((label, i) => {\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n },\n tooltip: {\n callbacks: {\n title() {\n return '';\n },\n label(context) {\n return context.chart.data.labels[context.dataIndex] + ': ' + context.formattedValue;\n }\n }\n }\n },\n scales: {\n r: {\n type: 'radialLinear',\n angleLines: {\n display: false\n },\n beginAtZero: true,\n grid: {\n circular: true\n },\n pointLabels: {\n display: false\n },\n startAngle: 0\n }\n }\n};\n\nclass PieController extends DoughnutController {\n}\nPieController.id = 'pie';\nPieController.defaults = {\n cutout: 0,\n rotation: 0,\n circumference: 360,\n radius: '100%'\n};\n\nclass RadarController extends DatasetController {\n getLabelAndValue(index) {\n const vScale = this._cachedMeta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: vScale.getLabels()[index],\n value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n update(mode) {\n const meta = this._cachedMeta;\n const line = meta.dataset;\n const points = meta.data || [];\n const labels = meta.iScale.getLabels();\n line.points = points;\n if (mode !== 'resize') {\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n const properties = {\n _loop: true,\n _fullLoop: labels.length === points.length,\n options\n };\n this.updateElement(line, undefined, properties, mode);\n }\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const scale = this._cachedMeta.rScale;\n const reset = mode === 'reset';\n for (let i = start; i < start + count; i++) {\n const point = points[i];\n const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n const x = reset ? scale.xCenter : pointPosition.x;\n const y = reset ? scale.yCenter : pointPosition.y;\n const properties = {\n x,\n y,\n angle: pointPosition.angle,\n skip: isNaN(x) || isNaN(y),\n options\n };\n this.updateElement(point, i, properties, mode);\n }\n }\n}\nRadarController.id = 'radar';\nRadarController.defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n indexAxis: 'r',\n showLine: true,\n elements: {\n line: {\n fill: 'start'\n }\n },\n};\nRadarController.overrides = {\n aspectRatio: 1,\n scales: {\n r: {\n type: 'radialLinear',\n }\n }\n};\n\nclass ScatterController extends LineController {\n}\nScatterController.id = 'scatter';\nScatterController.defaults = {\n showLine: false,\n fill: false\n};\nScatterController.overrides = {\n interaction: {\n mode: 'point'\n },\n plugins: {\n tooltip: {\n callbacks: {\n title() {\n return '';\n },\n label(item) {\n return '(' + item.label + ', ' + item.formattedValue + ')';\n }\n }\n }\n },\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n};\n\nvar controllers = /*#__PURE__*/Object.freeze({\n__proto__: null,\nBarController: BarController,\nBubbleController: BubbleController,\nDoughnutController: DoughnutController,\nLineController: LineController,\nPolarAreaController: PolarAreaController,\nPieController: PieController,\nRadarController: RadarController,\nScatterController: ScatterController\n});\n\nfunction abstract() {\n throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\nclass DateAdapter {\n constructor(options) {\n this.options = options || {};\n }\n formats() {\n return abstract();\n }\n parse(value, format) {\n return abstract();\n }\n format(timestamp, format) {\n return abstract();\n }\n add(timestamp, amount, unit) {\n return abstract();\n }\n diff(a, b, unit) {\n return abstract();\n }\n startOf(timestamp, unit, weekday) {\n return abstract();\n }\n endOf(timestamp, unit) {\n return abstract();\n }\n}\nDateAdapter.override = function(members) {\n Object.assign(DateAdapter.prototype, members);\n};\nvar adapters = {\n _date: DateAdapter\n};\n\nfunction binarySearch(metaset, axis, value, intersect) {\n const {controller, data, _sorted} = metaset;\n const iScale = controller._cachedMeta.iScale;\n if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n if (!intersect) {\n return lookupMethod(data, axis, value);\n } else if (controller._sharedOptions) {\n const el = data[0];\n const range = typeof el.getRange === 'function' && el.getRange(axis);\n if (range) {\n const start = lookupMethod(data, axis, value - range);\n const end = lookupMethod(data, axis, value + range);\n return {lo: start.lo, hi: end.hi};\n }\n }\n }\n return {lo: 0, hi: data.length - 1};\n}\nfunction evaluateInteractionItems(chart, axis, position, handler, intersect) {\n const metasets = chart.getSortedVisibleDatasetMetas();\n const value = position[axis];\n for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n const {index, data} = metasets[i];\n const {lo, hi} = binarySearch(metasets[i], axis, value, intersect);\n for (let j = lo; j <= hi; ++j) {\n const element = data[j];\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\nfunction getDistanceMetricForAxis(axis) {\n const useX = axis.indexOf('x') !== -1;\n const useY = axis.indexOf('y') !== -1;\n return function(pt1, pt2) {\n const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n };\n}\nfunction getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n const items = [];\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return items;\n }\n const evaluationFunc = function(element, datasetIndex, index) {\n if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n return;\n }\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n items.push({element, datasetIndex, index});\n }\n };\n evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n return items;\n}\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n let items = [];\n function evaluationFunc(element, datasetIndex, index) {\n const {startAngle, endAngle} = element.getProps(['startAngle', 'endAngle'], useFinalPosition);\n const {angle} = getAngleFromPoint(element, {x: position.x, y: position.y});\n if (_angleBetween(angle, startAngle, endAngle)) {\n items.push({element, datasetIndex, index});\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n let items = [];\n const distanceMetric = getDistanceMetricForAxis(axis);\n let minDistance = Number.POSITIVE_INFINITY;\n function evaluationFunc(element, datasetIndex, index) {\n const inRange = element.inRange(position.x, position.y, useFinalPosition);\n if (intersect && !inRange) {\n return;\n }\n const center = element.getCenterPoint(useFinalPosition);\n const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n if (!pointInArea && !inRange) {\n return;\n }\n const distance = distanceMetric(position, center);\n if (distance < minDistance) {\n items = [{element, datasetIndex, index}];\n minDistance = distance;\n } else if (distance === minDistance) {\n items.push({element, datasetIndex, index});\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return [];\n }\n return axis === 'r' && !intersect\n ? getNearestRadialItems(chart, position, axis, useFinalPosition)\n : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\nfunction getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n const items = [];\n const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n let intersectsItem = false;\n evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index) => {\n if (element[rangeMethod](position[axis], useFinalPosition)) {\n items.push({element, datasetIndex, index});\n intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n }\n });\n if (intersect && !intersectsItem) {\n return [];\n }\n return items;\n}\nvar Interaction = {\n evaluateInteractionItems,\n modes: {\n index(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'x';\n const includeInvisible = options.includeInvisible || false;\n const items = options.intersect\n ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible)\n : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n const elements = [];\n if (!items.length) {\n return [];\n }\n chart.getSortedVisibleDatasetMetas().forEach((meta) => {\n const index = items[0].index;\n const element = meta.data[index];\n if (element && !element.skip) {\n elements.push({element, datasetIndex: meta.index, index});\n }\n });\n return elements;\n },\n dataset(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n let items = options.intersect\n ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) :\n getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n if (items.length > 0) {\n const datasetIndex = items[0].datasetIndex;\n const data = chart.getDatasetMeta(datasetIndex).data;\n items = [];\n for (let i = 0; i < data.length; ++i) {\n items.push({element: data[i], datasetIndex, index: i});\n }\n }\n return items;\n },\n point(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n },\n nearest(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n },\n x(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n },\n y(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n }\n }\n};\n\nconst STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\nfunction filterByPosition(array, position) {\n return array.filter(v => v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\nfunction sortByWeight(array, reverse) {\n return array.sort((a, b) => {\n const v0 = reverse ? b : a;\n const v1 = reverse ? a : b;\n return v0.weight === v1.weight ?\n v0.index - v1.index :\n v0.weight - v1.weight;\n });\n}\nfunction wrapBoxes(boxes) {\n const layoutBoxes = [];\n let i, ilen, box, pos, stack, stackWeight;\n for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n box = boxes[i];\n ({position: pos, options: {stack, stackWeight = 1}} = box);\n layoutBoxes.push({\n index: i,\n box,\n pos,\n horizontal: box.isHorizontal(),\n weight: box.weight,\n stack: stack && (pos + stack),\n stackWeight\n });\n }\n return layoutBoxes;\n}\nfunction buildStacks(layouts) {\n const stacks = {};\n for (const wrap of layouts) {\n const {stack, pos, stackWeight} = wrap;\n if (!stack || !STATIC_POSITIONS.includes(pos)) {\n continue;\n }\n const _stack = stacks[stack] || (stacks[stack] = {count: 0, placed: 0, weight: 0, size: 0});\n _stack.count++;\n _stack.weight += stackWeight;\n }\n return stacks;\n}\nfunction setLayoutDims(layouts, params) {\n const stacks = buildStacks(layouts);\n const {vBoxMaxWidth, hBoxMaxHeight} = params;\n let i, ilen, layout;\n for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n layout = layouts[i];\n const {fullSize} = layout.box;\n const stack = stacks[layout.stack];\n const factor = stack && layout.stackWeight / stack.weight;\n if (layout.horizontal) {\n layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n layout.height = hBoxMaxHeight;\n } else {\n layout.width = vBoxMaxWidth;\n layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n }\n }\n return stacks;\n}\nfunction buildLayoutBoxes(boxes) {\n const layoutBoxes = wrapBoxes(boxes);\n const fullSize = sortByWeight(layoutBoxes.filter(wrap => wrap.box.fullSize), true);\n const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n return {\n fullSize,\n leftAndTop: left.concat(top),\n rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n vertical: left.concat(right).concat(centerVertical),\n horizontal: top.concat(bottom).concat(centerHorizontal)\n };\n}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\nfunction updateMaxPadding(maxPadding, boxPadding) {\n maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\nfunction updateDims(chartArea, params, layout, stacks) {\n const {pos, box} = layout;\n const maxPadding = chartArea.maxPadding;\n if (!isObject(pos)) {\n if (layout.size) {\n chartArea[pos] -= layout.size;\n }\n const stack = stacks[layout.stack] || {size: 0, count: 1};\n stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n layout.size = stack.size / stack.count;\n chartArea[pos] += layout.size;\n }\n if (box.getPadding) {\n updateMaxPadding(maxPadding, box.getPadding());\n }\n const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n const widthChanged = newWidth !== chartArea.w;\n const heightChanged = newHeight !== chartArea.h;\n chartArea.w = newWidth;\n chartArea.h = newHeight;\n return layout.horizontal\n ? {same: widthChanged, other: heightChanged}\n : {same: heightChanged, other: widthChanged};\n}\nfunction handleMaxPadding(chartArea) {\n const maxPadding = chartArea.maxPadding;\n function updatePos(pos) {\n const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n chartArea[pos] += change;\n return change;\n }\n chartArea.y += updatePos('top');\n chartArea.x += updatePos('left');\n updatePos('right');\n updatePos('bottom');\n}\nfunction getMargins(horizontal, chartArea) {\n const maxPadding = chartArea.maxPadding;\n function marginForPositions(positions) {\n const margin = {left: 0, top: 0, right: 0, bottom: 0};\n positions.forEach((pos) => {\n margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n });\n return margin;\n }\n return horizontal\n ? marginForPositions(['left', 'right'])\n : marginForPositions(['top', 'bottom']);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n const refitBoxes = [];\n let i, ilen, layout, box, refit, changed;\n for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n layout = boxes[i];\n box = layout.box;\n box.update(\n layout.width || chartArea.w,\n layout.height || chartArea.h,\n getMargins(layout.horizontal, chartArea)\n );\n const {same, other} = updateDims(chartArea, params, layout, stacks);\n refit |= same && refitBoxes.length;\n changed = changed || other;\n if (!box.fullSize) {\n refitBoxes.push(layout);\n }\n }\n return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\nfunction setBoxDims(box, left, top, width, height) {\n box.top = top;\n box.left = left;\n box.right = left + width;\n box.bottom = top + height;\n box.width = width;\n box.height = height;\n}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n const userPadding = params.padding;\n let {x, y} = chartArea;\n for (const layout of boxes) {\n const box = layout.box;\n const stack = stacks[layout.stack] || {count: 1, placed: 0, weight: 1};\n const weight = (layout.stackWeight / stack.weight) || 1;\n if (layout.horizontal) {\n const width = chartArea.w * weight;\n const height = stack.size || box.height;\n if (defined(stack.start)) {\n y = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n } else {\n setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n }\n stack.start = y;\n stack.placed += width;\n y = box.bottom;\n } else {\n const height = chartArea.h * weight;\n const width = stack.size || box.width;\n if (defined(stack.start)) {\n x = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n } else {\n setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n }\n stack.start = x;\n stack.placed += height;\n x = box.right;\n }\n }\n chartArea.x = x;\n chartArea.y = y;\n}\ndefaults.set('layout', {\n autoPadding: true,\n padding: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n }\n});\nvar layouts = {\n addBox(chart, item) {\n if (!chart.boxes) {\n chart.boxes = [];\n }\n item.fullSize = item.fullSize || false;\n item.position = item.position || 'top';\n item.weight = item.weight || 0;\n item._layers = item._layers || function() {\n return [{\n z: 0,\n draw(chartArea) {\n item.draw(chartArea);\n }\n }];\n };\n chart.boxes.push(item);\n },\n removeBox(chart, layoutItem) {\n const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n if (index !== -1) {\n chart.boxes.splice(index, 1);\n }\n },\n configure(chart, item, options) {\n item.fullSize = options.fullSize;\n item.position = options.position;\n item.weight = options.weight;\n },\n update(chart, width, height, minPadding) {\n if (!chart) {\n return;\n }\n const padding = toPadding(chart.options.layout.padding);\n const availableWidth = Math.max(width - padding.width, 0);\n const availableHeight = Math.max(height - padding.height, 0);\n const boxes = buildLayoutBoxes(chart.boxes);\n const verticalBoxes = boxes.vertical;\n const horizontalBoxes = boxes.horizontal;\n each(chart.boxes, box => {\n if (typeof box.beforeLayout === 'function') {\n box.beforeLayout();\n }\n });\n const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) =>\n wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n const params = Object.freeze({\n outerWidth: width,\n outerHeight: height,\n padding,\n availableWidth,\n availableHeight,\n vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n hBoxMaxHeight: availableHeight / 2\n });\n const maxPadding = Object.assign({}, padding);\n updateMaxPadding(maxPadding, toPadding(minPadding));\n const chartArea = Object.assign({\n maxPadding,\n w: availableWidth,\n h: availableHeight,\n x: padding.left,\n y: padding.top\n }, padding);\n const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n fitBoxes(boxes.fullSize, chartArea, params, stacks);\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n }\n handleMaxPadding(chartArea);\n placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n chartArea.x += chartArea.w;\n chartArea.y += chartArea.h;\n placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n chart.chartArea = {\n left: chartArea.left,\n top: chartArea.top,\n right: chartArea.left + chartArea.w,\n bottom: chartArea.top + chartArea.h,\n height: chartArea.h,\n width: chartArea.w,\n };\n each(boxes.chartArea, (layout) => {\n const box = layout.box;\n Object.assign(box, chart.chartArea);\n box.update(chartArea.w, chartArea.h, {left: 0, top: 0, right: 0, bottom: 0});\n });\n }\n};\n\nclass BasePlatform {\n acquireContext(canvas, aspectRatio) {}\n releaseContext(context) {\n return false;\n }\n addEventListener(chart, type, listener) {}\n removeEventListener(chart, type, listener) {}\n getDevicePixelRatio() {\n return 1;\n }\n getMaximumSize(element, width, height, aspectRatio) {\n width = Math.max(0, width || element.width);\n height = height || element.height;\n return {\n width,\n height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n };\n }\n isAttached(canvas) {\n return true;\n }\n updateConfig(config) {\n }\n}\n\nclass BasicPlatform extends BasePlatform {\n acquireContext(item) {\n return item && item.getContext && item.getContext('2d') || null;\n }\n updateConfig(config) {\n config.options.animation = false;\n }\n}\n\nconst EXPANDO_KEY = '$chartjs';\nconst EVENT_TYPES = {\n touchstart: 'mousedown',\n touchmove: 'mousemove',\n touchend: 'mouseup',\n pointerenter: 'mouseenter',\n pointerdown: 'mousedown',\n pointermove: 'mousemove',\n pointerup: 'mouseup',\n pointerleave: 'mouseout',\n pointerout: 'mouseout'\n};\nconst isNullOrEmpty = value => value === null || value === '';\nfunction initCanvas(canvas, aspectRatio) {\n const style = canvas.style;\n const renderHeight = canvas.getAttribute('height');\n const renderWidth = canvas.getAttribute('width');\n canvas[EXPANDO_KEY] = {\n initial: {\n height: renderHeight,\n width: renderWidth,\n style: {\n display: style.display,\n height: style.height,\n width: style.width\n }\n }\n };\n style.display = style.display || 'block';\n style.boxSizing = style.boxSizing || 'border-box';\n if (isNullOrEmpty(renderWidth)) {\n const displayWidth = readUsedSize(canvas, 'width');\n if (displayWidth !== undefined) {\n canvas.width = displayWidth;\n }\n }\n if (isNullOrEmpty(renderHeight)) {\n if (canvas.style.height === '') {\n canvas.height = canvas.width / (aspectRatio || 2);\n } else {\n const displayHeight = readUsedSize(canvas, 'height');\n if (displayHeight !== undefined) {\n canvas.height = displayHeight;\n }\n }\n }\n return canvas;\n}\nconst eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\nfunction addListener(node, type, listener) {\n node.addEventListener(type, listener, eventListenerOptions);\n}\nfunction removeListener(chart, type, listener) {\n chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n}\nfunction fromNativeEvent(event, chart) {\n const type = EVENT_TYPES[event.type] || event.type;\n const {x, y} = getRelativePosition(event, chart);\n return {\n type,\n chart,\n native: event,\n x: x !== undefined ? x : null,\n y: y !== undefined ? y : null,\n };\n}\nfunction nodeListContains(nodeList, canvas) {\n for (const node of nodeList) {\n if (node === canvas || node.contains(canvas)) {\n return true;\n }\n }\n}\nfunction createAttachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver(entries => {\n let trigger = false;\n for (const entry of entries) {\n trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {childList: true, subtree: true});\n return observer;\n}\nfunction createDetachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver(entries => {\n let trigger = false;\n for (const entry of entries) {\n trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {childList: true, subtree: true});\n return observer;\n}\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\nfunction onWindowResize() {\n const dpr = window.devicePixelRatio;\n if (dpr === oldDevicePixelRatio) {\n return;\n }\n oldDevicePixelRatio = dpr;\n drpListeningCharts.forEach((resize, chart) => {\n if (chart.currentDevicePixelRatio !== dpr) {\n resize();\n }\n });\n}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n if (!drpListeningCharts.size) {\n window.addEventListener('resize', onWindowResize);\n }\n drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n drpListeningCharts.delete(chart);\n if (!drpListeningCharts.size) {\n window.removeEventListener('resize', onWindowResize);\n }\n}\nfunction createResizeObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n return;\n }\n const resize = throttled((width, height) => {\n const w = container.clientWidth;\n listener(width, height);\n if (w < container.clientWidth) {\n listener();\n }\n }, window);\n const observer = new ResizeObserver(entries => {\n const entry = entries[0];\n const width = entry.contentRect.width;\n const height = entry.contentRect.height;\n if (width === 0 && height === 0) {\n return;\n }\n resize(width, height);\n });\n observer.observe(container);\n listenDevicePixelRatioChanges(chart, resize);\n return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n if (observer) {\n observer.disconnect();\n }\n if (type === 'resize') {\n unlistenDevicePixelRatioChanges(chart);\n }\n}\nfunction createProxyAndListen(chart, type, listener) {\n const canvas = chart.canvas;\n const proxy = throttled((event) => {\n if (chart.ctx !== null) {\n listener(fromNativeEvent(event, chart));\n }\n }, chart, (args) => {\n const event = args[0];\n return [event, event.offsetX, event.offsetY];\n });\n addListener(canvas, type, proxy);\n return proxy;\n}\nclass DomPlatform extends BasePlatform {\n acquireContext(canvas, aspectRatio) {\n const context = canvas && canvas.getContext && canvas.getContext('2d');\n if (context && context.canvas === canvas) {\n initCanvas(canvas, aspectRatio);\n return context;\n }\n return null;\n }\n releaseContext(context) {\n const canvas = context.canvas;\n if (!canvas[EXPANDO_KEY]) {\n return false;\n }\n const initial = canvas[EXPANDO_KEY].initial;\n ['height', 'width'].forEach((prop) => {\n const value = initial[prop];\n if (isNullOrUndef(value)) {\n canvas.removeAttribute(prop);\n } else {\n canvas.setAttribute(prop, value);\n }\n });\n const style = initial.style || {};\n Object.keys(style).forEach((key) => {\n canvas.style[key] = style[key];\n });\n canvas.width = canvas.width;\n delete canvas[EXPANDO_KEY];\n return true;\n }\n addEventListener(chart, type, listener) {\n this.removeEventListener(chart, type);\n const proxies = chart.$proxies || (chart.$proxies = {});\n const handlers = {\n attach: createAttachObserver,\n detach: createDetachObserver,\n resize: createResizeObserver\n };\n const handler = handlers[type] || createProxyAndListen;\n proxies[type] = handler(chart, type, listener);\n }\n removeEventListener(chart, type) {\n const proxies = chart.$proxies || (chart.$proxies = {});\n const proxy = proxies[type];\n if (!proxy) {\n return;\n }\n const handlers = {\n attach: releaseObserver,\n detach: releaseObserver,\n resize: releaseObserver\n };\n const handler = handlers[type] || removeListener;\n handler(chart, type, proxy);\n proxies[type] = undefined;\n }\n getDevicePixelRatio() {\n return window.devicePixelRatio;\n }\n getMaximumSize(canvas, width, height, aspectRatio) {\n return getMaximumSize(canvas, width, height, aspectRatio);\n }\n isAttached(canvas) {\n const container = _getParentNode(canvas);\n return !!(container && container.isConnected);\n }\n}\n\nfunction _detectPlatform(canvas) {\n if (!_isDomSupported() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) {\n return BasicPlatform;\n }\n return DomPlatform;\n}\n\nclass Element {\n constructor() {\n this.x = undefined;\n this.y = undefined;\n this.active = false;\n this.options = undefined;\n this.$animations = undefined;\n }\n tooltipPosition(useFinalPosition) {\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return {x, y};\n }\n hasValue() {\n return isNumber(this.x) && isNumber(this.y);\n }\n getProps(props, final) {\n const anims = this.$animations;\n if (!final || !anims) {\n return this;\n }\n const ret = {};\n props.forEach(prop => {\n ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];\n });\n return ret;\n }\n}\nElement.defaults = {};\nElement.defaultRoutes = undefined;\n\nconst formatters = {\n values(value) {\n return isArray(value) ? value : '' + value;\n },\n numeric(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const locale = this.chart.options.locale;\n let notation;\n let delta = tickValue;\n if (ticks.length > 1) {\n const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n if (maxTick < 1e-4 || maxTick > 1e+15) {\n notation = 'scientific';\n }\n delta = calculateDelta(tickValue, ticks);\n }\n const logDelta = log10(Math.abs(delta));\n const numDecimal = Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n const options = {notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal};\n Object.assign(options, this.options.ticks.format);\n return formatNumber(tickValue, locale, options);\n },\n logarithmic(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const remain = tickValue / (Math.pow(10, Math.floor(log10(tickValue))));\n if (remain === 1 || remain === 2 || remain === 5) {\n return formatters.numeric.call(this, tickValue, index, ticks);\n }\n return '';\n }\n};\nfunction calculateDelta(tickValue, ticks) {\n let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n delta = tickValue - Math.floor(tickValue);\n }\n return delta;\n}\nvar Ticks = {formatters};\n\ndefaults.set('scale', {\n display: true,\n offset: false,\n reverse: false,\n beginAtZero: false,\n bounds: 'ticks',\n grace: 0,\n grid: {\n display: true,\n lineWidth: 1,\n drawBorder: true,\n drawOnChartArea: true,\n drawTicks: true,\n tickLength: 8,\n tickWidth: (_ctx, options) => options.lineWidth,\n tickColor: (_ctx, options) => options.color,\n offset: false,\n borderDash: [],\n borderDashOffset: 0.0,\n borderWidth: 1\n },\n title: {\n display: false,\n text: '',\n padding: {\n top: 4,\n bottom: 4\n }\n },\n ticks: {\n minRotation: 0,\n maxRotation: 50,\n mirror: false,\n textStrokeWidth: 0,\n textStrokeColor: '',\n padding: 3,\n display: true,\n autoSkip: true,\n autoSkipPadding: 3,\n labelOffset: 0,\n callback: Ticks.formatters.values,\n minor: {},\n major: {},\n align: 'center',\n crossAlign: 'near',\n showLabelBackdrop: false,\n backdropColor: 'rgba(255, 255, 255, 0.75)',\n backdropPadding: 2,\n }\n});\ndefaults.route('scale.ticks', 'color', '', 'color');\ndefaults.route('scale.grid', 'color', '', 'borderColor');\ndefaults.route('scale.grid', 'borderColor', '', 'borderColor');\ndefaults.route('scale.title', 'color', '', 'color');\ndefaults.describe('scale', {\n _fallback: false,\n _scriptable: (name) => !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n _indexable: (name) => name !== 'borderDash' && name !== 'tickBorderDash',\n});\ndefaults.describe('scales', {\n _fallback: 'scale',\n});\ndefaults.describe('scale.ticks', {\n _scriptable: (name) => name !== 'backdropPadding' && name !== 'callback',\n _indexable: (name) => name !== 'backdropPadding',\n});\n\nfunction autoSkip(scale, ticks) {\n const tickOpts = scale.options.ticks;\n const ticksLimit = tickOpts.maxTicksLimit || determineMaxTicks(scale);\n const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n const numMajorIndices = majorIndices.length;\n const first = majorIndices[0];\n const last = majorIndices[numMajorIndices - 1];\n const newTicks = [];\n if (numMajorIndices > ticksLimit) {\n skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n return newTicks;\n }\n const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n if (numMajorIndices > 0) {\n let i, ilen;\n const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n }\n skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n return newTicks;\n }\n skip(ticks, newTicks, spacing);\n return newTicks;\n}\nfunction determineMaxTicks(scale) {\n const offset = scale.options.offset;\n const tickLength = scale._tickSize();\n const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n const maxChart = scale._maxLength / tickLength;\n return Math.floor(Math.min(maxScale, maxChart));\n}\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n const evenMajorSpacing = getEvenSpacing(majorIndices);\n const spacing = ticks.length / ticksLimit;\n if (!evenMajorSpacing) {\n return Math.max(spacing, 1);\n }\n const factors = _factorize(evenMajorSpacing);\n for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {\n const factor = factors[i];\n if (factor > spacing) {\n return factor;\n }\n }\n return Math.max(spacing, 1);\n}\nfunction getMajorIndices(ticks) {\n const result = [];\n let i, ilen;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (ticks[i].major) {\n result.push(i);\n }\n }\n return result;\n}\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n let count = 0;\n let next = majorIndices[0];\n let i;\n spacing = Math.ceil(spacing);\n for (i = 0; i < ticks.length; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = majorIndices[count * spacing];\n }\n }\n}\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n const start = valueOrDefault(majorStart, 0);\n const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n let count = 0;\n let length, i, next;\n spacing = Math.ceil(spacing);\n if (majorEnd) {\n length = majorEnd - majorStart;\n spacing = length / Math.floor(length / spacing);\n }\n next = start;\n while (next < 0) {\n count++;\n next = Math.round(start + count * spacing);\n }\n for (i = Math.max(start, 0); i < end; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = Math.round(start + count * spacing);\n }\n }\n}\nfunction getEvenSpacing(arr) {\n const len = arr.length;\n let i, diff;\n if (len < 2) {\n return false;\n }\n for (diff = arr[0], i = 1; i < len; ++i) {\n if (arr[i] - arr[i - 1] !== diff) {\n return false;\n }\n }\n return diff;\n}\n\nconst reverseAlign = (align) => align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset) => edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nfunction sample(arr, numItems) {\n const result = [];\n const increment = arr.length / numItems;\n const len = arr.length;\n let i = 0;\n for (; i < len; i += increment) {\n result.push(arr[Math.floor(i)]);\n }\n return result;\n}\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n const length = scale.ticks.length;\n const validIndex = Math.min(index, length - 1);\n const start = scale._startPixel;\n const end = scale._endPixel;\n const epsilon = 1e-6;\n let lineValue = scale.getPixelForTick(validIndex);\n let offset;\n if (offsetGridLines) {\n if (length === 1) {\n offset = Math.max(lineValue - start, end - lineValue);\n } else if (index === 0) {\n offset = (scale.getPixelForTick(1) - lineValue) / 2;\n } else {\n offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n }\n lineValue += validIndex < index ? offset : -offset;\n if (lineValue < start - epsilon || lineValue > end + epsilon) {\n return;\n }\n }\n return lineValue;\n}\nfunction garbageCollect(caches, length) {\n each(caches, (cache) => {\n const gc = cache.gc;\n const gcLen = gc.length / 2;\n let i;\n if (gcLen > length) {\n for (i = 0; i < gcLen; ++i) {\n delete cache.data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n });\n}\nfunction getTickMarkLength(options) {\n return options.drawTicks ? options.tickLength : 0;\n}\nfunction getTitleHeight(options, fallback) {\n if (!options.display) {\n return 0;\n }\n const font = toFont(options.font, fallback);\n const padding = toPadding(options.padding);\n const lines = isArray(options.text) ? options.text.length : 1;\n return (lines * font.lineHeight) + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n return createContext(parent, {\n scale,\n type: 'scale'\n });\n}\nfunction createTickContext(parent, index, tick) {\n return createContext(parent, {\n tick,\n index,\n type: 'tick'\n });\n}\nfunction titleAlign(align, position, reverse) {\n let ret = _toLeftRightCenter(align);\n if ((reverse && position !== 'right') || (!reverse && position === 'right')) {\n ret = reverseAlign(ret);\n }\n return ret;\n}\nfunction titleArgs(scale, offset, position, align) {\n const {top, left, bottom, right, chart} = scale;\n const {chartArea, scales} = chart;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n const height = bottom - top;\n const width = right - left;\n if (scale.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n } else if (position === 'center') {\n titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n } else {\n titleY = offsetFromEdge(scale, position, offset);\n }\n maxWidth = right - left;\n } else {\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n } else if (position === 'center') {\n titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n } else {\n titleX = offsetFromEdge(scale, position, offset);\n }\n titleY = _alignStartEnd(align, bottom, top);\n rotation = position === 'left' ? -HALF_PI : HALF_PI;\n }\n return {titleX, titleY, maxWidth, rotation};\n}\nclass Scale extends Element {\n constructor(cfg) {\n super();\n this.id = cfg.id;\n this.type = cfg.type;\n this.options = undefined;\n this.ctx = cfg.ctx;\n this.chart = cfg.chart;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this._margins = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n this.maxWidth = undefined;\n this.maxHeight = undefined;\n this.paddingTop = undefined;\n this.paddingBottom = undefined;\n this.paddingLeft = undefined;\n this.paddingRight = undefined;\n this.axis = undefined;\n this.labelRotation = undefined;\n this.min = undefined;\n this.max = undefined;\n this._range = undefined;\n this.ticks = [];\n this._gridLineItems = null;\n this._labelItems = null;\n this._labelSizes = null;\n this._length = 0;\n this._maxLength = 0;\n this._longestTextCache = {};\n this._startPixel = undefined;\n this._endPixel = undefined;\n this._reversePixels = false;\n this._userMax = undefined;\n this._userMin = undefined;\n this._suggestedMax = undefined;\n this._suggestedMin = undefined;\n this._ticksLength = 0;\n this._borderValue = 0;\n this._cache = {};\n this._dataLimitsCached = false;\n this.$context = undefined;\n }\n init(options) {\n this.options = options.setContext(this.getContext());\n this.axis = options.axis;\n this._userMin = this.parse(options.min);\n this._userMax = this.parse(options.max);\n this._suggestedMin = this.parse(options.suggestedMin);\n this._suggestedMax = this.parse(options.suggestedMax);\n }\n parse(raw, index) {\n return raw;\n }\n getUserBounds() {\n let {_userMin, _userMax, _suggestedMin, _suggestedMax} = this;\n _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n return {\n min: finiteOrDefault(_userMin, _suggestedMin),\n max: finiteOrDefault(_userMax, _suggestedMax),\n minDefined: isNumberFinite(_userMin),\n maxDefined: isNumberFinite(_userMax)\n };\n }\n getMinMax(canStack) {\n let {min, max, minDefined, maxDefined} = this.getUserBounds();\n let range;\n if (minDefined && maxDefined) {\n return {min, max};\n }\n const metas = this.getMatchingVisibleMetas();\n for (let i = 0, ilen = metas.length; i < ilen; ++i) {\n range = metas[i].controller.getMinMax(this, canStack);\n if (!minDefined) {\n min = Math.min(min, range.min);\n }\n if (!maxDefined) {\n max = Math.max(max, range.max);\n }\n }\n min = maxDefined && min > max ? max : min;\n max = minDefined && min > max ? min : max;\n return {\n min: finiteOrDefault(min, finiteOrDefault(max, min)),\n max: finiteOrDefault(max, finiteOrDefault(min, max))\n };\n }\n getPadding() {\n return {\n left: this.paddingLeft || 0,\n top: this.paddingTop || 0,\n right: this.paddingRight || 0,\n bottom: this.paddingBottom || 0\n };\n }\n getTicks() {\n return this.ticks;\n }\n getLabels() {\n const data = this.chart.data;\n return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n }\n beforeLayout() {\n this._cache = {};\n this._dataLimitsCached = false;\n }\n beforeUpdate() {\n callback(this.options.beforeUpdate, [this]);\n }\n update(maxWidth, maxHeight, margins) {\n const {beginAtZero, grace, ticks: tickOpts} = this.options;\n const sampleSize = tickOpts.sampleSize;\n this.beforeUpdate();\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins = Object.assign({\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, margins);\n this.ticks = null;\n this._labelSizes = null;\n this._gridLineItems = null;\n this._labelItems = null;\n this.beforeSetDimensions();\n this.setDimensions();\n this.afterSetDimensions();\n this._maxLength = this.isHorizontal()\n ? this.width + margins.left + margins.right\n : this.height + margins.top + margins.bottom;\n if (!this._dataLimitsCached) {\n this.beforeDataLimits();\n this.determineDataLimits();\n this.afterDataLimits();\n this._range = _addGrace(this, grace, beginAtZero);\n this._dataLimitsCached = true;\n }\n this.beforeBuildTicks();\n this.ticks = this.buildTicks() || [];\n this.afterBuildTicks();\n const samplingEnabled = sampleSize < this.ticks.length;\n this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n this.configure();\n this.beforeCalculateLabelRotation();\n this.calculateLabelRotation();\n this.afterCalculateLabelRotation();\n if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n this.ticks = autoSkip(this, this.ticks);\n this._labelSizes = null;\n this.afterAutoSkip();\n }\n if (samplingEnabled) {\n this._convertTicksToLabels(this.ticks);\n }\n this.beforeFit();\n this.fit();\n this.afterFit();\n this.afterUpdate();\n }\n configure() {\n let reversePixels = this.options.reverse;\n let startPixel, endPixel;\n if (this.isHorizontal()) {\n startPixel = this.left;\n endPixel = this.right;\n } else {\n startPixel = this.top;\n endPixel = this.bottom;\n reversePixels = !reversePixels;\n }\n this._startPixel = startPixel;\n this._endPixel = endPixel;\n this._reversePixels = reversePixels;\n this._length = endPixel - startPixel;\n this._alignToPixels = this.options.alignToPixels;\n }\n afterUpdate() {\n callback(this.options.afterUpdate, [this]);\n }\n beforeSetDimensions() {\n callback(this.options.beforeSetDimensions, [this]);\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = 0;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = 0;\n this.bottom = this.height;\n }\n this.paddingLeft = 0;\n this.paddingTop = 0;\n this.paddingRight = 0;\n this.paddingBottom = 0;\n }\n afterSetDimensions() {\n callback(this.options.afterSetDimensions, [this]);\n }\n _callHooks(name) {\n this.chart.notifyPlugins(name, this.getContext());\n callback(this.options[name], [this]);\n }\n beforeDataLimits() {\n this._callHooks('beforeDataLimits');\n }\n determineDataLimits() {}\n afterDataLimits() {\n this._callHooks('afterDataLimits');\n }\n beforeBuildTicks() {\n this._callHooks('beforeBuildTicks');\n }\n buildTicks() {\n return [];\n }\n afterBuildTicks() {\n this._callHooks('afterBuildTicks');\n }\n beforeTickToLabelConversion() {\n callback(this.options.beforeTickToLabelConversion, [this]);\n }\n generateTickLabels(ticks) {\n const tickOpts = this.options.ticks;\n let i, ilen, tick;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n tick = ticks[i];\n tick.label = callback(tickOpts.callback, [tick.value, i, ticks], this);\n }\n }\n afterTickToLabelConversion() {\n callback(this.options.afterTickToLabelConversion, [this]);\n }\n beforeCalculateLabelRotation() {\n callback(this.options.beforeCalculateLabelRotation, [this]);\n }\n calculateLabelRotation() {\n const options = this.options;\n const tickOpts = options.ticks;\n const numTicks = this.ticks.length;\n const minRotation = tickOpts.minRotation || 0;\n const maxRotation = tickOpts.maxRotation;\n let labelRotation = minRotation;\n let tickWidth, maxHeight, maxLabelDiagonal;\n if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n this.labelRotation = minRotation;\n return;\n }\n const labelSizes = this._getLabelSizes();\n const maxLabelWidth = labelSizes.widest.width;\n const maxLabelHeight = labelSizes.highest.height;\n const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n if (maxLabelWidth + 6 > tickWidth) {\n tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n maxHeight = this.maxHeight - getTickMarkLength(options.grid)\n\t\t\t\t- tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n labelRotation = toDegrees(Math.min(\n Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)),\n Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))\n ));\n labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n }\n this.labelRotation = labelRotation;\n }\n afterCalculateLabelRotation() {\n callback(this.options.afterCalculateLabelRotation, [this]);\n }\n afterAutoSkip() {}\n beforeFit() {\n callback(this.options.beforeFit, [this]);\n }\n fit() {\n const minSize = {\n width: 0,\n height: 0\n };\n const {chart, options: {ticks: tickOpts, title: titleOpts, grid: gridOpts}} = this;\n const display = this._isVisible();\n const isHorizontal = this.isHorizontal();\n if (display) {\n const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n if (isHorizontal) {\n minSize.width = this.maxWidth;\n minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n } else {\n minSize.height = this.maxHeight;\n minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n }\n if (tickOpts.display && this.ticks.length) {\n const {first, last, widest, highest} = this._getLabelSizes();\n const tickPadding = tickOpts.padding * 2;\n const angleRadians = toRadians(this.labelRotation);\n const cos = Math.cos(angleRadians);\n const sin = Math.sin(angleRadians);\n if (isHorizontal) {\n const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n } else {\n const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n }\n this._calculatePadding(first, last, sin, cos);\n }\n }\n this._handleMargins();\n if (isHorizontal) {\n this.width = this._length = chart.width - this._margins.left - this._margins.right;\n this.height = minSize.height;\n } else {\n this.width = minSize.width;\n this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n }\n }\n _calculatePadding(first, last, sin, cos) {\n const {ticks: {align, padding}, position} = this.options;\n const isRotated = this.labelRotation !== 0;\n const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n if (this.isHorizontal()) {\n const offsetLeft = this.getPixelForTick(0) - this.left;\n const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n let paddingLeft = 0;\n let paddingRight = 0;\n if (isRotated) {\n if (labelsBelowTicks) {\n paddingLeft = cos * first.width;\n paddingRight = sin * last.height;\n } else {\n paddingLeft = sin * first.height;\n paddingRight = cos * last.width;\n }\n } else if (align === 'start') {\n paddingRight = last.width;\n } else if (align === 'end') {\n paddingLeft = first.width;\n } else if (align !== 'inner') {\n paddingLeft = first.width / 2;\n paddingRight = last.width / 2;\n }\n this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n } else {\n let paddingTop = last.height / 2;\n let paddingBottom = first.height / 2;\n if (align === 'start') {\n paddingTop = 0;\n paddingBottom = first.height;\n } else if (align === 'end') {\n paddingTop = last.height;\n paddingBottom = 0;\n }\n this.paddingTop = paddingTop + padding;\n this.paddingBottom = paddingBottom + padding;\n }\n }\n _handleMargins() {\n if (this._margins) {\n this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n this._margins.top = Math.max(this.paddingTop, this._margins.top);\n this._margins.right = Math.max(this.paddingRight, this._margins.right);\n this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n }\n }\n afterFit() {\n callback(this.options.afterFit, [this]);\n }\n isHorizontal() {\n const {axis, position} = this.options;\n return position === 'top' || position === 'bottom' || axis === 'x';\n }\n isFullSize() {\n return this.options.fullSize;\n }\n _convertTicksToLabels(ticks) {\n this.beforeTickToLabelConversion();\n this.generateTickLabels(ticks);\n let i, ilen;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (isNullOrUndef(ticks[i].label)) {\n ticks.splice(i, 1);\n ilen--;\n i--;\n }\n }\n this.afterTickToLabelConversion();\n }\n _getLabelSizes() {\n let labelSizes = this._labelSizes;\n if (!labelSizes) {\n const sampleSize = this.options.ticks.sampleSize;\n let ticks = this.ticks;\n if (sampleSize < ticks.length) {\n ticks = sample(ticks, sampleSize);\n }\n this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length);\n }\n return labelSizes;\n }\n _computeLabelSizes(ticks, length) {\n const {ctx, _longestTextCache: caches} = this;\n const widths = [];\n const heights = [];\n let widestLabelSize = 0;\n let highestLabelSize = 0;\n let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n for (i = 0; i < length; ++i) {\n label = ticks[i].label;\n tickFont = this._resolveTickFontOptions(i);\n ctx.font = fontString = tickFont.string;\n cache = caches[fontString] = caches[fontString] || {data: {}, gc: []};\n lineHeight = tickFont.lineHeight;\n width = height = 0;\n if (!isNullOrUndef(label) && !isArray(label)) {\n width = _measureText(ctx, cache.data, cache.gc, width, label);\n height = lineHeight;\n } else if (isArray(label)) {\n for (j = 0, jlen = label.length; j < jlen; ++j) {\n nestedLabel = label[j];\n if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n height += lineHeight;\n }\n }\n }\n widths.push(width);\n heights.push(height);\n widestLabelSize = Math.max(width, widestLabelSize);\n highestLabelSize = Math.max(height, highestLabelSize);\n }\n garbageCollect(caches, length);\n const widest = widths.indexOf(widestLabelSize);\n const highest = heights.indexOf(highestLabelSize);\n const valueAt = (idx) => ({width: widths[idx] || 0, height: heights[idx] || 0});\n return {\n first: valueAt(0),\n last: valueAt(length - 1),\n widest: valueAt(widest),\n highest: valueAt(highest),\n widths,\n heights,\n };\n }\n getLabelForValue(value) {\n return value;\n }\n getPixelForValue(value, index) {\n return NaN;\n }\n getValueForPixel(pixel) {}\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getPixelForDecimal(decimal) {\n if (this._reversePixels) {\n decimal = 1 - decimal;\n }\n const pixel = this._startPixel + decimal * this._length;\n return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n }\n getDecimalForPixel(pixel) {\n const decimal = (pixel - this._startPixel) / this._length;\n return this._reversePixels ? 1 - decimal : decimal;\n }\n getBasePixel() {\n return this.getPixelForValue(this.getBaseValue());\n }\n getBaseValue() {\n const {min, max} = this;\n return min < 0 && max < 0 ? max :\n min > 0 && max > 0 ? min :\n 0;\n }\n getContext(index) {\n const ticks = this.ticks || [];\n if (index >= 0 && index < ticks.length) {\n const tick = ticks[index];\n return tick.$context ||\n\t\t\t\t(tick.$context = createTickContext(this.getContext(), index, tick));\n }\n return this.$context ||\n\t\t\t(this.$context = createScaleContext(this.chart.getContext(), this));\n }\n _tickSize() {\n const optionTicks = this.options.ticks;\n const rot = toRadians(this.labelRotation);\n const cos = Math.abs(Math.cos(rot));\n const sin = Math.abs(Math.sin(rot));\n const labelSizes = this._getLabelSizes();\n const padding = optionTicks.autoSkipPadding || 0;\n const w = labelSizes ? labelSizes.widest.width + padding : 0;\n const h = labelSizes ? labelSizes.highest.height + padding : 0;\n return this.isHorizontal()\n ? h * cos > w * sin ? w / cos : h / sin\n : h * sin < w * cos ? h / cos : w / sin;\n }\n _isVisible() {\n const display = this.options.display;\n if (display !== 'auto') {\n return !!display;\n }\n return this.getMatchingVisibleMetas().length > 0;\n }\n _computeGridLineItems(chartArea) {\n const axis = this.axis;\n const chart = this.chart;\n const options = this.options;\n const {grid, position} = options;\n const offset = grid.offset;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const ticksLength = ticks.length + (offset ? 1 : 0);\n const tl = getTickMarkLength(grid);\n const items = [];\n const borderOpts = grid.setContext(this.getContext());\n const axisWidth = borderOpts.drawBorder ? borderOpts.borderWidth : 0;\n const axisHalfWidth = axisWidth / 2;\n const alignBorderValue = function(pixel) {\n return _alignPixel(chart, pixel, axisWidth);\n };\n let borderValue, i, lineValue, alignedLineValue;\n let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n if (position === 'top') {\n borderValue = alignBorderValue(this.bottom);\n ty1 = this.bottom - tl;\n ty2 = borderValue - axisHalfWidth;\n y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n y2 = chartArea.bottom;\n } else if (position === 'bottom') {\n borderValue = alignBorderValue(this.top);\n y1 = chartArea.top;\n y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n ty1 = borderValue + axisHalfWidth;\n ty2 = this.top + tl;\n } else if (position === 'left') {\n borderValue = alignBorderValue(this.right);\n tx1 = this.right - tl;\n tx2 = borderValue - axisHalfWidth;\n x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n x2 = chartArea.right;\n } else if (position === 'right') {\n borderValue = alignBorderValue(this.left);\n x1 = chartArea.left;\n x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n tx1 = borderValue + axisHalfWidth;\n tx2 = this.left + tl;\n } else if (axis === 'x') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n y1 = chartArea.top;\n y2 = chartArea.bottom;\n ty1 = borderValue + axisHalfWidth;\n ty2 = ty1 + tl;\n } else if (axis === 'y') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n tx1 = borderValue - axisHalfWidth;\n tx2 = tx1 - tl;\n x1 = chartArea.left;\n x2 = chartArea.right;\n }\n const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n const step = Math.max(1, Math.ceil(ticksLength / limit));\n for (i = 0; i < ticksLength; i += step) {\n const optsAtIndex = grid.setContext(this.getContext(i));\n const lineWidth = optsAtIndex.lineWidth;\n const lineColor = optsAtIndex.color;\n const borderDash = grid.borderDash || [];\n const borderDashOffset = optsAtIndex.borderDashOffset;\n const tickWidth = optsAtIndex.tickWidth;\n const tickColor = optsAtIndex.tickColor;\n const tickBorderDash = optsAtIndex.tickBorderDash || [];\n const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n lineValue = getPixelForGridLine(this, i, offset);\n if (lineValue === undefined) {\n continue;\n }\n alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n if (isHorizontal) {\n tx1 = tx2 = x1 = x2 = alignedLineValue;\n } else {\n ty1 = ty2 = y1 = y2 = alignedLineValue;\n }\n items.push({\n tx1,\n ty1,\n tx2,\n ty2,\n x1,\n y1,\n x2,\n y2,\n width: lineWidth,\n color: lineColor,\n borderDash,\n borderDashOffset,\n tickWidth,\n tickColor,\n tickBorderDash,\n tickBorderDashOffset,\n });\n }\n this._ticksLength = ticksLength;\n this._borderValue = borderValue;\n return items;\n }\n _computeLabelItems(chartArea) {\n const axis = this.axis;\n const options = this.options;\n const {position, ticks: optionTicks} = options;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const {align, crossAlign, padding, mirror} = optionTicks;\n const tl = getTickMarkLength(options.grid);\n const tickAndPadding = tl + padding;\n const hTickAndPadding = mirror ? -padding : tickAndPadding;\n const rotation = -toRadians(this.labelRotation);\n const items = [];\n let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n let textBaseline = 'middle';\n if (position === 'top') {\n y = this.bottom - hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'bottom') {\n y = this.top + hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'left') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (position === 'right') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (axis === 'x') {\n if (position === 'center') {\n y = ((chartArea.top + chartArea.bottom) / 2) + tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n }\n textAlign = this._getXAxisLabelAlignment();\n } else if (axis === 'y') {\n if (position === 'center') {\n x = ((chartArea.left + chartArea.right) / 2) - tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n x = this.chart.scales[positionAxisID].getPixelForValue(value);\n }\n textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n }\n if (axis === 'y') {\n if (align === 'start') {\n textBaseline = 'top';\n } else if (align === 'end') {\n textBaseline = 'bottom';\n }\n }\n const labelSizes = this._getLabelSizes();\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n label = tick.label;\n const optsAtIndex = optionTicks.setContext(this.getContext(i));\n pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n font = this._resolveTickFontOptions(i);\n lineHeight = font.lineHeight;\n lineCount = isArray(label) ? label.length : 1;\n const halfCount = lineCount / 2;\n const color = optsAtIndex.color;\n const strokeColor = optsAtIndex.textStrokeColor;\n const strokeWidth = optsAtIndex.textStrokeWidth;\n let tickTextAlign = textAlign;\n if (isHorizontal) {\n x = pixel;\n if (textAlign === 'inner') {\n if (i === ilen - 1) {\n tickTextAlign = !this.options.reverse ? 'right' : 'left';\n } else if (i === 0) {\n tickTextAlign = !this.options.reverse ? 'left' : 'right';\n } else {\n tickTextAlign = 'center';\n }\n }\n if (position === 'top') {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = -lineCount * lineHeight + lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n } else {\n textOffset = -labelSizes.highest.height + lineHeight / 2;\n }\n } else {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n } else {\n textOffset = labelSizes.highest.height - lineCount * lineHeight;\n }\n }\n if (mirror) {\n textOffset *= -1;\n }\n } else {\n y = pixel;\n textOffset = (1 - lineCount) * lineHeight / 2;\n }\n let backdrop;\n if (optsAtIndex.showLabelBackdrop) {\n const labelPadding = toPadding(optsAtIndex.backdropPadding);\n const height = labelSizes.heights[i];\n const width = labelSizes.widths[i];\n let top = y + textOffset - labelPadding.top;\n let left = x - labelPadding.left;\n switch (textBaseline) {\n case 'middle':\n top -= height / 2;\n break;\n case 'bottom':\n top -= height;\n break;\n }\n switch (textAlign) {\n case 'center':\n left -= width / 2;\n break;\n case 'right':\n left -= width;\n break;\n }\n backdrop = {\n left,\n top,\n width: width + labelPadding.width,\n height: height + labelPadding.height,\n color: optsAtIndex.backdropColor,\n };\n }\n items.push({\n rotation,\n label,\n font,\n color,\n strokeColor,\n strokeWidth,\n textOffset,\n textAlign: tickTextAlign,\n textBaseline,\n translation: [x, y],\n backdrop,\n });\n }\n return items;\n }\n _getXAxisLabelAlignment() {\n const {position, ticks} = this.options;\n const rotation = -toRadians(this.labelRotation);\n if (rotation) {\n return position === 'top' ? 'left' : 'right';\n }\n let align = 'center';\n if (ticks.align === 'start') {\n align = 'left';\n } else if (ticks.align === 'end') {\n align = 'right';\n } else if (ticks.align === 'inner') {\n align = 'inner';\n }\n return align;\n }\n _getYAxisLabelAlignment(tl) {\n const {position, ticks: {crossAlign, mirror, padding}} = this.options;\n const labelSizes = this._getLabelSizes();\n const tickAndPadding = tl + padding;\n const widest = labelSizes.widest.width;\n let textAlign;\n let x;\n if (position === 'left') {\n if (mirror) {\n x = this.right + padding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += (widest / 2);\n } else {\n textAlign = 'right';\n x += widest;\n }\n } else {\n x = this.right - tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= (widest / 2);\n } else {\n textAlign = 'left';\n x = this.left;\n }\n }\n } else if (position === 'right') {\n if (mirror) {\n x = this.left + padding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= (widest / 2);\n } else {\n textAlign = 'left';\n x -= widest;\n }\n } else {\n x = this.left + tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x = this.right;\n }\n }\n } else {\n textAlign = 'right';\n }\n return {textAlign, x};\n }\n _computeLabelArea() {\n if (this.options.ticks.mirror) {\n return;\n }\n const chart = this.chart;\n const position = this.options.position;\n if (position === 'left' || position === 'right') {\n return {top: 0, left: this.left, bottom: chart.height, right: this.right};\n } if (position === 'top' || position === 'bottom') {\n return {top: this.top, left: 0, bottom: this.bottom, right: chart.width};\n }\n }\n drawBackground() {\n const {ctx, options: {backgroundColor}, left, top, width, height} = this;\n if (backgroundColor) {\n ctx.save();\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(left, top, width, height);\n ctx.restore();\n }\n }\n getLineWidthForValue(value) {\n const grid = this.options.grid;\n if (!this._isVisible() || !grid.display) {\n return 0;\n }\n const ticks = this.ticks;\n const index = ticks.findIndex(t => t.value === value);\n if (index >= 0) {\n const opts = grid.setContext(this.getContext(index));\n return opts.lineWidth;\n }\n return 0;\n }\n drawGrid(chartArea) {\n const grid = this.options.grid;\n const ctx = this.ctx;\n const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n let i, ilen;\n const drawLine = (p1, p2, style) => {\n if (!style.width || !style.color) {\n return;\n }\n ctx.save();\n ctx.lineWidth = style.width;\n ctx.strokeStyle = style.color;\n ctx.setLineDash(style.borderDash || []);\n ctx.lineDashOffset = style.borderDashOffset;\n ctx.beginPath();\n ctx.moveTo(p1.x, p1.y);\n ctx.lineTo(p2.x, p2.y);\n ctx.stroke();\n ctx.restore();\n };\n if (grid.display) {\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n const item = items[i];\n if (grid.drawOnChartArea) {\n drawLine(\n {x: item.x1, y: item.y1},\n {x: item.x2, y: item.y2},\n item\n );\n }\n if (grid.drawTicks) {\n drawLine(\n {x: item.tx1, y: item.ty1},\n {x: item.tx2, y: item.ty2},\n {\n color: item.tickColor,\n width: item.tickWidth,\n borderDash: item.tickBorderDash,\n borderDashOffset: item.tickBorderDashOffset\n }\n );\n }\n }\n }\n }\n drawBorder() {\n const {chart, ctx, options: {grid}} = this;\n const borderOpts = grid.setContext(this.getContext());\n const axisWidth = grid.drawBorder ? borderOpts.borderWidth : 0;\n if (!axisWidth) {\n return;\n }\n const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n const borderValue = this._borderValue;\n let x1, x2, y1, y2;\n if (this.isHorizontal()) {\n x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n y1 = y2 = borderValue;\n } else {\n y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n x1 = x2 = borderValue;\n }\n ctx.save();\n ctx.lineWidth = borderOpts.borderWidth;\n ctx.strokeStyle = borderOpts.borderColor;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n ctx.restore();\n }\n drawLabels(chartArea) {\n const optionTicks = this.options.ticks;\n if (!optionTicks.display) {\n return;\n }\n const ctx = this.ctx;\n const area = this._computeLabelArea();\n if (area) {\n clipArea(ctx, area);\n }\n const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n let i, ilen;\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n const item = items[i];\n const tickFont = item.font;\n const label = item.label;\n if (item.backdrop) {\n ctx.fillStyle = item.backdrop.color;\n ctx.fillRect(item.backdrop.left, item.backdrop.top, item.backdrop.width, item.backdrop.height);\n }\n let y = item.textOffset;\n renderText(ctx, label, 0, y, tickFont, item);\n }\n if (area) {\n unclipArea(ctx);\n }\n }\n drawTitle() {\n const {ctx, options: {position, title, reverse}} = this;\n if (!title.display) {\n return;\n }\n const font = toFont(title.font);\n const padding = toPadding(title.padding);\n const align = title.align;\n let offset = font.lineHeight / 2;\n if (position === 'bottom' || position === 'center' || isObject(position)) {\n offset += padding.bottom;\n if (isArray(title.text)) {\n offset += font.lineHeight * (title.text.length - 1);\n }\n } else {\n offset += padding.top;\n }\n const {titleX, titleY, maxWidth, rotation} = titleArgs(this, offset, position, align);\n renderText(ctx, title.text, 0, 0, font, {\n color: title.color,\n maxWidth,\n rotation,\n textAlign: titleAlign(align, position, reverse),\n textBaseline: 'middle',\n translation: [titleX, titleY],\n });\n }\n draw(chartArea) {\n if (!this._isVisible()) {\n return;\n }\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawBorder();\n this.drawTitle();\n this.drawLabels(chartArea);\n }\n _layers() {\n const opts = this.options;\n const tz = opts.ticks && opts.ticks.z || 0;\n const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n return [{\n z: tz,\n draw: (chartArea) => {\n this.draw(chartArea);\n }\n }];\n }\n return [{\n z: gz,\n draw: (chartArea) => {\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawTitle();\n }\n }, {\n z: gz + 1,\n draw: () => {\n this.drawBorder();\n }\n }, {\n z: tz,\n draw: (chartArea) => {\n this.drawLabels(chartArea);\n }\n }];\n }\n getMatchingVisibleMetas(type) {\n const metas = this.chart.getSortedVisibleDatasetMetas();\n const axisID = this.axis + 'AxisID';\n const result = [];\n let i, ilen;\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n const meta = metas[i];\n if (meta[axisID] === this.id && (!type || meta.type === type)) {\n result.push(meta);\n }\n }\n return result;\n }\n _resolveTickFontOptions(index) {\n const opts = this.options.ticks.setContext(this.getContext(index));\n return toFont(opts.font);\n }\n _maxDigits() {\n const fontSize = this._resolveTickFontOptions(0).lineHeight;\n return (this.isHorizontal() ? this.width : this.height) / fontSize;\n }\n}\n\nclass TypedRegistry {\n constructor(type, scope, override) {\n this.type = type;\n this.scope = scope;\n this.override = override;\n this.items = Object.create(null);\n }\n isForType(type) {\n return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n }\n register(item) {\n const proto = Object.getPrototypeOf(item);\n let parentScope;\n if (isIChartComponent(proto)) {\n parentScope = this.register(proto);\n }\n const items = this.items;\n const id = item.id;\n const scope = this.scope + '.' + id;\n if (!id) {\n throw new Error('class does not have id: ' + item);\n }\n if (id in items) {\n return scope;\n }\n items[id] = item;\n registerDefaults(item, scope, parentScope);\n if (this.override) {\n defaults.override(item.id, item.overrides);\n }\n return scope;\n }\n get(id) {\n return this.items[id];\n }\n unregister(item) {\n const items = this.items;\n const id = item.id;\n const scope = this.scope;\n if (id in items) {\n delete items[id];\n }\n if (scope && id in defaults[scope]) {\n delete defaults[scope][id];\n if (this.override) {\n delete overrides[id];\n }\n }\n }\n}\nfunction registerDefaults(item, scope, parentScope) {\n const itemDefaults = merge(Object.create(null), [\n parentScope ? defaults.get(parentScope) : {},\n defaults.get(scope),\n item.defaults\n ]);\n defaults.set(scope, itemDefaults);\n if (item.defaultRoutes) {\n routeDefaults(scope, item.defaultRoutes);\n }\n if (item.descriptors) {\n defaults.describe(scope, item.descriptors);\n }\n}\nfunction routeDefaults(scope, routes) {\n Object.keys(routes).forEach(property => {\n const propertyParts = property.split('.');\n const sourceName = propertyParts.pop();\n const sourceScope = [scope].concat(propertyParts).join('.');\n const parts = routes[property].split('.');\n const targetName = parts.pop();\n const targetScope = parts.join('.');\n defaults.route(sourceScope, sourceName, targetScope, targetName);\n });\n}\nfunction isIChartComponent(proto) {\n return 'id' in proto && 'defaults' in proto;\n}\n\nclass Registry {\n constructor() {\n this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n this.elements = new TypedRegistry(Element, 'elements');\n this.plugins = new TypedRegistry(Object, 'plugins');\n this.scales = new TypedRegistry(Scale, 'scales');\n this._typedRegistries = [this.controllers, this.scales, this.elements];\n }\n add(...args) {\n this._each('register', args);\n }\n remove(...args) {\n this._each('unregister', args);\n }\n addControllers(...args) {\n this._each('register', args, this.controllers);\n }\n addElements(...args) {\n this._each('register', args, this.elements);\n }\n addPlugins(...args) {\n this._each('register', args, this.plugins);\n }\n addScales(...args) {\n this._each('register', args, this.scales);\n }\n getController(id) {\n return this._get(id, this.controllers, 'controller');\n }\n getElement(id) {\n return this._get(id, this.elements, 'element');\n }\n getPlugin(id) {\n return this._get(id, this.plugins, 'plugin');\n }\n getScale(id) {\n return this._get(id, this.scales, 'scale');\n }\n removeControllers(...args) {\n this._each('unregister', args, this.controllers);\n }\n removeElements(...args) {\n this._each('unregister', args, this.elements);\n }\n removePlugins(...args) {\n this._each('unregister', args, this.plugins);\n }\n removeScales(...args) {\n this._each('unregister', args, this.scales);\n }\n _each(method, args, typedRegistry) {\n [...args].forEach(arg => {\n const reg = typedRegistry || this._getRegistryForType(arg);\n if (typedRegistry || reg.isForType(arg) || (reg === this.plugins && arg.id)) {\n this._exec(method, reg, arg);\n } else {\n each(arg, item => {\n const itemReg = typedRegistry || this._getRegistryForType(item);\n this._exec(method, itemReg, item);\n });\n }\n });\n }\n _exec(method, registry, component) {\n const camelMethod = _capitalize(method);\n callback(component['before' + camelMethod], [], component);\n registry[method](component);\n callback(component['after' + camelMethod], [], component);\n }\n _getRegistryForType(type) {\n for (let i = 0; i < this._typedRegistries.length; i++) {\n const reg = this._typedRegistries[i];\n if (reg.isForType(type)) {\n return reg;\n }\n }\n return this.plugins;\n }\n _get(id, typedRegistry, type) {\n const item = typedRegistry.get(id);\n if (item === undefined) {\n throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n }\n return item;\n }\n}\nvar registry = new Registry();\n\nclass PluginService {\n constructor() {\n this._init = [];\n }\n notify(chart, hook, args, filter) {\n if (hook === 'beforeInit') {\n this._init = this._createDescriptors(chart, true);\n this._notify(this._init, chart, 'install');\n }\n const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n const result = this._notify(descriptors, chart, hook, args);\n if (hook === 'afterDestroy') {\n this._notify(descriptors, chart, 'stop');\n this._notify(this._init, chart, 'uninstall');\n }\n return result;\n }\n _notify(descriptors, chart, hook, args) {\n args = args || {};\n for (const descriptor of descriptors) {\n const plugin = descriptor.plugin;\n const method = plugin[hook];\n const params = [chart, args, descriptor.options];\n if (callback(method, params, plugin) === false && args.cancelable) {\n return false;\n }\n }\n return true;\n }\n invalidate() {\n if (!isNullOrUndef(this._cache)) {\n this._oldCache = this._cache;\n this._cache = undefined;\n }\n }\n _descriptors(chart) {\n if (this._cache) {\n return this._cache;\n }\n const descriptors = this._cache = this._createDescriptors(chart);\n this._notifyStateChanges(chart);\n return descriptors;\n }\n _createDescriptors(chart, all) {\n const config = chart && chart.config;\n const options = valueOrDefault(config.options && config.options.plugins, {});\n const plugins = allPlugins(config);\n return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n }\n _notifyStateChanges(chart) {\n const previousDescriptors = this._oldCache || [];\n const descriptors = this._cache;\n const diff = (a, b) => a.filter(x => !b.some(y => x.plugin.id === y.plugin.id));\n this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n }\n}\nfunction allPlugins(config) {\n const plugins = [];\n const keys = Object.keys(registry.plugins.items);\n for (let i = 0; i < keys.length; i++) {\n plugins.push(registry.getPlugin(keys[i]));\n }\n const local = config.plugins || [];\n for (let i = 0; i < local.length; i++) {\n const plugin = local[i];\n if (plugins.indexOf(plugin) === -1) {\n plugins.push(plugin);\n }\n }\n return plugins;\n}\nfunction getOpts(options, all) {\n if (!all && options === false) {\n return null;\n }\n if (options === true) {\n return {};\n }\n return options;\n}\nfunction createDescriptors(chart, plugins, options, all) {\n const result = [];\n const context = chart.getContext();\n for (let i = 0; i < plugins.length; i++) {\n const plugin = plugins[i];\n const id = plugin.id;\n const opts = getOpts(options[id], all);\n if (opts === null) {\n continue;\n }\n result.push({\n plugin,\n options: pluginOpts(chart.config, plugin, opts, context)\n });\n }\n return result;\n}\nfunction pluginOpts(config, plugin, opts, context) {\n const keys = config.pluginScopeKeys(plugin);\n const scopes = config.getOptionScopes(opts, keys);\n return config.createResolver(scopes, context, [''], {scriptable: false, indexable: false, allKeys: true});\n}\n\nfunction getIndexAxis(type, options) {\n const datasetDefaults = defaults.datasets[type] || {};\n const datasetOptions = (options.datasets || {})[type] || {};\n return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n let axis = id;\n if (id === '_index_') {\n axis = indexAxis;\n } else if (id === '_value_') {\n axis = indexAxis === 'x' ? 'y' : 'x';\n }\n return axis;\n}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n return axis === indexAxis ? '_index_' : '_value_';\n}\nfunction axisFromPosition(position) {\n if (position === 'top' || position === 'bottom') {\n return 'x';\n }\n if (position === 'left' || position === 'right') {\n return 'y';\n }\n}\nfunction determineAxis(id, scaleOptions) {\n if (id === 'x' || id === 'y') {\n return id;\n }\n return scaleOptions.axis || axisFromPosition(scaleOptions.position) || id.charAt(0).toLowerCase();\n}\nfunction mergeScaleConfig(config, options) {\n const chartDefaults = overrides[config.type] || {scales: {}};\n const configScales = options.scales || {};\n const chartIndexAxis = getIndexAxis(config.type, options);\n const firstIDs = Object.create(null);\n const scales = Object.create(null);\n Object.keys(configScales).forEach(id => {\n const scaleConf = configScales[id];\n if (!isObject(scaleConf)) {\n return console.error(`Invalid scale configuration for scale: ${id}`);\n }\n if (scaleConf._proxy) {\n return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n }\n const axis = determineAxis(id, scaleConf);\n const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n const defaultScaleOptions = chartDefaults.scales || {};\n firstIDs[axis] = firstIDs[axis] || id;\n scales[id] = mergeIf(Object.create(null), [{axis}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n });\n config.data.datasets.forEach(dataset => {\n const type = dataset.type || config.type;\n const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n const datasetDefaults = overrides[type] || {};\n const defaultScaleOptions = datasetDefaults.scales || {};\n Object.keys(defaultScaleOptions).forEach(defaultID => {\n const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n const id = dataset[axis + 'AxisID'] || firstIDs[axis] || axis;\n scales[id] = scales[id] || Object.create(null);\n mergeIf(scales[id], [{axis}, configScales[id], defaultScaleOptions[defaultID]]);\n });\n });\n Object.keys(scales).forEach(key => {\n const scale = scales[key];\n mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n });\n return scales;\n}\nfunction initOptions(config) {\n const options = config.options || (config.options = {});\n options.plugins = valueOrDefault(options.plugins, {});\n options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n data = data || {};\n data.datasets = data.datasets || [];\n data.labels = data.labels || [];\n return data;\n}\nfunction initConfig(config) {\n config = config || {};\n config.data = initData(config.data);\n initOptions(config);\n return config;\n}\nconst keyCache = new Map();\nconst keysCached = new Set();\nfunction cachedKeys(cacheKey, generate) {\n let keys = keyCache.get(cacheKey);\n if (!keys) {\n keys = generate();\n keyCache.set(cacheKey, keys);\n keysCached.add(keys);\n }\n return keys;\n}\nconst addIfFound = (set, obj, key) => {\n const opts = resolveObjectKey(obj, key);\n if (opts !== undefined) {\n set.add(opts);\n }\n};\nclass Config {\n constructor(config) {\n this._config = initConfig(config);\n this._scopeCache = new Map();\n this._resolverCache = new Map();\n }\n get platform() {\n return this._config.platform;\n }\n get type() {\n return this._config.type;\n }\n set type(type) {\n this._config.type = type;\n }\n get data() {\n return this._config.data;\n }\n set data(data) {\n this._config.data = initData(data);\n }\n get options() {\n return this._config.options;\n }\n set options(options) {\n this._config.options = options;\n }\n get plugins() {\n return this._config.plugins;\n }\n update() {\n const config = this._config;\n this.clearCache();\n initOptions(config);\n }\n clearCache() {\n this._scopeCache.clear();\n this._resolverCache.clear();\n }\n datasetScopeKeys(datasetType) {\n return cachedKeys(datasetType,\n () => [[\n `datasets.${datasetType}`,\n ''\n ]]);\n }\n datasetAnimationScopeKeys(datasetType, transition) {\n return cachedKeys(`${datasetType}.transition.${transition}`,\n () => [\n [\n `datasets.${datasetType}.transitions.${transition}`,\n `transitions.${transition}`,\n ],\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n datasetElementScopeKeys(datasetType, elementType) {\n return cachedKeys(`${datasetType}-${elementType}`,\n () => [[\n `datasets.${datasetType}.elements.${elementType}`,\n `datasets.${datasetType}`,\n `elements.${elementType}`,\n ''\n ]]);\n }\n pluginScopeKeys(plugin) {\n const id = plugin.id;\n const type = this.type;\n return cachedKeys(`${type}-plugin-${id}`,\n () => [[\n `plugins.${id}`,\n ...plugin.additionalOptionScopes || [],\n ]]);\n }\n _cachedScopes(mainScope, resetCache) {\n const _scopeCache = this._scopeCache;\n let cache = _scopeCache.get(mainScope);\n if (!cache || resetCache) {\n cache = new Map();\n _scopeCache.set(mainScope, cache);\n }\n return cache;\n }\n getOptionScopes(mainScope, keyLists, resetCache) {\n const {options, type} = this;\n const cache = this._cachedScopes(mainScope, resetCache);\n const cached = cache.get(keyLists);\n if (cached) {\n return cached;\n }\n const scopes = new Set();\n keyLists.forEach(keys => {\n if (mainScope) {\n scopes.add(mainScope);\n keys.forEach(key => addIfFound(scopes, mainScope, key));\n }\n keys.forEach(key => addIfFound(scopes, options, key));\n keys.forEach(key => addIfFound(scopes, overrides[type] || {}, key));\n keys.forEach(key => addIfFound(scopes, defaults, key));\n keys.forEach(key => addIfFound(scopes, descriptors, key));\n });\n const array = Array.from(scopes);\n if (array.length === 0) {\n array.push(Object.create(null));\n }\n if (keysCached.has(keyLists)) {\n cache.set(keyLists, array);\n }\n return array;\n }\n chartOptionScopes() {\n const {options, type} = this;\n return [\n options,\n overrides[type] || {},\n defaults.datasets[type] || {},\n {type},\n defaults,\n descriptors\n ];\n }\n resolveNamedOptions(scopes, names, context, prefixes = ['']) {\n const result = {$shared: true};\n const {resolver, subPrefixes} = getResolver(this._resolverCache, scopes, prefixes);\n let options = resolver;\n if (needContext(resolver, names)) {\n result.$shared = false;\n context = isFunction(context) ? context() : context;\n const subResolver = this.createResolver(scopes, context, subPrefixes);\n options = _attachContext(resolver, context, subResolver);\n }\n for (const prop of names) {\n result[prop] = options[prop];\n }\n return result;\n }\n createResolver(scopes, context, prefixes = [''], descriptorDefaults) {\n const {resolver} = getResolver(this._resolverCache, scopes, prefixes);\n return isObject(context)\n ? _attachContext(resolver, context, undefined, descriptorDefaults)\n : resolver;\n }\n}\nfunction getResolver(resolverCache, scopes, prefixes) {\n let cache = resolverCache.get(scopes);\n if (!cache) {\n cache = new Map();\n resolverCache.set(scopes, cache);\n }\n const cacheKey = prefixes.join();\n let cached = cache.get(cacheKey);\n if (!cached) {\n const resolver = _createResolver(scopes, prefixes);\n cached = {\n resolver,\n subPrefixes: prefixes.filter(p => !p.toLowerCase().includes('hover'))\n };\n cache.set(cacheKey, cached);\n }\n return cached;\n}\nconst hasFunction = value => isObject(value)\n && Object.getOwnPropertyNames(value).reduce((acc, key) => acc || isFunction(value[key]), false);\nfunction needContext(proxy, names) {\n const {isScriptable, isIndexable} = _descriptors(proxy);\n for (const prop of names) {\n const scriptable = isScriptable(prop);\n const indexable = isIndexable(prop);\n const value = (indexable || scriptable) && proxy[prop];\n if ((scriptable && (isFunction(value) || hasFunction(value)))\n || (indexable && isArray(value))) {\n return true;\n }\n }\n return false;\n}\n\nvar version = \"3.8.0\";\n\nconst KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\nfunction positionIsHorizontal(position, axis) {\n return position === 'top' || position === 'bottom' || (KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x');\n}\nfunction compare2Level(l1, l2) {\n return function(a, b) {\n return a[l1] === b[l1]\n ? a[l2] - b[l2]\n : a[l1] - b[l1];\n };\n}\nfunction onAnimationsComplete(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n chart.notifyPlugins('afterRender');\n callback(animationOptions && animationOptions.onComplete, [context], chart);\n}\nfunction onAnimationProgress(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n callback(animationOptions && animationOptions.onProgress, [context], chart);\n}\nfunction getCanvas(item) {\n if (_isDomSupported() && typeof item === 'string') {\n item = document.getElementById(item);\n } else if (item && item.length) {\n item = item[0];\n }\n if (item && item.canvas) {\n item = item.canvas;\n }\n return item;\n}\nconst instances = {};\nconst getChart = (key) => {\n const canvas = getCanvas(key);\n return Object.values(instances).filter((c) => c.canvas === canvas).pop();\n};\nfunction moveNumericKeys(obj, start, move) {\n const keys = Object.keys(obj);\n for (const key of keys) {\n const intKey = +key;\n if (intKey >= start) {\n const value = obj[key];\n delete obj[key];\n if (move > 0 || intKey > start) {\n obj[intKey + move] = value;\n }\n }\n }\n}\nfunction determineLastEvent(e, lastEvent, inChartArea, isClick) {\n if (!inChartArea || e.type === 'mouseout') {\n return null;\n }\n if (isClick) {\n return lastEvent;\n }\n return e;\n}\nclass Chart {\n constructor(item, userConfig) {\n const config = this.config = new Config(userConfig);\n const initialCanvas = getCanvas(item);\n const existingChart = getChart(initialCanvas);\n if (existingChart) {\n throw new Error(\n 'Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' +\n\t\t\t\t' must be destroyed before the canvas can be reused.'\n );\n }\n const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n this.platform.updateConfig(config);\n const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n const canvas = context && context.canvas;\n const height = canvas && canvas.height;\n const width = canvas && canvas.width;\n this.id = uid();\n this.ctx = context;\n this.canvas = canvas;\n this.width = width;\n this.height = height;\n this._options = options;\n this._aspectRatio = this.aspectRatio;\n this._layers = [];\n this._metasets = [];\n this._stacks = undefined;\n this.boxes = [];\n this.currentDevicePixelRatio = undefined;\n this.chartArea = undefined;\n this._active = [];\n this._lastEvent = undefined;\n this._listeners = {};\n this._responsiveListeners = undefined;\n this._sortedMetasets = [];\n this.scales = {};\n this._plugins = new PluginService();\n this.$proxies = {};\n this._hiddenIndices = {};\n this.attached = false;\n this._animationsDisabled = undefined;\n this.$context = undefined;\n this._doResize = debounce(mode => this.update(mode), options.resizeDelay || 0);\n this._dataChanges = [];\n instances[this.id] = this;\n if (!context || !canvas) {\n console.error(\"Failed to create chart: can't acquire context from the given item\");\n return;\n }\n animator.listen(this, 'complete', onAnimationsComplete);\n animator.listen(this, 'progress', onAnimationProgress);\n this._initialize();\n if (this.attached) {\n this.update();\n }\n }\n get aspectRatio() {\n const {options: {aspectRatio, maintainAspectRatio}, width, height, _aspectRatio} = this;\n if (!isNullOrUndef(aspectRatio)) {\n return aspectRatio;\n }\n if (maintainAspectRatio && _aspectRatio) {\n return _aspectRatio;\n }\n return height ? width / height : null;\n }\n get data() {\n return this.config.data;\n }\n set data(data) {\n this.config.data = data;\n }\n get options() {\n return this._options;\n }\n set options(options) {\n this.config.options = options;\n }\n _initialize() {\n this.notifyPlugins('beforeInit');\n if (this.options.responsive) {\n this.resize();\n } else {\n retinaScale(this, this.options.devicePixelRatio);\n }\n this.bindEvents();\n this.notifyPlugins('afterInit');\n return this;\n }\n clear() {\n clearCanvas(this.canvas, this.ctx);\n return this;\n }\n stop() {\n animator.stop(this);\n return this;\n }\n resize(width, height) {\n if (!animator.running(this)) {\n this._resize(width, height);\n } else {\n this._resizeBeforeDraw = {width, height};\n }\n }\n _resize(width, height) {\n const options = this.options;\n const canvas = this.canvas;\n const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n const mode = this.width ? 'resize' : 'attach';\n this.width = newSize.width;\n this.height = newSize.height;\n this._aspectRatio = this.aspectRatio;\n if (!retinaScale(this, newRatio, true)) {\n return;\n }\n this.notifyPlugins('resize', {size: newSize});\n callback(options.onResize, [this, newSize], this);\n if (this.attached) {\n if (this._doResize(mode)) {\n this.render();\n }\n }\n }\n ensureScalesHaveIDs() {\n const options = this.options;\n const scalesOptions = options.scales || {};\n each(scalesOptions, (axisOptions, axisID) => {\n axisOptions.id = axisID;\n });\n }\n buildOrUpdateScales() {\n const options = this.options;\n const scaleOpts = options.scales;\n const scales = this.scales;\n const updated = Object.keys(scales).reduce((obj, id) => {\n obj[id] = false;\n return obj;\n }, {});\n let items = [];\n if (scaleOpts) {\n items = items.concat(\n Object.keys(scaleOpts).map((id) => {\n const scaleOptions = scaleOpts[id];\n const axis = determineAxis(id, scaleOptions);\n const isRadial = axis === 'r';\n const isHorizontal = axis === 'x';\n return {\n options: scaleOptions,\n dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n };\n })\n );\n }\n each(items, (item) => {\n const scaleOptions = item.options;\n const id = scaleOptions.id;\n const axis = determineAxis(id, scaleOptions);\n const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n scaleOptions.position = item.dposition;\n }\n updated[id] = true;\n let scale = null;\n if (id in scales && scales[id].type === scaleType) {\n scale = scales[id];\n } else {\n const scaleClass = registry.getScale(scaleType);\n scale = new scaleClass({\n id,\n type: scaleType,\n ctx: this.ctx,\n chart: this\n });\n scales[scale.id] = scale;\n }\n scale.init(scaleOptions, options);\n });\n each(updated, (hasUpdated, id) => {\n if (!hasUpdated) {\n delete scales[id];\n }\n });\n each(scales, (scale) => {\n layouts.configure(this, scale, scale.options);\n layouts.addBox(this, scale);\n });\n }\n _updateMetasets() {\n const metasets = this._metasets;\n const numData = this.data.datasets.length;\n const numMeta = metasets.length;\n metasets.sort((a, b) => a.index - b.index);\n if (numMeta > numData) {\n for (let i = numData; i < numMeta; ++i) {\n this._destroyDatasetMeta(i);\n }\n metasets.splice(numData, numMeta - numData);\n }\n this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n }\n _removeUnreferencedMetasets() {\n const {_metasets: metasets, data: {datasets}} = this;\n if (metasets.length > datasets.length) {\n delete this._stacks;\n }\n metasets.forEach((meta, index) => {\n if (datasets.filter(x => x === meta._dataset).length === 0) {\n this._destroyDatasetMeta(index);\n }\n });\n }\n buildOrUpdateControllers() {\n const newControllers = [];\n const datasets = this.data.datasets;\n let i, ilen;\n this._removeUnreferencedMetasets();\n for (i = 0, ilen = datasets.length; i < ilen; i++) {\n const dataset = datasets[i];\n let meta = this.getDatasetMeta(i);\n const type = dataset.type || this.config.type;\n if (meta.type && meta.type !== type) {\n this._destroyDatasetMeta(i);\n meta = this.getDatasetMeta(i);\n }\n meta.type = type;\n meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n meta.order = dataset.order || 0;\n meta.index = i;\n meta.label = '' + dataset.label;\n meta.visible = this.isDatasetVisible(i);\n if (meta.controller) {\n meta.controller.updateIndex(i);\n meta.controller.linkScales();\n } else {\n const ControllerClass = registry.getController(type);\n const {datasetElementType, dataElementType} = defaults.datasets[type];\n Object.assign(ControllerClass.prototype, {\n dataElementType: registry.getElement(dataElementType),\n datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n });\n meta.controller = new ControllerClass(this, i);\n newControllers.push(meta.controller);\n }\n }\n this._updateMetasets();\n return newControllers;\n }\n _resetElements() {\n each(this.data.datasets, (dataset, datasetIndex) => {\n this.getDatasetMeta(datasetIndex).controller.reset();\n }, this);\n }\n reset() {\n this._resetElements();\n this.notifyPlugins('reset');\n }\n update(mode) {\n const config = this.config;\n config.update();\n const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n const animsDisabled = this._animationsDisabled = !options.animation;\n this._updateScales();\n this._checkEventBindings();\n this._updateHiddenIndices();\n this._plugins.invalidate();\n if (this.notifyPlugins('beforeUpdate', {mode, cancelable: true}) === false) {\n return;\n }\n const newControllers = this.buildOrUpdateControllers();\n this.notifyPlugins('beforeElementsUpdate');\n let minPadding = 0;\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) {\n const {controller} = this.getDatasetMeta(i);\n const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n controller.buildOrUpdateElements(reset);\n minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n }\n minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n this._updateLayout(minPadding);\n if (!animsDisabled) {\n each(newControllers, (controller) => {\n controller.reset();\n });\n }\n this._updateDatasets(mode);\n this.notifyPlugins('afterUpdate', {mode});\n this._layers.sort(compare2Level('z', '_idx'));\n const {_active, _lastEvent} = this;\n if (_lastEvent) {\n this._eventHandler(_lastEvent, true);\n } else if (_active.length) {\n this._updateHoverStyles(_active, _active, true);\n }\n this.render();\n }\n _updateScales() {\n each(this.scales, (scale) => {\n layouts.removeBox(this, scale);\n });\n this.ensureScalesHaveIDs();\n this.buildOrUpdateScales();\n }\n _checkEventBindings() {\n const options = this.options;\n const existingEvents = new Set(Object.keys(this._listeners));\n const newEvents = new Set(options.events);\n if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n this.unbindEvents();\n this.bindEvents();\n }\n }\n _updateHiddenIndices() {\n const {_hiddenIndices} = this;\n const changes = this._getUniformDataChanges() || [];\n for (const {method, start, count} of changes) {\n const move = method === '_removeElements' ? -count : count;\n moveNumericKeys(_hiddenIndices, start, move);\n }\n }\n _getUniformDataChanges() {\n const _dataChanges = this._dataChanges;\n if (!_dataChanges || !_dataChanges.length) {\n return;\n }\n this._dataChanges = [];\n const datasetCount = this.data.datasets.length;\n const makeSet = (idx) => new Set(\n _dataChanges\n .filter(c => c[0] === idx)\n .map((c, i) => i + ',' + c.splice(1).join(','))\n );\n const changeSet = makeSet(0);\n for (let i = 1; i < datasetCount; i++) {\n if (!setsEqual(changeSet, makeSet(i))) {\n return;\n }\n }\n return Array.from(changeSet)\n .map(c => c.split(','))\n .map(a => ({method: a[1], start: +a[2], count: +a[3]}));\n }\n _updateLayout(minPadding) {\n if (this.notifyPlugins('beforeLayout', {cancelable: true}) === false) {\n return;\n }\n layouts.update(this, this.width, this.height, minPadding);\n const area = this.chartArea;\n const noArea = area.width <= 0 || area.height <= 0;\n this._layers = [];\n each(this.boxes, (box) => {\n if (noArea && box.position === 'chartArea') {\n return;\n }\n if (box.configure) {\n box.configure();\n }\n this._layers.push(...box._layers());\n }, this);\n this._layers.forEach((item, index) => {\n item._idx = index;\n });\n this.notifyPlugins('afterLayout');\n }\n _updateDatasets(mode) {\n if (this.notifyPlugins('beforeDatasetsUpdate', {mode, cancelable: true}) === false) {\n return;\n }\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this.getDatasetMeta(i).controller.configure();\n }\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this._updateDataset(i, isFunction(mode) ? mode({datasetIndex: i}) : mode);\n }\n this.notifyPlugins('afterDatasetsUpdate', {mode});\n }\n _updateDataset(index, mode) {\n const meta = this.getDatasetMeta(index);\n const args = {meta, index, mode, cancelable: true};\n if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n return;\n }\n meta.controller._update(mode);\n args.cancelable = false;\n this.notifyPlugins('afterDatasetUpdate', args);\n }\n render() {\n if (this.notifyPlugins('beforeRender', {cancelable: true}) === false) {\n return;\n }\n if (animator.has(this)) {\n if (this.attached && !animator.running(this)) {\n animator.start(this);\n }\n } else {\n this.draw();\n onAnimationsComplete({chart: this});\n }\n }\n draw() {\n let i;\n if (this._resizeBeforeDraw) {\n const {width, height} = this._resizeBeforeDraw;\n this._resize(width, height);\n this._resizeBeforeDraw = null;\n }\n this.clear();\n if (this.width <= 0 || this.height <= 0) {\n return;\n }\n if (this.notifyPlugins('beforeDraw', {cancelable: true}) === false) {\n return;\n }\n const layers = this._layers;\n for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n layers[i].draw(this.chartArea);\n }\n this._drawDatasets();\n for (; i < layers.length; ++i) {\n layers[i].draw(this.chartArea);\n }\n this.notifyPlugins('afterDraw');\n }\n _getSortedDatasetMetas(filterVisible) {\n const metasets = this._sortedMetasets;\n const result = [];\n let i, ilen;\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n const meta = metasets[i];\n if (!filterVisible || meta.visible) {\n result.push(meta);\n }\n }\n return result;\n }\n getSortedVisibleDatasetMetas() {\n return this._getSortedDatasetMetas(true);\n }\n _drawDatasets() {\n if (this.notifyPlugins('beforeDatasetsDraw', {cancelable: true}) === false) {\n return;\n }\n const metasets = this.getSortedVisibleDatasetMetas();\n for (let i = metasets.length - 1; i >= 0; --i) {\n this._drawDataset(metasets[i]);\n }\n this.notifyPlugins('afterDatasetsDraw');\n }\n _drawDataset(meta) {\n const ctx = this.ctx;\n const clip = meta._clip;\n const useClip = !clip.disabled;\n const area = this.chartArea;\n const args = {\n meta,\n index: meta.index,\n cancelable: true\n };\n if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n return;\n }\n if (useClip) {\n clipArea(ctx, {\n left: clip.left === false ? 0 : area.left - clip.left,\n right: clip.right === false ? this.width : area.right + clip.right,\n top: clip.top === false ? 0 : area.top - clip.top,\n bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom\n });\n }\n meta.controller.draw();\n if (useClip) {\n unclipArea(ctx);\n }\n args.cancelable = false;\n this.notifyPlugins('afterDatasetDraw', args);\n }\n isPointInArea(point) {\n return _isPointInArea(point, this.chartArea, this._minPadding);\n }\n getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n const method = Interaction.modes[mode];\n if (typeof method === 'function') {\n return method(this, e, options, useFinalPosition);\n }\n return [];\n }\n getDatasetMeta(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n const metasets = this._metasets;\n let meta = metasets.filter(x => x && x._dataset === dataset).pop();\n if (!meta) {\n meta = {\n type: null,\n data: [],\n dataset: null,\n controller: null,\n hidden: null,\n xAxisID: null,\n yAxisID: null,\n order: dataset && dataset.order || 0,\n index: datasetIndex,\n _dataset: dataset,\n _parsed: [],\n _sorted: false\n };\n metasets.push(meta);\n }\n return meta;\n }\n getContext() {\n return this.$context || (this.$context = createContext(null, {chart: this, type: 'chart'}));\n }\n getVisibleDatasetCount() {\n return this.getSortedVisibleDatasetMetas().length;\n }\n isDatasetVisible(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n if (!dataset) {\n return false;\n }\n const meta = this.getDatasetMeta(datasetIndex);\n return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n }\n setDatasetVisibility(datasetIndex, visible) {\n const meta = this.getDatasetMeta(datasetIndex);\n meta.hidden = !visible;\n }\n toggleDataVisibility(index) {\n this._hiddenIndices[index] = !this._hiddenIndices[index];\n }\n getDataVisibility(index) {\n return !this._hiddenIndices[index];\n }\n _updateVisibility(datasetIndex, dataIndex, visible) {\n const mode = visible ? 'show' : 'hide';\n const meta = this.getDatasetMeta(datasetIndex);\n const anims = meta.controller._resolveAnimations(undefined, mode);\n if (defined(dataIndex)) {\n meta.data[dataIndex].hidden = !visible;\n this.update();\n } else {\n this.setDatasetVisibility(datasetIndex, visible);\n anims.update(meta, {visible});\n this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : undefined);\n }\n }\n hide(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, false);\n }\n show(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, true);\n }\n _destroyDatasetMeta(datasetIndex) {\n const meta = this._metasets[datasetIndex];\n if (meta && meta.controller) {\n meta.controller._destroy();\n }\n delete this._metasets[datasetIndex];\n }\n _stop() {\n let i, ilen;\n this.stop();\n animator.remove(this);\n for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this._destroyDatasetMeta(i);\n }\n }\n destroy() {\n this.notifyPlugins('beforeDestroy');\n const {canvas, ctx} = this;\n this._stop();\n this.config.clearCache();\n if (canvas) {\n this.unbindEvents();\n clearCanvas(canvas, ctx);\n this.platform.releaseContext(ctx);\n this.canvas = null;\n this.ctx = null;\n }\n this.notifyPlugins('destroy');\n delete instances[this.id];\n this.notifyPlugins('afterDestroy');\n }\n toBase64Image(...args) {\n return this.canvas.toDataURL(...args);\n }\n bindEvents() {\n this.bindUserEvents();\n if (this.options.responsive) {\n this.bindResponsiveEvents();\n } else {\n this.attached = true;\n }\n }\n bindUserEvents() {\n const listeners = this._listeners;\n const platform = this.platform;\n const _add = (type, listener) => {\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const listener = (e, x, y) => {\n e.offsetX = x;\n e.offsetY = y;\n this._eventHandler(e);\n };\n each(this.options.events, (type) => _add(type, listener));\n }\n bindResponsiveEvents() {\n if (!this._responsiveListeners) {\n this._responsiveListeners = {};\n }\n const listeners = this._responsiveListeners;\n const platform = this.platform;\n const _add = (type, listener) => {\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const _remove = (type, listener) => {\n if (listeners[type]) {\n platform.removeEventListener(this, type, listener);\n delete listeners[type];\n }\n };\n const listener = (width, height) => {\n if (this.canvas) {\n this.resize(width, height);\n }\n };\n let detached;\n const attached = () => {\n _remove('attach', attached);\n this.attached = true;\n this.resize();\n _add('resize', listener);\n _add('detach', detached);\n };\n detached = () => {\n this.attached = false;\n _remove('resize', listener);\n this._stop();\n this._resize(0, 0);\n _add('attach', attached);\n };\n if (platform.isAttached(this.canvas)) {\n attached();\n } else {\n detached();\n }\n }\n unbindEvents() {\n each(this._listeners, (listener, type) => {\n this.platform.removeEventListener(this, type, listener);\n });\n this._listeners = {};\n each(this._responsiveListeners, (listener, type) => {\n this.platform.removeEventListener(this, type, listener);\n });\n this._responsiveListeners = undefined;\n }\n updateHoverStyle(items, mode, enabled) {\n const prefix = enabled ? 'set' : 'remove';\n let meta, item, i, ilen;\n if (mode === 'dataset') {\n meta = this.getDatasetMeta(items[0].datasetIndex);\n meta.controller['_' + prefix + 'DatasetHoverStyle']();\n }\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n item = items[i];\n const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n if (controller) {\n controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n }\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements) {\n const lastActive = this._active || [];\n const active = activeElements.map(({datasetIndex, index}) => {\n const meta = this.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('No dataset found at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index,\n };\n });\n const changed = !_elementsEqual(active, lastActive);\n if (changed) {\n this._active = active;\n this._lastEvent = null;\n this._updateHoverStyles(active, lastActive);\n }\n }\n notifyPlugins(hook, args, filter) {\n return this._plugins.notify(this, hook, args, filter);\n }\n _updateHoverStyles(active, lastActive, replay) {\n const hoverOptions = this.options.hover;\n const diff = (a, b) => a.filter(x => !b.some(y => x.datasetIndex === y.datasetIndex && x.index === y.index));\n const deactivated = diff(lastActive, active);\n const activated = replay ? active : diff(active, lastActive);\n if (deactivated.length) {\n this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n }\n if (activated.length && hoverOptions.mode) {\n this.updateHoverStyle(activated, hoverOptions.mode, true);\n }\n }\n _eventHandler(e, replay) {\n const args = {\n event: e,\n replay,\n cancelable: true,\n inChartArea: this.isPointInArea(e)\n };\n const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type);\n if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n return;\n }\n const changed = this._handleEvent(e, replay, args.inChartArea);\n args.cancelable = false;\n this.notifyPlugins('afterEvent', args, eventFilter);\n if (changed || args.changed) {\n this.render();\n }\n return this;\n }\n _handleEvent(e, replay, inChartArea) {\n const {_active: lastActive = [], options} = this;\n const useFinalPosition = replay;\n const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n const isClick = _isClickEvent(e);\n const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n if (inChartArea) {\n this._lastEvent = null;\n callback(options.onHover, [e, active, this], this);\n if (isClick) {\n callback(options.onClick, [e, active, this], this);\n }\n }\n const changed = !_elementsEqual(active, lastActive);\n if (changed || replay) {\n this._active = active;\n this._updateHoverStyles(active, lastActive, replay);\n }\n this._lastEvent = lastEvent;\n return changed;\n }\n _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive;\n }\n const hoverOptions = this.options.hover;\n return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n }\n}\nconst invalidatePlugins = () => each(Chart.instances, (chart) => chart._plugins.invalidate());\nconst enumerable = true;\nObject.defineProperties(Chart, {\n defaults: {\n enumerable,\n value: defaults\n },\n instances: {\n enumerable,\n value: instances\n },\n overrides: {\n enumerable,\n value: overrides\n },\n registry: {\n enumerable,\n value: registry\n },\n version: {\n enumerable,\n value: version\n },\n getChart: {\n enumerable,\n value: getChart\n },\n register: {\n enumerable,\n value: (...items) => {\n registry.add(...items);\n invalidatePlugins();\n }\n },\n unregister: {\n enumerable,\n value: (...items) => {\n registry.remove(...items);\n invalidatePlugins();\n }\n }\n});\n\nfunction clipArc(ctx, element, endAngle) {\n const {startAngle, pixelMargin, x, y, outerRadius, innerRadius} = element;\n let angleMargin = pixelMargin / outerRadius;\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n if (innerRadius > pixelMargin) {\n angleMargin = pixelMargin / innerRadius;\n ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n } else {\n ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n }\n ctx.closePath();\n ctx.clip();\n}\nfunction toRadiusCorners(value) {\n return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\nfunction parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n const o = toRadiusCorners(arc.options.borderRadius);\n const halfThickness = (outerRadius - innerRadius) / 2;\n const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n const computeOuterLimit = (val) => {\n const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n };\n return {\n outerStart: computeOuterLimit(o.outerStart),\n outerEnd: computeOuterLimit(o.outerEnd),\n innerStart: _limitValue(o.innerStart, 0, innerLimit),\n innerEnd: _limitValue(o.innerEnd, 0, innerLimit),\n };\n}\nfunction rThetaToXY(r, theta, x, y) {\n return {\n x: x + r * Math.cos(theta),\n y: y + r * Math.sin(theta),\n };\n}\nfunction pathArc(ctx, element, offset, spacing, end) {\n const {x, y, startAngle: start, pixelMargin, innerRadius: innerR} = element;\n const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n let spacingOffset = 0;\n const alpha = end - start;\n if (spacing) {\n const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n const adjustedAngle = avNogSpacingRadius !== 0 ? (alpha * avNogSpacingRadius) / (avNogSpacingRadius + spacing) : alpha;\n spacingOffset = (alpha - adjustedAngle) / 2;\n }\n const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n const angleOffset = (alpha - beta) / 2;\n const startAngle = start + angleOffset + spacingOffset;\n const endAngle = end - angleOffset - spacingOffset;\n const {outerStart, outerEnd, innerStart, innerEnd} = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);\n const outerStartAdjustedRadius = outerRadius - outerStart;\n const outerEndAdjustedRadius = outerRadius - outerEnd;\n const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n const innerStartAdjustedRadius = innerRadius + innerStart;\n const innerEndAdjustedRadius = innerRadius + innerEnd;\n const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerEndAdjustedAngle);\n if (outerEnd > 0) {\n const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n }\n const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n ctx.lineTo(p4.x, p4.y);\n if (innerEnd > 0) {\n const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n }\n ctx.arc(x, y, innerRadius, endAngle - (innerEnd / innerRadius), startAngle + (innerStart / innerRadius), true);\n if (innerStart > 0) {\n const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n }\n const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n ctx.lineTo(p8.x, p8.y);\n if (outerStart > 0) {\n const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n }\n ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing) {\n const {fullCircles, startAngle, circumference} = element;\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, startAngle + TAU);\n for (let i = 0; i < fullCircles; ++i) {\n ctx.fill();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + circumference % TAU;\n if (circumference % TAU === 0) {\n endAngle += TAU;\n }\n }\n }\n pathArc(ctx, element, offset, spacing, endAngle);\n ctx.fill();\n return endAngle;\n}\nfunction drawFullCircleBorders(ctx, element, inner) {\n const {x, y, startAngle, pixelMargin, fullCircles} = element;\n const outerRadius = Math.max(element.outerRadius - pixelMargin, 0);\n const innerRadius = element.innerRadius + pixelMargin;\n let i;\n if (inner) {\n clipArc(ctx, element, startAngle + TAU);\n }\n ctx.beginPath();\n ctx.arc(x, y, innerRadius, startAngle + TAU, startAngle, true);\n for (i = 0; i < fullCircles; ++i) {\n ctx.stroke();\n }\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle, startAngle + TAU);\n for (i = 0; i < fullCircles; ++i) {\n ctx.stroke();\n }\n}\nfunction drawBorder(ctx, element, offset, spacing, endAngle) {\n const {options} = element;\n const {borderWidth, borderJoinStyle} = options;\n const inner = options.borderAlign === 'inner';\n if (!borderWidth) {\n return;\n }\n if (inner) {\n ctx.lineWidth = borderWidth * 2;\n ctx.lineJoin = borderJoinStyle || 'round';\n } else {\n ctx.lineWidth = borderWidth;\n ctx.lineJoin = borderJoinStyle || 'bevel';\n }\n if (element.fullCircles) {\n drawFullCircleBorders(ctx, element, inner);\n }\n if (inner) {\n clipArc(ctx, element, endAngle);\n }\n pathArc(ctx, element, offset, spacing, endAngle);\n ctx.stroke();\n}\nclass ArcElement extends Element {\n constructor(cfg) {\n super();\n this.options = undefined;\n this.circumference = undefined;\n this.startAngle = undefined;\n this.endAngle = undefined;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.pixelMargin = 0;\n this.fullCircles = 0;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(chartX, chartY, useFinalPosition) {\n const point = this.getProps(['x', 'y'], useFinalPosition);\n const {angle, distance} = getAngleFromPoint(point, {x: chartX, y: chartY});\n const {startAngle, endAngle, innerRadius, outerRadius, circumference} = this.getProps([\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'circumference'\n ], useFinalPosition);\n const rAdjust = this.options.spacing / 2;\n const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n const betweenAngles = _circumference >= TAU || _angleBetween(angle, startAngle, endAngle);\n const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n return (betweenAngles && withinRadius);\n }\n getCenterPoint(useFinalPosition) {\n const {x, y, startAngle, endAngle, innerRadius, outerRadius} = this.getProps([\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'circumference',\n ], useFinalPosition);\n const {offset, spacing} = this.options;\n const halfAngle = (startAngle + endAngle) / 2;\n const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n return {\n x: x + Math.cos(halfAngle) * halfRadius,\n y: y + Math.sin(halfAngle) * halfRadius\n };\n }\n tooltipPosition(useFinalPosition) {\n return this.getCenterPoint(useFinalPosition);\n }\n draw(ctx) {\n const {options, circumference} = this;\n const offset = (options.offset || 0) / 2;\n const spacing = (options.spacing || 0) / 2;\n this.pixelMargin = (options.borderAlign === 'inner') ? 0.33 : 0;\n this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n return;\n }\n ctx.save();\n let radiusOffset = 0;\n if (offset) {\n radiusOffset = offset / 2;\n const halfAngle = (this.startAngle + this.endAngle) / 2;\n ctx.translate(Math.cos(halfAngle) * radiusOffset, Math.sin(halfAngle) * radiusOffset);\n if (this.circumference >= PI) {\n radiusOffset = offset;\n }\n }\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n const endAngle = drawArc(ctx, this, radiusOffset, spacing);\n drawBorder(ctx, this, radiusOffset, spacing, endAngle);\n ctx.restore();\n }\n}\nArcElement.id = 'arc';\nArcElement.defaults = {\n borderAlign: 'center',\n borderColor: '#fff',\n borderJoinStyle: undefined,\n borderRadius: 0,\n borderWidth: 2,\n offset: 0,\n spacing: 0,\n angle: undefined,\n};\nArcElement.defaultRoutes = {\n backgroundColor: 'backgroundColor'\n};\n\nfunction setStyle(ctx, options, style = options) {\n ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\nfunction lineTo(ctx, previous, target) {\n ctx.lineTo(target.x, target.y);\n}\nfunction getLineMethod(options) {\n if (options.stepped) {\n return _steppedLineTo;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierCurveTo;\n }\n return lineTo;\n}\nfunction pathVars(points, segment, params = {}) {\n const count = points.length;\n const {start: paramsStart = 0, end: paramsEnd = count - 1} = params;\n const {start: segmentStart, end: segmentEnd} = segment;\n const start = Math.max(paramsStart, segmentStart);\n const end = Math.min(paramsEnd, segmentEnd);\n const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n return {\n count,\n start,\n loop: segment.loop,\n ilen: end < start && !outside ? count + end - start : end - start\n };\n}\nfunction pathSegment(ctx, line, segment, params) {\n const {points, options} = line;\n const {count, start, loop, ilen} = pathVars(points, segment, params);\n const lineMethod = getLineMethod(options);\n let {move = true, reverse} = params || {};\n let i, point, prev;\n for (i = 0; i <= ilen; ++i) {\n point = points[(start + (reverse ? ilen - i : i)) % count];\n if (point.skip) {\n continue;\n } else if (move) {\n ctx.moveTo(point.x, point.y);\n move = false;\n } else {\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n prev = point;\n }\n if (loop) {\n point = points[(start + (reverse ? ilen : 0)) % count];\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n return !!loop;\n}\nfunction fastPathSegment(ctx, line, segment, params) {\n const points = line.points;\n const {count, start, ilen} = pathVars(points, segment, params);\n const {move = true, reverse} = params || {};\n let avgX = 0;\n let countX = 0;\n let i, point, prevX, minY, maxY, lastY;\n const pointIndex = (index) => (start + (reverse ? ilen - index : index)) % count;\n const drawX = () => {\n if (minY !== maxY) {\n ctx.lineTo(avgX, maxY);\n ctx.lineTo(avgX, minY);\n ctx.lineTo(avgX, lastY);\n }\n };\n if (move) {\n point = points[pointIndex(0)];\n ctx.moveTo(point.x, point.y);\n }\n for (i = 0; i <= ilen; ++i) {\n point = points[pointIndex(i)];\n if (point.skip) {\n continue;\n }\n const x = point.x;\n const y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n } else if (y > maxY) {\n maxY = y;\n }\n avgX = (countX * avgX + x) / ++countX;\n } else {\n drawX();\n ctx.lineTo(x, y);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n }\n lastY = y;\n }\n drawX();\n}\nfunction _getSegmentMethod(line) {\n const opts = line.options;\n const borderDash = opts.borderDash && opts.borderDash.length;\n const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n return useFastPath ? fastPathSegment : pathSegment;\n}\nfunction _getInterpolationMethod(options) {\n if (options.stepped) {\n return _steppedInterpolation;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierInterpolation;\n }\n return _pointInLine;\n}\nfunction strokePathWithCache(ctx, line, start, count) {\n let path = line._path;\n if (!path) {\n path = line._path = new Path2D();\n if (line.path(path, start, count)) {\n path.closePath();\n }\n }\n setStyle(ctx, line.options);\n ctx.stroke(path);\n}\nfunction strokePathDirect(ctx, line, start, count) {\n const {segments, options} = line;\n const segmentMethod = _getSegmentMethod(line);\n for (const segment of segments) {\n setStyle(ctx, options, segment.style);\n ctx.beginPath();\n if (segmentMethod(ctx, line, segment, {start, end: start + count - 1})) {\n ctx.closePath();\n }\n ctx.stroke();\n }\n}\nconst usePath2D = typeof Path2D === 'function';\nfunction draw(ctx, line, start, count) {\n if (usePath2D && !line.options.segment) {\n strokePathWithCache(ctx, line, start, count);\n } else {\n strokePathDirect(ctx, line, start, count);\n }\n}\nclass LineElement extends Element {\n constructor(cfg) {\n super();\n this.animated = true;\n this.options = undefined;\n this._chart = undefined;\n this._loop = undefined;\n this._fullLoop = undefined;\n this._path = undefined;\n this._points = undefined;\n this._segments = undefined;\n this._decimated = false;\n this._pointsUpdated = false;\n this._datasetIndex = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n updateControlPoints(chartArea, indexAxis) {\n const options = this.options;\n if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n const loop = options.spanGaps ? this._loop : this._fullLoop;\n _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n this._pointsUpdated = true;\n }\n }\n set points(points) {\n this._points = points;\n delete this._segments;\n delete this._path;\n this._pointsUpdated = false;\n }\n get points() {\n return this._points;\n }\n get segments() {\n return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n }\n first() {\n const segments = this.segments;\n const points = this.points;\n return segments.length && points[segments[0].start];\n }\n last() {\n const segments = this.segments;\n const points = this.points;\n const count = segments.length;\n return count && points[segments[count - 1].end];\n }\n interpolate(point, property) {\n const options = this.options;\n const value = point[property];\n const points = this.points;\n const segments = _boundSegments(this, {property, start: value, end: value});\n if (!segments.length) {\n return;\n }\n const result = [];\n const _interpolate = _getInterpolationMethod(options);\n let i, ilen;\n for (i = 0, ilen = segments.length; i < ilen; ++i) {\n const {start, end} = segments[i];\n const p1 = points[start];\n const p2 = points[end];\n if (p1 === p2) {\n result.push(p1);\n continue;\n }\n const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n const interpolated = _interpolate(p1, p2, t, options.stepped);\n interpolated[property] = point[property];\n result.push(interpolated);\n }\n return result.length === 1 ? result[0] : result;\n }\n pathSegment(ctx, segment, params) {\n const segmentMethod = _getSegmentMethod(this);\n return segmentMethod(ctx, this, segment, params);\n }\n path(ctx, start, count) {\n const segments = this.segments;\n const segmentMethod = _getSegmentMethod(this);\n let loop = this._loop;\n start = start || 0;\n count = count || (this.points.length - start);\n for (const segment of segments) {\n loop &= segmentMethod(ctx, this, segment, {start, end: start + count - 1});\n }\n return !!loop;\n }\n draw(ctx, chartArea, start, count) {\n const options = this.options || {};\n const points = this.points || [];\n if (points.length && options.borderWidth) {\n ctx.save();\n draw(ctx, this, start, count);\n ctx.restore();\n }\n if (this.animated) {\n this._pointsUpdated = false;\n this._path = undefined;\n }\n }\n}\nLineElement.id = 'line';\nLineElement.defaults = {\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderWidth: 3,\n capBezierPoints: true,\n cubicInterpolationMode: 'default',\n fill: false,\n spanGaps: false,\n stepped: false,\n tension: 0,\n};\nLineElement.defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n};\nLineElement.descriptors = {\n _scriptable: true,\n _indexable: (name) => name !== 'borderDash' && name !== 'fill',\n};\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n const options = el.options;\n const {[axis]: value} = el.getProps([axis], useFinalPosition);\n return (Math.abs(pos - value) < options.radius + options.hitRadius);\n}\nclass PointElement extends Element {\n constructor(cfg) {\n super();\n this.options = undefined;\n this.parsed = undefined;\n this.skip = undefined;\n this.stop = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n const options = this.options;\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return ((Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2)) < Math.pow(options.hitRadius + options.radius, 2));\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange$1(this, mouseX, 'x', useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange$1(this, mouseY, 'y', useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return {x, y};\n }\n size(options) {\n options = options || this.options || {};\n let radius = options.radius || 0;\n radius = Math.max(radius, radius && options.hoverRadius || 0);\n const borderWidth = radius && options.borderWidth || 0;\n return (radius + borderWidth) * 2;\n }\n draw(ctx, area) {\n const options = this.options;\n if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n return;\n }\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.fillStyle = options.backgroundColor;\n drawPoint(ctx, options, this.x, this.y);\n }\n getRange() {\n const options = this.options || {};\n return options.radius + options.hitRadius;\n }\n}\nPointElement.id = 'point';\nPointElement.defaults = {\n borderWidth: 1,\n hitRadius: 1,\n hoverBorderWidth: 1,\n hoverRadius: 4,\n pointStyle: 'circle',\n radius: 3,\n rotation: 0\n};\nPointElement.defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n};\n\nfunction getBarBounds(bar, useFinalPosition) {\n const {x, y, base, width, height} = bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition);\n let left, right, top, bottom, half;\n if (bar.horizontal) {\n half = height / 2;\n left = Math.min(x, base);\n right = Math.max(x, base);\n top = y - half;\n bottom = y + half;\n } else {\n half = width / 2;\n left = x - half;\n right = x + half;\n top = Math.min(y, base);\n bottom = Math.max(y, base);\n }\n return {left, top, right, bottom};\n}\nfunction skipOrLimit(skip, value, min, max) {\n return skip ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n const value = bar.options.borderWidth;\n const skip = bar.borderSkipped;\n const o = toTRBL(value);\n return {\n t: skipOrLimit(skip.top, o.top, 0, maxH),\n r: skipOrLimit(skip.right, o.right, 0, maxW),\n b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n l: skipOrLimit(skip.left, o.left, 0, maxW)\n };\n}\nfunction parseBorderRadius(bar, maxW, maxH) {\n const {enableBorderRadius} = bar.getProps(['enableBorderRadius']);\n const value = bar.options.borderRadius;\n const o = toTRBLCorners(value);\n const maxR = Math.min(maxW, maxH);\n const skip = bar.borderSkipped;\n const enableBorder = enableBorderRadius || isObject(value);\n return {\n topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n };\n}\nfunction boundingRects(bar) {\n const bounds = getBarBounds(bar);\n const width = bounds.right - bounds.left;\n const height = bounds.bottom - bounds.top;\n const border = parseBorderWidth(bar, width / 2, height / 2);\n const radius = parseBorderRadius(bar, width / 2, height / 2);\n return {\n outer: {\n x: bounds.left,\n y: bounds.top,\n w: width,\n h: height,\n radius\n },\n inner: {\n x: bounds.left + border.l,\n y: bounds.top + border.t,\n w: width - border.l - border.r,\n h: height - border.t - border.b,\n radius: {\n topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r)),\n }\n }\n };\n}\nfunction inRange(bar, x, y, useFinalPosition) {\n const skipX = x === null;\n const skipY = y === null;\n const skipBoth = skipX && skipY;\n const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n return bounds\n\t\t&& (skipX || _isBetween(x, bounds.left, bounds.right))\n\t\t&& (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\nfunction addNormalRectPath(ctx, rect) {\n ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\nfunction inflateRect(rect, amount, refRect = {}) {\n const x = rect.x !== refRect.x ? -amount : 0;\n const y = rect.y !== refRect.y ? -amount : 0;\n const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n return {\n x: rect.x + x,\n y: rect.y + y,\n w: rect.w + w,\n h: rect.h + h,\n radius: rect.radius\n };\n}\nclass BarElement extends Element {\n constructor(cfg) {\n super();\n this.options = undefined;\n this.horizontal = undefined;\n this.base = undefined;\n this.width = undefined;\n this.height = undefined;\n this.inflateAmount = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n draw(ctx) {\n const {inflateAmount, options: {borderColor, backgroundColor}} = this;\n const {inner, outer} = boundingRects(this);\n const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n ctx.save();\n if (outer.w !== inner.w || outer.h !== inner.h) {\n ctx.beginPath();\n addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n ctx.clip();\n addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n ctx.fillStyle = borderColor;\n ctx.fill('evenodd');\n }\n ctx.beginPath();\n addRectPath(ctx, inflateRect(inner, inflateAmount));\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n return inRange(this, mouseX, mouseY, useFinalPosition);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange(this, mouseX, null, useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange(this, null, mouseY, useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const {x, y, base, horizontal} = this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition);\n return {\n x: horizontal ? (x + base) / 2 : x,\n y: horizontal ? y : (y + base) / 2\n };\n }\n getRange(axis) {\n return axis === 'x' ? this.width / 2 : this.height / 2;\n }\n}\nBarElement.id = 'bar';\nBarElement.defaults = {\n borderSkipped: 'start',\n borderWidth: 0,\n borderRadius: 0,\n inflateAmount: 'auto',\n pointStyle: undefined\n};\nBarElement.defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n};\n\nvar elements = /*#__PURE__*/Object.freeze({\n__proto__: null,\nArcElement: ArcElement,\nLineElement: LineElement,\nPointElement: PointElement,\nBarElement: BarElement\n});\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n const samples = options.samples || availableWidth;\n if (samples >= count) {\n return data.slice(start, start + count);\n }\n const decimated = [];\n const bucketWidth = (count - 2) / (samples - 2);\n let sampledIndex = 0;\n const endIndex = start + count - 1;\n let a = start;\n let i, maxAreaPoint, maxArea, area, nextA;\n decimated[sampledIndex++] = data[a];\n for (i = 0; i < samples - 2; i++) {\n let avgX = 0;\n let avgY = 0;\n let j;\n const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n const avgRangeLength = avgRangeEnd - avgRangeStart;\n for (j = avgRangeStart; j < avgRangeEnd; j++) {\n avgX += data[j].x;\n avgY += data[j].y;\n }\n avgX /= avgRangeLength;\n avgY /= avgRangeLength;\n const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n const {x: pointAx, y: pointAy} = data[a];\n maxArea = area = -1;\n for (j = rangeOffs; j < rangeTo; j++) {\n area = 0.5 * Math.abs(\n (pointAx - avgX) * (data[j].y - pointAy) -\n (pointAx - data[j].x) * (avgY - pointAy)\n );\n if (area > maxArea) {\n maxArea = area;\n maxAreaPoint = data[j];\n nextA = j;\n }\n }\n decimated[sampledIndex++] = maxAreaPoint;\n a = nextA;\n }\n decimated[sampledIndex++] = data[endIndex];\n return decimated;\n}\nfunction minMaxDecimation(data, start, count, availableWidth) {\n let avgX = 0;\n let countX = 0;\n let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n const decimated = [];\n const endIndex = start + count - 1;\n const xMin = data[start].x;\n const xMax = data[endIndex].x;\n const dx = xMax - xMin;\n for (i = start; i < start + count; ++i) {\n point = data[i];\n x = (point.x - xMin) / dx * availableWidth;\n y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n minIndex = i;\n } else if (y > maxY) {\n maxY = y;\n maxIndex = i;\n }\n avgX = (countX * avgX + point.x) / ++countX;\n } else {\n const lastIndex = i - 1;\n if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n const intermediateIndex1 = Math.min(minIndex, maxIndex);\n const intermediateIndex2 = Math.max(minIndex, maxIndex);\n if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex1],\n x: avgX,\n });\n }\n if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex2],\n x: avgX\n });\n }\n }\n if (i > 0 && lastIndex !== startIndex) {\n decimated.push(data[lastIndex]);\n }\n decimated.push(point);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n minIndex = maxIndex = startIndex = i;\n }\n }\n return decimated;\n}\nfunction cleanDecimatedDataset(dataset) {\n if (dataset._decimated) {\n const data = dataset._data;\n delete dataset._decimated;\n delete dataset._data;\n Object.defineProperty(dataset, 'data', {value: data});\n }\n}\nfunction cleanDecimatedData(chart) {\n chart.data.datasets.forEach((dataset) => {\n cleanDecimatedDataset(dataset);\n });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n const pointCount = points.length;\n let start = 0;\n let count;\n const {iScale} = meta;\n const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n return {start, count};\n}\nvar plugin_decimation = {\n id: 'decimation',\n defaults: {\n algorithm: 'min-max',\n enabled: false,\n },\n beforeElementsUpdate: (chart, args, options) => {\n if (!options.enabled) {\n cleanDecimatedData(chart);\n return;\n }\n const availableWidth = chart.width;\n chart.data.datasets.forEach((dataset, datasetIndex) => {\n const {_data, indexAxis} = dataset;\n const meta = chart.getDatasetMeta(datasetIndex);\n const data = _data || dataset.data;\n if (resolve([indexAxis, chart.options.indexAxis]) === 'y') {\n return;\n }\n if (!meta.controller.supportsDecimation) {\n return;\n }\n const xAxis = chart.scales[meta.xAxisID];\n if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n return;\n }\n if (chart.options.parsing) {\n return;\n }\n let {start, count} = getStartAndCountOfVisiblePointsSimplified(meta, data);\n const threshold = options.threshold || 4 * availableWidth;\n if (count <= threshold) {\n cleanDecimatedDataset(dataset);\n return;\n }\n if (isNullOrUndef(_data)) {\n dataset._data = data;\n delete dataset.data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n get: function() {\n return this._decimated;\n },\n set: function(d) {\n this._data = d;\n }\n });\n }\n let decimated;\n switch (options.algorithm) {\n case 'lttb':\n decimated = lttbDecimation(data, start, count, availableWidth, options);\n break;\n case 'min-max':\n decimated = minMaxDecimation(data, start, count, availableWidth);\n break;\n default:\n throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n }\n dataset._decimated = decimated;\n });\n },\n destroy(chart) {\n cleanDecimatedData(chart);\n }\n};\n\nfunction _segments(line, target, property) {\n const segments = line.segments;\n const points = line.points;\n const tpoints = target.points;\n const parts = [];\n for (const segment of segments) {\n let {start, end} = segment;\n end = _findSegmentEnd(start, end, points);\n const bounds = _getBounds(property, points[start], points[end], segment.loop);\n if (!target.segments) {\n parts.push({\n source: segment,\n target: bounds,\n start: points[start],\n end: points[end]\n });\n continue;\n }\n const targetSegments = _boundSegments(target, bounds);\n for (const tgt of targetSegments) {\n const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n const fillSources = _boundSegment(segment, points, subBounds);\n for (const fillSource of fillSources) {\n parts.push({\n source: fillSource,\n target: tgt,\n start: {\n [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n },\n end: {\n [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n }\n });\n }\n }\n }\n return parts;\n}\nfunction _getBounds(property, first, last, loop) {\n if (loop) {\n return;\n }\n let start = first[property];\n let end = last[property];\n if (property === 'angle') {\n start = _normalizeAngle(start);\n end = _normalizeAngle(end);\n }\n return {property, start, end};\n}\nfunction _pointsFromSegments(boundary, line) {\n const {x = null, y = null} = boundary || {};\n const linePoints = line.points;\n const points = [];\n line.segments.forEach(({start, end}) => {\n end = _findSegmentEnd(start, end, linePoints);\n const first = linePoints[start];\n const last = linePoints[end];\n if (y !== null) {\n points.push({x: first.x, y});\n points.push({x: last.x, y});\n } else if (x !== null) {\n points.push({x, y: first.y});\n points.push({x, y: last.y});\n }\n });\n return points;\n}\nfunction _findSegmentEnd(start, end, points) {\n for (;end > start; end--) {\n const point = points[end];\n if (!isNaN(point.x) && !isNaN(point.y)) {\n break;\n }\n }\n return end;\n}\nfunction _getEdge(a, b, prop, fn) {\n if (a && b) {\n return fn(a[prop], b[prop]);\n }\n return a ? a[prop] : b ? b[prop] : 0;\n}\n\nfunction _createBoundaryLine(boundary, line) {\n let points = [];\n let _loop = false;\n if (isArray(boundary)) {\n _loop = true;\n points = boundary;\n } else {\n points = _pointsFromSegments(boundary, line);\n }\n return points.length ? new LineElement({\n points,\n options: {tension: 0},\n _loop,\n _fullLoop: _loop\n }) : null;\n}\n\nfunction _resolveTarget(sources, index, propagate) {\n const source = sources[index];\n let fill = source.fill;\n const visited = [index];\n let target;\n if (!propagate) {\n return fill;\n }\n while (fill !== false && visited.indexOf(fill) === -1) {\n if (!isNumberFinite(fill)) {\n return fill;\n }\n target = sources[fill];\n if (!target) {\n return false;\n }\n if (target.visible) {\n return fill;\n }\n visited.push(fill);\n fill = target.fill;\n }\n return false;\n}\nfunction _decodeFill(line, index, count) {\n const fill = parseFillOption(line);\n if (isObject(fill)) {\n return isNaN(fill.value) ? false : fill;\n }\n let target = parseFloat(fill);\n if (isNumberFinite(target) && Math.floor(target) === target) {\n return decodeTargetIndex(fill[0], index, target, count);\n }\n return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\nfunction decodeTargetIndex(firstCh, index, target, count) {\n if (firstCh === '-' || firstCh === '+') {\n target = index + target;\n }\n if (target === index || target < 0 || target >= count) {\n return false;\n }\n return target;\n}\nfunction _getTargetPixel(fill, scale) {\n let pixel = null;\n if (fill === 'start') {\n pixel = scale.bottom;\n } else if (fill === 'end') {\n pixel = scale.top;\n } else if (isObject(fill)) {\n pixel = scale.getPixelForValue(fill.value);\n } else if (scale.getBasePixel) {\n pixel = scale.getBasePixel();\n }\n return pixel;\n}\nfunction _getTargetValue(fill, scale, startValue) {\n let value;\n if (fill === 'start') {\n value = startValue;\n } else if (fill === 'end') {\n value = scale.options.reverse ? scale.min : scale.max;\n } else if (isObject(fill)) {\n value = fill.value;\n } else {\n value = scale.getBaseValue();\n }\n return value;\n}\nfunction parseFillOption(line) {\n const options = line.options;\n const fillOption = options.fill;\n let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n if (fill === undefined) {\n fill = !!options.backgroundColor;\n }\n if (fill === false || fill === null) {\n return false;\n }\n if (fill === true) {\n return 'origin';\n }\n return fill;\n}\n\nfunction _buildStackLine(source) {\n const {scale, index, line} = source;\n const points = [];\n const segments = line.segments;\n const sourcePoints = line.points;\n const linesBelow = getLinesBelow(scale, index);\n linesBelow.push(_createBoundaryLine({x: null, y: scale.bottom}, line));\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n for (let j = segment.start; j <= segment.end; j++) {\n addPointsBelow(points, sourcePoints[j], linesBelow);\n }\n }\n return new LineElement({points, options: {}});\n}\nfunction getLinesBelow(scale, index) {\n const below = [];\n const metas = scale.getMatchingVisibleMetas('line');\n for (let i = 0; i < metas.length; i++) {\n const meta = metas[i];\n if (meta.index === index) {\n break;\n }\n if (!meta.hidden) {\n below.unshift(meta.dataset);\n }\n }\n return below;\n}\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n const postponed = [];\n for (let j = 0; j < linesBelow.length; j++) {\n const line = linesBelow[j];\n const {first, last, point} = findPoint(line, sourcePoint, 'x');\n if (!point || (first && last)) {\n continue;\n }\n if (first) {\n postponed.unshift(point);\n } else {\n points.push(point);\n if (!last) {\n break;\n }\n }\n }\n points.push(...postponed);\n}\nfunction findPoint(line, sourcePoint, property) {\n const point = line.interpolate(sourcePoint, property);\n if (!point) {\n return {};\n }\n const pointValue = point[property];\n const segments = line.segments;\n const linePoints = line.points;\n let first = false;\n let last = false;\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n const firstValue = linePoints[segment.start][property];\n const lastValue = linePoints[segment.end][property];\n if (_isBetween(pointValue, firstValue, lastValue)) {\n first = pointValue === firstValue;\n last = pointValue === lastValue;\n break;\n }\n }\n return {first, last, point};\n}\n\nclass simpleArc {\n constructor(opts) {\n this.x = opts.x;\n this.y = opts.y;\n this.radius = opts.radius;\n }\n pathSegment(ctx, bounds, opts) {\n const {x, y, radius} = this;\n bounds = bounds || {start: 0, end: TAU};\n ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n return !opts.bounds;\n }\n interpolate(point) {\n const {x, y, radius} = this;\n const angle = point.angle;\n return {\n x: x + Math.cos(angle) * radius,\n y: y + Math.sin(angle) * radius,\n angle\n };\n }\n}\n\nfunction _getTarget(source) {\n const {chart, fill, line} = source;\n if (isNumberFinite(fill)) {\n return getLineByIndex(chart, fill);\n }\n if (fill === 'stack') {\n return _buildStackLine(source);\n }\n if (fill === 'shape') {\n return true;\n }\n const boundary = computeBoundary(source);\n if (boundary instanceof simpleArc) {\n return boundary;\n }\n return _createBoundaryLine(boundary, line);\n}\nfunction getLineByIndex(chart, index) {\n const meta = chart.getDatasetMeta(index);\n const visible = meta && chart.isDatasetVisible(index);\n return visible ? meta.dataset : null;\n}\nfunction computeBoundary(source) {\n const scale = source.scale || {};\n if (scale.getPointPositionForValue) {\n return computeCircularBoundary(source);\n }\n return computeLinearBoundary(source);\n}\nfunction computeLinearBoundary(source) {\n const {scale = {}, fill} = source;\n const pixel = _getTargetPixel(fill, scale);\n if (isNumberFinite(pixel)) {\n const horizontal = scale.isHorizontal();\n return {\n x: horizontal ? pixel : null,\n y: horizontal ? null : pixel\n };\n }\n return null;\n}\nfunction computeCircularBoundary(source) {\n const {scale, fill} = source;\n const options = scale.options;\n const length = scale.getLabels().length;\n const start = options.reverse ? scale.max : scale.min;\n const value = _getTargetValue(fill, scale, start);\n const target = [];\n if (options.grid.circular) {\n const center = scale.getPointPositionForValue(0, start);\n return new simpleArc({\n x: center.x,\n y: center.y,\n radius: scale.getDistanceFromCenterForValue(value)\n });\n }\n for (let i = 0; i < length; ++i) {\n target.push(scale.getPointPositionForValue(i, value));\n }\n return target;\n}\n\nfunction _drawfill(ctx, source, area) {\n const target = _getTarget(source);\n const {line, scale, axis} = source;\n const lineOpts = line.options;\n const fillOption = lineOpts.fill;\n const color = lineOpts.backgroundColor;\n const {above = color, below = color} = fillOption || {};\n if (target && line.points.length) {\n clipArea(ctx, area);\n doFill(ctx, {line, target, above, below, area, scale, axis});\n unclipArea(ctx);\n }\n}\nfunction doFill(ctx, cfg) {\n const {line, target, above, below, area, scale} = cfg;\n const property = line._loop ? 'angle' : cfg.axis;\n ctx.save();\n if (property === 'x' && below !== above) {\n clipVertical(ctx, target, area.top);\n fill(ctx, {line, target, color: above, scale, property});\n ctx.restore();\n ctx.save();\n clipVertical(ctx, target, area.bottom);\n }\n fill(ctx, {line, target, color: below, scale, property});\n ctx.restore();\n}\nfunction clipVertical(ctx, target, clipY) {\n const {segments, points} = target;\n let first = true;\n let lineLoop = false;\n ctx.beginPath();\n for (const segment of segments) {\n const {start, end} = segment;\n const firstPoint = points[start];\n const lastPoint = points[_findSegmentEnd(start, end, points)];\n if (first) {\n ctx.moveTo(firstPoint.x, firstPoint.y);\n first = false;\n } else {\n ctx.lineTo(firstPoint.x, clipY);\n ctx.lineTo(firstPoint.x, firstPoint.y);\n }\n lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(lastPoint.x, clipY);\n }\n }\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\n}\nfunction fill(ctx, cfg) {\n const {line, target, property, color, scale} = cfg;\n const segments = _segments(line, target, property);\n for (const {source: src, target: tgt, start, end} of segments) {\n const {style: {backgroundColor = color} = {}} = src;\n const notShape = target !== true;\n ctx.save();\n ctx.fillStyle = backgroundColor;\n clipBounds(ctx, scale, notShape && _getBounds(property, start, end));\n ctx.beginPath();\n const lineLoop = !!line.pathSegment(ctx, src);\n let loop;\n if (notShape) {\n if (lineLoop) {\n ctx.closePath();\n } else {\n interpolatedLineTo(ctx, target, end, property);\n }\n const targetLoop = !!target.pathSegment(ctx, tgt, {move: lineLoop, reverse: true});\n loop = lineLoop && targetLoop;\n if (!loop) {\n interpolatedLineTo(ctx, target, start, property);\n }\n }\n ctx.closePath();\n ctx.fill(loop ? 'evenodd' : 'nonzero');\n ctx.restore();\n }\n}\nfunction clipBounds(ctx, scale, bounds) {\n const {top, bottom} = scale.chart.chartArea;\n const {property, start, end} = bounds || {};\n if (property === 'x') {\n ctx.beginPath();\n ctx.rect(start, top, end - start, bottom - top);\n ctx.clip();\n }\n}\nfunction interpolatedLineTo(ctx, target, point, property) {\n const interpolatedPoint = target.interpolate(point, property);\n if (interpolatedPoint) {\n ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n }\n}\n\nvar index = {\n id: 'filler',\n afterDatasetsUpdate(chart, _args, options) {\n const count = (chart.data.datasets || []).length;\n const sources = [];\n let meta, i, line, source;\n for (i = 0; i < count; ++i) {\n meta = chart.getDatasetMeta(i);\n line = meta.dataset;\n source = null;\n if (line && line.options && line instanceof LineElement) {\n source = {\n visible: chart.isDatasetVisible(i),\n index: i,\n fill: _decodeFill(line, i, count),\n chart,\n axis: meta.controller.options.indexAxis,\n scale: meta.vScale,\n line,\n };\n }\n meta.$filler = source;\n sources.push(source);\n }\n for (i = 0; i < count; ++i) {\n source = sources[i];\n if (!source || source.fill === false) {\n continue;\n }\n source.fill = _resolveTarget(sources, i, options.propagate);\n }\n },\n beforeDraw(chart, _args, options) {\n const draw = options.drawTime === 'beforeDraw';\n const metasets = chart.getSortedVisibleDatasetMetas();\n const area = chart.chartArea;\n for (let i = metasets.length - 1; i >= 0; --i) {\n const source = metasets[i].$filler;\n if (!source) {\n continue;\n }\n source.line.updateControlPoints(area, source.axis);\n if (draw) {\n _drawfill(chart.ctx, source, area);\n }\n }\n },\n beforeDatasetsDraw(chart, _args, options) {\n if (options.drawTime !== 'beforeDatasetsDraw') {\n return;\n }\n const metasets = chart.getSortedVisibleDatasetMetas();\n for (let i = metasets.length - 1; i >= 0; --i) {\n const source = metasets[i].$filler;\n if (source) {\n _drawfill(chart.ctx, source, chart.chartArea);\n }\n }\n },\n beforeDatasetDraw(chart, args, options) {\n const source = args.meta.$filler;\n if (!source || source.fill === false || options.drawTime !== 'beforeDatasetDraw') {\n return;\n }\n _drawfill(chart.ctx, source, chart.chartArea);\n },\n defaults: {\n propagate: true,\n drawTime: 'beforeDatasetDraw'\n }\n};\n\nconst getBoxSize = (labelOpts, fontSize) => {\n let {boxHeight = fontSize, boxWidth = fontSize} = labelOpts;\n if (labelOpts.usePointStyle) {\n boxHeight = Math.min(boxHeight, fontSize);\n boxWidth = Math.min(boxWidth, fontSize);\n }\n return {\n boxWidth,\n boxHeight,\n itemHeight: Math.max(fontSize, boxHeight)\n };\n};\nconst itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends Element {\n constructor(config) {\n super();\n this._added = false;\n this.legendHitBoxes = [];\n this._hoveredItem = null;\n this.doughnutMode = false;\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this.legendItems = undefined;\n this.columnSizes = undefined;\n this.lineWidths = undefined;\n this.maxHeight = undefined;\n this.maxWidth = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.height = undefined;\n this.width = undefined;\n this._margins = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight, margins) {\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins;\n this.setDimensions();\n this.buildLabels();\n this.fit();\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = this._margins.left;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = this._margins.top;\n this.bottom = this.height;\n }\n }\n buildLabels() {\n const labelOpts = this.options.labels || {};\n let legendItems = callback(labelOpts.generateLabels, [this.chart], this) || [];\n if (labelOpts.filter) {\n legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data));\n }\n if (labelOpts.sort) {\n legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));\n }\n if (this.options.reverse) {\n legendItems.reverse();\n }\n this.legendItems = legendItems;\n }\n fit() {\n const {options, ctx} = this;\n if (!options.display) {\n this.width = this.height = 0;\n return;\n }\n const labelOpts = options.labels;\n const labelFont = toFont(labelOpts.font);\n const fontSize = labelFont.size;\n const titleHeight = this._computeTitleHeight();\n const {boxWidth, itemHeight} = getBoxSize(labelOpts, fontSize);\n let width, height;\n ctx.font = labelFont.string;\n if (this.isHorizontal()) {\n width = this.maxWidth;\n height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n } else {\n height = this.maxHeight;\n width = this._fitCols(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n }\n this.width = Math.min(width, options.maxWidth || this.maxWidth);\n this.height = Math.min(height, options.maxHeight || this.maxHeight);\n }\n _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n const {ctx, maxWidth, options: {labels: {padding}}} = this;\n const hitboxes = this.legendHitBoxes = [];\n const lineWidths = this.lineWidths = [0];\n const lineHeight = itemHeight + padding;\n let totalHeight = titleHeight;\n ctx.textAlign = 'left';\n ctx.textBaseline = 'middle';\n let row = -1;\n let top = -lineHeight;\n this.legendItems.forEach((legendItem, i) => {\n const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n totalHeight += lineHeight;\n lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n top += lineHeight;\n row++;\n }\n hitboxes[i] = {left: 0, top, row, width: itemWidth, height: itemHeight};\n lineWidths[lineWidths.length - 1] += itemWidth + padding;\n });\n return totalHeight;\n }\n _fitCols(titleHeight, fontSize, boxWidth, itemHeight) {\n const {ctx, maxHeight, options: {labels: {padding}}} = this;\n const hitboxes = this.legendHitBoxes = [];\n const columnSizes = this.columnSizes = [];\n const heightLimit = maxHeight - titleHeight;\n let totalWidth = padding;\n let currentColWidth = 0;\n let currentColHeight = 0;\n let left = 0;\n let col = 0;\n this.legendItems.forEach((legendItem, i) => {\n const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n totalWidth += currentColWidth + padding;\n columnSizes.push({width: currentColWidth, height: currentColHeight});\n left += currentColWidth + padding;\n col++;\n currentColWidth = currentColHeight = 0;\n }\n hitboxes[i] = {left, top: currentColHeight, col, width: itemWidth, height: itemHeight};\n currentColWidth = Math.max(currentColWidth, itemWidth);\n currentColHeight += itemHeight + padding;\n });\n totalWidth += currentColWidth;\n columnSizes.push({width: currentColWidth, height: currentColHeight});\n return totalWidth;\n }\n adjustHitBoxes() {\n if (!this.options.display) {\n return;\n }\n const titleHeight = this._computeTitleHeight();\n const {legendHitBoxes: hitboxes, options: {align, labels: {padding}, rtl}} = this;\n const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n if (this.isHorizontal()) {\n let row = 0;\n let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n for (const hitbox of hitboxes) {\n if (row !== hitbox.row) {\n row = hitbox.row;\n left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n }\n hitbox.top += this.top + titleHeight + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n left += hitbox.width + padding;\n }\n } else {\n let col = 0;\n let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n for (const hitbox of hitboxes) {\n if (hitbox.col !== col) {\n col = hitbox.col;\n top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n }\n hitbox.top = top;\n hitbox.left += this.left + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n top += hitbox.height + padding;\n }\n }\n }\n isHorizontal() {\n return this.options.position === 'top' || this.options.position === 'bottom';\n }\n draw() {\n if (this.options.display) {\n const ctx = this.ctx;\n clipArea(ctx, this);\n this._draw();\n unclipArea(ctx);\n }\n }\n _draw() {\n const {options: opts, columnSizes, lineWidths, ctx} = this;\n const {align, labels: labelOpts} = opts;\n const defaultColor = defaults.color;\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const labelFont = toFont(labelOpts.font);\n const {color: fontColor, padding} = labelOpts;\n const fontSize = labelFont.size;\n const halfFontSize = fontSize / 2;\n let cursor;\n this.drawTitle();\n ctx.textAlign = rtlHelper.textAlign('left');\n ctx.textBaseline = 'middle';\n ctx.lineWidth = 0.5;\n ctx.font = labelFont.string;\n const {boxWidth, boxHeight, itemHeight} = getBoxSize(labelOpts, fontSize);\n const drawLegendBox = function(x, y, legendItem) {\n if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n return;\n }\n ctx.save();\n const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n if (labelOpts.usePointStyle) {\n const drawOptions = {\n radius: boxWidth * Math.SQRT2 / 2,\n pointStyle: legendItem.pointStyle,\n rotation: legendItem.rotation,\n borderWidth: lineWidth\n };\n const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n const centerY = y + halfFontSize;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n const borderRadius = toTRBLCorners(legendItem.borderRadius);\n ctx.beginPath();\n if (Object.values(borderRadius).some(v => v !== 0)) {\n addRoundedRectPath(ctx, {\n x: xBoxLeft,\n y: yBoxTop,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius,\n });\n } else {\n ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n }\n ctx.fill();\n if (lineWidth !== 0) {\n ctx.stroke();\n }\n }\n ctx.restore();\n };\n const fillText = function(x, y, legendItem) {\n renderText(ctx, legendItem.text, x, y + (itemHeight / 2), labelFont, {\n strikethrough: legendItem.hidden,\n textAlign: rtlHelper.textAlign(legendItem.textAlign)\n });\n };\n const isHorizontal = this.isHorizontal();\n const titleHeight = this._computeTitleHeight();\n if (isHorizontal) {\n cursor = {\n x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n y: this.top + padding + titleHeight,\n line: 0\n };\n } else {\n cursor = {\n x: this.left + padding,\n y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n line: 0\n };\n }\n overrideTextDirection(this.ctx, opts.textDirection);\n const lineHeight = itemHeight + padding;\n this.legendItems.forEach((legendItem, i) => {\n ctx.strokeStyle = legendItem.fontColor || fontColor;\n ctx.fillStyle = legendItem.fontColor || fontColor;\n const textWidth = ctx.measureText(legendItem.text).width;\n const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n const width = boxWidth + halfFontSize + textWidth;\n let x = cursor.x;\n let y = cursor.y;\n rtlHelper.setWidth(this.width);\n if (isHorizontal) {\n if (i > 0 && x + width + padding > this.right) {\n y = cursor.y += lineHeight;\n cursor.line++;\n x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n }\n } else if (i > 0 && y + lineHeight > this.bottom) {\n x = cursor.x = x + columnSizes[cursor.line].width + padding;\n cursor.line++;\n y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n }\n const realX = rtlHelper.x(x);\n drawLegendBox(realX, y, legendItem);\n x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n fillText(rtlHelper.x(x), y, legendItem);\n if (isHorizontal) {\n cursor.x += width + padding;\n } else {\n cursor.y += lineHeight;\n }\n });\n restoreTextDirection(this.ctx, opts.textDirection);\n }\n drawTitle() {\n const opts = this.options;\n const titleOpts = opts.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n if (!titleOpts.display) {\n return;\n }\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const ctx = this.ctx;\n const position = titleOpts.position;\n const halfFontSize = titleFont.size / 2;\n const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n let y;\n let left = this.left;\n let maxWidth = this.width;\n if (this.isHorizontal()) {\n maxWidth = Math.max(...this.lineWidths);\n y = this.top + topPaddingPlusHalfFontSize;\n left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n } else {\n const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);\n y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n }\n const x = _alignStartEnd(position, left, left + maxWidth);\n ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n ctx.textBaseline = 'middle';\n ctx.strokeStyle = titleOpts.color;\n ctx.fillStyle = titleOpts.color;\n ctx.font = titleFont.string;\n renderText(ctx, titleOpts.text, x, y, titleFont);\n }\n _computeTitleHeight() {\n const titleOpts = this.options.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n }\n _getLegendItemAt(x, y) {\n let i, hitBox, lh;\n if (_isBetween(x, this.left, this.right)\n && _isBetween(y, this.top, this.bottom)) {\n lh = this.legendHitBoxes;\n for (i = 0; i < lh.length; ++i) {\n hitBox = lh[i];\n if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width)\n && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n return this.legendItems[i];\n }\n }\n }\n return null;\n }\n handleEvent(e) {\n const opts = this.options;\n if (!isListened(e.type, opts)) {\n return;\n }\n const hoveredItem = this._getLegendItemAt(e.x, e.y);\n if (e.type === 'mousemove' || e.type === 'mouseout') {\n const previous = this._hoveredItem;\n const sameItem = itemsEqual(previous, hoveredItem);\n if (previous && !sameItem) {\n callback(opts.onLeave, [e, previous, this], this);\n }\n this._hoveredItem = hoveredItem;\n if (hoveredItem && !sameItem) {\n callback(opts.onHover, [e, hoveredItem, this], this);\n }\n } else if (hoveredItem) {\n callback(opts.onClick, [e, hoveredItem, this], this);\n }\n }\n}\nfunction isListened(type, opts) {\n if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n return true;\n }\n if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n return true;\n }\n return false;\n}\nvar plugin_legend = {\n id: 'legend',\n _element: Legend,\n start(chart, _args, options) {\n const legend = chart.legend = new Legend({ctx: chart.ctx, options, chart});\n layouts.configure(chart, legend, options);\n layouts.addBox(chart, legend);\n },\n stop(chart) {\n layouts.removeBox(chart, chart.legend);\n delete chart.legend;\n },\n beforeUpdate(chart, _args, options) {\n const legend = chart.legend;\n layouts.configure(chart, legend, options);\n legend.options = options;\n },\n afterUpdate(chart) {\n const legend = chart.legend;\n legend.buildLabels();\n legend.adjustHitBoxes();\n },\n afterEvent(chart, args) {\n if (!args.replay) {\n chart.legend.handleEvent(args.event);\n }\n },\n defaults: {\n display: true,\n position: 'top',\n align: 'center',\n fullSize: true,\n reverse: false,\n weight: 1000,\n onClick(e, legendItem, legend) {\n const index = legendItem.datasetIndex;\n const ci = legend.chart;\n if (ci.isDatasetVisible(index)) {\n ci.hide(index);\n legendItem.hidden = true;\n } else {\n ci.show(index);\n legendItem.hidden = false;\n }\n },\n onHover: null,\n onLeave: null,\n labels: {\n color: (ctx) => ctx.chart.options.color,\n boxWidth: 40,\n padding: 10,\n generateLabels(chart) {\n const datasets = chart.data.datasets;\n const {labels: {usePointStyle, pointStyle, textAlign, color}} = chart.legend.options;\n return chart._getSortedDatasetMetas().map((meta) => {\n const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n const borderWidth = toPadding(style.borderWidth);\n return {\n text: datasets[meta.index].label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !meta.visible,\n lineCap: style.borderCapStyle,\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: (borderWidth.width + borderWidth.height) / 4,\n strokeStyle: style.borderColor,\n pointStyle: pointStyle || style.pointStyle,\n rotation: style.rotation,\n textAlign: textAlign || style.textAlign,\n borderRadius: 0,\n datasetIndex: meta.index\n };\n }, this);\n }\n },\n title: {\n color: (ctx) => ctx.chart.options.color,\n display: false,\n position: 'center',\n text: '',\n }\n },\n descriptors: {\n _scriptable: (name) => !name.startsWith('on'),\n labels: {\n _scriptable: (name) => !['generateLabels', 'filter', 'sort'].includes(name),\n }\n },\n};\n\nclass Title extends Element {\n constructor(config) {\n super();\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this._padding = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight) {\n const opts = this.options;\n this.left = 0;\n this.top = 0;\n if (!opts.display) {\n this.width = this.height = this.right = this.bottom = 0;\n return;\n }\n this.width = this.right = maxWidth;\n this.height = this.bottom = maxHeight;\n const lineCount = isArray(opts.text) ? opts.text.length : 1;\n this._padding = toPadding(opts.padding);\n const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n if (this.isHorizontal()) {\n this.height = textSize;\n } else {\n this.width = textSize;\n }\n }\n isHorizontal() {\n const pos = this.options.position;\n return pos === 'top' || pos === 'bottom';\n }\n _drawArgs(offset) {\n const {top, left, bottom, right, options} = this;\n const align = options.align;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n if (this.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n titleY = top + offset;\n maxWidth = right - left;\n } else {\n if (options.position === 'left') {\n titleX = left + offset;\n titleY = _alignStartEnd(align, bottom, top);\n rotation = PI * -0.5;\n } else {\n titleX = right - offset;\n titleY = _alignStartEnd(align, top, bottom);\n rotation = PI * 0.5;\n }\n maxWidth = bottom - top;\n }\n return {titleX, titleY, maxWidth, rotation};\n }\n draw() {\n const ctx = this.ctx;\n const opts = this.options;\n if (!opts.display) {\n return;\n }\n const fontOpts = toFont(opts.font);\n const lineHeight = fontOpts.lineHeight;\n const offset = lineHeight / 2 + this._padding.top;\n const {titleX, titleY, maxWidth, rotation} = this._drawArgs(offset);\n renderText(ctx, opts.text, 0, 0, fontOpts, {\n color: opts.color,\n maxWidth,\n rotation,\n textAlign: _toLeftRightCenter(opts.align),\n textBaseline: 'middle',\n translation: [titleX, titleY],\n });\n }\n}\nfunction createTitle(chart, titleOpts) {\n const title = new Title({\n ctx: chart.ctx,\n options: titleOpts,\n chart\n });\n layouts.configure(chart, title, titleOpts);\n layouts.addBox(chart, title);\n chart.titleBlock = title;\n}\nvar plugin_title = {\n id: 'title',\n _element: Title,\n start(chart, _args, options) {\n createTitle(chart, options);\n },\n stop(chart) {\n const titleBlock = chart.titleBlock;\n layouts.removeBox(chart, titleBlock);\n delete chart.titleBlock;\n },\n beforeUpdate(chart, _args, options) {\n const title = chart.titleBlock;\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'bold',\n },\n fullSize: true,\n padding: 10,\n position: 'top',\n text: '',\n weight: 2000\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false,\n },\n};\n\nconst map = new WeakMap();\nvar plugin_subtitle = {\n id: 'subtitle',\n start(chart, _args, options) {\n const title = new Title({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, title, options);\n layouts.addBox(chart, title);\n map.set(chart, title);\n },\n stop(chart) {\n layouts.removeBox(chart, map.get(chart));\n map.delete(chart);\n },\n beforeUpdate(chart, _args, options) {\n const title = map.get(chart);\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'normal',\n },\n fullSize: true,\n padding: 0,\n position: 'top',\n text: '',\n weight: 1500\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false,\n },\n};\n\nconst positioners = {\n average(items) {\n if (!items.length) {\n return false;\n }\n let i, len;\n let x = 0;\n let y = 0;\n let count = 0;\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const pos = el.tooltipPosition();\n x += pos.x;\n y += pos.y;\n ++count;\n }\n }\n return {\n x: x / count,\n y: y / count\n };\n },\n nearest(items, eventPosition) {\n if (!items.length) {\n return false;\n }\n let x = eventPosition.x;\n let y = eventPosition.y;\n let minDistance = Number.POSITIVE_INFINITY;\n let i, len, nearestElement;\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const center = el.getCenterPoint();\n const d = distanceBetweenPoints(eventPosition, center);\n if (d < minDistance) {\n minDistance = d;\n nearestElement = el;\n }\n }\n }\n if (nearestElement) {\n const tp = nearestElement.tooltipPosition();\n x = tp.x;\n y = tp.y;\n }\n return {\n x,\n y\n };\n }\n};\nfunction pushOrConcat(base, toPush) {\n if (toPush) {\n if (isArray(toPush)) {\n Array.prototype.push.apply(base, toPush);\n } else {\n base.push(toPush);\n }\n }\n return base;\n}\nfunction splitNewlines(str) {\n if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n return str.split('\\n');\n }\n return str;\n}\nfunction createTooltipItem(chart, item) {\n const {element, datasetIndex, index} = item;\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n const {label, value} = controller.getLabelAndValue(index);\n return {\n chart,\n label,\n parsed: controller.getParsed(index),\n raw: chart.data.datasets[datasetIndex].data[index],\n formattedValue: value,\n dataset: controller.getDataset(),\n dataIndex: index,\n datasetIndex,\n element\n };\n}\nfunction getTooltipSize(tooltip, options) {\n const ctx = tooltip.chart.ctx;\n const {body, footer, title} = tooltip;\n const {boxWidth, boxHeight} = options;\n const bodyFont = toFont(options.bodyFont);\n const titleFont = toFont(options.titleFont);\n const footerFont = toFont(options.footerFont);\n const titleLineCount = title.length;\n const footerLineCount = footer.length;\n const bodyLineItemCount = body.length;\n const padding = toPadding(options.padding);\n let height = padding.height;\n let width = 0;\n let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n if (titleLineCount) {\n height += titleLineCount * titleFont.lineHeight\n\t\t\t+ (titleLineCount - 1) * options.titleSpacing\n\t\t\t+ options.titleMarginBottom;\n }\n if (combinedBodyLength) {\n const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n height += bodyLineItemCount * bodyLineHeight\n\t\t\t+ (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight\n\t\t\t+ (combinedBodyLength - 1) * options.bodySpacing;\n }\n if (footerLineCount) {\n height += options.footerMarginTop\n\t\t\t+ footerLineCount * footerFont.lineHeight\n\t\t\t+ (footerLineCount - 1) * options.footerSpacing;\n }\n let widthPadding = 0;\n const maxLineWidth = function(line) {\n width = Math.max(width, ctx.measureText(line).width + widthPadding);\n };\n ctx.save();\n ctx.font = titleFont.string;\n each(tooltip.title, maxLineWidth);\n ctx.font = bodyFont.string;\n each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n widthPadding = options.displayColors ? (boxWidth + 2 + options.boxPadding) : 0;\n each(body, (bodyItem) => {\n each(bodyItem.before, maxLineWidth);\n each(bodyItem.lines, maxLineWidth);\n each(bodyItem.after, maxLineWidth);\n });\n widthPadding = 0;\n ctx.font = footerFont.string;\n each(tooltip.footer, maxLineWidth);\n ctx.restore();\n width += padding.width;\n return {width, height};\n}\nfunction determineYAlign(chart, size) {\n const {y, height} = size;\n if (y < height / 2) {\n return 'top';\n } else if (y > (chart.height - height / 2)) {\n return 'bottom';\n }\n return 'center';\n}\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n const {x, width} = size;\n const caret = options.caretSize + options.caretPadding;\n if (xAlign === 'left' && x + width + caret > chart.width) {\n return true;\n }\n if (xAlign === 'right' && x - width - caret < 0) {\n return true;\n }\n}\nfunction determineXAlign(chart, options, size, yAlign) {\n const {x, width} = size;\n const {width: chartWidth, chartArea: {left, right}} = chart;\n let xAlign = 'center';\n if (yAlign === 'center') {\n xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n } else if (x <= width / 2) {\n xAlign = 'left';\n } else if (x >= chartWidth - width / 2) {\n xAlign = 'right';\n }\n if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n xAlign = 'center';\n }\n return xAlign;\n}\nfunction determineAlignment(chart, options, size) {\n const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n return {\n xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n yAlign\n };\n}\nfunction alignX(size, xAlign) {\n let {x, width} = size;\n if (xAlign === 'right') {\n x -= width;\n } else if (xAlign === 'center') {\n x -= (width / 2);\n }\n return x;\n}\nfunction alignY(size, yAlign, paddingAndSize) {\n let {y, height} = size;\n if (yAlign === 'top') {\n y += paddingAndSize;\n } else if (yAlign === 'bottom') {\n y -= height + paddingAndSize;\n } else {\n y -= (height / 2);\n }\n return y;\n}\nfunction getBackgroundPoint(options, size, alignment, chart) {\n const {caretSize, caretPadding, cornerRadius} = options;\n const {xAlign, yAlign} = alignment;\n const paddingAndSize = caretSize + caretPadding;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n let x = alignX(size, xAlign);\n const y = alignY(size, yAlign, paddingAndSize);\n if (yAlign === 'center') {\n if (xAlign === 'left') {\n x += paddingAndSize;\n } else if (xAlign === 'right') {\n x -= paddingAndSize;\n }\n } else if (xAlign === 'left') {\n x -= Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x += Math.max(topRight, bottomRight) + caretSize;\n }\n return {\n x: _limitValue(x, 0, chart.width - size.width),\n y: _limitValue(y, 0, chart.height - size.height)\n };\n}\nfunction getAlignedX(tooltip, align, options) {\n const padding = toPadding(options.padding);\n return align === 'center'\n ? tooltip.x + tooltip.width / 2\n : align === 'right'\n ? tooltip.x + tooltip.width - padding.right\n : tooltip.x + padding.left;\n}\nfunction getBeforeAfterBodyLines(callback) {\n return pushOrConcat([], splitNewlines(callback));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n return createContext(parent, {\n tooltip,\n tooltipItems,\n type: 'tooltip'\n });\n}\nfunction overrideCallbacks(callbacks, context) {\n const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n return override ? callbacks.override(override) : callbacks;\n}\nclass Tooltip extends Element {\n constructor(config) {\n super();\n this.opacity = 0;\n this._active = [];\n this._eventPosition = undefined;\n this._size = undefined;\n this._cachedAnimations = undefined;\n this._tooltipItems = [];\n this.$animations = undefined;\n this.$context = undefined;\n this.chart = config.chart || config._chart;\n this._chart = this.chart;\n this.options = config.options;\n this.dataPoints = undefined;\n this.title = undefined;\n this.beforeBody = undefined;\n this.body = undefined;\n this.afterBody = undefined;\n this.footer = undefined;\n this.xAlign = undefined;\n this.yAlign = undefined;\n this.x = undefined;\n this.y = undefined;\n this.height = undefined;\n this.width = undefined;\n this.caretX = undefined;\n this.caretY = undefined;\n this.labelColors = undefined;\n this.labelPointStyles = undefined;\n this.labelTextColors = undefined;\n }\n initialize(options) {\n this.options = options;\n this._cachedAnimations = undefined;\n this.$context = undefined;\n }\n _resolveAnimations() {\n const cached = this._cachedAnimations;\n if (cached) {\n return cached;\n }\n const chart = this.chart;\n const options = this.options.setContext(this.getContext());\n const opts = options.enabled && chart.options.animation && options.animations;\n const animations = new Animations(this.chart, opts);\n if (opts._cacheable) {\n this._cachedAnimations = Object.freeze(animations);\n }\n return animations;\n }\n getContext() {\n return this.$context ||\n\t\t\t(this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n }\n getTitle(context, options) {\n const {callbacks} = options;\n const beforeTitle = callbacks.beforeTitle.apply(this, [context]);\n const title = callbacks.title.apply(this, [context]);\n const afterTitle = callbacks.afterTitle.apply(this, [context]);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n lines = pushOrConcat(lines, splitNewlines(title));\n lines = pushOrConcat(lines, splitNewlines(afterTitle));\n return lines;\n }\n getBeforeBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(options.callbacks.beforeBody.apply(this, [tooltipItems]));\n }\n getBody(tooltipItems, options) {\n const {callbacks} = options;\n const bodyItems = [];\n each(tooltipItems, (context) => {\n const bodyItem = {\n before: [],\n lines: [],\n after: []\n };\n const scoped = overrideCallbacks(callbacks, context);\n pushOrConcat(bodyItem.before, splitNewlines(scoped.beforeLabel.call(this, context)));\n pushOrConcat(bodyItem.lines, scoped.label.call(this, context));\n pushOrConcat(bodyItem.after, splitNewlines(scoped.afterLabel.call(this, context)));\n bodyItems.push(bodyItem);\n });\n return bodyItems;\n }\n getAfterBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(options.callbacks.afterBody.apply(this, [tooltipItems]));\n }\n getFooter(tooltipItems, options) {\n const {callbacks} = options;\n const beforeFooter = callbacks.beforeFooter.apply(this, [tooltipItems]);\n const footer = callbacks.footer.apply(this, [tooltipItems]);\n const afterFooter = callbacks.afterFooter.apply(this, [tooltipItems]);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n lines = pushOrConcat(lines, splitNewlines(footer));\n lines = pushOrConcat(lines, splitNewlines(afterFooter));\n return lines;\n }\n _createItems(options) {\n const active = this._active;\n const data = this.chart.data;\n const labelColors = [];\n const labelPointStyles = [];\n const labelTextColors = [];\n let tooltipItems = [];\n let i, len;\n for (i = 0, len = active.length; i < len; ++i) {\n tooltipItems.push(createTooltipItem(this.chart, active[i]));\n }\n if (options.filter) {\n tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));\n }\n if (options.itemSort) {\n tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));\n }\n each(tooltipItems, (context) => {\n const scoped = overrideCallbacks(options.callbacks, context);\n labelColors.push(scoped.labelColor.call(this, context));\n labelPointStyles.push(scoped.labelPointStyle.call(this, context));\n labelTextColors.push(scoped.labelTextColor.call(this, context));\n });\n this.labelColors = labelColors;\n this.labelPointStyles = labelPointStyles;\n this.labelTextColors = labelTextColors;\n this.dataPoints = tooltipItems;\n return tooltipItems;\n }\n update(changed, replay) {\n const options = this.options.setContext(this.getContext());\n const active = this._active;\n let properties;\n let tooltipItems = [];\n if (!active.length) {\n if (this.opacity !== 0) {\n properties = {\n opacity: 0\n };\n }\n } else {\n const position = positioners[options.position].call(this, active, this._eventPosition);\n tooltipItems = this._createItems(options);\n this.title = this.getTitle(tooltipItems, options);\n this.beforeBody = this.getBeforeBody(tooltipItems, options);\n this.body = this.getBody(tooltipItems, options);\n this.afterBody = this.getAfterBody(tooltipItems, options);\n this.footer = this.getFooter(tooltipItems, options);\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, size);\n const alignment = determineAlignment(this.chart, options, positionAndSize);\n const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n properties = {\n opacity: 1,\n x: backgroundPoint.x,\n y: backgroundPoint.y,\n width: size.width,\n height: size.height,\n caretX: position.x,\n caretY: position.y\n };\n }\n this._tooltipItems = tooltipItems;\n this.$context = undefined;\n if (properties) {\n this._resolveAnimations().update(this, properties);\n }\n if (changed && options.external) {\n options.external.call(this, {chart: this.chart, tooltip: this, replay});\n }\n }\n drawCaret(tooltipPoint, ctx, size, options) {\n const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n ctx.lineTo(caretPosition.x1, caretPosition.y1);\n ctx.lineTo(caretPosition.x2, caretPosition.y2);\n ctx.lineTo(caretPosition.x3, caretPosition.y3);\n }\n getCaretPosition(tooltipPoint, size, options) {\n const {xAlign, yAlign} = this;\n const {caretSize, cornerRadius} = options;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n const {x: ptX, y: ptY} = tooltipPoint;\n const {width, height} = size;\n let x1, x2, x3, y1, y2, y3;\n if (yAlign === 'center') {\n y2 = ptY + (height / 2);\n if (xAlign === 'left') {\n x1 = ptX;\n x2 = x1 - caretSize;\n y1 = y2 + caretSize;\n y3 = y2 - caretSize;\n } else {\n x1 = ptX + width;\n x2 = x1 + caretSize;\n y1 = y2 - caretSize;\n y3 = y2 + caretSize;\n }\n x3 = x1;\n } else {\n if (xAlign === 'left') {\n x2 = ptX + Math.max(topLeft, bottomLeft) + (caretSize);\n } else if (xAlign === 'right') {\n x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n } else {\n x2 = this.caretX;\n }\n if (yAlign === 'top') {\n y1 = ptY;\n y2 = y1 - caretSize;\n x1 = x2 - caretSize;\n x3 = x2 + caretSize;\n } else {\n y1 = ptY + height;\n y2 = y1 + caretSize;\n x1 = x2 + caretSize;\n x3 = x2 - caretSize;\n }\n y3 = y1;\n }\n return {x1, x2, x3, y1, y2, y3};\n }\n drawTitle(pt, ctx, options) {\n const title = this.title;\n const length = title.length;\n let titleFont, titleSpacing, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.titleAlign, options);\n ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n ctx.textBaseline = 'middle';\n titleFont = toFont(options.titleFont);\n titleSpacing = options.titleSpacing;\n ctx.fillStyle = options.titleColor;\n ctx.font = titleFont.string;\n for (i = 0; i < length; ++i) {\n ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n pt.y += titleFont.lineHeight + titleSpacing;\n if (i + 1 === length) {\n pt.y += options.titleMarginBottom - titleSpacing;\n }\n }\n }\n }\n _drawColorBox(ctx, pt, i, rtlHelper, options) {\n const labelColors = this.labelColors[i];\n const labelPointStyle = this.labelPointStyles[i];\n const {boxHeight, boxWidth, boxPadding} = options;\n const bodyFont = toFont(options.bodyFont);\n const colorX = getAlignedX(this, 'left', options);\n const rtlColorX = rtlHelper.x(colorX);\n const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n const colorY = pt.y + yOffSet;\n if (options.usePointStyle) {\n const drawOptions = {\n radius: Math.min(boxWidth, boxHeight) / 2,\n pointStyle: labelPointStyle.pointStyle,\n rotation: labelPointStyle.rotation,\n borderWidth: 1\n };\n const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n const centerY = colorY + boxHeight / 2;\n ctx.strokeStyle = options.multiKeyBackground;\n ctx.fillStyle = options.multiKeyBackground;\n drawPoint(ctx, drawOptions, centerX, centerY);\n ctx.strokeStyle = labelColors.borderColor;\n ctx.fillStyle = labelColors.backgroundColor;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n ctx.lineWidth = labelColors.borderWidth || 1;\n ctx.strokeStyle = labelColors.borderColor;\n ctx.setLineDash(labelColors.borderDash || []);\n ctx.lineDashOffset = labelColors.borderDashOffset || 0;\n const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth - boxPadding);\n const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - boxPadding - 2);\n const borderRadius = toTRBLCorners(labelColors.borderRadius);\n if (Object.values(borderRadius).some(v => v !== 0)) {\n ctx.beginPath();\n ctx.fillStyle = options.multiKeyBackground;\n addRoundedRectPath(ctx, {\n x: outerX,\n y: colorY,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius,\n });\n ctx.fill();\n ctx.stroke();\n ctx.fillStyle = labelColors.backgroundColor;\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: innerX,\n y: colorY + 1,\n w: boxWidth - 2,\n h: boxHeight - 2,\n radius: borderRadius,\n });\n ctx.fill();\n } else {\n ctx.fillStyle = options.multiKeyBackground;\n ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n ctx.fillStyle = labelColors.backgroundColor;\n ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n }\n }\n ctx.fillStyle = this.labelTextColors[i];\n }\n drawBody(pt, ctx, options) {\n const {body} = this;\n const {bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding} = options;\n const bodyFont = toFont(options.bodyFont);\n let bodyLineHeight = bodyFont.lineHeight;\n let xLinePadding = 0;\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n const fillLineOfText = function(line) {\n ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n pt.y += bodyLineHeight + bodySpacing;\n };\n const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n let bodyItem, textColor, lines, i, j, ilen, jlen;\n ctx.textAlign = bodyAlign;\n ctx.textBaseline = 'middle';\n ctx.font = bodyFont.string;\n pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n ctx.fillStyle = options.bodyColor;\n each(this.beforeBody, fillLineOfText);\n xLinePadding = displayColors && bodyAlignForCalculation !== 'right'\n ? bodyAlign === 'center' ? (boxWidth / 2 + boxPadding) : (boxWidth + 2 + boxPadding)\n : 0;\n for (i = 0, ilen = body.length; i < ilen; ++i) {\n bodyItem = body[i];\n textColor = this.labelTextColors[i];\n ctx.fillStyle = textColor;\n each(bodyItem.before, fillLineOfText);\n lines = bodyItem.lines;\n if (displayColors && lines.length) {\n this._drawColorBox(ctx, pt, i, rtlHelper, options);\n bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n }\n for (j = 0, jlen = lines.length; j < jlen; ++j) {\n fillLineOfText(lines[j]);\n bodyLineHeight = bodyFont.lineHeight;\n }\n each(bodyItem.after, fillLineOfText);\n }\n xLinePadding = 0;\n bodyLineHeight = bodyFont.lineHeight;\n each(this.afterBody, fillLineOfText);\n pt.y -= bodySpacing;\n }\n drawFooter(pt, ctx, options) {\n const footer = this.footer;\n const length = footer.length;\n let footerFont, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.footerAlign, options);\n pt.y += options.footerMarginTop;\n ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n ctx.textBaseline = 'middle';\n footerFont = toFont(options.footerFont);\n ctx.fillStyle = options.footerColor;\n ctx.font = footerFont.string;\n for (i = 0; i < length; ++i) {\n ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n pt.y += footerFont.lineHeight + options.footerSpacing;\n }\n }\n }\n drawBackground(pt, ctx, tooltipSize, options) {\n const {xAlign, yAlign} = this;\n const {x, y} = pt;\n const {width, height} = tooltipSize;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(options.cornerRadius);\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.beginPath();\n ctx.moveTo(x + topLeft, y);\n if (yAlign === 'top') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width - topRight, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n if (yAlign === 'center' && xAlign === 'right') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width, y + height - bottomRight);\n ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n if (yAlign === 'bottom') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + bottomLeft, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n if (yAlign === 'center' && xAlign === 'left') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x, y + topLeft);\n ctx.quadraticCurveTo(x, y, x + topLeft, y);\n ctx.closePath();\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n }\n _updateAnimationTarget(options) {\n const chart = this.chart;\n const anims = this.$animations;\n const animX = anims && anims.x;\n const animY = anims && anims.y;\n if (animX || animY) {\n const position = positioners[options.position].call(this, this._active, this._eventPosition);\n if (!position) {\n return;\n }\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, this._size);\n const alignment = determineAlignment(chart, options, positionAndSize);\n const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n if (animX._to !== point.x || animY._to !== point.y) {\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n this.width = size.width;\n this.height = size.height;\n this.caretX = position.x;\n this.caretY = position.y;\n this._resolveAnimations().update(this, point);\n }\n }\n }\n _willRender() {\n return !!this.opacity;\n }\n draw(ctx) {\n const options = this.options.setContext(this.getContext());\n let opacity = this.opacity;\n if (!opacity) {\n return;\n }\n this._updateAnimationTarget(options);\n const tooltipSize = {\n width: this.width,\n height: this.height\n };\n const pt = {\n x: this.x,\n y: this.y\n };\n opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n const padding = toPadding(options.padding);\n const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n if (options.enabled && hasTooltipContent) {\n ctx.save();\n ctx.globalAlpha = opacity;\n this.drawBackground(pt, ctx, tooltipSize, options);\n overrideTextDirection(ctx, options.textDirection);\n pt.y += padding.top;\n this.drawTitle(pt, ctx, options);\n this.drawBody(pt, ctx, options);\n this.drawFooter(pt, ctx, options);\n restoreTextDirection(ctx, options.textDirection);\n ctx.restore();\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements, eventPosition) {\n const lastActive = this._active;\n const active = activeElements.map(({datasetIndex, index}) => {\n const meta = this.chart.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('Cannot find a dataset at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index,\n };\n });\n const changed = !_elementsEqual(lastActive, active);\n const positionChanged = this._positionChanged(active, eventPosition);\n if (changed || positionChanged) {\n this._active = active;\n this._eventPosition = eventPosition;\n this._ignoreReplayEvents = true;\n this.update(true);\n }\n }\n handleEvent(e, replay, inChartArea = true) {\n if (replay && this._ignoreReplayEvents) {\n return false;\n }\n this._ignoreReplayEvents = false;\n const options = this.options;\n const lastActive = this._active || [];\n const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n const positionChanged = this._positionChanged(active, e);\n const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n if (changed) {\n this._active = active;\n if (options.enabled || options.external) {\n this._eventPosition = {\n x: e.x,\n y: e.y\n };\n this.update(true, replay);\n }\n }\n return changed;\n }\n _getActiveElements(e, lastActive, replay, inChartArea) {\n const options = this.options;\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive;\n }\n const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n if (options.reverse) {\n active.reverse();\n }\n return active;\n }\n _positionChanged(active, e) {\n const {caretX, caretY, options} = this;\n const position = positioners[options.position].call(this, active, e);\n return position !== false && (caretX !== position.x || caretY !== position.y);\n }\n}\nTooltip.positioners = positioners;\nvar plugin_tooltip = {\n id: 'tooltip',\n _element: Tooltip,\n positioners,\n afterInit(chart, _args, options) {\n if (options) {\n chart.tooltip = new Tooltip({chart, options});\n }\n },\n beforeUpdate(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n reset(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n afterDraw(chart) {\n const tooltip = chart.tooltip;\n if (tooltip && tooltip._willRender()) {\n const args = {\n tooltip\n };\n if (chart.notifyPlugins('beforeTooltipDraw', args) === false) {\n return;\n }\n tooltip.draw(chart.ctx);\n chart.notifyPlugins('afterTooltipDraw', args);\n }\n },\n afterEvent(chart, args) {\n if (chart.tooltip) {\n const useFinalPosition = args.replay;\n if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n args.changed = true;\n }\n }\n },\n defaults: {\n enabled: true,\n external: null,\n position: 'average',\n backgroundColor: 'rgba(0,0,0,0.8)',\n titleColor: '#fff',\n titleFont: {\n weight: 'bold',\n },\n titleSpacing: 2,\n titleMarginBottom: 6,\n titleAlign: 'left',\n bodyColor: '#fff',\n bodySpacing: 2,\n bodyFont: {\n },\n bodyAlign: 'left',\n footerColor: '#fff',\n footerSpacing: 2,\n footerMarginTop: 6,\n footerFont: {\n weight: 'bold',\n },\n footerAlign: 'left',\n padding: 6,\n caretPadding: 2,\n caretSize: 5,\n cornerRadius: 6,\n boxHeight: (ctx, opts) => opts.bodyFont.size,\n boxWidth: (ctx, opts) => opts.bodyFont.size,\n multiKeyBackground: '#fff',\n displayColors: true,\n boxPadding: 0,\n borderColor: 'rgba(0,0,0,0)',\n borderWidth: 0,\n animation: {\n duration: 400,\n easing: 'easeOutQuart',\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY'],\n },\n opacity: {\n easing: 'linear',\n duration: 200\n }\n },\n callbacks: {\n beforeTitle: noop,\n title(tooltipItems) {\n if (tooltipItems.length > 0) {\n const item = tooltipItems[0];\n const labels = item.chart.data.labels;\n const labelCount = labels ? labels.length : 0;\n if (this && this.options && this.options.mode === 'dataset') {\n return item.dataset.label || '';\n } else if (item.label) {\n return item.label;\n } else if (labelCount > 0 && item.dataIndex < labelCount) {\n return labels[item.dataIndex];\n }\n }\n return '';\n },\n afterTitle: noop,\n beforeBody: noop,\n beforeLabel: noop,\n label(tooltipItem) {\n if (this && this.options && this.options.mode === 'dataset') {\n return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n }\n let label = tooltipItem.dataset.label || '';\n if (label) {\n label += ': ';\n }\n const value = tooltipItem.formattedValue;\n if (!isNullOrUndef(value)) {\n label += value;\n }\n return label;\n },\n labelColor(tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n borderColor: options.borderColor,\n backgroundColor: options.backgroundColor,\n borderWidth: options.borderWidth,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderRadius: 0,\n };\n },\n labelTextColor() {\n return this.options.bodyColor;\n },\n labelPointStyle(tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n pointStyle: options.pointStyle,\n rotation: options.rotation,\n };\n },\n afterLabel: noop,\n afterBody: noop,\n beforeFooter: noop,\n footer: noop,\n afterFooter: noop\n }\n },\n defaultRoutes: {\n bodyFont: 'font',\n footerFont: 'font',\n titleFont: 'font'\n },\n descriptors: {\n _scriptable: (name) => name !== 'filter' && name !== 'itemSort' && name !== 'external',\n _indexable: false,\n callbacks: {\n _scriptable: false,\n _indexable: false,\n },\n animation: {\n _fallback: false\n },\n animations: {\n _fallback: 'animation'\n }\n },\n additionalOptionScopes: ['interaction']\n};\n\nvar plugins = /*#__PURE__*/Object.freeze({\n__proto__: null,\nDecimation: plugin_decimation,\nFiller: index,\nLegend: plugin_legend,\nSubTitle: plugin_subtitle,\nTitle: plugin_title,\nTooltip: plugin_tooltip\n});\n\nconst addIfString = (labels, raw, index, addedLabels) => {\n if (typeof raw === 'string') {\n index = labels.push(raw) - 1;\n addedLabels.unshift({index, label: raw});\n } else if (isNaN(raw)) {\n index = null;\n }\n return index;\n};\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n const first = labels.indexOf(raw);\n if (first === -1) {\n return addIfString(labels, raw, index, addedLabels);\n }\n const last = labels.lastIndexOf(raw);\n return first !== last ? index : first;\n}\nconst validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);\nclass CategoryScale extends Scale {\n constructor(cfg) {\n super(cfg);\n this._startValue = undefined;\n this._valueRange = 0;\n this._addedLabels = [];\n }\n init(scaleOptions) {\n const added = this._addedLabels;\n if (added.length) {\n const labels = this.getLabels();\n for (const {index, label} of added) {\n if (labels[index] === label) {\n labels.splice(index, 1);\n }\n }\n this._addedLabels = [];\n }\n super.init(scaleOptions);\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n const labels = this.getLabels();\n index = isFinite(index) && labels[index] === raw ? index\n : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n return validIndex(index, labels.length - 1);\n }\n determineDataLimits() {\n const {minDefined, maxDefined} = this.getUserBounds();\n let {min, max} = this.getMinMax(true);\n if (this.options.bounds === 'ticks') {\n if (!minDefined) {\n min = 0;\n }\n if (!maxDefined) {\n max = this.getLabels().length - 1;\n }\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const min = this.min;\n const max = this.max;\n const offset = this.options.offset;\n const ticks = [];\n let labels = this.getLabels();\n labels = (min === 0 && max === labels.length - 1) ? labels : labels.slice(min, max + 1);\n this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n this._startValue = this.min - (offset ? 0.5 : 0);\n for (let value = min; value <= max; value++) {\n ticks.push({value});\n }\n return ticks;\n }\n getLabelForValue(value) {\n const labels = this.getLabels();\n if (value >= 0 && value < labels.length) {\n return labels[value];\n }\n return value;\n }\n configure() {\n super.configure();\n if (!this.isHorizontal()) {\n this._reversePixels = !this._reversePixels;\n }\n }\n getPixelForValue(value) {\n if (typeof value !== 'number') {\n value = this.parse(value);\n }\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getValueForPixel(pixel) {\n return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n }\n getBasePixel() {\n return this.bottom;\n }\n}\nCategoryScale.id = 'category';\nCategoryScale.defaults = {\n ticks: {\n callback: CategoryScale.prototype.getLabelForValue\n }\n};\n\nfunction generateTicks$1(generationOptions, dataRange) {\n const ticks = [];\n const MIN_SPACING = 1e-14;\n const {bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds} = generationOptions;\n const unit = step || 1;\n const maxSpaces = maxTicks - 1;\n const {min: rmin, max: rmax} = dataRange;\n const minDefined = !isNullOrUndef(min);\n const maxDefined = !isNullOrUndef(max);\n const countDefined = !isNullOrUndef(count);\n const minSpacing = (rmax - rmin) / (maxDigits + 1);\n let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n let factor, niceMin, niceMax, numSpaces;\n if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n return [{value: rmin}, {value: rmax}];\n }\n numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n if (numSpaces > maxSpaces) {\n spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n }\n if (!isNullOrUndef(precision)) {\n factor = Math.pow(10, precision);\n spacing = Math.ceil(spacing * factor) / factor;\n }\n if (bounds === 'ticks') {\n niceMin = Math.floor(rmin / spacing) * spacing;\n niceMax = Math.ceil(rmax / spacing) * spacing;\n } else {\n niceMin = rmin;\n niceMax = rmax;\n }\n if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n spacing = (max - min) / numSpaces;\n niceMin = min;\n niceMax = max;\n } else if (countDefined) {\n niceMin = minDefined ? min : niceMin;\n niceMax = maxDefined ? max : niceMax;\n numSpaces = count - 1;\n spacing = (niceMax - niceMin) / numSpaces;\n } else {\n numSpaces = (niceMax - niceMin) / spacing;\n if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n numSpaces = Math.round(numSpaces);\n } else {\n numSpaces = Math.ceil(numSpaces);\n }\n }\n const decimalPlaces = Math.max(\n _decimalPlaces(spacing),\n _decimalPlaces(niceMin)\n );\n factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n niceMin = Math.round(niceMin * factor) / factor;\n niceMax = Math.round(niceMax * factor) / factor;\n let j = 0;\n if (minDefined) {\n if (includeBounds && niceMin !== min) {\n ticks.push({value: min});\n if (niceMin < min) {\n j++;\n }\n if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n j++;\n }\n } else if (niceMin < min) {\n j++;\n }\n }\n for (; j < numSpaces; ++j) {\n ticks.push({value: Math.round((niceMin + j * spacing) * factor) / factor});\n }\n if (maxDefined && includeBounds && niceMax !== max) {\n if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n ticks[ticks.length - 1].value = max;\n } else {\n ticks.push({value: max});\n }\n } else if (!maxDefined || niceMax === max) {\n ticks.push({value: niceMax});\n }\n return ticks;\n}\nfunction relativeLabelSize(value, minSpacing, {horizontal, minRotation}) {\n const rad = toRadians(minRotation);\n const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n const length = 0.75 * minSpacing * ('' + value).length;\n return Math.min(minSpacing / ratio, length);\n}\nclass LinearScaleBase extends Scale {\n constructor(cfg) {\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._endValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n return null;\n }\n return +raw;\n }\n handleTickRangeOptions() {\n const {beginAtZero} = this.options;\n const {minDefined, maxDefined} = this.getUserBounds();\n let {min, max} = this;\n const setMin = v => (min = minDefined ? min : v);\n const setMax = v => (max = maxDefined ? max : v);\n if (beginAtZero) {\n const minSign = sign(min);\n const maxSign = sign(max);\n if (minSign < 0 && maxSign < 0) {\n setMax(0);\n } else if (minSign > 0 && maxSign > 0) {\n setMin(0);\n }\n }\n if (min === max) {\n let offset = 1;\n if (max >= Number.MAX_SAFE_INTEGER || min <= Number.MIN_SAFE_INTEGER) {\n offset = Math.abs(max * 0.05);\n }\n setMax(max + offset);\n if (!beginAtZero) {\n setMin(min - offset);\n }\n }\n this.min = min;\n this.max = max;\n }\n getTickLimit() {\n const tickOpts = this.options.ticks;\n let {maxTicksLimit, stepSize} = tickOpts;\n let maxTicks;\n if (stepSize) {\n maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n if (maxTicks > 1000) {\n console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n maxTicks = 1000;\n }\n } else {\n maxTicks = this.computeTickLimit();\n maxTicksLimit = maxTicksLimit || 11;\n }\n if (maxTicksLimit) {\n maxTicks = Math.min(maxTicksLimit, maxTicks);\n }\n return maxTicks;\n }\n computeTickLimit() {\n return Number.POSITIVE_INFINITY;\n }\n buildTicks() {\n const opts = this.options;\n const tickOpts = opts.ticks;\n let maxTicks = this.getTickLimit();\n maxTicks = Math.max(2, maxTicks);\n const numericGeneratorOptions = {\n maxTicks,\n bounds: opts.bounds,\n min: opts.min,\n max: opts.max,\n precision: tickOpts.precision,\n step: tickOpts.stepSize,\n count: tickOpts.count,\n maxDigits: this._maxDigits(),\n horizontal: this.isHorizontal(),\n minRotation: tickOpts.minRotation || 0,\n includeBounds: tickOpts.includeBounds !== false\n };\n const dataRange = this._range || this;\n const ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n configure() {\n const ticks = this.ticks;\n let start = this.min;\n let end = this.max;\n super.configure();\n if (this.options.offset && ticks.length) {\n const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n start -= offset;\n end += offset;\n }\n this._startValue = start;\n this._endValue = end;\n this._valueRange = end - start;\n }\n getLabelForValue(value) {\n return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n}\n\nclass LinearScale extends LinearScaleBase {\n determineDataLimits() {\n const {min, max} = this.getMinMax(true);\n this.min = isNumberFinite(min) ? min : 0;\n this.max = isNumberFinite(max) ? max : 1;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n const horizontal = this.isHorizontal();\n const length = horizontal ? this.width : this.height;\n const minRotation = toRadians(this.options.ticks.minRotation);\n const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n const tickFont = this._resolveTickFontOptions(0);\n return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n }\n getPixelForValue(value) {\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n }\n}\nLinearScale.id = 'linear';\nLinearScale.defaults = {\n ticks: {\n callback: Ticks.formatters.numeric\n }\n};\n\nfunction isMajor(tickVal) {\n const remain = tickVal / (Math.pow(10, Math.floor(log10(tickVal))));\n return remain === 1;\n}\nfunction generateTicks(generationOptions, dataRange) {\n const endExp = Math.floor(log10(dataRange.max));\n const endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));\n const ticks = [];\n let tickVal = finiteOrDefault(generationOptions.min, Math.pow(10, Math.floor(log10(dataRange.min))));\n let exp = Math.floor(log10(tickVal));\n let significand = Math.floor(tickVal / Math.pow(10, exp));\n let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n do {\n ticks.push({value: tickVal, major: isMajor(tickVal)});\n ++significand;\n if (significand === 10) {\n significand = 1;\n ++exp;\n precision = exp >= 0 ? 1 : precision;\n }\n tickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision;\n } while (exp < endExp || (exp === endExp && significand < endSignificand));\n const lastTick = finiteOrDefault(generationOptions.max, tickVal);\n ticks.push({value: lastTick, major: isMajor(tickVal)});\n return ticks;\n}\nclass LogarithmicScale extends Scale {\n constructor(cfg) {\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n const value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n if (value === 0) {\n this._zero = true;\n return undefined;\n }\n return isNumberFinite(value) && value > 0 ? value : null;\n }\n determineDataLimits() {\n const {min, max} = this.getMinMax(true);\n this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n if (this.options.beginAtZero) {\n this._zero = true;\n }\n this.handleTickRangeOptions();\n }\n handleTickRangeOptions() {\n const {minDefined, maxDefined} = this.getUserBounds();\n let min = this.min;\n let max = this.max;\n const setMin = v => (min = minDefined ? min : v);\n const setMax = v => (max = maxDefined ? max : v);\n const exp = (v, m) => Math.pow(10, Math.floor(log10(v)) + m);\n if (min === max) {\n if (min <= 0) {\n setMin(1);\n setMax(10);\n } else {\n setMin(exp(min, -1));\n setMax(exp(max, +1));\n }\n }\n if (min <= 0) {\n setMin(exp(max, -1));\n }\n if (max <= 0) {\n setMax(exp(min, +1));\n }\n if (this._zero && this.min !== this._suggestedMin && min === exp(this.min, 0)) {\n setMin(exp(min, -1));\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const opts = this.options;\n const generationOptions = {\n min: this._userMin,\n max: this._userMax\n };\n const ticks = generateTicks(generationOptions, this);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n getLabelForValue(value) {\n return value === undefined\n ? '0'\n : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n configure() {\n const start = this.min;\n super.configure();\n this._startValue = log10(start);\n this._valueRange = log10(this.max) - log10(start);\n }\n getPixelForValue(value) {\n if (value === undefined || value === 0) {\n value = this.min;\n }\n if (value === null || isNaN(value)) {\n return NaN;\n }\n return this.getPixelForDecimal(value === this.min\n ? 0\n : (log10(value) - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n const decimal = this.getDecimalForPixel(pixel);\n return Math.pow(10, this._startValue + decimal * this._valueRange);\n }\n}\nLogarithmicScale.id = 'logarithmic';\nLogarithmicScale.defaults = {\n ticks: {\n callback: Ticks.formatters.logarithmic,\n major: {\n enabled: true\n }\n }\n};\n\nfunction getTickBackdropHeight(opts) {\n const tickOpts = opts.ticks;\n if (tickOpts.display && opts.display) {\n const padding = toPadding(tickOpts.backdropPadding);\n return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n }\n return 0;\n}\nfunction measureLabelSize(ctx, font, label) {\n label = isArray(label) ? label : [label];\n return {\n w: _longestText(ctx, font.string, label),\n h: label.length * font.lineHeight\n };\n}\nfunction determineLimits(angle, pos, size, min, max) {\n if (angle === min || angle === max) {\n return {\n start: pos - (size / 2),\n end: pos + (size / 2)\n };\n } else if (angle < min || angle > max) {\n return {\n start: pos - size,\n end: pos\n };\n }\n return {\n start: pos,\n end: pos + size\n };\n}\nfunction fitWithPointLabels(scale) {\n const orig = {\n l: scale.left + scale._padding.left,\n r: scale.right - scale._padding.right,\n t: scale.top + scale._padding.top,\n b: scale.bottom - scale._padding.bottom\n };\n const limits = Object.assign({}, orig);\n const labelSizes = [];\n const padding = [];\n const valueCount = scale._pointLabels.length;\n const pointLabelOpts = scale.options.pointLabels;\n const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n for (let i = 0; i < valueCount; i++) {\n const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n padding[i] = opts.padding;\n const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n const plFont = toFont(opts.font);\n const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n labelSizes[i] = textSize;\n const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n const angle = Math.round(toDegrees(angleRadians));\n const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n }\n scale.setCenterPoint(\n orig.l - limits.l,\n limits.r - orig.r,\n orig.t - limits.t,\n limits.b - orig.b\n );\n scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n const sin = Math.abs(Math.sin(angle));\n const cos = Math.abs(Math.cos(angle));\n let x = 0;\n let y = 0;\n if (hLimits.start < orig.l) {\n x = (orig.l - hLimits.start) / sin;\n limits.l = Math.min(limits.l, orig.l - x);\n } else if (hLimits.end > orig.r) {\n x = (hLimits.end - orig.r) / sin;\n limits.r = Math.max(limits.r, orig.r + x);\n }\n if (vLimits.start < orig.t) {\n y = (orig.t - vLimits.start) / cos;\n limits.t = Math.min(limits.t, orig.t - y);\n } else if (vLimits.end > orig.b) {\n y = (vLimits.end - orig.b) / cos;\n limits.b = Math.max(limits.b, orig.b + y);\n }\n}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n const items = [];\n const valueCount = scale._pointLabels.length;\n const opts = scale.options;\n const extra = getTickBackdropHeight(opts) / 2;\n const outerDistance = scale.drawingArea;\n const additionalAngle = opts.pointLabels.centerPointLabels ? PI / valueCount : 0;\n for (let i = 0; i < valueCount; i++) {\n const pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + padding[i], additionalAngle);\n const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n const size = labelSizes[i];\n const y = yForAngle(pointLabelPosition.y, size.h, angle);\n const textAlign = getTextAlignForAngle(angle);\n const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n items.push({\n x: pointLabelPosition.x,\n y,\n textAlign,\n left,\n top: y,\n right: left + size.w,\n bottom: y + size.h\n });\n }\n return items;\n}\nfunction getTextAlignForAngle(angle) {\n if (angle === 0 || angle === 180) {\n return 'center';\n } else if (angle < 180) {\n return 'left';\n }\n return 'right';\n}\nfunction leftForTextAlign(x, w, align) {\n if (align === 'right') {\n x -= w;\n } else if (align === 'center') {\n x -= (w / 2);\n }\n return x;\n}\nfunction yForAngle(y, h, angle) {\n if (angle === 90 || angle === 270) {\n y -= (h / 2);\n } else if (angle > 270 || angle < 90) {\n y -= h;\n }\n return y;\n}\nfunction drawPointLabels(scale, labelCount) {\n const {ctx, options: {pointLabels}} = scale;\n for (let i = labelCount - 1; i >= 0; i--) {\n const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n const plFont = toFont(optsAtIndex.font);\n const {x, y, textAlign, left, top, right, bottom} = scale._pointLabelItems[i];\n const {backdropColor} = optsAtIndex;\n if (!isNullOrUndef(backdropColor)) {\n const borderRadius = toTRBLCorners(optsAtIndex.borderRadius);\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillStyle = backdropColor;\n const backdropLeft = left - padding.left;\n const backdropTop = top - padding.top;\n const backdropWidth = right - left + padding.width;\n const backdropHeight = bottom - top + padding.height;\n if (Object.values(borderRadius).some(v => v !== 0)) {\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: backdropLeft,\n y: backdropTop,\n w: backdropWidth,\n h: backdropHeight,\n radius: borderRadius,\n });\n ctx.fill();\n } else {\n ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n }\n }\n renderText(\n ctx,\n scale._pointLabels[i],\n x,\n y + (plFont.lineHeight / 2),\n plFont,\n {\n color: optsAtIndex.color,\n textAlign: textAlign,\n textBaseline: 'middle'\n }\n );\n }\n}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n const {ctx} = scale;\n if (circular) {\n ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n } else {\n let pointPosition = scale.getPointPosition(0, radius);\n ctx.moveTo(pointPosition.x, pointPosition.y);\n for (let i = 1; i < labelCount; i++) {\n pointPosition = scale.getPointPosition(i, radius);\n ctx.lineTo(pointPosition.x, pointPosition.y);\n }\n }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount) {\n const ctx = scale.ctx;\n const circular = gridLineOpts.circular;\n const {color, lineWidth} = gridLineOpts;\n if ((!circular && !labelCount) || !color || !lineWidth || radius < 0) {\n return;\n }\n ctx.save();\n ctx.strokeStyle = color;\n ctx.lineWidth = lineWidth;\n ctx.setLineDash(gridLineOpts.borderDash);\n ctx.lineDashOffset = gridLineOpts.borderDashOffset;\n ctx.beginPath();\n pathRadiusLine(scale, radius, circular, labelCount);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n}\nfunction createPointLabelContext(parent, index, label) {\n return createContext(parent, {\n label,\n index,\n type: 'pointLabel'\n });\n}\nclass RadialLinearScale extends LinearScaleBase {\n constructor(cfg) {\n super(cfg);\n this.xCenter = undefined;\n this.yCenter = undefined;\n this.drawingArea = undefined;\n this._pointLabels = [];\n this._pointLabelItems = [];\n }\n setDimensions() {\n const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n const w = this.width = this.maxWidth - padding.width;\n const h = this.height = this.maxHeight - padding.height;\n this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n this.drawingArea = Math.floor(Math.min(w, h) / 2);\n }\n determineDataLimits() {\n const {min, max} = this.getMinMax(false);\n this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n }\n generateTickLabels(ticks) {\n LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n this._pointLabels = this.getLabels()\n .map((value, index) => {\n const label = callback(this.options.pointLabels.callback, [value, index], this);\n return label || label === 0 ? label : '';\n })\n .filter((v, i) => this.chart.getDataVisibility(i));\n }\n fit() {\n const opts = this.options;\n if (opts.display && opts.pointLabels.display) {\n fitWithPointLabels(this);\n } else {\n this.setCenterPoint(0, 0, 0, 0);\n }\n }\n setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n }\n getIndexAngle(index) {\n const angleMultiplier = TAU / (this._pointLabels.length || 1);\n const startAngle = this.options.startAngle || 0;\n return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n }\n getDistanceFromCenterForValue(value) {\n if (isNullOrUndef(value)) {\n return NaN;\n }\n const scalingFactor = this.drawingArea / (this.max - this.min);\n if (this.options.reverse) {\n return (this.max - value) * scalingFactor;\n }\n return (value - this.min) * scalingFactor;\n }\n getValueForDistanceFromCenter(distance) {\n if (isNullOrUndef(distance)) {\n return NaN;\n }\n const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n }\n getPointLabelContext(index) {\n const pointLabels = this._pointLabels || [];\n if (index >= 0 && index < pointLabels.length) {\n const pointLabel = pointLabels[index];\n return createPointLabelContext(this.getContext(), index, pointLabel);\n }\n }\n getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n return {\n x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n angle\n };\n }\n getPointPositionForValue(index, value) {\n return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n }\n getBasePosition(index) {\n return this.getPointPositionForValue(index || 0, this.getBaseValue());\n }\n getPointLabelPosition(index) {\n const {left, top, right, bottom} = this._pointLabelItems[index];\n return {\n left,\n top,\n right,\n bottom,\n };\n }\n drawBackground() {\n const {backgroundColor, grid: {circular}} = this.options;\n if (backgroundColor) {\n const ctx = this.ctx;\n ctx.save();\n ctx.beginPath();\n pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n ctx.closePath();\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n }\n drawGrid() {\n const ctx = this.ctx;\n const opts = this.options;\n const {angleLines, grid} = opts;\n const labelCount = this._pointLabels.length;\n let i, offset, position;\n if (opts.pointLabels.display) {\n drawPointLabels(this, labelCount);\n }\n if (grid.display) {\n this.ticks.forEach((tick, index) => {\n if (index !== 0) {\n offset = this.getDistanceFromCenterForValue(tick.value);\n const optsAtIndex = grid.setContext(this.getContext(index - 1));\n drawRadiusLine(this, optsAtIndex, offset, labelCount);\n }\n });\n }\n if (angleLines.display) {\n ctx.save();\n for (i = labelCount - 1; i >= 0; i--) {\n const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n const {color, lineWidth} = optsAtIndex;\n if (!lineWidth || !color) {\n continue;\n }\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = color;\n ctx.setLineDash(optsAtIndex.borderDash);\n ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n offset = this.getDistanceFromCenterForValue(opts.ticks.reverse ? this.min : this.max);\n position = this.getPointPosition(i, offset);\n ctx.beginPath();\n ctx.moveTo(this.xCenter, this.yCenter);\n ctx.lineTo(position.x, position.y);\n ctx.stroke();\n }\n ctx.restore();\n }\n }\n drawBorder() {}\n drawLabels() {\n const ctx = this.ctx;\n const opts = this.options;\n const tickOpts = opts.ticks;\n if (!tickOpts.display) {\n return;\n }\n const startAngle = this.getIndexAngle(0);\n let offset, width;\n ctx.save();\n ctx.translate(this.xCenter, this.yCenter);\n ctx.rotate(startAngle);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n this.ticks.forEach((tick, index) => {\n if (index === 0 && !opts.reverse) {\n return;\n }\n const optsAtIndex = tickOpts.setContext(this.getContext(index));\n const tickFont = toFont(optsAtIndex.font);\n offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n if (optsAtIndex.showLabelBackdrop) {\n ctx.font = tickFont.string;\n width = ctx.measureText(tick.label).width;\n ctx.fillStyle = optsAtIndex.backdropColor;\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillRect(\n -width / 2 - padding.left,\n -offset - tickFont.size / 2 - padding.top,\n width + padding.width,\n tickFont.size + padding.height\n );\n }\n renderText(ctx, tick.label, 0, -offset, tickFont, {\n color: optsAtIndex.color,\n });\n });\n ctx.restore();\n }\n drawTitle() {}\n}\nRadialLinearScale.id = 'radialLinear';\nRadialLinearScale.defaults = {\n display: true,\n animate: true,\n position: 'chartArea',\n angleLines: {\n display: true,\n lineWidth: 1,\n borderDash: [],\n borderDashOffset: 0.0\n },\n grid: {\n circular: false\n },\n startAngle: 0,\n ticks: {\n showLabelBackdrop: true,\n callback: Ticks.formatters.numeric\n },\n pointLabels: {\n backdropColor: undefined,\n backdropPadding: 2,\n display: true,\n font: {\n size: 10\n },\n callback(label) {\n return label;\n },\n padding: 5,\n centerPointLabels: false\n }\n};\nRadialLinearScale.defaultRoutes = {\n 'angleLines.color': 'borderColor',\n 'pointLabels.color': 'color',\n 'ticks.color': 'color'\n};\nRadialLinearScale.descriptors = {\n angleLines: {\n _fallback: 'grid'\n }\n};\n\nconst INTERVALS = {\n millisecond: {common: true, size: 1, steps: 1000},\n second: {common: true, size: 1000, steps: 60},\n minute: {common: true, size: 60000, steps: 60},\n hour: {common: true, size: 3600000, steps: 24},\n day: {common: true, size: 86400000, steps: 30},\n week: {common: false, size: 604800000, steps: 4},\n month: {common: true, size: 2.628e9, steps: 12},\n quarter: {common: false, size: 7.884e9, steps: 4},\n year: {common: true, size: 3.154e10}\n};\nconst UNITS = (Object.keys(INTERVALS));\nfunction sorter(a, b) {\n return a - b;\n}\nfunction parse(scale, input) {\n if (isNullOrUndef(input)) {\n return null;\n }\n const adapter = scale._adapter;\n const {parser, round, isoWeekday} = scale._parseOpts;\n let value = input;\n if (typeof parser === 'function') {\n value = parser(value);\n }\n if (!isNumberFinite(value)) {\n value = typeof parser === 'string'\n ? adapter.parse(value, parser)\n : adapter.parse(value);\n }\n if (value === null) {\n return null;\n }\n if (round) {\n value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true)\n ? adapter.startOf(value, 'isoWeek', isoWeekday)\n : adapter.startOf(value, round);\n }\n return +value;\n}\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n const ilen = UNITS.length;\n for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n const interval = INTERVALS[UNITS[i]];\n const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n return UNITS[i];\n }\n }\n return UNITS[ilen - 1];\n}\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n const unit = UNITS[i];\n if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n return unit;\n }\n }\n return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\nfunction determineMajorUnit(unit) {\n for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n if (INTERVALS[UNITS[i]].common) {\n return UNITS[i];\n }\n }\n}\nfunction addTick(ticks, time, timestamps) {\n if (!timestamps) {\n ticks[time] = true;\n } else if (timestamps.length) {\n const {lo, hi} = _lookup(timestamps, time);\n const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n ticks[timestamp] = true;\n }\n}\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n const adapter = scale._adapter;\n const first = +adapter.startOf(ticks[0].value, majorUnit);\n const last = ticks[ticks.length - 1].value;\n let major, index;\n for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n index = map[major];\n if (index >= 0) {\n ticks[index].major = true;\n }\n }\n return ticks;\n}\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n const ticks = [];\n const map = {};\n const ilen = values.length;\n let i, value;\n for (i = 0; i < ilen; ++i) {\n value = values[i];\n map[value] = i;\n ticks.push({\n value,\n major: false\n });\n }\n return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nclass TimeScale extends Scale {\n constructor(props) {\n super(props);\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n this._unit = 'day';\n this._majorUnit = undefined;\n this._offsets = {};\n this._normalized = false;\n this._parseOpts = undefined;\n }\n init(scaleOpts, opts) {\n const time = scaleOpts.time || (scaleOpts.time = {});\n const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n mergeIf(time.displayFormats, adapter.formats());\n this._parseOpts = {\n parser: time.parser,\n round: time.round,\n isoWeekday: time.isoWeekday\n };\n super.init(scaleOpts);\n this._normalized = opts.normalized;\n }\n parse(raw, index) {\n if (raw === undefined) {\n return null;\n }\n return parse(this, raw);\n }\n beforeLayout() {\n super.beforeLayout();\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n }\n determineDataLimits() {\n const options = this.options;\n const adapter = this._adapter;\n const unit = options.time.unit || 'day';\n let {min, max, minDefined, maxDefined} = this.getUserBounds();\n function _applyBounds(bounds) {\n if (!minDefined && !isNaN(bounds.min)) {\n min = Math.min(min, bounds.min);\n }\n if (!maxDefined && !isNaN(bounds.max)) {\n max = Math.max(max, bounds.max);\n }\n }\n if (!minDefined || !maxDefined) {\n _applyBounds(this._getLabelBounds());\n if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n _applyBounds(this.getMinMax(false));\n }\n }\n min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n this.min = Math.min(min, max - 1);\n this.max = Math.max(min + 1, max);\n }\n _getLabelBounds() {\n const arr = this.getLabelTimestamps();\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n if (arr.length) {\n min = arr[0];\n max = arr[arr.length - 1];\n }\n return {min, max};\n }\n buildTicks() {\n const options = this.options;\n const timeOpts = options.time;\n const tickOpts = options.ticks;\n const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n if (options.bounds === 'ticks' && timestamps.length) {\n this.min = this._userMin || timestamps[0];\n this.max = this._userMax || timestamps[timestamps.length - 1];\n }\n const min = this.min;\n const max = this.max;\n const ticks = _filterBetween(timestamps, min, max);\n this._unit = timeOpts.unit || (tickOpts.autoSkip\n ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min))\n : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined\n : determineMajorUnit(this._unit);\n this.initOffsets(timestamps);\n if (options.reverse) {\n ticks.reverse();\n }\n return ticksFromTimestamps(this, ticks, this._majorUnit);\n }\n afterAutoSkip() {\n if (this.options.offsetAfterAutoskip) {\n this.initOffsets(this.ticks.map(tick => +tick.value));\n }\n }\n initOffsets(timestamps) {\n let start = 0;\n let end = 0;\n let first, last;\n if (this.options.offset && timestamps.length) {\n first = this.getDecimalForValue(timestamps[0]);\n if (timestamps.length === 1) {\n start = 1 - first;\n } else {\n start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n }\n last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n if (timestamps.length === 1) {\n end = last;\n } else {\n end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n }\n }\n const limit = timestamps.length < 3 ? 0.5 : 0.25;\n start = _limitValue(start, 0, limit);\n end = _limitValue(end, 0, limit);\n this._offsets = {start, end, factor: 1 / (start + 1 + end)};\n }\n _generate() {\n const adapter = this._adapter;\n const min = this.min;\n const max = this.max;\n const options = this.options;\n const timeOpts = options.time;\n const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n const stepSize = valueOrDefault(timeOpts.stepSize, 1);\n const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n const hasWeekday = isNumber(weekday) || weekday === true;\n const ticks = {};\n let first = min;\n let time, count;\n if (hasWeekday) {\n first = +adapter.startOf(first, 'isoWeek', weekday);\n }\n first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n }\n const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n addTick(ticks, time, timestamps);\n }\n if (time === max || options.bounds === 'ticks' || count === 1) {\n addTick(ticks, time, timestamps);\n }\n return Object.keys(ticks).sort((a, b) => a - b).map(x => +x);\n }\n getLabelForValue(value) {\n const adapter = this._adapter;\n const timeOpts = this.options.time;\n if (timeOpts.tooltipFormat) {\n return adapter.format(value, timeOpts.tooltipFormat);\n }\n return adapter.format(value, timeOpts.displayFormats.datetime);\n }\n _tickFormatFunction(time, index, ticks, format) {\n const options = this.options;\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const majorUnit = this._majorUnit;\n const minorFormat = unit && formats[unit];\n const majorFormat = majorUnit && formats[majorUnit];\n const tick = ticks[index];\n const major = majorUnit && majorFormat && tick && tick.major;\n const label = this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n const formatter = options.ticks.callback;\n return formatter ? callback(formatter, [label, index, ticks], this) : label;\n }\n generateTickLabels(ticks) {\n let i, ilen, tick;\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n tick.label = this._tickFormatFunction(tick.value, i, ticks);\n }\n }\n getDecimalForValue(value) {\n return value === null ? NaN : (value - this.min) / (this.max - this.min);\n }\n getPixelForValue(value) {\n const offsets = this._offsets;\n const pos = this.getDecimalForValue(value);\n return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return this.min + pos * (this.max - this.min);\n }\n _getLabelSize(label) {\n const ticksOpts = this.options.ticks;\n const tickLabelWidth = this.ctx.measureText(label).width;\n const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n const cosRotation = Math.cos(angle);\n const sinRotation = Math.sin(angle);\n const tickFontSize = this._resolveTickFontOptions(0).size;\n return {\n w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\n h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\n };\n }\n _getLabelCapacity(exampleTime) {\n const timeOpts = this.options.time;\n const displayFormats = timeOpts.displayFormats;\n const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n const size = this._getLabelSize(exampleLabel);\n const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n return capacity > 0 ? capacity : 1;\n }\n getDataTimestamps() {\n let timestamps = this._cache.data || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const metas = this.getMatchingVisibleMetas();\n if (this._normalized && metas.length) {\n return (this._cache.data = metas[0].controller.getAllParsedValues(this));\n }\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n }\n return (this._cache.data = this.normalize(timestamps));\n }\n getLabelTimestamps() {\n const timestamps = this._cache.labels || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const labels = this.getLabels();\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n timestamps.push(parse(this, labels[i]));\n }\n return (this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps));\n }\n normalize(values) {\n return _arrayUnique(values.sort(sorter));\n }\n}\nTimeScale.id = 'time';\nTimeScale.defaults = {\n bounds: 'data',\n adapters: {},\n time: {\n parser: false,\n unit: false,\n round: false,\n isoWeekday: false,\n minUnit: 'millisecond',\n displayFormats: {}\n },\n ticks: {\n source: 'auto',\n major: {\n enabled: false\n }\n }\n};\n\nfunction interpolate(table, val, reverse) {\n let lo = 0;\n let hi = table.length - 1;\n let prevSource, nextSource, prevTarget, nextTarget;\n if (reverse) {\n if (val >= table[lo].pos && val <= table[hi].pos) {\n ({lo, hi} = _lookupByKey(table, 'pos', val));\n }\n ({pos: prevSource, time: prevTarget} = table[lo]);\n ({pos: nextSource, time: nextTarget} = table[hi]);\n } else {\n if (val >= table[lo].time && val <= table[hi].time) {\n ({lo, hi} = _lookupByKey(table, 'time', val));\n }\n ({time: prevSource, pos: prevTarget} = table[lo]);\n ({time: nextSource, pos: nextTarget} = table[hi]);\n }\n const span = nextSource - prevSource;\n return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n constructor(props) {\n super(props);\n this._table = [];\n this._minPos = undefined;\n this._tableRange = undefined;\n }\n initOffsets() {\n const timestamps = this._getTimestampsForTable();\n const table = this._table = this.buildLookupTable(timestamps);\n this._minPos = interpolate(table, this.min);\n this._tableRange = interpolate(table, this.max) - this._minPos;\n super.initOffsets(timestamps);\n }\n buildLookupTable(timestamps) {\n const {min, max} = this;\n const items = [];\n const table = [];\n let i, ilen, prev, curr, next;\n for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n curr = timestamps[i];\n if (curr >= min && curr <= max) {\n items.push(curr);\n }\n }\n if (items.length < 2) {\n return [\n {time: min, pos: 0},\n {time: max, pos: 1}\n ];\n }\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n next = items[i + 1];\n prev = items[i - 1];\n curr = items[i];\n if (Math.round((next + prev) / 2) !== curr) {\n table.push({time: curr, pos: i / (ilen - 1)});\n }\n }\n return table;\n }\n _getTimestampsForTable() {\n let timestamps = this._cache.all || [];\n if (timestamps.length) {\n return timestamps;\n }\n const data = this.getDataTimestamps();\n const label = this.getLabelTimestamps();\n if (data.length && label.length) {\n timestamps = this.normalize(data.concat(label));\n } else {\n timestamps = data.length ? data : label;\n }\n timestamps = this._cache.all = timestamps;\n return timestamps;\n }\n getDecimalForValue(value) {\n return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n }\n}\nTimeSeriesScale.id = 'timeseries';\nTimeSeriesScale.defaults = TimeScale.defaults;\n\nvar scales = /*#__PURE__*/Object.freeze({\n__proto__: null,\nCategoryScale: CategoryScale,\nLinearScale: LinearScale,\nLogarithmicScale: LogarithmicScale,\nRadialLinearScale: RadialLinearScale,\nTimeScale: TimeScale,\nTimeSeriesScale: TimeSeriesScale\n});\n\nconst registerables = [\n controllers,\n elements,\n plugins,\n scales,\n];\n\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, index as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, elements, layouts, plugins, registerables, registry, scales };\n","import { Chart, BarController, DoughnutController, LineController, PieController, PolarAreaController, RadarController, BubbleController, ScatterController } from 'chart.js';\n\nvar ChartEmits;\n(function(ChartEmits) {\n ChartEmits[\"ChartRendered\"] = \"chart:rendered\";\n ChartEmits[\"ChartUpdated\"] = \"chart:updated\";\n ChartEmits[\"ChartDestroyed\"] = \"chart:destroyed\";\n ChartEmits[\"LabelsUpdated\"] = \"labels:updated\";\n})(ChartEmits || (ChartEmits = {}));\nfunction chartCreate(createChartFunction, chartData, chartOptions, context) {\n createChartFunction(chartData, chartOptions);\n if (context !== undefined) {\n context.emit(ChartEmits.ChartRendered);\n }\n}\nfunction chartUpdate(chart, context) {\n chart.update();\n if (context !== undefined) {\n context.emit(ChartEmits.ChartUpdated);\n }\n}\nfunction chartDestroy(chart, context) {\n chart.destroy();\n if (context !== undefined) {\n context.emit(ChartEmits.ChartDestroyed);\n }\n}\nfunction getChartData(data, datasetIdKey) {\n const nextData = {\n labels: typeof data.labels === \"undefined\" ? [] : [\n ...data.labels\n ],\n datasets: []\n };\n setChartDatasets(nextData, {\n ...data\n }, datasetIdKey);\n return nextData;\n}\nfunction setChartDatasets(oldData, newData, datasetIdKey) {\n const addedDatasets = [];\n oldData.datasets = newData.datasets.map((nextDataset)=>{\n // given the new set, find it's current match\n const currentDataset = oldData.datasets.find((dataset)=>dataset[datasetIdKey] === nextDataset[datasetIdKey]\n );\n // There is no original to update, so simply add new one\n if (!currentDataset || !nextDataset.data || addedDatasets.includes(currentDataset)) {\n return {\n ...nextDataset\n };\n }\n addedDatasets.push(currentDataset);\n Object.assign(currentDataset, nextDataset);\n return currentDataset;\n });\n}\nfunction setChartLabels(chart, labels, context) {\n chart.data.labels = labels;\n if (context !== undefined) {\n context.emit(ChartEmits.LabelsUpdated);\n }\n}\nfunction setChartOptions(chart, options) {\n chart.options = {\n ...options\n };\n}\nfunction compareData(newData, oldData) {\n // Get new and old DataSet Labels\n const newDatasetLabels = newData.datasets.map((dataset)=>{\n return dataset.label;\n });\n const oldDatasetLabels = oldData.datasets.map((dataset)=>{\n return dataset.label;\n });\n // Check if Labels are equal and if dataset length is equal\n return oldData.datasets.length === newData.datasets.length && newDatasetLabels.every((value, index)=>value === oldDatasetLabels[index]\n );\n}\nconst templateError = \"Please remove the tags from your chart component. See https://vue-chartjs.org/guide/#vue-single-file-components\";\n\nconst ANNOTATION_PLUGIN_KEY = \"annotation\";\nfunction generateChart(chartId, chartType, chartController) {\n let _chartRef = null;\n return {\n props: {\n chartData: {\n type: Object,\n required: true\n },\n chartOptions: {\n type: Object,\n default: ()=>{}\n },\n datasetIdKey: {\n type: String,\n default: \"label\"\n },\n chartId: {\n type: String,\n default: chartId\n },\n width: {\n type: Number,\n default: 400\n },\n height: {\n type: Number,\n default: 400\n },\n cssClasses: {\n type: String,\n default: \"\"\n },\n styles: {\n type: Object,\n default: ()=>{}\n },\n plugins: {\n type: Array,\n default: ()=>[]\n }\n },\n data () {\n return {\n _chart: null\n };\n },\n computed: {\n hasAnnotationPlugin () {\n var ref, ref1;\n const pluginSettings = (ref = this.chartOptions) === null || ref === void 0 ? void 0 : (ref1 = ref.plugins) === null || ref1 === void 0 ? void 0 : ref1[ANNOTATION_PLUGIN_KEY];\n return typeof pluginSettings !== \"undefined\";\n }\n },\n created () {\n Chart.register(chartController);\n },\n mounted () {\n _chartRef = {\n current: null\n };\n if (\"datasets\" in this.chartData && this.chartData.datasets.length > 0) {\n chartCreate(this.renderChart, this.chartData, this.chartOptions);\n this.$emit(ChartEmits.ChartRendered);\n }\n },\n watch: {\n chartData: {\n handler: function(newValue, oldValue) {\n this.chartDataHandler(newValue, oldValue);\n },\n deep: true\n },\n chartOptions: {\n handler: function(newValue) {\n this.chartOptionsHandler(newValue);\n },\n deep: true\n }\n },\n methods: {\n renderChart (data, options) {\n const currentChart = this.getCurrentChart();\n if (currentChart !== null) {\n chartDestroy(currentChart);\n this.$emit(ChartEmits.ChartDestroyed);\n }\n if (!this.$refs.canvas) {\n throw new Error(templateError);\n } else {\n const chartData = getChartData(data, this.datasetIdKey);\n const canvasEl2DContext = this.$refs.canvas.getContext(\"2d\");\n if (canvasEl2DContext !== null) {\n this.setCurrentChart(new Chart(canvasEl2DContext, {\n type: chartType,\n data: chartData,\n options,\n plugins: this.plugins\n }));\n }\n }\n },\n chartDataHandler (newValue, oldValue) {\n const newData = {\n ...newValue\n };\n const oldData = {\n ...oldValue\n };\n const currentChart = this.getCurrentChart();\n if (Object.keys(oldData).length > 0) {\n const isEqualLabelsAndDatasetsLength = compareData(newData, oldData);\n if (isEqualLabelsAndDatasetsLength && currentChart !== null) {\n setChartDatasets(currentChart.data, newData, this.datasetIdKey);\n if (newData.labels !== undefined) {\n setChartLabels(currentChart, newData.labels);\n this.$emit(ChartEmits.LabelsUpdated);\n }\n this.updateChart();\n this.$emit(ChartEmits.ChartUpdated);\n } else {\n if (currentChart !== null) {\n chartDestroy(currentChart);\n this.$emit(ChartEmits.ChartDestroyed);\n }\n chartCreate(this.renderChart, this.chartData, this.chartOptions);\n this.$emit(ChartEmits.ChartRendered);\n }\n } else {\n if (currentChart !== null) {\n chartDestroy(currentChart);\n this.$emit(ChartEmits.ChartDestroyed);\n }\n chartCreate(this.renderChart, this.chartData, this.chartOptions);\n this.$emit(ChartEmits.ChartRendered);\n }\n },\n chartOptionsHandler (options) {\n const currentChart = this.getCurrentChart();\n if (currentChart !== null) {\n setChartOptions(currentChart, options);\n this.updateChart();\n } else {\n chartCreate(this.renderChart, this.chartData, this.chartOptions);\n }\n },\n updateChart () {\n const currentChart = this.getCurrentChart();\n chartUpdate(currentChart);\n },\n getCurrentChart () {\n return this.hasAnnotationPlugin ? _chartRef.current : this.$data._chart;\n },\n setCurrentChart (chart) {\n this.hasAnnotationPlugin ? _chartRef.current = chart : this.$data._chart = chart;\n }\n },\n beforeDestroy () {\n const currentChart = this.getCurrentChart();\n if (currentChart !== null) {\n chartDestroy(currentChart);\n this.$emit(ChartEmits.ChartDestroyed);\n }\n },\n render: function(createElement) {\n return createElement(\"div\", {\n style: this.styles,\n class: this.cssClasses\n }, [\n createElement(\"canvas\", {\n attrs: {\n id: this.chartId,\n width: this.width,\n height: this.height\n },\n ref: \"canvas\"\n })\n ]);\n }\n };\n}\n/** @type Object */ const Bar = /* #__PURE__ */ generateChart(\"bar-chart\", \"bar\", BarController);\n/** @type Object */ const Doughnut = /* #__PURE__ */ generateChart(\"doughnut-chart\", \"doughnut\", DoughnutController);\n/** @type Object */ const Line = /* #__PURE__ */ generateChart(\"line-chart\", \"line\", LineController);\n/** @type Object */ const Pie = /* #__PURE__ */ generateChart(\"pie-chart\", \"pie\", PieController);\n/** @type Object */ const PolarArea = /* #__PURE__ */ generateChart(\"polar-chart\", \"polarArea\", PolarAreaController);\n/** @type Object */ const Radar = /* #__PURE__ */ generateChart(\"radar-chart\", \"radar\", RadarController);\n/** @type Object */ const Bubble = /* #__PURE__ */ generateChart(\"bubble-chart\", \"bubble\", BubbleController);\n/** @type Object */ const Scatter = /* #__PURE__ */ generateChart(\"scatter-chart\", \"scatter\", ScatterController);\n\nexport { Bar, Bubble, Doughnut, Line, Pie, PolarArea, Radar, Scatter, generateChart };\n//# sourceMappingURL=index.js.map\n","\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./client-group-overview-fill-rate-chart.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./client-group-overview-fill-rate-chart.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./client-group-overview-fill-rate-chart.vue?vue&type=template&id=c14281f4&\"\nimport script from \"./client-group-overview-fill-rate-chart.vue?vue&type=script&lang=js&\"\nexport * from \"./client-group-overview-fill-rate-chart.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VIcon } from 'vuetify/lib/components/VIcon';\ninstallComponents(component, {VIcon})\n","\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./dashboard-fill-rate-stats.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./dashboard-fill-rate-stats.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./dashboard-fill-rate-stats.vue?vue&type=template&id=17e846c2&\"\nimport script from \"./dashboard-fill-rate-stats.vue?vue&type=script&lang=js&\"\nexport * from \"./dashboard-fill-rate-stats.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-btn-toggle',{attrs:{\"value\":_vm.filter,\"group\":\"\",\"dense\":\"\",\"color\":\"primary\",\"mandatory\":\"\"},on:{\"change\":_vm.filterChanged}},_vm._l((!_vm.options ? _vm.defaultLayoutOptions : _vm.options),function(option){return _c('v-tooltip',{key:option.id,attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({staticClass:\"rounded\",attrs:{\"id\":option.id,\"small\":\"\"}},'v-btn',attrs,false),on),[(_vm.hasIcon)?_c('v-icon',{attrs:{\"small\":\"\"}},[_vm._v(_vm._s(option.icon))]):_vm._e(),(_vm.hasText)?_c('span',[_vm._v(_vm._s(option.text))]):_vm._e()],1)]}}],null,true)},[_c('span',{domProps:{\"textContent\":_vm._s(option.tooltip)}})])}),1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./client-fill-rate-filter.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./client-fill-rate-filter.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./client-fill-rate-filter.vue?vue&type=template&id=015ac1a2&\"\nimport script from \"./client-fill-rate-filter.vue?vue&type=script&lang=js&\"\nexport * from \"./client-fill-rate-filter.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VBtnToggle } from 'vuetify/lib/components/VBtnToggle';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VBtn,VBtnToggle,VIcon,VTooltip})\n","export default Object.freeze({\n /**\n * Will filter the fill rate stats by the selected month on the date strip\n */\n selectedMonth: 0,\n /**\n * Will filter the fill rate stats by the selected day on the date strip\n */\n selectedDate: 1,\n})\n","import { mapGetters } from 'vuex'\nimport { createFeatureDecisions } from '@/services/features/featureDecisions'\nimport clientGroupOverviewFeatureFactory from '@/services/features/clientGroupOverviewFeatureFactory'\n\nexport default {\n computed: {\n ...mapGetters({\n featureToggles: 'features/featureToggles',\n isClientGroupOverviewEnabled: 'auth/isClientGroupOverviewEnabled',\n }),\n featureDecisions() {\n return createFeatureDecisions(this.featureToggles)\n },\n clientGroupOverviewFeatureToggles() {\n return clientGroupOverviewFeatureFactory(\n this.featureDecisions,\n this.isClientGroupOverviewEnabled\n )\n },\n },\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!_vm.isLoading)?_c('v-expansion-panels',{attrs:{\"accordion\":\"\",\"flat\":\"\",\"multiple\":\"\",\"hover\":\"\"},model:{value:(_vm.accordion),callback:function ($$v) {_vm.accordion=$$v},expression:\"accordion\"}},_vm._l((_vm.bookings),function(client){return _c('v-expansion-panel',{key:client.clientId,staticClass:\"transparent\"},[_c('v-expansion-panel-header',[_vm._v(_vm._s(client.clientName))]),_c('v-expansion-panel-content',_vm._l((client.locations),function(location){return _c('div',{key:(\"booking-summary-card__location-\" + (location.locationId))},[_c('p',{staticClass:\"subtitle-2 font-weight-medium mt-4 mb-8\"},[_vm._v(\" \"+_vm._s(location.locationName)+\" \")]),_vm._l((location.bookings),function(booking){return _c('BookingCard',{key:(\"bookingcard_\" + (booking.id)),attrs:{\"booking\":booking},on:{\"viewCandidate\":_vm.viewCandidate,\"cancelBooking\":_vm.cancelBooking}})})],2)}),0)],1)}),1):_c('BookingCardListSkeletonLoader',{attrs:{\"count\":_vm.loadingCount}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',_vm._l((_vm.count),function(n){return _c('BookingCardSkeletonLoader',{key:(\"booking-card-list-item__skeleton-loader-\" + n)})}),1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',{staticClass:\"mb-5 booking-card custom-elevation rounded-xl\",attrs:{\"elevation\":\"0\"}},[_c('v-card-text',[_c('v-row',[_c('v-col',{staticClass:\"d-flex\",attrs:{\"cols\":\"12\",\"md\":\"6\",\"lg\":\"4\"}},[_c('div',[_c('v-lazy',[_c('CandidateImage',{attrs:{\"id\":-1,\"first-name\":\"skeleton\",\"last-name\":\"loader\",\"rounded\":\"\",\"size\":\"xxxl\"}})],1)],1),_c('div',[_c('v-skeleton-loader',{staticClass:\"mb-2\",attrs:{\"type\":\"heading\",\"width\":\"350\"}}),_c('v-skeleton-loader',{attrs:{\"type\":\"sentences\",\"width\":\"250\"}}),_c('v-skeleton-loader',{attrs:{\"type\":\"sentences\",\"width\":\"350\"}})],1)]),_c('v-col',{attrs:{\"cols\":\"12\",\"md\":\"6\",\"lg\":\"6\"}},[_c('div',[_c('v-skeleton-loader',{attrs:{\"type\":\"sentences\",\"width\":\"200\"}})],1)])],1),_c('div',{staticClass:\"clearfix\"})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./booking-card-skeleton-loader.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./booking-card-skeleton-loader.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./booking-card-skeleton-loader.vue?vue&type=template&id=0f4dd5df&\"\nimport script from \"./booking-card-skeleton-loader.vue?vue&type=script&lang=js&\"\nexport * from \"./booking-card-skeleton-loader.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VLazy } from 'vuetify/lib/components/VLazy';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSkeletonLoader } from 'vuetify/lib/components/VSkeletonLoader';\ninstallComponents(component, {VCard,VCardText,VCol,VLazy,VRow,VSkeletonLoader})\n","\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./booking-card-list-skeleton-loader.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./booking-card-list-skeleton-loader.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./booking-card-list-skeleton-loader.vue?vue&type=template&id=8b396476&\"\nimport script from \"./booking-card-list-skeleton-loader.vue?vue&type=script&lang=js&\"\nexport * from \"./booking-card-list-skeleton-loader.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',{staticClass:\"mb-5 booking-card custom-elevation rounded-xl\",attrs:{\"elevation\":\"0\"}},[_c('v-card-text',[_c('v-row',[_c('v-col',{staticClass:\"d-flex\",attrs:{\"cols\":\"12\",\"md\":\"6\",\"lg\":\"5\",\"xl\":\"4\"}},[_c('div',[_c('v-lazy',[_c('CandidateImage',{attrs:{\"id\":_vm.compFilledCandidateId,\"first-name\":_vm.compFilledCandidateFirstName,\"last-name\":_vm.compFilledCandidateLastName,\"rounded\":\"\",\"size\":\"xxxl\",\"clickable\":\"\"},on:{\"profileImgSrc\":_vm.updateProfileImage,\"click\":_vm.viewCandidate}})],1)],1),_c('div',{staticClass:\"flex-grow-1\"},[_c('BookingCardIdLabel',{attrs:{\"booking\":_vm.booking}}),_c('h5',{staticClass:\"font-weight-medium subtitle-1\"},[(_vm.hasCandidate)?_c('a',{attrs:{\"title\":\"View Profile\"},on:{\"click\":_vm.viewCandidate}},[_vm._v(\" \"+_vm._s(_vm.compCandidateFullName)+\" \")]):_c('span',[_vm._v(\" \"+_vm._s(this.$t('booking.unfilledBookingText'))+\" \")])]),_c('p',{class:[\n 'subtitle-1 font-weight-medium mb-0',\n _vm.compRunningLateClass ]},[_vm._v(\" \"+_vm._s(_vm.compDuration)+\" \"),(_vm.booking.runningLate)?_c('span',{staticClass:\"booking-card__running-late\"},[_vm._v(\" +\"+_vm._s(_vm.$t('booking.minsLateText', { count: _vm.howLate }))+\" \")]):_vm._e(),_c('span',{staticClass:\"booking-card__classification caption my-0\",attrs:{\"title\":\"Classification\"}},[_vm._v(\" \"+_vm._s(_vm.booking.type)+\" \")])]),(_vm.booking.replacing)?_c('div',{staticClass:\"booking-card__replacing\"},[_vm._v(\" \"+_vm._s(_vm.$t('booking.replacingLabel'))+\": \"),_c('span',{staticClass:\"d-inline-block font-weight-medium\"},[_vm._v(\" \"+_vm._s(((_vm.booking.replacing.firstName) + \" \" + (_vm.booking.replacing.lastName)))+\" \")])]):_vm._e(),(_vm.hasGrades)?_c('GradeList',{attrs:{\"grades\":_vm.booking.grades}}):_vm._e(),(_vm.hasCandidate)?_c('div',{staticClass:\"badges mb-2\"},[_c('CertPills',{attrs:{\"certifications\":_vm.booking.certChecks}}),_c('BookingListPolicies',{attrs:{\"policies\":_vm.booking.agreements}})],1):_vm._e()],1)]),_c('v-col',{attrs:{\"cols\":\"12\",\"md\":\"6\",\"lg\":\"5\",\"xl\":\"6\"}},[_c('div',{staticClass:\"booking-card__details\"},[(_vm.booking.roomNumber)?_c('div',{staticClass:\"booking-card__room\"},[_vm._v(\" \"+_vm._s(_vm.$t('booking.roomLabel'))+\": \"),_c('span',{staticClass:\"font-weight-medium\"},[_vm._v(\" \"+_vm._s(_vm.booking.roomNumber)+\" \")])]):_vm._e(),(_vm.booking.notes)?_c('div',{staticClass:\"booking-card__notes\"},[_vm._v(\" \"+_vm._s(_vm.$t('booking.notesLabel'))+\": \"),_c('span',[_vm._v(\" \"+_vm._s(_vm.booking.notes)+\" \")])]):_vm._e()])]),_c('v-col',{staticClass:\"d-flex align-center justify-end\",attrs:{\"cols\":\"12\",\"md\":\"12\",\"lg\":\"2\"}},[(_vm.canCreateBookings && !_vm.bookingIsPendingApproval)?_c('div',{staticClass:\"text-right d-flex flex-row-reverse align-center\"},[_c('BookingCardMenu',{on:{\"showCancelBookingDialog\":_vm.showCancelBookingDialog}}),(_vm.hasCandidate)?_c('BookingListFeedback',{attrs:{\"booking-id\":_vm.booking.id,\"candidate\":_vm.booking.candidate,\"feedback\":_vm.booking.feedback}}):_vm._e()],1):_vm._e()])],1),_c('div',{staticClass:\"clearfix\"})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[(_vm.certifications && _vm.certifications.length > 0)?_c('span',{staticClass:\"caption\"},[_vm._v(\" \"+_vm._s(_vm.$t('booking.certificationsLabel'))+\": \")]):_vm._e(),_vm._l((_vm.certifications),function(cert){return _c('v-chip',{key:cert.id,class:['transparent'],attrs:{\"small\":\"\",\"label\":\"\",\"outlined\":\"\"}},[_vm._v(\" \"+_vm._s(((cert.title) + \" #\" + (cert.reference)))+\" \")])})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./cert-pills.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./cert-pills.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./cert-pills.vue?vue&type=template&id=5fe10ad0&\"\nimport script from \"./cert-pills.vue?vue&type=script&lang=js&\"\nexport * from \"./cert-pills.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VChip } from 'vuetify/lib/components/VChip';\ninstallComponents(component, {VChip})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',{staticClass:\"policies\"},[_c('span',{class:['caption', _vm.isMobileViewPort ? 'd-block' : '']},[_vm._v(\" \"+_vm._s(_vm.compPoliciesText)+\" \")]),_vm._l((_vm.policies),function(p,index){return _c('v-chip',{key:'policy' + index,staticClass:\"caption transparent\",attrs:{\"title\":p.agreedUTC,\"x-small\":\"\"}},[(p.agreedUTC)?_c('v-icon',{attrs:{\"left\":\"\",\"x-small\":\"\",\"color\":\"green\"}},[_vm._v(\" mdi-check \")]):_c('v-icon',{attrs:{\"x-small\":\"\",\"left\":\"\",\"color\":\"red\"}},[_vm._v(\" mdi-close \")]),_vm._v(\" \"+_vm._s(p.typeName)+\" \")],1)})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./booking-list-policies.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./booking-list-policies.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./booking-list-policies.vue?vue&type=template&id=4b8b604c&\"\nimport script from \"./booking-list-policies.vue?vue&type=script&lang=js&\"\nexport * from \"./booking-list-policies.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VChip } from 'vuetify/lib/components/VChip';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\ninstallComponents(component, {VChip,VIcon})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.feedbackProvided)?_c('div',[_c('v-icon',{staticClass:\"mr-1\",attrs:{\"small\":\"\",\"color\":\"green\"}},[_vm._v(\"mdi-check\")]),_vm._v(\" \"+_vm._s(_vm.$t('feedback.feedbackProvidedText'))+\" \")],1):_c('div',[_c('v-btn',{staticClass:\"ml-n4 provide-feedback-btn\",attrs:{\"small\":\"\",\"text\":\"\"},on:{\"click\":_vm.openFeedback}},[_vm._v(_vm._s(_vm.$t('feedback.provideFeedbackBtn')))]),_c('v-dialog',{attrs:{\"persistent\":\"\",\"max-width\":\"600\"},model:{value:(_vm.dialog),callback:function ($$v) {_vm.dialog=$$v},expression:\"dialog\"}},[_c('v-card',{staticClass:\"feedback-dialog-content\"},[_c('v-card-title',[_vm._v(_vm._s(_vm.$t('feedback.quickFeedbackTitle')))]),_c('v-card-text',[_c('div',{staticClass:\"text-center mb-2\"},[_c('v-rating',{staticClass:\"quick-feedback-rating\",attrs:{\"background-color\":\"purple lighten-3\",\"color\":\"purple\",\"hover\":\"\",\"length\":\"5\"},model:{value:(_vm.rating),callback:function ($$v) {_vm.rating=$$v},expression:\"rating\"}}),_c('v-btn',{attrs:{\"text\":\"\",\"loading\":_vm.loadingUrl,\"disabled\":_vm.isSubmittingQuickFeedback},on:{\"click\":_vm.requestExtendedFeedback}},[_vm._v(_vm._s(_vm.$t('feedback.extendedFeedbackBtn')))])],1),_c('v-radio-group',{staticClass:\"preferred-radio-group\",attrs:{\"mandatory\":\"\",\"column\":\"\"},scopedSlots:_vm._u([{key:\"label\",fn:function(){return [_c('div',[_vm._v(\" \"+_vm._s(_vm.$t('feedback.haveBackQuestionText', Object.assign({}, _vm.candidate)))+\" \")])]},proxy:true}]),model:{value:(_vm.haveBack),callback:function ($$v) {_vm.haveBack=$$v},expression:\"haveBack\"}},[_c('v-radio',{class:(\"preferred-radio-\" + (_vm.CandidateHaveBack.PREFERRED)),attrs:{\"label\":_vm.$t('feedback.haveBackPreferredOption'),\"value\":_vm.CandidateHaveBack.PREFERRED}}),_c('v-radio',{class:(\"preferred-radio-\" + (_vm.CandidateHaveBack.YES)),attrs:{\"label\":_vm.$t('feedback.haveBackYesOption'),\"value\":_vm.CandidateHaveBack.YES}}),_c('v-radio',{class:(\"preferred-radio-\" + (_vm.CandidateHaveBack.NO)),attrs:{\"label\":_vm.$t('feedback.haveBackNoOption'),\"value\":_vm.CandidateHaveBack.NO}})],1),_c('v-expand-transition',[(_vm.haveBack === _vm.CandidateHaveBack.NO)?_c('v-textarea',{staticClass:\"comment-textarea\",attrs:{\"outlined\":\"\",\"label\":_vm.$t('feedback.haveBackCommentText'),\"rules\":_vm.commentRules,\"counter\":\"\"},on:{\"update:error\":_vm.commentTextErrorUpdate},model:{value:(_vm.commentText),callback:function ($$v) {_vm.commentText=$$v},expression:\"commentText\"}}):_vm._e()],1)],1),_c('v-card-actions',[_c('v-spacer'),_c('v-btn',{staticClass:\"cancel-btn\",attrs:{\"text\":\"\",\"disabled\":_vm.isSubmittingQuickFeedback},on:{\"click\":_vm.resetFeedback}},[_vm._v(\" \"+_vm._s(_vm.$t('feedback.cancelQuickFeedbackBtn'))+\" \")]),_c('v-btn',{staticClass:\"save-btn\",attrs:{\"color\":\"primary\",\"loading\":_vm.isSubmittingQuickFeedback,\"disabled\":!_vm.formValid,\"text\":\"\"},on:{\"click\":_vm.saveFeedback}},[_vm._v(\" \"+_vm._s(_vm.$t('feedback.saveQuickFeedbackBtn'))+\" \")])],1),(_vm.hasErrors)?_c('ErrorAlert',{staticClass:\"ma-0\",attrs:{\"type\":\"error\",\"error\":_vm.error}}):_vm._e()],1)],1)],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export const CandidateHaveBack = Object.freeze({\n /**\n * Yes, have the candidate back.\n */\n YES: 1,\n /**\n * No, don't have the candidate back. (Set candidate as non-preferred)\n */\n NO: 2,\n /**\n * Yes, also set the candidate as preferred.\n */\n PREFERRED: 3,\n})\n","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./booking-list-feedback.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./booking-list-feedback.vue?vue&type=script&lang=js&\"","// Styles\nimport './VRadio.sass'\n\n// Components\nimport VRadioGroup from './VRadioGroup'\nimport VLabel from '../VLabel'\nimport VIcon from '../VIcon'\nimport VInput from '../VInput'\n\n// Mixins\nimport BindsAttrs from '../../mixins/binds-attrs'\nimport Colorable from '../../mixins/colorable'\nimport { factory as GroupableFactory } from '../../mixins/groupable'\nimport Rippleable from '../../mixins/rippleable'\nimport Themeable from '../../mixins/themeable'\nimport Selectable, { prevent } from '../../mixins/selectable'\n\n// Utilities\nimport { getSlot } from '../../util/helpers'\n\n// Types\nimport { VNode, VNodeData } from 'vue'\nimport mixins from '../../util/mixins'\nimport { mergeListeners } from '../../util/mergeData'\n\nconst baseMixins = mixins(\n BindsAttrs,\n Colorable,\n Rippleable,\n GroupableFactory('radioGroup'),\n Themeable\n)\n\ninterface options extends InstanceType {\n radioGroup: InstanceType\n}\n\n/* @vue/component */\nexport default baseMixins.extend().extend({\n name: 'v-radio',\n\n inheritAttrs: false,\n\n props: {\n disabled: Boolean,\n id: String,\n label: String,\n name: String,\n offIcon: {\n type: String,\n default: '$radioOff',\n },\n onIcon: {\n type: String,\n default: '$radioOn',\n },\n readonly: Boolean,\n value: {\n default: null,\n },\n },\n\n data: () => ({\n isFocused: false,\n }),\n\n computed: {\n classes (): object {\n return {\n 'v-radio--is-disabled': this.isDisabled,\n 'v-radio--is-focused': this.isFocused,\n ...this.themeClasses,\n ...this.groupClasses,\n }\n },\n computedColor (): string | undefined {\n return Selectable.options.computed.computedColor.call(this)\n },\n computedIcon (): string {\n return this.isActive\n ? this.onIcon\n : this.offIcon\n },\n computedId (): string {\n return VInput.options.computed.computedId.call(this)\n },\n hasLabel: VInput.options.computed.hasLabel,\n hasState (): boolean {\n return (this.radioGroup || {}).hasState\n },\n isDisabled (): boolean {\n return this.disabled || (\n !!this.radioGroup &&\n this.radioGroup.isDisabled\n )\n },\n isReadonly (): boolean {\n return this.readonly || (\n !!this.radioGroup &&\n this.radioGroup.isReadonly\n )\n },\n computedName (): string {\n if (this.name || !this.radioGroup) {\n return this.name\n }\n\n return this.radioGroup.name || `radio-${this.radioGroup._uid}`\n },\n rippleState (): string | undefined {\n return Selectable.options.computed.rippleState.call(this)\n },\n validationState (): string | undefined {\n return (this.radioGroup || {}).validationState || this.computedColor\n },\n },\n\n methods: {\n genInput (args: any) {\n // We can't actually use the mixin directly because\n // it's made for standalone components, but its\n // genInput method is exactly what we need\n return Selectable.options.methods.genInput.call(this, 'radio', args)\n },\n genLabel () {\n if (!this.hasLabel) return null\n\n return this.$createElement(VLabel, {\n on: {\n // Label shouldn't cause the input to focus\n click: prevent,\n },\n attrs: {\n for: this.computedId,\n },\n props: {\n color: this.validationState,\n focused: this.hasState,\n },\n }, getSlot(this, 'label') || this.label)\n },\n genRadio () {\n const { title, ...radioAttrs } = this.attrs$\n\n return this.$createElement('div', {\n staticClass: 'v-input--selection-controls__input',\n }, [\n this.$createElement(VIcon, this.setTextColor(this.validationState, {\n props: {\n dense: this.radioGroup && this.radioGroup.dense,\n },\n }), this.computedIcon),\n this.genInput({\n name: this.computedName,\n value: this.value,\n ...radioAttrs,\n }),\n this.genRipple(this.setTextColor(this.rippleState)),\n ])\n },\n onFocus (e: Event) {\n this.isFocused = true\n this.$emit('focus', e)\n },\n onBlur (e: Event) {\n this.isFocused = false\n this.$emit('blur', e)\n },\n onChange () {\n if (this.isDisabled || this.isReadonly || this.isActive) return\n\n this.toggle()\n },\n onKeydown: () => {}, // Override default with noop\n },\n\n render (h): VNode {\n const data: VNodeData = {\n staticClass: 'v-radio',\n class: this.classes,\n on: mergeListeners({\n click: this.onChange,\n }, this.listeners$),\n attrs: { title: this.attrs$.title },\n }\n\n return h('div', data, [\n this.genRadio(),\n this.genLabel(),\n ])\n },\n})\n","// Styles\nimport '../../styles/components/_selection-controls.sass'\nimport './VRadioGroup.sass'\n\n// Extensions\nimport VInput from '../VInput'\nimport { BaseItemGroup } from '../VItemGroup/VItemGroup'\n\n// Types\nimport mixins from '../../util/mixins'\nimport { PropType } from 'vue'\n\nconst baseMixins = mixins(\n BaseItemGroup,\n VInput\n)\n\n/* @vue/component */\nexport default baseMixins.extend({\n name: 'v-radio-group',\n\n provide () {\n return {\n radioGroup: this,\n }\n },\n\n props: {\n column: {\n type: Boolean,\n default: true,\n },\n height: {\n type: [Number, String],\n default: 'auto',\n },\n name: String,\n row: Boolean,\n // If no value set on VRadio\n // will match valueComparator\n // force default to null\n value: null as unknown as PropType,\n },\n\n computed: {\n classes (): object {\n return {\n ...VInput.options.computed.classes.call(this),\n 'v-input--selection-controls v-input--radio-group': true,\n 'v-input--radio-group--column': this.column && !this.row,\n 'v-input--radio-group--row': this.row,\n }\n },\n },\n\n methods: {\n genDefaultSlot () {\n return this.$createElement('div', {\n staticClass: 'v-input--radio-group__input',\n attrs: {\n id: this.id,\n role: 'radiogroup',\n 'aria-labelledby': this.computedId,\n },\n }, VInput.options.methods.genDefaultSlot.call(this))\n },\n genInputSlot () {\n const render = VInput.options.methods.genInputSlot.call(this)\n\n delete render.data!.on!.click\n\n return render\n },\n genLabel () {\n const label = VInput.options.methods.genLabel.call(this)\n\n if (!label) return null\n\n label.data!.attrs!.id = this.computedId\n // WAI considers this an orphaned label\n delete label.data!.attrs!.for\n label.tag = 'legend'\n\n return label\n },\n onClick: BaseItemGroup.options.methods.onClick,\n },\n\n render (h) {\n const vnode = VInput.options.render.call(this, h)\n\n this._b(vnode.data!, 'div', this.attrs$)\n\n return vnode\n },\n})\n","// Styles\nimport './VRating.sass'\n\n// Components\nimport VIcon from '../VIcon'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Delayable from '../../mixins/delayable'\nimport Sizeable from '../../mixins/sizeable'\nimport Rippleable from '../../mixins/rippleable'\nimport Themeable from '../../mixins/themeable'\n\n// Utilities\nimport { createRange } from '../../util/helpers'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode, VNodeDirective, VNodeChildren } from 'vue'\n\ntype ItemSlotProps = {\n index: number\n value: number\n isFilled: boolean\n isHalfFilled?: boolean | undefined\n isHovered: boolean\n isHalfHovered?: boolean | undefined\n click: Function\n}\n\n/* @vue/component */\nexport default mixins(\n Colorable,\n Delayable,\n Rippleable,\n Sizeable,\n Themeable\n).extend({\n name: 'v-rating',\n\n props: {\n backgroundColor: {\n type: String,\n default: 'accent',\n },\n color: {\n type: String,\n default: 'primary',\n },\n clearable: Boolean,\n dense: Boolean,\n emptyIcon: {\n type: String,\n default: '$ratingEmpty',\n },\n fullIcon: {\n type: String,\n default: '$ratingFull',\n },\n halfIcon: {\n type: String,\n default: '$ratingHalf',\n },\n halfIncrements: Boolean,\n hover: Boolean,\n length: {\n type: [Number, String],\n default: 5,\n },\n readonly: Boolean,\n size: [Number, String],\n value: {\n type: Number,\n default: 0,\n },\n iconLabel: {\n type: String,\n default: '$vuetify.rating.ariaLabel.icon',\n },\n },\n\n data () {\n return {\n hoverIndex: -1,\n internalValue: this.value,\n }\n },\n\n computed: {\n directives (): VNodeDirective[] {\n if (this.readonly || !this.ripple) return []\n\n return [{\n name: 'ripple',\n value: { circle: true },\n } as VNodeDirective]\n },\n iconProps (): object {\n const {\n dark,\n large,\n light,\n medium,\n small,\n size,\n xLarge,\n xSmall,\n } = this.$props\n\n return {\n dark,\n large,\n light,\n medium,\n size,\n small,\n xLarge,\n xSmall,\n }\n },\n isHovering (): boolean {\n return this.hover && this.hoverIndex >= 0\n },\n },\n\n watch: {\n internalValue (val) {\n val !== this.value && this.$emit('input', val)\n },\n value (val) {\n this.internalValue = val\n },\n },\n\n methods: {\n createClickFn (i: number): Function {\n return (e: MouseEvent) => {\n if (this.readonly) return\n\n const newValue = this.genHoverIndex(e, i)\n if (this.clearable && this.internalValue === newValue) {\n this.internalValue = 0\n } else {\n this.internalValue = newValue\n }\n }\n },\n createProps (i: number): ItemSlotProps {\n const props: ItemSlotProps = {\n index: i,\n value: this.internalValue,\n click: this.createClickFn(i),\n isFilled: Math.floor(this.internalValue) > i,\n isHovered: Math.floor(this.hoverIndex) > i,\n }\n\n if (this.halfIncrements) {\n props.isHalfHovered = !props.isHovered && (this.hoverIndex - i) % 1 > 0\n props.isHalfFilled = !props.isFilled && (this.internalValue - i) % 1 > 0\n }\n\n return props\n },\n genHoverIndex (e: MouseEvent, i: number) {\n let isHalf = this.isHalfEvent(e)\n\n if (\n this.halfIncrements &&\n this.$vuetify.rtl\n ) {\n isHalf = !isHalf\n }\n\n return i + (isHalf ? 0.5 : 1)\n },\n getIconName (props: ItemSlotProps): string {\n const isFull = this.isHovering ? props.isHovered : props.isFilled\n const isHalf = this.isHovering ? props.isHalfHovered : props.isHalfFilled\n\n return isFull ? this.fullIcon : isHalf ? this.halfIcon : this.emptyIcon\n },\n getColor (props: ItemSlotProps): string {\n if (this.isHovering) {\n if (props.isHovered || props.isHalfHovered) return this.color\n } else {\n if (props.isFilled || props.isHalfFilled) return this.color\n }\n\n return this.backgroundColor\n },\n isHalfEvent (e: MouseEvent): boolean {\n if (this.halfIncrements) {\n const rect = e.target && (e.target as HTMLElement).getBoundingClientRect()\n if (rect && (e.pageX - rect.left) < rect.width / 2) return true\n }\n\n return false\n },\n onMouseEnter (e: MouseEvent, i: number): void {\n this.runDelay('open', () => {\n this.hoverIndex = this.genHoverIndex(e, i)\n })\n },\n onMouseLeave (): void {\n this.runDelay('close', () => (this.hoverIndex = -1))\n },\n genItem (i: number): VNode | VNodeChildren | string {\n const props = this.createProps(i)\n\n if (this.$scopedSlots.item) return this.$scopedSlots.item(props)\n\n const listeners: Record = {\n click: props.click,\n }\n\n if (this.hover) {\n listeners.mouseenter = (e: MouseEvent) => this.onMouseEnter(e, i)\n listeners.mouseleave = this.onMouseLeave\n\n if (this.halfIncrements) {\n listeners.mousemove = (e: MouseEvent) => this.onMouseEnter(e, i)\n }\n }\n\n return this.$createElement(VIcon, this.setTextColor(this.getColor(props), {\n attrs: {\n 'aria-label': this.$vuetify.lang.t(this.iconLabel, i + 1, Number(this.length)),\n },\n directives: this.directives,\n props: this.iconProps,\n on: listeners,\n }), [this.getIconName(props)])\n },\n },\n\n render (h): VNode {\n const children = createRange(Number(this.length)).map(i => this.genItem(i))\n\n return h('div', {\n staticClass: 'v-rating',\n class: {\n 'v-rating--readonly': this.readonly,\n 'v-rating--dense': this.dense,\n },\n }, children)\n },\n})\n","import { render, staticRenderFns } from \"./booking-list-feedback.vue?vue&type=template&id=5daa7067&\"\nimport script from \"./booking-list-feedback.vue?vue&type=script&lang=js&\"\nexport * from \"./booking-list-feedback.vue?vue&type=script&lang=js&\"\nimport style0 from \"./booking-list-feedback.vue?vue&type=style&index=0&lang=scss&module=true&\"\n\n\n\n\nfunction injectStyles (context) {\n \n this[\"$style\"] = (style0.locals || style0)\n\n}\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n injectStyles,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VExpandTransition } from 'vuetify/lib/components/transitions';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VRadio } from 'vuetify/lib/components/VRadioGroup';\nimport { VRadioGroup } from 'vuetify/lib/components/VRadioGroup';\nimport { VRating } from 'vuetify/lib/components/VRating';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VTextarea } from 'vuetify/lib/components/VTextarea';\ninstallComponents(component, {VBtn,VCard,VCardActions,VCardText,VCardTitle,VDialog,VExpandTransition,VIcon,VRadio,VRadioGroup,VRating,VSpacer,VTextarea})\n","// eslint-disable-next-line no-unused-vars\nimport { BookingStatus } from './BookingStatus'\n\n/**\n * A booking status enum that simplifies the categorisation of bookings into more\n * meaningful and useful groups.\n */\nexport default Object.freeze({\n /**\n * A booking that requires approval from a privileged user.\n * Bookings created by a user that has the pending approval permission.\n * Translates to status: {@link BookingStatus.BOOKING_PENDING_REQUIRES_CLIENT_APPROVAL}\n */\n pendingApproval: 'pendingApproval',\n /**\n * A booking filled with a candidate and has been confirmed with the client and\n * is not tentative (status: {@link BookingStatus.TENTATIVE_FILLED}).\n */\n filled: 'filled',\n /**\n * Any booking that is not filled with a candidate and doesn't fit into any other\n * category\n */\n unfilled: 'unfilled',\n /**\n * The booking was pending approval by client and was rejected.\n * Translates to status: {@link BookingStatus.CLIENT_REJECTED_BOOKING_REQUEST}\n */\n rejected: 'rejected',\n})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-menu',{attrs:{\"disabled\":_vm.disabled,\"offset-y\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({staticClass:\"booking-card-menu__activation-btn\",attrs:{\"icon\":\"\"}},'v-btn',attrs,false),on),[_c('v-icon',[_vm._v(\"mdi-dots-vertical\")])],1)]}}])},[_c('v-list',[_c('v-list-item',{staticClass:\"booking-card-menu__cancel-action-btn\",on:{\"click\":function($event){return _vm.$emit('showCancelBookingDialog')}}},[_c('v-list-item-icon',[_c('v-icon',{attrs:{\"color\":\"red\",\"left\":\"\"}},[_vm._v(\"mdi-close\")])],1),_c('v-list-item-content',[_c('v-list-item-title',{staticClass:\"red--text\"},[_vm._v(\" \"+_vm._s(_vm.$t('booking.cancelBookingBtn'))+\" \")])],1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./booking-card-menu.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./booking-card-menu.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./booking-card-menu.vue?vue&type=template&id=95c8c480&\"\nimport script from \"./booking-card-menu.vue?vue&type=script&lang=js&\"\nexport * from \"./booking-card-menu.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemIcon } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VMenu } from 'vuetify/lib/components/VMenu';\ninstallComponents(component, {VBtn,VIcon,VList,VListItem,VListItemContent,VListItemIcon,VListItemTitle,VMenu})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('p',{staticClass:\"booking-card__id-label caption mb-0 mr-4 d-flex align-center\"},[_vm._v(\" \"+_vm._s((\"#\" + (_vm.booking.id)))+\" \"),(_vm.isABlockBooking)?_c('span',{staticClass:\"cursor-help\"},[_c('v-tooltip',{attrs:{\"right\":!_vm.isMobileViewPort,\"top\":_vm.isMobileViewPort},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('span',_vm._g(_vm._b({},'span',attrs,false),on),[_c('span',{staticClass:\"ml-1\"},[_vm._v(\" \"+_vm._s((\" - \" + (_vm.booking.blockText)))+\" \")])])]}}],null,false,2495702478)},[_c('span',[_vm._v(\" \"+_vm._s(_vm.booking.blockTooltipText)+\" \")])])],1):_vm._e(),(_vm.bookingIsPendingApproval)?_c('v-chip',{staticClass:\"ml-2\",attrs:{\"text\":\"\",\"color\":\"warning\",\"x-small\":\"\"}},[_vm._v(_vm._s(_vm.$t('booking.pendingApproval.label')))]):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./booking-card-id-label.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./booking-card-id-label.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./booking-card-id-label.vue?vue&type=template&id=53fe0aef&\"\nimport script from \"./booking-card-id-label.vue?vue&type=script&lang=js&\"\nexport * from \"./booking-card-id-label.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VChip } from 'vuetify/lib/components/VChip';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VChip,VTooltip})\n","\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./booking-card.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./booking-card.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./booking-card.vue?vue&type=template&id=9e47ac54&\"\nimport script from \"./booking-card.vue?vue&type=script&lang=js&\"\nexport * from \"./booking-card.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VLazy } from 'vuetify/lib/components/VLazy';\nimport { VRow } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VCard,VCardText,VCol,VLazy,VRow})\n","\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./booking-summary-card-list.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./booking-summary-card-list.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./booking-summary-card-list.vue?vue&type=template&id=4b00b9d3&\"\nimport script from \"./booking-summary-card-list.vue?vue&type=script&lang=js&\"\nexport * from \"./booking-summary-card-list.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VExpansionPanel } from 'vuetify/lib/components/VExpansionPanel';\nimport { VExpansionPanelContent } from 'vuetify/lib/components/VExpansionPanel';\nimport { VExpansionPanelHeader } from 'vuetify/lib/components/VExpansionPanel';\nimport { VExpansionPanels } from 'vuetify/lib/components/VExpansionPanel';\ninstallComponents(component, {VExpansionPanel,VExpansionPanelContent,VExpansionPanelHeader,VExpansionPanels})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!_vm.isLoading)?_c('v-expansion-panels',{attrs:{\"accordion\":\"\",\"flat\":\"\",\"multiple\":\"\",\"hover\":\"\"},model:{value:(_vm.accordion),callback:function ($$v) {_vm.accordion=$$v},expression:\"accordion\"}},_vm._l((_vm.bookings),function(client){return _c('v-expansion-panel',{key:client.clientId,staticClass:\"transparent\"},[_c('v-expansion-panel-header',[_vm._v(_vm._s(client.clientName))]),_c('v-expansion-panel-content',_vm._l((client.locations),function(location){return _c('div',{key:(\"booking-summary-card__location-\" + (location.locationId))},[_c('v-toolbar',{staticClass:\"transparent mb-4\",attrs:{\"flat\":\"\",\"dense\":\"\"}},[_c('v-toolbar-title',{staticClass:\"subtitle-2 font-weight-medium\"},[_vm._v(\" \"+_vm._s(location.locationName)+\" \")])],1),_c('BookingList',{attrs:{\"bookings\":location.bookings},on:{\"cancelBooking\":_vm.cancelBooking}})],1)}),0)],1)}),1):_c('BookingListGroupSkeleton',{attrs:{\"rows\":_vm.loadingCount}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',_vm._l((_vm.groups),function(group,index){return _c('div',{key:index},[_c('v-skeleton-loader',{staticClass:\"mb-6 ml-2\",attrs:{\"type\":\"heading\",\"width\":\"500px\"}}),_c('BookingListSkeleton',{attrs:{\"rows\":_vm.rows}})],1)}),0)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('v-data-table',{staticClass:\"custom-elevation rounded-xl mb-8\",attrs:{\"headers\":_vm.columns,\"items\":_vm.compMockBookingData,\"hide-default-footer\":\"\",\"disable-sort\":\"\"},scopedSlots:_vm._u([{key:\"item.id\",fn:function(){return [_c('v-skeleton-loader',{attrs:{\"type\":\"text\"}})]},proxy:true},{key:\"item.name\",fn:function(){return [_c('v-skeleton-loader',{attrs:{\"type\":\"text\"}})]},proxy:true},{key:\"item.time\",fn:function(){return [_c('v-skeleton-loader',{attrs:{\"type\":\"text\"}})]},proxy:true},{key:\"item.type\",fn:function(){return [_c('v-skeleton-loader',{attrs:{\"type\":\"text\"}})]},proxy:true},{key:\"item.grades\",fn:function(){return [_c('div',{staticClass:\"d-flex flex-rows\"},[_c('v-skeleton-loader',{staticClass:\"mr-4\",attrs:{\"type\":\"chip\"}}),_c('v-skeleton-loader',{attrs:{\"type\":\"chip\"}})],1)]},proxy:true},{key:\"item.certifications\",fn:function(){return [_c('div',{staticClass:\"d-flex flex-rows\"},[_c('v-skeleton-loader',{staticClass:\"mr-4\",attrs:{\"type\":\"chip\"}}),_c('v-skeleton-loader',{attrs:{\"type\":\"chip\"}})],1)]},proxy:true},{key:\"item.policies\",fn:function(){return [_c('div',{staticClass:\"d-flex flex-rows\"},[_c('v-skeleton-loader',{staticClass:\"mr-4\",attrs:{\"type\":\"chip\"}}),_c('v-skeleton-loader',{attrs:{\"type\":\"chip\"}})],1)]},proxy:true},{key:\"item.replacing\",fn:function(){return [_c('v-skeleton-loader',{attrs:{\"type\":\"text\"}})]},proxy:true},{key:\"item.feedback\",fn:function(){return [_c('v-btn',{attrs:{\"small\":\"\",\"text\":\"\",\"disabled\":\"\"}},[_vm._v(\" \"+_vm._s(_vm.$t('feedback.provideFeedbackBtn'))+\" \")])]},proxy:true},{key:\"item.actions\",fn:function(){return [_c('v-btn',{attrs:{\"disabled\":\"\",\"icon\":\"\"}},[_c('v-icon',[_vm._v(\"mdi-dots-vertical\")])],1)]},proxy:true}],null,true)})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { mapGetters } from 'vuex'\n\nexport default {\n computed: {\n ...mapGetters({\n getSelectedClients: 'client/getSelectedClients',\n hasCreateBookingPermissionForAtleastOneClientLocationByClientIds:\n 'auth/hasCreateBookingPermissionForAtleastOneClientLocationByClientIds',\n }),\n canCreateBookings() {\n return this.hasCreateBookingPermissionForAtleastOneClientLocationByClientIds(\n this.getSelectedClients\n )\n },\n columns() {\n const headers = [\n {\n id: 'booking-list-table__id',\n value: 'id',\n text: this.$t('booking.idLabel'),\n align: 'left',\n width: '12%',\n display: true,\n },\n {\n id: 'booking-list-table__name',\n value: 'name',\n text: this.$t('booking.nameLabel'),\n align: 'left',\n width: '14%',\n display: true,\n },\n {\n id: 'booking-list-table__time',\n value: 'time',\n text: this.$t('booking.timeLabel'),\n align: 'left',\n width: '8%',\n display: true,\n },\n {\n id: 'booking-list-table__type',\n value: 'type',\n text: this.$t('booking.typeLabel'),\n align: 'left',\n width: '12%',\n display: true,\n },\n {\n id: 'booking-list-table__grades',\n value: 'grades',\n text: this.$t('booking.gradesLabel'),\n align: 'left',\n width: '10%',\n display: true,\n },\n {\n id: 'booking-list-table__certifications',\n value: 'certifications',\n text: this.$t('booking.certificationsLabel'),\n align: 'left',\n width: '10%',\n display: true,\n },\n {\n id: 'booking-list-table__policies',\n value: 'policies',\n text: this.$t('booking.policiesLabel'),\n align: 'left',\n width: '10%',\n display: true,\n },\n {\n id: 'booking-list-table__replacing',\n value: 'replacing',\n text: this.$t('booking.replacingLabel'),\n align: 'left',\n width: '12%',\n display: true,\n },\n {\n id: 'booking-list-table__feedback',\n value: 'feedback',\n text: this.$t('booking.feedbackLabel'),\n align: 'left',\n width: '8%',\n display: this.canCreateBookings,\n },\n {\n id: 'booking-list-table__actions',\n value: 'actions',\n text: null,\n align: 'right',\n width: '4%',\n display: this.canCreateBookings,\n },\n ]\n\n return headers.filter((header) => header.display)\n },\n },\n}\n","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./booking-list-skeleton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./booking-list-skeleton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./booking-list-skeleton.vue?vue&type=template&id=a5b4eed4&scoped=true&\"\nimport script from \"./booking-list-skeleton.vue?vue&type=script&lang=js&\"\nexport * from \"./booking-list-skeleton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./booking-list-skeleton.vue?vue&type=style&index=0&id=a5b4eed4&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"a5b4eed4\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VDataTable } from 'vuetify/lib/components/VDataTable';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VSkeletonLoader } from 'vuetify/lib/components/VSkeletonLoader';\ninstallComponents(component, {VBtn,VDataTable,VIcon,VSkeletonLoader})\n","\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./booking-list-group-skeleton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./booking-list-group-skeleton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./booking-list-group-skeleton.vue?vue&type=template&id=1a2bee92&\"\nimport script from \"./booking-list-group-skeleton.vue?vue&type=script&lang=js&\"\nexport * from \"./booking-list-group-skeleton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VSkeletonLoader } from 'vuetify/lib/components/VSkeletonLoader';\ninstallComponents(component, {VSkeletonLoader})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('v-data-table',{staticClass:\"custom-elevation rounded-xl mb-8\",attrs:{\"headers\":_vm.columns,\"items\":_vm.bookings,\"hide-default-footer\":\"\",\"disable-sort\":\"\"},scopedSlots:_vm._u([{key:\"item.id\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('div',{staticClass:\"d-flex align-center\"},[_vm._v(\" \"+_vm._s((\"#\" + (item.id)))+\" \"),(_vm.determineIfBookingHasGroup(item))?_c('span',{staticClass:\"cursor-help\"},[_c('v-tooltip',{attrs:{\"right\":!_vm.isMobileViewPort,\"top\":_vm.isMobileViewPort},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('span',_vm._g(_vm._b({},'span',attrs,false),on),[_vm._v(\" \"+_vm._s((\" - \" + (item.blockText)))+\" \")])]}}],null,true)},[_c('span',[_vm._v(\" \"+_vm._s(item.blockTooltipText)+\" \")])])],1):_vm._e()]),(_vm.bookingIsPendingApproval(item))?_c('v-chip',{attrs:{\"text\":\"\",\"color\":\"warning\",\"x-small\":\"\"}},[_vm._v(_vm._s(_vm.$t('booking.pendingApproval.label')))]):_vm._e()]}},{key:\"item.name\",fn:function(ref){\nvar item = ref.item;\nreturn [_vm._v(\" \"+_vm._s(_vm.generateBookingNameString(item))+\" \")]}},{key:\"item.time\",fn:function(ref){\nvar item = ref.item;\nreturn [_vm._v(\" \"+_vm._s(_vm.generateBookingTimeRangeString(item))+\" \")]}},{key:\"item.grades\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('GradeList',{attrs:{\"grades\":item.grades}})]}},{key:\"item.certifications\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('CertPills',{attrs:{\"certifications\":item.certChecks}})]}},{key:\"item.policies\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('BookingListPolicies',{attrs:{\"policies\":item.agreements}})]}},{key:\"item.replacing\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('span',{staticClass:\"booking-list__replacing\"},[_vm._v(\" \"+_vm._s(_vm.generateReplacingString(item))+\" \")])]}},{key:\"item.feedback\",fn:function(ref){\nvar item = ref.item;\nreturn [(_vm.bookingHasCandidate(item) && !_vm.bookingIsPendingApproval(item))?_c('BookingListFeedback',{attrs:{\"booking-id\":item.id,\"candidate\":item.candidate,\"feedback\":item.feedback}}):_vm._e()]}},{key:\"item.actions\",fn:function(ref){\nvar item = ref.item;\nreturn [(!_vm.bookingIsPendingApproval(item))?_c('BookingCardMenu',{on:{\"showCancelBookingDialog\":function($event){return _vm.showCancelBookingDialog(item)}}}):_vm._e()]}}],null,true)})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./booking-list.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./booking-list.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./booking-list.vue?vue&type=template&id=28f88cae&\"\nimport script from \"./booking-list.vue?vue&type=script&lang=js&\"\nexport * from \"./booking-list.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VChip } from 'vuetify/lib/components/VChip';\nimport { VDataTable } from 'vuetify/lib/components/VDataTable';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VChip,VDataTable,VTooltip})\n","\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./booking-summary-list.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./booking-summary-list.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./booking-summary-list.vue?vue&type=template&id=300b1834&\"\nimport script from \"./booking-summary-list.vue?vue&type=script&lang=js&\"\nexport * from \"./booking-summary-list.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VExpansionPanel } from 'vuetify/lib/components/VExpansionPanel';\nimport { VExpansionPanelContent } from 'vuetify/lib/components/VExpansionPanel';\nimport { VExpansionPanelHeader } from 'vuetify/lib/components/VExpansionPanel';\nimport { VExpansionPanels } from 'vuetify/lib/components/VExpansionPanel';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\ninstallComponents(component, {VExpansionPanel,VExpansionPanelContent,VExpansionPanelHeader,VExpansionPanels,VToolbar,VToolbarTitle})\n","\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./home.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./home.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./home.vue?vue&type=template&id=7cb143bf&\"\nimport script from \"./home.vue?vue&type=script&lang=js&\"\nexport * from \"./home.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSheet } from 'vuetify/lib/components/VSheet';\ninstallComponents(component, {VBtn,VCol,VDialog,VIcon,VRow,VSheet})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-alert',_vm._g(_vm._b({},'v-alert',_vm.$attrs,false),_vm.$listeners),[_vm._v(\" \"+_vm._s(_vm.errorMessage)+\" \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./error-alert.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./error-alert.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./error-alert.vue?vue&type=template&id=a7d5bce4&\"\nimport script from \"./error-alert.vue?vue&type=script&lang=js&\"\nexport * from \"./error-alert.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VAlert } from 'vuetify/lib/components/VAlert';\ninstallComponents(component, {VAlert})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',{staticClass:\"mb-1\",attrs:{\"title\":_vm.$t('booking.gradesLabel')}},_vm._l((_vm.grades),function(p,index){return _c('v-chip',{key:'grade' + index + p.id,staticClass:\"mr-1 mt-1 blue--text\",attrs:{\"small\":\"\",\"color\":\"light-blue lighten-5\"}},[_vm._v(\" \"+_vm._s(p.title)+\" \")])}),1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./grade-list.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./grade-list.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./grade-list.vue?vue&type=template&id=bfcf82ca&\"\nimport script from \"./grade-list.vue?vue&type=script&lang=js&\"\nexport * from \"./grade-list.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VChip } from 'vuetify/lib/components/VChip';\ninstallComponents(component, {VChip})\n","/**\n * Tokens used to format dates\n * @tutorial https://day.js.org/docs/en/display/format\n */\nexport default Object.freeze({\n // --- 01. Date --------------------------------------------------------------\n\n /**\n * Two-digit year\n * @example 18\n */\n YY: 'YY',\n /**\n * Four-digit year\n * @example 2018\n */\n YYYY: 'YYYY',\n /**\n * The month, beginning at 1\n * @example 1-12\n */\n M: 'M',\n /**\n * The month, 2-digits\n * @example 01-12\n */\n MM: 'MM',\n /**\n * The abbreviated month name\n * @example Jan-Dec\n */\n MMM: 'MMM',\n /**\n * The full month name\n * @example January-December\n */\n MMMM: 'MMMM',\n /**\n * The day of the month\n * @example 1-31\n */\n D: 'D',\n /**\n * The day of the month, 2-digits\n * @example 01-31\n */\n DD: 'DD',\n /**\n * The day of the week, with Sunday as 0\n * @example 0-6\n */\n d: 'd',\n /**\n * The min name of the day of the week\n * @example Su-Sa\n */\n dd: 'dd',\n /**\n * The short name of the day of the week\n * @example Sun-Sat\n */\n ddd: 'ddd',\n /**\n * The name of the day of the week\n * @example Sunday-Saturday\n */\n dddd: 'dddd',\n /**\n * Quarter\n * @example 1-4\n */\n Q: 'Q',\n /**\n * Day of Month with ordinal\n * @example 1st 2nd ... 31st\n */\n Do: 'Do',\n /**\n * Unix Timestamp in second\n * @example 1360013296\n */\n X: 'X',\n /**\n * Unix Timestamp in millisecond\n * @example 1360013296123\n */\n x: 'x',\n\n // --- 02. Time --------------------------------------------------------------\n\n /**\n * The hour, 24-hour clock\n * @example 0-23\n */\n H: 'H',\n /**\n * The hour, 2-digits, 24-hour clock\n * @example 00-23\n */\n HH: 'HH',\n /**\n * The hour, 12-hour clock\n * @example 1-12\n */\n h: 'h',\n /**\n * The hour, 12-hour clock, 2-digits\n * @example 01-12\n */\n hh: 'hh',\n /**\n * The minute\n * @example 0-59\n */\n m: 'm',\n /**\n * The minute, 2-digits\n * @example 00-59\n */\n mm: 'mm',\n /**\n * The second\n * @example 0-59\n */\n s: 's',\n /**\n * The second, 2-digits\n * @example 00-59\n */\n ss: 'ss',\n /**\n * The millisecond, 3-digits\n * @example 000-999\n */\n SSS: 'SSS',\n /**\n * The offset from UTC, ±HH:mm\n * @example +05:00\n */\n Z: 'Z',\n /**\n * The offset from UTC, ±HHmm\n * @example +0500\n */\n ZZ: 'ZZ',\n /**\n * Meridian, capitalised\n * @example AM/PM\n */\n A: 'A',\n /**\n * Meridian, lowercase\n * @example am/pm\n */\n a: 'a',\n\n // --- 03. Localised ---------------------------------------------------------\n\n /**\n * h:mm A\n * @example 8:02 PM\n */\n LT: 'LT',\n /**\n * h:mm:ss A\n * @example 8:02:18 PM\n */\n LTS: 'LTS',\n /**\n * MM/DD/YYYY\n * @example 08/16/2018\n */\n L: 'L',\n /**\n * MMMM D, YYYY\n * @example August 16, 2018\n */\n LL: 'LL',\n /**\n * MMMM D, YYYY h:mm A\n * @example August 16, 2018 8:02 PM\n */\n LLL: 'LLL',\n /**\n * dddd, MMMM D, YYYY h:mm A\n * @example Thursday, August 16, 2018 8:02 PM\n */\n LLLL: 'LLLL',\n /**\n * M/D/YYYY\n * @example 8/16/2018\n */\n l: 'l',\n /**\n * MMM D, YYYY\n * @example Aug 16, 2018\n */\n ll: 'll',\n /**\n * MMM D, YYYY h:mm A\n * @example Aug 16, 2018 8:02 PM\n */\n lll: 'lll',\n /**\n * ddd, MMM D, YYYY h:mm A\n * @example Thu, Aug 16, 2018 8:02 PM\n */\n llll: 'llll',\n\n // --- 04. Custom ------------------------------------------------------------\n\n /**\n * @example 12th Jan\n */\n DoMMM: 'Do MMM',\n /**\n * @example Jan 12th\n */\n MMMDo: 'MMM Do',\n /**\n * @example 12th Jan 2022\n */\n DoMMMYYYY: 'Do MMM YYYY',\n /**\n * @example Jan 12th 2022\n */\n MMMDoYYYY: 'MMM Do YYYY',\n /**\n * @example Sun 10/16/2022\n */\n dddL: 'ddd L',\n /**\n * @example Sunday 10/16/2022\n */\n ddddL: 'dddd, L',\n /**\n * @example Monday, January 12 2022\n */\n ddddLL: 'dddd, LL',\n\n /**\n * @example 12/05/2024\n */\n DDMMYYYYWithSlash: 'DD/MM/YYYY',\n /**\n * @example Sun 16/10/2022\n */\n dddDDMMYYYYWithSlash: 'ddd DD/MM/YYYY',\n /**\n * @example Sun 10/16/2022\n */\n dddMMDDYYYYWithSlash: 'ddd MM/DD/YYYY',\n /**\n * @example 2023-10\n */\n YYYYMM: 'YYYY-MM',\n /**\n * @example 2023-10-21\n */\n YYYYMMDD: 'YYYY-MM-DD',\n /**\n * @example March, 2023\n */\n MMMMYYYY: 'MMMM, YYYY',\n /**\n * @example 2022-01-12T00:00:00\n */\n YYYYMMDDT0: 'YYYY-MM-DDT00:00:00',\n\n /**\n * @example Mon, 12th Jan\n */\n dddDoMMM: 'ddd, Do MMM',\n /**\n * @example Mon, Jan 12th\n */\n dddMMMDo: 'ddd, MMM Do',\n /**\n * @example Mon 12th\n */\n dddDo: 'ddd Do',\n /**\n * 24hr time\n * @example 13:00\n */\n HHmm: 'HH:mm',\n /**\n * 12hr time with meridian\n * @example 09:30 am\n */\n hhmma: 'hh:mm a',\n /**\n * 24hr time\n * @example 13:30:25\n */\n HHmmss: 'HH:mm:ss',\n /**\n * @example Tuesday, 23 January\n */\n ddddDDMMMM: 'dddd, DD MMMM',\n /**\n * @example Tuesday, 9th April @ 4:24 PM\n */\n ddddDoMMMMatLT: 'dddd, Do MMMM @ LT',\n})\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./date-strip.vue?vue&type=style&index=0&lang=scss&\"","export const BookingStatus = Object.freeze({\n /**\n * Client Concern – Agency Took too long\n */\n AGENCY_TOOK_TOO_LONG: -11,\n /**\n * Unable to Fill\n */\n UNABLE_TO_FILL: -12,\n /**\n * anzuk Error\n */\n ANZUK_ERROR: -13,\n /**\n * Candidate – Illness\n */\n CANDIDATE_ILLNESS: -14,\n /**\n * Lapsed\n */\n LAPSED: -100,\n /**\n * Deleted from Group Booking\n */\n DELETED_FROM_GROUP_BOOKING: -100,\n /**\n * Cancelled\n */\n CANCELLED: -1,\n /**\n * Finance Cancelled\n */\n FINANCE_CANCELLED: -101,\n /**\n * Refunded\n */\n REFUNDED: -1000,\n /**\n * Friday Invoice (?)\n */\n FRIDAY_INVOICE: 99,\n /**\n * ECH Invoicing Ready\n */\n ECH_INVOICING_READY: 95,\n /**\n * ECH Booking – Not Approved\n */\n ECH_NOT_APPROVED: 80,\n /**\n * School Booking – Not Approved\n */\n SCHOOL_NOT_APPROVED: 70,\n /**\n * The client has submitted their timesheet and made no changes to the times\n */\n CLIENT_SUBMITTED_TIMESHEET_NO_CHANGES: 111,\n /**\n * The client has submitted their timesheet and made changes\n */\n CLIENT_SUBMITTED_TIMESHEET_MODIFIED: 112,\n /**\n * The client has submitted their timesheet and stated the booking didn't happen\n */\n CLIENT_SUBMITTED_TIMESHEET_DID_NOT_HAPPEN: 113,\n /**\n * The candidate has submitted their timesheet and made no changes to the times\n */\n CANDIDATE_SUBMITTED_TIMESHEET_NO_CHANGES: 114,\n /**\n * The candidate has submitted their timesheet and made changes\n */\n CANDIDATE_SUBMITTED_TIMESHEET_MODIFIED: 115,\n /**\n * The candidate has submitted their timesheet and stated the booking didn't happen\n */\n CANDIDATE_SUBMITTED_TIMESHEET_DID_NOT_HAPPEN: 116,\n /**\n * Both the candidate and client have stated conflicting times for their timesheets.\n * This raises a dispute that is to be resolved by the consultant.\n */\n TIMESHEET_DISPUTE_OR_MISMATCH: 117,\n /**\n * Active, Withhold Pay\n */\n ACTIVE_WITHOLD_PAY: 14,\n /**\n * Active, Lapsed\n */\n ACTIVE_LAPSED: 13,\n /**\n * Tentative Filled\n */\n TENTATIVE_FILLED: 105,\n /**\n * Agency - Moved Client\n */\n AGENCY_MOVED_CLIENT: -15,\n /**\n * Exported to BullHorn NZ\n */\n EXPORTED_TO_BULLHORN_NZ: 175,\n /**\n * Partial Export - Review in BullHorn\n */\n PARTIAL_BULLHORN_EXPORT: -41,\n /**\n * Training\n */\n TRAINING: -16,\n /**\n * Other\n */\n OTHER: -17,\n /**\n * Cancelled by Client\n */\n CANCELLED_BY_CLIENT: -18,\n /**\n * The booking is pending approval from the client before it can be filled.\n * This occurs when the booking is submitted by a client contact however it\n * requires another contact to review and approve it.\n */\n BOOKING_PENDING_REQUIRES_CLIENT_APPROVAL: -200,\n /**\n * The booking was pending approval by client and was rejected.\n */\n CLIENT_REJECTED_BOOKING_REQUEST: -201,\n})\n\nexport const candidateModifiedOrDidNotHappenBookingsStatuses = () => {\n return [\n BookingStatus.CANDIDATE_SUBMITTED_TIMESHEET_MODIFIED,\n BookingStatus.CANDIDATE_SUBMITTED_TIMESHEET_DID_NOT_HAPPEN,\n ]\n}\n\nexport const hasCandidateModifiedBookingOrStatedDidNotHappen = (\n bookingStatus\n) => {\n return candidateModifiedOrDidNotHappenBookingsStatuses().includes(\n bookingStatus\n )\n}\n","// Styles\nimport './VTextarea.sass'\n\n// Extensions\nimport VTextField from '../VTextField/VTextField'\n\n// Utilities\nimport mixins from '../../util/mixins'\n\n// Types\nimport Vue from 'vue'\n\ninterface options extends Vue {\n $refs: {\n input: HTMLTextAreaElement\n }\n}\n\nconst baseMixins = mixins\n>(\n VTextField\n)\n\n/* @vue/component */\nexport default baseMixins.extend({\n name: 'v-textarea',\n\n props: {\n autoGrow: Boolean,\n noResize: Boolean,\n rowHeight: {\n type: [Number, String],\n default: 24,\n validator: (v: any) => !isNaN(parseFloat(v)),\n },\n rows: {\n type: [Number, String],\n default: 5,\n validator: (v: any) => !isNaN(parseInt(v, 10)),\n },\n },\n\n computed: {\n classes (): object {\n return {\n 'v-textarea': true,\n 'v-textarea--auto-grow': this.autoGrow,\n 'v-textarea--no-resize': this.noResizeHandle,\n ...VTextField.options.computed.classes.call(this),\n }\n },\n noResizeHandle (): boolean {\n return this.noResize || this.autoGrow\n },\n },\n\n watch: {\n autoGrow (val: boolean) {\n this.$nextTick(() => {\n val\n ? this.calculateInputHeight()\n : this.$refs.input?.style.removeProperty('height')\n })\n },\n lazyValue () {\n this.autoGrow && this.$nextTick(this.calculateInputHeight)\n },\n rowHeight () {\n this.autoGrow && this.$nextTick(this.calculateInputHeight)\n },\n },\n\n mounted () {\n setTimeout(() => {\n this.autoGrow && this.calculateInputHeight()\n }, 0)\n },\n\n methods: {\n calculateInputHeight () {\n const input = this.$refs.input\n if (!input) return\n\n input.style.height = '0'\n const height = input.scrollHeight\n const minHeight = parseInt(this.rows, 10) * parseFloat(this.rowHeight)\n // This has to be done ASAP, waiting for Vue\n // to update the DOM causes ugly layout jumping\n input.style.height = Math.max(minHeight, height) + 'px'\n },\n genInput () {\n const input = VTextField.options.methods.genInput.call(this)\n\n input.tag = 'textarea'\n delete input.data!.attrs!.type\n input.data!.attrs!.rows = this.rows\n\n return input\n },\n onInput (e: Event) {\n VTextField.options.methods.onInput.call(this, e)\n this.autoGrow && this.calculateInputHeight()\n },\n onKeyDown (e: KeyboardEvent) {\n // Prevents closing of a\n // dialog when pressing\n // enter\n if (this.isFocused && e.keyCode === 13) {\n e.stopPropagation()\n }\n\n this.$emit('keydown', e)\n },\n },\n})\n","export { default } from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-0-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-0-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-0-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-0-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./booking-list-feedback.vue?vue&type=style&index=0&lang=scss&module=true&\"; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-0-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-0-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-0-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-0-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./booking-list-feedback.vue?vue&type=style&index=0&lang=scss&module=true&\"","// Styles\nimport './VAutocomplete.sass'\n\n// Extensions\nimport VSelect, { defaultMenuProps as VSelectMenuProps } from '../VSelect/VSelect'\nimport VTextField from '../VTextField/VTextField'\n\n// Utilities\nimport mergeData from '../../util/mergeData'\nimport {\n getObjectValueByPath,\n getPropertyFromItem,\n keyCodes,\n} from '../../util/helpers'\n\n// Types\nimport { PropType, VNode } from 'vue'\nimport { PropValidator } from 'vue/types/options'\n\nconst defaultMenuProps = {\n ...VSelectMenuProps,\n offsetY: true,\n offsetOverflow: true,\n transition: false,\n}\n\n/* @vue/component */\nexport default VSelect.extend({\n name: 'v-autocomplete',\n\n props: {\n allowOverflow: {\n type: Boolean,\n default: true,\n },\n autoSelectFirst: {\n type: Boolean,\n default: false,\n },\n filter: {\n type: Function,\n default: (item: any, queryText: string, itemText: string) => {\n return itemText.toLocaleLowerCase().indexOf(queryText.toLocaleLowerCase()) > -1\n },\n } as PropValidator<(item: any, queryText: string, itemText: string) => boolean>,\n hideNoData: Boolean,\n menuProps: {\n type: VSelect.options.props.menuProps.type,\n default: () => defaultMenuProps,\n },\n noFilter: Boolean,\n searchInput: {\n type: String as PropType,\n },\n },\n\n data () {\n return {\n lazySearch: this.searchInput,\n }\n },\n\n computed: {\n classes (): object {\n return {\n ...VSelect.options.computed.classes.call(this),\n 'v-autocomplete': true,\n 'v-autocomplete--is-selecting-index': this.selectedIndex > -1,\n }\n },\n computedItems (): object[] {\n return this.filteredItems\n },\n selectedValues (): object[] {\n return this.selectedItems.map(item => this.getValue(item))\n },\n hasDisplayedItems (): boolean {\n return this.hideSelected\n ? this.filteredItems.some(item => !this.hasItem(item))\n : this.filteredItems.length > 0\n },\n currentRange (): number {\n if (this.selectedItem == null) return 0\n\n return String(this.getText(this.selectedItem)).length\n },\n filteredItems (): object[] {\n if (!this.isSearching || this.noFilter || this.internalSearch == null) return this.allItems\n\n return this.allItems.filter(item => {\n const value = getPropertyFromItem(item, this.itemText)\n const text = value != null ? String(value) : ''\n\n return this.filter(item, String(this.internalSearch), text)\n })\n },\n internalSearch: {\n get (): string | null {\n return this.lazySearch\n },\n set (val: any) { // TODO: this should be `string | null` but it breaks lots of other types\n // emit update event only when the new\n // search value is different from previous\n if (this.lazySearch !== val) {\n this.lazySearch = val\n this.$emit('update:search-input', val)\n }\n },\n },\n isAnyValueAllowed (): boolean {\n return false\n },\n isDirty (): boolean {\n return this.searchIsDirty || this.selectedItems.length > 0\n },\n isSearching (): boolean {\n return (\n this.multiple &&\n this.searchIsDirty\n ) || (\n this.searchIsDirty &&\n this.internalSearch !== this.getText(this.selectedItem)\n )\n },\n menuCanShow (): boolean {\n if (!this.isFocused) return false\n\n return this.hasDisplayedItems || !this.hideNoData\n },\n $_menuProps (): object {\n const props = VSelect.options.computed.$_menuProps.call(this);\n (props as any).contentClass = `v-autocomplete__content ${(props as any).contentClass || ''}`.trim()\n return {\n ...defaultMenuProps,\n ...props,\n }\n },\n searchIsDirty (): boolean {\n return this.internalSearch != null &&\n this.internalSearch !== ''\n },\n selectedItem (): any {\n if (this.multiple) return null\n\n return this.selectedItems.find(i => {\n return this.valueComparator(this.getValue(i), this.getValue(this.internalValue))\n })\n },\n listData () {\n const data = VSelect.options.computed.listData.call(this) as any\n\n data.props = {\n ...data.props,\n items: this.virtualizedItems,\n noFilter: (\n this.noFilter ||\n !this.isSearching ||\n !this.filteredItems.length\n ),\n searchInput: this.internalSearch,\n }\n\n return data\n },\n },\n\n watch: {\n filteredItems: 'onFilteredItemsChanged',\n internalValue: 'setSearch',\n isFocused (val) {\n if (val) {\n document.addEventListener('copy', this.onCopy)\n this.$refs.input && this.$refs.input.select()\n } else {\n document.removeEventListener('copy', this.onCopy)\n this.blur()\n this.updateSelf()\n }\n },\n isMenuActive (val) {\n if (val || !this.hasSlot) return\n\n this.lazySearch = null\n },\n items (val, oldVal) {\n // If we are focused, the menu\n // is not active, hide no data is enabled,\n // and items change\n // User is probably async loading\n // items, try to activate the menu\n if (\n !(oldVal && oldVal.length) &&\n this.hideNoData &&\n this.isFocused &&\n !this.isMenuActive &&\n val.length\n ) this.activateMenu()\n },\n searchInput (val: string) {\n this.lazySearch = val\n },\n internalSearch: 'onInternalSearchChanged',\n itemText: 'updateSelf',\n },\n\n created () {\n this.setSearch()\n },\n\n destroyed () {\n document.removeEventListener('copy', this.onCopy)\n },\n\n methods: {\n onFilteredItemsChanged (val: never[], oldVal: never[]) {\n // TODO: How is the watcher triggered\n // for duplicate items? no idea\n if (val === oldVal) return\n\n if (!this.autoSelectFirst) {\n const preSelectedItem = oldVal[this.$refs.menu.listIndex]\n\n if (preSelectedItem) {\n this.setMenuIndex(val.findIndex(i => i === preSelectedItem))\n } else {\n this.setMenuIndex(-1)\n }\n this.$emit('update:list-index', this.$refs.menu.listIndex)\n }\n\n this.$nextTick(() => {\n if (\n !this.internalSearch ||\n (val.length !== 1 &&\n !this.autoSelectFirst)\n ) return\n\n this.$refs.menu.getTiles()\n\n if (this.autoSelectFirst && val.length) {\n this.setMenuIndex(0)\n this.$emit('update:list-index', this.$refs.menu.listIndex)\n }\n })\n },\n onInternalSearchChanged () {\n this.updateMenuDimensions()\n },\n updateMenuDimensions () {\n // Type from menuable is not making it through\n this.isMenuActive && this.$refs.menu && this.$refs.menu.updateDimensions()\n },\n changeSelectedIndex (keyCode: number) {\n // Do not allow changing of selectedIndex\n // when search is dirty\n if (this.searchIsDirty) return\n\n if (this.multiple && keyCode === keyCodes.left) {\n if (this.selectedIndex === -1) {\n this.selectedIndex = this.selectedItems.length - 1\n } else {\n this.selectedIndex--\n }\n } else if (this.multiple && keyCode === keyCodes.right) {\n if (this.selectedIndex >= this.selectedItems.length - 1) {\n this.selectedIndex = -1\n } else {\n this.selectedIndex++\n }\n } else if (keyCode === keyCodes.backspace || keyCode === keyCodes.delete) {\n this.deleteCurrentItem()\n }\n },\n deleteCurrentItem () {\n const curIndex = this.selectedIndex\n const curItem = this.selectedItems[curIndex]\n\n // Do nothing if input or item is disabled\n if (\n !this.isInteractive ||\n this.getDisabled(curItem)\n ) return\n\n const lastIndex = this.selectedItems.length - 1\n\n // Select the last item if\n // there is no selection\n if (\n this.selectedIndex === -1 &&\n lastIndex !== 0\n ) {\n this.selectedIndex = lastIndex\n\n return\n }\n\n const length = this.selectedItems.length\n const nextIndex = curIndex !== length - 1\n ? curIndex\n : curIndex - 1\n const nextItem = this.selectedItems[nextIndex]\n\n if (!nextItem) {\n this.setValue(this.multiple ? [] : null)\n } else {\n this.selectItem(curItem)\n }\n\n this.selectedIndex = nextIndex\n },\n clearableCallback () {\n this.internalSearch = null\n\n VSelect.options.methods.clearableCallback.call(this)\n },\n genInput () {\n const input = VTextField.options.methods.genInput.call(this)\n\n input.data = mergeData(input.data!, {\n attrs: {\n 'aria-activedescendant': getObjectValueByPath(this.$refs.menu, 'activeTile.id'),\n autocomplete: getObjectValueByPath(input.data!, 'attrs.autocomplete', 'off'),\n },\n domProps: { value: this.internalSearch },\n })\n\n return input\n },\n genInputSlot () {\n const slot = VSelect.options.methods.genInputSlot.call(this)\n\n slot.data!.attrs!.role = 'combobox'\n\n return slot\n },\n genSelections (): VNode | never[] {\n return this.hasSlot || this.multiple\n ? VSelect.options.methods.genSelections.call(this)\n : []\n },\n onClick (e: MouseEvent) {\n if (!this.isInteractive) return\n\n this.selectedIndex > -1\n ? (this.selectedIndex = -1)\n : this.onFocus()\n\n if (!this.isAppendInner(e.target)) this.activateMenu()\n },\n onInput (e: Event) {\n if (\n this.selectedIndex > -1 ||\n !e.target\n ) return\n\n const target = e.target as HTMLInputElement\n const value = target.value\n\n // If typing and menu is not currently active\n if (target.value) this.activateMenu()\n\n if (!this.multiple && value === '') this.deleteCurrentItem()\n\n this.internalSearch = value\n this.badInput = target.validity && target.validity.badInput\n },\n onKeyDown (e: KeyboardEvent) {\n const keyCode = e.keyCode\n\n if (\n e.ctrlKey ||\n ![keyCodes.home, keyCodes.end].includes(keyCode)\n ) {\n VSelect.options.methods.onKeyDown.call(this, e)\n }\n\n // The ordering is important here\n // allows new value to be updated\n // and then moves the index to the\n // proper location\n this.changeSelectedIndex(keyCode)\n },\n onSpaceDown (e: KeyboardEvent) { /* noop */ },\n onTabDown (e: KeyboardEvent) {\n VSelect.options.methods.onTabDown.call(this, e)\n this.updateSelf()\n },\n onUpDown (e: Event) {\n // Prevent screen from scrolling\n e.preventDefault()\n\n // For autocomplete / combobox, cycling\n // interfers with native up/down behavior\n // instead activate the menu\n this.activateMenu()\n },\n selectItem (item: object) {\n VSelect.options.methods.selectItem.call(this, item)\n this.setSearch()\n },\n setSelectedItems () {\n VSelect.options.methods.setSelectedItems.call(this)\n\n // #4273 Don't replace if searching\n // #4403 Don't replace if focused\n if (!this.isFocused) this.setSearch()\n },\n setSearch () {\n // Wait for nextTick so selectedItem\n // has had time to update\n this.$nextTick(() => {\n if (\n !this.multiple ||\n !this.internalSearch ||\n !this.isMenuActive\n ) {\n this.internalSearch = (\n !this.selectedItems.length ||\n this.multiple ||\n this.hasSlot\n )\n ? null\n : this.getText(this.selectedItem)\n }\n })\n },\n updateSelf () {\n if (\n !this.searchIsDirty &&\n !this.internalValue\n ) return\n\n if (\n !this.multiple &&\n !this.valueComparator(\n this.internalSearch,\n this.getValue(this.internalValue)\n )\n ) {\n this.setSearch()\n }\n },\n hasItem (item: any): boolean {\n return this.selectedValues.indexOf(this.getValue(item)) > -1\n },\n onCopy (event: ClipboardEvent) {\n if (this.selectedIndex === -1) return\n\n const currentItem = this.selectedItems[this.selectedIndex]\n const currentItemText = this.getText(currentItem)\n event.clipboardData?.setData('text/plain', currentItemText)\n event.clipboardData?.setData('text/vnd.vuetify.autocomplete.item+plain', currentItemText)\n event.preventDefault()\n },\n },\n})\n","// Components\nimport { VFadeTransition } from '../transitions'\nimport VExpansionPanel from './VExpansionPanel'\nimport VIcon from '../VIcon'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport { inject as RegistrableInject } from '../../mixins/registrable'\n\n// Directives\nimport ripple from '../../directives/ripple'\n\n// Utilities\nimport { getSlot } from '../../util/helpers'\nimport mixins, { ExtractVue } from '../../util/mixins'\n\n// Types\nimport Vue, { VNode, VueConstructor } from 'vue'\n\nconst baseMixins = mixins(\n Colorable,\n RegistrableInject<'expansionPanel', VueConstructor>('expansionPanel', 'v-expansion-panel-header', 'v-expansion-panel')\n)\n\ninterface options extends ExtractVue {\n $el: HTMLElement\n expansionPanel: InstanceType\n}\n\nexport default baseMixins.extend().extend({\n name: 'v-expansion-panel-header',\n\n directives: { ripple },\n\n props: {\n disableIconRotate: Boolean,\n expandIcon: {\n type: String,\n default: '$expand',\n },\n hideActions: Boolean,\n ripple: {\n type: [Boolean, Object],\n default: false,\n },\n },\n\n data: () => ({\n hasMousedown: false,\n }),\n\n computed: {\n classes (): object {\n return {\n 'v-expansion-panel-header--active': this.isActive,\n 'v-expansion-panel-header--mousedown': this.hasMousedown,\n }\n },\n isActive (): boolean {\n return this.expansionPanel.isActive\n },\n isDisabled (): boolean {\n return this.expansionPanel.isDisabled\n },\n isReadonly (): boolean {\n return this.expansionPanel.isReadonly\n },\n },\n\n created () {\n this.expansionPanel.registerHeader(this)\n },\n\n beforeDestroy () {\n this.expansionPanel.unregisterHeader()\n },\n\n methods: {\n onClick (e: MouseEvent) {\n this.$emit('click', e)\n },\n genIcon () {\n const icon = getSlot(this, 'actions') ||\n [this.$createElement(VIcon, this.expandIcon)]\n\n return this.$createElement(VFadeTransition, [\n this.$createElement('div', {\n staticClass: 'v-expansion-panel-header__icon',\n class: {\n 'v-expansion-panel-header__icon--disable-rotate': this.disableIconRotate,\n },\n directives: [{\n name: 'show',\n value: !this.isDisabled,\n }],\n }, icon),\n ])\n },\n },\n\n render (h): VNode {\n return h('button', this.setBackgroundColor(this.color, {\n staticClass: 'v-expansion-panel-header',\n class: this.classes,\n attrs: {\n tabindex: this.isDisabled ? -1 : null,\n type: 'button',\n 'aria-expanded': this.isActive,\n },\n directives: [{\n name: 'ripple',\n value: this.ripple,\n }],\n on: {\n ...this.$listeners,\n click: this.onClick,\n mousedown: () => (this.hasMousedown = true),\n mouseup: () => (this.hasMousedown = false),\n },\n }), [\n getSlot(this, 'default', { open: this.isActive }, true),\n this.hideActions || this.genIcon(),\n ])\n },\n})\n","// Components\nimport VExpansionPanels from './VExpansionPanels'\nimport VExpansionPanelHeader from './VExpansionPanelHeader'\nimport VExpansionPanelContent from './VExpansionPanelContent'\n\n// Mixins\nimport { factory as GroupableFactory } from '../../mixins/groupable'\nimport { provide as RegistrableProvide } from '../../mixins/registrable'\n\n// Utilities\nimport { getSlot } from '../../util/helpers'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode } from 'vue'\n\ntype VExpansionPanelHeaderInstance = InstanceType\ntype VExpansionPanelContentInstance = InstanceType\n\nexport default mixins(\n GroupableFactory<'expansionPanels', typeof VExpansionPanels>('expansionPanels', 'v-expansion-panel', 'v-expansion-panels'),\n RegistrableProvide('expansionPanel', true)\n /* @vue/component */\n).extend({\n name: 'v-expansion-panel',\n\n props: {\n disabled: Boolean,\n readonly: Boolean,\n },\n\n data () {\n return {\n content: null as VExpansionPanelContentInstance | null,\n header: null as VExpansionPanelHeaderInstance | null,\n nextIsActive: false,\n }\n },\n\n computed: {\n classes (): object {\n return {\n 'v-expansion-panel--active': this.isActive,\n 'v-expansion-panel--next-active': this.nextIsActive,\n 'v-expansion-panel--disabled': this.isDisabled,\n ...this.groupClasses,\n }\n },\n isDisabled (): boolean {\n return this.expansionPanels.disabled || this.disabled\n },\n isReadonly (): boolean {\n return this.expansionPanels.readonly || this.readonly\n },\n },\n\n methods: {\n registerContent (vm: VExpansionPanelContentInstance) {\n this.content = vm\n },\n unregisterContent () {\n this.content = null\n },\n registerHeader (vm: VExpansionPanelHeaderInstance) {\n this.header = vm\n vm.$on('click', this.onClick)\n },\n unregisterHeader () {\n this.header = null\n },\n onClick (e: MouseEvent) {\n if (e.detail) this.header!.$el.blur()\n\n this.$emit('click', e)\n\n this.isReadonly || this.isDisabled || this.toggle()\n },\n toggle () {\n this.$nextTick(() => this.$emit('change'))\n },\n },\n\n render (h): VNode {\n return h('div', {\n staticClass: 'v-expansion-panel',\n class: this.classes,\n attrs: {\n 'aria-expanded': String(this.isActive),\n },\n }, getSlot(this))\n },\n})\n","// This file replaces `index.js` in bundlers like webpack or Rollup,\n// according to `browser` config in `package.json`.\n\nimport { urlAlphabet } from './url-alphabet/index.js'\n\nif (process.env.NODE_ENV !== 'production') {\n // All bundlers will remove this block in the production bundle.\n if (\n typeof navigator !== 'undefined' &&\n navigator.product === 'ReactNative' &&\n typeof crypto === 'undefined'\n ) {\n throw new Error(\n 'React Native does not have a built-in secure random generator. ' +\n 'If you don’t need unpredictable IDs use `nanoid/non-secure`. ' +\n 'For secure IDs, import `react-native-get-random-values` ' +\n 'before Nano ID.'\n )\n }\n if (typeof msCrypto !== 'undefined' && typeof crypto === 'undefined') {\n throw new Error(\n 'Import file with `if (!window.crypto) window.crypto = window.msCrypto`' +\n ' before importing Nano ID to fix IE 11 support'\n )\n }\n if (typeof crypto === 'undefined') {\n throw new Error(\n 'Your browser does not have secure random generator. ' +\n 'If you don’t need unpredictable IDs, you can use nanoid/non-secure.'\n )\n }\n}\n\nlet random = bytes => crypto.getRandomValues(new Uint8Array(bytes))\n\nlet customRandom = (alphabet, size, getRandom) => {\n // First, a bitmask is necessary to generate the ID. The bitmask makes bytes\n // values closer to the alphabet size. The bitmask calculates the closest\n // `2^31 - 1` number, which exceeds the alphabet size.\n // For example, the bitmask for the alphabet size 30 is 31 (00011111).\n // `Math.clz32` is not used, because it is not available in browsers.\n let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1\n // Though, the bitmask solution is not perfect since the bytes exceeding\n // the alphabet size are refused. Therefore, to reliably generate the ID,\n // the random bytes redundancy has to be satisfied.\n\n // Note: every hardware random generator call is performance expensive,\n // because the system call for entropy collection takes a lot of time.\n // So, to avoid additional system calls, extra bytes are requested in advance.\n\n // Next, a step determines how many random bytes to generate.\n // The number of random bytes gets decided upon the ID size, mask,\n // alphabet size, and magic number 1.6 (using 1.6 peaks at performance\n // according to benchmarks).\n\n // `-~f => Math.ceil(f)` if f is a float\n // `-~i => i + 1` if i is an integer\n let step = -~((1.6 * mask * size) / alphabet.length)\n\n return () => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n // A compact alternative for `for (var i = 0; i < step; i++)`.\n let j = step\n while (j--) {\n // Adding `|| ''` refuses a random byte that exceeds the alphabet size.\n id += alphabet[bytes[j] & mask] || ''\n if (id.length === size) return id\n }\n }\n }\n}\n\nlet customAlphabet = (alphabet, size) => customRandom(alphabet, size, random)\n\nlet nanoid = (size = 21) => {\n let id = ''\n let bytes = crypto.getRandomValues(new Uint8Array(size))\n\n // A compact alternative for `for (var i = 0; i < step; i++)`.\n while (size--) {\n // It is incorrect to use bytes exceeding the alphabet size.\n // The following mask reduces the random byte in the 0-255 value\n // range to the 0-63 value range. Therefore, adding hacks, such\n // as empty string fallback or magic numbers, is unneccessary because\n // the bitmask trims bytes down to the alphabet size.\n let byte = bytes[size] & 63\n if (byte < 36) {\n // `0-9a-z`\n id += byte.toString(36)\n } else if (byte < 62) {\n // `A-Z`\n id += (byte - 26).toString(36).toUpperCase()\n } else if (byte < 63) {\n id += '_'\n } else {\n id += '-'\n }\n }\n return id\n}\n\nexport { nanoid, customAlphabet, customRandom, urlAlphabet, random }\n","/**\n *\n * @param {String} time e.g. '09:30'\n * @returns Object e.g. { hours: 8, minutes: 0 }\n */\nexport default function parseTimeStringToObject(time) {\n // e.g. ['09', '30']\n const splitTime = time.split(':')\n\n // If not a valid time, return base value\n if (!splitTime || splitTime.length !== 2) {\n throw new Error(`Invalid time format. Should be HH:mm. Received: ${time}`)\n }\n\n const parseHours = parseInt(splitTime[0])\n const parseMinutes = parseInt(splitTime[1])\n\n if (isNaN(parseHours)) {\n throw new Error(\n `Unable to parse hours time part. Received: ${splitTime[0]}`\n )\n }\n\n if (isNaN(parseMinutes)) {\n throw new Error(\n `Unable to parse minutes time part. Received: ${splitTime[1]}`\n )\n }\n\n return { hours: parseHours, minutes: parseMinutes }\n}\n","import dayjs from '@/services/date'\nimport parseTimeStringToObject from '@/utils/parse-time-string-to-object'\nimport config from '@/common/config'\nimport { PermissionScope } from '@/shared/constants/permissions/PermissionScope'\nimport { mapGetters } from 'vuex'\n\nexport default {\n computed: {\n ...mapGetters({\n getSelectedClients: 'client/getSelectedClients',\n getAllClientLocationsWithPermission:\n 'auth/getAllClientLocationsWithPermission',\n }),\n compSameDayCutOffObject() {\n try {\n return parseTimeStringToObject(config.get('sameDayBookingCutOffTime'))\n } catch (ex) {\n console.warn(\n 'Failed to parse same day cut off time. Defaulting to 8:00 am'\n )\n return { hours: 8, minutes: 0 }\n }\n },\n /**\n * TODO: Re-write to handle multi-client.\n * Should also be relocated into component as this logic isn't shared\n * and will make the implementation less complex.\n */\n hasAtLeastOneLocationNotPassedSameDayCutOff() {\n const locations = this.getAllClientLocationsWithPermission(\n this.getSelectedClients[0],\n PermissionScope.BOOKING\n )\n\n if (!locations || locations.length < 0) return false\n\n for (const location of locations) {\n if (!this.hasPassedSameDayCutOff(location.timeZone)) return true\n }\n\n return false\n },\n },\n methods: {\n convertDateToTimezone(date, tz) {\n return dayjs(date).tz(tz)\n },\n hasPassedSameDayCutOff(timezone) {\n const today = dayjs().tz(timezone)\n const cutOff = dayjs()\n .tz(timezone)\n .startOf('day')\n .add(this.compSameDayCutOffObject)\n\n return today.isAfter(cutOff)\n },\n },\n}\n"],"sourceRoot":""}