@acorex/components 20.1.1 → 20.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/accordion/index.d.ts +6 -3
- package/fesm2022/acorex-components-accordion.mjs +20 -5
- package/fesm2022/acorex-components-accordion.mjs.map +1 -1
- package/fesm2022/acorex-components-dialog.mjs +1 -1
- package/fesm2022/acorex-components-dialog.mjs.map +1 -1
- package/fesm2022/acorex-components-kanban.mjs +7 -4
- package/fesm2022/acorex-components-kanban.mjs.map +1 -1
- package/fesm2022/{acorex-components-modal-acorex-components-modal-UeDzzc6w.mjs → acorex-components-modal-acorex-components-modal-C4bZovtu.mjs} +2 -2
- package/fesm2022/{acorex-components-modal-acorex-components-modal-UeDzzc6w.mjs.map → acorex-components-modal-acorex-components-modal-C4bZovtu.mjs.map} +1 -1
- package/fesm2022/{acorex-components-modal-modal-content.component-DLEi7cYd.mjs → acorex-components-modal-modal-content.component-Dk_aOZ0p.mjs} +19 -17
- package/fesm2022/acorex-components-modal-modal-content.component-Dk_aOZ0p.mjs.map +1 -0
- package/fesm2022/acorex-components-modal.mjs +1 -1
- package/fesm2022/acorex-components-paint.mjs +2 -2
- package/fesm2022/acorex-components-paint.mjs.map +1 -1
- package/fesm2022/acorex-components-scheduler.mjs +3 -3
- package/fesm2022/acorex-components-scheduler.mjs.map +1 -1
- package/kanban/index.d.ts +1 -0
- package/modal/index.d.ts +2 -0
- package/package.json +1 -1
- package/scheduler/index.d.ts +1 -1
- package/fesm2022/acorex-components-modal-modal-content.component-DLEi7cYd.mjs.map +0 -1
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"acorex-components-scheduler.mjs","sources":["../tmp-esm2022/scheduler/lib/scheduler.service.js","../tmp-esm2022/scheduler/lib/views/agenda/scheduler-agenda-view.component.js","../tmp-esm2022/scheduler/lib/views/day/scheduler-day-view.component.js","../tmp-esm2022/scheduler/lib/views/month/scheduler-month-view.component.js","../tmp-esm2022/scheduler/lib/views/timeline-day/scheduler-timeline-day-view.component.js","../tmp-esm2022/scheduler/lib/views/timeline-month/scheduler-timeline-month-view.component.js","../tmp-esm2022/scheduler/lib/views/timeline-multi-day/scheduler-timeline-multi-day-view.component.js","../tmp-esm2022/scheduler/lib/views/week/scheduler-week-view.component.js","../tmp-esm2022/scheduler/lib/scheduler.component.js","../tmp-esm2022/scheduler/lib/scheduler.module.js","../tmp-esm2022/scheduler/acorex-components-scheduler.js"],"sourcesContent":["import { AXCalendarService } from '@acorex/core/date-time';\nimport { AXFormatService } from '@acorex/core/format';\nimport { inject, Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class AXSchedulerService {\n constructor() {\n this.formatService = inject(AXFormatService);\n this.calendarService = inject(AXCalendarService);\n this.HOURS_PER_DAY = 24;\n this.MINUTES_PER_HOUR = 60;\n this.BLOCK_DURATION_MINUTES = 30;\n this.MILLISECONDS_PER_MINUTE = 60 * 1000;\n this.MILLISECONDS_PER_DAY = this.HOURS_PER_DAY * this.MINUTES_PER_HOUR * this.MILLISECONDS_PER_MINUTE;\n }\n /**\n * Checks if two appointments overlap in time.\n */\n doAppointmentsOverlap(appointmentA, appointmentB) {\n if (!appointmentA?.startDate || !appointmentA.endDate || !appointmentB?.startDate || !appointmentB.endDate) {\n return false;\n }\n const startA = appointmentA.startDate.getTime();\n const endA = appointmentA.endDate.getTime();\n const startB = appointmentB.startDate.getTime();\n const endB = appointmentB.endDate.getTime();\n // Uses strict overlap check (change < / > to <= / >= if touching boundaries count)\n return startA < endB && endA > startB;\n }\n /**\n * Calculates appointment duration in minutes.\n */\n calculateDurationInMinutes(Appointment) {\n if (!Appointment?.startDate || !Appointment.endDate)\n return 0;\n const durationMillis = Appointment.endDate.getTime() - Appointment.startDate.getTime();\n return Math.max(0, durationMillis / this.MILLISECONDS_PER_MINUTE);\n }\n /**\n * Calculates appointment duration in blocks (default 30 min).\n */\n calculateDurationInBlocks(appointment) {\n const durationMinutes = this.calculateDurationInMinutes(appointment);\n return Math.ceil(durationMinutes / this.BLOCK_DURATION_MINUTES);\n }\n /**\n * Gets the day index (relative to view start) and block index (relative to start hour)\n * for a given date time within the view context. Returns null if outside view.\n */\n getBlockIdentifier(dateTime, viewStartDate, startHour, endHour, // Exclusive end hour\n viewTotalDays = 1) {\n if (!viewStartDate || !dateTime || typeof startHour !== 'number' || typeof endHour !== 'number') {\n return null;\n }\n const viewEndDate = viewStartDate.add('day', viewTotalDays); // Calculate exclusive end date\n // Check if dateTime is within the view's date and time range\n if (dateTime.compare(viewStartDate, 'day') < 0 ||\n dateTime.compare(viewEndDate, 'day') >= 0 || // Check against exclusive end date\n dateTime.hour < startHour ||\n dateTime.hour >= endHour // Check against exclusive end hour\n ) {\n return null;\n }\n // Calculate day index relative to view start\n const dayIndex = Math.floor((dateTime.date.getTime() - viewStartDate.date.getTime()) / this.MILLISECONDS_PER_DAY);\n // Ensure dayIndex is valid for the view duration\n if (dayIndex < 0 || dayIndex >= viewTotalDays) {\n return null;\n }\n const minutesIntoDay = dateTime.hour * this.MINUTES_PER_HOUR + dateTime.minute;\n const minutesIntoViewHours = minutesIntoDay - startHour * this.MINUTES_PER_HOUR;\n // This check should be redundant due to initial hour check, but safe to keep\n if (minutesIntoViewHours < 0)\n return null;\n const blockIndex = Math.floor(minutesIntoViewHours / this.BLOCK_DURATION_MINUTES);\n return { dayIndex, blockIndex };\n }\n /**\n * Groups appointments by the blocks they are ACTIVE in for a given view.\n * @param viewTotalDays - Number of days in the current view (1 for Day, 7 for Week, etc.)\n */\n calculateActiveAppointmentsInBlock(singleDayAppointments, viewStartDate, startHour, endHour, viewTotalDays) {\n const blocks = {};\n if (!viewStartDate || typeof startHour !== 'number' || typeof endHour !== 'number' || viewTotalDays <= 0) {\n return blocks;\n }\n const viewEndDate = viewStartDate.add('day', viewTotalDays); // Exclusive end date\n // Calculate total blocks based on consistent block duration\n const totalBlocksPerDay = Math.max(0, (endHour - startHour) * (this.MINUTES_PER_HOUR / this.BLOCK_DURATION_MINUTES));\n singleDayAppointments.forEach((appointment) => {\n if (!appointment.startDate || !appointment.endDate || !appointment.id)\n return;\n const appointmentEndDate = this.calendarService.create(appointment.endDate);\n const appointmentStartDate = this.calendarService.create(appointment.startDate);\n // Clamp appointment start/end times to the view boundaries (days and hours)\n let effectiveStart = appointmentStartDate.compare(viewStartDate) < 0 ? viewStartDate : appointmentStartDate;\n if (effectiveStart.hour < startHour)\n effectiveStart = effectiveStart.set('hour', startHour).startOf('hour');\n let effectiveEnd = appointmentEndDate.compare(viewEndDate) >= 0 ? viewEndDate : appointmentEndDate;\n if (effectiveEnd.hour >= endHour) {\n const endDayBase = effectiveEnd.compare(viewEndDate) >= 0 ? viewEndDate.add('day', -1) : effectiveEnd;\n effectiveEnd = endDayBase.set('hour', endHour).startOf('hour');\n }\n // Get start block info using the specified viewTotalDays\n const startInfo = this.getBlockIdentifier(effectiveStart, viewStartDate, startHour, endHour, viewTotalDays);\n if (!startInfo)\n return; // Appointment starts completely outside view\n // Get end block info (last block occupied) using the specified viewTotalDays\n const timeBeforeEnd = effectiveEnd.add('minute', -1);\n const endInfo = this.getBlockIdentifier(timeBeforeEnd, viewStartDate, startHour, endHour, viewTotalDays);\n // If endInfo is null, it means the appointment ends before the viewable part starts,\n // or exactly at the start, so it occupies no blocks. Handle this case.\n if (!endInfo ||\n endInfo.dayIndex < startInfo.dayIndex ||\n (endInfo.dayIndex === startInfo.dayIndex && endInfo.blockIndex < startInfo.blockIndex)) {\n return; // Appointment effectively has no duration within the viewable blocks\n }\n // Iterate through the days and blocks the appointment spans within the view\n for (let dIdx = startInfo.dayIndex; dIdx <= endInfo.dayIndex; dIdx++) {\n // Clamp day index just in case (should be handled by getBlockIdentifier checks)\n if (dIdx < 0 || dIdx >= viewTotalDays)\n continue;\n const startBlock = dIdx === startInfo.dayIndex ? startInfo.blockIndex : 0;\n // Make sure endBlock doesn't exceed the calculated totalBlocksPerDay\n const endBlock = dIdx === endInfo.dayIndex ? endInfo.blockIndex : totalBlocksPerDay - 1;\n if (!blocks[dIdx])\n blocks[dIdx] = {};\n for (let bIdx = startBlock; bIdx <= endBlock; bIdx++) {\n // Final check for block index validity\n if (bIdx >= 0 && bIdx < totalBlocksPerDay) {\n if (!blocks[dIdx][bIdx])\n blocks[dIdx][bIdx] = [];\n // Avoid duplicates if the same appointment is processed multiple times (shouldn't happen with outer loop)\n if (!blocks[dIdx][bIdx].some((e) => e.id === appointment.id)) {\n blocks[dIdx][bIdx].push(appointment);\n }\n }\n }\n }\n });\n return blocks;\n }\n /**\n * Calculates max concurrency and effective total columns for Day View appointments.\n */\n calculateDayViewConcurrencyInfo(singleDayAppointments, // These are segments for the current day\n viewStartDate, startHour, endHour) {\n const resultInfo = new Map();\n if (singleDayAppointments.length === 0)\n return resultInfo;\n const activeAppointmentsMap = this.calculateActiveAppointmentsInBlock(singleDayAppointments, viewStartDate, startHour, endHour, 1);\n const blocks = activeAppointmentsMap[0] ?? {};\n // 1. Calculate initial maxConcurrency for each appointment segment\n const maxConcurrencyMap = new Map();\n singleDayAppointments.forEach((segment) => {\n let maxOverlapInSegmentBlocks = 0;\n const segmentStartMinutes = segment.startDate.getHours() * this.MINUTES_PER_HOUR + segment.startDate.getMinutes();\n const segmentEndMinutes = segment.endDate.getHours() * this.MINUTES_PER_HOUR + segment.endDate.getMinutes();\n // Determine blocks this segment occupies relative to view's startHour\n const viewRelativeStartMinutes = Math.max(0, segmentStartMinutes - startHour * this.MINUTES_PER_HOUR);\n const viewRelativeEndMinutes = Math.min((endHour - startHour) * this.MINUTES_PER_HOUR, segmentEndMinutes - startHour * this.MINUTES_PER_HOUR);\n const firstBlockIndex = Math.floor(viewRelativeStartMinutes / this.BLOCK_DURATION_MINUTES);\n const lastBlockIndex = Math.floor((viewRelativeEndMinutes - 1) / this.BLOCK_DURATION_MINUTES); // -1 because end is exclusive for block counting\n for (let blockIdx = firstBlockIndex; blockIdx <= lastBlockIndex; blockIdx++) {\n const appointmentsInBlock = blocks[blockIdx];\n if (appointmentsInBlock) {\n maxOverlapInSegmentBlocks = Math.max(maxOverlapInSegmentBlocks, appointmentsInBlock.length);\n }\n }\n maxConcurrencyMap.set(segment.id, maxOverlapInSegmentBlocks || 1);\n });\n // 2. Iteratively determine effectiveTotalColumns for groups of overlapping appointments\n const initialEffectiveTotalColumns = new Map();\n singleDayAppointments.forEach((segment) => {\n initialEffectiveTotalColumns.set(segment.id, maxConcurrencyMap.get(segment.id) || 1);\n });\n let changed = true;\n while (changed) {\n changed = false;\n singleDayAppointments.forEach((segmentA) => {\n singleDayAppointments.forEach((segmentB) => {\n if (segmentA.id === segmentB.id)\n return;\n if (this.doAppointmentsOverlap(segmentA, segmentB)) {\n const etcA = initialEffectiveTotalColumns.get(segmentA.id) || 1;\n const etcB = initialEffectiveTotalColumns.get(segmentB.id) || 1;\n const maxETC = Math.max(etcA, etcB);\n if (etcA !== maxETC) {\n initialEffectiveTotalColumns.set(segmentA.id, maxETC);\n changed = true;\n }\n if (etcB !== maxETC) {\n initialEffectiveTotalColumns.set(segmentB.id, maxETC);\n changed = true;\n }\n }\n });\n });\n }\n // Populate final result\n singleDayAppointments.forEach((segment) => {\n resultInfo.set(segment.id, {\n maxConcurrency: maxConcurrencyMap.get(segment.id) || 1,\n effectiveTotalColumns: initialEffectiveTotalColumns.get(segment.id) || 1,\n });\n });\n return resultInfo;\n }\n /**\n * Groups appointments by the block they START in for Week View.\n */\n calculateWeekViewAppointmentsByStartBlock(singleDayAppointments, viewStartDate, startHour, endHour) {\n const blocks = {};\n singleDayAppointments.forEach((appointment) => {\n if (!appointment.startDate)\n return;\n const startInfo = this.getBlockIdentifier(this.calendarService.create(appointment.startDate), viewStartDate, startHour, endHour, 7);\n if (startInfo) {\n const { dayIndex, blockIndex } = startInfo;\n if (!blocks[dayIndex])\n blocks[dayIndex] = {};\n if (!blocks[dayIndex][blockIndex])\n blocks[dayIndex][blockIndex] = [];\n blocks[dayIndex][blockIndex].push(appointment);\n }\n });\n return blocks;\n }\n /**\n * Groups appointments by the day(s) they occur on within a given date range.\n * Returns a Map where the key is the date string ('YYYY-MM-DD') and the value is an array of appointments.\n */\n groupAppointmentsByDay(appointments, viewStartDate, // First day visible in the grid\n viewEndDate) {\n const groupedAppointments = new Map();\n if (!appointments || appointments.length === 0 || !viewStartDate || !viewEndDate) {\n return groupedAppointments;\n }\n // Pre-calculate the end date for comparison (exclusive)\n const exclusiveViewEndDate = viewEndDate.add('day', 1);\n appointments.forEach((appointment) => {\n if (!appointment.startDate || !appointment.endDate || !appointment.id)\n return;\n // Determine the effective start and end dates of the appointment clamped by the view range\n const appointmentStart = this.calendarService.create(appointment.startDate);\n const appointmentEnd = this.calendarService.create(appointment.endDate);\n // Skip if appointment ends before the view starts or starts after the view ends\n if (appointmentEnd.compare(viewStartDate, 'day') < 0 ||\n appointmentStart.compare(exclusiveViewEndDate, 'day') >= 0) {\n return;\n }\n // Clamp start date to the view start date\n let currentDay = appointmentStart.compare(viewStartDate, 'day') < 0 ? viewStartDate : appointmentStart.startOf('day');\n // Loop through each day the appointment spans within the view range\n let safeCount = 0; // Prevent infinite loops\n while (currentDay.compare(appointmentEnd, 'day') <= 0 &&\n currentDay.compare(exclusiveViewEndDate, 'day') < 0 &&\n safeCount < 100) {\n const dateString = this.formatService.format(currentDay, 'datetime', { format: 'YYYY-MM-DD' }); // Use a consistent key format\n if (!groupedAppointments.has(dateString)) {\n groupedAppointments.set(dateString, []);\n }\n // Add the appointment if it's not already in the list for that day\n if (!groupedAppointments.get(dateString).some((e) => e.id === appointment.id)) {\n groupedAppointments.get(dateString).push(appointment);\n }\n currentDay = currentDay.add('day', 1);\n safeCount++;\n }\n if (safeCount >= 100) {\n console.warn('Safety break hit in groupAppointmentsByDay loop for appointment:', appointment.id);\n }\n });\n return groupedAppointments;\n }\n getDayOfWeekNumber(dayName) {\n switch (dayName) {\n case 'sunday':\n return 1;\n case 'monday':\n return 2;\n case 'tuesday':\n return 3;\n case 'wednesday':\n return 4;\n case 'thursday':\n return 5;\n case 'friday':\n return 6;\n case 'saturday':\n return 7;\n default:\n console.warn(`Invalid day name: ${dayName}. Defaulting to Sunday (1).`);\n return 1;\n }\n }\n getSlotData(startDate, view) {\n let endDate;\n switch (view) {\n case 'day':\n case 'week':\n endDate = startDate.add('minute', this.BLOCK_DURATION_MINUTES);\n break;\n case 'timeline-day':\n case 'timeline-multi-day':\n endDate = startDate.add('minute', this.BLOCK_DURATION_MINUTES * 2);\n break;\n case 'month':\n case 'agenda':\n case 'timeline-month':\n startDate = startDate.startOf('day');\n endDate = startDate.endOf('day');\n break;\n }\n return { startDate, endDate, view };\n }\n handleEvent(event, eventOutputMap, eventType) {\n const mouseEvent = event.nativeEvent;\n mouseEvent.preventDefault();\n mouseEvent.stopPropagation();\n if (eventType === 'appointment') {\n const appointmentOutputMap = eventOutputMap[eventType];\n const emitter = appointmentOutputMap[mouseEvent.type];\n if (emitter)\n emitter.emit(event);\n }\n if (eventType === 'slot') {\n const slotOutputMap = eventOutputMap[eventType];\n const emitter = slotOutputMap[mouseEvent.type];\n if (emitter)\n emitter.emit(event);\n }\n }\n // --- Timeline Specific Helpers ---\n calculateTimelineLayout(\n // `appt` here will be an AXSchedulerAppointmentSegmentType when called from TimelineDayView\n appt, viewStartHour, // e.g., 8 for 8 AM\n viewEndHour) {\n if (!appt?.startDate ||\n !appt.endDate ||\n typeof viewStartHour !== 'number' ||\n typeof viewEndHour !== 'number' ||\n viewStartHour >= viewEndHour // Basic sanity check\n ) {\n console.warn('calculateTimelineLayout: Invalid input', { appt, viewStartHour, viewEndHour });\n return null;\n }\n const totalViewDurationMinutes = (viewEndHour - viewStartHour) * 60;\n if (totalViewDurationMinutes <= 0)\n return null; // No viewable duration\n // Segment's start and end times (these are already clipped to the day by getClonedAppointmentSegmentOnDay)\n const segmentStart = appt.startDate;\n const segmentEnd = appt.endDate;\n // --- Calculate Start Position (left) ---\n // Effective start of the segment within the view's hours for THIS day\n let effectiveSegmentStartMinutesInDay = segmentStart.getHours() * 60 + segmentStart.getMinutes();\n // Clamp to viewStartHour for calculation if segment starts before viewable hours (shouldn't happen if segmenter worked)\n effectiveSegmentStartMinutesInDay = Math.max(effectiveSegmentStartMinutesInDay, viewStartHour * 60);\n // Clamp to viewEndHour for calculation if segment starts after viewable hours (shouldn't happen)\n effectiveSegmentStartMinutesInDay = Math.min(effectiveSegmentStartMinutesInDay, viewEndHour * 60);\n const minutesFromViewStartToSegmentStart = effectiveSegmentStartMinutesInDay - viewStartHour * 60;\n // If segment effectively starts before the viewable part (after clamping), it means it's not visible or starts at 0%\n if (minutesFromViewStartToSegmentStart < 0 &&\n Math.abs(minutesFromViewStartToSegmentStart) > 1e-6 /*epsilon for float issues*/) {\n // This case should ideally be caught by the segmenter or initial overlap checks.\n // If it happens, treat as starting at 0% but it might mean no visible part.\n }\n const leftPercentage = (Math.max(0, minutesFromViewStartToSegmentStart) / totalViewDurationMinutes) * 100;\n // --- Calculate Duration and Width ---\n // Effective end of the segment within the view's hours for THIS day\n let effectiveSegmentEndMinutesInDay = segmentEnd.getHours() * 60 + segmentEnd.getMinutes();\n if (segmentEnd.getHours() === 0 && segmentEnd.getMinutes() === 0 && segmentEnd.getTime() > segmentStart.getTime()) {\n // If segment ends exactly at midnight (00:00 of next day, meaning it filled up to 24:00 of current day)\n effectiveSegmentEndMinutesInDay = 24 * 60;\n }\n // Clamp to viewEndHour for calculation\n effectiveSegmentEndMinutesInDay = Math.min(effectiveSegmentEndMinutesInDay, viewEndHour * 60);\n // Clamp to viewStartHour for calculation (if segment ends before view starts)\n effectiveSegmentEndMinutesInDay = Math.max(effectiveSegmentEndMinutesInDay, viewStartHour * 60);\n const segmentDurationMinutesInView = Math.max(0, effectiveSegmentEndMinutesInDay - effectiveSegmentStartMinutesInDay);\n if (segmentDurationMinutesInView <= 0) {\n // Segment has no visible duration within the timeline hours\n return null;\n }\n const widthPercentage = (segmentDurationMinutesInView / totalViewDurationMinutes) * 100;\n // Ensure percentages are valid\n if (leftPercentage > 100 ||\n leftPercentage < 0 ||\n widthPercentage <= 0 ||\n widthPercentage > 100 ||\n leftPercentage + widthPercentage > 100.0001 /*allow for float errors*/) {\n // This might indicate an issue with date clamping or logic.\n // For now, if it results in an invalid layout, return null.\n // console.warn(\"Timeline layout calculation resulted in out-of-bounds percentages:\",\n // {leftPercentage, widthPercentage, segmentStart, segmentEnd, viewStartHour, viewEndHour});\n // A common case for (left + width > 100) is if an event ends *exactly* at viewEndHour,\n // and viewEndHour itself is the boundary.\n // Let's be a bit tolerant here if width is positive.\n if (widthPercentage <= 0)\n return null;\n }\n return {\n left: `${Math.max(0, Math.min(100, leftPercentage))}%`,\n width: `${Math.max(0, Math.min(100, widthPercentage))}%`,\n };\n }\n /**\n * Calculates the visible segment of a timed appointment on a specific day,\n * constrained by the view's start and end hours.\n * Returns a new appointment-like object representing the segment.\n */\n getClonedAppointmentSegmentOnDay(appointment, // This is the ORIGINAL appointment\n day, viewStartHour, viewEndHour, isFullDayCellContext = false) {\n if (!appointment || !appointment.startDate || !appointment.endDate) {\n return null;\n }\n const appointmentStartDate = this.calendarService.create(appointment.startDate);\n const appointmentEndDate = this.calendarService.create(appointment.endDate);\n if (appointment.allDay) {\n const dayStartOf = day.clone().startOf('day');\n if (appointmentStartDate.startOf('day').equal(dayStartOf, 'day')) {\n return {\n ...appointment,\n startDate: dayStartOf.date,\n endDate: dayStartOf.clone().add('day', 1).startOf('day').date,\n allDay: true,\n originalStartDate: appointmentStartDate.date,\n originalEndDate: appointmentEndDate.date,\n isContinuationFromPreviousDay: false,\n isContinuationToNextDay: appointmentEndDate.startOf('day').compare(dayStartOf, 'day') > 0,\n originalAppointmentRef: appointment,\n };\n }\n else if (appointmentStartDate.startOf('day').compare(dayStartOf, 'day') < 0 &&\n appointmentEndDate.startOf('day').compare(dayStartOf, 'day') >= 0) {\n return {\n ...appointment,\n startDate: dayStartOf.date,\n endDate: dayStartOf.clone().add('day', 1).startOf('day').date,\n allDay: true,\n originalStartDate: appointmentStartDate.date,\n originalEndDate: appointmentEndDate.date,\n isContinuationFromPreviousDay: true,\n isContinuationToNextDay: appointmentEndDate.startOf('day').compare(dayStartOf, 'day') > 0,\n originalAppointmentRef: appointment,\n };\n }\n else {\n return null;\n }\n }\n const dayStartBoundary = isFullDayCellContext\n ? day.clone().startOf('day')\n : day.clone().set('hour', viewStartHour).startOf('hour');\n const dayEndBoundary = isFullDayCellContext\n ? day.clone().add('day', 1).startOf('day')\n : viewEndHour === 24 || (viewEndHour === 0 && viewStartHour === 0)\n ? day.clone().add('day', 1).startOf('day')\n : day.clone().set('hour', viewEndHour).startOf('hour');\n if (appointmentEndDate.compare(dayStartBoundary, 'second') <= 0 ||\n appointmentStartDate.compare(dayEndBoundary, 'second') >= 0) {\n return null;\n }\n const segmentStartDate = appointmentStartDate.compare(dayStartBoundary, 'second') > 0 ? appointmentStartDate : dayStartBoundary;\n const segmentEndDate = appointmentEndDate.compare(dayEndBoundary, 'second') < 0 ? appointmentEndDate : dayEndBoundary;\n if (segmentStartDate.compare(segmentEndDate, 'second') >= 0) {\n return null;\n }\n const isContinuationFromPreviousDay = appointmentStartDate.compare(segmentStartDate, 'second') < 0;\n const isContinuationToNextDay = appointmentEndDate.compare(segmentEndDate, 'second') > 0;\n const duration = appointmentStartDate.duration(appointmentEndDate);\n return {\n ...appointment,\n startDate: segmentStartDate.date,\n endDate: segmentEndDate.date,\n allDay: appointment.allDay || duration.total.miliseconds >= 24 * 60 * 60 * 1000 - 1,\n originalStartDate: appointmentStartDate.date,\n originalEndDate: appointmentEndDate.date,\n isContinuationFromPreviousDay,\n isContinuationToNextDay,\n originalAppointmentRef: appointment,\n };\n }\n getOriginalAppointment(item) {\n const segment = item;\n if (segment.originalAppointmentRef) {\n return segment.originalAppointmentRef;\n }\n return item;\n }\n isHoliday(date) {\n return this.calendarService.holidays.some((d) => date.equal(d.date, 'day'));\n }\n isWeekend(date, calendar) {\n const weekend = this.calendarService.resolveCalendar(calendar).weekend;\n return weekend.includes(date.dayOfWeek - 1);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root', // Provide service application-wide\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3NjaGVkdWxlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBYyxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFlbkQsTUFBTSxPQUFPLGtCQUFrQjtJQUgvQjtRQUlVLGtCQUFhLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3hDLG9CQUFlLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFM0Msa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFDbkIscUJBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLDJCQUFzQixHQUFHLEVBQUUsQ0FBQztRQUM1Qiw0QkFBdUIsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ3BDLHlCQUFvQixHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztLQXNtQjNHO0lBcG1CQzs7T0FFRztJQUNILHFCQUFxQixDQUFDLFlBQW9DLEVBQUUsWUFBb0M7UUFDOUYsSUFBSSxDQUFDLFlBQVksRUFBRSxTQUFTLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLFNBQVMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMzRyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2hELE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDNUMsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNoRCxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVDLG1GQUFtRjtRQUNuRixPQUFPLE1BQU0sR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQztJQUN4QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCwwQkFBMEIsQ0FBQyxXQUFtQztRQUM1RCxJQUFJLENBQUMsV0FBVyxFQUFFLFNBQVMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPO1lBQUUsT0FBTyxDQUFDLENBQUM7UUFDOUQsTUFBTSxjQUFjLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3ZGLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsY0FBYyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRDs7T0FFRztJQUNILHlCQUF5QixDQUFDLFdBQW1DO1FBQzNELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNyRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRDs7O09BR0c7SUFDSCxrQkFBa0IsQ0FDaEIsUUFBb0IsRUFDcEIsYUFBeUIsRUFDekIsU0FBaUIsRUFDakIsT0FBZSxFQUFFLHFCQUFxQjtJQUN0QyxhQUFhLEdBQUcsQ0FBQztRQUVqQixJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsUUFBUSxJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNoRyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLCtCQUErQjtRQUU1Riw2REFBNkQ7UUFDN0QsSUFDRSxRQUFRLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDO1lBQzFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxtQ0FBbUM7WUFDaEYsUUFBUSxDQUFDLElBQUksR0FBRyxTQUFTO1lBQ3pCLFFBQVEsQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLG1DQUFtQztVQUM1RCxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsNkNBQTZDO1FBQzdDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUVsSCxpREFBaUQ7UUFDakQsSUFBSSxRQUFRLEdBQUcsQ0FBQyxJQUFJLFFBQVEsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUM5QyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQy9FLE1BQU0sb0JBQW9CLEdBQUcsY0FBYyxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFFaEYsNkVBQTZFO1FBQzdFLElBQUksb0JBQW9CLEdBQUcsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRTFDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFFbEYsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsa0NBQWtDLENBQ2hDLHFCQUFzRCxFQUN0RCxhQUF5QixFQUN6QixTQUFpQixFQUNqQixPQUFlLEVBQ2YsYUFBcUI7UUFFckIsTUFBTSxNQUFNLEdBQXlDLEVBQUUsQ0FBQztRQUN4RCxJQUFJLENBQUMsYUFBYSxJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLElBQUksYUFBYSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3pHLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLHFCQUFxQjtRQUNsRiw0REFBNEQ7UUFDNUQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUNoQyxDQUFDLEVBQ0QsQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQzlFLENBQUM7UUFFRixxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUM1QyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFBRSxPQUFPO1lBRTlFLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVFLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRWhGLDRFQUE0RTtZQUM1RSxJQUFJLGNBQWMsR0FBRyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDO1lBQzVHLElBQUksY0FBYyxDQUFDLElBQUksR0FBRyxTQUFTO2dCQUFFLGNBQWMsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFNUcsSUFBSSxZQUFZLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQztZQUNuRyxJQUFJLFlBQVksQ0FBQyxJQUFJLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ2pDLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7Z0JBQ3RHLFlBQVksR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDakUsQ0FBQztZQUVELHlEQUF5RDtZQUN6RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQzVHLElBQUksQ0FBQyxTQUFTO2dCQUFFLE9BQU8sQ0FBQyw2Q0FBNkM7WUFFckUsNkVBQTZFO1lBQzdFLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztZQUN6RyxxRkFBcUY7WUFDckYsdUVBQXVFO1lBQ3ZFLElBQ0UsQ0FBQyxPQUFPO2dCQUNSLE9BQU8sQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVE7Z0JBQ3JDLENBQUMsT0FBTyxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUN0RixDQUFDO2dCQUNELE9BQU8sQ0FBQyxxRUFBcUU7WUFDL0UsQ0FBQztZQUVELDRFQUE0RTtZQUM1RSxLQUFLLElBQUksSUFBSSxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQztnQkFDckUsZ0ZBQWdGO2dCQUNoRixJQUFJLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLGFBQWE7b0JBQUUsU0FBUztnQkFFaEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxLQUFLLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUUscUVBQXFFO2dCQUNyRSxNQUFNLFFBQVEsR0FBRyxJQUFJLEtBQUssT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO2dCQUV4RixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztvQkFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUVyQyxLQUFLLElBQUksSUFBSSxHQUFHLFVBQVUsRUFBRSxJQUFJLElBQUksUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7b0JBQ3JELHVDQUF1QztvQkFDdkMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksR0FBRyxpQkFBaUIsRUFBRSxDQUFDO3dCQUMxQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQzs0QkFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO3dCQUNqRCwwR0FBMEc7d0JBQzFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFdBQVcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDOzRCQUM3RCxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO3dCQUN2QyxDQUFDO29CQUNILENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7T0FFRztJQUNILCtCQUErQixDQUM3QixxQkFBc0QsRUFBRSx5Q0FBeUM7SUFDakcsYUFBeUIsRUFDekIsU0FBaUIsRUFDakIsT0FBZTtRQUVmLE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxFQUFrRSxDQUFDO1FBQzdGLElBQUkscUJBQXFCLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPLFVBQVUsQ0FBQztRQUUxRCxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyxrQ0FBa0MsQ0FDbkUscUJBQXFCLEVBQ3JCLGFBQWEsRUFDYixTQUFTLEVBQ1QsT0FBTyxFQUNQLENBQUMsQ0FDRixDQUFDO1FBQ0YsTUFBTSxNQUFNLEdBQUcscUJBQXFCLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBRTlDLG1FQUFtRTtRQUNuRSxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxFQUFlLENBQUM7UUFDakQscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDeEMsSUFBSSx5QkFBeUIsR0FBRyxDQUFDLENBQUM7WUFDbEMsTUFBTSxtQkFBbUIsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xILE1BQU0saUJBQWlCLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUU1RyxzRUFBc0U7WUFDdEUsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxtQkFBbUIsR0FBRyxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDdEcsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUNyQyxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQzdDLGlCQUFpQixHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQ3RELENBQUM7WUFFRixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1lBQzNGLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxzQkFBc0IsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLGlEQUFpRDtZQUVoSixLQUFLLElBQUksUUFBUSxHQUFHLGVBQWUsRUFBRSxRQUFRLElBQUksY0FBYyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUM7Z0JBQzVFLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLG1CQUFtQixFQUFFLENBQUM7b0JBQ3hCLHlCQUF5QixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMseUJBQXlCLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzlGLENBQUM7WUFDSCxDQUFDO1lBQ0QsaUJBQWlCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUseUJBQXlCLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7UUFFSCx3RkFBd0Y7UUFDeEYsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLEdBQUcsRUFBZSxDQUFDO1FBQzVELHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3hDLDRCQUE0QixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdkYsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxPQUFPLEVBQUUsQ0FBQztZQUNmLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDaEIscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ3pDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO29CQUN6QyxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLEVBQUU7d0JBQUUsT0FBTztvQkFFeEMsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUM7d0JBQ25ELE1BQU0sSUFBSSxHQUFHLDRCQUE0QixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNoRSxNQUFNLElBQUksR0FBRyw0QkFBNEIsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDaEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7d0JBRXBDLElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDOzRCQUNwQiw0QkFBNEIsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQzs0QkFDdEQsT0FBTyxHQUFHLElBQUksQ0FBQzt3QkFDakIsQ0FBQzt3QkFDRCxJQUFJLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQzs0QkFDcEIsNEJBQTRCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7NEJBQ3RELE9BQU8sR0FBRyxJQUFJLENBQUM7d0JBQ2pCLENBQUM7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELHdCQUF3QjtRQUN4QixxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUN4QyxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUU7Z0JBQ3pCLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7Z0JBQ3RELHFCQUFxQixFQUFFLDRCQUE0QixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQzthQUN6RSxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7T0FFRztJQUNILHlDQUF5QyxDQUN2QyxxQkFBc0QsRUFDdEQsYUFBeUIsRUFDekIsU0FBaUIsRUFDakIsT0FBZTtRQUVmLE1BQU0sTUFBTSxHQUF3QyxFQUFFLENBQUM7UUFDdkQscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDNUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTO2dCQUFFLE9BQU87WUFDbkMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUN2QyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQ2xELGFBQWEsRUFDYixTQUFTLEVBQ1QsT0FBTyxFQUNQLENBQUMsQ0FDRixDQUFDO1lBQ0YsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDZCxNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxHQUFHLFNBQVMsQ0FBQztnQkFDM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7b0JBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxVQUFVLENBQUM7b0JBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDckUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNqRCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsc0JBQXNCLENBQ3BCLFlBQXNDLEVBQ3RDLGFBQXlCLEVBQUUsZ0NBQWdDO0lBQzNELFdBQXVCO1FBRXZCLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxHQUFHLEVBQW9DLENBQUM7UUFDeEUsSUFBSSxDQUFDLFlBQVksSUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pGLE9BQU8sbUJBQW1CLENBQUM7UUFDN0IsQ0FBQztRQUVELHdEQUF3RDtRQUN4RCxNQUFNLG9CQUFvQixHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXZELFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFBRSxPQUFPO1lBRTlFLDJGQUEyRjtZQUMzRixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM1RSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFeEUsZ0ZBQWdGO1lBQ2hGLElBQ0UsY0FBYyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQztnQkFDaEQsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFDMUQsQ0FBQztnQkFDRCxPQUFPO1lBQ1QsQ0FBQztZQUVELDBDQUEwQztZQUMxQyxJQUFJLFVBQVUsR0FDWixnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFdkcsb0VBQW9FO1lBQ3BFLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLHlCQUF5QjtZQUM1QyxPQUNFLFVBQVUsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQzlDLFVBQVUsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQztnQkFDbkQsU0FBUyxHQUFHLEdBQUcsRUFDZixDQUFDO2dCQUNELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLDhCQUE4QjtnQkFFOUgsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO29CQUN6QyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUMxQyxDQUFDO2dCQUNELG1FQUFtRTtnQkFDbkUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssV0FBVyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQzlFLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3hELENBQUM7Z0JBRUQsVUFBVSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUN0QyxTQUFTLEVBQUUsQ0FBQztZQUNkLENBQUM7WUFDRCxJQUFJLFNBQVMsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDckIsT0FBTyxDQUFDLElBQUksQ0FBQyxrRUFBa0UsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbkcsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxtQkFBbUIsQ0FBQztJQUM3QixDQUFDO0lBRUQsa0JBQWtCLENBQUMsT0FBd0I7UUFDekMsUUFBUSxPQUFPLEVBQUUsQ0FBQztZQUNoQixLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxDQUFDLENBQUM7WUFDWCxLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxDQUFDLENBQUM7WUFDWCxLQUFLLFNBQVM7Z0JBQ1osT0FBTyxDQUFDLENBQUM7WUFDWCxLQUFLLFdBQVc7Z0JBQ2QsT0FBTyxDQUFDLENBQUM7WUFDWCxLQUFLLFVBQVU7Z0JBQ2IsT0FBTyxDQUFDLENBQUM7WUFDWCxLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxDQUFDLENBQUM7WUFDWCxLQUFLLFVBQVU7Z0JBQ2IsT0FBTyxDQUFDLENBQUM7WUFDWDtnQkFDRSxPQUFPLENBQUMsSUFBSSxDQUFDLHFCQUFxQixPQUFPLDZCQUE2QixDQUFDLENBQUM7Z0JBQ3hFLE9BQU8sQ0FBQyxDQUFDO1FBQ2IsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQ1QsU0FBcUIsRUFDckIsSUFBcUI7UUFFckIsSUFBSSxPQUFtQixDQUFDO1FBQ3hCLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDYixLQUFLLEtBQUssQ0FBQztZQUNYLEtBQUssTUFBTTtnQkFDVCxPQUFPLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7Z0JBQy9ELE1BQU07WUFDUixLQUFLLGNBQWMsQ0FBQztZQUNwQixLQUFLLG9CQUFvQjtnQkFDdkIsT0FBTyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDbkUsTUFBTTtZQUNSLEtBQUssT0FBTyxDQUFDO1lBQ2IsS0FBSyxRQUFRLENBQUM7WUFDZCxLQUFLLGdCQUFnQjtnQkFDbkIsU0FBUyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3JDLE9BQU8sR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNqQyxNQUFNO1FBQ1YsQ0FBQztRQUNELE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxXQUFXLENBQ1QsS0FBbUUsRUFDbkUsY0FBYyxFQUNkLFNBQWlDO1FBRWpDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDckMsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzVCLFVBQVUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUM3QixJQUFJLFNBQVMsS0FBSyxhQUFhLEVBQUUsQ0FBQztZQUNoQyxNQUFNLG9CQUFvQixHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2RCxNQUFNLE9BQU8sR0FBRyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsSUFBeUMsQ0FBQyxDQUFDO1lBQzNGLElBQUksT0FBTztnQkFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQXlDLENBQUMsQ0FBQztRQUN2RSxDQUFDO1FBQ0QsSUFBSSxTQUFTLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDekIsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2hELE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBa0MsQ0FBQyxDQUFDO1lBQzdFLElBQUksT0FBTztnQkFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQWtDLENBQUMsQ0FBQztRQUNoRSxDQUFDO0lBQ0gsQ0FBQztJQUVELG9DQUFvQztJQUVwQyx1QkFBdUI7SUFDckIsNEZBQTRGO0lBQzVGLElBQTRCLEVBQzVCLGFBQXFCLEVBQUUsbUJBQW1CO0lBQzFDLFdBQW1CO1FBRW5CLElBQ0UsQ0FBQyxJQUFJLEVBQUUsU0FBUztZQUNoQixDQUFDLElBQUksQ0FBQyxPQUFPO1lBQ2IsT0FBTyxhQUFhLEtBQUssUUFBUTtZQUNqQyxPQUFPLFdBQVcsS0FBSyxRQUFRO1lBQy9CLGFBQWEsSUFBSSxXQUFXLENBQUMscUJBQXFCO1VBQ2xELENBQUM7WUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLHdDQUF3QyxFQUFFLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQzdGLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxXQUFXLEdBQUcsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3BFLElBQUksd0JBQXdCLElBQUksQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDLENBQUMsdUJBQXVCO1FBRXZFLDJHQUEyRztRQUMzRyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ3BDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFFaEMsMENBQTBDO1FBQzFDLHNFQUFzRTtRQUN0RSxJQUFJLGlDQUFpQyxHQUFHLFlBQVksQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUcsWUFBWSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRWpHLHdIQUF3SDtRQUN4SCxpQ0FBaUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGlDQUFpQyxFQUFFLGFBQWEsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNwRyxpR0FBaUc7UUFDakcsaUNBQWlDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsRUFBRSxXQUFXLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFFbEcsTUFBTSxrQ0FBa0MsR0FBRyxpQ0FBaUMsR0FBRyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBRWxHLHFIQUFxSDtRQUNySCxJQUNFLGtDQUFrQyxHQUFHLENBQUM7WUFDdEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQ0FBa0MsQ0FBQyxHQUFHLElBQUksQ0FBQyw0QkFBNEIsRUFDaEYsQ0FBQztZQUNELGlGQUFpRjtZQUNqRiw0RUFBNEU7UUFDOUUsQ0FBQztRQUVELE1BQU0sY0FBYyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsa0NBQWtDLENBQUMsR0FBRyx3QkFBd0IsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUUxRyx1Q0FBdUM7UUFDdkMsb0VBQW9FO1FBQ3BFLElBQUksK0JBQStCLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsR0FBRyxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDM0YsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxHQUFHLFlBQVksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ2xILHdHQUF3RztZQUN4RywrQkFBK0IsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQzVDLENBQUM7UUFFRCx1Q0FBdUM7UUFDdkMsK0JBQStCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsRUFBRSxXQUFXLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDOUYsOEVBQThFO1FBQzlFLCtCQUErQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsK0JBQStCLEVBQUUsYUFBYSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBRWhHLE1BQU0sNEJBQTRCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDM0MsQ0FBQyxFQUNELCtCQUErQixHQUFHLGlDQUFpQyxDQUNwRSxDQUFDO1FBRUYsSUFBSSw0QkFBNEIsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN0Qyw0REFBNEQ7WUFDNUQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsTUFBTSxlQUFlLEdBQUcsQ0FBQyw0QkFBNEIsR0FBRyx3QkFBd0IsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUV4RiwrQkFBK0I7UUFDL0IsSUFDRSxjQUFjLEdBQUcsR0FBRztZQUNwQixjQUFjLEdBQUcsQ0FBQztZQUNsQixlQUFlLElBQUksQ0FBQztZQUNwQixlQUFlLEdBQUcsR0FBRztZQUNyQixjQUFjLEdBQUcsZUFBZSxHQUFHLFFBQVEsQ0FBQywwQkFBMEIsRUFDdEUsQ0FBQztZQUNELDREQUE0RDtZQUM1RCw0REFBNEQ7WUFDNUQscUZBQXFGO1lBQ3JGLHlHQUF5RztZQUN6Ryx1RkFBdUY7WUFDdkYsMENBQTBDO1lBQzFDLHFEQUFxRDtZQUNyRCxJQUFJLGVBQWUsSUFBSSxDQUFDO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3hDLENBQUM7UUFFRCxPQUFPO1lBQ0wsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQUMsR0FBRztZQUN0RCxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQyxHQUFHO1NBQ3pELENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGdDQUFnQyxDQUM5QixXQUFtQyxFQUFFLG1DQUFtQztJQUN4RSxHQUFlLEVBQ2YsYUFBcUIsRUFDckIsV0FBbUIsRUFDbkIsb0JBQW9CLEdBQUcsS0FBSztRQUU1QixJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNuRSxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoRixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU1RSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN2QixNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlDLElBQUksb0JBQW9CLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDakUsT0FBTztvQkFDTCxHQUFHLFdBQVc7b0JBQ2QsU0FBUyxFQUFFLFVBQVUsQ0FBQyxJQUFJO29CQUMxQixPQUFPLEVBQUUsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUk7b0JBQzdELE1BQU0sRUFBRSxJQUFJO29CQUNaLGlCQUFpQixFQUFFLG9CQUFvQixDQUFDLElBQUk7b0JBQzVDLGVBQWUsRUFBRSxrQkFBa0IsQ0FBQyxJQUFJO29CQUN4Qyw2QkFBNkIsRUFBRSxLQUFLO29CQUNwQyx1QkFBdUIsRUFBRSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDO29CQUN6RixzQkFBc0IsRUFBRSxXQUFXO2lCQUNwQyxDQUFDO1lBQ0osQ0FBQztpQkFBTSxJQUNMLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUM7Z0JBQ2xFLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFDakUsQ0FBQztnQkFDRCxPQUFPO29CQUNMLEdBQUcsV0FBVztvQkFDZCxTQUFTLEVBQUUsVUFBVSxDQUFDLElBQUk7b0JBQzFCLE9BQU8sRUFBRSxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSTtvQkFDN0QsTUFBTSxFQUFFLElBQUk7b0JBQ1osaUJBQWlCLEVBQUUsb0JBQW9CLENBQUMsSUFBSTtvQkFDNUMsZUFBZSxFQUFFLGtCQUFrQixDQUFDLElBQUk7b0JBQ3hDLDZCQUE2QixFQUFFLElBQUk7b0JBQ25DLHVCQUF1QixFQUFFLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUM7b0JBQ3pGLHNCQUFzQixFQUFFLFdBQVc7aUJBQ3BDLENBQUM7WUFDSixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sZ0JBQWdCLEdBQUcsb0JBQW9CO1lBQzNDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUM1QixDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNELE1BQU0sY0FBYyxHQUFHLG9CQUFvQjtZQUN6QyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUMxQyxDQUFDLENBQUMsV0FBVyxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsS0FBSyxDQUFDLElBQUksYUFBYSxLQUFLLENBQUMsQ0FBQztnQkFDaEUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQzFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFM0QsSUFDRSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQztZQUMzRCxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFDM0QsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELE1BQU0sZ0JBQWdCLEdBQ3BCLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztRQUN6RyxNQUFNLGNBQWMsR0FDbEIsa0JBQWtCLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7UUFFakcsSUFBSSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzVELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELE1BQU0sNkJBQTZCLEdBQUcsb0JBQW9CLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuRyxNQUFNLHVCQUF1QixHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pGLE1BQU0sUUFBUSxHQUFHLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBRW5FLE9BQU87WUFDTCxHQUFHLFdBQVc7WUFDZCxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsSUFBSTtZQUNoQyxPQUFPLEVBQUUsY0FBYyxDQUFDLElBQUk7WUFDNUIsTUFBTSxFQUFFLFdBQVcsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxXQUFXLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUM7WUFDbkYsaUJBQWlCLEVBQUUsb0JBQW9CLENBQUMsSUFBSTtZQUM1QyxlQUFlLEVBQUUsa0JBQWtCLENBQUMsSUFBSTtZQUN4Qyw2QkFBNkI7WUFDN0IsdUJBQXVCO1lBQ3ZCLHNCQUFzQixFQUFFLFdBQVc7U0FDcEMsQ0FBQztJQUNKLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxJQUE0RDtRQUNqRixNQUFNLE9BQU8sR0FBRyxJQUFxQyxDQUFDO1FBQ3RELElBQUksT0FBTyxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDbkMsT0FBTyxPQUFPLENBQUMsc0JBQXNCLENBQUM7UUFDeEMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFNBQVMsQ0FBQyxJQUFnQjtRQUN4QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUNELFNBQVMsQ0FBQyxJQUFnQixFQUFFLFFBQWdCO1FBQzFDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUN2RSxPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM5QyxDQUFDOzhHQTdtQlUsa0JBQWtCO2tIQUFsQixrQkFBa0IsY0FGakIsTUFBTTs7MkZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNLEVBQUUsbUNBQW1DO2lCQUN4RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYQ2FsZW5kYXJTZXJ2aWNlLCBBWERhdGVUaW1lIH0gZnJvbSAnQGFjb3JleC9jb3JlL2RhdGUtdGltZSc7XG5pbXBvcnQgeyBBWEZvcm1hdFNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvZm9ybWF0JztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQVhEYXlPZldlZWtOYW1lLFxuICBBWFNjaGVkdWxlckFjdGl2ZUFwcG9pbnRtZW50c0luQmxvY2ssXG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnQsXG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRzQnlTdGFydEJsb2NrLFxuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCxcbiAgQVhTY2hlZHVsZXJCbG9ja0lkZW50aWZpZXIsXG4gIEFYU2NoZWR1bGVyVmlldyxcbn0gZnJvbSAnLi9zY2hlZHVsZXIuY2xhc3MnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQsIEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQgfSBmcm9tICcuL3NjaGVkdWxlci5jb21wb25lbnQnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290JywgLy8gUHJvdmlkZSBzZXJ2aWNlIGFwcGxpY2F0aW9uLXdpZGVcbn0pXG5leHBvcnQgY2xhc3MgQVhTY2hlZHVsZXJTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBmb3JtYXRTZXJ2aWNlID0gaW5qZWN0KEFYRm9ybWF0U2VydmljZSk7XG4gIHByaXZhdGUgY2FsZW5kYXJTZXJ2aWNlID0gaW5qZWN0KEFYQ2FsZW5kYXJTZXJ2aWNlKTtcblxuICByZWFkb25seSBIT1VSU19QRVJfREFZID0gMjQ7XG4gIHJlYWRvbmx5IE1JTlVURVNfUEVSX0hPVVIgPSA2MDtcbiAgcmVhZG9ubHkgQkxPQ0tfRFVSQVRJT05fTUlOVVRFUyA9IDMwO1xuICByZWFkb25seSBNSUxMSVNFQ09ORFNfUEVSX01JTlVURSA9IDYwICogMTAwMDtcbiAgcmVhZG9ubHkgTUlMTElTRUNPTkRTX1BFUl9EQVkgPSB0aGlzLkhPVVJTX1BFUl9EQVkgKiB0aGlzLk1JTlVURVNfUEVSX0hPVVIgKiB0aGlzLk1JTExJU0VDT05EU19QRVJfTUlOVVRFO1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdHdvIGFwcG9pbnRtZW50cyBvdmVybGFwIGluIHRpbWUuXG4gICAqL1xuICBkb0FwcG9pbnRtZW50c092ZXJsYXAoYXBwb2ludG1lbnRBOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50LCBhcHBvaW50bWVudEI6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQpOiBib29sZWFuIHtcbiAgICBpZiAoIWFwcG9pbnRtZW50QT8uc3RhcnREYXRlIHx8ICFhcHBvaW50bWVudEEuZW5kRGF0ZSB8fCAhYXBwb2ludG1lbnRCPy5zdGFydERhdGUgfHwgIWFwcG9pbnRtZW50Qi5lbmREYXRlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0QSA9IGFwcG9pbnRtZW50QS5zdGFydERhdGUuZ2V0VGltZSgpO1xuICAgIGNvbnN0IGVuZEEgPSBhcHBvaW50bWVudEEuZW5kRGF0ZS5nZXRUaW1lKCk7XG4gICAgY29uc3Qgc3RhcnRCID0gYXBwb2ludG1lbnRCLnN0YXJ0RGF0ZS5nZXRUaW1lKCk7XG4gICAgY29uc3QgZW5kQiA9IGFwcG9pbnRtZW50Qi5lbmREYXRlLmdldFRpbWUoKTtcbiAgICAvLyBVc2VzIHN0cmljdCBvdmVybGFwIGNoZWNrIChjaGFuZ2UgPCAvID4gdG8gPD0gLyA+PSBpZiB0b3VjaGluZyBib3VuZGFyaWVzIGNvdW50KVxuICAgIHJldHVybiBzdGFydEEgPCBlbmRCICYmIGVuZEEgPiBzdGFydEI7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBhcHBvaW50bWVudCBkdXJhdGlvbiBpbiBtaW51dGVzLlxuICAgKi9cbiAgY2FsY3VsYXRlRHVyYXRpb25Jbk1pbnV0ZXMoQXBwb2ludG1lbnQ6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQpOiBudW1iZXIge1xuICAgIGlmICghQXBwb2ludG1lbnQ/LnN0YXJ0RGF0ZSB8fCAhQXBwb2ludG1lbnQuZW5kRGF0ZSkgcmV0dXJuIDA7XG4gICAgY29uc3QgZHVyYXRpb25NaWxsaXMgPSBBcHBvaW50bWVudC5lbmREYXRlLmdldFRpbWUoKSAtIEFwcG9pbnRtZW50LnN0YXJ0RGF0ZS5nZXRUaW1lKCk7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIGR1cmF0aW9uTWlsbGlzIC8gdGhpcy5NSUxMSVNFQ09ORFNfUEVSX01JTlVURSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBhcHBvaW50bWVudCBkdXJhdGlvbiBpbiBibG9ja3MgKGRlZmF1bHQgMzAgbWluKS5cbiAgICovXG4gIGNhbGN1bGF0ZUR1cmF0aW9uSW5CbG9ja3MoYXBwb2ludG1lbnQ6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQpOiBudW1iZXIge1xuICAgIGNvbnN0IGR1cmF0aW9uTWludXRlcyA9IHRoaXMuY2FsY3VsYXRlRHVyYXRpb25Jbk1pbnV0ZXMoYXBwb2ludG1lbnQpO1xuICAgIHJldHVybiBNYXRoLmNlaWwoZHVyYXRpb25NaW51dGVzIC8gdGhpcy5CTE9DS19EVVJBVElPTl9NSU5VVEVTKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBkYXkgaW5kZXggKHJlbGF0aXZlIHRvIHZpZXcgc3RhcnQpIGFuZCBibG9jayBpbmRleCAocmVsYXRpdmUgdG8gc3RhcnQgaG91cilcbiAgICogZm9yIGEgZ2l2ZW4gZGF0ZSB0aW1lIHdpdGhpbiB0aGUgdmlldyBjb250ZXh0LiBSZXR1cm5zIG51bGwgaWYgb3V0c2lkZSB2aWV3LlxuICAgKi9cbiAgZ2V0QmxvY2tJZGVudGlmaWVyKFxuICAgIGRhdGVUaW1lOiBBWERhdGVUaW1lLFxuICAgIHZpZXdTdGFydERhdGU6IEFYRGF0ZVRpbWUsXG4gICAgc3RhcnRIb3VyOiBudW1iZXIsXG4gICAgZW5kSG91cjogbnVtYmVyLCAvLyBFeGNsdXNpdmUgZW5kIGhvdXJcbiAgICB2aWV3VG90YWxEYXlzID0gMSwgLy8gRGVmYXVsdCB0byAxIGZvciBkYXkgdmlld1xuICApOiBBWFNjaGVkdWxlckJsb2NrSWRlbnRpZmllciB8IG51bGwge1xuICAgIGlmICghdmlld1N0YXJ0RGF0ZSB8fCAhZGF0ZVRpbWUgfHwgdHlwZW9mIHN0YXJ0SG91ciAhPT0gJ251bWJlcicgfHwgdHlwZW9mIGVuZEhvdXIgIT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qgdmlld0VuZERhdGUgPSB2aWV3U3RhcnREYXRlLmFkZCgnZGF5Jywgdmlld1RvdGFsRGF5cyk7IC8vIENhbGN1bGF0ZSBleGNsdXNpdmUgZW5kIGRhdGVcblxuICAgIC8vIENoZWNrIGlmIGRhdGVUaW1lIGlzIHdpdGhpbiB0aGUgdmlldydzIGRhdGUgYW5kIHRpbWUgcmFuZ2VcbiAgICBpZiAoXG4gICAgICBkYXRlVGltZS5jb21wYXJlKHZpZXdTdGFydERhdGUsICdkYXknKSA8IDAgfHxcbiAgICAgIGRhdGVUaW1lLmNvbXBhcmUodmlld0VuZERhdGUsICdkYXknKSA+PSAwIHx8IC8vIENoZWNrIGFnYWluc3QgZXhjbHVzaXZlIGVuZCBkYXRlXG4gICAgICBkYXRlVGltZS5ob3VyIDwgc3RhcnRIb3VyIHx8XG4gICAgICBkYXRlVGltZS5ob3VyID49IGVuZEhvdXIgLy8gQ2hlY2sgYWdhaW5zdCBleGNsdXNpdmUgZW5kIGhvdXJcbiAgICApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIENhbGN1bGF0ZSBkYXkgaW5kZXggcmVsYXRpdmUgdG8gdmlldyBzdGFydFxuICAgIGNvbnN0IGRheUluZGV4ID0gTWF0aC5mbG9vcigoZGF0ZVRpbWUuZGF0ZS5nZXRUaW1lKCkgLSB2aWV3U3RhcnREYXRlLmRhdGUuZ2V0VGltZSgpKSAvIHRoaXMuTUlMTElTRUNPTkRTX1BFUl9EQVkpO1xuXG4gICAgLy8gRW5zdXJlIGRheUluZGV4IGlzIHZhbGlkIGZvciB0aGUgdmlldyBkdXJhdGlvblxuICAgIGlmIChkYXlJbmRleCA8IDAgfHwgZGF5SW5kZXggPj0gdmlld1RvdGFsRGF5cykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgbWludXRlc0ludG9EYXkgPSBkYXRlVGltZS5ob3VyICogdGhpcy5NSU5VVEVTX1BFUl9IT1VSICsgZGF0ZVRpbWUubWludXRlO1xuICAgIGNvbnN0IG1pbnV0ZXNJbnRvVmlld0hvdXJzID0gbWludXRlc0ludG9EYXkgLSBzdGFydEhvdXIgKiB0aGlzLk1JTlVURVNfUEVSX0hPVVI7XG5cbiAgICAvLyBUaGlzIGNoZWNrIHNob3VsZCBiZSByZWR1bmRhbnQgZHVlIHRvIGluaXRpYWwgaG91ciBjaGVjaywgYnV0IHNhZmUgdG8ga2VlcFxuICAgIGlmIChtaW51dGVzSW50b1ZpZXdIb3VycyA8IDApIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgYmxvY2tJbmRleCA9IE1hdGguZmxvb3IobWludXRlc0ludG9WaWV3SG91cnMgLyB0aGlzLkJMT0NLX0RVUkFUSU9OX01JTlVURVMpO1xuXG4gICAgcmV0dXJuIHsgZGF5SW5kZXgsIGJsb2NrSW5kZXggfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcm91cHMgYXBwb2ludG1lbnRzIGJ5IHRoZSBibG9ja3MgdGhleSBhcmUgQUNUSVZFIGluIGZvciBhIGdpdmVuIHZpZXcuXG4gICAqIEBwYXJhbSB2aWV3VG90YWxEYXlzIC0gTnVtYmVyIG9mIGRheXMgaW4gdGhlIGN1cnJlbnQgdmlldyAoMSBmb3IgRGF5LCA3IGZvciBXZWVrLCBldGMuKVxuICAgKi9cbiAgY2FsY3VsYXRlQWN0aXZlQXBwb2ludG1lbnRzSW5CbG9jayhcbiAgICBzaW5nbGVEYXlBcHBvaW50bWVudHM6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50W10sXG4gICAgdmlld1N0YXJ0RGF0ZTogQVhEYXRlVGltZSxcbiAgICBzdGFydEhvdXI6IG51bWJlcixcbiAgICBlbmRIb3VyOiBudW1iZXIsXG4gICAgdmlld1RvdGFsRGF5czogbnVtYmVyLCAvLyBOb3cgcmVxdWlyZWRcbiAgKTogQVhTY2hlZHVsZXJBY3RpdmVBcHBvaW50bWVudHNJbkJsb2NrIHtcbiAgICBjb25zdCBibG9ja3M6IEFYU2NoZWR1bGVyQWN0aXZlQXBwb2ludG1lbnRzSW5CbG9jayA9IHt9O1xuICAgIGlmICghdmlld1N0YXJ0RGF0ZSB8fCB0eXBlb2Ygc3RhcnRIb3VyICE9PSAnbnVtYmVyJyB8fCB0eXBlb2YgZW5kSG91ciAhPT0gJ251bWJlcicgfHwgdmlld1RvdGFsRGF5cyA8PSAwKSB7XG4gICAgICByZXR1cm4gYmxvY2tzO1xuICAgIH1cbiAgICBjb25zdCB2aWV3RW5kRGF0ZSA9IHZpZXdTdGFydERhdGUuYWRkKCdkYXknLCB2aWV3VG90YWxEYXlzKTsgLy8gRXhjbHVzaXZlIGVuZCBkYXRlXG4gICAgLy8gQ2FsY3VsYXRlIHRvdGFsIGJsb2NrcyBiYXNlZCBvbiBjb25zaXN0ZW50IGJsb2NrIGR1cmF0aW9uXG4gICAgY29uc3QgdG90YWxCbG9ja3NQZXJEYXkgPSBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICAoZW5kSG91ciAtIHN0YXJ0SG91cikgKiAodGhpcy5NSU5VVEVTX1BFUl9IT1VSIC8gdGhpcy5CTE9DS19EVVJBVElPTl9NSU5VVEVTKSxcbiAgICApO1xuXG4gICAgc2luZ2xlRGF5QXBwb2ludG1lbnRzLmZvckVhY2goKGFwcG9pbnRtZW50KSA9PiB7XG4gICAgICBpZiAoIWFwcG9pbnRtZW50LnN0YXJ0RGF0ZSB8fCAhYXBwb2ludG1lbnQuZW5kRGF0ZSB8fCAhYXBwb2ludG1lbnQuaWQpIHJldHVybjtcblxuICAgICAgY29uc3QgYXBwb2ludG1lbnRFbmREYXRlID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGFwcG9pbnRtZW50LmVuZERhdGUpO1xuICAgICAgY29uc3QgYXBwb2ludG1lbnRTdGFydERhdGUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoYXBwb2ludG1lbnQuc3RhcnREYXRlKTtcblxuICAgICAgLy8gQ2xhbXAgYXBwb2ludG1lbnQgc3RhcnQvZW5kIHRpbWVzIHRvIHRoZSB2aWV3IGJvdW5kYXJpZXMgKGRheXMgYW5kIGhvdXJzKVxuICAgICAgbGV0IGVmZmVjdGl2ZVN0YXJ0ID0gYXBwb2ludG1lbnRTdGFydERhdGUuY29tcGFyZSh2aWV3U3RhcnREYXRlKSA8IDAgPyB2aWV3U3RhcnREYXRlIDogYXBwb2ludG1lbnRTdGFydERhdGU7XG4gICAgICBpZiAoZWZmZWN0aXZlU3RhcnQuaG91ciA8IHN0YXJ0SG91cikgZWZmZWN0aXZlU3RhcnQgPSBlZmZlY3RpdmVTdGFydC5zZXQoJ2hvdXInLCBzdGFydEhvdXIpLnN0YXJ0T2YoJ2hvdXInKTtcblxuICAgICAgbGV0IGVmZmVjdGl2ZUVuZCA9IGFwcG9pbnRtZW50RW5kRGF0ZS5jb21wYXJlKHZpZXdFbmREYXRlKSA+PSAwID8gdmlld0VuZERhdGUgOiBhcHBvaW50bWVudEVuZERhdGU7XG4gICAgICBpZiAoZWZmZWN0aXZlRW5kLmhvdXIgPj0gZW5kSG91cikge1xuICAgICAgICBjb25zdCBlbmREYXlCYXNlID0gZWZmZWN0aXZlRW5kLmNvbXBhcmUodmlld0VuZERhdGUpID49IDAgPyB2aWV3RW5kRGF0ZS5hZGQoJ2RheScsIC0xKSA6IGVmZmVjdGl2ZUVuZDtcbiAgICAgICAgZWZmZWN0aXZlRW5kID0gZW5kRGF5QmFzZS5zZXQoJ2hvdXInLCBlbmRIb3VyKS5zdGFydE9mKCdob3VyJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIEdldCBzdGFydCBibG9jayBpbmZvIHVzaW5nIHRoZSBzcGVjaWZpZWQgdmlld1RvdGFsRGF5c1xuICAgICAgY29uc3Qgc3RhcnRJbmZvID0gdGhpcy5nZXRCbG9ja0lkZW50aWZpZXIoZWZmZWN0aXZlU3RhcnQsIHZpZXdTdGFydERhdGUsIHN0YXJ0SG91ciwgZW5kSG91ciwgdmlld1RvdGFsRGF5cyk7XG4gICAgICBpZiAoIXN0YXJ0SW5mbykgcmV0dXJuOyAvLyBBcHBvaW50bWVudCBzdGFydHMgY29tcGxldGVseSBvdXRzaWRlIHZpZXdcblxuICAgICAgLy8gR2V0IGVuZCBibG9jayBpbmZvIChsYXN0IGJsb2NrIG9jY3VwaWVkKSB1c2luZyB0aGUgc3BlY2lmaWVkIHZpZXdUb3RhbERheXNcbiAgICAgIGNvbnN0IHRpbWVCZWZvcmVFbmQgPSBlZmZlY3RpdmVFbmQuYWRkKCdtaW51dGUnLCAtMSk7XG4gICAgICBjb25zdCBlbmRJbmZvID0gdGhpcy5nZXRCbG9ja0lkZW50aWZpZXIodGltZUJlZm9yZUVuZCwgdmlld1N0YXJ0RGF0ZSwgc3RhcnRIb3VyLCBlbmRIb3VyLCB2aWV3VG90YWxEYXlzKTtcbiAgICAgIC8vIElmIGVuZEluZm8gaXMgbnVsbCwgaXQgbWVhbnMgdGhlIGFwcG9pbnRtZW50IGVuZHMgYmVmb3JlIHRoZSB2aWV3YWJsZSBwYXJ0IHN0YXJ0cyxcbiAgICAgIC8vIG9yIGV4YWN0bHkgYXQgdGhlIHN0YXJ0LCBzbyBpdCBvY2N1cGllcyBubyBibG9ja3MuIEhhbmRsZSB0aGlzIGNhc2UuXG4gICAgICBpZiAoXG4gICAgICAgICFlbmRJbmZvIHx8XG4gICAgICAgIGVuZEluZm8uZGF5SW5kZXggPCBzdGFydEluZm8uZGF5SW5kZXggfHxcbiAgICAgICAgKGVuZEluZm8uZGF5SW5kZXggPT09IHN0YXJ0SW5mby5kYXlJbmRleCAmJiBlbmRJbmZvLmJsb2NrSW5kZXggPCBzdGFydEluZm8uYmxvY2tJbmRleClcbiAgICAgICkge1xuICAgICAgICByZXR1cm47IC8vIEFwcG9pbnRtZW50IGVmZmVjdGl2ZWx5IGhhcyBubyBkdXJhdGlvbiB3aXRoaW4gdGhlIHZpZXdhYmxlIGJsb2Nrc1xuICAgICAgfVxuXG4gICAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIGRheXMgYW5kIGJsb2NrcyB0aGUgYXBwb2ludG1lbnQgc3BhbnMgd2l0aGluIHRoZSB2aWV3XG4gICAgICBmb3IgKGxldCBkSWR4ID0gc3RhcnRJbmZvLmRheUluZGV4OyBkSWR4IDw9IGVuZEluZm8uZGF5SW5kZXg7IGRJZHgrKykge1xuICAgICAgICAvLyBDbGFtcCBkYXkgaW5kZXgganVzdCBpbiBjYXNlIChzaG91bGQgYmUgaGFuZGxlZCBieSBnZXRCbG9ja0lkZW50aWZpZXIgY2hlY2tzKVxuICAgICAgICBpZiAoZElkeCA8IDAgfHwgZElkeCA+PSB2aWV3VG90YWxEYXlzKSBjb250aW51ZTtcblxuICAgICAgICBjb25zdCBzdGFydEJsb2NrID0gZElkeCA9PT0gc3RhcnRJbmZvLmRheUluZGV4ID8gc3RhcnRJbmZvLmJsb2NrSW5kZXggOiAwO1xuICAgICAgICAvLyBNYWtlIHN1cmUgZW5kQmxvY2sgZG9lc24ndCBleGNlZWQgdGhlIGNhbGN1bGF0ZWQgdG90YWxCbG9ja3NQZXJEYXlcbiAgICAgICAgY29uc3QgZW5kQmxvY2sgPSBkSWR4ID09PSBlbmRJbmZvLmRheUluZGV4ID8gZW5kSW5mby5ibG9ja0luZGV4IDogdG90YWxCbG9ja3NQZXJEYXkgLSAxO1xuXG4gICAgICAgIGlmICghYmxvY2tzW2RJZHhdKSBibG9ja3NbZElkeF0gPSB7fTtcblxuICAgICAgICBmb3IgKGxldCBiSWR4ID0gc3RhcnRCbG9jazsgYklkeCA8PSBlbmRCbG9jazsgYklkeCsrKSB7XG4gICAgICAgICAgLy8gRmluYWwgY2hlY2sgZm9yIGJsb2NrIGluZGV4IHZhbGlkaXR5XG4gICAgICAgICAgaWYgKGJJZHggPj0gMCAmJiBiSWR4IDwgdG90YWxCbG9ja3NQZXJEYXkpIHtcbiAgICAgICAgICAgIGlmICghYmxvY2tzW2RJZHhdW2JJZHhdKSBibG9ja3NbZElkeF1bYklkeF0gPSBbXTtcbiAgICAgICAgICAgIC8vIEF2b2lkIGR1cGxpY2F0ZXMgaWYgdGhlIHNhbWUgYXBwb2ludG1lbnQgaXMgcHJvY2Vzc2VkIG11bHRpcGxlIHRpbWVzIChzaG91bGRuJ3QgaGFwcGVuIHdpdGggb3V0ZXIgbG9vcClcbiAgICAgICAgICAgIGlmICghYmxvY2tzW2RJZHhdW2JJZHhdLnNvbWUoKGUpID0+IGUuaWQgPT09IGFwcG9pbnRtZW50LmlkKSkge1xuICAgICAgICAgICAgICBibG9ja3NbZElkeF1bYklkeF0ucHVzaChhcHBvaW50bWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGJsb2NrcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIG1heCBjb25jdXJyZW5jeSBhbmQgZWZmZWN0aXZlIHRvdGFsIGNvbHVtbnMgZm9yIERheSBWaWV3IGFwcG9pbnRtZW50cy5cbiAgICovXG4gIGNhbGN1bGF0ZURheVZpZXdDb25jdXJyZW5jeUluZm8oXG4gICAgc2luZ2xlRGF5QXBwb2ludG1lbnRzOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdLCAvLyBUaGVzZSBhcmUgc2VnbWVudHMgZm9yIHRoZSBjdXJyZW50IGRheVxuICAgIHZpZXdTdGFydERhdGU6IEFYRGF0ZVRpbWUsXG4gICAgc3RhcnRIb3VyOiBudW1iZXIsXG4gICAgZW5kSG91cjogbnVtYmVyLFxuICApOiBNYXA8YW55LCB7IG1heENvbmN1cnJlbmN5OiBudW1iZXI7IGVmZmVjdGl2ZVRvdGFsQ29sdW1uczogbnVtYmVyIH0+IHtcbiAgICBjb25zdCByZXN1bHRJbmZvID0gbmV3IE1hcDxhbnksIHsgbWF4Q29uY3VycmVuY3k6IG51bWJlcjsgZWZmZWN0aXZlVG90YWxDb2x1bW5zOiBudW1iZXIgfT4oKTtcbiAgICBpZiAoc2luZ2xlRGF5QXBwb2ludG1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHJlc3VsdEluZm87XG5cbiAgICBjb25zdCBhY3RpdmVBcHBvaW50bWVudHNNYXAgPSB0aGlzLmNhbGN1bGF0ZUFjdGl2ZUFwcG9pbnRtZW50c0luQmxvY2soXG4gICAgICBzaW5nbGVEYXlBcHBvaW50bWVudHMsXG4gICAgICB2aWV3U3RhcnREYXRlLFxuICAgICAgc3RhcnRIb3VyLFxuICAgICAgZW5kSG91cixcbiAgICAgIDEsIC8vIERheSB2aWV3XG4gICAgKTtcbiAgICBjb25zdCBibG9ja3MgPSBhY3RpdmVBcHBvaW50bWVudHNNYXBbMF0gPz8ge307XG5cbiAgICAvLyAxLiBDYWxjdWxhdGUgaW5pdGlhbCBtYXhDb25jdXJyZW5jeSBmb3IgZWFjaCBhcHBvaW50bWVudCBzZWdtZW50XG4gICAgY29uc3QgbWF4Q29uY3VycmVuY3lNYXAgPSBuZXcgTWFwPGFueSwgbnVtYmVyPigpO1xuICAgIHNpbmdsZURheUFwcG9pbnRtZW50cy5mb3JFYWNoKChzZWdtZW50KSA9PiB7XG4gICAgICBsZXQgbWF4T3ZlcmxhcEluU2VnbWVudEJsb2NrcyA9IDA7XG4gICAgICBjb25zdCBzZWdtZW50U3RhcnRNaW51dGVzID0gc2VnbWVudC5zdGFydERhdGUuZ2V0SG91cnMoKSAqIHRoaXMuTUlOVVRFU19QRVJfSE9VUiArIHNlZ21lbnQuc3RhcnREYXRlLmdldE1pbnV0ZXMoKTtcbiAgICAgIGNvbnN0IHNlZ21lbnRFbmRNaW51dGVzID0gc2VnbWVudC5lbmREYXRlLmdldEhvdXJzKCkgKiB0aGlzLk1JTlVURVNfUEVSX0hPVVIgKyBzZWdtZW50LmVuZERhdGUuZ2V0TWludXRlcygpO1xuXG4gICAgICAvLyBEZXRlcm1pbmUgYmxvY2tzIHRoaXMgc2VnbWVudCBvY2N1cGllcyByZWxhdGl2ZSB0byB2aWV3J3Mgc3RhcnRIb3VyXG4gICAgICBjb25zdCB2aWV3UmVsYXRpdmVTdGFydE1pbnV0ZXMgPSBNYXRoLm1heCgwLCBzZWdtZW50U3RhcnRNaW51dGVzIC0gc3RhcnRIb3VyICogdGhpcy5NSU5VVEVTX1BFUl9IT1VSKTtcbiAgICAgIGNvbnN0IHZpZXdSZWxhdGl2ZUVuZE1pbnV0ZXMgPSBNYXRoLm1pbihcbiAgICAgICAgKGVuZEhvdXIgLSBzdGFydEhvdXIpICogdGhpcy5NSU5VVEVTX1BFUl9IT1VSLFxuICAgICAgICBzZWdtZW50RW5kTWludXRlcyAtIHN0YXJ0SG91ciAqIHRoaXMuTUlOVVRFU19QRVJfSE9VUixcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGZpcnN0QmxvY2tJbmRleCA9IE1hdGguZmxvb3Iodmlld1JlbGF0aXZlU3RhcnRNaW51dGVzIC8gdGhpcy5CTE9DS19EVVJBVElPTl9NSU5VVEVTKTtcbiAgICAgIGNvbnN0IGxhc3RCbG9ja0luZGV4ID0gTWF0aC5mbG9vcigodmlld1JlbGF0aXZlRW5kTWludXRlcyAtIDEpIC8gdGhpcy5CTE9DS19EVVJBVElPTl9NSU5VVEVTKTsgLy8gLTEgYmVjYXVzZSBlbmQgaXMgZXhjbHVzaXZlIGZvciBibG9jayBjb3VudGluZ1xuXG4gICAgICBmb3IgKGxldCBibG9ja0lkeCA9IGZpcnN0QmxvY2tJbmRleDsgYmxvY2tJZHggPD0gbGFzdEJsb2NrSW5kZXg7IGJsb2NrSWR4KyspIHtcbiAgICAgICAgY29uc3QgYXBwb2ludG1lbnRzSW5CbG9jayA9IGJsb2Nrc1tibG9ja0lkeF07XG4gICAgICAgIGlmIChhcHBvaW50bWVudHNJbkJsb2NrKSB7XG4gICAgICAgICAgbWF4T3ZlcmxhcEluU2VnbWVudEJsb2NrcyA9IE1hdGgubWF4KG1heE92ZXJsYXBJblNlZ21lbnRCbG9ja3MsIGFwcG9pbnRtZW50c0luQmxvY2subGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbWF4Q29uY3VycmVuY3lNYXAuc2V0KHNlZ21lbnQuaWQsIG1heE92ZXJsYXBJblNlZ21lbnRCbG9ja3MgfHwgMSk7XG4gICAgfSk7XG5cbiAgICAvLyAyLiBJdGVyYXRpdmVseSBkZXRlcm1pbmUgZWZmZWN0aXZlVG90YWxDb2x1bW5zIGZvciBncm91cHMgb2Ygb3ZlcmxhcHBpbmcgYXBwb2ludG1lbnRzXG4gICAgY29uc3QgaW5pdGlhbEVmZmVjdGl2ZVRvdGFsQ29sdW1ucyA9IG5ldyBNYXA8YW55LCBudW1iZXI+KCk7XG4gICAgc2luZ2xlRGF5QXBwb2ludG1lbnRzLmZvckVhY2goKHNlZ21lbnQpID0+IHtcbiAgICAgIGluaXRpYWxFZmZlY3RpdmVUb3RhbENvbHVtbnMuc2V0KHNlZ21lbnQuaWQsIG1heENvbmN1cnJlbmN5TWFwLmdldChzZWdtZW50LmlkKSB8fCAxKTtcbiAgICB9KTtcblxuICAgIGxldCBjaGFuZ2VkID0gdHJ1ZTtcbiAgICB3aGlsZSAoY2hhbmdlZCkge1xuICAgICAgY2hhbmdlZCA9IGZhbHNlO1xuICAgICAgc2luZ2xlRGF5QXBwb2ludG1lbnRzLmZvckVhY2goKHNlZ21lbnRBKSA9PiB7XG4gICAgICAgIHNpbmdsZURheUFwcG9pbnRtZW50cy5mb3JFYWNoKChzZWdtZW50QikgPT4ge1xuICAgICAgICAgIGlmIChzZWdtZW50QS5pZCA9PT0gc2VnbWVudEIuaWQpIHJldHVybjtcblxuICAgICAgICAgIGlmICh0aGlzLmRvQXBwb2ludG1lbnRzT3ZlcmxhcChzZWdtZW50QSwgc2VnbWVudEIpKSB7XG4gICAgICAgICAgICBjb25zdCBldGNBID0gaW5pdGlhbEVmZmVjdGl2ZVRvdGFsQ29sdW1ucy5nZXQoc2VnbWVudEEuaWQpIHx8IDE7XG4gICAgICAgICAgICBjb25zdCBldGNCID0gaW5pdGlhbEVmZmVjdGl2ZVRvdGFsQ29sdW1ucy5nZXQoc2VnbWVudEIuaWQpIHx8IDE7XG4gICAgICAgICAgICBjb25zdCBtYXhFVEMgPSBNYXRoLm1heChldGNBLCBldGNCKTtcblxuICAgICAgICAgICAgaWYgKGV0Y0EgIT09IG1heEVUQykge1xuICAgICAgICAgICAgICBpbml0aWFsRWZmZWN0aXZlVG90YWxDb2x1bW5zLnNldChzZWdtZW50QS5pZCwgbWF4RVRDKTtcbiAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXRjQiAhPT0gbWF4RVRDKSB7XG4gICAgICAgICAgICAgIGluaXRpYWxFZmZlY3RpdmVUb3RhbENvbHVtbnMuc2V0KHNlZ21lbnRCLmlkLCBtYXhFVEMpO1xuICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gUG9wdWxhdGUgZmluYWwgcmVzdWx0XG4gICAgc2luZ2xlRGF5QXBwb2ludG1lbnRzLmZvckVhY2goKHNlZ21lbnQpID0+IHtcbiAgICAgIHJlc3VsdEluZm8uc2V0KHNlZ21lbnQuaWQsIHtcbiAgICAgICAgbWF4Q29uY3VycmVuY3k6IG1heENvbmN1cnJlbmN5TWFwLmdldChzZWdtZW50LmlkKSB8fCAxLFxuICAgICAgICBlZmZlY3RpdmVUb3RhbENvbHVtbnM6IGluaXRpYWxFZmZlY3RpdmVUb3RhbENvbHVtbnMuZ2V0KHNlZ21lbnQuaWQpIHx8IDEsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHRJbmZvO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyb3VwcyBhcHBvaW50bWVudHMgYnkgdGhlIGJsb2NrIHRoZXkgU1RBUlQgaW4gZm9yIFdlZWsgVmlldy5cbiAgICovXG4gIGNhbGN1bGF0ZVdlZWtWaWV3QXBwb2ludG1lbnRzQnlTdGFydEJsb2NrKFxuICAgIHNpbmdsZURheUFwcG9pbnRtZW50czogQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXSxcbiAgICB2aWV3U3RhcnREYXRlOiBBWERhdGVUaW1lLFxuICAgIHN0YXJ0SG91cjogbnVtYmVyLFxuICAgIGVuZEhvdXI6IG51bWJlcixcbiAgKTogQVhTY2hlZHVsZXJBcHBvaW50bWVudHNCeVN0YXJ0QmxvY2sge1xuICAgIGNvbnN0IGJsb2NrczogQVhTY2hlZHVsZXJBcHBvaW50bWVudHNCeVN0YXJ0QmxvY2sgPSB7fTtcbiAgICBzaW5nbGVEYXlBcHBvaW50bWVudHMuZm9yRWFjaCgoYXBwb2ludG1lbnQpID0+IHtcbiAgICAgIGlmICghYXBwb2ludG1lbnQuc3RhcnREYXRlKSByZXR1cm47XG4gICAgICBjb25zdCBzdGFydEluZm8gPSB0aGlzLmdldEJsb2NrSWRlbnRpZmllcihcbiAgICAgICAgdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGFwcG9pbnRtZW50LnN0YXJ0RGF0ZSksXG4gICAgICAgIHZpZXdTdGFydERhdGUsXG4gICAgICAgIHN0YXJ0SG91cixcbiAgICAgICAgZW5kSG91cixcbiAgICAgICAgNyxcbiAgICAgICk7XG4gICAgICBpZiAoc3RhcnRJbmZvKSB7XG4gICAgICAgIGNvbnN0IHsgZGF5SW5kZXgsIGJsb2NrSW5kZXggfSA9IHN0YXJ0SW5mbztcbiAgICAgICAgaWYgKCFibG9ja3NbZGF5SW5kZXhdKSBibG9ja3NbZGF5SW5kZXhdID0ge307XG4gICAgICAgIGlmICghYmxvY2tzW2RheUluZGV4XVtibG9ja0luZGV4XSkgYmxvY2tzW2RheUluZGV4XVtibG9ja0luZGV4XSA9IFtdO1xuICAgICAgICBibG9ja3NbZGF5SW5kZXhdW2Jsb2NrSW5kZXhdLnB1c2goYXBwb2ludG1lbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBibG9ja3M7XG4gIH1cblxuICAvKipcbiAgICogR3JvdXBzIGFwcG9pbnRtZW50cyBieSB0aGUgZGF5KHMpIHRoZXkgb2NjdXIgb24gd2l0aGluIGEgZ2l2ZW4gZGF0ZSByYW5nZS5cbiAgICogUmV0dXJucyBhIE1hcCB3aGVyZSB0aGUga2V5IGlzIHRoZSBkYXRlIHN0cmluZyAoJ1lZWVktTU0tREQnKSBhbmQgdGhlIHZhbHVlIGlzIGFuIGFycmF5IG9mIGFwcG9pbnRtZW50cy5cbiAgICovXG4gIGdyb3VwQXBwb2ludG1lbnRzQnlEYXkoXG4gICAgYXBwb2ludG1lbnRzOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50W10sXG4gICAgdmlld1N0YXJ0RGF0ZTogQVhEYXRlVGltZSwgLy8gRmlyc3QgZGF5IHZpc2libGUgaW4gdGhlIGdyaWRcbiAgICB2aWV3RW5kRGF0ZTogQVhEYXRlVGltZSwgLy8gTGFzdCBkYXkgdmlzaWJsZSBpbiB0aGUgZ3JpZFxuICApOiBNYXA8c3RyaW5nLCBBWFNjaGVkdWxlckFwcG9pbnRtZW50W10+IHtcbiAgICBjb25zdCBncm91cGVkQXBwb2ludG1lbnRzID0gbmV3IE1hcDxzdHJpbmcsIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRbXT4oKTtcbiAgICBpZiAoIWFwcG9pbnRtZW50cyB8fCBhcHBvaW50bWVudHMubGVuZ3RoID09PSAwIHx8ICF2aWV3U3RhcnREYXRlIHx8ICF2aWV3RW5kRGF0ZSkge1xuICAgICAgcmV0dXJuIGdyb3VwZWRBcHBvaW50bWVudHM7XG4gICAgfVxuXG4gICAgLy8gUHJlLWNhbGN1bGF0ZSB0aGUgZW5kIGRhdGUgZm9yIGNvbXBhcmlzb24gKGV4Y2x1c2l2ZSlcbiAgICBjb25zdCBleGNsdXNpdmVWaWV3RW5kRGF0ZSA9IHZpZXdFbmREYXRlLmFkZCgnZGF5JywgMSk7XG5cbiAgICBhcHBvaW50bWVudHMuZm9yRWFjaCgoYXBwb2ludG1lbnQpID0+IHtcbiAgICAgIGlmICghYXBwb2ludG1lbnQuc3RhcnREYXRlIHx8ICFhcHBvaW50bWVudC5lbmREYXRlIHx8ICFhcHBvaW50bWVudC5pZCkgcmV0dXJuO1xuXG4gICAgICAvLyBEZXRlcm1pbmUgdGhlIGVmZmVjdGl2ZSBzdGFydCBhbmQgZW5kIGRhdGVzIG9mIHRoZSBhcHBvaW50bWVudCBjbGFtcGVkIGJ5IHRoZSB2aWV3IHJhbmdlXG4gICAgICBjb25zdCBhcHBvaW50bWVudFN0YXJ0ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGFwcG9pbnRtZW50LnN0YXJ0RGF0ZSk7XG4gICAgICBjb25zdCBhcHBvaW50bWVudEVuZCA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShhcHBvaW50bWVudC5lbmREYXRlKTtcblxuICAgICAgLy8gU2tpcCBpZiBhcHBvaW50bWVudCBlbmRzIGJlZm9yZSB0aGUgdmlldyBzdGFydHMgb3Igc3RhcnRzIGFmdGVyIHRoZSB2aWV3IGVuZHNcbiAgICAgIGlmIChcbiAgICAgICAgYXBwb2ludG1lbnRFbmQuY29tcGFyZSh2aWV3U3RhcnREYXRlLCAnZGF5JykgPCAwIHx8XG4gICAgICAgIGFwcG9pbnRtZW50U3RhcnQuY29tcGFyZShleGNsdXNpdmVWaWV3RW5kRGF0ZSwgJ2RheScpID49IDBcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIENsYW1wIHN0YXJ0IGRhdGUgdG8gdGhlIHZpZXcgc3RhcnQgZGF0ZVxuICAgICAgbGV0IGN1cnJlbnREYXkgPVxuICAgICAgICBhcHBvaW50bWVudFN0YXJ0LmNvbXBhcmUodmlld1N0YXJ0RGF0ZSwgJ2RheScpIDwgMCA/IHZpZXdTdGFydERhdGUgOiBhcHBvaW50bWVudFN0YXJ0LnN0YXJ0T2YoJ2RheScpO1xuXG4gICAgICAvLyBMb29wIHRocm91Z2ggZWFjaCBkYXkgdGhlIGFwcG9pbnRtZW50IHNwYW5zIHdpdGhpbiB0aGUgdmlldyByYW5nZVxuICAgICAgbGV0IHNhZmVDb3VudCA9IDA7IC8vIFByZXZlbnQgaW5maW5pdGUgbG9vcHNcbiAgICAgIHdoaWxlIChcbiAgICAgICAgY3VycmVudERheS5jb21wYXJlKGFwcG9pbnRtZW50RW5kLCAnZGF5JykgPD0gMCAmJlxuICAgICAgICBjdXJyZW50RGF5LmNvbXBhcmUoZXhjbHVzaXZlVmlld0VuZERhdGUsICdkYXknKSA8IDAgJiZcbiAgICAgICAgc2FmZUNvdW50IDwgMTAwXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgZGF0ZVN0cmluZyA9IHRoaXMuZm9ybWF0U2VydmljZS5mb3JtYXQoY3VycmVudERheSwgJ2RhdGV0aW1lJywgeyBmb3JtYXQ6ICdZWVlZLU1NLUREJyB9KTsgLy8gVXNlIGEgY29uc2lzdGVudCBrZXkgZm9ybWF0XG5cbiAgICAgICAgaWYgKCFncm91cGVkQXBwb2ludG1lbnRzLmhhcyhkYXRlU3RyaW5nKSkge1xuICAgICAgICAgIGdyb3VwZWRBcHBvaW50bWVudHMuc2V0KGRhdGVTdHJpbmcsIFtdKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBZGQgdGhlIGFwcG9pbnRtZW50IGlmIGl0J3Mgbm90IGFscmVhZHkgaW4gdGhlIGxpc3QgZm9yIHRoYXQgZGF5XG4gICAgICAgIGlmICghZ3JvdXBlZEFwcG9pbnRtZW50cy5nZXQoZGF0ZVN0cmluZykuc29tZSgoZSkgPT4gZS5pZCA9PT0gYXBwb2ludG1lbnQuaWQpKSB7XG4gICAgICAgICAgZ3JvdXBlZEFwcG9pbnRtZW50cy5nZXQoZGF0ZVN0cmluZykucHVzaChhcHBvaW50bWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50RGF5ID0gY3VycmVudERheS5hZGQoJ2RheScsIDEpO1xuICAgICAgICBzYWZlQ291bnQrKztcbiAgICAgIH1cbiAgICAgIGlmIChzYWZlQ291bnQgPj0gMTAwKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignU2FmZXR5IGJyZWFrIGhpdCBpbiBncm91cEFwcG9pbnRtZW50c0J5RGF5IGxvb3AgZm9yIGFwcG9pbnRtZW50OicsIGFwcG9pbnRtZW50LmlkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBncm91cGVkQXBwb2ludG1lbnRzO1xuICB9XG5cbiAgZ2V0RGF5T2ZXZWVrTnVtYmVyKGRheU5hbWU6IEFYRGF5T2ZXZWVrTmFtZSk6IG51bWJlciB7XG4gICAgc3dpdGNoIChkYXlOYW1lKSB7XG4gICAgICBjYXNlICdzdW5kYXknOlxuICAgICAgICByZXR1cm4gMTtcbiAgICAgIGNhc2UgJ21vbmRheSc6XG4gICAgICAgIHJldHVybiAyO1xuICAgICAgY2FzZSAndHVlc2RheSc6XG4gICAgICAgIHJldHVybiAzO1xuICAgICAgY2FzZSAnd2VkbmVzZGF5JzpcbiAgICAgICAgcmV0dXJuIDQ7XG4gICAgICBjYXNlICd0aHVyc2RheSc6XG4gICAgICAgIHJldHVybiA1O1xuICAgICAgY2FzZSAnZnJpZGF5JzpcbiAgICAgICAgcmV0dXJuIDY7XG4gICAgICBjYXNlICdzYXR1cmRheSc6XG4gICAgICAgIHJldHVybiA3O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS53YXJuKGBJbnZhbGlkIGRheSBuYW1lOiAke2RheU5hbWV9LiBEZWZhdWx0aW5nIHRvIFN1bmRheSAoMSkuYCk7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIGdldFNsb3REYXRhKFxuICAgIHN0YXJ0RGF0ZTogQVhEYXRlVGltZSxcbiAgICB2aWV3OiBBWFNjaGVkdWxlclZpZXcsXG4gICk6IHsgc3RhcnREYXRlOiBBWERhdGVUaW1lOyBlbmREYXRlOiBBWERhdGVUaW1lOyB2aWV3OiBBWFNjaGVkdWxlclZpZXcgfSB7XG4gICAgbGV0IGVuZERhdGU6IEFYRGF0ZVRpbWU7XG4gICAgc3dpdGNoICh2aWV3KSB7XG4gICAgICBjYXNlICdkYXknOlxuICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgIGVuZERhdGUgPSBzdGFydERhdGUuYWRkKCdtaW51dGUnLCB0aGlzLkJMT0NLX0RVUkFUSU9OX01JTlVURVMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RpbWVsaW5lLWRheSc6XG4gICAgICBjYXNlICd0aW1lbGluZS1tdWx0aS1kYXknOlxuICAgICAgICBlbmREYXRlID0gc3RhcnREYXRlLmFkZCgnbWludXRlJywgdGhpcy5CTE9DS19EVVJBVElPTl9NSU5VVEVTICogMik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgY2FzZSAnYWdlbmRhJzpcbiAgICAgIGNhc2UgJ3RpbWVsaW5lLW1vbnRoJzpcbiAgICAgICAgc3RhcnREYXRlID0gc3RhcnREYXRlLnN0YXJ0T2YoJ2RheScpO1xuICAgICAgICBlbmREYXRlID0gc3RhcnREYXRlLmVuZE9mKCdkYXknKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiB7IHN0YXJ0RGF0ZSwgZW5kRGF0ZSwgdmlldyB9O1xuICB9XG5cbiAgaGFuZGxlRXZlbnQoXG4gICAgZXZlbnQ6IEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQgfCBBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudCxcbiAgICBldmVudE91dHB1dE1hcCxcbiAgICBldmVudFR5cGU6ICdhcHBvaW50bWVudCcgfCAnc2xvdCcsXG4gICkge1xuICAgIGNvbnN0IG1vdXNlRXZlbnQgPSBldmVudC5uYXRpdmVFdmVudDtcbiAgICBtb3VzZUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgbW91c2VFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoZXZlbnRUeXBlID09PSAnYXBwb2ludG1lbnQnKSB7XG4gICAgICBjb25zdCBhcHBvaW50bWVudE91dHB1dE1hcCA9IGV2ZW50T3V0cHV0TWFwW2V2ZW50VHlwZV07XG4gICAgICBjb25zdCBlbWl0dGVyID0gYXBwb2ludG1lbnRPdXRwdXRNYXBbbW91c2VFdmVudC50eXBlIGFzIGtleW9mIHR5cGVvZiBhcHBvaW50bWVudE91dHB1dE1hcF07XG4gICAgICBpZiAoZW1pdHRlcikgZW1pdHRlci5lbWl0KGV2ZW50IGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50KTtcbiAgICB9XG4gICAgaWYgKGV2ZW50VHlwZSA9PT0gJ3Nsb3QnKSB7XG4gICAgICBjb25zdCBzbG90T3V0cHV0TWFwID0gZXZlbnRPdXRwdXRNYXBbZXZlbnRUeXBlXTtcbiAgICAgIGNvbnN0IGVtaXR0ZXIgPSBzbG90T3V0cHV0TWFwW21vdXNlRXZlbnQudHlwZSBhcyBrZXlvZiB0eXBlb2Ygc2xvdE91dHB1dE1hcF07XG4gICAgICBpZiAoZW1pdHRlcikgZW1pdHRlci5lbWl0KGV2ZW50IGFzIEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIC0tLSBUaW1lbGluZSBTcGVjaWZpYyBIZWxwZXJzIC0tLVxuXG4gIGNhbGN1bGF0ZVRpbWVsaW5lTGF5b3V0KFxuICAgIC8vIGBhcHB0YCBoZXJlIHdpbGwgYmUgYW4gQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRUeXBlIHdoZW4gY2FsbGVkIGZyb20gVGltZWxpbmVEYXlWaWV3XG4gICAgYXBwdDogQVhTY2hlZHVsZXJBcHBvaW50bWVudCxcbiAgICB2aWV3U3RhcnRIb3VyOiBudW1iZXIsIC8vIGUuZy4sIDggZm9yIDggQU1cbiAgICB2aWV3RW5kSG91cjogbnVtYmVyLCAvLyBlLmcuLCAxOCBmb3IgNiBQTSAodGltZWxpbmUgcnVucyBmcm9tIDg6MDAgdXAgdG8sIGJ1dCBub3QgaW5jbHVkaW5nLCAxODowMClcbiAgKTogeyBsZWZ0OiBzdHJpbmc7IHdpZHRoOiBzdHJpbmcgfSB8IG51bGwge1xuICAgIGlmIChcbiAgICAgICFhcHB0Py5zdGFydERhdGUgfHxcbiAgICAgICFhcHB0LmVuZERhdGUgfHxcbiAgICAgIHR5cGVvZiB2aWV3U3RhcnRIb3VyICE9PSAnbnVtYmVyJyB8fFxuICAgICAgdHlwZW9mIHZpZXdFbmRIb3VyICE9PSAnbnVtYmVyJyB8fFxuICAgICAgdmlld1N0YXJ0SG91ciA+PSB2aWV3RW5kSG91ciAvLyBCYXNpYyBzYW5pdHkgY2hlY2tcbiAgICApIHtcbiAgICAgIGNvbnNvbGUud2FybignY2FsY3VsYXRlVGltZWxpbmVMYXlvdXQ6IEludmFsaWQgaW5wdXQnLCB7IGFwcHQsIHZpZXdTdGFydEhvdXIsIHZpZXdFbmRIb3VyIH0pO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgdG90YWxWaWV3RHVyYXRpb25NaW51dGVzID0gKHZpZXdFbmRIb3VyIC0gdmlld1N0YXJ0SG91cikgKiA2MDtcbiAgICBpZiAodG90YWxWaWV3RHVyYXRpb25NaW51dGVzIDw9IDApIHJldHVybiBudWxsOyAvLyBObyB2aWV3YWJsZSBkdXJhdGlvblxuXG4gICAgLy8gU2VnbWVudCdzIHN0YXJ0IGFuZCBlbmQgdGltZXMgKHRoZXNlIGFyZSBhbHJlYWR5IGNsaXBwZWQgdG8gdGhlIGRheSBieSBnZXRDbG9uZWRBcHBvaW50bWVudFNlZ21lbnRPbkRheSlcbiAgICBjb25zdCBzZWdtZW50U3RhcnQgPSBhcHB0LnN0YXJ0RGF0ZTtcbiAgICBjb25zdCBzZWdtZW50RW5kID0gYXBwdC5lbmREYXRlO1xuXG4gICAgLy8gLS0tIENhbGN1bGF0ZSBTdGFydCBQb3NpdGlvbiAobGVmdCkgLS0tXG4gICAgLy8gRWZmZWN0aXZlIHN0YXJ0IG9mIHRoZSBzZWdtZW50IHdpdGhpbiB0aGUgdmlldydzIGhvdXJzIGZvciBUSElTIGRheVxuICAgIGxldCBlZmZlY3RpdmVTZWdtZW50U3RhcnRNaW51dGVzSW5EYXkgPSBzZWdtZW50U3RhcnQuZ2V0SG91cnMoKSAqIDYwICsgc2VnbWVudFN0YXJ0LmdldE1pbnV0ZXMoKTtcblxuICAgIC8vIENsYW1wIHRvIHZpZXdTdGFydEhvdXIgZm9yIGNhbGN1bGF0aW9uIGlmIHNlZ21lbnQgc3RhcnRzIGJlZm9yZSB2aWV3YWJsZSBob3VycyAoc2hvdWxkbid0IGhhcHBlbiBpZiBzZWdtZW50ZXIgd29ya2VkKVxuICAgIGVmZmVjdGl2ZVNlZ21lbnRTdGFydE1pbnV0ZXNJbkRheSA9IE1hdGgubWF4KGVmZmVjdGl2ZVNlZ21lbnRTdGFydE1pbnV0ZXNJbkRheSwgdmlld1N0YXJ0SG91ciAqIDYwKTtcbiAgICAvLyBDbGFtcCB0byB2aWV3RW5kSG91ciBmb3IgY2FsY3VsYXRpb24gaWYgc2VnbWVudCBzdGFydHMgYWZ0ZXIgdmlld2FibGUgaG91cnMgKHNob3VsZG4ndCBoYXBwZW4pXG4gICAgZWZmZWN0aXZlU2VnbWVudFN0YXJ0TWludXRlc0luRGF5ID0gTWF0aC5taW4oZWZmZWN0aXZlU2VnbWVudFN0YXJ0TWludXRlc0luRGF5LCB2aWV3RW5kSG91ciAqIDYwKTtcblxuICAgIGNvbnN0IG1pbnV0ZXNGcm9tVmlld1N0YXJ0VG9TZWdtZW50U3RhcnQgPSBlZmZlY3RpdmVTZWdtZW50U3RhcnRNaW51dGVzSW5EYXkgLSB2aWV3U3RhcnRIb3VyICogNjA7XG5cbiAgICAvLyBJZiBzZWdtZW50IGVmZmVjdGl2ZWx5IHN0YXJ0cyBiZWZvcmUgdGhlIHZpZXdhYmxlIHBhcnQgKGFmdGVyIGNsYW1waW5nKSwgaXQgbWVhbnMgaXQncyBub3QgdmlzaWJsZSBvciBzdGFydHMgYXQgMCVcbiAgICBpZiAoXG4gICAgICBtaW51dGVzRnJvbVZpZXdTdGFydFRvU2VnbWVudFN0YXJ0IDwgMCAmJlxuICAgICAgTWF0aC5hYnMobWludXRlc0Zyb21WaWV3U3RhcnRUb1NlZ21lbnRTdGFydCkgPiAxZS02IC8qZXBzaWxvbiBmb3IgZmxvYXQgaXNzdWVzKi9cbiAgICApIHtcbiAgICAgIC8vIFRoaXMgY2FzZSBzaG91bGQgaWRlYWxseSBiZSBjYXVnaHQgYnkgdGhlIHNlZ21lbnRlciBvciBpbml0aWFsIG92ZXJsYXAgY2hlY2tzLlxuICAgICAgLy8gSWYgaXQgaGFwcGVucywgdHJlYXQgYXMgc3RhcnRpbmcgYXQgMCUgYnV0IGl0IG1pZ2h0IG1lYW4gbm8gdmlzaWJsZSBwYXJ0LlxuICAgIH1cblxuICAgIGNvbnN0IGxlZnRQZXJjZW50YWdlID0gKE1hdGgubWF4KDAsIG1pbnV0ZXNGcm9tVmlld1N0YXJ0VG9TZWdtZW50U3RhcnQpIC8gdG90YWxWaWV3RHVyYXRpb25NaW51dGVzKSAqIDEwMDtcblxuICAgIC8vIC0tLSBDYWxjdWxhdGUgRHVyYXRpb24gYW5kIFdpZHRoIC0tLVxuICAgIC8vIEVmZmVjdGl2ZSBlbmQgb2YgdGhlIHNlZ21lbnQgd2l0aGluIHRoZSB2aWV3J3MgaG91cnMgZm9yIFRISVMgZGF5XG4gICAgbGV0IGVmZmVjdGl2ZVNlZ21lbnRFbmRNaW51dGVzSW5EYXkgPSBzZWdtZW50RW5kLmdldEhvdXJzKCkgKiA2MCArIHNlZ21lbnRFbmQuZ2V0TWludXRlcygpO1xuICAgIGlmIChzZWdtZW50RW5kLmdldEhvdXJzKCkgPT09IDAgJiYgc2VnbWVudEVuZC5nZXRNaW51dGVzKCkgPT09IDAgJiYgc2VnbWVudEVuZC5nZXRUaW1lKCkgPiBzZWdtZW50U3RhcnQuZ2V0VGltZSgpKSB7XG4gICAgICAvLyBJZiBzZWdtZW50IGVuZHMgZXhhY3RseSBhdCBtaWRuaWdodCAoMDA6MDAgb2YgbmV4dCBkYXksIG1lYW5pbmcgaXQgZmlsbGVkIHVwIHRvIDI0OjAwIG9mIGN1cnJlbnQgZGF5KVxuICAgICAgZWZmZWN0aXZlU2VnbWVudEVuZE1pbnV0ZXNJbkRheSA9IDI0ICogNjA7XG4gICAgfVxuXG4gICAgLy8gQ2xhbXAgdG8gdmlld0VuZEhvdXIgZm9yIGNhbGN1bGF0aW9uXG4gICAgZWZmZWN0aXZlU2VnbWVudEVuZE1pbnV0ZXNJbkRheSA9IE1hdGgubWluKGVmZmVjdGl2ZVNlZ21lbnRFbmRNaW51dGVzSW5EYXksIHZpZXdFbmRIb3VyICogNjApO1xuICAgIC8vIENsYW1wIHRvIHZpZXdTdGFydEhvdXIgZm9yIGNhbGN1bGF0aW9uIChpZiBzZWdtZW50IGVuZHMgYmVmb3JlIHZpZXcgc3RhcnRzKVxuICAgIGVmZmVjdGl2ZVNlZ21lbnRFbmRNaW51dGVzSW5EYXkgPSBNYXRoLm1heChlZmZlY3RpdmVTZWdtZW50RW5kTWludXRlc0luRGF5LCB2aWV3U3RhcnRIb3VyICogNjApO1xuXG4gICAgY29uc3Qgc2VnbWVudER1cmF0aW9uTWludXRlc0luVmlldyA9IE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIGVmZmVjdGl2ZVNlZ21lbnRFbmRNaW51dGVzSW5EYXkgLSBlZmZlY3RpdmVTZWdtZW50U3RhcnRNaW51dGVzSW5EYXksXG4gICAgKTtcblxuICAgIGlmIChzZWdtZW50RHVyYXRpb25NaW51dGVzSW5WaWV3IDw9IDApIHtcbiAgICAgIC8vIFNlZ21lbnQgaGFzIG5vIHZpc2libGUgZHVyYXRpb24gd2l0aGluIHRoZSB0aW1lbGluZSBob3Vyc1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qgd2lkdGhQZXJjZW50YWdlID0gKHNlZ21lbnREdXJhdGlvbk1pbnV0ZXNJblZpZXcgLyB0b3RhbFZpZXdEdXJhdGlvbk1pbnV0ZXMpICogMTAwO1xuXG4gICAgLy8gRW5zdXJlIHBlcmNlbnRhZ2VzIGFyZSB2YWxpZFxuICAgIGlmIChcbiAgICAgIGxlZnRQZXJjZW50YWdlID4gMTAwIHx8XG4gICAgICBsZWZ0UGVyY2VudGFnZSA8IDAgfHxcbiAgICAgIHdpZHRoUGVyY2VudGFnZSA8PSAwIHx8XG4gICAgICB3aWR0aFBlcmNlbnRhZ2UgPiAxMDAgfHxcbiAgICAgIGxlZnRQZXJjZW50YWdlICsgd2lkdGhQZXJjZW50YWdlID4gMTAwLjAwMDEgLyphbGxvdyBmb3IgZmxvYXQgZXJyb3JzKi9cbiAgICApIHtcbiAgICAgIC8vIFRoaXMgbWlnaHQgaW5kaWNhdGUgYW4gaXNzdWUgd2l0aCBkYXRlIGNsYW1waW5nIG9yIGxvZ2ljLlxuICAgICAgLy8gRm9yIG5vdywgaWYgaXQgcmVzdWx0cyBpbiBhbiBpbnZhbGlkIGxheW91dCwgcmV0dXJuIG51bGwuXG4gICAgICAvLyBjb25zb2xlLndhcm4oXCJUaW1lbGluZSBsYXlvdXQgY2FsY3VsYXRpb24gcmVzdWx0ZWQgaW4gb3V0LW9mLWJvdW5kcyBwZXJjZW50YWdlczpcIixcbiAgICAgIC8vICAgICAgICAgICAgICB7bGVmdFBlcmNlbnRhZ2UsIHdpZHRoUGVyY2VudGFnZSwgc2VnbWVudFN0YXJ0LCBzZWdtZW50RW5kLCB2aWV3U3RhcnRIb3VyLCB2aWV3RW5kSG91cn0pO1xuICAgICAgLy8gQSBjb21tb24gY2FzZSBmb3IgKGxlZnQgKyB3aWR0aCA+IDEwMCkgaXMgaWYgYW4gZXZlbnQgZW5kcyAqZXhhY3RseSogYXQgdmlld0VuZEhvdXIsXG4gICAgICAvLyBhbmQgdmlld0VuZEhvdXIgaXRzZWxmIGlzIHRoZSBib3VuZGFyeS5cbiAgICAgIC8vIExldCdzIGJlIGEgYml0IHRvbGVyYW50IGhlcmUgaWYgd2lkdGggaXMgcG9zaXRpdmUuXG4gICAgICBpZiAod2lkdGhQZXJjZW50YWdlIDw9IDApIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsZWZ0OiBgJHtNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAsIGxlZnRQZXJjZW50YWdlKSl9JWAsXG4gICAgICB3aWR0aDogYCR7TWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCB3aWR0aFBlcmNlbnRhZ2UpKX0lYCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIHZpc2libGUgc2VnbWVudCBvZiBhIHRpbWVkIGFwcG9pbnRtZW50IG9uIGEgc3BlY2lmaWMgZGF5LFxuICAgKiBjb25zdHJhaW5lZCBieSB0aGUgdmlldydzIHN0YXJ0IGFuZCBlbmQgaG91cnMuXG4gICAqIFJldHVybnMgYSBuZXcgYXBwb2ludG1lbnQtbGlrZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBzZWdtZW50LlxuICAgKi9cbiAgZ2V0Q2xvbmVkQXBwb2ludG1lbnRTZWdtZW50T25EYXkoXG4gICAgYXBwb2ludG1lbnQ6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQsIC8vIFRoaXMgaXMgdGhlIE9SSUdJTkFMIGFwcG9pbnRtZW50XG4gICAgZGF5OiBBWERhdGVUaW1lLFxuICAgIHZpZXdTdGFydEhvdXI6IG51bWJlcixcbiAgICB2aWV3RW5kSG91cjogbnVtYmVyLFxuICAgIGlzRnVsbERheUNlbGxDb250ZXh0ID0gZmFsc2UsXG4gICk6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50IHwgbnVsbCB7XG4gICAgaWYgKCFhcHBvaW50bWVudCB8fCAhYXBwb2ludG1lbnQuc3RhcnREYXRlIHx8ICFhcHBvaW50bWVudC5lbmREYXRlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBhcHBvaW50bWVudFN0YXJ0RGF0ZSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShhcHBvaW50bWVudC5zdGFydERhdGUpO1xuICAgIGNvbnN0IGFwcG9pbnRtZW50RW5kRGF0ZSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShhcHBvaW50bWVudC5lbmREYXRlKTtcblxuICAgIGlmIChhcHBvaW50bWVudC5hbGxEYXkpIHtcbiAgICAgIGNvbnN0IGRheVN0YXJ0T2YgPSBkYXkuY2xvbmUoKS5zdGFydE9mKCdkYXknKTtcbiAgICAgIGlmIChhcHBvaW50bWVudFN0YXJ0RGF0ZS5zdGFydE9mKCdkYXknKS5lcXVhbChkYXlTdGFydE9mLCAnZGF5JykpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5hcHBvaW50bWVudCxcbiAgICAgICAgICBzdGFydERhdGU6IGRheVN0YXJ0T2YuZGF0ZSxcbiAgICAgICAgICBlbmREYXRlOiBkYXlTdGFydE9mLmNsb25lKCkuYWRkKCdkYXknLCAxKS5zdGFydE9mKCdkYXknKS5kYXRlLFxuICAgICAgICAgIGFsbERheTogdHJ1ZSxcbiAgICAgICAgICBvcmlnaW5hbFN0YXJ0RGF0ZTogYXBwb2ludG1lbnRTdGFydERhdGUuZGF0ZSxcbiAgICAgICAgICBvcmlnaW5hbEVuZERhdGU6IGFwcG9pbnRtZW50RW5kRGF0ZS5kYXRlLFxuICAgICAgICAgIGlzQ29udGludWF0aW9uRnJvbVByZXZpb3VzRGF5OiBmYWxzZSxcbiAgICAgICAgICBpc0NvbnRpbnVhdGlvblRvTmV4dERheTogYXBwb2ludG1lbnRFbmREYXRlLnN0YXJ0T2YoJ2RheScpLmNvbXBhcmUoZGF5U3RhcnRPZiwgJ2RheScpID4gMCxcbiAgICAgICAgICBvcmlnaW5hbEFwcG9pbnRtZW50UmVmOiBhcHBvaW50bWVudCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGFwcG9pbnRtZW50U3RhcnREYXRlLnN0YXJ0T2YoJ2RheScpLmNvbXBhcmUoZGF5U3RhcnRPZiwgJ2RheScpIDwgMCAmJlxuICAgICAgICBhcHBvaW50bWVudEVuZERhdGUuc3RhcnRPZignZGF5JykuY29tcGFyZShkYXlTdGFydE9mLCAnZGF5JykgPj0gMFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uYXBwb2ludG1lbnQsXG4gICAgICAgICAgc3RhcnREYXRlOiBkYXlTdGFydE9mLmRhdGUsXG4gICAgICAgICAgZW5kRGF0ZTogZGF5U3RhcnRPZi5jbG9uZSgpLmFkZCgnZGF5JywgMSkuc3RhcnRPZignZGF5JykuZGF0ZSxcbiAgICAgICAgICBhbGxEYXk6IHRydWUsXG4gICAgICAgICAgb3JpZ2luYWxTdGFydERhdGU6IGFwcG9pbnRtZW50U3RhcnREYXRlLmRhdGUsXG4gICAgICAgICAgb3JpZ2luYWxFbmREYXRlOiBhcHBvaW50bWVudEVuZERhdGUuZGF0ZSxcbiAgICAgICAgICBpc0NvbnRpbnVhdGlvbkZyb21QcmV2aW91c0RheTogdHJ1ZSxcbiAgICAgICAgICBpc0NvbnRpbnVhdGlvblRvTmV4dERheTogYXBwb2ludG1lbnRFbmREYXRlLnN0YXJ0T2YoJ2RheScpLmNvbXBhcmUoZGF5U3RhcnRPZiwgJ2RheScpID4gMCxcbiAgICAgICAgICBvcmlnaW5hbEFwcG9pbnRtZW50UmVmOiBhcHBvaW50bWVudCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGRheVN0YXJ0Qm91bmRhcnkgPSBpc0Z1bGxEYXlDZWxsQ29udGV4dFxuICAgICAgPyBkYXkuY2xvbmUoKS5zdGFydE9mKCdkYXknKVxuICAgICAgOiBkYXkuY2xvbmUoKS5zZXQoJ2hvdXInLCB2aWV3U3RhcnRIb3VyKS5zdGFydE9mKCdob3VyJyk7XG4gICAgY29uc3QgZGF5RW5kQm91bmRhcnkgPSBpc0Z1bGxEYXlDZWxsQ29udGV4dFxuICAgICAgPyBkYXkuY2xvbmUoKS5hZGQoJ2RheScsIDEpLnN0YXJ0T2YoJ2RheScpXG4gICAgICA6IHZpZXdFbmRIb3VyID09PSAyNCB8fCAodmlld0VuZEhvdXIgPT09IDAgJiYgdmlld1N0YXJ0SG91ciA9PT0gMClcbiAgICAgICAgPyBkYXkuY2xvbmUoKS5hZGQoJ2RheScsIDEpLnN0YXJ0T2YoJ2RheScpXG4gICAgICAgIDogZGF5LmNsb25lKCkuc2V0KCdob3VyJywgdmlld0VuZEhvdXIpLnN0YXJ0T2YoJ2hvdXInKTtcblxuICAgIGlmIChcbiAgICAgIGFwcG9pbnRtZW50RW5kRGF0ZS5jb21wYXJlKGRheVN0YXJ0Qm91bmRhcnksICdzZWNvbmQnKSA8PSAwIHx8XG4gICAgICBhcHBvaW50bWVudFN0YXJ0RGF0ZS5jb21wYXJlKGRheUVuZEJvdW5kYXJ5LCAnc2Vjb25kJykgPj0gMFxuICAgICkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHNlZ21lbnRTdGFydERhdGUgPVxuICAgICAgYXBwb2ludG1lbnRTdGFydERhdGUuY29tcGFyZShkYXlTdGFydEJvdW5kYXJ5LCAnc2Vjb25kJykgPiAwID8gYXBwb2ludG1lbnRTdGFydERhdGUgOiBkYXlTdGFydEJvdW5kYXJ5O1xuICAgIGNvbnN0IHNlZ21lbnRFbmREYXRlID1cbiAgICAgIGFwcG9pbnRtZW50RW5kRGF0ZS5jb21wYXJlKGRheUVuZEJvdW5kYXJ5LCAnc2Vjb25kJykgPCAwID8gYXBwb2ludG1lbnRFbmREYXRlIDogZGF5RW5kQm91bmRhcnk7XG5cbiAgICBpZiAoc2VnbWVudFN0YXJ0RGF0ZS5jb21wYXJlKHNlZ21lbnRFbmREYXRlLCAnc2Vjb25kJykgPj0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgaXNDb250aW51YXRpb25Gcm9tUHJldmlvdXNEYXkgPSBhcHBvaW50bWVudFN0YXJ0RGF0ZS5jb21wYXJlKHNlZ21lbnRTdGFydERhdGUsICdzZWNvbmQnKSA8IDA7XG4gICAgY29uc3QgaXNDb250aW51YXRpb25Ub05leHREYXkgPSBhcHBvaW50bWVudEVuZERhdGUuY29tcGFyZShzZWdtZW50RW5kRGF0ZSwgJ3NlY29uZCcpID4gMDtcbiAgICBjb25zdCBkdXJhdGlvbiA9IGFwcG9pbnRtZW50U3RhcnREYXRlLmR1cmF0aW9uKGFwcG9pbnRtZW50RW5kRGF0ZSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYXBwb2ludG1lbnQsXG4gICAgICBzdGFydERhdGU6IHNlZ21lbnRTdGFydERhdGUuZGF0ZSxcbiAgICAgIGVuZERhdGU6IHNlZ21lbnRFbmREYXRlLmRhdGUsXG4gICAgICBhbGxEYXk6IGFwcG9pbnRtZW50LmFsbERheSB8fCBkdXJhdGlvbi50b3RhbC5taWxpc2Vjb25kcyA+PSAyNCAqIDYwICogNjAgKiAxMDAwIC0gMSxcbiAgICAgIG9yaWdpbmFsU3RhcnREYXRlOiBhcHBvaW50bWVudFN0YXJ0RGF0ZS5kYXRlLFxuICAgICAgb3JpZ2luYWxFbmREYXRlOiBhcHBvaW50bWVudEVuZERhdGUuZGF0ZSxcbiAgICAgIGlzQ29udGludWF0aW9uRnJvbVByZXZpb3VzRGF5LFxuICAgICAgaXNDb250aW51YXRpb25Ub05leHREYXksXG4gICAgICBvcmlnaW5hbEFwcG9pbnRtZW50UmVmOiBhcHBvaW50bWVudCxcbiAgICB9O1xuICB9XG5cbiAgZ2V0T3JpZ2luYWxBcHBvaW50bWVudChpdGVtOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50IHwgQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnQpOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50IHtcbiAgICBjb25zdCBzZWdtZW50ID0gaXRlbSBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudDtcbiAgICBpZiAoc2VnbWVudC5vcmlnaW5hbEFwcG9pbnRtZW50UmVmKSB7XG4gICAgICByZXR1cm4gc2VnbWVudC5vcmlnaW5hbEFwcG9pbnRtZW50UmVmO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuXG4gIGlzSG9saWRheShkYXRlOiBBWERhdGVUaW1lKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmhvbGlkYXlzLnNvbWUoKGQpID0+IGRhdGUuZXF1YWwoZC5kYXRlLCAnZGF5JykpO1xuICB9XG4gIGlzV2Vla2VuZChkYXRlOiBBWERhdGVUaW1lLCBjYWxlbmRhcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgd2Vla2VuZCA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLnJlc29sdmVDYWxlbmRhcihjYWxlbmRhcikud2Vla2VuZDtcbiAgICByZXR1cm4gd2Vla2VuZC5pbmNsdWRlcyhkYXRlLmRheU9mV2VlayAtIDEpO1xuICB9XG59XG4iXX0=","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXDragDirective, AXDropZoneDirective } from '@acorex/cdk/drag-drop';\nimport { AXDecoratorGenericComponent } from '@acorex/components/decorators';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe, NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, HostBinding, ViewEncapsulation, computed, inject, input, output, } from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport { AXSchedulerComponent, } from '../../scheduler.component';\nimport { AXSchedulerService } from '../../scheduler.service';\nimport * as i0 from \"@angular/core\";\nexport class AXSchedulerAgendaViewComponent extends NXComponent {\n constructor() {\n super(...arguments);\n this.scheduler = inject(AXSchedulerComponent);\n this.calendarService = inject(AXCalendarService);\n this.schedulerService = inject(AXSchedulerService);\n this.daysCount = input(7);\n this.readonly = input(false);\n this.draggable = input(true);\n this.calendar = input();\n this.date = input.required();\n this.appointments = input([]);\n this.agendaDaysLayout = computed(() => {\n const allOriginalAppointments = this.appointments();\n const agendaStartDate = this.date();\n const numberOfDays = this.daysCount();\n if (!agendaStartDate || !allOriginalAppointments) {\n return [];\n }\n const result = [];\n for (let i = 0; i < numberOfDays; i++) {\n const currentDay = agendaStartDate.add('day', i).startOf('day');\n const segmentsForThisDay = [];\n for (const appt of allOriginalAppointments) {\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, currentDay, 0, 24, true);\n if (segment) {\n segmentsForThisDay.push(segment);\n }\n }\n const sortedSegments = orderBy(segmentsForThisDay, [\n (s) => (s.allDay ? 0 : 1),\n (s) => s.startDate.getTime(),\n (s) => s.originalEndDate.getTime() - s.originalStartDate.getTime(),\n ], ['asc', 'asc', 'desc']);\n result.push({\n date: currentDay,\n appointments: sortedSegments,\n holiday: this.isHoliday(currentDay),\n });\n }\n return result;\n });\n // Internal outputs to be caught by parent AXSchedulerComponent\n this.slotClickedInternal = output();\n this.slotDblClickedInternal = output();\n this.slotRightClickedInternal = output();\n this.appointmentClickedInternal = output();\n this.appointmentDblClickedInternal = output();\n this.appointmentRightClickedInternal = output();\n this.onAppointmentDropInternal = output();\n // --- Event Handlers ---\n this.eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n }\n handleAppointmentEvent(mouseEvent, appointmentItem) {\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, appointment: appointmentRef, sender: this.scheduler }, this.eventOutputMap, 'appointment');\n }\n handleSlotEvent(mouseEvent, date) {\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'agenda');\n if (slotData) {\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler }, this.eventOutputMap, 'slot');\n }\n }\n handleDrop(e, date) {\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'agenda');\n const droppedItem = e.dropped.dragData();\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n });\n }\n isToday(date) {\n const today = this.calendarService.create(new Date());\n return date.equal(today, 'day');\n }\n isHoliday(date) {\n const isHoliday = this.schedulerService.isHoliday(date);\n if (isHoliday) {\n const holiday = this.calendarService.holidays.filter((d) => date.equal(d.date, 'day'))[0];\n return {\n state: 'holiday',\n holiday,\n };\n }\n const isWeekend = this.schedulerService.isWeekend(date, this.calendar());\n if (isWeekend) {\n return { state: 'weekend' };\n }\n return { state: 'none' };\n }\n get isReadonly() {\n return this.readonly();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerAgendaViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.4\", type: AXSchedulerAgendaViewComponent, isStandalone: true, selector: \"ax-scheduler-agenda-view\", inputs: { daysCount: { classPropertyName: \"daysCount\", publicName: \"daysCount\", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: \"readonly\", publicName: \"readonly\", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: \"draggable\", publicName: \"draggable\", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: \"calendar\", publicName: \"calendar\", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: \"date\", publicName: \"date\", isSignal: true, isRequired: true, transformFunction: null }, appointments: { classPropertyName: \"appointments\", publicName: \"appointments\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: \"slotClickedInternal\", slotDblClickedInternal: \"slotDblClickedInternal\", slotRightClickedInternal: \"slotRightClickedInternal\", appointmentClickedInternal: \"appointmentClickedInternal\", appointmentDblClickedInternal: \"appointmentDblClickedInternal\", appointmentRightClickedInternal: \"appointmentRightClickedInternal\", onAppointmentDropInternal: \"onAppointmentDropInternal\" }, host: { properties: { \"class.ax-state-readonly\": \"this.isReadonly\" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerAgendaViewComponent }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-scheduler-agenda-container\\\">\\n @for (dayData of agendaDaysLayout(); track dayData.date.date.getTime()) {\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleDrop($event, dayData.date)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n [class.ax-state-today]=\\\"isToday(dayData.date)\\\"\\n [class.ax-state-holiday]=\\\"dayData.holiday.state !== 'none'\\\"\\n class=\\\"ax-scheduler-agenda-view-container\\\"\\n (click)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n (dblclick)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n (contextmenu)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n >\\n <div class=\\\"ax-scheduler-agenda-header-date-day\\\">\\n <span\\n class=\\\"ax-scheduler-agenda-header-date-day-char ax-scheduler-truncate\\\"\\n [axTooltip]=\\\"dayData.holiday?.holiday?.title ?? ''\\\"\\n [axTooltipPlacement]=\\\"'top-start'\\\"\\n >\\n {{ dayData.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n @if (dayData.holiday.state === 'holiday' && dayData.holiday.holiday.title) {\\n ( {{ dayData.holiday.holiday.title }} )\\n }\\n </span>\\n <span class=\\\"ax-scheduler-agenda-header-date-day-num\\\">\\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\\n </span>\\n </div>\\n <div class=\\\"ax-scheduler-agenda-appointment-container\\\">\\n @for (segment of dayData.appointments; track segment.id + segment.originalStartDate.getTime()) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"segment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment)\\\"\\n [title]=\\\"\\n segment.title +\\n (segment.allDay\\n ? ' (All Day)'\\n : ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')')\\n \\\"\\n class=\\\"ax-scheduler-agenda-appointment\\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n [ngClass]=\\\"segment.cssClass??`ax-scheduler-${segment.priority??'primary'}-periority`\\\"\\n >\\n <div class=\\\"ax-scheduler-agenda-appointment-time\\\">\\n @if (segment.allDay) {\\n <span>{{ 'dateTime.duration.all-day' | translate | async }}</span>\\n } @else {\\n <span>\\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n -\\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </span>\\n }\\n </div>\\n <ax-title class=\\\"ax-scheduler-agenda-appointment-title ax-scheduler-truncate\\\">{{ segment.title }}</ax-title>\\n <!-- Description could go here if needed -->\\n <!-- @if (segment.description) {\\n <ax-subtitle>{{ segment.description }}</ax-subtitle>\\n } -->\\n </div>\\n }\\n @if (dayData.appointments.length === 0) {\\n <div class=\\\"ax-scheduler-agenda-no-appointments\\\">\\n {{ 'noRecord' | translate | async }}\\n </div>\\n }\\n </div>\\n </div>\\n }\\n</div>\\n\", styles: [\"ax-scheduler-agenda-view .ax-scheduler-agenda-container{height:100%;display:flex;flex-direction:column}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container{gap:1rem;display:flex;position:relative;padding-inline:1rem;padding-block:.25rem;border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container:last-child{border-block-end-width:0}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today{background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today .ax-scheduler-agenda-header-date-day{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today .ax-scheduler-agenda-header-date-day .ax-scheduler-month-header-date-day-char{font-weight:500}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today .ax-scheduler-agenda-header-date-day .ax-scheduler-month-header-date-day-num{font-weight:700}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container .ax-scheduler-agenda-header-date-day{gap:.25rem;display:flex;height:3.5rem;min-width:6rem;max-width:6rem;position:sticky;align-items:start;flex-direction:column;inset-block-start:1rem;justify-content:center}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container .ax-scheduler-agenda-header-date-day .ax-scheduler-agenda-header-date-day-char{max-width:100%;font-weight:300}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container .ax-scheduler-agenda-header-date-day .ax-scheduler-agenda-header-date-day-num{font-weight:500;font-size:1.25rem}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container{width:100%;gap:.25rem;display:flex;align-items:center;flex-direction:column;justify-content:center}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment{gap:.5rem;width:100%;display:flex;overflow:hidden;align-items:center;flex-direction:row;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment.all-day-segment .ax-scheduler-agenda-appointment-time{font-weight:500}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment .ax-scheduler-agenda-appointment-time{flex-shrink:0;min-width:120px;font-size:.9em;opacity:.9}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment .ax-scheduler-agenda-appointment-title{flex-grow:1}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-no-appointments{text-align:center;font-style:italic;color:rgba(var(--ax-sys-color-on-surface),.6)}ax-scheduler-agenda-view:not(.ax-state-readonly) .ax-scheduler-agenda-appointment{cursor:pointer}ax-scheduler-agenda-view:not(.ax-state-readonly) .ax-scheduler-agenda-view-container{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-agenda-view:not(.ax-state-readonly) .ax-scheduler-agenda-view-container:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}\\n\"], dependencies: [{ kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }, { kind: \"component\", type: AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"directive\", type: AXDragDirective, selector: \"[axDrag]\", inputs: [\"dragData\", \"dragDisabled\", \"dragTransition\", \"dragElementClone\", \"dropZoneGroup\", \"dragStartDelay\", \"dragResetOnDblClick\", \"dragLockAxis\", \"dragClonedTemplate\", \"dragCursor\", \"dragBoundary\", \"dragTransitionDuration\"], outputs: [\"dragPositionChanged\"] }, { kind: \"directive\", type: AXDropZoneDirective, selector: \"[axDropZone]\", inputs: [\"dropZoneGroup\"], outputs: [\"onElementDrop\", \"onElementHover\"], exportAs: [\"axDropZone\"] }, { kind: \"pipe\", type: AXTranslatorPipe, name: \"translate\" }, { kind: \"directive\", type: AXTooltipDirective, selector: \"[axTooltip]\", inputs: [\"axTooltip\", \"axTooltipPlacement\", \"axTooltipOffsetX\", \"axTooltipOffsetY\", \"axTooltipOpenAfter\", \"axTooltipCloseAfter\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerAgendaViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-scheduler-agenda-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [\n NgClass,\n AsyncPipe,\n AXFormatPipe,\n AXDecoratorGenericComponent,\n AXDragDirective,\n AXDropZoneDirective,\n AXTranslatorPipe,\n AXTooltipDirective,\n ], providers: [{ provide: AXComponent, useExisting: AXSchedulerAgendaViewComponent }], template: \"<div class=\\\"ax-scheduler-agenda-container\\\">\\n @for (dayData of agendaDaysLayout(); track dayData.date.date.getTime()) {\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleDrop($event, dayData.date)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n [class.ax-state-today]=\\\"isToday(dayData.date)\\\"\\n [class.ax-state-holiday]=\\\"dayData.holiday.state !== 'none'\\\"\\n class=\\\"ax-scheduler-agenda-view-container\\\"\\n (click)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n (dblclick)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n (contextmenu)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n >\\n <div class=\\\"ax-scheduler-agenda-header-date-day\\\">\\n <span\\n class=\\\"ax-scheduler-agenda-header-date-day-char ax-scheduler-truncate\\\"\\n [axTooltip]=\\\"dayData.holiday?.holiday?.title ?? ''\\\"\\n [axTooltipPlacement]=\\\"'top-start'\\\"\\n >\\n {{ dayData.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n @if (dayData.holiday.state === 'holiday' && dayData.holiday.holiday.title) {\\n ( {{ dayData.holiday.holiday.title }} )\\n }\\n </span>\\n <span class=\\\"ax-scheduler-agenda-header-date-day-num\\\">\\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\\n </span>\\n </div>\\n <div class=\\\"ax-scheduler-agenda-appointment-container\\\">\\n @for (segment of dayData.appointments; track segment.id + segment.originalStartDate.getTime()) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"segment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment)\\\"\\n [title]=\\\"\\n segment.title +\\n (segment.allDay\\n ? ' (All Day)'\\n : ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')')\\n \\\"\\n class=\\\"ax-scheduler-agenda-appointment\\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n [ngClass]=\\\"segment.cssClass??`ax-scheduler-${segment.priority??'primary'}-periority`\\\"\\n >\\n <div class=\\\"ax-scheduler-agenda-appointment-time\\\">\\n @if (segment.allDay) {\\n <span>{{ 'dateTime.duration.all-day' | translate | async }}</span>\\n } @else {\\n <span>\\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n -\\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </span>\\n }\\n </div>\\n <ax-title class=\\\"ax-scheduler-agenda-appointment-title ax-scheduler-truncate\\\">{{ segment.title }}</ax-title>\\n <!-- Description could go here if needed -->\\n <!-- @if (segment.description) {\\n <ax-subtitle>{{ segment.description }}</ax-subtitle>\\n } -->\\n </div>\\n }\\n @if (dayData.appointments.length === 0) {\\n <div class=\\\"ax-scheduler-agenda-no-appointments\\\">\\n {{ 'noRecord' | translate | async }}\\n </div>\\n }\\n </div>\\n </div>\\n }\\n</div>\\n\", styles: [\"ax-scheduler-agenda-view .ax-scheduler-agenda-container{height:100%;display:flex;flex-direction:column}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container{gap:1rem;display:flex;position:relative;padding-inline:1rem;padding-block:.25rem;border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container:last-child{border-block-end-width:0}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today{background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today .ax-scheduler-agenda-header-date-day{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today .ax-scheduler-agenda-header-date-day .ax-scheduler-month-header-date-day-char{font-weight:500}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today .ax-scheduler-agenda-header-date-day .ax-scheduler-month-header-date-day-num{font-weight:700}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container .ax-scheduler-agenda-header-date-day{gap:.25rem;display:flex;height:3.5rem;min-width:6rem;max-width:6rem;position:sticky;align-items:start;flex-direction:column;inset-block-start:1rem;justify-content:center}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container .ax-scheduler-agenda-header-date-day .ax-scheduler-agenda-header-date-day-char{max-width:100%;font-weight:300}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container .ax-scheduler-agenda-header-date-day .ax-scheduler-agenda-header-date-day-num{font-weight:500;font-size:1.25rem}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container{width:100%;gap:.25rem;display:flex;align-items:center;flex-direction:column;justify-content:center}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment{gap:.5rem;width:100%;display:flex;overflow:hidden;align-items:center;flex-direction:row;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment.all-day-segment .ax-scheduler-agenda-appointment-time{font-weight:500}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment .ax-scheduler-agenda-appointment-time{flex-shrink:0;min-width:120px;font-size:.9em;opacity:.9}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment .ax-scheduler-agenda-appointment-title{flex-grow:1}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-no-appointments{text-align:center;font-style:italic;color:rgba(var(--ax-sys-color-on-surface),.6)}ax-scheduler-agenda-view:not(.ax-state-readonly) .ax-scheduler-agenda-appointment{cursor:pointer}ax-scheduler-agenda-view:not(.ax-state-readonly) .ax-scheduler-agenda-view-container{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-agenda-view:not(.ax-state-readonly) .ax-scheduler-agenda-view-container:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}\\n\"] }]\n }], propDecorators: { isReadonly: [{\n type: HostBinding,\n args: ['class.ax-state-readonly']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLWFnZW5kYS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NyYy9saWIvdmlld3MvYWdlbmRhL3NjaGVkdWxlci1hZ2VuZGEtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3ZpZXdzL2FnZW5kYS9zY2hlZHVsZXItYWdlbmRhLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUF1QixNQUFNLHVCQUF1QixDQUFDO0FBQ2xHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBNkIsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXBDLE9BQU8sRUFFTCxvQkFBb0Is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LDJCQUEyQix5TEFDM0IsZUFBZSwyVEFDZixtQkFBbUIsdUpBQ25CLGdCQUFnQixrREFDaEIsa0JBQWtCOzsyRkFJVCw4QkFBOEI7a0JBbEIxQyxTQUFTOytCQUNFLDBCQUEwQixtQkFHbkIsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxXQUM1Qjt3QkFDUCxPQUFPO3dCQUNQLFNBQVM7d0JBQ1QsWUFBWTt3QkFDWiwyQkFBMkI7d0JBQzNCLGVBQWU7d0JBQ2YsbUJBQW1CO3dCQUNuQixnQkFBZ0I7d0JBQ2hCLGtCQUFrQjtxQkFDbkIsYUFDVSxDQUFDLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLGdDQUFnQyxFQUFFLENBQUM7OEJBeUl0QyxVQUFVO3NCQUFyRCxXQUFXO3VCQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYQ29tcG9uZW50LCBOWENvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY2RrL2NvbW1vbic7XG5pbXBvcnQgeyBBWERyYWdEaXJlY3RpdmUsIEFYRHJvcFpvbmVEaXJlY3RpdmUsIEFYRHJvcFpvbmVEcm9wRXZlbnQgfSBmcm9tICdAYWNvcmV4L2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgQVhEZWNvcmF0b3JHZW5lcmljQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgQVhUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3Rvb2x0aXAnO1xuaW1wb3J0IHsgQVhDYWxlbmRhclNlcnZpY2UsIEFYRGF0ZVRpbWUsIEFYSG9saWRheURhdGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvZGF0ZS10aW1lJztcbmltcG9ydCB7IEFYRm9ybWF0UGlwZSB9IGZyb20gJ0BhY29yZXgvY29yZS9mb3JtYXQnO1xuaW1wb3J0IHsgQVhUcmFuc2xhdG9yUGlwZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgSG9zdEJpbmRpbmcsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG9yZGVyQnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJBcHBvaW50bWVudCwgQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnQgfSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuY2xhc3MnO1xuaW1wb3J0IHtcbiAgQVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQsXG4gIEFYU2NoZWR1bGVyQ29tcG9uZW50LFxuICBBWFNjaGVkdWxlclNsb3REcm9wRXZlbnQsXG4gIEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQsXG59IGZyb20gJy4uLy4uL3NjaGVkdWxlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFnZW5kYURheURhdGEge1xuICBkYXRlOiBBWERhdGVUaW1lO1xuICBhcHBvaW50bWVudHM6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50W107XG4gIGhvbGlkYXk/OiB7IHN0YXRlOiAnaG9saWRheScgfCAnd2Vla2VuZCcgfCAnbm9uZSc7IGhvbGlkYXk/OiBBWEhvbGlkYXlEYXRlIH07XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LXNjaGVkdWxlci1hZ2VuZGEtdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9zY2hlZHVsZXItYWdlbmRhLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vc2NoZWR1bGVyLWFnZW5kYS12aWV3LmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0NsYXNzLFxuICAgIEFzeW5jUGlwZSxcbiAgICBBWEZvcm1hdFBpcGUsXG4gICAgQVhEZWNvcmF0b3JHZW5lcmljQ29tcG9uZW50LFxuICAgIEFYRHJhZ0RpcmVjdGl2ZSxcbiAgICBBWERyb3Bab25lRGlyZWN0aXZlLFxuICAgIEFYVHJhbnNsYXRvclBpcGUsXG4gICAgQVhUb29sdGlwRGlyZWN0aXZlLFxuICBdLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IEFYQ29tcG9uZW50LCB1c2VFeGlzdGluZzogQVhTY2hlZHVsZXJBZ2VuZGFWaWV3Q29tcG9uZW50IH1dLFxufSlcbmV4cG9ydCBjbGFzcyBBWFNjaGVkdWxlckFnZW5kYVZpZXdDb21wb25lbnQgZXh0ZW5kcyBOWENvbXBvbmVudCB7XG4gIHByaXZhdGUgc2NoZWR1bGVyID0gaW5qZWN0KEFYU2NoZWR1bGVyQ29tcG9uZW50KTtcbiAgcHJpdmF0ZSBjYWxlbmRhclNlcnZpY2UgPSBpbmplY3QoQVhDYWxlbmRhclNlcnZpY2UpO1xuICBwcml2YXRlIHNjaGVkdWxlclNlcnZpY2UgPSBpbmplY3QoQVhTY2hlZHVsZXJTZXJ2aWNlKTtcblxuICBkYXlzQ291bnQgPSBpbnB1dCg3KTtcbiAgcmVhZG9ubHkgPSBpbnB1dChmYWxzZSk7XG4gIGRyYWdnYWJsZSA9IGlucHV0KHRydWUpO1xuICBjYWxlbmRhciA9IGlucHV0PHN0cmluZz4oKTtcbiAgZGF0ZSA9IGlucHV0LnJlcXVpcmVkPEFYRGF0ZVRpbWU+KCk7XG4gIGFwcG9pbnRtZW50cyA9IGlucHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRbXT4oW10pO1xuXG4gIGFnZW5kYURheXNMYXlvdXQgPSBjb21wdXRlZDxBZ2VuZGFEYXlEYXRhW10+KCgpID0+IHtcbiAgICBjb25zdCBhbGxPcmlnaW5hbEFwcG9pbnRtZW50cyA9IHRoaXMuYXBwb2ludG1lbnRzKCk7XG4gICAgY29uc3QgYWdlbmRhU3RhcnREYXRlID0gdGhpcy5kYXRlKCk7XG4gICAgY29uc3QgbnVtYmVyT2ZEYXlzID0gdGhpcy5kYXlzQ291bnQoKTtcblxuICAgIGlmICghYWdlbmRhU3RhcnREYXRlIHx8ICFhbGxPcmlnaW5hbEFwcG9pbnRtZW50cykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdDogQWdlbmRhRGF5RGF0YVtdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bWJlck9mRGF5czsgaSsrKSB7XG4gICAgICBjb25zdCBjdXJyZW50RGF5ID0gYWdlbmRhU3RhcnREYXRlLmFkZCgnZGF5JywgaSkuc3RhcnRPZignZGF5Jyk7XG4gICAgICBjb25zdCBzZWdtZW50c0ZvclRoaXNEYXk6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50W10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBhcHB0IG9mIGFsbE9yaWdpbmFsQXBwb2ludG1lbnRzKSB7XG4gICAgICAgIGNvbnN0IHNlZ21lbnQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0Q2xvbmVkQXBwb2ludG1lbnRTZWdtZW50T25EYXkoYXBwdCwgY3VycmVudERheSwgMCwgMjQsIHRydWUpO1xuICAgICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICAgIHNlZ21lbnRzRm9yVGhpc0RheS5wdXNoKHNlZ21lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNvcnRlZFNlZ21lbnRzID0gb3JkZXJCeShcbiAgICAgICAgc2VnbWVudHNGb3JUaGlzRGF5LFxuICAgICAgICBbXG4gICAgICAgICAgKHMpID0+IChzLmFsbERheSA/IDAgOiAxKSxcbiAgICAgICAgICAocykgPT4gcy5zdGFydERhdGUuZ2V0VGltZSgpLFxuICAgICAgICAgIChzKSA9PiBzLm9yaWdpbmFsRW5kRGF0ZS5nZXRUaW1lKCkgLSBzLm9yaWdpbmFsU3RhcnREYXRlLmdldFRpbWUoKSxcbiAgICAgICAgXSxcbiAgICAgICAgWydhc2MnLCAnYXNjJywgJ2Rlc2MnXSxcbiAgICAgICk7XG5cbiAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgZGF0ZTogY3VycmVudERheSxcbiAgICAgICAgYXBwb2ludG1lbnRzOiBzb3J0ZWRTZWdtZW50cyxcbiAgICAgICAgaG9saWRheTogdGhpcy5pc0hvbGlkYXkoY3VycmVudERheSksXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG5cbiAgLy8gSW50ZXJuYWwgb3V0cHV0cyB0byBiZSBjYXVnaHQgYnkgcGFyZW50IEFYU2NoZWR1bGVyQ29tcG9uZW50XG4gIHNsb3RDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgc2xvdERibENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBzbG90UmlnaHRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgYXBwb2ludG1lbnRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIGFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBhcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBvbkFwcG9pbnRtZW50RHJvcEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdERyb3BFdmVudD4oKTtcblxuICAvLyAtLS0gRXZlbnQgSGFuZGxlcnMgLS0tXG4gIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRPdXRwdXRNYXAgPSB7XG4gICAgc2xvdDoge1xuICAgICAgY2xpY2s6IHRoaXMuc2xvdENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGRibGNsaWNrOiB0aGlzLnNsb3REYmxDbGlja2VkSW50ZXJuYWwsXG4gICAgICBjb250ZXh0bWVudTogdGhpcy5zbG90UmlnaHRDbGlja2VkSW50ZXJuYWwsXG4gICAgfSxcbiAgICBhcHBvaW50bWVudDoge1xuICAgICAgY2xpY2s6IHRoaXMuYXBwb2ludG1lbnRDbGlja2VkSW50ZXJuYWwsXG4gICAgICBkYmxjbGljazogdGhpcy5hcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGNvbnRleHRtZW51OiB0aGlzLmFwcG9pbnRtZW50UmlnaHRDbGlja2VkSW50ZXJuYWwsXG4gICAgfSxcbiAgfTtcbiAgaGFuZGxlQXBwb2ludG1lbnRFdmVudChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50LCBhcHBvaW50bWVudEl0ZW06IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQpIHtcbiAgICBjb25zdCBvcmlnaW5hbEFwcG9pbnRtZW50ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldE9yaWdpbmFsQXBwb2ludG1lbnQoYXBwb2ludG1lbnRJdGVtKTtcbiAgICBjb25zdCBhcHBvaW50bWVudFJlZiA9IHtcbiAgICAgIC4uLm9yaWdpbmFsQXBwb2ludG1lbnQsXG4gICAgICBlbmREYXRlOiBvcmlnaW5hbEFwcG9pbnRtZW50LmVuZERhdGUsXG4gICAgICBzdGFydERhdGU6IG9yaWdpbmFsQXBwb2ludG1lbnQuc3RhcnREYXRlLFxuICAgIH07XG4gICAgdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmhhbmRsZUV2ZW50KFxuICAgICAgeyBuYXRpdmVFdmVudDogbW91c2VFdmVudCwgYXBwb2ludG1lbnQ6IGFwcG9pbnRtZW50UmVmLCBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyIH0sXG4gICAgICB0aGlzLmV2ZW50T3V0cHV0TWFwLFxuICAgICAgJ2FwcG9pbnRtZW50JyxcbiAgICApO1xuICB9XG4gIGhhbmRsZVNsb3RFdmVudChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50LCBkYXRlOiBBWERhdGVUaW1lKSB7XG4gICAgY29uc3Qgc2xvdERhdGEgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0U2xvdERhdGEoZGF0ZS5zdGFydE9mKCdkYXknKSwgJ2FnZW5kYScpO1xuICAgIGlmIChzbG90RGF0YSkge1xuICAgICAgdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmhhbmRsZUV2ZW50KFxuICAgICAgICB7IG5hdGl2ZUV2ZW50OiBtb3VzZUV2ZW50LCBzbG90OiBzbG90RGF0YSwgc2VuZGVyOiB0aGlzLnNjaGVkdWxlciB9LFxuICAgICAgICB0aGlzLmV2ZW50T3V0cHV0TWFwLFxuICAgICAgICAnc2xvdCcsXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBoYW5kbGVEcm9wKGU6IEFYRHJvcFpvbmVEcm9wRXZlbnQsIGRhdGU6IEFYRGF0ZVRpbWUpIHtcbiAgICBjb25zdCBzbG90RGF0YSA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRTbG90RGF0YShkYXRlLnN0YXJ0T2YoJ2RheScpLCAnYWdlbmRhJyk7XG4gICAgY29uc3QgZHJvcHBlZEl0ZW0gPSBlLmRyb3BwZWQuZHJhZ0RhdGEoKSBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50O1xuICAgIGNvbnN0IG9yaWdpbmFsQXBwb2ludG1lbnQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0T3JpZ2luYWxBcHBvaW50bWVudChkcm9wcGVkSXRlbSk7XG4gICAgY29uc3QgYXBwb2ludG1lbnRSZWYgPSB7XG4gICAgICAuLi5vcmlnaW5hbEFwcG9pbnRtZW50LFxuICAgICAgZW5kRGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5lbmREYXRlLFxuICAgICAgc3RhcnREYXRlOiBvcmlnaW5hbEFwcG9pbnRtZW50LnN0YXJ0RGF0ZSxcbiAgICB9O1xuICAgIHRoaXMub25BcHBvaW50bWVudERyb3BJbnRlcm5hbC5lbWl0KHtcbiAgICAgIGRyb3BFdmVudDogZSxcbiAgICAgIHNsb3Q6IHNsb3REYXRhLFxuICAgICAgc2VuZGVyOiB0aGlzLnNjaGVkdWxlcixcbiAgICAgIGFwcG9pbnRtZW50OiBhcHBvaW50bWVudFJlZixcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpc1RvZGF5KGRhdGU6IEFYRGF0ZVRpbWUpOiBib29sZWFuIHtcbiAgICBjb25zdCB0b2RheSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShuZXcgRGF0ZSgpKTtcbiAgICByZXR1cm4gZGF0ZS5lcXVhbCh0b2RheSwgJ2RheScpO1xuICB9XG4gIHByb3RlY3RlZCBpc0hvbGlkYXkoZGF0ZTogQVhEYXRlVGltZSk6IHsgc3RhdGU6ICdob2xpZGF5JyB8ICd3ZWVrZW5kJyB8ICdub25lJzsgaG9saWRheT86IEFYSG9saWRheURhdGUgfSB7XG4gICAgY29uc3QgaXNIb2xpZGF5ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmlzSG9saWRheShkYXRlKTtcbiAgICBpZiAoaXNIb2xpZGF5KSB7XG4gICAgICBjb25zdCBob2xpZGF5ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuaG9saWRheXMuZmlsdGVyKChkKSA9PiBkYXRlLmVxdWFsKGQuZGF0ZSwgJ2RheScpKVswXTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXRlOiAnaG9saWRheScsXG4gICAgICAgIGhvbGlkYXksXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBpc1dlZWtlbmQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaXNXZWVrZW5kKGRhdGUsIHRoaXMuY2FsZW5kYXIoKSk7XG4gICAgaWYgKGlzV2Vla2VuZCkge1xuICAgICAgcmV0dXJuIHsgc3RhdGU6ICd3ZWVrZW5kJyB9O1xuICAgIH1cbiAgICByZXR1cm4geyBzdGF0ZTogJ25vbmUnIH07XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmF4LXN0YXRlLXJlYWRvbmx5JykgZ2V0IGlzUmVhZG9ubHkoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZG9ubHkoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1hZ2VuZGEtY29udGFpbmVyXCI+XG4gIEBmb3IgKGRheURhdGEgb2YgYWdlbmRhRGF5c0xheW91dCgpOyB0cmFjayBkYXlEYXRhLmRhdGUuZGF0ZS5nZXRUaW1lKCkpIHtcbiAgICA8ZGl2XG4gICAgICBheERyb3Bab25lXG4gICAgICAjem9uZT1cImF4RHJvcFpvbmVcIlxuICAgICAgKG9uRWxlbWVudERyb3ApPVwiaGFuZGxlRHJvcCgkZXZlbnQsIGRheURhdGEuZGF0ZSlcIlxuICAgICAgW2NsYXNzLmF4LXNjaGVkdWxlci1zbG90LWhvdmVyZWRdPVwiem9uZS5pc0hvdmVyZWQoKVwiXG4gICAgICBbY2xhc3MuYXgtc3RhdGUtdG9kYXldPVwiaXNUb2RheShkYXlEYXRhLmRhdGUpXCJcbiAgICAgIFtjbGFzcy5heC1zdGF0ZS1ob2xpZGF5XT1cImRheURhdGEuaG9saWRheS5zdGF0ZSAhPT0gJ25vbmUnXCJcbiAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLWFnZW5kYS12aWV3LWNvbnRhaW5lclwiXG4gICAgICAoY2xpY2spPVwiaGFuZGxlU2xvdEV2ZW50KCRldmVudCwgZGF5RGF0YS5kYXRlKVwiXG4gICAgICAoZGJsY2xpY2spPVwiaGFuZGxlU2xvdEV2ZW50KCRldmVudCwgZGF5RGF0YS5kYXRlKVwiXG4gICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlU2xvdEV2ZW50KCRldmVudCwgZGF5RGF0YS5kYXRlKVwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1hZ2VuZGEtaGVhZGVyLWRhdGUtZGF5XCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItYWdlbmRhLWhlYWRlci1kYXRlLWRheS1jaGFyIGF4LXNjaGVkdWxlci10cnVuY2F0ZVwiXG4gICAgICAgICAgW2F4VG9vbHRpcF09XCJkYXlEYXRhLmhvbGlkYXk/LmhvbGlkYXk/LnRpdGxlID8/ICcnXCJcbiAgICAgICAgICBbYXhUb29sdGlwUGxhY2VtZW50XT1cIid0b3Atc3RhcnQnXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGRheURhdGEuZGF0ZSB8IGZvcm1hdDogJ2RhdGUnIDogeyBmb3JtYXQ6ICdkZGRkJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgICAgQGlmIChkYXlEYXRhLmhvbGlkYXkuc3RhdGUgPT09ICdob2xpZGF5JyAmJiBkYXlEYXRhLmhvbGlkYXkuaG9saWRheS50aXRsZSkge1xuICAgICAgICAgICAgKCB7eyBkYXlEYXRhLmhvbGlkYXkuaG9saWRheS50aXRsZSB9fSApXG4gICAgICAgICAgfVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtc2NoZWR1bGVyLWFnZW5kYS1oZWFkZXItZGF0ZS1kYXktbnVtXCI+XG4gICAgICAgICAge3sgZGF5RGF0YS5kYXRlIHwgZm9ybWF0OiAnZGF0ZScgOiB7IGZvcm1hdDogJ0REJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1hZ2VuZGEtYXBwb2ludG1lbnQtY29udGFpbmVyXCI+XG4gICAgICAgIEBmb3IgKHNlZ21lbnQgb2YgZGF5RGF0YS5hcHBvaW50bWVudHM7IHRyYWNrIHNlZ21lbnQuaWQgKyBzZWdtZW50Lm9yaWdpbmFsU3RhcnREYXRlLmdldFRpbWUoKSkge1xuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGF4RHJhZ1xuICAgICAgICAgICAgW2RyYWdDdXJzb3JdPVwiJ2dyYWInXCJcbiAgICAgICAgICAgIFtkcmFnRGF0YV09XCJzZWdtZW50XCJcbiAgICAgICAgICAgIFtkcmFnVHJhbnNpdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICBbZHJhZ0VsZW1lbnRDbG9uZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtkcmFnRGlzYWJsZWRdPVwiIWRyYWdnYWJsZSgpIHx8IHNlZ21lbnQucmVhZG9ubHkgfHwgcmVhZG9ubHkoKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIHNlZ21lbnQpXCJcbiAgICAgICAgICAgIChkYmxjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgc2VnbWVudClcIlxuICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzZWdtZW50KVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiXG4gICAgICAgICAgICAgIHNlZ21lbnQudGl0bGUgK1xuICAgICAgICAgICAgICAoc2VnbWVudC5hbGxEYXlcbiAgICAgICAgICAgICAgICA/ICcgKEFsbCBEYXkpJ1xuICAgICAgICAgICAgICAgIDogJyAoJyArXG4gICAgICAgICAgICAgICAgICAoc2VnbWVudC5vcmlnaW5hbFN0YXJ0RGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMpICtcbiAgICAgICAgICAgICAgICAgICcgLSAnICtcbiAgICAgICAgICAgICAgICAgIChzZWdtZW50Lm9yaWdpbmFsRW5kRGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMpICtcbiAgICAgICAgICAgICAgICAgICcpJylcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1hZ2VuZGEtYXBwb2ludG1lbnRcIlxuICAgICAgICAgICAgW2NsYXNzLmFsbC1kYXktc2VnbWVudF09XCJzZWdtZW50LmFsbERheVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJzZWdtZW50LmNzc0NsYXNzPz9gYXgtc2NoZWR1bGVyLSR7c2VnbWVudC5wcmlvcml0eT8/J3ByaW1hcnknfS1wZXJpb3JpdHlgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLWFnZW5kYS1hcHBvaW50bWVudC10aW1lXCI+XG4gICAgICAgICAgICAgIEBpZiAoc2VnbWVudC5hbGxEYXkpIHtcbiAgICAgICAgICAgICAgICA8c3Bhbj57eyAnZGF0ZVRpbWUuZHVyYXRpb24uYWxsLWRheScgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICB7eyBzZWdtZW50Lm9yaWdpbmFsU3RhcnREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAgICAtXG4gICAgICAgICAgICAgICAgICB7eyBzZWdtZW50Lm9yaWdpbmFsRW5kRGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBmb3JtYXQ6ICdISDptbScsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YXgtdGl0bGUgY2xhc3M9XCJheC1zY2hlZHVsZXItYWdlbmRhLWFwcG9pbnRtZW50LXRpdGxlIGF4LXNjaGVkdWxlci10cnVuY2F0ZVwiPnt7IHNlZ21lbnQudGl0bGUgfX08L2F4LXRpdGxlPlxuICAgICAgICAgICAgPCEtLSBEZXNjcmlwdGlvbiBjb3VsZCBnbyBoZXJlIGlmIG5lZWRlZCAtLT5cbiAgICAgICAgICAgIDwhLS0gQGlmIChzZWdtZW50LmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgIDxheC1zdWJ0aXRsZT57eyBzZWdtZW50LmRlc2NyaXB0aW9uIH19PC9heC1zdWJ0aXRsZT5cbiAgICAgICAgICAgIH0gLS0+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChkYXlEYXRhLmFwcG9pbnRtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLWFnZW5kYS1uby1hcHBvaW50bWVudHNcIj5cbiAgICAgICAgICAgIHt7ICdub1JlY29yZCcgfCB0cmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG4iXX0=","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXDragDirective, AXDropZoneDirective } from '@acorex/cdk/drag-drop';\nimport { AXDecoratorGenericComponent } from '@acorex/components/decorators';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe, NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, HostBinding, inject, input, output, ViewEncapsulation, } from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport { AXSchedulerComponent, } from '../../scheduler.component';\nimport { AXSchedulerService } from '../../scheduler.service';\nimport * as i0 from \"@angular/core\";\nexport class AXSchedulerDayViewComponent extends NXComponent {\n constructor() {\n super(...arguments);\n this.scheduler = inject(AXSchedulerComponent);\n this.calendarService = inject(AXCalendarService);\n this.schedulerService = inject(AXSchedulerService);\n this.GAP_PX = 1;\n this.readonly = input(false);\n this.draggable = input(true);\n this.calendar = input();\n this.date = input.required();\n this.endDayHour = input.required();\n this.startDayHour = input.required();\n this.appointments = input([]);\n this.processedAppointmentsForLayout = computed(() => {\n const viewDate = this.date();\n const startH = this.startDayHour();\n const endH = this.endDayHour();\n const allAppointmentsInView = this.appointments();\n if (!viewDate || allAppointmentsInView.length === 0) {\n return [];\n }\n const segmentsForThisDay = [];\n for (const appt of allAppointmentsInView) {\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, viewDate, startH, endH);\n if (segment) {\n segmentsForThisDay.push(segment);\n }\n }\n return segmentsForThisDay;\n });\n this.allDayAppointments = computed(() => {\n const originalAllDayAppointments = this.appointments()?.filter((e) => e && e.allDay) ?? [];\n const multiDayBecomingAllDaySegments = this.processedAppointmentsForLayout()?.filter((segment) => segment && segment.allDay && !this.appointments().find((orig) => orig.id === segment.id)?.allDay) ?? [];\n const combined = new Map();\n originalAllDayAppointments.forEach((appt) => combined.set(appt.id, appt));\n multiDayBecomingAllDaySegments.forEach((appt) => {\n if (!combined.has(appt.id)) {\n combined.set(appt.id, appt);\n }\n });\n return Array.from(combined.values());\n });\n this.singleDayAppointments = computed(() => {\n return this.processedAppointmentsForLayout()?.filter((e) => e && !e.allDay) ?? [];\n });\n this.slotClickedInternal = output();\n this.slotDblClickedInternal = output();\n this.slotRightClickedInternal = output();\n this.appointmentClickedInternal = output();\n this.appointmentDblClickedInternal = output();\n this.appointmentRightClickedInternal = output();\n this.onAppointmentDropInternal = output();\n this.eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n this.hoursArray = computed(() => {\n let time = this.date();\n if (!time)\n return [];\n time = time.set('hour', this.startDayHour()).startOf('hour');\n const hours = [time];\n while (time.hour < this.endDayHour() - 1) {\n time = time.add('hour', 1);\n hours.push(time);\n }\n return hours;\n });\n this.appointmentLayouts = computed(() => {\n const layouts = new Map();\n const appointmentsToLayout = this.singleDayAppointments();\n const viewDate = this.date();\n const startH = this.startDayHour();\n const endH = this.endDayHour();\n if (appointmentsToLayout.length === 0 || !viewDate || typeof startH !== 'number' || typeof endH !== 'number') {\n return layouts;\n }\n const concurrencyInfoMap = this.schedulerService.calculateDayViewConcurrencyInfo(appointmentsToLayout, viewDate, startH, endH);\n const sortedAppointments = orderBy(appointmentsToLayout, [(e) => e.startDate.getTime(), (e) => e.originalEndDate.getTime() - e.originalStartDate.getTime()], ['asc', 'desc']);\n const columnsData = [];\n for (const appointmentSegment of sortedAppointments) {\n let assignedCol = -1;\n for (let c = 0;; c++) {\n if (!columnsData[c]) {\n columnsData[c] = { appointments: [] };\n }\n let conflict = false;\n for (const placedSegment of columnsData[c].appointments) {\n const startDate = this.calendarService.create(appointmentSegment.startDate, this.calendar());\n const endDate = this.calendarService.create(appointmentSegment.endDate, this.calendar());\n if (startDate.compare(placedSegment.endDate, 'minute') < 0 &&\n endDate.compare(placedSegment.startDate, 'minute') > 0) {\n conflict = true;\n break;\n }\n }\n if (!conflict) {\n assignedCol = c;\n columnsData[c].appointments.push(appointmentSegment);\n break;\n }\n if (c > appointmentsToLayout.length) {\n console.warn(`DayView: Safety break in column assignment for ${appointmentSegment.title}, assigning to new column ${c}`);\n if (!columnsData[c])\n columnsData[c] = { appointments: [] };\n columnsData[c].appointments.push(appointmentSegment);\n assignedCol = c;\n break;\n }\n }\n const concurrencyInfo = concurrencyInfoMap.get(appointmentSegment.id);\n const effectiveCols = concurrencyInfo ? concurrencyInfo.effectiveTotalColumns : 1;\n layouts.set(appointmentSegment.id, {\n columnIndex: assignedCol,\n effectiveTotalColumns: effectiveCols,\n });\n }\n return layouts;\n });\n }\n handleAppointmentEvent(mouseEvent, appointment) {\n const originalAppointment = appointment.originalStartDate\n ? {\n ...appointment,\n startDate: appointment.originalStartDate,\n endDate: appointment.originalEndDate,\n }\n : appointment;\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, appointment: appointmentRef, sender: this.scheduler }, this.eventOutputMap, 'appointment');\n }\n handleSingleSlotEvent(mouseEvent, startDate) {\n const slotData = this.schedulerService.getSlotData(startDate, 'day');\n if (slotData)\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler }, this.eventOutputMap, 'slot');\n }\n handleAllDaySlotEvent(mouseEvent) {\n const endDate = this.date().endOf('day');\n const startDate = this.date().startOf('day');\n const slotData = { startDate, endDate, view: 'day' };\n if (slotData)\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler }, this.eventOutputMap, 'slot');\n }\n handleAllDayDrop(e) {\n const endDate = this.date().endOf('day');\n const startDate = this.date().startOf('day');\n const slotData = { startDate, endDate, view: 'day' };\n const droppedAppt = e.dropped.dragData();\n const originalDroppedAppt = droppedAppt.originalStartDate\n ? {\n ...droppedAppt,\n startDate: droppedAppt.originalStartDate,\n endDate: droppedAppt.originalEndDate,\n }\n : droppedAppt;\n const appointmentRef = {\n ...originalDroppedAppt,\n endDate: originalDroppedAppt.endDate,\n startDate: originalDroppedAppt.startDate,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n });\n }\n handleSingleDayDrop(e, startDate) {\n const slotData = this.schedulerService.getSlotData(startDate, 'day');\n const droppedAppt = e.dropped.dragData();\n const originalDroppedAppt = droppedAppt.originalStartDate\n ? {\n ...droppedAppt,\n startDate: droppedAppt.originalStartDate,\n endDate: droppedAppt.originalEndDate,\n }\n : droppedAppt;\n const appointmentRef = {\n ...originalDroppedAppt,\n endDate: originalDroppedAppt.endDate,\n startDate: originalDroppedAppt.startDate,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n });\n }\n getAppointmentLayout(key) {\n return this.appointmentLayouts().get(key);\n }\n getAppointmentLeft(key) {\n const layout = this.getAppointmentLayout(key);\n if (layout && layout.effectiveTotalColumns > 0) {\n const N = layout.effectiveTotalColumns;\n const C = layout.columnIndex;\n if (C < 0) {\n console.warn('Invalid columnIndex < 0 for key:', key);\n return '0px';\n }\n if (C === 0 || N <= 1)\n return '0px';\n const leftPercent = C * (100 / N);\n const gapOffsetPx = C * this.GAP_PX;\n return `calc(${leftPercent}% + ${gapOffsetPx}px)`;\n }\n return '0px';\n }\n getAppointmentWidth(key) {\n const layout = this.getAppointmentLayout(key);\n if (layout && layout.effectiveTotalColumns > 0) {\n const N = layout.effectiveTotalColumns;\n if (N <= 0)\n return '0%';\n if (N === 1)\n return `calc(100% - ${this.GAP_PX}px)`;\n const widthPercent = (1 / N) * 100;\n return `calc(${widthPercent}% - ${this.GAP_PX}px)`;\n }\n return '0%';\n }\n getAppointmentTop(key) {\n const appointmentSegment = this.singleDayAppointments().find((e) => e.id === key);\n if (appointmentSegment) {\n const startMinutes = appointmentSegment.startDate.getHours() * 60 + appointmentSegment.startDate.getMinutes();\n const startBlockOffset = startMinutes - this.startDayHour() * 60;\n const yBlock = startBlockOffset / 30;\n return `calc(var(--ax-comp-scheduler-basic-view-blocks-height) * ${yBlock} + 1px)`;\n }\n return '';\n }\n getAppointmentHeight(key) {\n const appointmentSegment = this.singleDayAppointments().find((e) => e.id === key);\n if (appointmentSegment) {\n const durationMillis = appointmentSegment.endDate.getTime() - appointmentSegment.startDate.getTime();\n const durationMinutes = Math.max(0, durationMillis / (1000 * 60));\n if (durationMinutes <= 0)\n return '0px';\n const heightBlock = durationMinutes / 30;\n const blockHeightExpr = `var(--ax-comp-scheduler-basic-view-blocks-height)`;\n return `calc(${blockHeightExpr} * ${heightBlock} - ${this.GAP_PX}px)`;\n }\n return '0px';\n }\n get isReadonly() {\n return this.readonly();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerDayViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.4\", type: AXSchedulerDayViewComponent, isStandalone: true, selector: \"ax-scheduler-day-view\", inputs: { readonly: { classPropertyName: \"readonly\", publicName: \"readonly\", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: \"draggable\", publicName: \"draggable\", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: \"calendar\", publicName: \"calendar\", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: \"date\", publicName: \"date\", isSignal: true, isRequired: true, transformFunction: null }, endDayHour: { classPropertyName: \"endDayHour\", publicName: \"endDayHour\", isSignal: true, isRequired: true, transformFunction: null }, startDayHour: { classPropertyName: \"startDayHour\", publicName: \"startDayHour\", isSignal: true, isRequired: true, transformFunction: null }, appointments: { classPropertyName: \"appointments\", publicName: \"appointments\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: \"slotClickedInternal\", slotDblClickedInternal: \"slotDblClickedInternal\", slotRightClickedInternal: \"slotRightClickedInternal\", appointmentClickedInternal: \"appointmentClickedInternal\", appointmentDblClickedInternal: \"appointmentDblClickedInternal\", appointmentRightClickedInternal: \"appointmentRightClickedInternal\", onAppointmentDropInternal: \"onAppointmentDropInternal\" }, host: { properties: { \"class.ax-state-readonly\": \"this.isReadonly\" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerDayViewComponent }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-scheduler-day-header\\\">\\n <div class=\\\"ax-scheduler-day-header-table\\\" aria-hidden=\\\"true\\\">\\n <div>\\n {{ 'dateTime.duration.all-day' | translate | async }}\\n </div>\\n </div>\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleAllDayDrop($event)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n (click)=\\\"handleAllDaySlotEvent($event)\\\"\\n (dblclick)=\\\"handleAllDaySlotEvent($event)\\\"\\n (contextmenu)=\\\"handleAllDaySlotEvent($event)\\\"\\n class=\\\"ax-scheduler-day-header-table-container\\\"\\n >\\n <div class=\\\"ax-scheduler-day-header-appointment-container\\\">\\n @if (allDayAppointments().length) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || allDayAppointments()[0].readonly || readonly()\\\"\\n [dragData]=\\\"allDayAppointments()[0]\\\"\\n (click)=\\\"handleAppointmentEvent($event, allDayAppointments()[0])\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, allDayAppointments()[0])\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, allDayAppointments()[0])\\\"\\n [title]=\\\"allDayAppointments()[0].title\\\"\\n class=\\\"ax-scheduler-header-day-appointment\\\"\\n [ngClass]=\\\"allDayAppointments()[0].cssClass??`ax-scheduler-${allDayAppointments()[0].priority??'primary'}-periority`\\\"\\n >\\n <ax-title class=\\\"ax-scheduler-truncate\\\">{{ allDayAppointments()[0].title }}</ax-title>\\n <ax-subtitle>\\n {{ allDayAppointments()[0].startDate | format: 'date' : { calendar: calendar() } | async }}\\n -\\n {{ allDayAppointments()[0].endDate | format: 'date' : { calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n @if (allDayAppointments().length > 1) {\\n <div\\n #moreAppointments\\n class=\\\"ax-scheduler-day-header-more-tag\\\"\\n [ngClass]=\\\"allDayAppointments()[1].cssClass??`ax-scheduler-${allDayAppointments()[1].priority??'primary'}-periority`\\\"\\n >\\n {{ 'more-items' | translate: { params: { number: allDayAppointments().length - 1 } } | async }}\\n </div>\\n <ax-popover [target]=\\\"moreAppointments\\\" [placement]=\\\"'bottom'\\\">\\n <div class=\\\"ax-overlay-pane ax-scheduler-popover\\\" [class.ax-state-readonly]=\\\"readonly()\\\">\\n @for (appointment of allDayAppointments(); track appointment.id; let first = $first) {\\n @if (!first) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"appointment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || appointment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n [title]=\\\"appointment.title\\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [ngClass]=\\\"appointment.cssClass??`ax-scheduler-${appointment.priority??'primary'}-periority`\\\"\\n >\\n <ax-title class=\\\"ax-scheduler-truncate\\\">{{ appointment.title }}</ax-title>\\n <ax-subtitle>\\n {{ appointment.startDate | format: 'date' : { calendar: calendar() } | async }}\\n -\\n {{ appointment.endDate | format: 'date' : { calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n }\\n </div>\\n </ax-popover>\\n }\\n </div>\\n </div>\\n</div>\\n\\n<div class=\\\"ax-scheduler-day-time-container\\\">\\n <table class=\\\"ax-scheduler-day-time\\\" aria-hidden=\\\"true\\\" [border]=\\\"1\\\">\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <div>\\n {{ time | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </div>\\n }\\n </table>\\n <div class=\\\"ax-scheduler-day-table-container\\\">\\n <div class=\\\"ax-scheduler-day-appointment-container\\\">\\n @for (appointment of singleDayAppointments(); track appointment.id) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"appointment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || appointment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n [title]=\\\"appointment.title\\\"\\n class=\\\"ax-scheduler-day-appointment\\\"\\n [style.width]=\\\"getAppointmentWidth(appointment.id)\\\"\\n [style.height]=\\\"getAppointmentHeight(appointment.id)\\\"\\n [style.inset-block-start]=\\\"getAppointmentTop(appointment.id)\\\"\\n [style.inset-inline-start]=\\\"getAppointmentLeft(appointment.id)\\\"\\n [ngClass]=\\\"appointment.cssClass??`ax-scheduler-${appointment.priority??'primary'}-periority`\\\"\\n >\\n <ax-title class=\\\"ax-scheduler-truncate\\\">{{ appointment.title }}</ax-title>\\n <ax-subtitle>\\n {{ appointment.originalStartDate | format: 'time' : { calendar: calendar() } | async }} -\\n {{ appointment.originalEndDate | format: 'time' : { calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n </div>\\n <div aria-hidden=\\\"true\\\" class=\\\"ax-scheduler-day-slot\\\">\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleSingleDayDrop($event, time)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n (click)=\\\"handleSingleSlotEvent($event, time)\\\"\\n (dblclick)=\\\"handleSingleSlotEvent($event, time)\\\"\\n (contextmenu)=\\\"handleSingleSlotEvent($event, time)\\\"\\n ></div>\\n <div\\n axDropZone\\n #zone2=\\\"axDropZone\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone2.isHovered()\\\"\\n (onElementDrop)=\\\"handleSingleDayDrop($event, time.add('minute', 30))\\\"\\n (click)=\\\"handleSingleSlotEvent($event, time.add('minute', 30))\\\"\\n (dblclick)=\\\"handleSingleSlotEvent($event, time.add('minute', 30))\\\"\\n (contextmenu)=\\\"handleSingleSlotEvent($event, time.add('minute', 30))\\\"\\n ></div>\\n }\\n </div>\\n </div>\\n</div>\\n\", styles: [\"ax-scheduler-day-view{display:block;position:relative;background-color:inherit;min-width:var(--ax-comp-scheduler-width)}ax-scheduler-day-view .ax-scheduler-day-header{top:0;z-index:3;width:100%;display:flex;position:sticky;background-color:var(--ax-comp-scheduler-all-day-bg, inherit);border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table{z-index:3;position:sticky;inset-inline-start:0;background-color:inherit}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table div{display:flex;align-items:center;justify-content:center;width:var(--ax-comp-scheduler-basic-view-blocks-width);height:var(--ax-comp-scheduler-basic-view-blocks-height);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container{width:100%;display:flex}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container{gap:1rem;display:flex;width:calc(100% - 2.5rem)}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container .ax-scheduler-header-day-appointment{width:100%;display:flex;overflow:hidden;flex-direction:column;padding-inline:.5rem;justify-content:center;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container .ax-scheduler-day-header-more-tag{display:flex;cursor:pointer;text-wrap:nowrap;flex-direction:column;padding-inline:.5rem;justify-content:center;border-radius:var(--ax-sys-border-radius)}ax-scheduler-day-view .ax-scheduler-day-time-container{width:100%;display:flex;background-color:inherit}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-time{z-index:2;position:sticky;inset-inline-start:0;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-time div{display:block;text-align:center;padding-inline:.5rem;width:var(--ax-comp-scheduler-basic-view-blocks-width);height:calc(var(--ax-comp-scheduler-basic-view-blocks-height) * 2);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container{width:100%;position:relative}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-appointment-container{top:0;position:absolute;width:calc(100% - 2.5rem)}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-appointment-container .ax-scheduler-day-appointment{width:100%;display:flex;overflow:hidden;position:absolute;inset-inline-start:0;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-slot{width:100%}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-slot div{height:var(--ax-comp-scheduler-basic-view-blocks-height);display:block;padding-inline:.5rem;border-block-start:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-slot div:first-child{border-block-start-width:0}ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-header-day-appointment,ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-appointment{cursor:pointer}ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-header-table-container,ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-slot>div{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-header-table-container:hover,ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-slot>div:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}\\n\"], dependencies: [{ kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"component\", type: AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: AXTranslatorPipe, name: \"translate\" }, { kind: \"component\", type: AXPopoverComponent, selector: \"ax-popover\", inputs: [\"offsetX\", \"offsetY\", \"target\", \"placement\", \"content\", \"openOn\", \"closeOn\", \"hasBackdrop\", \"openAfter\", \"closeAfter\", \"backdropClass\", \"panelClass\", \"adaptivityEnabled\"], outputs: [\"onOpened\", \"onClosed\"] }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }, { kind: \"directive\", type: AXDragDirective, selector: \"[axDrag]\", inputs: [\"dragData\", \"dragDisabled\", \"dragTransition\", \"dragElementClone\", \"dropZoneGroup\", \"dragStartDelay\", \"dragResetOnDblClick\", \"dragLockAxis\", \"dragClonedTemplate\", \"dragCursor\", \"dragBoundary\", \"dragTransitionDuration\"], outputs: [\"dragPositionChanged\"] }, { kind: \"directive\", type: AXDropZoneDirective, selector: \"[axDropZone]\", inputs: [\"dropZoneGroup\"], outputs: [\"onElementDrop\", \"onElementHover\"], exportAs: [\"axDropZone\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerDayViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-scheduler-day-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [\n NgClass,\n AXDecoratorGenericComponent,\n AsyncPipe,\n AXTranslatorPipe,\n AXPopoverComponent,\n AXFormatPipe,\n AXDragDirective,\n AXDropZoneDirective,\n ], providers: [{ provide: AXComponent, useExisting: AXSchedulerDayViewComponent }], template: \"<div class=\\\"ax-scheduler-day-header\\\">\\n <div class=\\\"ax-scheduler-day-header-table\\\" aria-hidden=\\\"true\\\">\\n <div>\\n {{ 'dateTime.duration.all-day' | translate | async }}\\n </div>\\n </div>\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleAllDayDrop($event)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n (click)=\\\"handleAllDaySlotEvent($event)\\\"\\n (dblclick)=\\\"handleAllDaySlotEvent($event)\\\"\\n (contextmenu)=\\\"handleAllDaySlotEvent($event)\\\"\\n class=\\\"ax-scheduler-day-header-table-container\\\"\\n >\\n <div class=\\\"ax-scheduler-day-header-appointment-container\\\">\\n @if (allDayAppointments().length) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || allDayAppointments()[0].readonly || readonly()\\\"\\n [dragData]=\\\"allDayAppointments()[0]\\\"\\n (click)=\\\"handleAppointmentEvent($event, allDayAppointments()[0])\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, allDayAppointments()[0])\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, allDayAppointments()[0])\\\"\\n [title]=\\\"allDayAppointments()[0].title\\\"\\n class=\\\"ax-scheduler-header-day-appointment\\\"\\n [ngClass]=\\\"allDayAppointments()[0].cssClass??`ax-scheduler-${allDayAppointments()[0].priority??'primary'}-periority`\\\"\\n >\\n <ax-title class=\\\"ax-scheduler-truncate\\\">{{ allDayAppointments()[0].title }}</ax-title>\\n <ax-subtitle>\\n {{ allDayAppointments()[0].startDate | format: 'date' : { calendar: calendar() } | async }}\\n -\\n {{ allDayAppointments()[0].endDate | format: 'date' : { calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n @if (allDayAppointments().length > 1) {\\n <div\\n #moreAppointments\\n class=\\\"ax-scheduler-day-header-more-tag\\\"\\n [ngClass]=\\\"allDayAppointments()[1].cssClass??`ax-scheduler-${allDayAppointments()[1].priority??'primary'}-periority`\\\"\\n >\\n {{ 'more-items' | translate: { params: { number: allDayAppointments().length - 1 } } | async }}\\n </div>\\n <ax-popover [target]=\\\"moreAppointments\\\" [placement]=\\\"'bottom'\\\">\\n <div class=\\\"ax-overlay-pane ax-scheduler-popover\\\" [class.ax-state-readonly]=\\\"readonly()\\\">\\n @for (appointment of allDayAppointments(); track appointment.id; let first = $first) {\\n @if (!first) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"appointment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || appointment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n [title]=\\\"appointment.title\\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [ngClass]=\\\"appointment.cssClass??`ax-scheduler-${appointment.priority??'primary'}-periority`\\\"\\n >\\n <ax-title class=\\\"ax-scheduler-truncate\\\">{{ appointment.title }}</ax-title>\\n <ax-subtitle>\\n {{ appointment.startDate | format: 'date' : { calendar: calendar() } | async }}\\n -\\n {{ appointment.endDate | format: 'date' : { calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n }\\n </div>\\n </ax-popover>\\n }\\n </div>\\n </div>\\n</div>\\n\\n<div class=\\\"ax-scheduler-day-time-container\\\">\\n <table class=\\\"ax-scheduler-day-time\\\" aria-hidden=\\\"true\\\" [border]=\\\"1\\\">\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <div>\\n {{ time | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </div>\\n }\\n </table>\\n <div class=\\\"ax-scheduler-day-table-container\\\">\\n <div class=\\\"ax-scheduler-day-appointment-container\\\">\\n @for (appointment of singleDayAppointments(); track appointment.id) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"appointment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || appointment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n [title]=\\\"appointment.title\\\"\\n class=\\\"ax-scheduler-day-appointment\\\"\\n [style.width]=\\\"getAppointmentWidth(appointment.id)\\\"\\n [style.height]=\\\"getAppointmentHeight(appointment.id)\\\"\\n [style.inset-block-start]=\\\"getAppointmentTop(appointment.id)\\\"\\n [style.inset-inline-start]=\\\"getAppointmentLeft(appointment.id)\\\"\\n [ngClass]=\\\"appointment.cssClass??`ax-scheduler-${appointment.priority??'primary'}-periority`\\\"\\n >\\n <ax-title class=\\\"ax-scheduler-truncate\\\">{{ appointment.title }}</ax-title>\\n <ax-subtitle>\\n {{ appointment.originalStartDate | format: 'time' : { calendar: calendar() } | async }} -\\n {{ appointment.originalEndDate | format: 'time' : { calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n </div>\\n <div aria-hidden=\\\"true\\\" class=\\\"ax-scheduler-day-slot\\\">\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleSingleDayDrop($event, time)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n (click)=\\\"handleSingleSlotEvent($event, time)\\\"\\n (dblclick)=\\\"handleSingleSlotEvent($event, time)\\\"\\n (contextmenu)=\\\"handleSingleSlotEvent($event, time)\\\"\\n ></div>\\n <div\\n axDropZone\\n #zone2=\\\"axDropZone\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone2.isHovered()\\\"\\n (onElementDrop)=\\\"handleSingleDayDrop($event, time.add('minute', 30))\\\"\\n (click)=\\\"handleSingleSlotEvent($event, time.add('minute', 30))\\\"\\n (dblclick)=\\\"handleSingleSlotEvent($event, time.add('minute', 30))\\\"\\n (contextmenu)=\\\"handleSingleSlotEvent($event, time.add('minute', 30))\\\"\\n ></div>\\n }\\n </div>\\n </div>\\n</div>\\n\", styles: [\"ax-scheduler-day-view{display:block;position:relative;background-color:inherit;min-width:var(--ax-comp-scheduler-width)}ax-scheduler-day-view .ax-scheduler-day-header{top:0;z-index:3;width:100%;display:flex;position:sticky;background-color:var(--ax-comp-scheduler-all-day-bg, inherit);border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table{z-index:3;position:sticky;inset-inline-start:0;background-color:inherit}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table div{display:flex;align-items:center;justify-content:center;width:var(--ax-comp-scheduler-basic-view-blocks-width);height:var(--ax-comp-scheduler-basic-view-blocks-height);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container{width:100%;display:flex}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container{gap:1rem;display:flex;width:calc(100% - 2.5rem)}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container .ax-scheduler-header-day-appointment{width:100%;display:flex;overflow:hidden;flex-direction:column;padding-inline:.5rem;justify-content:center;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container .ax-scheduler-day-header-more-tag{display:flex;cursor:pointer;text-wrap:nowrap;flex-direction:column;padding-inline:.5rem;justify-content:center;border-radius:var(--ax-sys-border-radius)}ax-scheduler-day-view .ax-scheduler-day-time-container{width:100%;display:flex;background-color:inherit}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-time{z-index:2;position:sticky;inset-inline-start:0;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-time div{display:block;text-align:center;padding-inline:.5rem;width:var(--ax-comp-scheduler-basic-view-blocks-width);height:calc(var(--ax-comp-scheduler-basic-view-blocks-height) * 2);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container{width:100%;position:relative}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-appointment-container{top:0;position:absolute;width:calc(100% - 2.5rem)}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-appointment-container .ax-scheduler-day-appointment{width:100%;display:flex;overflow:hidden;position:absolute;inset-inline-start:0;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-slot{width:100%}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-slot div{height:var(--ax-comp-scheduler-basic-view-blocks-height);display:block;padding-inline:.5rem;border-block-start:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-slot div:first-child{border-block-start-width:0}ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-header-day-appointment,ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-appointment{cursor:pointer}ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-header-table-container,ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-slot>div{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-header-table-container:hover,ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-slot>div:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}\\n\"] }]\n }], propDecorators: { isReadonly: [{\n type: HostBinding,\n args: ['class.ax-state-readonly']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLWRheS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NyYy9saWIvdmlld3MvZGF5L3NjaGVkdWxlci1kYXktdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3ZpZXdzL2RheS9zY2hlZHVsZXItZGF5LXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUF1QixNQUFNLHVCQUF1QixDQUFDO0FBQ2xHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBYyxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04saUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFNcEMsT0FBTyxFQUVMLG9CQUFvQixHQUdyQixNQUFNLDJCQUEy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d0JBQ2YsbUJBQW1CO3FCQUNwQixhQUNVLENBQUMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsNkJBQTZCLEVBQUUsQ0FBQzs4QkF1VG5DLFVBQVU7c0JBQXJELFdBQVc7dUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhDb21wb25lbnQsIE5YQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYRHJhZ0RpcmVjdGl2ZSwgQVhEcm9wWm9uZURpcmVjdGl2ZSwgQVhEcm9wWm9uZURyb3BFdmVudCB9IGZyb20gJ0BhY29yZXgvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBBWERlY29yYXRvckdlbmVyaWNDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBBWFBvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvcG9wb3Zlcic7XG5pbXBvcnQgeyBBWENhbGVuZGFyU2VydmljZSwgQVhEYXRlVGltZSB9IGZyb20gJ0BhY29yZXgvY29yZS9kYXRlLXRpbWUnO1xuaW1wb3J0IHsgQVhGb3JtYXRQaXBlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2Zvcm1hdCc7XG5pbXBvcnQgeyBBWFRyYW5zbGF0b3JQaXBlIH0gZnJvbSAnQGFjb3JleC9jb3JlL3RyYW5zbGF0aW9uJztcbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgSG9zdEJpbmRpbmcsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgb3JkZXJCeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge1xuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50LFxuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCxcbiAgQVhTY2hlZHVsZXJEYXlBcHBvaW50bWVudExheW91dCxcbn0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLmNsYXNzJztcbmltcG9ydCB7XG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50LFxuICBBWFNjaGVkdWxlckNvbXBvbmVudCxcbiAgQVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50LFxuICBBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50LFxufSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEFYU2NoZWR1bGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NjaGVkdWxlci5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtc2NoZWR1bGVyLWRheS12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NjaGVkdWxlci1kYXktdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9zY2hlZHVsZXItZGF5LXZpZXcuY29tcG9uZW50LnNjc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW1xuICAgIE5nQ2xhc3MsXG4gICAgQVhEZWNvcmF0b3JHZW5lcmljQ29tcG9uZW50LFxuICAgIEFzeW5jUGlwZSxcbiAgICBBWFRyYW5zbGF0b3JQaXBlLFxuICAgIEFYUG9wb3ZlckNvbXBvbmVudCxcbiAgICBBWEZvcm1hdFBpcGUsXG4gICAgQVhEcmFnRGlyZWN0aXZlLFxuICAgIEFYRHJvcFpvbmVEaXJlY3RpdmUsXG4gIF0sXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogQVhDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBBWFNjaGVkdWxlckRheVZpZXdDb21wb25lbnQgfV0sXG59KVxuZXhwb3J0IGNsYXNzIEFYU2NoZWR1bGVyRGF5Vmlld0NvbXBvbmVudCBleHRlbmRzIE5YQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBzY2hlZHVsZXIgPSBpbmplY3QoQVhTY2hlZHVsZXJDb21wb25lbnQpO1xuICBwcml2YXRlIGNhbGVuZGFyU2VydmljZSA9IGluamVjdChBWENhbGVuZGFyU2VydmljZSk7XG4gIHByaXZhdGUgc2NoZWR1bGVyU2VydmljZSA9IGluamVjdChBWFNjaGVkdWxlclNlcnZpY2UpO1xuXG4gIHJlYWRvbmx5IEdBUF9QWCA9IDE7XG5cbiAgcmVhZG9ubHkgPSBpbnB1dChmYWxzZSk7XG4gIGRyYWdnYWJsZSA9IGlucHV0KHRydWUpO1xuICBjYWxlbmRhciA9IGlucHV0PHN0cmluZz4oKTtcbiAgZGF0ZSA9IGlucHV0LnJlcXVpcmVkPEFYRGF0ZVRpbWU+KCk7XG4gIGVuZERheUhvdXIgPSBpbnB1dC5yZXF1aXJlZDxudW1iZXI+KCk7XG4gIHN0YXJ0RGF5SG91ciA9IGlucHV0LnJlcXVpcmVkPG51bWJlcj4oKTtcbiAgYXBwb2ludG1lbnRzID0gaW5wdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudFtdPihbXSk7XG5cbiAgcHJvY2Vzc2VkQXBwb2ludG1lbnRzRm9yTGF5b3V0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHZpZXdEYXRlID0gdGhpcy5kYXRlKCk7XG4gICAgY29uc3Qgc3RhcnRIID0gdGhpcy5zdGFydERheUhvdXIoKTtcbiAgICBjb25zdCBlbmRIID0gdGhpcy5lbmREYXlIb3VyKCk7XG4gICAgY29uc3QgYWxsQXBwb2ludG1lbnRzSW5WaWV3ID0gdGhpcy5hcHBvaW50bWVudHMoKTtcbiAgICBpZiAoIXZpZXdEYXRlIHx8IGFsbEFwcG9pbnRtZW50c0luVmlldy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3Qgc2VnbWVudHNGb3JUaGlzRGF5OiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdID0gW107XG4gICAgZm9yIChjb25zdCBhcHB0IG9mIGFsbEFwcG9pbnRtZW50c0luVmlldykge1xuICAgICAgY29uc3Qgc2VnbWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRDbG9uZWRBcHBvaW50bWVudFNlZ21lbnRPbkRheShhcHB0LCB2aWV3RGF0ZSwgc3RhcnRILCBlbmRIKTtcbiAgICAgIGlmIChzZWdtZW50KSB7XG4gICAgICAgIHNlZ21lbnRzRm9yVGhpc0RheS5wdXNoKHNlZ21lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2VnbWVudHNGb3JUaGlzRGF5O1xuICB9KTtcbiAgYWxsRGF5QXBwb2ludG1lbnRzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsQWxsRGF5QXBwb2ludG1lbnRzID0gdGhpcy5hcHBvaW50bWVudHMoKT8uZmlsdGVyKChlKSA9PiBlICYmIGUuYWxsRGF5KSA/PyBbXTtcbiAgICBjb25zdCBtdWx0aURheUJlY29taW5nQWxsRGF5U2VnbWVudHMgPVxuICAgICAgdGhpcy5wcm9jZXNzZWRBcHBvaW50bWVudHNGb3JMYXlvdXQoKT8uZmlsdGVyKFxuICAgICAgICAoc2VnbWVudCkgPT4gc2VnbWVudCAmJiBzZWdtZW50LmFsbERheSAmJiAhdGhpcy5hcHBvaW50bWVudHMoKS5maW5kKChvcmlnKSA9PiBvcmlnLmlkID09PSBzZWdtZW50LmlkKT8uYWxsRGF5LFxuICAgICAgKSA/PyBbXTtcbiAgICBjb25zdCBjb21iaW5lZCA9IG5ldyBNYXA8YW55LCBBWFNjaGVkdWxlckFwcG9pbnRtZW50PigpO1xuICAgIG9yaWdpbmFsQWxsRGF5QXBwb2ludG1lbnRzLmZvckVhY2goKGFwcHQpID0+IGNvbWJpbmVkLnNldChhcHB0LmlkLCBhcHB0KSk7XG4gICAgbXVsdGlEYXlCZWNvbWluZ0FsbERheVNlZ21lbnRzLmZvckVhY2goKGFwcHQpID0+IHtcbiAgICAgIGlmICghY29tYmluZWQuaGFzKGFwcHQuaWQpKSB7XG4gICAgICAgIGNvbWJpbmVkLnNldChhcHB0LmlkLCBhcHB0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShjb21iaW5lZC52YWx1ZXMoKSk7XG4gIH0pO1xuICBzaW5nbGVEYXlBcHBvaW50bWVudHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc2VkQXBwb2ludG1lbnRzRm9yTGF5b3V0KCk/LmZpbHRlcigoZSkgPT4gZSAmJiAhZS5hbGxEYXkpID8/IFtdO1xuICB9KTtcblxuICBzbG90Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIHNsb3REYmxDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgc2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIGFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBhcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgb25BcHBvaW50bWVudERyb3BJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3REcm9wRXZlbnQ+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBldmVudE91dHB1dE1hcCA9IHtcbiAgICBzbG90OiB7XG4gICAgICBjbGljazogdGhpcy5zbG90Q2xpY2tlZEludGVybmFsLFxuICAgICAgZGJsY2xpY2s6IHRoaXMuc2xvdERibENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGNvbnRleHRtZW51OiB0aGlzLnNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCxcbiAgICB9LFxuICAgIGFwcG9pbnRtZW50OiB7XG4gICAgICBjbGljazogdGhpcy5hcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGRibGNsaWNrOiB0aGlzLmFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsLFxuICAgICAgY29udGV4dG1lbnU6IHRoaXMuYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCxcbiAgICB9LFxuICB9O1xuICBoYW5kbGVBcHBvaW50bWVudEV2ZW50KG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQsIGFwcG9pbnRtZW50OiBBWFNjaGVkdWxlckFwcG9pbnRtZW50KSB7XG4gICAgY29uc3Qgb3JpZ2luYWxBcHBvaW50bWVudCA9IChhcHBvaW50bWVudCBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCkub3JpZ2luYWxTdGFydERhdGVcbiAgICAgID8gKHtcbiAgICAgICAgICAuLi5hcHBvaW50bWVudCxcbiAgICAgICAgICBzdGFydERhdGU6IChhcHBvaW50bWVudCBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCkub3JpZ2luYWxTdGFydERhdGUsXG4gICAgICAgICAgZW5kRGF0ZTogKGFwcG9pbnRtZW50IGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50KS5vcmlnaW5hbEVuZERhdGUsXG4gICAgICAgIH0gYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudClcbiAgICAgIDogYXBwb2ludG1lbnQ7XG4gICAgY29uc3QgYXBwb2ludG1lbnRSZWYgPSB7XG4gICAgICAuLi5vcmlnaW5hbEFwcG9pbnRtZW50LFxuICAgICAgZW5kRGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5lbmREYXRlLFxuICAgICAgc3RhcnREYXRlOiBvcmlnaW5hbEFwcG9pbnRtZW50LnN0YXJ0RGF0ZSxcbiAgICB9O1xuICAgIHRoaXMuc2NoZWR1bGVyU2VydmljZS5oYW5kbGVFdmVudChcbiAgICAgIHsgbmF0aXZlRXZlbnQ6IG1vdXNlRXZlbnQsIGFwcG9pbnRtZW50OiBhcHBvaW50bWVudFJlZiwgc2VuZGVyOiB0aGlzLnNjaGVkdWxlciB9LFxuICAgICAgdGhpcy5ldmVudE91dHB1dE1hcCxcbiAgICAgICdhcHBvaW50bWVudCcsXG4gICAgKTtcbiAgfVxuICBoYW5kbGVTaW5nbGVTbG90RXZlbnQobW91c2VFdmVudDogTW91c2VFdmVudCwgc3RhcnREYXRlOiBBWERhdGVUaW1lKSB7XG4gICAgY29uc3Qgc2xvdERhdGEgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0U2xvdERhdGEoc3RhcnREYXRlLCAnZGF5Jyk7XG4gICAgaWYgKHNsb3REYXRhKVxuICAgICAgdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmhhbmRsZUV2ZW50KFxuICAgICAgICB7IG5hdGl2ZUV2ZW50OiBtb3VzZUV2ZW50LCBzbG90OiBzbG90RGF0YSwgc2VuZGVyOiB0aGlzLnNjaGVkdWxlciB9LFxuICAgICAgICB0aGlzLmV2ZW50T3V0cHV0TWFwLFxuICAgICAgICAnc2xvdCcsXG4gICAgICApO1xuICB9XG4gIGhhbmRsZUFsbERheVNsb3RFdmVudChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgY29uc3QgZW5kRGF0ZSA9IHRoaXMuZGF0ZSgpLmVuZE9mKCdkYXknKTtcbiAgICBjb25zdCBzdGFydERhdGUgPSB0aGlzLmRhdGUoKS5zdGFydE9mKCdkYXknKTtcbiAgICBjb25zdCBzbG90RGF0YSA9IHsgc3RhcnREYXRlLCBlbmREYXRlLCB2aWV3OiAnZGF5JyBhcyBjb25zdCB9O1xuICAgIGlmIChzbG90RGF0YSlcbiAgICAgIHRoaXMuc2NoZWR1bGVyU2VydmljZS5oYW5kbGVFdmVudChcbiAgICAgICAgeyBuYXRpdmVFdmVudDogbW91c2VFdmVudCwgc2xvdDogc2xvdERhdGEsIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIgfSxcbiAgICAgICAgdGhpcy5ldmVudE91dHB1dE1hcCxcbiAgICAgICAgJ3Nsb3QnLFxuICAgICAgKTtcbiAgfVxuICBoYW5kbGVBbGxEYXlEcm9wKGU6IEFYRHJvcFpvbmVEcm9wRXZlbnQpIHtcbiAgICBjb25zdCBlbmREYXRlID0gdGhpcy5kYXRlKCkuZW5kT2YoJ2RheScpO1xuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHRoaXMuZGF0ZSgpLnN0YXJ0T2YoJ2RheScpO1xuICAgIGNvbnN0IHNsb3REYXRhID0geyBzdGFydERhdGUsIGVuZERhdGUsIHZpZXc6ICdkYXknIGFzIGNvbnN0IH07XG5cbiAgICBjb25zdCBkcm9wcGVkQXBwdCA9IGUuZHJvcHBlZC5kcmFnRGF0YSgpIGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnQ7XG4gICAgY29uc3Qgb3JpZ2luYWxEcm9wcGVkQXBwdCA9IChkcm9wcGVkQXBwdCBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCkub3JpZ2luYWxTdGFydERhdGVcbiAgICAgID8gKHtcbiAgICAgICAgICAuLi5kcm9wcGVkQXBwdCxcbiAgICAgICAgICBzdGFydERhdGU6IChkcm9wcGVkQXBwdCBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCkub3JpZ2luYWxTdGFydERhdGUsXG4gICAgICAgICAgZW5kRGF0ZTogKGRyb3BwZWRBcHB0IGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50KS5vcmlnaW5hbEVuZERhdGUsXG4gICAgICAgIH0gYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudClcbiAgICAgIDogZHJvcHBlZEFwcHQ7XG4gICAgY29uc3QgYXBwb2ludG1lbnRSZWYgPSB7XG4gICAgICAuLi5vcmlnaW5hbERyb3BwZWRBcHB0LFxuICAgICAgZW5kRGF0ZTogb3JpZ2luYWxEcm9wcGVkQXBwdC5lbmREYXRlLFxuICAgICAgc3RhcnREYXRlOiBvcmlnaW5hbERyb3BwZWRBcHB0LnN0YXJ0RGF0ZSxcbiAgICB9O1xuICAgIHRoaXMub25BcHBvaW50bWVudERyb3BJbnRlcm5hbC5lbWl0KHtcbiAgICAgIGRyb3BFdmVudDogZSxcbiAgICAgIHNsb3Q6IHNsb3REYXRhLFxuICAgICAgc2VuZGVyOiB0aGlzLnNjaGVkdWxlcixcbiAgICAgIGFwcG9pbnRtZW50OiBhcHBvaW50bWVudFJlZixcbiAgICB9KTtcbiAgfVxuICBoYW5kbGVTaW5nbGVEYXlEcm9wKGU6IEFYRHJvcFpvbmVEcm9wRXZlbnQsIHN0YXJ0RGF0ZTogQVhEYXRlVGltZSkge1xuICAgIGNvbnN0IHNsb3REYXRhID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldFNsb3REYXRhKHN0YXJ0RGF0ZSwgJ2RheScpO1xuICAgIGNvbnN0IGRyb3BwZWRBcHB0ID0gZS5kcm9wcGVkLmRyYWdEYXRhKCkgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudDtcbiAgICBjb25zdCBvcmlnaW5hbERyb3BwZWRBcHB0ID0gKGRyb3BwZWRBcHB0IGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50KS5vcmlnaW5hbFN0YXJ0RGF0ZVxuICAgICAgPyAoe1xuICAgICAgICAgIC4uLmRyb3BwZWRBcHB0LFxuICAgICAgICAgIHN0YXJ0RGF0ZTogKGRyb3BwZWRBcHB0IGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50KS5vcmlnaW5hbFN0YXJ0RGF0ZSxcbiAgICAgICAgICBlbmREYXRlOiAoZHJvcHBlZEFwcHQgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnQpLm9yaWdpbmFsRW5kRGF0ZSxcbiAgICAgICAgfSBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50KVxuICAgICAgOiBkcm9wcGVkQXBwdDtcbiAgICBjb25zdCBhcHBvaW50bWVudFJlZiA9IHtcbiAgICAgIC4uLm9yaWdpbmFsRHJvcHBlZEFwcHQsXG4gICAgICBlbmREYXRlOiBvcmlnaW5hbERyb3BwZWRBcHB0LmVuZERhdGUsXG4gICAgICBzdGFydERhdGU6IG9yaWdpbmFsRHJvcHBlZEFwcHQuc3RhcnREYXRlLFxuICAgIH07XG4gICAgdGhpcy5vbkFwcG9pbnRtZW50RHJvcEludGVybmFsLmVtaXQoe1xuICAgICAgZHJvcEV2ZW50OiBlLFxuICAgICAgc2xvdDogc2xvdERhdGEsXG4gICAgICBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyLFxuICAgICAgYXBwb2ludG1lbnQ6IGFwcG9pbnRtZW50UmVmLFxuICAgIH0pO1xuICB9XG5cbiAgaG91cnNBcnJheSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBsZXQgdGltZSA9IHRoaXMuZGF0ZSgpO1xuICAgIGlmICghdGltZSkgcmV0dXJuIFtdO1xuICAgIHRpbWUgPSB0aW1lLnNldCgnaG91cicsIHRoaXMuc3RhcnREYXlIb3VyKCkpLnN0YXJ0T2YoJ2hvdXInKTtcbiAgICBjb25zdCBob3VycyA9IFt0aW1lXTtcbiAgICB3aGlsZSAodGltZS5ob3VyIDwgdGhpcy5lbmREYXlIb3VyKCkgLSAxKSB7XG4gICAgICB0aW1lID0gdGltZS5hZGQoJ2hvdXInLCAxKTtcbiAgICAgIGhvdXJzLnB1c2godGltZSk7XG4gICAgfVxuICAgIHJldHVybiBob3VycztcbiAgfSk7XG5cbiAgYXBwb2ludG1lbnRMYXlvdXRzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGxheW91dHMgPSBuZXcgTWFwPGFueSwgQVhTY2hlZHVsZXJEYXlBcHBvaW50bWVudExheW91dD4oKTtcbiAgICBjb25zdCBhcHBvaW50bWVudHNUb0xheW91dCA9IHRoaXMuc2luZ2xlRGF5QXBwb2ludG1lbnRzKCk7XG4gICAgY29uc3Qgdmlld0RhdGUgPSB0aGlzLmRhdGUoKTtcbiAgICBjb25zdCBzdGFydEggPSB0aGlzLnN0YXJ0RGF5SG91cigpO1xuICAgIGNvbnN0IGVuZEggPSB0aGlzLmVuZERheUhvdXIoKTtcblxuICAgIGlmIChhcHBvaW50bWVudHNUb0xheW91dC5sZW5ndGggPT09IDAgfHwgIXZpZXdEYXRlIHx8IHR5cGVvZiBzdGFydEggIT09ICdudW1iZXInIHx8IHR5cGVvZiBlbmRIICE9PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIGxheW91dHM7XG4gICAgfVxuXG4gICAgY29uc3QgY29uY3VycmVuY3lJbmZvTWFwID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmNhbGN1bGF0ZURheVZpZXdDb25jdXJyZW5jeUluZm8oXG4gICAgICBhcHBvaW50bWVudHNUb0xheW91dCxcbiAgICAgIHZpZXdEYXRlLFxuICAgICAgc3RhcnRILFxuICAgICAgZW5kSCxcbiAgICApO1xuXG4gICAgY29uc3Qgc29ydGVkQXBwb2ludG1lbnRzID0gb3JkZXJCeShcbiAgICAgIGFwcG9pbnRtZW50c1RvTGF5b3V0LFxuICAgICAgWyhlKSA9PiBlLnN0YXJ0RGF0ZS5nZXRUaW1lKCksIChlKSA9PiBlLm9yaWdpbmFsRW5kRGF0ZS5nZXRUaW1lKCkgLSBlLm9yaWdpbmFsU3RhcnREYXRlLmdldFRpbWUoKV0sXG4gICAgICBbJ2FzYycsICdkZXNjJ10sXG4gICAgKTtcblxuICAgIGNvbnN0IGNvbHVtbnNEYXRhOiB7IGFwcG9pbnRtZW50czogQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXSB9W10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgYXBwb2ludG1lbnRTZWdtZW50IG9mIHNvcnRlZEFwcG9pbnRtZW50cykge1xuICAgICAgbGV0IGFzc2lnbmVkQ29sID0gLTE7XG5cbiAgICAgIGZvciAobGV0IGMgPSAwOyA7IGMrKykge1xuICAgICAgICBpZiAoIWNvbHVtbnNEYXRhW2NdKSB7XG4gICAgICAgICAgY29sdW1uc0RhdGFbY10gPSB7IGFwcG9pbnRtZW50czogW10gfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjb25mbGljdCA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAoY29uc3QgcGxhY2VkU2VnbWVudCBvZiBjb2x1bW5zRGF0YVtjXS5hcHBvaW50bWVudHMpIHtcbiAgICAgICAgICBjb25zdCBzdGFydERhdGUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoYXBwb2ludG1lbnRTZWdtZW50LnN0YXJ0RGF0ZSwgdGhpcy5jYWxlbmRhcigpKTtcbiAgICAgICAgICBjb25zdCBlbmREYXRlID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGFwcG9pbnRtZW50U2VnbWVudC5lbmREYXRlLCB0aGlzLmNhbGVuZGFyKCkpO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHN0YXJ0RGF0ZS5jb21wYXJlKHBsYWNlZFNlZ21lbnQuZW5kRGF0ZSwgJ21pbnV0ZScpIDwgMCAmJlxuICAgICAgICAgICAgZW5kRGF0ZS5jb21wYXJlKHBsYWNlZFNlZ21lbnQuc3RhcnREYXRlLCAnbWludXRlJykgPiAwXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25mbGljdCA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNvbmZsaWN0KSB7XG4gICAgICAgICAgYXNzaWduZWRDb2wgPSBjO1xuICAgICAgICAgIGNvbHVtbnNEYXRhW2NdLmFwcG9pbnRtZW50cy5wdXNoKGFwcG9pbnRtZW50U2VnbWVudCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYyA+IGFwcG9pbnRtZW50c1RvTGF5b3V0Lmxlbmd0aCkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGBEYXlWaWV3OiBTYWZldHkgYnJlYWsgaW4gY29sdW1uIGFzc2lnbm1lbnQgZm9yICR7YXBwb2ludG1lbnRTZWdtZW50LnRpdGxlfSwgYXNzaWduaW5nIHRvIG5ldyBjb2x1bW4gJHtjfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIWNvbHVtbnNEYXRhW2NdKSBjb2x1bW5zRGF0YVtjXSA9IHsgYXBwb2ludG1lbnRzOiBbXSB9O1xuICAgICAgICAgIGNvbHVtbnNEYXRhW2NdLmFwcG9pbnRtZW50cy5wdXNoKGFwcG9pbnRtZW50U2VnbWVudCk7XG4gICAgICAgICAgYXNzaWduZWRDb2wgPSBjO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbmN1cnJlbmN5SW5mbyA9IGNvbmN1cnJlbmN5SW5mb01hcC5nZXQoYXBwb2ludG1lbnRTZWdtZW50LmlkKTtcbiAgICAgIGNvbnN0IGVmZmVjdGl2ZUNvbHMgPSBjb25jdXJyZW5jeUluZm8gPyBjb25jdXJyZW5jeUluZm8uZWZmZWN0aXZlVG90YWxDb2x1bW5zIDogMTtcblxuICAgICAgbGF5b3V0cy5zZXQoYXBwb2ludG1lbnRTZWdtZW50LmlkLCB7XG4gICAgICAgIGNvbHVtbkluZGV4OiBhc3NpZ25lZENvbCxcbiAgICAgICAgZWZmZWN0aXZlVG90YWxDb2x1bW5zOiBlZmZlY3RpdmVDb2xzLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsYXlvdXRzO1xuICB9KTtcblxuICBnZXRBcHBvaW50bWVudExheW91dChrZXk6IGFueSk6IEFYU2NoZWR1bGVyRGF5QXBwb2ludG1lbnRMYXlvdXQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmFwcG9pbnRtZW50TGF5b3V0cygpLmdldChrZXkpO1xuICB9XG5cbiAgZ2V0QXBwb2ludG1lbnRMZWZ0KGtleTogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCBsYXlvdXQgPSB0aGlzLmdldEFwcG9pbnRtZW50TGF5b3V0KGtleSk7XG4gICAgaWYgKGxheW91dCAmJiBsYXlvdXQuZWZmZWN0aXZlVG90YWxDb2x1bW5zID4gMCkge1xuICAgICAgY29uc3QgTiA9IGxheW91dC5lZmZlY3RpdmVUb3RhbENvbHVtbnM7XG4gICAgICBjb25zdCBDID0gbGF5b3V0LmNvbHVtbkluZGV4O1xuICAgICAgaWYgKEMgPCAwKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignSW52YWxpZCBjb2x1bW5JbmRleCA8IDAgZm9yIGtleTonLCBrZXkpO1xuICAgICAgICByZXR1cm4gJzBweCc7XG4gICAgICB9XG4gICAgICBpZiAoQyA9PT0gMCB8fCBOIDw9IDEpIHJldHVybiAnMHB4JztcbiAgICAgIGNvbnN0IGxlZnRQZXJjZW50ID0gQyAqICgxMDAgLyBOKTtcbiAgICAgIGNvbnN0IGdhcE9mZnNldFB4ID0gQyAqIHRoaXMuR0FQX1BYO1xuICAgICAgcmV0dXJuIGBjYWxjKCR7bGVmdFBlcmNlbnR9JSArICR7Z2FwT2Zmc2V0UHh9cHgpYDtcbiAgICB9XG4gICAgcmV0dXJuICcwcHgnO1xuICB9XG5cbiAgZ2V0QXBwb2ludG1lbnRXaWR0aChrZXk6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgbGF5b3V0ID0gdGhpcy5nZXRBcHBvaW50bWVudExheW91dChrZXkpO1xuICAgIGlmIChsYXlvdXQgJiYgbGF5b3V0LmVmZmVjdGl2ZVRvdGFsQ29sdW1ucyA+IDApIHtcbiAgICAgIGNvbnN0IE4gPSBsYXlvdXQuZWZmZWN0aXZlVG90YWxDb2x1bW5zO1xuXG4gICAgICBpZiAoTiA8PSAwKSByZXR1cm4gJzAlJztcbiAgICAgIGlmIChOID09PSAxKSByZXR1cm4gYGNhbGMoMTAwJSAtICR7dGhpcy5HQVBfUFh9cHgpYDtcblxuICAgICAgY29uc3Qgd2lkdGhQZXJjZW50ID0gKDEgLyBOKSAqIDEwMDtcblxuICAgICAgcmV0dXJuIGBjYWxjKCR7d2lkdGhQZXJjZW50fSUgLSAke3RoaXMuR0FQX1BYfXB4KWA7XG4gICAgfVxuICAgIHJldHVybiAnMCUnO1xuICB9XG5cbiAgZ2V0QXBwb2ludG1lbnRUb3Aoa2V5OiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGFwcG9pbnRtZW50U2VnbWVudCA9IHRoaXMuc2luZ2xlRGF5QXBwb2ludG1lbnRzKCkuZmluZCgoZSkgPT4gZS5pZCA9PT0ga2V5KTtcblxuICAgIGlmIChhcHBvaW50bWVudFNlZ21lbnQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0TWludXRlcyA9IGFwcG9pbnRtZW50U2VnbWVudC5zdGFydERhdGUuZ2V0SG91cnMoKSAqIDYwICsgYXBwb2ludG1lbnRTZWdtZW50LnN0YXJ0RGF0ZS5nZXRNaW51dGVzKCk7XG4gICAgICBjb25zdCBzdGFydEJsb2NrT2Zmc2V0ID0gc3RhcnRNaW51dGVzIC0gdGhpcy5zdGFydERheUhvdXIoKSAqIDYwO1xuICAgICAgY29uc3QgeUJsb2NrID0gc3RhcnRCbG9ja09mZnNldCAvIDMwO1xuICAgICAgcmV0dXJuIGBjYWxjKHZhcigtLWF4LWNvbXAtc2NoZWR1bGVyLWJhc2ljLXZpZXctYmxvY2tzLWhlaWdodCkgKiAke3lCbG9ja30gKyAxcHgpYDtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgZ2V0QXBwb2ludG1lbnRIZWlnaHQoa2V5OiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGFwcG9pbnRtZW50U2VnbWVudCA9IHRoaXMuc2luZ2xlRGF5QXBwb2ludG1lbnRzKCkuZmluZCgoZSkgPT4gZS5pZCA9PT0ga2V5KTtcbiAgICBpZiAoYXBwb2ludG1lbnRTZWdtZW50KSB7XG4gICAgICBjb25zdCBkdXJhdGlvbk1pbGxpcyA9IGFwcG9pbnRtZW50U2VnbWVudC5lbmREYXRlLmdldFRpbWUoKSAtIGFwcG9pbnRtZW50U2VnbWVudC5zdGFydERhdGUuZ2V0VGltZSgpO1xuICAgICAgY29uc3QgZHVyYXRpb25NaW51dGVzID0gTWF0aC5tYXgoMCwgZHVyYXRpb25NaWxsaXMgLyAoMTAwMCAqIDYwKSk7XG4gICAgICBpZiAoZHVyYXRpb25NaW51dGVzIDw9IDApIHJldHVybiAnMHB4JztcblxuICAgICAgY29uc3QgaGVpZ2h0QmxvY2sgPSBkdXJhdGlvbk1pbnV0ZXMgLyAzMDtcbiAgICAgIGNvbnN0IGJsb2NrSGVpZ2h0RXhwciA9IGB2YXIoLS1heC1jb21wLXNjaGVkdWxlci1iYXNpYy12aWV3LWJsb2Nrcy1oZWlnaHQpYDtcblxuICAgICAgcmV0dXJuIGBjYWxjKCR7YmxvY2tIZWlnaHRFeHByfSAqICR7aGVpZ2h0QmxvY2t9IC0gJHt0aGlzLkdBUF9QWH1weClgO1xuICAgIH1cbiAgICByZXR1cm4gJzBweCc7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmF4LXN0YXRlLXJlYWRvbmx5JykgZ2V0IGlzUmVhZG9ubHkoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZG9ubHkoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1kYXktaGVhZGVyXCI+XG4gIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItZGF5LWhlYWRlci10YWJsZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIDxkaXY+XG4gICAgICB7eyAnZGF0ZVRpbWUuZHVyYXRpb24uYWxsLWRheScgfCB0cmFuc2xhdGUgfCBhc3luYyB9fVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdlxuICAgIGF4RHJvcFpvbmVcbiAgICAjem9uZT1cImF4RHJvcFpvbmVcIlxuICAgIChvbkVsZW1lbnREcm9wKT1cImhhbmRsZUFsbERheURyb3AoJGV2ZW50KVwiXG4gICAgW2NsYXNzLmF4LXNjaGVkdWxlci1zbG90LWhvdmVyZWRdPVwiem9uZS5pc0hvdmVyZWQoKVwiXG4gICAgKGNsaWNrKT1cImhhbmRsZUFsbERheVNsb3RFdmVudCgkZXZlbnQpXCJcbiAgICAoZGJsY2xpY2spPVwiaGFuZGxlQWxsRGF5U2xvdEV2ZW50KCRldmVudClcIlxuICAgIChjb250ZXh0bWVudSk9XCJoYW5kbGVBbGxEYXlTbG90RXZlbnQoJGV2ZW50KVwiXG4gICAgY2xhc3M9XCJheC1zY2hlZHVsZXItZGF5LWhlYWRlci10YWJsZS1jb250YWluZXJcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1kYXktaGVhZGVyLWFwcG9pbnRtZW50LWNvbnRhaW5lclwiPlxuICAgICAgQGlmIChhbGxEYXlBcHBvaW50bWVudHMoKS5sZW5ndGgpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGF4RHJhZ1xuICAgICAgICAgIFtkcmFnQ3Vyc29yXT1cIidncmFiJ1wiXG4gICAgICAgICAgW2RyYWdUcmFuc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICBbZHJhZ0VsZW1lbnRDbG9uZV09XCJ0cnVlXCJcbiAgICAgICAgICBbZHJhZ0Rpc2FibGVkXT1cIiFkcmFnZ2FibGUoKSB8fCBhbGxEYXlBcHBvaW50bWVudHMoKVswXS5yZWFkb25seSB8fCByZWFkb25seSgpXCJcbiAgICAgICAgICBbZHJhZ0RhdGFdPVwiYWxsRGF5QXBwb2ludG1lbnRzKClbMF1cIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgYWxsRGF5QXBwb2ludG1lbnRzKClbMF0pXCJcbiAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGFsbERheUFwcG9pbnRtZW50cygpWzBdKVwiXG4gICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBhbGxEYXlBcHBvaW50bWVudHMoKVswXSlcIlxuICAgICAgICAgIFt0aXRsZV09XCJhbGxEYXlBcHBvaW50bWVudHMoKVswXS50aXRsZVwiXG4gICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItaGVhZGVyLWRheS1hcHBvaW50bWVudFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiYWxsRGF5QXBwb2ludG1lbnRzKClbMF0uY3NzQ2xhc3M/P2BheC1zY2hlZHVsZXItJHthbGxEYXlBcHBvaW50bWVudHMoKVswXS5wcmlvcml0eT8/J3ByaW1hcnknfS1wZXJpb3JpdHlgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxheC10aXRsZSBjbGFzcz1cImF4LXNjaGVkdWxlci10cnVuY2F0ZVwiPnt7IGFsbERheUFwcG9pbnRtZW50cygpWzBdLnRpdGxlIH19PC9heC10aXRsZT5cbiAgICAgICAgICA8YXgtc3VidGl0bGU+XG4gICAgICAgICAgICB7eyBhbGxEYXlBcHBvaW50bWVudHMoKVswXS5zdGFydERhdGUgfCBmb3JtYXQ6ICdkYXRlJyA6IHsgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgICAgICAtXG4gICAgICAgICAgICB7eyBhbGxEYXlBcHBvaW50bWVudHMoKVswXS5lbmREYXRlIHwgZm9ybWF0OiAnZGF0ZScgOiB7IGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgICAgIDwvYXgtc3VidGl0bGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGlmIChhbGxEYXlBcHBvaW50bWVudHMoKS5sZW5ndGggPiAxKSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAjbW9yZUFwcG9pbnRtZW50c1xuICAgICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLWRheS1oZWFkZXItbW9yZS10YWdcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImFsbERheUFwcG9pbnRtZW50cygpWzFdLmNzc0NsYXNzPz9gYXgtc2NoZWR1bGVyLSR7YWxsRGF5QXBwb2ludG1lbnRzKClbMV0ucHJpb3JpdHk/PydwcmltYXJ5J30tcGVyaW9yaXR5YFwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyAnbW9yZS1pdGVtcycgfCB0cmFuc2xhdGU6IHsgcGFyYW1zOiB7IG51bWJlcjogYWxsRGF5QXBwb2ludG1lbnRzKCkubGVuZ3RoIC0gMSB9IH0gfCBhc3luYyB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGF4LXBvcG92ZXIgW3RhcmdldF09XCJtb3JlQXBwb2ludG1lbnRzXCIgW3BsYWNlbWVudF09XCInYm90dG9tJ1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1vdmVybGF5LXBhbmUgYXgtc2NoZWR1bGVyLXBvcG92ZXJcIiBbY2xhc3MuYXgtc3RhdGUtcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiPlxuICAgICAgICAgICAgQGZvciAoYXBwb2ludG1lbnQgb2YgYWxsRGF5QXBwb2ludG1lbnRzKCk7IHRyYWNrIGFwcG9pbnRtZW50LmlkOyBsZXQgZmlyc3QgPSAkZmlyc3QpIHtcbiAgICAgICAgICAgICAgQGlmICghZmlyc3QpIHtcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBheERyYWdcbiAgICAgICAgICAgICAgICAgIFtkcmFnQ3Vyc29yXT1cIidncmFiJ1wiXG4gICAgICAgICAgICAgICAgICBbZHJhZ0RhdGFdPVwiYXBwb2ludG1lbnRcIlxuICAgICAgICAgICAgICAgICAgW2RyYWdUcmFuc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIFtkcmFnRWxlbWVudENsb25lXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW2RyYWdEaXNhYmxlZF09XCIhZHJhZ2dhYmxlKCkgfHwgYXBwb2ludG1lbnQucmVhZG9ubHkgfHwgcmVhZG9ubHkoKVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGFwcG9pbnRtZW50KVwiXG4gICAgICAgICAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGFwcG9pbnRtZW50KVwiXG4gICAgICAgICAgICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGFwcG9pbnRtZW50KVwiXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiYXBwb2ludG1lbnQudGl0bGVcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItcG9wb3Zlci1hcHBvaW50bWVudFwiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJhcHBvaW50bWVudC5jc3NDbGFzcz8/YGF4LXNjaGVkdWxlci0ke2FwcG9pbnRtZW50LnByaW9yaXR5Pz8ncHJpbWFyeSd9LXBlcmlvcml0eWBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxheC10aXRsZSBjbGFzcz1cImF4LXNjaGVkdWxlci10cnVuY2F0ZVwiPnt7IGFwcG9pbnRtZW50LnRpdGxlIH19PC9heC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxheC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICAgICAge3sgYXBwb2ludG1lbnQuc3RhcnREYXRlIHwgZm9ybWF0OiAnZGF0ZScgOiB7IGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgICAgICAgICAgICAgICAtXG4gICAgICAgICAgICAgICAgICAgIHt7IGFwcG9pbnRtZW50LmVuZERhdGUgfCBmb3JtYXQ6ICdkYXRlJyA6IHsgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAgICA8L2F4LXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYXgtcG9wb3Zlcj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1kYXktdGltZS1jb250YWluZXJcIj5cbiAgPHRhYmxlIGNsYXNzPVwiYXgtc2NoZWR1bGVyLWRheS10aW1lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgW2JvcmRlcl09XCIxXCI+XG4gICAgQGZvciAodGltZSBvZiBob3Vyc0FycmF5KCk7IHRyYWNrIHRpbWUuZGF0ZS5nZXRUaW1lKCkpIHtcbiAgICAgIDxkaXY+XG4gICAgICAgIHt7IHRpbWUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgZm9ybWF0OiAnSEg6bW0nLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC90YWJsZT5cbiAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1kYXktdGFibGUtY29udGFpbmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1kYXktYXBwb2ludG1lbnQtY29udGFpbmVyXCI+XG4gICAgICBAZm9yIChhcHBvaW50bWVudCBvZiBzaW5nbGVEYXlBcHBvaW50bWVudHMoKTsgdHJhY2sgYXBwb2ludG1lbnQuaWQpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGF4RHJhZ1xuICAgICAgICAgIFtkcmFnQ3Vyc29yXT1cIidncmFiJ1wiXG4gICAgICAgICAgW2RyYWdEYXRhXT1cImFwcG9pbnRtZW50XCJcbiAgICAgICAgICBbZHJhZ1RyYW5zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgIFtkcmFnRWxlbWVudENsb25lXT1cInRydWVcIlxuICAgICAgICAgIFtkcmFnRGlzYWJsZWRdPVwiIWRyYWdnYWJsZSgpIHx8IGFwcG9pbnRtZW50LnJlYWRvbmx5IHx8IHJlYWRvbmx5KClcIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgYXBwb2ludG1lbnQpXCJcbiAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGFwcG9pbnRtZW50KVwiXG4gICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBhcHBvaW50bWVudClcIlxuICAgICAgICAgIFt0aXRsZV09XCJhcHBvaW50bWVudC50aXRsZVwiXG4gICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItZGF5LWFwcG9pbnRtZW50XCJcbiAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiZ2V0QXBwb2ludG1lbnRXaWR0aChhcHBvaW50bWVudC5pZClcIlxuICAgICAgICAgIFtzdHlsZS5oZWlnaHRdPVwiZ2V0QXBwb2ludG1lbnRIZWlnaHQoYXBwb2ludG1lbnQuaWQpXCJcbiAgICAgICAgICBbc3R5bGUuaW5zZXQtYmxvY2stc3RhcnRdPVwiZ2V0QXBwb2ludG1lbnRUb3AoYXBwb2ludG1lbnQuaWQpXCJcbiAgICAgICAgICBbc3R5bGUuaW5zZXQtaW5saW5lLXN0YXJ0XT1cImdldEFwcG9pbnRtZW50TGVmdChhcHBvaW50bWVudC5pZClcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImFwcG9pbnRtZW50LmNzc0NsYXNzPz9gYXgtc2NoZWR1bGVyLSR7YXBwb2ludG1lbnQucHJpb3JpdHk/PydwcmltYXJ5J30tcGVyaW9yaXR5YFwiXG4gICAgICAgID5cbiAgICAgICAgICA8YXgtdGl0bGUgY2xhc3M9XCJheC1zY2hlZHVsZXItdHJ1bmNhdGVcIj57eyBhcHBvaW50bWVudC50aXRsZSB9fTwvYXgtdGl0bGU+XG4gICAgICAgICAgPGF4LXN1YnRpdGxlPlxuICAgICAgICAgICAge3sgYXBwb2ludG1lbnQub3JpZ2luYWxTdGFydERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19IC1cbiAgICAgICAgICAgIHt7IGFwcG9pbnRtZW50Lm9yaWdpbmFsRW5kRGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX1cbiAgICAgICAgICA8L2F4LXN1YnRpdGxlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzPVwiYXgtc2NoZWR1bGVyLWRheS1zbG90XCI+XG4gICAgICBAZm9yICh0aW1lIG9mIGhvdXJzQXJyYXkoKTsgdHJhY2sgdGltZS5kYXRlLmdldFRpbWUoKSkge1xuICAgICAgICA8ZGl2XG4gICAgICAgICAgYXhEcm9wWm9uZVxuICAgICAgICAgICN6b25lPVwiYXhEcm9wWm9uZVwiXG4gICAgICAgICAgKG9uRWxlbWVudERyb3ApPVwiaGFuZGxlU2luZ2xlRGF5RHJvcCgkZXZlbnQsIHRpbWUpXCJcbiAgICAgICAgICBbY2xhc3MuYXgtc2NoZWR1bGVyLXNsb3QtaG92ZXJlZF09XCJ6b25lLmlzSG92ZXJlZCgpXCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlU2luZ2xlU2xvdEV2ZW50KCRldmVudCwgdGltZSlcIlxuICAgICAgICAgIChkYmxjbGljayk9XCJoYW5kbGVTaW5nbGVTbG90RXZlbnQoJGV2ZW50LCB0aW1lKVwiXG4gICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZVNpbmdsZVNsb3RFdmVudCgkZXZlbnQsIHRpbWUpXCJcbiAgICAgICAgPjwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgYXhEcm9wWm9uZVxuICAgICAgICAgICN6b25lMj1cImF4RHJvcFpvbmVcIlxuICAgICAgICAgIFtjbGFzcy5heC1zY2hlZHVsZXItc2xvdC1ob3ZlcmVkXT1cInpvbmUyLmlzSG92ZXJlZCgpXCJcbiAgICAgICAgICAob25FbGVtZW50RHJvcCk9XCJoYW5kbGVTaW5nbGVEYXlEcm9wKCRldmVudCwgdGltZS5hZGQoJ21pbnV0ZScsIDMwKSlcIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVTaW5nbGVTbG90RXZlbnQoJGV2ZW50LCB0aW1lLmFkZCgnbWludXRlJywgMzApKVwiXG4gICAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZVNpbmdsZVNsb3RFdmVudCgkZXZlbnQsIHRpbWUuYWRkKCdtaW51dGUnLCAzMCkpXCJcbiAgICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlU2luZ2xlU2xvdEV2ZW50KCRldmVudCwgdGltZS5hZGQoJ21pbnV0ZScsIDMwKSlcIlxuICAgICAgICA+PC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXDragDirective, AXDropZoneDirective } from '@acorex/cdk/drag-drop';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe, NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, HostBinding, inject, input, output, ViewEncapsulation, } from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport { AXSchedulerComponent, } from '../../scheduler.component';\nimport { AXSchedulerService } from '../../scheduler.service'; // Adjust path\nimport * as i0 from \"@angular/core\";\nexport class AXSchedulerMonthViewComponent extends NXComponent {\n constructor() {\n super(...arguments);\n this.scheduler = inject(AXSchedulerComponent);\n this.calendarService = inject(AXCalendarService);\n this.schedulerService = inject(AXSchedulerService);\n // --- Inputs ---\n this.readonly = input(false);\n this.draggable = input(true);\n this.calendar = input();\n this.date = input.required();\n this.firstDayOfWeek = input('saturday');\n this.appointments = input([]);\n // --- Constants ---\n this.DAYS_IN_WEEK = 7;\n this.MAX_VISIBLE_APPOINTMENTS_PER_DAY = 2;\n // Internal outputs to be caught by parent AXSchedulerComponent\n this.slotClickedInternal = output();\n this.slotDblClickedInternal = output();\n this.slotRightClickedInternal = output();\n this.appointmentClickedInternal = output();\n this.appointmentDblClickedInternal = output();\n this.appointmentRightClickedInternal = output();\n this.onAppointmentDropInternal = output();\n // --- Event Handlers ---\n this.eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n // --- Base Computeds ---\n // Calculate the start of the month based on the input date\n this.monthStartDate = computed(() => {\n const d = this.date();\n return d ? d.startOf('month') : null;\n });\n // Generate the list of weekday names based on the firstDayOfWeek\n this.daysArray = computed(() => {\n const dayNames = [];\n const currentDate = this.date(); // Use a stable date for generating week headers\n const currentDayOfWeek = currentDate.dayOfWeek;\n const desiredFirstDayName = this.firstDayOfWeek();\n const desiredFirstDayNumber = this.schedulerService.getDayOfWeekNumber(desiredFirstDayName);\n // Calculate days to subtract to get to the start of the week based on firstDayOfWeek\n const daysToSubtract = (currentDayOfWeek - desiredFirstDayNumber + 7) % 7;\n let headerStartDate = currentDate.add('day', -daysToSubtract);\n for (let i = 0; i < 7; i++) {\n dayNames.push(headerStartDate);\n headerStartDate = headerStartDate.add('day', 1);\n }\n return dayNames;\n });\n // --- Calendar Grid Calculation ---\n this.calendarDaysInfo = computed(() => {\n const monthStart = this.monthStartDate();\n if (!monthStart)\n return { days: [], weeksNeeded: 0 };\n const firstDayOfMonth = monthStart;\n const lastDayOfMonth = monthStart.endOf('month');\n const firstDayGridNum = this.schedulerService.getDayOfWeekNumber(this.firstDayOfWeek());\n const firstDisplayedDayOfWeek = firstDayOfMonth.dayOfWeek;\n const leadingDays = (firstDisplayedDayOfWeek - firstDayGridNum + this.DAYS_IN_WEEK) % this.DAYS_IN_WEEK;\n const firstDayOfGrid = firstDayOfMonth.add('day', -leadingDays);\n // Determine how many total days to show to fill out the weeks\n // A common approach is 6 weeks to ensure consistency, but your dynamic weeksNeeded is fine too.\n // Let's stick to your dynamic `weeksNeeded` and `totalDaysToGenerate`\n const daysInMonth = lastDayOfMonth.dayOfMonth;\n const totalCellsMinimum = leadingDays + daysInMonth;\n const weeksNeededDynamic = Math.ceil(totalCellsMinimum / this.DAYS_IN_WEEK);\n const actualWeeksToShow = Math.max(4, Math.min(weeksNeededDynamic, 6)); // Clamp weeks\n const totalDaysToGenerate = actualWeeksToShow * this.DAYS_IN_WEEK;\n const days = [];\n const today = this.calendarService.create(new Date());\n let currentDay = firstDayOfGrid;\n for (let i = 0; i < totalDaysToGenerate; i++) {\n const isHoliday = this.schedulerService.isHoliday(currentDay) || this.schedulerService.isWeekend(currentDay, this.calendar());\n let holidayTitle = null;\n if (isHoliday) {\n const holiday = this.calendarService.holidays.filter((d) => currentDay.equal(d.date, 'day'))[0];\n if (holiday) {\n holidayTitle = holiday.title;\n }\n }\n days.push({\n date: currentDay,\n isCurrentMonth: currentDay.monthOfYear === monthStart.monthOfYear,\n isToday: currentDay.equal(today, 'day'),\n isHoliday,\n holidayTitle,\n });\n currentDay = currentDay.add('day', 1);\n }\n return { days: days, weeksNeeded: actualWeeksToShow };\n });\n // --- Appointment Grouping ---\n this.appointmentsGroupedByDay = computed(() => {\n const { days } = this.calendarDaysInfo(); // Destructure to get days array\n if (days.length === 0)\n return new Map();\n const viewStartDate = days[0].date;\n const viewEndDate = days[days.length - 1].date;\n const relevantAppointments = this.appointments();\n return this.schedulerService.groupAppointmentsByDay(relevantAppointments, viewStartDate, viewEndDate);\n });\n // --- Day Cell Layout Calculation ---\n this.dayCellLayouts = computed(() => {\n const { days: initialDaysInfo } = this.calendarDaysInfo();\n const allOriginalAppointments = this.appointments();\n if (initialDaysInfo.length === 0) {\n return []; // Return empty array if no days to process\n }\n if (!allOriginalAppointments || allOriginalAppointments.length === 0) {\n // If no appointments, map initialDaysInfo to the full structure with empty appointment arrays\n return initialDaysInfo.map((dayInfo) => ({\n ...dayInfo,\n appointments: [],\n visibleAppointments: [],\n hiddenAppointments: [],\n overflowCount: 0,\n }));\n }\n return initialDaysInfo.map((dayInfo) => {\n const dayAsStartOfDay = dayInfo.date.startOf('day');\n const segmentsForThisDay = [];\n for (const appt of allOriginalAppointments) {\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, dayAsStartOfDay, 0, // viewStartHour for month cell context (full day)\n 24, // viewEndHour for month cell context (full day)\n true);\n if (segment) {\n segmentsForThisDay.push(segment);\n }\n }\n const sortedSegments = orderBy(segmentsForThisDay, [\n (s) => (s.allDay ? 0 : 1), // Segments marked as allDay first\n (s) => s.originalStartDate.getTime(), // Then by original start time\n (s) => s.originalEndDate.getTime() - s.originalStartDate.getTime(), // Then by duration (longer first)\n (s) => s.title?.toLowerCase() ?? '', // Then by title\n ], ['asc', 'asc', 'desc', 'asc']);\n const visibleAppointments = sortedSegments.slice(0, this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);\n const hiddenAppointments = sortedSegments.slice(this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);\n const overflowCount = hiddenAppointments.length;\n return {\n ...dayInfo,\n appointments: sortedSegments,\n visibleAppointments,\n hiddenAppointments,\n overflowCount,\n };\n });\n });\n // --- Dynamic Grid Rows ---\n this.gridTemplateRowsStyle = computed(() => {\n const { weeksNeeded } = this.calendarDaysInfo();\n if (!weeksNeeded || weeksNeeded <= 0) {\n return `repeat(6, minmax(0, 1fr))`; // Fallback, ensures grid is at least somewhat sensible\n }\n return `repeat(${weeksNeeded}, minmax(0, 1fr))`; // Use 1fr for equal distribution\n });\n }\n handleAppointmentEvent(mouseEvent, appointmentSegmentOrOriginal) {\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentSegmentOrOriginal);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, appointment: appointmentRef, sender: this.scheduler }, this.eventOutputMap, 'appointment');\n }\n handleSlotEvent(mouseEvent, date) {\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'month'); // Ensure it's start of day\n if (slotData) {\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler }, this.eventOutputMap, 'slot');\n }\n }\n handleDrop(e, date) {\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'month');\n const droppedItem = e.dropped.dragData();\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n });\n }\n get isReadonly() {\n return this.readonly();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerMonthViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.4\", type: AXSchedulerMonthViewComponent, isStandalone: true, selector: \"ax-scheduler-month-view\", inputs: { readonly: { classPropertyName: \"readonly\", publicName: \"readonly\", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: \"draggable\", publicName: \"draggable\", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: \"calendar\", publicName: \"calendar\", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: \"date\", publicName: \"date\", isSignal: true, isRequired: true, transformFunction: null }, firstDayOfWeek: { classPropertyName: \"firstDayOfWeek\", publicName: \"firstDayOfWeek\", isSignal: true, isRequired: false, transformFunction: null }, appointments: { classPropertyName: \"appointments\", publicName: \"appointments\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: \"slotClickedInternal\", slotDblClickedInternal: \"slotDblClickedInternal\", slotRightClickedInternal: \"slotRightClickedInternal\", appointmentClickedInternal: \"appointmentClickedInternal\", appointmentDblClickedInternal: \"appointmentDblClickedInternal\", appointmentRightClickedInternal: \"appointmentRightClickedInternal\", onAppointmentDropInternal: \"onAppointmentDropInternal\" }, host: { properties: { \"class.ax-state-readonly\": \"this.isReadonly\" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerMonthViewComponent }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-scheduler-month-container\\\">\\n <!-- Weekday Header -->\\n <div class=\\\"ax-scheduler-month-weekdays\\\">\\n @for (day of daysArray(); track day.date.getTime()) {\\n <div class=\\\"ax-scheduler-month-weekday\\\">\\n {{ day | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n </div>\\n }\\n </div>\\n\\n <!-- Calendar Grid -->\\n <div class=\\\"ax-scheduler-month-grid\\\" [style.gridTemplateRows]=\\\"gridTemplateRowsStyle()\\\">\\n @for (dayCell of dayCellLayouts(); track dayCell.date.date.getTime()) {\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleDrop($event, dayCell.date)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n (click)=\\\"handleSlotEvent($event, dayCell.date)\\\"\\n (dblclick)=\\\"handleSlotEvent($event, dayCell.date)\\\"\\n (contextmenu)=\\\"handleSlotEvent($event, dayCell.date)\\\"\\n class=\\\"ax-scheduler-month-day-cell\\\"\\n [class.ax-state-today]=\\\"dayCell.isToday\\\"\\n [class.ax-state-holiday]=\\\"dayCell.isHoliday\\\"\\n [class.ax-other-month]=\\\"!dayCell.isCurrentMonth\\\"\\n [attr.data-date]=\\\"dayCell.date | format: 'date' : { format: 'YYYY-MM-DD' }\\\"\\n >\\n <div class=\\\"ax-scheduler-month-day-header\\\">\\n <span class=\\\"ax-scheduler-month-day-number ax-scheduler-truncate\\\" [axTooltip]=\\\"dayCell.holidayTitle ?? ''\\\">\\n {{ dayCell.date.dayOfMonth }}\\n\\n @if (dayCell.holidayTitle) {\\n ( {{ dayCell.holidayTitle }} )\\n }\\n </span>\\n </div>\\n <div class=\\\"ax-scheduler-month-day-appointments\\\">\\n <!-- Visible Appointment Segments -->\\n @for (segment of dayCell.visibleAppointments; track segment.id + segment.originalStartDate) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"segment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment)\\\"\\n [title]=\\\"\\n segment.title +\\n (segment.allDay\\n ? ''\\n : ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')')\\n \\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n class=\\\"ax-scheduler-month-appointment-chip\\\"\\n [ngClass]=\\\"segment.cssClass??`ax-scheduler-${segment.priority??'primary'}-periority`\\\"\\n [class.continuation-to-next]=\\\"segment.isContinuationToNextDay && !segment.allDay\\\"\\n [class.continuation-from-prev]=\\\"segment.isContinuationFromPreviousDay && !segment.allDay\\\"\\n >\\n <span class=\\\"ax-appointment-chip-title ax-scheduler-truncate\\\">{{ segment.title }}</span>\\n @if (!segment.allDay) {\\n <span>\\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n -\\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </span>\\n }\\n </div>\\n }\\n <!-- Overflow Badge and Popover -->\\n @if (dayCell.overflowCount > 0) {\\n <div #moreAppointments class=\\\"ax-scheduler-month-overflow-badge\\\" (click)=\\\"$event.stopPropagation()\\\">\\n <!-- Stop propagation to prevent slot click -->\\n +{{ 'more-items' | translate: { params: { number: dayCell.overflowCount } } | async }}\\n </div>\\n <ax-popover [target]=\\\"moreAppointments\\\" placement=\\\"bottom-start\\\" trigger=\\\"click\\\">\\n <div\\n [class.ax-state-readonly]=\\\"readonly()\\\"\\n class=\\\"ax-overlay-pane ax-scheduler-popover ax-scheduler-month-popover-appointment\\\"\\n >\\n @for (segment of dayCell.hiddenAppointments; track segment.id + segment.originalStartDate) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"segment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n [title]=\\\"\\n segment.title +\\n (segment.allDay\\n ? ''\\n : ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')')\\n \\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n [ngClass]=\\\"segment.cssClass??`ax-scheduler-${segment.priority??'primary'}-periority`\\\"\\n >\\n <span class=\\\"ax-appointment-chip-title ax-scheduler-truncate\\\">{{ segment.title }}</span>\\n @if (!segment.allDay) {\\n <span>\\n {{\\n segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{\\n segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n </span>\\n }\\n </div>\\n }\\n </div>\\n </ax-popover>\\n }\\n </div>\\n </div>\\n }\\n </div>\\n</div>\\n\", styles: [\"ax-scheduler-month-view{height:100%;display:block;background-color:inherit;min-width:var(--ax-comp-scheduler-width)}ax-scheduler-month-view .ax-scheduler-month-container{height:100%;display:flex;flex-direction:column;background-color:inherit}ax-scheduler-month-view .ax-scheduler-month-weekdays{top:0;z-index:2;width:100%;display:grid;flex-shrink:0;position:sticky;padding:.5rem 0;text-align:center;grid-template-columns:repeat(7,minmax(0,1fr));background-color:var(--ax-comp-scheduler-all-day-bg, inherit);border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-month-view .ax-scheduler-month-weekdays .ax-scheduler-month-weekday{font-weight:500;font-size:.875rem}ax-scheduler-month-view .ax-scheduler-month-grid{width:100%;flex-grow:1;display:grid;grid-auto-rows:minmax(5rem,auto);grid-template-columns:repeat(7,minmax(0,1fr));border-left:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell{padding:.25rem;overflow:hidden;position:relative;border-right:1px solid rgba(var(--ax-sys-color-border-lightest-surface));border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-other-month{background-color:rgba(var(--ax-sys-color-border-lightest-surface),.2)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-other-month .ax-scheduler-month-day-number{color:rgba(var(--ax-sys-color-on-surface),.5)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today{background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today .ax-scheduler-month-day-number{font-weight:700;color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today.ax-other-month{background-color:rgba(var(--ax-sys-color-primary-surface),.025)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today.ax-other-month .ax-scheduler-month-day-number{color:rgba(var(--ax-sys-color-primary-surface),.5)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-holiday .ax-scheduler-month-day-number{font-weight:700;color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-holiday.ax-other-month .ax-scheduler-month-day-number{color:rgba(var(--ax-sys-color-danger-surface),.5)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-header{text-align:center;margin-bottom:.25rem}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-header .ax-scheduler-month-day-number{max-width:100%;font-size:.875rem;display:inline-block}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments{gap:.125rem;display:flex;overflow:hidden;flex-direction:column}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments .ax-scheduler-month-appointment-chip{overflow:hidden;font-size:.75rem;white-space:nowrap;border-radius:.25rem;text-overflow:ellipsis;padding:.125rem .25rem}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments .ax-scheduler-month-overflow-badge{cursor:pointer;text-align:left;font-size:.75rem;padding:.125rem 0;margin-top:.125rem}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments .ax-scheduler-month-overflow-badge:hover{text-decoration:underline}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-appointment-chip{cursor:pointer}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-day-cell{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-day-cell:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-day-cell:hover.ax-state-holiday{background-color:rgba(var(--ax-sys-color-danger-surface),.1)}\\n\"], dependencies: [{ kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: AXTranslatorPipe, name: \"translate\" }, { kind: \"component\", type: AXPopoverComponent, selector: \"ax-popover\", inputs: [\"offsetX\", \"offsetY\", \"target\", \"placement\", \"content\", \"openOn\", \"closeOn\", \"hasBackdrop\", \"openAfter\", \"closeAfter\", \"backdropClass\", \"panelClass\", \"adaptivityEnabled\"], outputs: [\"onOpened\", \"onClosed\"] }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }, { kind: \"directive\", type: AXDragDirective, selector: \"[axDrag]\", inputs: [\"dragData\", \"dragDisabled\", \"dragTransition\", \"dragElementClone\", \"dropZoneGroup\", \"dragStartDelay\", \"dragResetOnDblClick\", \"dragLockAxis\", \"dragClonedTemplate\", \"dragCursor\", \"dragBoundary\", \"dragTransitionDuration\"], outputs: [\"dragPositionChanged\"] }, { kind: \"directive\", type: AXDropZoneDirective, selector: \"[axDropZone]\", inputs: [\"dropZoneGroup\"], outputs: [\"onElementDrop\", \"onElementHover\"], exportAs: [\"axDropZone\"] }, { kind: \"directive\", type: AXTooltipDirective, selector: \"[axTooltip]\", inputs: [\"axTooltip\", \"axTooltipPlacement\", \"axTooltipOffsetX\", \"axTooltipOffsetY\", \"axTooltipOpenAfter\", \"axTooltipCloseAfter\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerMonthViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-scheduler-month-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [\n NgClass,\n AsyncPipe,\n AXTranslatorPipe,\n AXPopoverComponent,\n AXFormatPipe,\n AsyncPipe,\n AXDragDirective,\n AXDropZoneDirective,\n AXTooltipDirective,\n ], providers: [{ provide: AXComponent, useExisting: AXSchedulerMonthViewComponent }], template: \"<div class=\\\"ax-scheduler-month-container\\\">\\n <!-- Weekday Header -->\\n <div class=\\\"ax-scheduler-month-weekdays\\\">\\n @for (day of daysArray(); track day.date.getTime()) {\\n <div class=\\\"ax-scheduler-month-weekday\\\">\\n {{ day | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n </div>\\n }\\n </div>\\n\\n <!-- Calendar Grid -->\\n <div class=\\\"ax-scheduler-month-grid\\\" [style.gridTemplateRows]=\\\"gridTemplateRowsStyle()\\\">\\n @for (dayCell of dayCellLayouts(); track dayCell.date.date.getTime()) {\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleDrop($event, dayCell.date)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n (click)=\\\"handleSlotEvent($event, dayCell.date)\\\"\\n (dblclick)=\\\"handleSlotEvent($event, dayCell.date)\\\"\\n (contextmenu)=\\\"handleSlotEvent($event, dayCell.date)\\\"\\n class=\\\"ax-scheduler-month-day-cell\\\"\\n [class.ax-state-today]=\\\"dayCell.isToday\\\"\\n [class.ax-state-holiday]=\\\"dayCell.isHoliday\\\"\\n [class.ax-other-month]=\\\"!dayCell.isCurrentMonth\\\"\\n [attr.data-date]=\\\"dayCell.date | format: 'date' : { format: 'YYYY-MM-DD' }\\\"\\n >\\n <div class=\\\"ax-scheduler-month-day-header\\\">\\n <span class=\\\"ax-scheduler-month-day-number ax-scheduler-truncate\\\" [axTooltip]=\\\"dayCell.holidayTitle ?? ''\\\">\\n {{ dayCell.date.dayOfMonth }}\\n\\n @if (dayCell.holidayTitle) {\\n ( {{ dayCell.holidayTitle }} )\\n }\\n </span>\\n </div>\\n <div class=\\\"ax-scheduler-month-day-appointments\\\">\\n <!-- Visible Appointment Segments -->\\n @for (segment of dayCell.visibleAppointments; track segment.id + segment.originalStartDate) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"segment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment)\\\"\\n [title]=\\\"\\n segment.title +\\n (segment.allDay\\n ? ''\\n : ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')')\\n \\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n class=\\\"ax-scheduler-month-appointment-chip\\\"\\n [ngClass]=\\\"segment.cssClass??`ax-scheduler-${segment.priority??'primary'}-periority`\\\"\\n [class.continuation-to-next]=\\\"segment.isContinuationToNextDay && !segment.allDay\\\"\\n [class.continuation-from-prev]=\\\"segment.isContinuationFromPreviousDay && !segment.allDay\\\"\\n >\\n <span class=\\\"ax-appointment-chip-title ax-scheduler-truncate\\\">{{ segment.title }}</span>\\n @if (!segment.allDay) {\\n <span>\\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n -\\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </span>\\n }\\n </div>\\n }\\n <!-- Overflow Badge and Popover -->\\n @if (dayCell.overflowCount > 0) {\\n <div #moreAppointments class=\\\"ax-scheduler-month-overflow-badge\\\" (click)=\\\"$event.stopPropagation()\\\">\\n <!-- Stop propagation to prevent slot click -->\\n +{{ 'more-items' | translate: { params: { number: dayCell.overflowCount } } | async }}\\n </div>\\n <ax-popover [target]=\\\"moreAppointments\\\" placement=\\\"bottom-start\\\" trigger=\\\"click\\\">\\n <div\\n [class.ax-state-readonly]=\\\"readonly()\\\"\\n class=\\\"ax-overlay-pane ax-scheduler-popover ax-scheduler-month-popover-appointment\\\"\\n >\\n @for (segment of dayCell.hiddenAppointments; track segment.id + segment.originalStartDate) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"segment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n [title]=\\\"\\n segment.title +\\n (segment.allDay\\n ? ''\\n : ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')')\\n \\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n [ngClass]=\\\"segment.cssClass??`ax-scheduler-${segment.priority??'primary'}-periority`\\\"\\n >\\n <span class=\\\"ax-appointment-chip-title ax-scheduler-truncate\\\">{{ segment.title }}</span>\\n @if (!segment.allDay) {\\n <span>\\n {{\\n segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{\\n segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n </span>\\n }\\n </div>\\n }\\n </div>\\n </ax-popover>\\n }\\n </div>\\n </div>\\n }\\n </div>\\n</div>\\n\", styles: [\"ax-scheduler-month-view{height:100%;display:block;background-color:inherit;min-width:var(--ax-comp-scheduler-width)}ax-scheduler-month-view .ax-scheduler-month-container{height:100%;display:flex;flex-direction:column;background-color:inherit}ax-scheduler-month-view .ax-scheduler-month-weekdays{top:0;z-index:2;width:100%;display:grid;flex-shrink:0;position:sticky;padding:.5rem 0;text-align:center;grid-template-columns:repeat(7,minmax(0,1fr));background-color:var(--ax-comp-scheduler-all-day-bg, inherit);border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-month-view .ax-scheduler-month-weekdays .ax-scheduler-month-weekday{font-weight:500;font-size:.875rem}ax-scheduler-month-view .ax-scheduler-month-grid{width:100%;flex-grow:1;display:grid;grid-auto-rows:minmax(5rem,auto);grid-template-columns:repeat(7,minmax(0,1fr));border-left:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell{padding:.25rem;overflow:hidden;position:relative;border-right:1px solid rgba(var(--ax-sys-color-border-lightest-surface));border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-other-month{background-color:rgba(var(--ax-sys-color-border-lightest-surface),.2)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-other-month .ax-scheduler-month-day-number{color:rgba(var(--ax-sys-color-on-surface),.5)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today{background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today .ax-scheduler-month-day-number{font-weight:700;color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today.ax-other-month{background-color:rgba(var(--ax-sys-color-primary-surface),.025)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today.ax-other-month .ax-scheduler-month-day-number{color:rgba(var(--ax-sys-color-primary-surface),.5)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-holiday .ax-scheduler-month-day-number{font-weight:700;color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-holiday.ax-other-month .ax-scheduler-month-day-number{color:rgba(var(--ax-sys-color-danger-surface),.5)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-header{text-align:center;margin-bottom:.25rem}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-header .ax-scheduler-month-day-number{max-width:100%;font-size:.875rem;display:inline-block}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments{gap:.125rem;display:flex;overflow:hidden;flex-direction:column}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments .ax-scheduler-month-appointment-chip{overflow:hidden;font-size:.75rem;white-space:nowrap;border-radius:.25rem;text-overflow:ellipsis;padding:.125rem .25rem}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments .ax-scheduler-month-overflow-badge{cursor:pointer;text-align:left;font-size:.75rem;padding:.125rem 0;margin-top:.125rem}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments .ax-scheduler-month-overflow-badge:hover{text-decoration:underline}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-appointment-chip{cursor:pointer}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-day-cell{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-day-cell:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-day-cell:hover.ax-state-holiday{background-color:rgba(var(--ax-sys-color-danger-surface),.1)}\\n\"] }]\n }], propDecorators: { isReadonly: [{\n type: HostBinding,\n args: ['class.ax-state-readonly']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLW1vbnRoLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9zY2hlZHVsZXIvc3JjL2xpYi92aWV3cy9tb250aC9zY2hlZHVsZXItbW9udGgtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3ZpZXdzL21vbnRoL3NjaGVkdWxlci1tb250aC12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBdUIsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQWMsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXBDLE9BQU8sRUFFTCxvQkFBb0IsR0FHckIs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LE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksV0FDNUI7d0JBQ1AsT0FBTzt3QkFDUCxTQUFTO3dCQUNULGdCQUFnQjt3QkFDaEIsa0JBQWtCO3dCQUNsQixZQUFZO3dCQUNaLFNBQVM7d0JBQ1QsZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLGtCQUFrQjtxQkFDbkIsYUFDVSxDQUFDLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLCtCQUErQixFQUFFLENBQUM7OEJBdVByQyxVQUFVO3NCQUFyRCxXQUFXO3VCQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYQ29tcG9uZW50LCBOWENvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY2RrL2NvbW1vbic7XG5pbXBvcnQgeyBBWERyYWdEaXJlY3RpdmUsIEFYRHJvcFpvbmVEaXJlY3RpdmUsIEFYRHJvcFpvbmVEcm9wRXZlbnQgfSBmcm9tICdAYWNvcmV4L2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgQVhQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3BvcG92ZXInO1xuaW1wb3J0IHsgQVhUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3Rvb2x0aXAnO1xuaW1wb3J0IHsgQVhDYWxlbmRhclNlcnZpY2UsIEFYRGF0ZVRpbWUgfSBmcm9tICdAYWNvcmV4L2NvcmUvZGF0ZS10aW1lJztcbmltcG9ydCB7IEFYRm9ybWF0UGlwZSB9IGZyb20gJ0BhY29yZXgvY29yZS9mb3JtYXQnO1xuaW1wb3J0IHsgQVhUcmFuc2xhdG9yUGlwZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIEhvc3RCaW5kaW5nLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBvdXRwdXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG9yZGVyQnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQVhEYXlPZldlZWtOYW1lLCBBWFNjaGVkdWxlckFwcG9pbnRtZW50LCBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCB9IGZyb20gJy4uLy4uL3NjaGVkdWxlci5jbGFzcyc7IC8vIEFkanVzdCBwYXRoXG5pbXBvcnQge1xuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudCxcbiAgQVhTY2hlZHVsZXJDb21wb25lbnQsXG4gIEFYU2NoZWR1bGVyU2xvdERyb3BFdmVudCxcbiAgQVhTY2hlZHVsZXJTbG90TW91c2VFdmVudCxcbn0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWFNjaGVkdWxlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuc2VydmljZSc7IC8vIEFkanVzdCBwYXRoXG5cbi8vIC0tLSBUeXBlcyBzcGVjaWZpYyB0byBNb250aCBWaWV3IExheW91dCAtLS1cbi8vIFJlcHJlc2VudHMgYSBzaW5nbGUgZGF5IGNlbGwgaW4gdGhlIG1vbnRoIGdyaWRcbmV4cG9ydCB0eXBlIEFYU2NoZWR1bGVyTW9udGhEYXlDZWxsID0ge1xuICBkYXRlOiBBWERhdGVUaW1lO1xuICBpc0N1cnJlbnRNb250aDogYm9vbGVhbjtcbiAgaXNUb2RheTogYm9vbGVhbjtcbiAgaXNIb2xpZGF5OiBib29sZWFuO1xuICBob2xpZGF5VGl0bGU/OiBzdHJpbmc7XG4gIGFwcG9pbnRtZW50czogQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXTsgLy8gQWxsIGFwcG9pbnRtZW50cyBmb3IgdGhpcyBkYXlcbiAgdmlzaWJsZUFwcG9pbnRtZW50czogQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXTsgLy8gQXBwb2ludG1lbnRzIHRvIGRpc3BsYXkgYXMgY2hpcHNcbiAgaGlkZGVuQXBwb2ludG1lbnRzOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdOyAvLyBBcHBvaW50bWVudHMgaGlkZGVuIGJlaGluZCB0aGUgYmFkZ2VcbiAgb3ZlcmZsb3dDb3VudDogbnVtYmVyOyAvLyBDb3VudCBvZiBoaWRkZW4gYXBwb2ludG1lbnRzIChsZW5ndGggb2YgaGlkZGVuQXBwb2ludG1lbnRzKVxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtc2NoZWR1bGVyLW1vbnRoLXZpZXcnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2NoZWR1bGVyLW1vbnRoLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vc2NoZWR1bGVyLW1vbnRoLXZpZXcuY29tcG9uZW50LnNjc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW1xuICAgIE5nQ2xhc3MsXG4gICAgQXN5bmNQaXBlLFxuICAgIEFYVHJhbnNsYXRvclBpcGUsXG4gICAgQVhQb3BvdmVyQ29tcG9uZW50LFxuICAgIEFYRm9ybWF0UGlwZSxcbiAgICBBc3luY1BpcGUsXG4gICAgQVhEcmFnRGlyZWN0aXZlLFxuICAgIEFYRHJvcFpvbmVEaXJlY3RpdmUsXG4gICAgQVhUb29sdGlwRGlyZWN0aXZlLFxuICBdLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IEFYQ29tcG9uZW50LCB1c2VFeGlzdGluZzogQVhTY2hlZHVsZXJNb250aFZpZXdDb21wb25lbnQgfV0sXG59KVxuZXhwb3J0IGNsYXNzIEFYU2NoZWR1bGVyTW9udGhWaWV3Q29tcG9uZW50IGV4dGVuZHMgTlhDb21wb25lbnQge1xuICBwcml2YXRlIHNjaGVkdWxlciA9IGluamVjdChBWFNjaGVkdWxlckNvbXBvbmVudCk7XG4gIHByaXZhdGUgY2FsZW5kYXJTZXJ2aWNlID0gaW5qZWN0KEFYQ2FsZW5kYXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzY2hlZHVsZXJTZXJ2aWNlID0gaW5qZWN0KEFYU2NoZWR1bGVyU2VydmljZSk7XG5cbiAgLy8gLS0tIElucHV0cyAtLS1cbiAgcmVhZG9ubHkgPSBpbnB1dChmYWxzZSk7XG4gIGRyYWdnYWJsZSA9IGlucHV0KHRydWUpO1xuICBjYWxlbmRhciA9IGlucHV0PHN0cmluZz4oKTtcbiAgZGF0ZSA9IGlucHV0LnJlcXVpcmVkPEFYRGF0ZVRpbWU+KCk7XG4gIGZpcnN0RGF5T2ZXZWVrID0gaW5wdXQ8QVhEYXlPZldlZWtOYW1lPignc2F0dXJkYXknKTtcbiAgYXBwb2ludG1lbnRzID0gaW5wdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudFtdPihbXSk7XG5cbiAgLy8gLS0tIENvbnN0YW50cyAtLS1cbiAgcmVhZG9ubHkgREFZU19JTl9XRUVLID0gNztcbiAgcmVhZG9ubHkgTUFYX1ZJU0lCTEVfQVBQT0lOVE1FTlRTX1BFUl9EQVkgPSAyO1xuXG4gIC8vIEludGVybmFsIG91dHB1dHMgdG8gYmUgY2F1Z2h0IGJ5IHBhcmVudCBBWFNjaGVkdWxlckNvbXBvbmVudFxuICBzbG90Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIHNsb3REYmxDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgc2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIGFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBhcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgb25BcHBvaW50bWVudERyb3BJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3REcm9wRXZlbnQ+KCk7XG5cbiAgLy8gLS0tIEV2ZW50IEhhbmRsZXJzIC0tLVxuICBwcml2YXRlIHJlYWRvbmx5IGV2ZW50T3V0cHV0TWFwID0ge1xuICAgIHNsb3Q6IHtcbiAgICAgIGNsaWNrOiB0aGlzLnNsb3RDbGlja2VkSW50ZXJuYWwsXG4gICAgICBkYmxjbGljazogdGhpcy5zbG90RGJsQ2xpY2tlZEludGVybmFsLFxuICAgICAgY29udGV4dG1lbnU6IHRoaXMuc2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsLFxuICAgIH0sXG4gICAgYXBwb2ludG1lbnQ6IHtcbiAgICAgIGNsaWNrOiB0aGlzLmFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsLFxuICAgICAgZGJsY2xpY2s6IHRoaXMuYXBwb2ludG1lbnREYmxDbGlja2VkSW50ZXJuYWwsXG4gICAgICBjb250ZXh0bWVudTogdGhpcy5hcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsLFxuICAgIH0sXG4gIH07XG4gIGhhbmRsZUFwcG9pbnRtZW50RXZlbnQobW91c2VFdmVudDogTW91c2VFdmVudCwgYXBwb2ludG1lbnRTZWdtZW50T3JPcmlnaW5hbDogQVhTY2hlZHVsZXJBcHBvaW50bWVudCkge1xuICAgIGNvbnN0IG9yaWdpbmFsQXBwb2ludG1lbnQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0T3JpZ2luYWxBcHBvaW50bWVudChhcHBvaW50bWVudFNlZ21lbnRPck9yaWdpbmFsKTtcbiAgICBjb25zdCBhcHBvaW50bWVudFJlZiA9IHtcbiAgICAgIC4uLm9yaWdpbmFsQXBwb2ludG1lbnQsXG4gICAgICBlbmREYXRlOiBvcmlnaW5hbEFwcG9pbnRtZW50LmVuZERhdGUsXG4gICAgICBzdGFydERhdGU6IG9yaWdpbmFsQXBwb2ludG1lbnQuc3RhcnREYXRlLFxuICAgIH07XG4gICAgdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmhhbmRsZUV2ZW50KFxuICAgICAgeyBuYXRpdmVFdmVudDogbW91c2VFdmVudCwgYXBwb2ludG1lbnQ6IGFwcG9pbnRtZW50UmVmLCBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyIH0sXG4gICAgICB0aGlzLmV2ZW50T3V0cHV0TWFwLFxuICAgICAgJ2FwcG9pbnRtZW50JyxcbiAgICApO1xuICB9XG4gIGhhbmRsZVNsb3RFdmVudChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50LCBkYXRlOiBBWERhdGVUaW1lKSB7XG4gICAgY29uc3Qgc2xvdERhdGEgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0U2xvdERhdGEoZGF0ZS5zdGFydE9mKCdkYXknKSwgJ21vbnRoJyk7IC8vIEVuc3VyZSBpdCdzIHN0YXJ0IG9mIGRheVxuICAgIGlmIChzbG90RGF0YSkge1xuICAgICAgdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmhhbmRsZUV2ZW50KFxuICAgICAgICB7IG5hdGl2ZUV2ZW50OiBtb3VzZUV2ZW50LCBzbG90OiBzbG90RGF0YSwgc2VuZGVyOiB0aGlzLnNjaGVkdWxlciB9LFxuICAgICAgICB0aGlzLmV2ZW50T3V0cHV0TWFwLFxuICAgICAgICAnc2xvdCcsXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBoYW5kbGVEcm9wKGU6IEFYRHJvcFpvbmVEcm9wRXZlbnQsIGRhdGU6IEFYRGF0ZVRpbWUpIHtcbiAgICBjb25zdCBzbG90RGF0YSA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRTbG90RGF0YShkYXRlLnN0YXJ0T2YoJ2RheScpLCAnbW9udGgnKTtcbiAgICBjb25zdCBkcm9wcGVkSXRlbSA9IGUuZHJvcHBlZC5kcmFnRGF0YSgpIGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnQ7XG4gICAgY29uc3Qgb3JpZ2luYWxBcHBvaW50bWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRPcmlnaW5hbEFwcG9pbnRtZW50KGRyb3BwZWRJdGVtKTtcbiAgICBjb25zdCBhcHBvaW50bWVudFJlZiA9IHtcbiAgICAgIC4uLm9yaWdpbmFsQXBwb2ludG1lbnQsXG4gICAgICBlbmREYXRlOiBvcmlnaW5hbEFwcG9pbnRtZW50LmVuZERhdGUsXG4gICAgICBzdGFydERhdGU6IG9yaWdpbmFsQXBwb2ludG1lbnQuc3RhcnREYXRlLFxuICAgIH07XG4gICAgdGhpcy5vbkFwcG9pbnRtZW50RHJvcEludGVybmFsLmVtaXQoe1xuICAgICAgZHJvcEV2ZW50OiBlLFxuICAgICAgc2xvdDogc2xvdERhdGEsXG4gICAgICBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyLFxuICAgICAgYXBwb2ludG1lbnQ6IGFwcG9pbnRtZW50UmVmLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gLS0tIEJhc2UgQ29tcHV0ZWRzIC0tLVxuICAvLyBDYWxjdWxhdGUgdGhlIHN0YXJ0IG9mIHRoZSBtb250aCBiYXNlZCBvbiB0aGUgaW5wdXQgZGF0ZVxuICBtb250aFN0YXJ0RGF0ZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBkID0gdGhpcy5kYXRlKCk7XG4gICAgcmV0dXJuIGQgPyBkLnN0YXJ0T2YoJ21vbnRoJykgOiBudWxsO1xuICB9KTtcblxuICAvLyBHZW5lcmF0ZSB0aGUgbGlzdCBvZiB3ZWVrZGF5IG5hbWVzIGJhc2VkIG9uIHRoZSBmaXJzdERheU9mV2Vla1xuICBkYXlzQXJyYXkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZGF5TmFtZXM6IEFYRGF0ZVRpbWVbXSA9IFtdO1xuXG4gICAgY29uc3QgY3VycmVudERhdGUgPSB0aGlzLmRhdGUoKTsgLy8gVXNlIGEgc3RhYmxlIGRhdGUgZm9yIGdlbmVyYXRpbmcgd2VlayBoZWFkZXJzXG4gICAgY29uc3QgY3VycmVudERheU9mV2VlayA9IGN1cnJlbnREYXRlLmRheU9mV2VlaztcbiAgICBjb25zdCBkZXNpcmVkRmlyc3REYXlOYW1lID0gdGhpcy5maXJzdERheU9mV2VlaygpO1xuICAgIGNvbnN0IGRlc2lyZWRGaXJzdERheU51bWJlciA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXREYXlPZldlZWtOdW1iZXIoZGVzaXJlZEZpcnN0RGF5TmFtZSk7XG5cbiAgICAvLyBDYWxjdWxhdGUgZGF5cyB0byBzdWJ0cmFjdCB0byBnZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSB3ZWVrIGJhc2VkIG9uIGZpcnN0RGF5T2ZXZWVrXG4gICAgY29uc3QgZGF5c1RvU3VidHJhY3QgPSAoY3VycmVudERheU9mV2VlayAtIGRlc2lyZWRGaXJzdERheU51bWJlciArIDcpICUgNztcbiAgICBsZXQgaGVhZGVyU3RhcnREYXRlID0gY3VycmVudERhdGUuYWRkKCdkYXknLCAtZGF5c1RvU3VidHJhY3QpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgIGRheU5hbWVzLnB1c2goaGVhZGVyU3RhcnREYXRlKTtcbiAgICAgIGhlYWRlclN0YXJ0RGF0ZSA9IGhlYWRlclN0YXJ0RGF0ZS5hZGQoJ2RheScsIDEpO1xuICAgIH1cbiAgICByZXR1cm4gZGF5TmFtZXM7XG4gIH0pO1xuXG4gIC8vIC0tLSBDYWxlbmRhciBHcmlkIENhbGN1bGF0aW9uIC0tLVxuICBjYWxlbmRhckRheXNJbmZvID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IG1vbnRoU3RhcnQgPSB0aGlzLm1vbnRoU3RhcnREYXRlKCk7XG4gICAgaWYgKCFtb250aFN0YXJ0KSByZXR1cm4geyBkYXlzOiBbXSwgd2Vla3NOZWVkZWQ6IDAgfTtcblxuICAgIGNvbnN0IGZpcnN0RGF5T2ZNb250aCA9IG1vbnRoU3RhcnQ7XG4gICAgY29uc3QgbGFzdERheU9mTW9udGggPSBtb250aFN0YXJ0LmVuZE9mKCdtb250aCcpO1xuXG4gICAgY29uc3QgZmlyc3REYXlHcmlkTnVtID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldERheU9mV2Vla051bWJlcih0aGlzLmZpcnN0RGF5T2ZXZWVrKCkpO1xuICAgIGNvbnN0IGZpcnN0RGlzcGxheWVkRGF5T2ZXZWVrID0gZmlyc3REYXlPZk1vbnRoLmRheU9mV2VlaztcblxuICAgIGNvbnN0IGxlYWRpbmdEYXlzID0gKGZpcnN0RGlzcGxheWVkRGF5T2ZXZWVrIC0gZmlyc3REYXlHcmlkTnVtICsgdGhpcy5EQVlTX0lOX1dFRUspICUgdGhpcy5EQVlTX0lOX1dFRUs7XG4gICAgY29uc3QgZmlyc3REYXlPZkdyaWQgPSBmaXJzdERheU9mTW9udGguYWRkKCdkYXknLCAtbGVhZGluZ0RheXMpO1xuXG4gICAgLy8gRGV0ZXJtaW5lIGhvdyBtYW55IHRvdGFsIGRheXMgdG8gc2hvdyB0byBmaWxsIG91dCB0aGUgd2Vla3NcbiAgICAvLyBBIGNvbW1vbiBhcHByb2FjaCBpcyA2IHdlZWtzIHRvIGVuc3VyZSBjb25zaXN0ZW5jeSwgYnV0IHlvdXIgZHluYW1pYyB3ZWVrc05lZWRlZCBpcyBmaW5lIHRvby5cbiAgICAvLyBMZXQncyBzdGljayB0byB5b3VyIGR5bmFtaWMgYHdlZWtzTmVlZGVkYCBhbmQgYHRvdGFsRGF5c1RvR2VuZXJhdGVgXG4gICAgY29uc3QgZGF5c0luTW9udGggPSBsYXN0RGF5T2ZNb250aC5kYXlPZk1vbnRoO1xuICAgIGNvbnN0IHRvdGFsQ2VsbHNNaW5pbXVtID0gbGVhZGluZ0RheXMgKyBkYXlzSW5Nb250aDtcbiAgICBjb25zdCB3ZWVrc05lZWRlZER5bmFtaWMgPSBNYXRoLmNlaWwodG90YWxDZWxsc01pbmltdW0gLyB0aGlzLkRBWVNfSU5fV0VFSyk7XG4gICAgY29uc3QgYWN0dWFsV2Vla3NUb1Nob3cgPSBNYXRoLm1heCg0LCBNYXRoLm1pbih3ZWVrc05lZWRlZER5bmFtaWMsIDYpKTsgLy8gQ2xhbXAgd2Vla3NcbiAgICBjb25zdCB0b3RhbERheXNUb0dlbmVyYXRlID0gYWN0dWFsV2Vla3NUb1Nob3cgKiB0aGlzLkRBWVNfSU5fV0VFSztcblxuICAgIGNvbnN0IGRheXM6IHtcbiAgICAgIGRhdGU6IEFYRGF0ZVRpbWU7XG4gICAgICBpc0N1cnJlbnRNb250aDogYm9vbGVhbjtcbiAgICAgIGlzVG9kYXk6IGJvb2xlYW47XG4gICAgICBpc0hvbGlkYXk6IGJvb2xlYW47XG4gICAgICBob2xpZGF5VGl0bGU/OiBzdHJpbmc7XG4gICAgfVtdID0gW107XG4gICAgY29uc3QgdG9kYXkgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUobmV3IERhdGUoKSk7XG4gICAgbGV0IGN1cnJlbnREYXkgPSBmaXJzdERheU9mR3JpZDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG90YWxEYXlzVG9HZW5lcmF0ZTsgaSsrKSB7XG4gICAgICBjb25zdCBpc0hvbGlkYXkgPVxuICAgICAgICB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaXNIb2xpZGF5KGN1cnJlbnREYXkpIHx8IHRoaXMuc2NoZWR1bGVyU2VydmljZS5pc1dlZWtlbmQoY3VycmVudERheSwgdGhpcy5jYWxlbmRhcigpKTtcblxuICAgICAgbGV0IGhvbGlkYXlUaXRsZTogbnVsbCB8IHN0cmluZyA9IG51bGw7XG4gICAgICBpZiAoaXNIb2xpZGF5KSB7XG4gICAgICAgIGNvbnN0IGhvbGlkYXkgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5ob2xpZGF5cy5maWx0ZXIoKGQpID0+IGN1cnJlbnREYXkuZXF1YWwoZC5kYXRlLCAnZGF5JykpWzBdO1xuICAgICAgICBpZiAoaG9saWRheSkge1xuICAgICAgICAgIGhvbGlkYXlUaXRsZSA9IGhvbGlkYXkudGl0bGU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZGF5cy5wdXNoKHtcbiAgICAgICAgZGF0ZTogY3VycmVudERheSxcbiAgICAgICAgaXNDdXJyZW50TW9udGg6IGN1cnJlbnREYXkubW9udGhPZlllYXIgPT09IG1vbnRoU3RhcnQubW9udGhPZlllYXIsXG4gICAgICAgIGlzVG9kYXk6IGN1cnJlbnREYXkuZXF1YWwodG9kYXksICdkYXknKSxcbiAgICAgICAgaXNIb2xpZGF5LFxuICAgICAgICBob2xpZGF5VGl0bGUsXG4gICAgICB9KTtcbiAgICAgIGN1cnJlbnREYXkgPSBjdXJyZW50RGF5LmFkZCgnZGF5JywgMSk7XG4gICAgfVxuICAgIHJldHVybiB7IGRheXM6IGRheXMsIHdlZWtzTmVlZGVkOiBhY3R1YWxXZWVrc1RvU2hvdyB9O1xuICB9KTtcblxuICAvLyAtLS0gQXBwb2ludG1lbnQgR3JvdXBpbmcgLS0tXG4gIGFwcG9pbnRtZW50c0dyb3VwZWRCeURheSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB7IGRheXMgfSA9IHRoaXMuY2FsZW5kYXJEYXlzSW5mbygpOyAvLyBEZXN0cnVjdHVyZSB0byBnZXQgZGF5cyBhcnJheVxuICAgIGlmIChkYXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG5ldyBNYXA8c3RyaW5nLCBBWFNjaGVkdWxlckFwcG9pbnRtZW50W10+KCk7XG5cbiAgICBjb25zdCB2aWV3U3RhcnREYXRlID0gZGF5c1swXS5kYXRlO1xuICAgIGNvbnN0IHZpZXdFbmREYXRlID0gZGF5c1tkYXlzLmxlbmd0aCAtIDFdLmRhdGU7XG4gICAgY29uc3QgcmVsZXZhbnRBcHBvaW50bWVudHMgPSB0aGlzLmFwcG9pbnRtZW50cygpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2NoZWR1bGVyU2VydmljZS5ncm91cEFwcG9pbnRtZW50c0J5RGF5KHJlbGV2YW50QXBwb2ludG1lbnRzLCB2aWV3U3RhcnREYXRlLCB2aWV3RW5kRGF0ZSk7XG4gIH0pO1xuXG4gIC8vIC0tLSBEYXkgQ2VsbCBMYXlvdXQgQ2FsY3VsYXRpb24gLS0tXG4gIGRheUNlbGxMYXlvdXRzID0gY29tcHV0ZWQ8QVhTY2hlZHVsZXJNb250aERheUNlbGxbXT4oKCkgPT4ge1xuICAgIGNvbnN0IHsgZGF5czogaW5pdGlhbERheXNJbmZvIH0gPSB0aGlzLmNhbGVuZGFyRGF5c0luZm8oKTtcbiAgICBjb25zdCBhbGxPcmlnaW5hbEFwcG9pbnRtZW50cyA9IHRoaXMuYXBwb2ludG1lbnRzKCk7XG5cbiAgICBpZiAoaW5pdGlhbERheXNJbmZvLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdOyAvLyBSZXR1cm4gZW1wdHkgYXJyYXkgaWYgbm8gZGF5cyB0byBwcm9jZXNzXG4gICAgfVxuICAgIGlmICghYWxsT3JpZ2luYWxBcHBvaW50bWVudHMgfHwgYWxsT3JpZ2luYWxBcHBvaW50bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBJZiBubyBhcHBvaW50bWVudHMsIG1hcCBpbml0aWFsRGF5c0luZm8gdG8gdGhlIGZ1bGwgc3RydWN0dXJlIHdpdGggZW1wdHkgYXBwb2ludG1lbnQgYXJyYXlzXG4gICAgICByZXR1cm4gaW5pdGlhbERheXNJbmZvLm1hcCgoZGF5SW5mbykgPT4gKHtcbiAgICAgICAgLi4uZGF5SW5mbyxcbiAgICAgICAgYXBwb2ludG1lbnRzOiBbXSxcbiAgICAgICAgdmlzaWJsZUFwcG9pbnRtZW50czogW10sXG4gICAgICAgIGhpZGRlbkFwcG9pbnRtZW50czogW10sXG4gICAgICAgIG92ZXJmbG93Q291bnQ6IDAsXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluaXRpYWxEYXlzSW5mby5tYXAoKGRheUluZm8pID0+IHtcbiAgICAgIGNvbnN0IGRheUFzU3RhcnRPZkRheSA9IGRheUluZm8uZGF0ZS5zdGFydE9mKCdkYXknKTtcbiAgICAgIGNvbnN0IHNlZ21lbnRzRm9yVGhpc0RheTogQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXSA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IGFwcHQgb2YgYWxsT3JpZ2luYWxBcHBvaW50bWVudHMpIHtcbiAgICAgICAgY29uc3Qgc2VnbWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRDbG9uZWRBcHBvaW50bWVudFNlZ21lbnRPbkRheShcbiAgICAgICAgICBhcHB0LFxuICAgICAgICAgIGRheUFzU3RhcnRPZkRheSxcbiAgICAgICAgICAwLCAvLyB2aWV3U3RhcnRIb3VyIGZvciBtb250aCBjZWxsIGNvbnRleHQgKGZ1bGwgZGF5KVxuICAgICAgICAgIDI0LCAvLyB2aWV3RW5kSG91ciBmb3IgbW9udGggY2VsbCBjb250ZXh0IChmdWxsIGRheSlcbiAgICAgICAgICB0cnVlLCAvLyBpc0Z1bGxEYXlDZWxsQ29udGV4dCA9IHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHNlZ21lbnQpIHtcbiAgICAgICAgICBzZWdtZW50c0ZvclRoaXNEYXkucHVzaChzZWdtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBzb3J0ZWRTZWdtZW50cyA9IG9yZGVyQnkoXG4gICAgICAgIHNlZ21lbnRzRm9yVGhpc0RheSxcbiAgICAgICAgW1xuICAgICAgICAgIChzKSA9PiAocy5hbGxEYXkgPyAwIDogMSksIC8vIFNlZ21lbnRzIG1hcmtlZCBhcyBhbGxEYXkgZmlyc3RcbiAgICAgICAgICAocykgPT4gcy5vcmlnaW5hbFN0YXJ0RGF0ZS5nZXRUaW1lKCksIC8vIFRoZW4gYnkgb3JpZ2luYWwgc3RhcnQgdGltZVxuICAgICAgICAgIChzKSA9PiBzLm9yaWdpbmFsRW5kRGF0ZS5nZXRUaW1lKCkgLSBzLm9yaWdpbmFsU3RhcnREYXRlLmdldFRpbWUoKSwgLy8gVGhlbiBieSBkdXJhdGlvbiAobG9uZ2VyIGZpcnN0KVxuICAgICAgICAgIChzKSA9PiBzLnRpdGxlPy50b0xvd2VyQ2FzZSgpID8/ICcnLCAvLyBUaGVuIGJ5IHRpdGxlXG4gICAgICAgIF0sXG4gICAgICAgIFsnYXNjJywgJ2FzYycsICdkZXNjJywgJ2FzYyddLFxuICAgICAgKTtcblxuICAgICAgY29uc3QgdmlzaWJsZUFwcG9pbnRtZW50cyA9IHNvcnRlZFNlZ21lbnRzLnNsaWNlKDAsIHRoaXMuTUFYX1ZJU0lCTEVfQVBQT0lOVE1FTlRTX1BFUl9EQVkpO1xuICAgICAgY29uc3QgaGlkZGVuQXBwb2ludG1lbnRzID0gc29ydGVkU2VnbWVudHMuc2xpY2UodGhpcy5NQVhfVklTSUJMRV9BUFBPSU5UTUVOVFNfUEVSX0RBWSk7XG4gICAgICBjb25zdCBvdmVyZmxvd0NvdW50ID0gaGlkZGVuQXBwb2ludG1lbnRzLmxlbmd0aDtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZGF5SW5mbyxcbiAgICAgICAgYXBwb2ludG1lbnRzOiBzb3J0ZWRTZWdtZW50cyxcbiAgICAgICAgdmlzaWJsZUFwcG9pbnRtZW50cyxcbiAgICAgICAgaGlkZGVuQXBwb2ludG1lbnRzLFxuICAgICAgICBvdmVyZmxvd0NvdW50LFxuICAgICAgfTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gLS0tIER5bmFtaWMgR3JpZCBSb3dzIC0tLVxuICBncmlkVGVtcGxhdGVSb3dzU3R5bGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgeyB3ZWVrc05lZWRlZCB9ID0gdGhpcy5jYWxlbmRhckRheXNJbmZvKCk7XG4gICAgaWYgKCF3ZWVrc05lZWRlZCB8fCB3ZWVrc05lZWRlZCA8PSAwKSB7XG4gICAgICByZXR1cm4gYHJlcGVhdCg2LCBtaW5tYXgoMCwgMWZyKSlgOyAvLyBGYWxsYmFjaywgZW5zdXJlcyBncmlkIGlzIGF0IGxlYXN0IHNvbWV3aGF0IHNlbnNpYmxlXG4gICAgfVxuICAgIHJldHVybiBgcmVwZWF0KCR7d2Vla3NOZWVkZWR9LCBtaW5tYXgoMCwgMWZyKSlgOyAvLyBVc2UgMWZyIGZvciBlcXVhbCBkaXN0cmlidXRpb25cbiAgfSk7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5heC1zdGF0ZS1yZWFkb25seScpIGdldCBpc1JlYWRvbmx5KCkge1xuICAgIHJldHVybiB0aGlzLnJlYWRvbmx5KCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItbW9udGgtY29udGFpbmVyXCI+XG4gIDwhLS0gV2Vla2RheSBIZWFkZXIgLS0+XG4gIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItbW9udGgtd2Vla2RheXNcIj5cbiAgICBAZm9yIChkYXkgb2YgZGF5c0FycmF5KCk7IHRyYWNrIGRheS5kYXRlLmdldFRpbWUoKSkge1xuICAgICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1tb250aC13ZWVrZGF5XCI+XG4gICAgICAgIHt7IGRheSB8IGZvcm1hdDogJ2RhdGUnIDogeyBmb3JtYXQ6ICdkZGRkJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuXG4gIDwhLS0gQ2FsZW5kYXIgR3JpZCAtLT5cbiAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1tb250aC1ncmlkXCIgW3N0eWxlLmdyaWRUZW1wbGF0ZVJvd3NdPVwiZ3JpZFRlbXBsYXRlUm93c1N0eWxlKClcIj5cbiAgICBAZm9yIChkYXlDZWxsIG9mIGRheUNlbGxMYXlvdXRzKCk7IHRyYWNrIGRheUNlbGwuZGF0ZS5kYXRlLmdldFRpbWUoKSkge1xuICAgICAgPGRpdlxuICAgICAgICBheERyb3Bab25lXG4gICAgICAgICN6b25lPVwiYXhEcm9wWm9uZVwiXG4gICAgICAgIChvbkVsZW1lbnREcm9wKT1cImhhbmRsZURyb3AoJGV2ZW50LCBkYXlDZWxsLmRhdGUpXCJcbiAgICAgICAgW2NsYXNzLmF4LXNjaGVkdWxlci1zbG90LWhvdmVyZWRdPVwiem9uZS5pc0hvdmVyZWQoKVwiXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVTbG90RXZlbnQoJGV2ZW50LCBkYXlDZWxsLmRhdGUpXCJcbiAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZVNsb3RFdmVudCgkZXZlbnQsIGRheUNlbGwuZGF0ZSlcIlxuICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlU2xvdEV2ZW50KCRldmVudCwgZGF5Q2VsbC5kYXRlKVwiXG4gICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLW1vbnRoLWRheS1jZWxsXCJcbiAgICAgICAgW2NsYXNzLmF4LXN0YXRlLXRvZGF5XT1cImRheUNlbGwuaXNUb2RheVwiXG4gICAgICAgIFtjbGFzcy5heC1zdGF0ZS1ob2xpZGF5XT1cImRheUNlbGwuaXNIb2xpZGF5XCJcbiAgICAgICAgW2NsYXNzLmF4LW90aGVyLW1vbnRoXT1cIiFkYXlDZWxsLmlzQ3VycmVudE1vbnRoXCJcbiAgICAgICAgW2F0dHIuZGF0YS1kYXRlXT1cImRheUNlbGwuZGF0ZSB8IGZvcm1hdDogJ2RhdGUnIDogeyBmb3JtYXQ6ICdZWVlZLU1NLUREJyB9XCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1tb250aC1kYXktaGVhZGVyXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC1zY2hlZHVsZXItbW9udGgtZGF5LW51bWJlciBheC1zY2hlZHVsZXItdHJ1bmNhdGVcIiBbYXhUb29sdGlwXT1cImRheUNlbGwuaG9saWRheVRpdGxlID8/ICcnXCI+XG4gICAgICAgICAgICB7eyBkYXlDZWxsLmRhdGUuZGF5T2ZNb250aCB9fVxuXG4gICAgICAgICAgICBAaWYgKGRheUNlbGwuaG9saWRheVRpdGxlKSB7XG4gICAgICAgICAgICAgICgge3sgZGF5Q2VsbC5ob2xpZGF5VGl0bGUgfX0gKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItbW9udGgtZGF5LWFwcG9pbnRtZW50c1wiPlxuICAgICAgICAgIDwhLS0gVmlzaWJsZSBBcHBvaW50bWVudCBTZWdtZW50cyAtLT5cbiAgICAgICAgICBAZm9yIChzZWdtZW50IG9mIGRheUNlbGwudmlzaWJsZUFwcG9pbnRtZW50czsgdHJhY2sgc2VnbWVudC5pZCArIHNlZ21lbnQub3JpZ2luYWxTdGFydERhdGUpIHtcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgYXhEcmFnXG4gICAgICAgICAgICAgIFtkcmFnQ3Vyc29yXT1cIidncmFiJ1wiXG4gICAgICAgICAgICAgIFtkcmFnRGF0YV09XCJzZWdtZW50XCJcbiAgICAgICAgICAgICAgW2RyYWdUcmFuc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2RyYWdFbGVtZW50Q2xvbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtkcmFnRGlzYWJsZWRdPVwiIWRyYWdnYWJsZSgpIHx8IHNlZ21lbnQucmVhZG9ubHkgfHwgcmVhZG9ubHkoKVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgc2VnbWVudClcIlxuICAgICAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIHNlZ21lbnQpXCJcbiAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzZWdtZW50KVwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCJcbiAgICAgICAgICAgICAgICBzZWdtZW50LnRpdGxlICtcbiAgICAgICAgICAgICAgICAoc2VnbWVudC5hbGxEYXlcbiAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgIDogJyAoJyArXG4gICAgICAgICAgICAgICAgICAgIChzZWdtZW50Lm9yaWdpbmFsU3RhcnREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYykgK1xuICAgICAgICAgICAgICAgICAgICAnIC0gJyArXG4gICAgICAgICAgICAgICAgICAgIChzZWdtZW50Lm9yaWdpbmFsRW5kRGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMpICtcbiAgICAgICAgICAgICAgICAgICAgJyknKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbY2xhc3MuYWxsLWRheS1zZWdtZW50XT1cInNlZ21lbnQuYWxsRGF5XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItbW9udGgtYXBwb2ludG1lbnQtY2hpcFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlZ21lbnQuY3NzQ2xhc3M/P2BheC1zY2hlZHVsZXItJHtzZWdtZW50LnByaW9yaXR5Pz8ncHJpbWFyeSd9LXBlcmlvcml0eWBcIlxuICAgICAgICAgICAgICBbY2xhc3MuY29udGludWF0aW9uLXRvLW5leHRdPVwic2VnbWVudC5pc0NvbnRpbnVhdGlvblRvTmV4dERheSAmJiAhc2VnbWVudC5hbGxEYXlcIlxuICAgICAgICAgICAgICBbY2xhc3MuY29udGludWF0aW9uLWZyb20tcHJldl09XCJzZWdtZW50LmlzQ29udGludWF0aW9uRnJvbVByZXZpb3VzRGF5ICYmICFzZWdtZW50LmFsbERheVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtYXBwb2ludG1lbnQtY2hpcC10aXRsZSBheC1zY2hlZHVsZXItdHJ1bmNhdGVcIj57eyBzZWdtZW50LnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICBAaWYgKCFzZWdtZW50LmFsbERheSkge1xuICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAge3sgc2VnbWVudC5vcmlnaW5hbFN0YXJ0RGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBmb3JtYXQ6ICdISDptbScsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgICAgICAgICAgICAgLVxuICAgICAgICAgICAgICAgICAge3sgc2VnbWVudC5vcmlnaW5hbEVuZERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgZm9ybWF0OiAnSEg6bW0nLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgICA8IS0tIE92ZXJmbG93IEJhZGdlIGFuZCBQb3BvdmVyIC0tPlxuICAgICAgICAgIEBpZiAoZGF5Q2VsbC5vdmVyZmxvd0NvdW50ID4gMCkge1xuICAgICAgICAgICAgPGRpdiAjbW9yZUFwcG9pbnRtZW50cyBjbGFzcz1cImF4LXNjaGVkdWxlci1tb250aC1vdmVyZmxvdy1iYWRnZVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgPCEtLSBTdG9wIHByb3BhZ2F0aW9uIHRvIHByZXZlbnQgc2xvdCBjbGljayAtLT5cbiAgICAgICAgICAgICAgK3t7ICdtb3JlLWl0ZW1zJyB8IHRyYW5zbGF0ZTogeyBwYXJhbXM6IHsgbnVtYmVyOiBkYXlDZWxsLm92ZXJmbG93Q291bnQgfSB9IHwgYXN5bmMgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGF4LXBvcG92ZXIgW3RhcmdldF09XCJtb3JlQXBwb2ludG1lbnRzXCIgcGxhY2VtZW50PVwiYm90dG9tLXN0YXJ0XCIgdHJpZ2dlcj1cImNsaWNrXCI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBbY2xhc3MuYXgtc3RhdGUtcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJheC1vdmVybGF5LXBhbmUgYXgtc2NoZWR1bGVyLXBvcG92ZXIgYXgtc2NoZWR1bGVyLW1vbnRoLXBvcG92ZXItYXBwb2ludG1lbnRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQGZvciAoc2VnbWVudCBvZiBkYXlDZWxsLmhpZGRlbkFwcG9pbnRtZW50czsgdHJhY2sgc2VnbWVudC5pZCArIHNlZ21lbnQub3JpZ2luYWxTdGFydERhdGUpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgYXhEcmFnXG4gICAgICAgICAgICAgICAgICAgIFtkcmFnQ3Vyc29yXT1cIidncmFiJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtkcmFnRGF0YV09XCJzZWdtZW50XCJcbiAgICAgICAgICAgICAgICAgICAgW2RyYWdUcmFuc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW2RyYWdFbGVtZW50Q2xvbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtkcmFnRGlzYWJsZWRdPVwiIWRyYWdnYWJsZSgpIHx8IHNlZ21lbnQucmVhZG9ubHkgfHwgcmVhZG9ubHkoKVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgc2VnbWVudCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgIChkYmxjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgc2VnbWVudCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgIChjb250ZXh0bWVudSk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgc2VnbWVudCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50LnRpdGxlICtcbiAgICAgICAgICAgICAgICAgICAgICAoc2VnbWVudC5hbGxEYXlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJyAoJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChzZWdtZW50Lm9yaWdpbmFsU3RhcnREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnIC0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChzZWdtZW50Lm9yaWdpbmFsRW5kRGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJyknKVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1wb3BvdmVyLWFwcG9pbnRtZW50XCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFsbC1kYXktc2VnbWVudF09XCJzZWdtZW50LmFsbERheVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlZ21lbnQuY3NzQ2xhc3M/P2BheC1zY2hlZHVsZXItJHtzZWdtZW50LnByaW9yaXR5Pz8ncHJpbWFyeSd9LXBlcmlvcml0eWBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF4LWFwcG9pbnRtZW50LWNoaXAtdGl0bGUgYXgtc2NoZWR1bGVyLXRydW5jYXRlXCI+e3sgc2VnbWVudC50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgQGlmICghc2VnbWVudC5hbGxEYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnQub3JpZ2luYWxTdGFydERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgZm9ybWF0OiAnSEg6bW0nLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmNcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAtXG4gICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50Lm9yaWdpbmFsRW5kRGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBmb3JtYXQ6ICdISDptbScsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luY1xuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2F4LXBvcG92ZXI+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXDragDirective, AXDropZoneDirective } from '@acorex/cdk/drag-drop';\nimport { AXDecoratorGenericComponent } from '@acorex/components/decorators';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AsyncPipe, NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, HostBinding, ViewEncapsulation, computed, inject, input, output, } from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport { AXSchedulerComponent, } from '../../scheduler.component';\nimport { AXSchedulerService } from '../../scheduler.service';\nimport * as i0 from \"@angular/core\";\nexport class AXSchedulerTimelineDayViewComponent extends NXComponent {\n constructor() {\n super(...arguments);\n this.scheduler = inject(AXSchedulerComponent);\n this.calendarService = inject(AXCalendarService);\n this.schedulerService = inject(AXSchedulerService);\n this.GAP_PX = 1;\n this.readonly = input(false);\n this.draggable = input(true);\n this.calendar = input();\n this.date = input.required();\n this.endDayHour = input.required();\n this.startDayHour = input.required();\n this.appointments = input([]);\n /**\n * Processes original appointments to get segments relevant to this specific day and its viewable hours.\n * Filters out original all-day events.\n */\n this.processedSegmentsForLayout = computed(() => {\n const viewDate = this.date();\n const allOriginalAppointments = this.appointments();\n const viewConfigStartHour = this.startDayHour();\n const viewConfigEndHour = this.endDayHour();\n if (!viewDate || !allOriginalAppointments || allOriginalAppointments.length === 0) {\n return [];\n }\n const segmentsOnThisDay = [];\n for (const appt of allOriginalAppointments) {\n if (appt.allDay) {\n continue;\n }\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, viewDate, viewConfigStartHour, viewConfigEndHour, false);\n if (segment) {\n segmentsOnThisDay.push(segment);\n }\n }\n return segmentsOnThisDay;\n });\n // Internal outputs to be caught by parent AXSchedulerComponent\n this.slotClickedInternal = output();\n this.slotDblClickedInternal = output();\n this.slotRightClickedInternal = output();\n this.appointmentClickedInternal = output();\n this.appointmentDblClickedInternal = output();\n this.appointmentRightClickedInternal = output();\n this.onAppointmentDropInternal = output();\n // --- Event Handlers ---\n this.eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n this.hoursArray = computed(() => {\n let time = this.date();\n if (!time)\n return [];\n time = time.set('hour', this.startDayHour()).startOf('hour');\n const hours = [time];\n while (time.hour < this.endDayHour() - 1) {\n time = time.add('hour', 1);\n hours.push(time);\n }\n return hours;\n });\n // --- Appointment Layout Calculation ---\n this.appointmentLayouts = computed(() => {\n const finalLayouts = [];\n const viewConfigStartHour = this.startDayHour();\n const viewConfigEndHour = this.endDayHour();\n const appointmentsToLayout = this.processedSegmentsForLayout(); // USE SEGMENTS\n if (typeof viewConfigStartHour !== 'number' ||\n typeof viewConfigEndHour !== 'number' ||\n appointmentsToLayout.length === 0) {\n return finalLayouts;\n }\n const sortedAppointments = orderBy(appointmentsToLayout, [(seg) => seg.startDate.getTime(), (seg) => seg.originalEndDate.getTime()], ['asc', 'desc']);\n const rowEndTimes = [];\n for (const segment of sortedAppointments) {\n const horizLayout = this.schedulerService.calculateTimelineLayout(segment, // Pass the segment\n viewConfigStartHour, viewConfigEndHour);\n if (!horizLayout)\n continue; // Segment is outside the viewable hour range or invalid\n // For overlap check, use the segment's start and end times\n const segmentStartTime = this.calendarService.create(segment.startDate, this.calendar());\n const segmentEndTime = this.calendarService.create(segment.endDate, this.calendar());\n let assignedRowIndex = -1;\n for (let i = 0; i < rowEndTimes.length; i++) {\n // If this segment starts AFTER OR AT the time the row becomes free\n if (segmentStartTime.compare(rowEndTimes[i], 'minute') >= 0) {\n assignedRowIndex = i;\n break;\n }\n }\n if (assignedRowIndex === -1) {\n assignedRowIndex = rowEndTimes.length;\n rowEndTimes.push(segmentEndTime); // Add segment's end time for the new row\n }\n else {\n // Update the end time for the assigned row with this segment's end time\n rowEndTimes[assignedRowIndex] = segmentEndTime;\n }\n const layoutHeight = 'var(--ax-comp-scheduler-timeline-view-blocks-height)'; // CSS variable for height\n const layoutLeft = horizLayout.left;\n const layoutWidth = `calc(${horizLayout.width} - ${this.GAP_PX}px)`; // Apply horizontal gap if items are side-by-side within a row (not typical for this stacking)\n const layoutTop = `calc(${assignedRowIndex} * (${layoutHeight} + ${this.GAP_PX}px))`; // Vertical stacking with gap\n finalLayouts.push({\n appointment: segment, // Store the segment data\n layoutLeft,\n layoutWidth,\n layoutTop,\n layoutHeight,\n });\n }\n return finalLayouts;\n });\n }\n handleAppointmentEvent(mouseEvent, appointmentItem) {\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, appointment: appointmentRef, sender: this.scheduler }, this.eventOutputMap, 'appointment');\n }\n handleSlotEvent(mouseEvent, startDate) {\n const slotData = this.schedulerService.getSlotData(startDate, 'timeline-day');\n if (slotData)\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler }, this.eventOutputMap, 'slot');\n }\n handleDrop(e, startDate) {\n const slotData = this.schedulerService.getSlotData(startDate, 'timeline-day');\n const droppedItem = e.dropped.dragData();\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n });\n }\n get isReadonly() {\n return this.readonly();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerTimelineDayViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.4\", type: AXSchedulerTimelineDayViewComponent, isStandalone: true, selector: \"ax-scheduler-timeline-day-view\", inputs: { readonly: { classPropertyName: \"readonly\", publicName: \"readonly\", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: \"draggable\", publicName: \"draggable\", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: \"calendar\", publicName: \"calendar\", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: \"date\", publicName: \"date\", isSignal: true, isRequired: true, transformFunction: null }, endDayHour: { classPropertyName: \"endDayHour\", publicName: \"endDayHour\", isSignal: true, isRequired: true, transformFunction: null }, startDayHour: { classPropertyName: \"startDayHour\", publicName: \"startDayHour\", isSignal: true, isRequired: true, transformFunction: null }, appointments: { classPropertyName: \"appointments\", publicName: \"appointments\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: \"slotClickedInternal\", slotDblClickedInternal: \"slotDblClickedInternal\", slotRightClickedInternal: \"slotRightClickedInternal\", appointmentClickedInternal: \"appointmentClickedInternal\", appointmentDblClickedInternal: \"appointmentDblClickedInternal\", appointmentRightClickedInternal: \"appointmentRightClickedInternal\", onAppointmentDropInternal: \"onAppointmentDropInternal\" }, host: { properties: { \"class.ax-state-readonly\": \"this.isReadonly\" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineDayViewComponent }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-scheduler-timeline-header\\\">\\n @for (hour of hoursArray(); track hour.date.getTime()) {\\n <div class=\\\"ax-scheduler-timeline-header-hours\\\">\\n <span>{{ hour | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}</span>\\n </div>\\n }\\n</div>\\n\\n<div class=\\\"ax-scheduler-timeline-content\\\">\\n <div class=\\\"ax-scheduler-timeline-appointment-container\\\">\\n @for (layout of appointmentLayouts(); track layout.appointment.id) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || layout.appointment.readonly || readonly()\\\"\\n [dragData]=\\\"layout.appointment\\\"\\n (click)=\\\"handleAppointmentEvent($event, layout.appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, layout.appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, layout.appointment)\\\"\\n [title]=\\\"layout.appointment.title\\\"\\n [style.width]=\\\"layout.layoutWidth\\\"\\n [style.height]=\\\"layout.layoutHeight\\\"\\n class=\\\"ax-scheduler-timeline-appointment\\\"\\n [style.insetBlockStart]=\\\"layout.layoutTop\\\"\\n [style.insetInlineStart]=\\\"layout.layoutLeft\\\"\\n [ngClass]=\\\"layout.appointment.cssClass??`ax-scheduler-${layout.appointment.priority??'primary'}-periority`\\\"\\n >\\n <ax-title class=\\\"ax-scheduler-truncate\\\">{{ layout.appointment.title }}</ax-title>\\n <ax-subtitle>\\n {{\\n layout.appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{ layout.appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n </div>\\n <div class=\\\"ax-scheduler-timeline-slot-row\\\" aria-hidden=\\\"true\\\">\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleDrop($event, time)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n class=\\\"ax-scheduler-timeline-slot-cell\\\"\\n (click)=\\\"handleSlotEvent($event, time)\\\"\\n (dblclick)=\\\"handleSlotEvent($event, time)\\\"\\n (contextmenu)=\\\"handleSlotEvent($event, time)\\\"\\n ></div>\\n }\\n </div>\\n</div>\\n\", styles: [\"ax-scheduler-timeline-day-view{height:100%;position:relative;display:inline-flex;flex-direction:column;background-color:inherit}ax-scheduler-timeline-day-view .ax-scheduler-timeline-header{top:0;z-index:2;width:100%;display:flex;position:sticky;background-color:var(--ax-comp-scheduler-all-day-bg, inherit);border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view .ax-scheduler-timeline-header .ax-scheduler-timeline-header-hours{position:relative;padding:.25rem .5rem;width:var(--ax-comp-scheduler-timeline-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view .ax-scheduler-timeline-header .ax-scheduler-timeline-header-hours span{position:sticky;inset-inline-start:.5rem}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content{height:100%;position:relative}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container{top:0;width:100%;height:100%;position:absolute}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;display:flex;overflow:hidden;position:absolute;inset-inline-start:0;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-slot-row{height:100%;display:flex}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-slot-row .ax-scheduler-timeline-slot-cell{width:var(--ax-comp-scheduler-timeline-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view:not(.ax-state-readonly) .ax-scheduler-timeline-appointment{z-index:1;cursor:pointer}ax-scheduler-timeline-day-view:not(.ax-state-readonly) .ax-scheduler-timeline-slot-cell{z-index:0;cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-timeline-day-view:not(.ax-state-readonly) .ax-scheduler-timeline-slot-cell:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}\\n\"], dependencies: [{ kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"component\", type: AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"directive\", type: AXDragDirective, selector: \"[axDrag]\", inputs: [\"dragData\", \"dragDisabled\", \"dragTransition\", \"dragElementClone\", \"dropZoneGroup\", \"dragStartDelay\", \"dragResetOnDblClick\", \"dragLockAxis\", \"dragClonedTemplate\", \"dragCursor\", \"dragBoundary\", \"dragTransitionDuration\"], outputs: [\"dragPositionChanged\"] }, { kind: \"directive\", type: AXDropZoneDirective, selector: \"[axDropZone]\", inputs: [\"dropZoneGroup\"], outputs: [\"onElementDrop\", \"onElementHover\"], exportAs: [\"axDropZone\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerTimelineDayViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-scheduler-timeline-day-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [NgClass, AXDecoratorGenericComponent, AXFormatPipe, AsyncPipe, AXDragDirective, AXDropZoneDirective], providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineDayViewComponent }], template: \"<div class=\\\"ax-scheduler-timeline-header\\\">\\n @for (hour of hoursArray(); track hour.date.getTime()) {\\n <div class=\\\"ax-scheduler-timeline-header-hours\\\">\\n <span>{{ hour | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}</span>\\n </div>\\n }\\n</div>\\n\\n<div class=\\\"ax-scheduler-timeline-content\\\">\\n <div class=\\\"ax-scheduler-timeline-appointment-container\\\">\\n @for (layout of appointmentLayouts(); track layout.appointment.id) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || layout.appointment.readonly || readonly()\\\"\\n [dragData]=\\\"layout.appointment\\\"\\n (click)=\\\"handleAppointmentEvent($event, layout.appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, layout.appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, layout.appointment)\\\"\\n [title]=\\\"layout.appointment.title\\\"\\n [style.width]=\\\"layout.layoutWidth\\\"\\n [style.height]=\\\"layout.layoutHeight\\\"\\n class=\\\"ax-scheduler-timeline-appointment\\\"\\n [style.insetBlockStart]=\\\"layout.layoutTop\\\"\\n [style.insetInlineStart]=\\\"layout.layoutLeft\\\"\\n [ngClass]=\\\"layout.appointment.cssClass??`ax-scheduler-${layout.appointment.priority??'primary'}-periority`\\\"\\n >\\n <ax-title class=\\\"ax-scheduler-truncate\\\">{{ layout.appointment.title }}</ax-title>\\n <ax-subtitle>\\n {{\\n layout.appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{ layout.appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n </div>\\n <div class=\\\"ax-scheduler-timeline-slot-row\\\" aria-hidden=\\\"true\\\">\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleDrop($event, time)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n class=\\\"ax-scheduler-timeline-slot-cell\\\"\\n (click)=\\\"handleSlotEvent($event, time)\\\"\\n (dblclick)=\\\"handleSlotEvent($event, time)\\\"\\n (contextmenu)=\\\"handleSlotEvent($event, time)\\\"\\n ></div>\\n }\\n </div>\\n</div>\\n\", styles: [\"ax-scheduler-timeline-day-view{height:100%;position:relative;display:inline-flex;flex-direction:column;background-color:inherit}ax-scheduler-timeline-day-view .ax-scheduler-timeline-header{top:0;z-index:2;width:100%;display:flex;position:sticky;background-color:var(--ax-comp-scheduler-all-day-bg, inherit);border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view .ax-scheduler-timeline-header .ax-scheduler-timeline-header-hours{position:relative;padding:.25rem .5rem;width:var(--ax-comp-scheduler-timeline-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view .ax-scheduler-timeline-header .ax-scheduler-timeline-header-hours span{position:sticky;inset-inline-start:.5rem}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content{height:100%;position:relative}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container{top:0;width:100%;height:100%;position:absolute}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;display:flex;overflow:hidden;position:absolute;inset-inline-start:0;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-slot-row{height:100%;display:flex}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-slot-row .ax-scheduler-timeline-slot-cell{width:var(--ax-comp-scheduler-timeline-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view:not(.ax-state-readonly) .ax-scheduler-timeline-appointment{z-index:1;cursor:pointer}ax-scheduler-timeline-day-view:not(.ax-state-readonly) .ax-scheduler-timeline-slot-cell{z-index:0;cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-timeline-day-view:not(.ax-state-readonly) .ax-scheduler-timeline-slot-cell:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}\\n\"] }]\n }], propDecorators: { isReadonly: [{\n type: HostBinding,\n args: ['class.ax-state-readonly']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLXRpbWVsaW5lLWRheS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NyYy9saWIvdmlld3MvdGltZWxpbmUtZGF5L3NjaGVkdWxlci10aW1lbGluZS1kYXktdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3ZpZXdzL3RpbWVsaW5lLWRheS9zY2hlZHVsZXItdGltZWxpbmUtZGF5LXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUF1QixNQUFNLHVCQUF1QixDQUFDO0FBQ2xHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxpQkFBaUIsRUFBYyxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFNcEMsT0FBTyxFQUVMLG9CQUFvQixHQUdyQixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5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RUFBRSxjQUFjO1NBQzVCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFvRkQsSUFBNEMsVUFBVTtRQUNwRCxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN6QixDQUFDOzhHQW5NVSxtQ0FBbUM7a0dBQW5DLG1DQUFtQyxpOUNBRm5DLENBQUMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxtQ0FBbUMsRUFBRSxDQUFDLGlEQ3JDekYsNDJFQXVEQSx3MkVEbkJZLE9BQU8sb0ZBQUUsMkJBQTJCLG9MQUFFLFlBQVksMENBQUUsU0FBUyw4Q0FBRSxlQUFlLDJUQUFFLG1CQUFtQjs7MkZBR2xHLG1DQUFtQztrQkFUL0MsU0FBUzsrQkFDRSxnQ0FBZ0MsbUJBR3pCLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksV0FDNUIsQ0FBQyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLENBQUMsYUFDbkcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxxQ0FBcUMsRUFBRSxDQUFDOzhCQW1NM0MsVUFBVTtzQkFBckQsV0FBVzt1QkFBQyx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWENvbXBvbmVudCwgTlhDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2Nkay9jb21tb24nO1xuaW1wb3J0IHsgQVhEcmFnRGlyZWN0aXZlLCBBWERyb3Bab25lRGlyZWN0aXZlLCBBWERyb3Bab25lRHJvcEV2ZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IEFYRGVjb3JhdG9yR2VuZXJpY0NvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFYQ2FsZW5kYXJTZXJ2aWNlLCBBWERhdGVUaW1lIH0gZnJvbSAnQGFjb3JleC9jb3JlL2RhdGUtdGltZSc7XG5pbXBvcnQgeyBBWEZvcm1hdFBpcGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvZm9ybWF0JztcbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBIb3N0QmluZGluZyxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGNvbXB1dGVkLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBvdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgb3JkZXJCeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge1xuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50LFxuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50TGF5b3V0LFxuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCxcbn0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLmNsYXNzJztcbmltcG9ydCB7XG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50LFxuICBBWFNjaGVkdWxlckNvbXBvbmVudCxcbiAgQVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50LFxuICBBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50LFxufSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEFYU2NoZWR1bGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NjaGVkdWxlci5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtc2NoZWR1bGVyLXRpbWVsaW5lLWRheS12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NjaGVkdWxlci10aW1lbGluZS1kYXktdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9zY2hlZHVsZXItdGltZWxpbmUtZGF5LXZpZXcuY29tcG9uZW50LnNjc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW05nQ2xhc3MsIEFYRGVjb3JhdG9yR2VuZXJpY0NvbXBvbmVudCwgQVhGb3JtYXRQaXBlLCBBc3luY1BpcGUsIEFYRHJhZ0RpcmVjdGl2ZSwgQVhEcm9wWm9uZURpcmVjdGl2ZV0sXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogQVhDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBBWFNjaGVkdWxlclRpbWVsaW5lRGF5Vmlld0NvbXBvbmVudCB9XSxcbn0pXG5leHBvcnQgY2xhc3MgQVhTY2hlZHVsZXJUaW1lbGluZURheVZpZXdDb21wb25lbnQgZXh0ZW5kcyBOWENvbXBvbmVudCB7XG4gIHByaXZhdGUgc2NoZWR1bGVyID0gaW5qZWN0KEFYU2NoZWR1bGVyQ29tcG9uZW50KTtcbiAgcHJpdmF0ZSBjYWxlbmRhclNlcnZpY2UgPSBpbmplY3QoQVhDYWxlbmRhclNlcnZpY2UpO1xuICBwcml2YXRlIHNjaGVkdWxlclNlcnZpY2UgPSBpbmplY3QoQVhTY2hlZHVsZXJTZXJ2aWNlKTtcblxuICByZWFkb25seSBHQVBfUFggPSAxO1xuXG4gIHJlYWRvbmx5ID0gaW5wdXQoZmFsc2UpO1xuICBkcmFnZ2FibGUgPSBpbnB1dCh0cnVlKTtcbiAgY2FsZW5kYXIgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIGRhdGUgPSBpbnB1dC5yZXF1aXJlZDxBWERhdGVUaW1lPigpO1xuICBlbmREYXlIb3VyID0gaW5wdXQucmVxdWlyZWQ8bnVtYmVyPigpO1xuICBzdGFydERheUhvdXIgPSBpbnB1dC5yZXF1aXJlZDxudW1iZXI+KCk7XG4gIGFwcG9pbnRtZW50cyA9IGlucHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRbXT4oW10pO1xuXG4gIC8qKlxuICAgKiBQcm9jZXNzZXMgb3JpZ2luYWwgYXBwb2ludG1lbnRzIHRvIGdldCBzZWdtZW50cyByZWxldmFudCB0byB0aGlzIHNwZWNpZmljIGRheSBhbmQgaXRzIHZpZXdhYmxlIGhvdXJzLlxuICAgKiBGaWx0ZXJzIG91dCBvcmlnaW5hbCBhbGwtZGF5IGV2ZW50cy5cbiAgICovXG4gIHByb2Nlc3NlZFNlZ21lbnRzRm9yTGF5b3V0ID0gY29tcHV0ZWQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXT4oKCkgPT4ge1xuICAgIGNvbnN0IHZpZXdEYXRlID0gdGhpcy5kYXRlKCk7XG4gICAgY29uc3QgYWxsT3JpZ2luYWxBcHBvaW50bWVudHMgPSB0aGlzLmFwcG9pbnRtZW50cygpO1xuICAgIGNvbnN0IHZpZXdDb25maWdTdGFydEhvdXIgPSB0aGlzLnN0YXJ0RGF5SG91cigpO1xuICAgIGNvbnN0IHZpZXdDb25maWdFbmRIb3VyID0gdGhpcy5lbmREYXlIb3VyKCk7XG5cbiAgICBpZiAoIXZpZXdEYXRlIHx8ICFhbGxPcmlnaW5hbEFwcG9pbnRtZW50cyB8fCBhbGxPcmlnaW5hbEFwcG9pbnRtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBzZWdtZW50c09uVGhpc0RheTogQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgYXBwdCBvZiBhbGxPcmlnaW5hbEFwcG9pbnRtZW50cykge1xuICAgICAgaWYgKGFwcHQuYWxsRGF5KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzZWdtZW50ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldENsb25lZEFwcG9pbnRtZW50U2VnbWVudE9uRGF5KFxuICAgICAgICBhcHB0LFxuICAgICAgICB2aWV3RGF0ZSxcbiAgICAgICAgdmlld0NvbmZpZ1N0YXJ0SG91cixcbiAgICAgICAgdmlld0NvbmZpZ0VuZEhvdXIsXG4gICAgICAgIGZhbHNlLFxuICAgICAgKTtcblxuICAgICAgaWYgKHNlZ21lbnQpIHtcbiAgICAgICAgc2VnbWVudHNPblRoaXNEYXkucHVzaChzZWdtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNlZ21lbnRzT25UaGlzRGF5O1xuICB9KTtcblxuICAvLyBJbnRlcm5hbCBvdXRwdXRzIHRvIGJlIGNhdWdodCBieSBwYXJlbnQgQVhTY2hlZHVsZXJDb21wb25lbnRcbiAgc2xvdENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBzbG90RGJsQ2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIHNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBhcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgYXBwb2ludG1lbnREYmxDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIGFwcG9pbnRtZW50UmlnaHRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIG9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50PigpO1xuXG4gIC8vIC0tLSBFdmVudCBIYW5kbGVycyAtLS1cbiAgcHJpdmF0ZSByZWFkb25seSBldmVudE91dHB1dE1hcCA9IHtcbiAgICBzbG90OiB7XG4gICAgICBjbGljazogdGhpcy5zbG90Q2xpY2tlZEludGVybmFsLFxuICAgICAgZGJsY2xpY2s6IHRoaXMuc2xvdERibENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGNvbnRleHRtZW51OiB0aGlzLnNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCxcbiAgICB9LFxuICAgIGFwcG9pbnRtZW50OiB7XG4gICAgICBjbGljazogdGhpcy5hcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGRibGNsaWNrOiB0aGlzLmFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsLFxuICAgICAgY29udGV4dG1lbnU6IHRoaXMuYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCxcbiAgICB9LFxuICB9O1xuICBoYW5kbGVBcHBvaW50bWVudEV2ZW50KG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQsIGFwcG9pbnRtZW50SXRlbTogQVhTY2hlZHVsZXJBcHBvaW50bWVudCkge1xuICAgIGNvbnN0IG9yaWdpbmFsQXBwb2ludG1lbnQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0T3JpZ2luYWxBcHBvaW50bWVudChhcHBvaW50bWVudEl0ZW0pO1xuICAgIGNvbnN0IGFwcG9pbnRtZW50UmVmID0ge1xuICAgICAgLi4ub3JpZ2luYWxBcHBvaW50bWVudCxcbiAgICAgIGVuZERhdGU6IG9yaWdpbmFsQXBwb2ludG1lbnQuZW5kRGF0ZSxcbiAgICAgIHN0YXJ0RGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5zdGFydERhdGUsXG4gICAgfTtcbiAgICB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaGFuZGxlRXZlbnQoXG4gICAgICB7IG5hdGl2ZUV2ZW50OiBtb3VzZUV2ZW50LCBhcHBvaW50bWVudDogYXBwb2ludG1lbnRSZWYsIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIgfSxcbiAgICAgIHRoaXMuZXZlbnRPdXRwdXRNYXAsXG4gICAgICAnYXBwb2ludG1lbnQnLFxuICAgICk7XG4gIH1cbiAgaGFuZGxlU2xvdEV2ZW50KG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQsIHN0YXJ0RGF0ZTogQVhEYXRlVGltZSkge1xuICAgIGNvbnN0IHNsb3REYXRhID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldFNsb3REYXRhKHN0YXJ0RGF0ZSwgJ3RpbWVsaW5lLWRheScpO1xuICAgIGlmIChzbG90RGF0YSlcbiAgICAgIHRoaXMuc2NoZWR1bGVyU2VydmljZS5oYW5kbGVFdmVudChcbiAgICAgICAgeyBuYXRpdmVFdmVudDogbW91c2VFdmVudCwgc2xvdDogc2xvdERhdGEsIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIgfSxcbiAgICAgICAgdGhpcy5ldmVudE91dHB1dE1hcCxcbiAgICAgICAgJ3Nsb3QnLFxuICAgICAgKTtcbiAgfVxuICBoYW5kbGVEcm9wKGU6IEFYRHJvcFpvbmVEcm9wRXZlbnQsIHN0YXJ0RGF0ZTogQVhEYXRlVGltZSkge1xuICAgIGNvbnN0IHNsb3REYXRhID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldFNsb3REYXRhKHN0YXJ0RGF0ZSwgJ3RpbWVsaW5lLWRheScpO1xuICAgIGNvbnN0IGRyb3BwZWRJdGVtID0gZS5kcm9wcGVkLmRyYWdEYXRhKCkgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudDtcbiAgICBjb25zdCBvcmlnaW5hbEFwcG9pbnRtZW50ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldE9yaWdpbmFsQXBwb2ludG1lbnQoZHJvcHBlZEl0ZW0pO1xuICAgIGNvbnN0IGFwcG9pbnRtZW50UmVmID0ge1xuICAgICAgLi4ub3JpZ2luYWxBcHBvaW50bWVudCxcbiAgICAgIGVuZERhdGU6IG9yaWdpbmFsQXBwb2ludG1lbnQuZW5kRGF0ZSxcbiAgICAgIHN0YXJ0RGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5zdGFydERhdGUsXG4gICAgfTtcbiAgICB0aGlzLm9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwuZW1pdCh7XG4gICAgICBkcm9wRXZlbnQ6IGUsXG4gICAgICBzbG90OiBzbG90RGF0YSxcbiAgICAgIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIsXG4gICAgICBhcHBvaW50bWVudDogYXBwb2ludG1lbnRSZWYsXG4gICAgfSk7XG4gIH1cblxuICBob3Vyc0FycmF5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGxldCB0aW1lID0gdGhpcy5kYXRlKCk7XG4gICAgaWYgKCF0aW1lKSByZXR1cm4gW107XG4gICAgdGltZSA9IHRpbWUuc2V0KCdob3VyJywgdGhpcy5zdGFydERheUhvdXIoKSkuc3RhcnRPZignaG91cicpO1xuICAgIGNvbnN0IGhvdXJzID0gW3RpbWVdO1xuICAgIHdoaWxlICh0aW1lLmhvdXIgPCB0aGlzLmVuZERheUhvdXIoKSAtIDEpIHtcbiAgICAgIHRpbWUgPSB0aW1lLmFkZCgnaG91cicsIDEpO1xuICAgICAgaG91cnMucHVzaCh0aW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIGhvdXJzO1xuICB9KTtcblxuICAvLyAtLS0gQXBwb2ludG1lbnQgTGF5b3V0IENhbGN1bGF0aW9uIC0tLVxuICBhcHBvaW50bWVudExheW91dHMgPSBjb21wdXRlZCgoKTogQVhTY2hlZHVsZXJBcHBvaW50bWVudExheW91dFtdID0+IHtcbiAgICBjb25zdCBmaW5hbExheW91dHM6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRMYXlvdXRbXSA9IFtdO1xuICAgIGNvbnN0IHZpZXdDb25maWdTdGFydEhvdXIgPSB0aGlzLnN0YXJ0RGF5SG91cigpO1xuICAgIGNvbnN0IHZpZXdDb25maWdFbmRIb3VyID0gdGhpcy5lbmREYXlIb3VyKCk7XG4gICAgY29uc3QgYXBwb2ludG1lbnRzVG9MYXlvdXQgPSB0aGlzLnByb2Nlc3NlZFNlZ21lbnRzRm9yTGF5b3V0KCk7IC8vIFVTRSBTRUdNRU5UU1xuXG4gICAgaWYgKFxuICAgICAgdHlwZW9mIHZpZXdDb25maWdTdGFydEhvdXIgIT09ICdudW1iZXInIHx8XG4gICAgICB0eXBlb2Ygdmlld0NvbmZpZ0VuZEhvdXIgIT09ICdudW1iZXInIHx8XG4gICAgICBhcHBvaW50bWVudHNUb0xheW91dC5sZW5ndGggPT09IDBcbiAgICApIHtcbiAgICAgIHJldHVybiBmaW5hbExheW91dHM7XG4gICAgfVxuXG4gICAgY29uc3Qgc29ydGVkQXBwb2ludG1lbnRzID0gb3JkZXJCeShcbiAgICAgIGFwcG9pbnRtZW50c1RvTGF5b3V0LFxuICAgICAgWyhzZWcpID0+IHNlZy5zdGFydERhdGUuZ2V0VGltZSgpLCAoc2VnKSA9PiBzZWcub3JpZ2luYWxFbmREYXRlLmdldFRpbWUoKV0sXG4gICAgICBbJ2FzYycsICdkZXNjJ10sXG4gICAgKTtcblxuICAgIGNvbnN0IHJvd0VuZFRpbWVzOiBBWERhdGVUaW1lW10gPSBbXTtcblxuICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBzb3J0ZWRBcHBvaW50bWVudHMpIHtcbiAgICAgIGNvbnN0IGhvcml6TGF5b3V0ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmNhbGN1bGF0ZVRpbWVsaW5lTGF5b3V0KFxuICAgICAgICBzZWdtZW50LCAvLyBQYXNzIHRoZSBzZWdtZW50XG4gICAgICAgIHZpZXdDb25maWdTdGFydEhvdXIsXG4gICAgICAgIHZpZXdDb25maWdFbmRIb3VyLFxuICAgICAgKTtcblxuICAgICAgaWYgKCFob3JpekxheW91dCkgY29udGludWU7IC8vIFNlZ21lbnQgaXMgb3V0c2lkZSB0aGUgdmlld2FibGUgaG91ciByYW5nZSBvciBpbnZhbGlkXG5cbiAgICAgIC8vIEZvciBvdmVybGFwIGNoZWNrLCB1c2UgdGhlIHNlZ21lbnQncyBzdGFydCBhbmQgZW5kIHRpbWVzXG4gICAgICBjb25zdCBzZWdtZW50U3RhcnRUaW1lID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKHNlZ21lbnQuc3RhcnREYXRlLCB0aGlzLmNhbGVuZGFyKCkpO1xuICAgICAgY29uc3Qgc2VnbWVudEVuZFRpbWUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoc2VnbWVudC5lbmREYXRlLCB0aGlzLmNhbGVuZGFyKCkpO1xuXG4gICAgICBsZXQgYXNzaWduZWRSb3dJbmRleCA9IC0xO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dFbmRUaW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyBJZiB0aGlzIHNlZ21lbnQgc3RhcnRzIEFGVEVSIE9SIEFUIHRoZSB0aW1lIHRoZSByb3cgYmVjb21lcyBmcmVlXG4gICAgICAgIGlmIChzZWdtZW50U3RhcnRUaW1lLmNvbXBhcmUocm93RW5kVGltZXNbaV0sICdtaW51dGUnKSA+PSAwKSB7XG4gICAgICAgICAgYXNzaWduZWRSb3dJbmRleCA9IGk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGFzc2lnbmVkUm93SW5kZXggPT09IC0xKSB7XG4gICAgICAgIGFzc2lnbmVkUm93SW5kZXggPSByb3dFbmRUaW1lcy5sZW5ndGg7XG4gICAgICAgIHJvd0VuZFRpbWVzLnB1c2goc2VnbWVudEVuZFRpbWUpOyAvLyBBZGQgc2VnbWVudCdzIGVuZCB0aW1lIGZvciB0aGUgbmV3IHJvd1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBlbmQgdGltZSBmb3IgdGhlIGFzc2lnbmVkIHJvdyB3aXRoIHRoaXMgc2VnbWVudCdzIGVuZCB0aW1lXG4gICAgICAgIHJvd0VuZFRpbWVzW2Fzc2lnbmVkUm93SW5kZXhdID0gc2VnbWVudEVuZFRpbWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxheW91dEhlaWdodCA9ICd2YXIoLS1heC1jb21wLXNjaGVkdWxlci10aW1lbGluZS12aWV3LWJsb2Nrcy1oZWlnaHQpJzsgLy8gQ1NTIHZhcmlhYmxlIGZvciBoZWlnaHRcbiAgICAgIGNvbnN0IGxheW91dExlZnQgPSBob3JpekxheW91dC5sZWZ0O1xuICAgICAgY29uc3QgbGF5b3V0V2lkdGggPSBgY2FsYygke2hvcml6TGF5b3V0LndpZHRofSAtICR7dGhpcy5HQVBfUFh9cHgpYDsgLy8gQXBwbHkgaG9yaXpvbnRhbCBnYXAgaWYgaXRlbXMgYXJlIHNpZGUtYnktc2lkZSB3aXRoaW4gYSByb3cgKG5vdCB0eXBpY2FsIGZvciB0aGlzIHN0YWNraW5nKVxuICAgICAgY29uc3QgbGF5b3V0VG9wID0gYGNhbGMoJHthc3NpZ25lZFJvd0luZGV4fSAqICgke2xheW91dEhlaWdodH0gKyAke3RoaXMuR0FQX1BYfXB4KSlgOyAvLyBWZXJ0aWNhbCBzdGFja2luZyB3aXRoIGdhcFxuXG4gICAgICBmaW5hbExheW91dHMucHVzaCh7XG4gICAgICAgIGFwcG9pbnRtZW50OiBzZWdtZW50LCAvLyBTdG9yZSB0aGUgc2VnbWVudCBkYXRhXG4gICAgICAgIGxheW91dExlZnQsXG4gICAgICAgIGxheW91dFdpZHRoLFxuICAgICAgICBsYXlvdXRUb3AsXG4gICAgICAgIGxheW91dEhlaWdodCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBmaW5hbExheW91dHM7XG4gIH0pO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYXgtc3RhdGUtcmVhZG9ubHknKSBnZXQgaXNSZWFkb25seSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkb25seSgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRpbWVsaW5lLWhlYWRlclwiPlxuICBAZm9yIChob3VyIG9mIGhvdXJzQXJyYXkoKTsgdHJhY2sgaG91ci5kYXRlLmdldFRpbWUoKSkge1xuICAgIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItdGltZWxpbmUtaGVhZGVyLWhvdXJzXCI+XG4gICAgICA8c3Bhbj57eyBob3VyIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19PC9zcGFuPlxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci10aW1lbGluZS1jb250ZW50XCI+XG4gIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItdGltZWxpbmUtYXBwb2ludG1lbnQtY29udGFpbmVyXCI+XG4gICAgQGZvciAobGF5b3V0IG9mIGFwcG9pbnRtZW50TGF5b3V0cygpOyB0cmFjayBsYXlvdXQuYXBwb2ludG1lbnQuaWQpIHtcbiAgICAgIDxkaXZcbiAgICAgICAgYXhEcmFnXG4gICAgICAgIFtkcmFnQ3Vyc29yXT1cIidncmFiJ1wiXG4gICAgICAgIFtkcmFnVHJhbnNpdGlvbl09XCJmYWxzZVwiXG4gICAgICAgIFtkcmFnRWxlbWVudENsb25lXT1cInRydWVcIlxuICAgICAgICBbZHJhZ0Rpc2FibGVkXT1cIiFkcmFnZ2FibGUoKSB8fCBsYXlvdXQuYXBwb2ludG1lbnQucmVhZG9ubHkgfHwgcmVhZG9ubHkoKVwiXG4gICAgICAgIFtkcmFnRGF0YV09XCJsYXlvdXQuYXBwb2ludG1lbnRcIlxuICAgICAgICAoY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGxheW91dC5hcHBvaW50bWVudClcIlxuICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGxheW91dC5hcHBvaW50bWVudClcIlxuICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGxheW91dC5hcHBvaW50bWVudClcIlxuICAgICAgICBbdGl0bGVdPVwibGF5b3V0LmFwcG9pbnRtZW50LnRpdGxlXCJcbiAgICAgICAgW3N0eWxlLndpZHRoXT1cImxheW91dC5sYXlvdXRXaWR0aFwiXG4gICAgICAgIFtzdHlsZS5oZWlnaHRdPVwibGF5b3V0LmxheW91dEhlaWdodFwiXG4gICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRpbWVsaW5lLWFwcG9pbnRtZW50XCJcbiAgICAgICAgW3N0eWxlLmluc2V0QmxvY2tTdGFydF09XCJsYXlvdXQubGF5b3V0VG9wXCJcbiAgICAgICAgW3N0eWxlLmluc2V0SW5saW5lU3RhcnRdPVwibGF5b3V0LmxheW91dExlZnRcIlxuICAgICAgICBbbmdDbGFzc109XCJsYXlvdXQuYXBwb2ludG1lbnQuY3NzQ2xhc3M/P2BheC1zY2hlZHVsZXItJHtsYXlvdXQuYXBwb2ludG1lbnQucHJpb3JpdHk/PydwcmltYXJ5J30tcGVyaW9yaXR5YFwiXG4gICAgICA+XG4gICAgICAgIDxheC10aXRsZSBjbGFzcz1cImF4LXNjaGVkdWxlci10cnVuY2F0ZVwiPnt7IGxheW91dC5hcHBvaW50bWVudC50aXRsZSB9fTwvYXgtdGl0bGU+XG4gICAgICAgIDxheC1zdWJ0aXRsZT5cbiAgICAgICAgICB7e1xuICAgICAgICAgICAgbGF5b3V0LmFwcG9pbnRtZW50Lm9yaWdpbmFsU3RhcnREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jXG4gICAgICAgICAgfX1cbiAgICAgICAgICAtXG4gICAgICAgICAge3sgbGF5b3V0LmFwcG9pbnRtZW50Lm9yaWdpbmFsRW5kRGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBmb3JtYXQ6ICdISDptbScsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgICA8L2F4LXN1YnRpdGxlPlxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci10aW1lbGluZS1zbG90LXJvd1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIEBmb3IgKHRpbWUgb2YgaG91cnNBcnJheSgpOyB0cmFjayB0aW1lLmRhdGUuZ2V0VGltZSgpKSB7XG4gICAgICA8ZGl2XG4gICAgICAgIGF4RHJvcFpvbmVcbiAgICAgICAgI3pvbmU9XCJheERyb3Bab25lXCJcbiAgICAgICAgKG9uRWxlbWVudERyb3ApPVwiaGFuZGxlRHJvcCgkZXZlbnQsIHRpbWUpXCJcbiAgICAgICAgW2NsYXNzLmF4LXNjaGVkdWxlci1zbG90LWhvdmVyZWRdPVwiem9uZS5pc0hvdmVyZWQoKVwiXG4gICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRpbWVsaW5lLXNsb3QtY2VsbFwiXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVTbG90RXZlbnQoJGV2ZW50LCB0aW1lKVwiXG4gICAgICAgIChkYmxjbGljayk9XCJoYW5kbGVTbG90RXZlbnQoJGV2ZW50LCB0aW1lKVwiXG4gICAgICAgIChjb250ZXh0bWVudSk9XCJoYW5kbGVTbG90RXZlbnQoJGV2ZW50LCB0aW1lKVwiXG4gICAgICA+PC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbjwvZGl2PlxuIl19","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXDragDirective, AXDropZoneDirective } from '@acorex/cdk/drag-drop';\nimport { AXDecoratorGenericComponent } from '@acorex/components/decorators';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe, NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, HostBinding, ViewEncapsulation, computed, inject, input, output, } from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport { AXSchedulerComponent, } from '../../scheduler.component';\nimport { AXSchedulerService } from '../../scheduler.service';\nimport * as i0 from \"@angular/core\";\nexport class AXSchedulerTimelineMonthViewComponent extends NXComponent {\n constructor() {\n super(...arguments);\n this.scheduler = inject(AXSchedulerComponent);\n this.calendarService = inject(AXCalendarService);\n this.schedulerService = inject(AXSchedulerService);\n this.MAX_VISIBLE_APPOINTMENTS_PER_DAY = 3;\n this.readonly = input(false);\n this.draggable = input(true);\n this.calendar = input();\n this.date = input.required();\n this.appointments = input([]);\n this.processedDayData = computed(() => {\n const allOriginalAppointments = this.appointments();\n const monthStartDate = this.date().startOf('month');\n const daysInMonth = monthStartDate.endOf('month').dayOfMonth;\n if (!allOriginalAppointments) {\n return Array.from({ length: daysInMonth }, (_, i) => {\n const dayDate = monthStartDate.add('day', i);\n return {\n date: dayDate,\n visibleAppointments: [],\n hiddenAppointments: [],\n moreCount: 0,\n };\n });\n }\n const result = [];\n for (let i = 0; i < daysInMonth; i++) {\n const currentDayDate = monthStartDate.add('day', i).startOf('day'); // Ensure it's start of day\n const segmentsForThisDay = [];\n for (const appt of allOriginalAppointments) {\n // For Timeline Month View, each day is a row. We want segments for the full 24h of that day.\n // The view's startHour/endHour are NOT used to clip segments here,\n // as it's not a horizontal time scale *within* the day row.\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, currentDayDate, 0, 24, true);\n if (segment) {\n segmentsForThisDay.push(segment);\n }\n }\n // Sort segments: all-day first, then by segment start time (which is clipped to the day)\n const sortedSegments = orderBy(segmentsForThisDay, [\n (s) => (s.allDay ? 0 : 1), // Segments marked as allDay first\n (s) => s.startDate.getTime(), // Segment's start time on this day\n (s) => s.endDate.getTime() - s.startDate.getTime(), // Segment's duration on this day\n (s) => s.title?.toLowerCase() ?? '',\n ], ['asc', 'asc', 'desc', 'asc']);\n const visibleAppointments = sortedSegments.slice(0, this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);\n const hiddenAppointments = sortedSegments.slice(this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);\n result.push({\n date: currentDayDate,\n visibleAppointments: visibleAppointments,\n hiddenAppointments: hiddenAppointments,\n moreCount: hiddenAppointments.length,\n holiday: this.isHoliday(currentDayDate),\n });\n }\n return result;\n });\n // Internal outputs to be caught by parent AXSchedulerComponent\n this.slotClickedInternal = output();\n this.slotDblClickedInternal = output();\n this.slotRightClickedInternal = output();\n this.appointmentClickedInternal = output();\n this.appointmentDblClickedInternal = output();\n this.appointmentRightClickedInternal = output();\n this.onAppointmentDropInternal = output();\n // --- Event Handlers ---\n this.eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n }\n handleAppointmentEvent(mouseEvent, appointmentItem) {\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, appointment: appointmentRef, sender: this.scheduler }, this.eventOutputMap, 'appointment');\n }\n handleSlotEvent(mouseEvent, date) {\n // date is the specific day\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'timeline-month');\n if (slotData)\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler }, this.eventOutputMap, 'slot');\n }\n handleDrop(e, date) {\n // date is the specific day\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'timeline-month');\n const droppedItem = e.dropped.dragData();\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n });\n }\n isToday(date) {\n const today = this.calendarService.create(new Date());\n return date.equal(today, 'day');\n }\n isHoliday(date) {\n const isHoliday = this.schedulerService.isHoliday(date);\n if (isHoliday) {\n const holiday = this.calendarService.holidays.filter((d) => date.equal(d.date, 'day'))[0];\n return {\n state: 'holiday',\n holiday,\n };\n }\n const isWeekend = this.schedulerService.isWeekend(date, this.calendar());\n if (isWeekend) {\n return { state: 'weekend' };\n }\n return { state: 'none' };\n }\n get isReadonly() {\n return this.readonly();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerTimelineMonthViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.4\", type: AXSchedulerTimelineMonthViewComponent, isStandalone: true, selector: \"ax-scheduler-timeline-month-view\", inputs: { readonly: { classPropertyName: \"readonly\", publicName: \"readonly\", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: \"draggable\", publicName: \"draggable\", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: \"calendar\", publicName: \"calendar\", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: \"date\", publicName: \"date\", isSignal: true, isRequired: true, transformFunction: null }, appointments: { classPropertyName: \"appointments\", publicName: \"appointments\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: \"slotClickedInternal\", slotDblClickedInternal: \"slotDblClickedInternal\", slotRightClickedInternal: \"slotRightClickedInternal\", appointmentClickedInternal: \"appointmentClickedInternal\", appointmentDblClickedInternal: \"appointmentDblClickedInternal\", appointmentRightClickedInternal: \"appointmentRightClickedInternal\", onAppointmentDropInternal: \"onAppointmentDropInternal\" }, host: { properties: { \"class.ax-state-readonly\": \"this.isReadonly\" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineMonthViewComponent }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-scheduler-timeline-month-container\\\">\\n @for (dayData of processedDayData(); track dayData.date.date.getTime()) {\\n <div>\\n <div class=\\\"ax-scheduler-timeline-header\\\">\\n <div\\n class=\\\"ax-scheduler-month-header-date-day\\\"\\n [class.ax-state-today]=\\\"isToday(dayData.date)\\\"\\n [class.ax-state-holiday]=\\\"dayData.holiday.state !== 'none'\\\"\\n >\\n <span\\n class=\\\"ax-scheduler-month-header-date-day-char ax-scheduler-truncate\\\"\\n [axTooltip]=\\\"dayData.holiday?.holiday?.title ?? ''\\\"\\n >\\n {{ dayData.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n @if (dayData.holiday.state === 'holiday' && dayData.holiday.holiday.title) {\\n ( {{ dayData.holiday.holiday.title }} )\\n }\\n </span>\\n <span class=\\\"ax-scheduler-month-header-date-day-num\\\">\\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\\n </span>\\n </div>\\n </div>\\n\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleDrop($event, dayData.date)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n class=\\\"ax-scheduler-timeline-content\\\"\\n (click)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n (dblclick)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n (contextmenu)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n >\\n <div class=\\\"ax-scheduler-timeline-appointment-container\\\">\\n @for (segment of dayData.visibleAppointments; track segment.id + segment.originalStartDate.getTime()) {\\n <div\\n axDrag\\n [dragData]=\\\"segment\\\"\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment)\\\"\\n [title]=\\\"\\n segment.allDay\\n ? segment.title\\n : segment.title +\\n ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')'\\n \\\"\\n class=\\\"ax-scheduler-timeline-appointment\\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n [ngClass]=\\\"segment.cssClass??`ax-scheduler-${segment.priority??'primary'}-periority`\\\"\\n >\\n <ax-title class=\\\"ax-scheduler-truncate\\\">{{ segment.title }}</ax-title>\\n <!-- Display segment's start/end times if not allDay for this segment -->\\n @if (!segment.allDay) {\\n <ax-subtitle>\\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }} -\\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </ax-subtitle>\\n }\\n </div>\\n }\\n @if (dayData.moreCount > 0) {\\n <div #moreAppointments class=\\\"ax-scheduler-month-overflow-badge\\\" (click)=\\\"$event.stopPropagation()\\\">\\n +{{ 'more-items' | translate: { params: { number: dayData.moreCount } } | async }}\\n </div>\\n <ax-popover [target]=\\\"moreAppointments\\\" placement=\\\"bottom-start\\\" trigger=\\\"click\\\">\\n <div\\n [class.ax-state-readonly]=\\\"readonly()\\\"\\n class=\\\"ax-overlay-pane ax-scheduler-popover ax-scheduler-month-popover-appointment\\\"\\n >\\n @for (segment of dayData.hiddenAppointments; track segment.id + segment.originalStartDate.getTime()) {\\n <div\\n axDrag\\n [dragData]=\\\"segment\\\"\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n [title]=\\\"\\n segment.allDay\\n ? segment.title\\n : segment.title +\\n ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')'\\n \\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n [ngClass]=\\\"segment.cssClass??`ax-scheduler-${segment.priority??'primary'}-periority`\\\"\\n >\\n <span class=\\\"ax-appointment-chip-title ax-scheduler-truncate\\\">{{ segment.title }}</span>\\n @if (!segment.allDay) {\\n <ax-subtitle>\\n {{\\n segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{\\n segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n </ax-subtitle>\\n }\\n </div>\\n }\\n </div>\\n </ax-popover>\\n }\\n </div>\\n </div>\\n </div>\\n }\\n</div>\\n\", styles: [\"ax-scheduler-timeline-month-view{height:100%;position:relative;display:inline-flex;flex-direction:column;background-color:inherit}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container{height:100%;display:flex}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header{width:100%;display:flex;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day{gap:.25rem;height:4rem;display:flex;position:relative;align-items:start;padding-inline:1rem;flex-direction:column;padding-block:.25rem;justify-content:center;width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-today .ax-scheduler-month-header-date-day-char{font-weight:500}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-today .ax-scheduler-month-header-date-day-num{font-weight:700}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day .ax-scheduler-month-header-date-day-char{max-width:100%;position:sticky;font-weight:300;inset-inline-start:1rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day .ax-scheduler-month-header-date-day-num{position:sticky;font-weight:500;font-size:1.25rem;inset-inline-start:1rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content{padding:.125rem .25rem;position:relative;height:calc(100% - 4rem);width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container{gap:1px;display:flex;flex-direction:column}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;display:flex;overflow:hidden;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-month-overflow-badge{cursor:pointer;text-align:left;font-size:.75rem;padding:.125rem 0;margin-top:.125rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-month-overflow-badge:hover{text-decoration:underline}ax-scheduler-timeline-month-view:not(.ax-state-readonly) .ax-scheduler-timeline-appointment{cursor:pointer}ax-scheduler-timeline-month-view:not(.ax-state-readonly) .ax-scheduler-timeline-content{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-timeline-month-view:not(.ax-state-readonly) .ax-scheduler-timeline-content:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}\\n\"], dependencies: [{ kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"component\", type: AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: AXTranslatorPipe, name: \"translate\" }, { kind: \"component\", type: AXPopoverComponent, selector: \"ax-popover\", inputs: [\"offsetX\", \"offsetY\", \"target\", \"placement\", \"content\", \"openOn\", \"closeOn\", \"hasBackdrop\", \"openAfter\", \"closeAfter\", \"backdropClass\", \"panelClass\", \"adaptivityEnabled\"], outputs: [\"onOpened\", \"onClosed\"] }, { kind: \"directive\", type: AXDragDirective, selector: \"[axDrag]\", inputs: [\"dragData\", \"dragDisabled\", \"dragTransition\", \"dragElementClone\", \"dropZoneGroup\", \"dragStartDelay\", \"dragResetOnDblClick\", \"dragLockAxis\", \"dragClonedTemplate\", \"dragCursor\", \"dragBoundary\", \"dragTransitionDuration\"], outputs: [\"dragPositionChanged\"] }, { kind: \"directive\", type: AXDropZoneDirective, selector: \"[axDropZone]\", inputs: [\"dropZoneGroup\"], outputs: [\"onElementDrop\", \"onElementHover\"], exportAs: [\"axDropZone\"] }, { kind: \"directive\", type: AXTooltipDirective, selector: \"[axTooltip]\", inputs: [\"axTooltip\", \"axTooltipPlacement\", \"axTooltipOffsetX\", \"axTooltipOffsetY\", \"axTooltipOpenAfter\", \"axTooltipCloseAfter\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerTimelineMonthViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-scheduler-timeline-month-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [\n NgClass,\n AXDecoratorGenericComponent,\n AXFormatPipe,\n AsyncPipe,\n AXTranslatorPipe,\n AXPopoverComponent,\n AXDragDirective,\n AXDropZoneDirective,\n AXTooltipDirective,\n ], providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineMonthViewComponent }], template: \"<div class=\\\"ax-scheduler-timeline-month-container\\\">\\n @for (dayData of processedDayData(); track dayData.date.date.getTime()) {\\n <div>\\n <div class=\\\"ax-scheduler-timeline-header\\\">\\n <div\\n class=\\\"ax-scheduler-month-header-date-day\\\"\\n [class.ax-state-today]=\\\"isToday(dayData.date)\\\"\\n [class.ax-state-holiday]=\\\"dayData.holiday.state !== 'none'\\\"\\n >\\n <span\\n class=\\\"ax-scheduler-month-header-date-day-char ax-scheduler-truncate\\\"\\n [axTooltip]=\\\"dayData.holiday?.holiday?.title ?? ''\\\"\\n >\\n {{ dayData.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n @if (dayData.holiday.state === 'holiday' && dayData.holiday.holiday.title) {\\n ( {{ dayData.holiday.holiday.title }} )\\n }\\n </span>\\n <span class=\\\"ax-scheduler-month-header-date-day-num\\\">\\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\\n </span>\\n </div>\\n </div>\\n\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleDrop($event, dayData.date)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n class=\\\"ax-scheduler-timeline-content\\\"\\n (click)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n (dblclick)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n (contextmenu)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n >\\n <div class=\\\"ax-scheduler-timeline-appointment-container\\\">\\n @for (segment of dayData.visibleAppointments; track segment.id + segment.originalStartDate.getTime()) {\\n <div\\n axDrag\\n [dragData]=\\\"segment\\\"\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment)\\\"\\n [title]=\\\"\\n segment.allDay\\n ? segment.title\\n : segment.title +\\n ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')'\\n \\\"\\n class=\\\"ax-scheduler-timeline-appointment\\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n [ngClass]=\\\"segment.cssClass??`ax-scheduler-${segment.priority??'primary'}-periority`\\\"\\n >\\n <ax-title class=\\\"ax-scheduler-truncate\\\">{{ segment.title }}</ax-title>\\n <!-- Display segment's start/end times if not allDay for this segment -->\\n @if (!segment.allDay) {\\n <ax-subtitle>\\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }} -\\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </ax-subtitle>\\n }\\n </div>\\n }\\n @if (dayData.moreCount > 0) {\\n <div #moreAppointments class=\\\"ax-scheduler-month-overflow-badge\\\" (click)=\\\"$event.stopPropagation()\\\">\\n +{{ 'more-items' | translate: { params: { number: dayData.moreCount } } | async }}\\n </div>\\n <ax-popover [target]=\\\"moreAppointments\\\" placement=\\\"bottom-start\\\" trigger=\\\"click\\\">\\n <div\\n [class.ax-state-readonly]=\\\"readonly()\\\"\\n class=\\\"ax-overlay-pane ax-scheduler-popover ax-scheduler-month-popover-appointment\\\"\\n >\\n @for (segment of dayData.hiddenAppointments; track segment.id + segment.originalStartDate.getTime()) {\\n <div\\n axDrag\\n [dragData]=\\\"segment\\\"\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n [title]=\\\"\\n segment.allDay\\n ? segment.title\\n : segment.title +\\n ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')'\\n \\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n [ngClass]=\\\"segment.cssClass??`ax-scheduler-${segment.priority??'primary'}-periority`\\\"\\n >\\n <span class=\\\"ax-appointment-chip-title ax-scheduler-truncate\\\">{{ segment.title }}</span>\\n @if (!segment.allDay) {\\n <ax-subtitle>\\n {{\\n segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{\\n segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n </ax-subtitle>\\n }\\n </div>\\n }\\n </div>\\n </ax-popover>\\n }\\n </div>\\n </div>\\n </div>\\n }\\n</div>\\n\", styles: [\"ax-scheduler-timeline-month-view{height:100%;position:relative;display:inline-flex;flex-direction:column;background-color:inherit}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container{height:100%;display:flex}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header{width:100%;display:flex;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day{gap:.25rem;height:4rem;display:flex;position:relative;align-items:start;padding-inline:1rem;flex-direction:column;padding-block:.25rem;justify-content:center;width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-today .ax-scheduler-month-header-date-day-char{font-weight:500}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-today .ax-scheduler-month-header-date-day-num{font-weight:700}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day .ax-scheduler-month-header-date-day-char{max-width:100%;position:sticky;font-weight:300;inset-inline-start:1rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day .ax-scheduler-month-header-date-day-num{position:sticky;font-weight:500;font-size:1.25rem;inset-inline-start:1rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content{padding:.125rem .25rem;position:relative;height:calc(100% - 4rem);width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container{gap:1px;display:flex;flex-direction:column}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;display:flex;overflow:hidden;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-month-overflow-badge{cursor:pointer;text-align:left;font-size:.75rem;padding:.125rem 0;margin-top:.125rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-month-overflow-badge:hover{text-decoration:underline}ax-scheduler-timeline-month-view:not(.ax-state-readonly) .ax-scheduler-timeline-appointment{cursor:pointer}ax-scheduler-timeline-month-view:not(.ax-state-readonly) .ax-scheduler-timeline-content{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-timeline-month-view:not(.ax-state-readonly) .ax-scheduler-timeline-content:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}\\n\"] }]\n }], propDecorators: { isReadonly: [{\n type: HostBinding,\n args: ['class.ax-state-readonly']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLXRpbWVsaW5lLW1vbnRoLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9zY2hlZHVsZXIvc3JjL2xpYi92aWV3cy90aW1lbGluZS1tb250aC9zY2hlZHVsZXItdGltZWxpbmUtbW9udGgtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3ZpZXdzL3RpbWVsaW5lLW1vbnRoL3NjaGVkdWxlci10aW1lbGluZS1tb250aC12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBdUIsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQTZCLE1BQU0sd0JBQXdCLENBQUM7QUFDdEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixRQUFRLEVBQ1IsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFN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QUczQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFdBQzVCO3dCQUNQLE9BQU87d0JBQ1AsMkJBQTJCO3dCQUMzQixZQUFZO3dCQUNaLFNBQVM7d0JBQ1QsZ0JBQWdCO3dCQUNoQixrQkFBa0I7d0JBQ2xCLGVBQWU7d0JBQ2YsbUJBQW1CO3dCQUNuQixrQkFBa0I7cUJBQ25CLGFBQ1UsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyx1Q0FBdUMsRUFBRSxDQUFDOzhCQThKN0MsVUFBVTtzQkFBckQsV0FBVzt1QkFBQyx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWENvbXBvbmVudCwgTlhDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2Nkay9jb21tb24nO1xuaW1wb3J0IHsgQVhEcmFnRGlyZWN0aXZlLCBBWERyb3Bab25lRGlyZWN0aXZlLCBBWERyb3Bab25lRHJvcEV2ZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IEFYRGVjb3JhdG9yR2VuZXJpY0NvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFYUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9wb3BvdmVyJztcbmltcG9ydCB7IEFYVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90b29sdGlwJztcbmltcG9ydCB7IEFYQ2FsZW5kYXJTZXJ2aWNlLCBBWERhdGVUaW1lLCBBWEhvbGlkYXlEYXRlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2RhdGUtdGltZSc7XG5pbXBvcnQgeyBBWEZvcm1hdFBpcGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvZm9ybWF0JztcbmltcG9ydCB7IEFYVHJhbnNsYXRvclBpcGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEhvc3RCaW5kaW5nLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBvcmRlckJ5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQsIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50IH0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLmNsYXNzJztcbmltcG9ydCB7XG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50LFxuICBBWFNjaGVkdWxlckNvbXBvbmVudCxcbiAgQVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50LFxuICBBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50LFxufSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEFYU2NoZWR1bGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NjaGVkdWxlci5zZXJ2aWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBUaW1lbGluZU1vbnRoVmlld0RheURhdGEge1xuICBkYXRlOiBBWERhdGVUaW1lO1xuICAvLyBUaGVzZSB3aWxsIGJlIHNlZ21lbnRzLCBwcmVjaXNlbHkgY2xpcHBlZCBhbmQgZmxhZ2dlZCBmb3IgdGhpcyBkYXlcbiAgdmlzaWJsZUFwcG9pbnRtZW50czogQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXTtcbiAgaGlkZGVuQXBwb2ludG1lbnRzOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdO1xuICBtb3JlQ291bnQ6IG51bWJlcjtcbiAgLy8gWW91IG1pZ2h0IGFsc28gd2FudCB0byBzdG9yZSBhbGwgc2VnbWVudHMgZm9yIHRoZSBkYXkgaWYgbmVlZGVkIGVsc2V3aGVyZVxuICAvLyBhbGxTZWdtZW50c0ZvckRheTogQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRUeXBlW107XG4gIGhvbGlkYXk/OiB7IHN0YXRlOiAnaG9saWRheScgfCAnd2Vla2VuZCcgfCAnbm9uZSc7IGhvbGlkYXk/OiBBWEhvbGlkYXlEYXRlIH07XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LXNjaGVkdWxlci10aW1lbGluZS1tb250aC12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NjaGVkdWxlci10aW1lbGluZS1tb250aC12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3NjaGVkdWxlci10aW1lbGluZS1tb250aC12aWV3LmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0NsYXNzLFxuICAgIEFYRGVjb3JhdG9yR2VuZXJpY0NvbXBvbmVudCxcbiAgICBBWEZvcm1hdFBpcGUsXG4gICAgQXN5bmNQaXBlLFxuICAgIEFYVHJhbnNsYXRvclBpcGUsXG4gICAgQVhQb3BvdmVyQ29tcG9uZW50LFxuICAgIEFYRHJhZ0RpcmVjdGl2ZSxcbiAgICBBWERyb3Bab25lRGlyZWN0aXZlLFxuICAgIEFYVG9vbHRpcERpcmVjdGl2ZSxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBBWENvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYU2NoZWR1bGVyVGltZWxpbmVNb250aFZpZXdDb21wb25lbnQgfV0sXG59KVxuZXhwb3J0IGNsYXNzIEFYU2NoZWR1bGVyVGltZWxpbmVNb250aFZpZXdDb21wb25lbnQgZXh0ZW5kcyBOWENvbXBvbmVudCB7XG4gIHByaXZhdGUgc2NoZWR1bGVyID0gaW5qZWN0KEFYU2NoZWR1bGVyQ29tcG9uZW50KTtcbiAgcHJpdmF0ZSBjYWxlbmRhclNlcnZpY2UgPSBpbmplY3QoQVhDYWxlbmRhclNlcnZpY2UpO1xuICBwcml2YXRlIHNjaGVkdWxlclNlcnZpY2UgPSBpbmplY3QoQVhTY2hlZHVsZXJTZXJ2aWNlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IE1BWF9WSVNJQkxFX0FQUE9JTlRNRU5UU19QRVJfREFZID0gMztcblxuICByZWFkb25seSA9IGlucHV0KGZhbHNlKTtcbiAgZHJhZ2dhYmxlID0gaW5wdXQodHJ1ZSk7XG4gIGNhbGVuZGFyID0gaW5wdXQ8c3RyaW5nPigpO1xuICBkYXRlID0gaW5wdXQucmVxdWlyZWQ8QVhEYXRlVGltZT4oKTtcbiAgYXBwb2ludG1lbnRzID0gaW5wdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudFtdPihbXSk7XG5cbiAgcHJvY2Vzc2VkRGF5RGF0YSA9IGNvbXB1dGVkPFRpbWVsaW5lTW9udGhWaWV3RGF5RGF0YVtdPigoKSA9PiB7XG4gICAgY29uc3QgYWxsT3JpZ2luYWxBcHBvaW50bWVudHMgPSB0aGlzLmFwcG9pbnRtZW50cygpO1xuICAgIGNvbnN0IG1vbnRoU3RhcnREYXRlID0gdGhpcy5kYXRlKCkuc3RhcnRPZignbW9udGgnKTtcbiAgICBjb25zdCBkYXlzSW5Nb250aCA9IG1vbnRoU3RhcnREYXRlLmVuZE9mKCdtb250aCcpLmRheU9mTW9udGg7XG5cbiAgICBpZiAoIWFsbE9yaWdpbmFsQXBwb2ludG1lbnRzKSB7XG4gICAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogZGF5c0luTW9udGggfSwgKF8sIGkpID0+IHtcbiAgICAgICAgY29uc3QgZGF5RGF0ZSA9IG1vbnRoU3RhcnREYXRlLmFkZCgnZGF5JywgaSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRlOiBkYXlEYXRlLFxuICAgICAgICAgIHZpc2libGVBcHBvaW50bWVudHM6IFtdLFxuICAgICAgICAgIGhpZGRlbkFwcG9pbnRtZW50czogW10sXG4gICAgICAgICAgbW9yZUNvdW50OiAwLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0OiBUaW1lbGluZU1vbnRoVmlld0RheURhdGFbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXlzSW5Nb250aDsgaSsrKSB7XG4gICAgICBjb25zdCBjdXJyZW50RGF5RGF0ZSA9IG1vbnRoU3RhcnREYXRlLmFkZCgnZGF5JywgaSkuc3RhcnRPZignZGF5Jyk7IC8vIEVuc3VyZSBpdCdzIHN0YXJ0IG9mIGRheVxuICAgICAgY29uc3Qgc2VnbWVudHNGb3JUaGlzRGF5OiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdID0gW107XG5cbiAgICAgIGZvciAoY29uc3QgYXBwdCBvZiBhbGxPcmlnaW5hbEFwcG9pbnRtZW50cykge1xuICAgICAgICAvLyBGb3IgVGltZWxpbmUgTW9udGggVmlldywgZWFjaCBkYXkgaXMgYSByb3cuIFdlIHdhbnQgc2VnbWVudHMgZm9yIHRoZSBmdWxsIDI0aCBvZiB0aGF0IGRheS5cbiAgICAgICAgLy8gVGhlIHZpZXcncyBzdGFydEhvdXIvZW5kSG91ciBhcmUgTk9UIHVzZWQgdG8gY2xpcCBzZWdtZW50cyBoZXJlLFxuICAgICAgICAvLyBhcyBpdCdzIG5vdCBhIGhvcml6b250YWwgdGltZSBzY2FsZSAqd2l0aGluKiB0aGUgZGF5IHJvdy5cbiAgICAgICAgY29uc3Qgc2VnbWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRDbG9uZWRBcHBvaW50bWVudFNlZ21lbnRPbkRheShhcHB0LCBjdXJyZW50RGF5RGF0ZSwgMCwgMjQsIHRydWUpO1xuICAgICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICAgIHNlZ21lbnRzRm9yVGhpc0RheS5wdXNoKHNlZ21lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFNvcnQgc2VnbWVudHM6IGFsbC1kYXkgZmlyc3QsIHRoZW4gYnkgc2VnbWVudCBzdGFydCB0aW1lICh3aGljaCBpcyBjbGlwcGVkIHRvIHRoZSBkYXkpXG4gICAgICBjb25zdCBzb3J0ZWRTZWdtZW50cyA9IG9yZGVyQnkoXG4gICAgICAgIHNlZ21lbnRzRm9yVGhpc0RheSxcbiAgICAgICAgW1xuICAgICAgICAgIChzKSA9PiAocy5hbGxEYXkgPyAwIDogMSksIC8vIFNlZ21lbnRzIG1hcmtlZCBhcyBhbGxEYXkgZmlyc3RcbiAgICAgICAgICAocykgPT4gcy5zdGFydERhdGUuZ2V0VGltZSgpLCAvLyBTZWdtZW50J3Mgc3RhcnQgdGltZSBvbiB0aGlzIGRheVxuICAgICAgICAgIChzKSA9PiBzLmVuZERhdGUuZ2V0VGltZSgpIC0gcy5zdGFydERhdGUuZ2V0VGltZSgpLCAvLyBTZWdtZW50J3MgZHVyYXRpb24gb24gdGhpcyBkYXlcbiAgICAgICAgICAocykgPT4gcy50aXRsZT8udG9Mb3dlckNhc2UoKSA/PyAnJyxcbiAgICAgICAgXSxcbiAgICAgICAgWydhc2MnLCAnYXNjJywgJ2Rlc2MnLCAnYXNjJ10sXG4gICAgICApO1xuXG4gICAgICBjb25zdCB2aXNpYmxlQXBwb2ludG1lbnRzID0gc29ydGVkU2VnbWVudHMuc2xpY2UoMCwgdGhpcy5NQVhfVklTSUJMRV9BUFBPSU5UTUVOVFNfUEVSX0RBWSk7XG4gICAgICBjb25zdCBoaWRkZW5BcHBvaW50bWVudHMgPSBzb3J0ZWRTZWdtZW50cy5zbGljZSh0aGlzLk1BWF9WSVNJQkxFX0FQUE9JTlRNRU5UU19QRVJfREFZKTtcblxuICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICBkYXRlOiBjdXJyZW50RGF5RGF0ZSxcbiAgICAgICAgdmlzaWJsZUFwcG9pbnRtZW50czogdmlzaWJsZUFwcG9pbnRtZW50cyxcbiAgICAgICAgaGlkZGVuQXBwb2ludG1lbnRzOiBoaWRkZW5BcHBvaW50bWVudHMsXG4gICAgICAgIG1vcmVDb3VudDogaGlkZGVuQXBwb2ludG1lbnRzLmxlbmd0aCxcbiAgICAgICAgaG9saWRheTogdGhpcy5pc0hvbGlkYXkoY3VycmVudERheURhdGUpLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xuXG4gIC8vIEludGVybmFsIG91dHB1dHMgdG8gYmUgY2F1Z2h0IGJ5IHBhcmVudCBBWFNjaGVkdWxlckNvbXBvbmVudFxuICBzbG90Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIHNsb3REYmxDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgc2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIGFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBhcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgb25BcHBvaW50bWVudERyb3BJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3REcm9wRXZlbnQ+KCk7XG5cbiAgLy8gLS0tIEV2ZW50IEhhbmRsZXJzIC0tLVxuICBwcml2YXRlIHJlYWRvbmx5IGV2ZW50T3V0cHV0TWFwID0ge1xuICAgIHNsb3Q6IHtcbiAgICAgIGNsaWNrOiB0aGlzLnNsb3RDbGlja2VkSW50ZXJuYWwsXG4gICAgICBkYmxjbGljazogdGhpcy5zbG90RGJsQ2xpY2tlZEludGVybmFsLFxuICAgICAgY29udGV4dG1lbnU6IHRoaXMuc2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsLFxuICAgIH0sXG4gICAgYXBwb2ludG1lbnQ6IHtcbiAgICAgIGNsaWNrOiB0aGlzLmFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsLFxuICAgICAgZGJsY2xpY2s6IHRoaXMuYXBwb2ludG1lbnREYmxDbGlja2VkSW50ZXJuYWwsXG4gICAgICBjb250ZXh0bWVudTogdGhpcy5hcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsLFxuICAgIH0sXG4gIH07XG4gIGhhbmRsZUFwcG9pbnRtZW50RXZlbnQobW91c2VFdmVudDogTW91c2VFdmVudCwgYXBwb2ludG1lbnRJdGVtOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50KSB7XG4gICAgY29uc3Qgb3JpZ2luYWxBcHBvaW50bWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRPcmlnaW5hbEFwcG9pbnRtZW50KGFwcG9pbnRtZW50SXRlbSk7XG4gICAgY29uc3QgYXBwb2ludG1lbnRSZWYgPSB7XG4gICAgICAuLi5vcmlnaW5hbEFwcG9pbnRtZW50LFxuICAgICAgZW5kRGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5lbmREYXRlLFxuICAgICAgc3RhcnREYXRlOiBvcmlnaW5hbEFwcG9pbnRtZW50LnN0YXJ0RGF0ZSxcbiAgICB9O1xuICAgIHRoaXMuc2NoZWR1bGVyU2VydmljZS5oYW5kbGVFdmVudChcbiAgICAgIHsgbmF0aXZlRXZlbnQ6IG1vdXNlRXZlbnQsIGFwcG9pbnRtZW50OiBhcHBvaW50bWVudFJlZiwgc2VuZGVyOiB0aGlzLnNjaGVkdWxlciB9LFxuICAgICAgdGhpcy5ldmVudE91dHB1dE1hcCxcbiAgICAgICdhcHBvaW50bWVudCcsXG4gICAgKTtcbiAgfVxuICBoYW5kbGVTbG90RXZlbnQobW91c2VFdmVudDogTW91c2VFdmVudCwgZGF0ZTogQVhEYXRlVGltZSkge1xuICAgIC8vIGRhdGUgaXMgdGhlIHNwZWNpZmljIGRheVxuICAgIGNvbnN0IHNsb3REYXRhID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldFNsb3REYXRhKGRhdGUuc3RhcnRPZignZGF5JyksICd0aW1lbGluZS1tb250aCcpO1xuICAgIGlmIChzbG90RGF0YSlcbiAgICAgIHRoaXMuc2NoZWR1bGVyU2VydmljZS5oYW5kbGVFdmVudChcbiAgICAgICAgeyBuYXRpdmVFdmVudDogbW91c2VFdmVudCwgc2xvdDogc2xvdERhdGEsIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIgfSxcbiAgICAgICAgdGhpcy5ldmVudE91dHB1dE1hcCxcbiAgICAgICAgJ3Nsb3QnLFxuICAgICAgKTtcbiAgfVxuICBoYW5kbGVEcm9wKGU6IEFYRHJvcFpvbmVEcm9wRXZlbnQsIGRhdGU6IEFYRGF0ZVRpbWUpIHtcbiAgICAvLyBkYXRlIGlzIHRoZSBzcGVjaWZpYyBkYXlcbiAgICBjb25zdCBzbG90RGF0YSA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRTbG90RGF0YShkYXRlLnN0YXJ0T2YoJ2RheScpLCAndGltZWxpbmUtbW9udGgnKTtcbiAgICBjb25zdCBkcm9wcGVkSXRlbSA9IGUuZHJvcHBlZC5kcmFnRGF0YSgpIGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnQ7XG4gICAgY29uc3Qgb3JpZ2luYWxBcHBvaW50bWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRPcmlnaW5hbEFwcG9pbnRtZW50KGRyb3BwZWRJdGVtKTtcbiAgICBjb25zdCBhcHBvaW50bWVudFJlZiA9IHtcbiAgICAgIC4uLm9yaWdpbmFsQXBwb2ludG1lbnQsXG4gICAgICBlbmREYXRlOiBvcmlnaW5hbEFwcG9pbnRtZW50LmVuZERhdGUsXG4gICAgICBzdGFydERhdGU6IG9yaWdpbmFsQXBwb2ludG1lbnQuc3RhcnREYXRlLFxuICAgIH07XG4gICAgdGhpcy5vbkFwcG9pbnRtZW50RHJvcEludGVybmFsLmVtaXQoe1xuICAgICAgZHJvcEV2ZW50OiBlLFxuICAgICAgc2xvdDogc2xvdERhdGEsXG4gICAgICBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyLFxuICAgICAgYXBwb2ludG1lbnQ6IGFwcG9pbnRtZW50UmVmLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzVG9kYXkoZGF0ZTogQVhEYXRlVGltZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHRvZGF5ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKG5ldyBEYXRlKCkpO1xuICAgIHJldHVybiBkYXRlLmVxdWFsKHRvZGF5LCAnZGF5Jyk7XG4gIH1cbiAgcHJvdGVjdGVkIGlzSG9saWRheShkYXRlOiBBWERhdGVUaW1lKTogeyBzdGF0ZTogJ2hvbGlkYXknIHwgJ3dlZWtlbmQnIHwgJ25vbmUnOyBob2xpZGF5PzogQVhIb2xpZGF5RGF0ZSB9IHtcbiAgICBjb25zdCBpc0hvbGlkYXkgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaXNIb2xpZGF5KGRhdGUpO1xuICAgIGlmIChpc0hvbGlkYXkpIHtcbiAgICAgIGNvbnN0IGhvbGlkYXkgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5ob2xpZGF5cy5maWx0ZXIoKGQpID0+IGRhdGUuZXF1YWwoZC5kYXRlLCAnZGF5JykpWzBdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdGU6ICdob2xpZGF5JyxcbiAgICAgICAgaG9saWRheSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGlzV2Vla2VuZCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5pc1dlZWtlbmQoZGF0ZSwgdGhpcy5jYWxlbmRhcigpKTtcbiAgICBpZiAoaXNXZWVrZW5kKSB7XG4gICAgICByZXR1cm4geyBzdGF0ZTogJ3dlZWtlbmQnIH07XG4gICAgfVxuICAgIHJldHVybiB7IHN0YXRlOiAnbm9uZScgfTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYXgtc3RhdGUtcmVhZG9ubHknKSBnZXQgaXNSZWFkb25seSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkb25seSgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRpbWVsaW5lLW1vbnRoLWNvbnRhaW5lclwiPlxuICBAZm9yIChkYXlEYXRhIG9mIHByb2Nlc3NlZERheURhdGEoKTsgdHJhY2sgZGF5RGF0YS5kYXRlLmRhdGUuZ2V0VGltZSgpKSB7XG4gICAgPGRpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItdGltZWxpbmUtaGVhZGVyXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1tb250aC1oZWFkZXItZGF0ZS1kYXlcIlxuICAgICAgICAgIFtjbGFzcy5heC1zdGF0ZS10b2RheV09XCJpc1RvZGF5KGRheURhdGEuZGF0ZSlcIlxuICAgICAgICAgIFtjbGFzcy5heC1zdGF0ZS1ob2xpZGF5XT1cImRheURhdGEuaG9saWRheS5zdGF0ZSAhPT0gJ25vbmUnXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1tb250aC1oZWFkZXItZGF0ZS1kYXktY2hhciBheC1zY2hlZHVsZXItdHJ1bmNhdGVcIlxuICAgICAgICAgICAgW2F4VG9vbHRpcF09XCJkYXlEYXRhLmhvbGlkYXk/LmhvbGlkYXk/LnRpdGxlID8/ICcnXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBkYXlEYXRhLmRhdGUgfCBmb3JtYXQ6ICdkYXRlJyA6IHsgZm9ybWF0OiAnZGRkZCcsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgICAgICAgQGlmIChkYXlEYXRhLmhvbGlkYXkuc3RhdGUgPT09ICdob2xpZGF5JyAmJiBkYXlEYXRhLmhvbGlkYXkuaG9saWRheS50aXRsZSkge1xuICAgICAgICAgICAgICAoIHt7IGRheURhdGEuaG9saWRheS5ob2xpZGF5LnRpdGxlIH19IClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC1zY2hlZHVsZXItbW9udGgtaGVhZGVyLWRhdGUtZGF5LW51bVwiPlxuICAgICAgICAgICAge3sgZGF5RGF0YS5kYXRlIHwgZm9ybWF0OiAnZGF0ZScgOiB7IGZvcm1hdDogJ0REJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2XG4gICAgICAgIGF4RHJvcFpvbmVcbiAgICAgICAgI3pvbmU9XCJheERyb3Bab25lXCJcbiAgICAgICAgKG9uRWxlbWVudERyb3ApPVwiaGFuZGxlRHJvcCgkZXZlbnQsIGRheURhdGEuZGF0ZSlcIlxuICAgICAgICBbY2xhc3MuYXgtc2NoZWR1bGVyLXNsb3QtaG92ZXJlZF09XCJ6b25lLmlzSG92ZXJlZCgpXCJcbiAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItdGltZWxpbmUtY29udGVudFwiXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVTbG90RXZlbnQoJGV2ZW50LCBkYXlEYXRhLmRhdGUpXCJcbiAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZVNsb3RFdmVudCgkZXZlbnQsIGRheURhdGEuZGF0ZSlcIlxuICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlU2xvdEV2ZW50KCRldmVudCwgZGF5RGF0YS5kYXRlKVwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItdGltZWxpbmUtYXBwb2ludG1lbnQtY29udGFpbmVyXCI+XG4gICAgICAgICAgQGZvciAoc2VnbWVudCBvZiBkYXlEYXRhLnZpc2libGVBcHBvaW50bWVudHM7IHRyYWNrIHNlZ21lbnQuaWQgKyBzZWdtZW50Lm9yaWdpbmFsU3RhcnREYXRlLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBheERyYWdcbiAgICAgICAgICAgICAgW2RyYWdEYXRhXT1cInNlZ21lbnRcIlxuICAgICAgICAgICAgICBbZHJhZ0N1cnNvcl09XCInZ3JhYidcIlxuICAgICAgICAgICAgICBbZHJhZ1RyYW5zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbZHJhZ0VsZW1lbnRDbG9uZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2RyYWdEaXNhYmxlZF09XCIhZHJhZ2dhYmxlKCkgfHwgc2VnbWVudC5yZWFkb25seSB8fCByZWFkb25seSgpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzZWdtZW50KVwiXG4gICAgICAgICAgICAgIChkYmxjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgc2VnbWVudClcIlxuICAgICAgICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIHNlZ21lbnQpXCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cIlxuICAgICAgICAgICAgICAgIHNlZ21lbnQuYWxsRGF5XG4gICAgICAgICAgICAgICAgICA/IHNlZ21lbnQudGl0bGVcbiAgICAgICAgICAgICAgICAgIDogc2VnbWVudC50aXRsZSArXG4gICAgICAgICAgICAgICAgICAgICcgKCcgK1xuICAgICAgICAgICAgICAgICAgICAoc2VnbWVudC5vcmlnaW5hbFN0YXJ0RGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMpICtcbiAgICAgICAgICAgICAgICAgICAgJyAtICcgK1xuICAgICAgICAgICAgICAgICAgICAoc2VnbWVudC5vcmlnaW5hbEVuZERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jKSArXG4gICAgICAgICAgICAgICAgICAgICcpJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci10aW1lbGluZS1hcHBvaW50bWVudFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5hbGwtZGF5LXNlZ21lbnRdPVwic2VnbWVudC5hbGxEYXlcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJzZWdtZW50LmNzc0NsYXNzPz9gYXgtc2NoZWR1bGVyLSR7c2VnbWVudC5wcmlvcml0eT8/J3ByaW1hcnknfS1wZXJpb3JpdHlgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGF4LXRpdGxlIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRydW5jYXRlXCI+e3sgc2VnbWVudC50aXRsZSB9fTwvYXgtdGl0bGU+XG4gICAgICAgICAgICAgIDwhLS0gRGlzcGxheSBzZWdtZW50J3Mgc3RhcnQvZW5kIHRpbWVzIGlmIG5vdCBhbGxEYXkgZm9yIHRoaXMgc2VnbWVudCAtLT5cbiAgICAgICAgICAgICAgQGlmICghc2VnbWVudC5hbGxEYXkpIHtcbiAgICAgICAgICAgICAgICA8YXgtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgICB7eyBzZWdtZW50Lm9yaWdpbmFsU3RhcnREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19IC1cbiAgICAgICAgICAgICAgICAgIHt7IHNlZ21lbnQub3JpZ2luYWxFbmREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAgPC9heC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoZGF5RGF0YS5tb3JlQ291bnQgPiAwKSB7XG4gICAgICAgICAgICA8ZGl2ICNtb3JlQXBwb2ludG1lbnRzIGNsYXNzPVwiYXgtc2NoZWR1bGVyLW1vbnRoLW92ZXJmbG93LWJhZGdlXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAre3sgJ21vcmUtaXRlbXMnIHwgdHJhbnNsYXRlOiB7IHBhcmFtczogeyBudW1iZXI6IGRheURhdGEubW9yZUNvdW50IH0gfSB8IGFzeW5jIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxheC1wb3BvdmVyIFt0YXJnZXRdPVwibW9yZUFwcG9pbnRtZW50c1wiIHBsYWNlbWVudD1cImJvdHRvbS1zdGFydFwiIHRyaWdnZXI9XCJjbGlja1wiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgW2NsYXNzLmF4LXN0YXRlLXJlYWRvbmx5XT1cInJlYWRvbmx5KClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtb3ZlcmxheS1wYW5lIGF4LXNjaGVkdWxlci1wb3BvdmVyIGF4LXNjaGVkdWxlci1tb250aC1wb3BvdmVyLWFwcG9pbnRtZW50XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEBmb3IgKHNlZ21lbnQgb2YgZGF5RGF0YS5oaWRkZW5BcHBvaW50bWVudHM7IHRyYWNrIHNlZ21lbnQuaWQgKyBzZWdtZW50Lm9yaWdpbmFsU3RhcnREYXRlLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBheERyYWdcbiAgICAgICAgICAgICAgICAgICAgW2RyYWdEYXRhXT1cInNlZ21lbnRcIlxuICAgICAgICAgICAgICAgICAgICBbZHJhZ0N1cnNvcl09XCInZ3JhYidcIlxuICAgICAgICAgICAgICAgICAgICBbZHJhZ1RyYW5zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICBbZHJhZ0VsZW1lbnRDbG9uZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2RyYWdEaXNhYmxlZF09XCIhZHJhZ2dhYmxlKCkgfHwgc2VnbWVudC5yZWFkb25seSB8fCByZWFkb25seSgpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzZWdtZW50KTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzZWdtZW50KTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzZWdtZW50KTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnQuYWxsRGF5XG4gICAgICAgICAgICAgICAgICAgICAgICA/IHNlZ21lbnQudGl0bGVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogc2VnbWVudC50aXRsZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICcgKCcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VnbWVudC5vcmlnaW5hbFN0YXJ0RGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJyAtICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VnbWVudC5vcmlnaW5hbEVuZERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICcpJ1xuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1wb3BvdmVyLWFwcG9pbnRtZW50XCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFsbC1kYXktc2VnbWVudF09XCJzZWdtZW50LmFsbERheVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlZ21lbnQuY3NzQ2xhc3M/P2BheC1zY2hlZHVsZXItJHtzZWdtZW50LnByaW9yaXR5Pz8ncHJpbWFyeSd9LXBlcmlvcml0eWBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF4LWFwcG9pbnRtZW50LWNoaXAtdGl0bGUgYXgtc2NoZWR1bGVyLXRydW5jYXRlXCI+e3sgc2VnbWVudC50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgQGlmICghc2VnbWVudC5hbGxEYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8YXgtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50Lm9yaWdpbmFsU3RhcnREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgLVxuICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudC5vcmlnaW5hbEVuZERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgZm9ybWF0OiAnSEg6bW0nLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmNcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9heC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvYXgtcG9wb3Zlcj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIH1cbjwvZGl2PlxuIl19","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, computed, inject, input, output } from '@angular/core';\nimport { AXSchedulerService } from '../../scheduler.service';\nimport { AXSchedulerTimelineDayViewComponent } from '../timeline-day/scheduler-timeline-day-view.component';\nimport * as i0 from \"@angular/core\";\nexport class AXSchedulerTimelineMultiDayViewComponent extends NXComponent {\n constructor() {\n super(...arguments);\n this.calendarService = inject(AXCalendarService);\n this.schedulerService = inject(AXSchedulerService);\n this.daysCount = input(7);\n this.readonly = input(false);\n this.draggable = input(true);\n this.calendar = input();\n this.date = input.required();\n this.endDayHour = input.required();\n this.startDayHour = input.required();\n this.appointments = input([]);\n this.daysDataForTimelineViews = computed(() => {\n const allOriginalAppointments = this.appointments();\n const multiViewStartDate = this.date();\n const numberOfDays = this.daysCount();\n if (!multiViewStartDate || !allOriginalAppointments) {\n return [];\n }\n const result = [];\n for (let i = 0; i < numberOfDays; i++) {\n const currentDayDate = multiViewStartDate.add('day', i);\n const currentDayStart = currentDayDate.startOf('day');\n const currentDayEnd = currentDayDate.endOf('day'); // Use full day for overlap check\n const appointmentsOverlappingThisDay = allOriginalAppointments.filter((appt) => {\n if (appt.allDay) {\n return false;\n }\n const apptStart = this.calendarService.create(appt.startDate, this.calendar());\n const apptEnd = this.calendarService.create(appt.endDate, this.calendar());\n return apptStart.compare(currentDayEnd, 'second') <= 0 && apptEnd.compare(currentDayStart, 'second') >= 0;\n });\n result.push({\n date: currentDayDate,\n holiday: this.isHoliday(currentDayDate),\n originalAppointmentsForThisDay: appointmentsOverlappingThisDay,\n });\n }\n return result;\n });\n this.slotClickedInternal = output();\n this.slotDblClickedInternal = output();\n this.slotRightClickedInternal = output();\n this.appointmentClickedInternal = output();\n this.appointmentDblClickedInternal = output();\n this.appointmentRightClickedInternal = output();\n this.onAppointmentDropInternal = output();\n }\n isToday(date) {\n const today = this.calendarService.create(new Date());\n return date.equal(today, 'day');\n }\n isHoliday(date) {\n const isHoliday = this.schedulerService.isHoliday(date);\n if (isHoliday) {\n const holiday = this.calendarService.holidays.filter((d) => date.equal(d.date, 'day'))[0];\n return {\n state: 'holiday',\n holiday,\n };\n }\n const isWeekend = this.schedulerService.isWeekend(date, this.calendar());\n if (isWeekend) {\n return { state: 'weekend' };\n }\n return { state: 'none' };\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerTimelineMultiDayViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.4\", type: AXSchedulerTimelineMultiDayViewComponent, isStandalone: true, selector: \"ax-scheduler-timeline-multi-day-view\", inputs: { daysCount: { classPropertyName: \"daysCount\", publicName: \"daysCount\", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: \"readonly\", publicName: \"readonly\", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: \"draggable\", publicName: \"draggable\", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: \"calendar\", publicName: \"calendar\", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: \"date\", publicName: \"date\", isSignal: true, isRequired: true, transformFunction: null }, endDayHour: { classPropertyName: \"endDayHour\", publicName: \"endDayHour\", isSignal: true, isRequired: true, transformFunction: null }, startDayHour: { classPropertyName: \"startDayHour\", publicName: \"startDayHour\", isSignal: true, isRequired: true, transformFunction: null }, appointments: { classPropertyName: \"appointments\", publicName: \"appointments\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: \"slotClickedInternal\", slotDblClickedInternal: \"slotDblClickedInternal\", slotRightClickedInternal: \"slotRightClickedInternal\", appointmentClickedInternal: \"appointmentClickedInternal\", appointmentDblClickedInternal: \"appointmentDblClickedInternal\", appointmentRightClickedInternal: \"appointmentRightClickedInternal\", onAppointmentDropInternal: \"onAppointmentDropInternal\" }, providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineMultiDayViewComponent }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-scheduler-timeline-day-view-container\\\">\\n @for (daySlot of daysDataForTimelineViews(); track daySlot.date.date.getTime()) {\\n <div class=\\\"ax-scheduler-timeline-multi-day-column\\\">\\n <div\\n class=\\\"ax-scheduler-week-header-date-day\\\"\\n [class.ax-state-today]=\\\"isToday(daySlot.date)\\\"\\n [class.ax-state-holiday]=\\\"daySlot.holiday.state !== 'none'\\\"\\n >\\n <span\\n class=\\\"ax-scheduler-week-header-date-day-char ax-scheduler-truncate\\\"\\n [axTooltip]=\\\"daySlot.holiday?.holiday?.title ?? ''\\\"\\n >\\n {{ daySlot.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n @if (daySlot.holiday.state === 'holiday' && daySlot.holiday.holiday.title) {\\n ( {{ daySlot.holiday.holiday.title }} )\\n }\\n </span>\\n <span class=\\\"ax-scheduler-week-header-date-day-num\\\">\\n {{ daySlot.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\\n </span>\\n </div>\\n <ax-scheduler-timeline-day-view\\n [date]=\\\"daySlot.date\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [appointments]=\\\"daySlot.originalAppointmentsForThisDay\\\"\\n (slotClickedInternal)=\\\"slotClickedInternal.emit($event)\\\"\\n (slotDblClickedInternal)=\\\"slotDblClickedInternal.emit($event)\\\"\\n (slotRightClickedInternal)=\\\"slotRightClickedInternal.emit($event)\\\"\\n (onAppointmentDropInternal)=\\\"onAppointmentDropInternal.emit($event)\\\"\\n (appointmentClickedInternal)=\\\"appointmentClickedInternal.emit($event)\\\"\\n (appointmentDblClickedInternal)=\\\"appointmentDblClickedInternal.emit($event)\\\"\\n (appointmentRightClickedInternal)=\\\"appointmentRightClickedInternal.emit($event)\\\"\\n >\\n </ax-scheduler-timeline-day-view>\\n </div>\\n }\\n</div>\\n\", styles: [\"ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container{height:100%;display:flex;flex-direction:row}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day{gap:.25rem;height:4rem;display:flex;position:relative;align-items:start;padding-inline:1rem;flex-direction:column;padding-block:.25rem;justify-content:center;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-char{font-weight:500}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-num{font-weight:700}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-char{max-width:100%;position:sticky;font-weight:300;inset-inline-start:1rem}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-num{position:sticky;font-weight:500;font-size:1.25rem;inset-inline-start:1rem}ax-scheduler-timeline-multi-day-view ax-scheduler-timeline-day-view{height:calc(100% - 4rem)}\\n\"], dependencies: [{ kind: \"component\", type: AXSchedulerTimelineDayViewComponent, selector: \"ax-scheduler-timeline-day-view\", inputs: [\"readonly\", \"draggable\", \"calendar\", \"date\", \"endDayHour\", \"startDayHour\", \"appointments\"], outputs: [\"slotClickedInternal\", \"slotDblClickedInternal\", \"slotRightClickedInternal\", \"appointmentClickedInternal\", \"appointmentDblClickedInternal\", \"appointmentRightClickedInternal\", \"onAppointmentDropInternal\"] }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }, { kind: \"directive\", type: AXTooltipDirective, selector: \"[axTooltip]\", inputs: [\"axTooltip\", \"axTooltipPlacement\", \"axTooltipOffsetX\", \"axTooltipOffsetY\", \"axTooltipOpenAfter\", \"axTooltipCloseAfter\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerTimelineMultiDayViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-scheduler-timeline-multi-day-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [AXSchedulerTimelineDayViewComponent, AsyncPipe, AXFormatPipe, AXTooltipDirective], providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineMultiDayViewComponent }], template: \"<div class=\\\"ax-scheduler-timeline-day-view-container\\\">\\n @for (daySlot of daysDataForTimelineViews(); track daySlot.date.date.getTime()) {\\n <div class=\\\"ax-scheduler-timeline-multi-day-column\\\">\\n <div\\n class=\\\"ax-scheduler-week-header-date-day\\\"\\n [class.ax-state-today]=\\\"isToday(daySlot.date)\\\"\\n [class.ax-state-holiday]=\\\"daySlot.holiday.state !== 'none'\\\"\\n >\\n <span\\n class=\\\"ax-scheduler-week-header-date-day-char ax-scheduler-truncate\\\"\\n [axTooltip]=\\\"daySlot.holiday?.holiday?.title ?? ''\\\"\\n >\\n {{ daySlot.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n @if (daySlot.holiday.state === 'holiday' && daySlot.holiday.holiday.title) {\\n ( {{ daySlot.holiday.holiday.title }} )\\n }\\n </span>\\n <span class=\\\"ax-scheduler-week-header-date-day-num\\\">\\n {{ daySlot.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\\n </span>\\n </div>\\n <ax-scheduler-timeline-day-view\\n [date]=\\\"daySlot.date\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [appointments]=\\\"daySlot.originalAppointmentsForThisDay\\\"\\n (slotClickedInternal)=\\\"slotClickedInternal.emit($event)\\\"\\n (slotDblClickedInternal)=\\\"slotDblClickedInternal.emit($event)\\\"\\n (slotRightClickedInternal)=\\\"slotRightClickedInternal.emit($event)\\\"\\n (onAppointmentDropInternal)=\\\"onAppointmentDropInternal.emit($event)\\\"\\n (appointmentClickedInternal)=\\\"appointmentClickedInternal.emit($event)\\\"\\n (appointmentDblClickedInternal)=\\\"appointmentDblClickedInternal.emit($event)\\\"\\n (appointmentRightClickedInternal)=\\\"appointmentRightClickedInternal.emit($event)\\\"\\n >\\n </ax-scheduler-timeline-day-view>\\n </div>\\n }\\n</div>\\n\", styles: [\"ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container{height:100%;display:flex;flex-direction:row}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day{gap:.25rem;height:4rem;display:flex;position:relative;align-items:start;padding-inline:1rem;flex-direction:column;padding-block:.25rem;justify-content:center;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-char{font-weight:500}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-num{font-weight:700}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-char{max-width:100%;position:sticky;font-weight:300;inset-inline-start:1rem}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-num{position:sticky;font-weight:500;font-size:1.25rem;inset-inline-start:1rem}ax-scheduler-timeline-multi-day-view ax-scheduler-timeline-day-view{height:calc(100% - 4rem)}\\n\"] }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLXRpbWVsaW5lLW11bHRpLWRheS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NyYy9saWIvdmlld3MvdGltZWxpbmUtbXVsdGktZGF5L3NjaGVkdWxlci10aW1lbGluZS1tdWx0aS1kYXktdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3ZpZXdzL3RpbWVsaW5lLW11bHRpLWRheS9zY2hlZHVsZXItdGltZWxpbmUtbXVsdGktZGF5LXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQTZCLE1BQU0sd0JBQXdCLENBQUM7QUFDdEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU92SCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSx1REFBdUQsQ0FBQzs7QUFtQjVHLE1BQU0sT0FBTyx3Q0FBeUMsU0FBUSxXQUFXO0lBVHpFOztRQVVVLG9CQUFlLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENB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RSxTQUFTLHlDQUFFLFlBQVksK0NBQUUsa0JBQWtCOzsyRkFHL0Usd0NBQXdDO2tCQVRwRCxTQUFTOytCQUNFLHNDQUFzQyxtQkFHL0IsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxXQUM1QixDQUFDLG1DQUFtQyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsa0JBQWtCLENBQUMsYUFDaEYsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVywwQ0FBMEMsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhDb21wb25lbnQsIE5YQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90b29sdGlwJztcbmltcG9ydCB7IEFYQ2FsZW5kYXJTZXJ2aWNlLCBBWERhdGVUaW1lLCBBWEhvbGlkYXlEYXRlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2RhdGUtdGltZSc7XG5pbXBvcnQgeyBBWEZvcm1hdFBpcGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvZm9ybWF0JztcbmltcG9ydCB7IEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBWaWV3RW5jYXBzdWxhdGlvbiwgY29tcHV0ZWQsIGluamVjdCwgaW5wdXQsIG91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJBcHBvaW50bWVudCB9IGZyb20gJy4uLy4uL3NjaGVkdWxlci5jbGFzcyc7XG5pbXBvcnQge1xuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudCxcbiAgQVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50LFxuICBBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50LFxufSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEFYU2NoZWR1bGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NjaGVkdWxlci5zZXJ2aWNlJztcbmltcG9ydCB7IEFYU2NoZWR1bGVyVGltZWxpbmVEYXlWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi4vdGltZWxpbmUtZGF5L3NjaGVkdWxlci10aW1lbGluZS1kYXktdmlldy5jb21wb25lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVsaW5lTXVsdGlEYXlEYXlTbG90IHtcbiAgZGF0ZTogQVhEYXRlVGltZTtcbiAgLy8gUGFzcyB0aGUgUkFXIG9yaWdpbmFsIGFwcG9pbnRtZW50cyB0aGF0ICpvdmVybGFwKiB3aXRoIHRoaXMgZGF5LlxuICAvLyBUaGUgY2hpbGQgdGltZWxpbmUtZGF5LXZpZXcgd2lsbCBoYW5kbGUgc2VnbWVudGF0aW9uLlxuICBvcmlnaW5hbEFwcG9pbnRtZW50c0ZvclRoaXNEYXk6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRbXTtcbiAgaG9saWRheT86IHsgc3RhdGU6ICdob2xpZGF5JyB8ICd3ZWVrZW5kJyB8ICdub25lJzsgaG9saWRheT86IEFYSG9saWRheURhdGUgfTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtc2NoZWR1bGVyLXRpbWVsaW5lLW11bHRpLWRheS12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NjaGVkdWxlci10aW1lbGluZS1tdWx0aS1kYXktdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9zY2hlZHVsZXItdGltZWxpbmUtbXVsdGktZGF5LXZpZXcuY29tcG9uZW50LnNjc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW0FYU2NoZWR1bGVyVGltZWxpbmVEYXlWaWV3Q29tcG9uZW50LCBBc3luY1BpcGUsIEFYRm9ybWF0UGlwZSwgQVhUb29sdGlwRGlyZWN0aXZlXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBBWENvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYU2NoZWR1bGVyVGltZWxpbmVNdWx0aURheVZpZXdDb21wb25lbnQgfV0sXG59KVxuZXhwb3J0IGNsYXNzIEFYU2NoZWR1bGVyVGltZWxpbmVNdWx0aURheVZpZXdDb21wb25lbnQgZXh0ZW5kcyBOWENvbXBvbmVudCB7XG4gIHByaXZhdGUgY2FsZW5kYXJTZXJ2aWNlID0gaW5qZWN0KEFYQ2FsZW5kYXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzY2hlZHVsZXJTZXJ2aWNlID0gaW5qZWN0KEFYU2NoZWR1bGVyU2VydmljZSk7XG5cbiAgZGF5c0NvdW50ID0gaW5wdXQoNyk7XG4gIHJlYWRvbmx5ID0gaW5wdXQoZmFsc2UpO1xuICBkcmFnZ2FibGUgPSBpbnB1dCh0cnVlKTtcbiAgY2FsZW5kYXIgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIGRhdGUgPSBpbnB1dC5yZXF1aXJlZDxBWERhdGVUaW1lPigpO1xuICBlbmREYXlIb3VyID0gaW5wdXQucmVxdWlyZWQ8bnVtYmVyPigpO1xuICBzdGFydERheUhvdXIgPSBpbnB1dC5yZXF1aXJlZDxudW1iZXI+KCk7XG4gIGFwcG9pbnRtZW50cyA9IGlucHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRbXT4oW10pO1xuXG4gIGRheXNEYXRhRm9yVGltZWxpbmVWaWV3cyA9IGNvbXB1dGVkPFRpbWVsaW5lTXVsdGlEYXlEYXlTbG90W10+KCgpID0+IHtcbiAgICBjb25zdCBhbGxPcmlnaW5hbEFwcG9pbnRtZW50cyA9IHRoaXMuYXBwb2ludG1lbnRzKCk7XG4gICAgY29uc3QgbXVsdGlWaWV3U3RhcnREYXRlID0gdGhpcy5kYXRlKCk7XG4gICAgY29uc3QgbnVtYmVyT2ZEYXlzID0gdGhpcy5kYXlzQ291bnQoKTtcblxuICAgIGlmICghbXVsdGlWaWV3U3RhcnREYXRlIHx8ICFhbGxPcmlnaW5hbEFwcG9pbnRtZW50cykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdDogVGltZWxpbmVNdWx0aURheURheVNsb3RbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1iZXJPZkRheXM7IGkrKykge1xuICAgICAgY29uc3QgY3VycmVudERheURhdGUgPSBtdWx0aVZpZXdTdGFydERhdGUuYWRkKCdkYXknLCBpKTtcbiAgICAgIGNvbnN0IGN1cnJlbnREYXlTdGFydCA9IGN1cnJlbnREYXlEYXRlLnN0YXJ0T2YoJ2RheScpO1xuICAgICAgY29uc3QgY3VycmVudERheUVuZCA9IGN1cnJlbnREYXlEYXRlLmVuZE9mKCdkYXknKTsgLy8gVXNlIGZ1bGwgZGF5IGZvciBvdmVybGFwIGNoZWNrXG5cbiAgICAgIGNvbnN0IGFwcG9pbnRtZW50c092ZXJsYXBwaW5nVGhpc0RheSA9IGFsbE9yaWdpbmFsQXBwb2ludG1lbnRzLmZpbHRlcigoYXBwdCkgPT4ge1xuICAgICAgICBpZiAoYXBwdC5hbGxEYXkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXBwdFN0YXJ0ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGFwcHQuc3RhcnREYXRlLCB0aGlzLmNhbGVuZGFyKCkpO1xuICAgICAgICBjb25zdCBhcHB0RW5kID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGFwcHQuZW5kRGF0ZSwgdGhpcy5jYWxlbmRhcigpKTtcbiAgICAgICAgcmV0dXJuIGFwcHRTdGFydC5jb21wYXJlKGN1cnJlbnREYXlFbmQsICdzZWNvbmQnKSA8PSAwICYmIGFwcHRFbmQuY29tcGFyZShjdXJyZW50RGF5U3RhcnQsICdzZWNvbmQnKSA+PSAwO1xuICAgICAgfSk7XG5cbiAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgZGF0ZTogY3VycmVudERheURhdGUsXG4gICAgICAgIGhvbGlkYXk6IHRoaXMuaXNIb2xpZGF5KGN1cnJlbnREYXlEYXRlKSxcbiAgICAgICAgb3JpZ2luYWxBcHBvaW50bWVudHNGb3JUaGlzRGF5OiBhcHBvaW50bWVudHNPdmVybGFwcGluZ1RoaXNEYXksXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG5cbiAgc2xvdENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBzbG90RGJsQ2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIHNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBhcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgYXBwb2ludG1lbnREYmxDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIGFwcG9pbnRtZW50UmlnaHRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIG9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50PigpO1xuXG4gIHByb3RlY3RlZCBpc1RvZGF5KGRhdGU6IEFYRGF0ZVRpbWUpOiBib29sZWFuIHtcbiAgICBjb25zdCB0b2RheSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShuZXcgRGF0ZSgpKTtcbiAgICByZXR1cm4gZGF0ZS5lcXVhbCh0b2RheSwgJ2RheScpO1xuICB9XG4gIHByb3RlY3RlZCBpc0hvbGlkYXkoZGF0ZTogQVhEYXRlVGltZSk6IHsgc3RhdGU6ICdob2xpZGF5JyB8ICd3ZWVrZW5kJyB8ICdub25lJzsgaG9saWRheT86IEFYSG9saWRheURhdGUgfSB7XG4gICAgY29uc3QgaXNIb2xpZGF5ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmlzSG9saWRheShkYXRlKTtcbiAgICBpZiAoaXNIb2xpZGF5KSB7XG4gICAgICBjb25zdCBob2xpZGF5ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuaG9saWRheXMuZmlsdGVyKChkKSA9PiBkYXRlLmVxdWFsKGQuZGF0ZSwgJ2RheScpKVswXTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXRlOiAnaG9saWRheScsXG4gICAgICAgIGhvbGlkYXksXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBpc1dlZWtlbmQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaXNXZWVrZW5kKGRhdGUsIHRoaXMuY2FsZW5kYXIoKSk7XG4gICAgaWYgKGlzV2Vla2VuZCkge1xuICAgICAgcmV0dXJuIHsgc3RhdGU6ICd3ZWVrZW5kJyB9O1xuICAgIH1cbiAgICByZXR1cm4geyBzdGF0ZTogJ25vbmUnIH07XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItdGltZWxpbmUtZGF5LXZpZXctY29udGFpbmVyXCI+XG4gIEBmb3IgKGRheVNsb3Qgb2YgZGF5c0RhdGFGb3JUaW1lbGluZVZpZXdzKCk7IHRyYWNrIGRheVNsb3QuZGF0ZS5kYXRlLmdldFRpbWUoKSkge1xuICAgIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItdGltZWxpbmUtbXVsdGktZGF5LWNvbHVtblwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci13ZWVrLWhlYWRlci1kYXRlLWRheVwiXG4gICAgICAgIFtjbGFzcy5heC1zdGF0ZS10b2RheV09XCJpc1RvZGF5KGRheVNsb3QuZGF0ZSlcIlxuICAgICAgICBbY2xhc3MuYXgtc3RhdGUtaG9saWRheV09XCJkYXlTbG90LmhvbGlkYXkuc3RhdGUgIT09ICdub25lJ1wiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItd2Vlay1oZWFkZXItZGF0ZS1kYXktY2hhciBheC1zY2hlZHVsZXItdHJ1bmNhdGVcIlxuICAgICAgICAgIFtheFRvb2x0aXBdPVwiZGF5U2xvdC5ob2xpZGF5Py5ob2xpZGF5Py50aXRsZSA/PyAnJ1wiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBkYXlTbG90LmRhdGUgfCBmb3JtYXQ6ICdkYXRlJyA6IHsgZm9ybWF0OiAnZGRkZCcsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgICAgIEBpZiAoZGF5U2xvdC5ob2xpZGF5LnN0YXRlID09PSAnaG9saWRheScgJiYgZGF5U2xvdC5ob2xpZGF5LmhvbGlkYXkudGl0bGUpIHtcbiAgICAgICAgICAgICgge3sgZGF5U2xvdC5ob2xpZGF5LmhvbGlkYXkudGl0bGUgfX0gKVxuICAgICAgICAgIH1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImF4LXNjaGVkdWxlci13ZWVrLWhlYWRlci1kYXRlLWRheS1udW1cIj5cbiAgICAgICAgICB7eyBkYXlTbG90LmRhdGUgfCBmb3JtYXQ6ICdkYXRlJyA6IHsgZm9ybWF0OiAnREQnLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8YXgtc2NoZWR1bGVyLXRpbWVsaW5lLWRheS12aWV3XG4gICAgICAgIFtkYXRlXT1cImRheVNsb3QuZGF0ZVwiXG4gICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgICAgW2RyYWdnYWJsZV09XCJkcmFnZ2FibGUoKVwiXG4gICAgICAgIFtlbmREYXlIb3VyXT1cImVuZERheUhvdXIoKVwiXG4gICAgICAgIFtzdGFydERheUhvdXJdPVwic3RhcnREYXlIb3VyKClcIlxuICAgICAgICBbYXBwb2ludG1lbnRzXT1cImRheVNsb3Qub3JpZ2luYWxBcHBvaW50bWVudHNGb3JUaGlzRGF5XCJcbiAgICAgICAgKHNsb3RDbGlja2VkSW50ZXJuYWwpPVwic2xvdENsaWNrZWRJbnRlcm5hbC5lbWl0KCRldmVudClcIlxuICAgICAgICAoc2xvdERibENsaWNrZWRJbnRlcm5hbCk9XCJzbG90RGJsQ2xpY2tlZEludGVybmFsLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgIChzbG90UmlnaHRDbGlja2VkSW50ZXJuYWwpPVwic2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgIChvbkFwcG9pbnRtZW50RHJvcEludGVybmFsKT1cIm9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgKGFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsKT1cImFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgIChhcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbCk9XCJhcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbC5lbWl0KCRldmVudClcIlxuICAgICAgICAoYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCk9XCJhcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsLmVtaXQoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICA8L2F4LXNjaGVkdWxlci10aW1lbGluZS1kYXktdmlldz5cbiAgICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG4iXX0=","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXDragDirective, AXDropZoneDirective } from '@acorex/cdk/drag-drop';\nimport { AXDecoratorGenericComponent } from '@acorex/components/decorators';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe, NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, HostBinding, inject, input, output, ViewEncapsulation, } from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport { AXSchedulerComponent, } from '../../scheduler.component';\nimport { AXSchedulerService } from '../../scheduler.service';\nimport * as i0 from \"@angular/core\";\nexport class AXSchedulerWeekViewComponent extends NXComponent {\n constructor() {\n super(...arguments);\n this.scheduler = inject(AXSchedulerComponent);\n this.calendarService = inject(AXCalendarService);\n this.schedulerService = inject(AXSchedulerService);\n this.GAP_PX = 1;\n this.readonly = input(false);\n this.draggable = input(true);\n this.calendar = input();\n this.date = input.required();\n this.endDayHour = input.required();\n this.startDayHour = input.required();\n this.appointments = input([]);\n /**\n * Processes all original appointments and generates day-specific segments for the entire week.\n * Each segment represents the visible part of an appointment on a particular day.\n * The segment's 'allDay' flag indicates if it should be in the all-day slot or timed grid for that day.\n */\n this.processedAppointmentsForLayout = computed(() => {\n const viewDays = this.daysArray().map((e) => e.date); // Array of AXDateTime for each day in the week\n const allOriginalAppointments = this.appointments(); // Raw appointments from input\n const viewConfigStartHour = this.startDayHour(); // Configured start hour for the timed grid\n const viewConfigEndHour = this.endDayHour(); // Configured end hour for the timed grid\n if (!viewDays || viewDays.length === 0 || !allOriginalAppointments || allOriginalAppointments.length === 0) {\n return [];\n }\n const allSegmentsInView = [];\n for (const day of viewDays) {\n // For each day in the week\n const dayAsStartOfDay = day.startOf('day'); // Use startOf('day') for consistent cache key if AXDateTime interns\n for (const appt of allOriginalAppointments) {\n // Determine segmentation boundaries for this specific 'day':\n // - If original appt is allDay, segment across the full 0-24h of 'day'.\n // The service method will ensure segment.allDay is true.\n // - If original appt is timed, segment across viewConfigStartHour-viewConfigEndHour.\n // The service method will set segment.allDay=true if this timed segment fills that window.\n const effectiveSegmentStartHour = appt.allDay ? 0 : viewConfigStartHour;\n const effectiveSegmentEndHour = appt.allDay ? 24 : viewConfigEndHour;\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, dayAsStartOfDay, // Pass the AXDateTime object for the current day in loop\n effectiveSegmentStartHour, effectiveSegmentEndHour);\n if (segment) {\n allSegmentsInView.push(segment);\n }\n }\n }\n // Deduplicate segments. A segment is unique by its original key and its specific start/end on a day.\n // The service method already produces day-specific start/end times.\n const uniqueSegmentsMap = new Map();\n allSegmentsInView.forEach((seg) => {\n // Create a unique key for the segment based on original appt key and segment's own date range\n const segStart = this.calendarService.create(seg.startDate, this.calendar());\n const segEnd = this.calendarService.create(seg.endDate, this.calendar());\n const mapKey = `${seg.id}-${segStart.format('YYYYMMDDHHmmssSSS')}-${segEnd.format('YYYYMMDDHHmmssSSS')}`;\n if (!uniqueSegmentsMap.has(mapKey)) {\n uniqueSegmentsMap.set(mapKey, seg);\n }\n });\n return Array.from(uniqueSegmentsMap.values());\n });\n /**\n * Segments that are to be displayed in the timed grid area of the week view.\n * These are segments from processedAppointmentsForLayout where segment.allDay is false.\n */\n this.timedGridSegments = computed(() => {\n return this.processedAppointmentsForLayout()?.filter((segment) => !segment.allDay) ?? [];\n });\n // Internal outputs to be caught by parent AXSchedulerComponent\n this.slotClickedInternal = output();\n this.slotDblClickedInternal = output();\n this.slotRightClickedInternal = output();\n this.appointmentClickedInternal = output();\n this.appointmentDblClickedInternal = output();\n this.appointmentRightClickedInternal = output();\n this.onAppointmentDropInternal = output();\n // --- Event Handlers ---\n this.eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n this.hoursArray = computed(() => {\n let time = this.date();\n if (!time)\n return [];\n time = time.set('hour', this.startDayHour()).startOf('hour');\n const hours = [time];\n while (time.hour < this.endDayHour() - 1) {\n time = time.add('hour', 1);\n hours.push(time);\n }\n return hours;\n });\n this.daysArray = computed(() => {\n const time = this.date();\n if (!time)\n return [];\n const days = [{ date: time, holiday: this.isHoliday(time) }];\n for (let index = 1; index <= 6; index++) {\n const date = time.add('day', index);\n days.push({ date, holiday: this.isHoliday(date) });\n }\n return days;\n });\n this.totalBlocksPerViewDay = computed(() => {\n const startH = this.startDayHour();\n const endH = this.endDayHour();\n if (typeof startH !== 'number' || typeof endH !== 'number')\n return 0;\n return Math.max(0, (endH - startH) * (60 / 30));\n });\n this.appointmentsByStartBlock = computed(() => {\n const viewDate = this.date(); // This should be the start date of the week\n const startH = this.startDayHour();\n const endH = this.endDayHour();\n if (!viewDate || typeof startH !== 'number' || typeof endH !== 'number')\n return {};\n // Pass the timedGridSegments to the service method\n return this.schedulerService.calculateWeekViewAppointmentsByStartBlock(this.timedGridSegments(), // CHANGED from singleDayAppointments\n viewDate, startH, endH);\n });\n this.activeAppointmentsInBlock = computed(() => {\n const viewDate = this.date(); // Start date of the week\n const startH = this.startDayHour();\n const endH = this.endDayHour();\n if (!viewDate || typeof startH !== 'number' || typeof endH !== 'number')\n return {};\n // Pass the timedGridSegments to the service method\n return this.schedulerService.calculateActiveAppointmentsInBlock(this.timedGridSegments(), // CHANGED from singleDayAppointments\n viewDate, startH, endH, 7);\n });\n this.visibleAppointmentsLayout = computed(() => {\n const layouts = [];\n const startingBlocks = this.appointmentsByStartBlock();\n const daysCount = 7;\n const totalBlocksPerDay = this.totalBlocksPerViewDay();\n const blockHeightExpr = `var(--ax-comp-scheduler-basic-view-blocks-height, 30px)`;\n const N = daysCount;\n const occupiedBlocks = {};\n for (let dayIndex = 0; dayIndex < daysCount; dayIndex++) {\n const dayBlocks = startingBlocks[dayIndex] ?? {};\n for (let blockIndex = 0; blockIndex < totalBlocksPerDay; blockIndex++) {\n if (occupiedBlocks[dayIndex]?.[blockIndex])\n continue;\n const startingAppointments = dayBlocks[blockIndex] ?? [];\n if (startingAppointments.length > 0) {\n const appointmentToShow = orderBy(startingAppointments, [(e) => e.endDate.getTime()], ['desc'])[0];\n const C = dayIndex;\n let layoutLeft = '0px';\n if (C > 0 && N > 1)\n layoutLeft = `calc(${C * (100 / N)}%)`;\n const layoutTop = `calc(${blockHeightExpr} * ${blockIndex})`;\n let layoutHeight = '0px';\n let appointmentDurationMinutes = 0;\n if (appointmentToShow.endDate && appointmentToShow.startDate) {\n appointmentDurationMinutes = this.schedulerService.calculateDurationInMinutes(appointmentToShow);\n if (appointmentDurationMinutes > 0) {\n const heightBlock = appointmentDurationMinutes / 30;\n layoutHeight = `max(0px, calc(${blockHeightExpr} * ${heightBlock} - ${this.GAP_PX}px))`;\n }\n }\n layouts.push({\n layoutTop,\n layoutLeft,\n layoutHeight,\n appointment: appointmentToShow,\n layoutWidth: 'calc(100% / 7 - 2rem)',\n });\n const blocksToOccupy = Math.ceil(appointmentDurationMinutes / 30);\n for (let i = 0; i < blocksToOccupy; i++) {\n const occupiedBlockIndex = blockIndex + i;\n if (occupiedBlockIndex < totalBlocksPerDay) {\n if (!occupiedBlocks[dayIndex])\n occupiedBlocks[dayIndex] = {};\n if (!occupiedBlocks[dayIndex][occupiedBlockIndex]) {\n occupiedBlocks[dayIndex][occupiedBlockIndex] = appointmentToShow.id;\n }\n }\n else {\n break;\n }\n }\n }\n }\n }\n return layouts;\n });\n this.visualOccupancyMap = computed(() => {\n const map = new Map();\n const visibleLayouts = this.visibleAppointmentsLayout();\n const viewStartDate = this.date();\n const startH = this.startDayHour();\n const endH = this.endDayHour();\n const totalBlocksPerDay = this.totalBlocksPerViewDay();\n if (!viewStartDate || typeof startH !== 'number' || typeof endH !== 'number')\n return map;\n for (const appointmentLayout of visibleLayouts) {\n const startInfo = this.schedulerService.getBlockIdentifier(this.calendarService.create(appointmentLayout.appointment.startDate, this.calendar()), viewStartDate, startH, endH, 7);\n if (!startInfo)\n continue;\n const durationMinutes = this.schedulerService.calculateDurationInMinutes(appointmentLayout.appointment);\n const blocksToOccupy = Math.ceil(durationMinutes / 30);\n for (let i = 0; i < blocksToOccupy; i++) {\n const occupiedBlockIndex = startInfo.blockIndex + i;\n if (occupiedBlockIndex >= 0 && occupiedBlockIndex < totalBlocksPerDay) {\n const mapKey = `${startInfo.dayIndex}-${occupiedBlockIndex}`;\n if (!map.has(mapKey)) {\n map.set(mapKey, appointmentLayout.appointment.id);\n }\n }\n else {\n break;\n }\n }\n }\n return map;\n });\n this.overflowBadges = computed(() => {\n const badges = [];\n const activeBlocks = this.activeAppointmentsInBlock();\n const occupancyMap = this.visualOccupancyMap();\n const daysCount = 7;\n const totalBlocksPerDay = this.totalBlocksPerViewDay();\n const blockHeightExpr = `var(--ax-comp-scheduler-basic-view-blocks-height, 30px)`;\n const N = daysCount;\n if (!activeBlocks || !occupancyMap || totalBlocksPerDay === 0)\n return badges;\n const countedHiddenAppointmentKeysToday = new Map();\n for (let dayIndex = 0; dayIndex < daysCount; dayIndex++) {\n countedHiddenAppointmentKeysToday.set(dayIndex, new Set());\n for (let blockIndex = 0; blockIndex < totalBlocksPerDay; blockIndex++) {\n const blockMapKey = `${dayIndex}-${blockIndex}`;\n const activeAppointments = activeBlocks[dayIndex]?.[blockIndex] ?? [];\n if (activeAppointments.length === 0)\n continue;\n const visibleAppointmentKey = occupancyMap.get(blockMapKey);\n const hiddenAppointments = activeAppointments.filter((appointment) => appointment.id !== visibleAppointmentKey);\n const newlyHidden = hiddenAppointments.filter((e) => !countedHiddenAppointmentKeysToday.get(dayIndex).has(e.id));\n if (newlyHidden.length > 0) {\n const C = dayIndex;\n let baseColLeft = '0px';\n if (C > 0 && N > 1)\n baseColLeft = `calc(${C * (100 / N)}%)`;\n const baseTop = `calc(${blockHeightExpr} * ${blockIndex})`;\n const badgeLeft = `calc(${baseColLeft} + calc(100% / ${N} - 1.75rem))`;\n const badgeTop = `calc(${baseTop} + 0.75rem)`;\n badges.push({ key: blockMapKey, count: newlyHidden.length, badgeTop, badgeLeft });\n newlyHidden.forEach((e) => countedHiddenAppointmentKeysToday.get(dayIndex).add(e.id));\n }\n }\n }\n return badges;\n });\n /**\n * Structures all-day (or \"becomes all-day\") segments for rendering in the all-day slots for each day of the week.\n */\n this.allDayAppointmentsPerDay = computed(() => {\n const daysInWeek = this.daysArray().map((e) => e.date); // AXDateTime objects for each day in the week\n const allSegmentsInView = this.processedAppointmentsForLayout(); // All processed segments\n const result = [];\n if (!daysInWeek || daysInWeek.length === 0)\n return result;\n daysInWeek.forEach((dayDate) => {\n const currentDayStart = dayDate.startOf('day'); // For accurate day comparison\n // Filter segments that are marked as 'allDay' AND belong to the current 'dayDate'\n const allDaySegmentsForThisDay = allSegmentsInView.filter((segment) => segment.allDay &&\n this.calendarService.create(segment.startDate, this.calendar()).startOf('day').equal(currentDayStart, 'day'));\n // Sort these segments for consistent display\n // Primarily by original start time, then by duration of original appointment, then title\n const sortedAppointmentsForThisDay = orderBy(allDaySegmentsForThisDay, [\n (s) => s.originalStartDate.getTime(),\n (s) => s.originalEndDate.getTime() - s.originalStartDate.getTime(),\n (s) => s.title?.toLowerCase() ?? '',\n ], ['asc', 'desc', 'asc']);\n result.push({\n day: dayDate, // The AXDateTime for this day column\n appointments: sortedAppointmentsForThisDay, // Array of segments for the all-day slot\n });\n });\n return result;\n });\n this.overflowBadgesWithData = computed(() => {\n const badgesInfo = [];\n const activeBlocks = this.activeAppointmentsInBlock();\n const occupancyMap = this.visualOccupancyMap();\n const daysCount = 7;\n const totalBlocksPerDay = this.totalBlocksPerViewDay();\n const blockHeightExpr = `var(--ax-comp-scheduler-basic-view-blocks-height, 30px)`;\n const N = daysCount;\n if (!activeBlocks || !occupancyMap || totalBlocksPerDay === 0)\n return badgesInfo;\n const countedHiddenAppointmentKeysToday = new Map();\n for (let dayIndex = 0; dayIndex < daysCount; dayIndex++) {\n countedHiddenAppointmentKeysToday.set(dayIndex, new Set());\n for (let blockIndex = 0; blockIndex < totalBlocksPerDay; blockIndex++) {\n const blockMapKey = `${dayIndex}-${blockIndex}`;\n const activeAppointments = activeBlocks[dayIndex]?.[blockIndex] ?? [];\n if (activeAppointments.length === 0)\n continue;\n const visibleAppointmentKey = occupancyMap.get(blockMapKey);\n // Find all hidden appointments for this specific block\n const hiddenAppointments = activeAppointments.filter((appointment) => appointment.id !== visibleAppointmentKey);\n // Find which of those hidden ones haven't been counted today yet\n const newlyHidden = hiddenAppointments.filter((e) => !countedHiddenAppointmentKeysToday.get(dayIndex).has(e.id));\n if (newlyHidden.length > 0) {\n const C = dayIndex;\n let baseColLeft = '0px';\n if (C > 0 && N > 1)\n baseColLeft = `calc(${C * (100 / N)}%)`;\n const baseTop = `calc(${blockHeightExpr} * ${blockIndex})`;\n // Keep your positioning logic for the badge itself\n const badgeLeft = `calc(${baseColLeft} + calc(100% / ${N} - 1.75rem))`;\n const badgeTop = `calc(${baseTop} + 0.75rem)`;\n // Store the badge info *and* the list of appointments it represents\n badgesInfo.push({\n key: blockMapKey,\n count: newlyHidden.length,\n badgeTop,\n badgeLeft,\n hiddenAppointments: newlyHidden, // Store the actual hidden appointments\n });\n // Mark these as counted for today\n newlyHidden.forEach((e) => countedHiddenAppointmentKeysToday.get(dayIndex).add(e.id));\n }\n }\n }\n // Sort the badges by top then left for consistent rendering order? (Optional)\n // badgesInfo.sort((a, b) => {\n // const topCompare = a.badgeTop.localeCompare(b.badgeTop);\n // if (topCompare !== 0) return topCompare;\n // return a.badgeLeft.localeCompare(b.badgeLeft);\n // });\n return badgesInfo;\n });\n }\n handleAppointmentEvent(mouseEvent, appointmentSegment) {\n // 'appointmentSegment' here is the segment that was interacted with\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentSegment);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, appointment: appointmentRef, sender: this.scheduler }, this.eventOutputMap, 'appointment');\n }\n handleSingleSlotEvent(mouseEvent, hour, day, minuteIndex) {\n const startDate = day.set('hour', hour.hour).set('minute', minuteIndex * 30);\n const slotData = this.schedulerService.getSlotData(startDate, 'week');\n if (slotData)\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler }, this.eventOutputMap, 'slot');\n }\n handleAllDaySlotEvent(mouseEvent, day) {\n const endDate = day.endOf('day');\n const startDate = day.startOf('day');\n const slotData = { startDate, endDate, view: 'week' };\n if (slotData)\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler }, this.eventOutputMap, 'slot');\n }\n handleAllDayDrop(e, day) {\n const endDate = day.endOf('day');\n const startDate = day.startOf('day');\n const slotData = { startDate, endDate, view: 'week' };\n const droppedItem = e.dropped.dragData();\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n });\n }\n handleSingleDayDrop(e, hour, day, minuteIndex) {\n const startDate = day.set('hour', hour.hour).set('minute', minuteIndex * 30);\n const slotData = this.schedulerService.getSlotData(startDate, 'week');\n const droppedItem = e.dropped.dragData();\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n });\n }\n isToday(date) {\n const today = this.calendarService.create(new Date());\n return date.equal(today, 'day');\n }\n isHoliday(date) {\n const isHoliday = this.schedulerService.isHoliday(date);\n if (isHoliday) {\n const holiday = this.calendarService.holidays.filter((d) => date.equal(d.date, 'day'))[0];\n return {\n state: 'holiday',\n holiday,\n };\n }\n const isWeekend = this.schedulerService.isWeekend(date, this.calendar());\n if (isWeekend) {\n return { state: 'weekend' };\n }\n return { state: 'none' };\n }\n get isReadonly() {\n return this.readonly();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerWeekViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.4\", type: AXSchedulerWeekViewComponent, isStandalone: true, selector: \"ax-scheduler-week-view\", inputs: { readonly: { classPropertyName: \"readonly\", publicName: \"readonly\", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: \"draggable\", publicName: \"draggable\", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: \"calendar\", publicName: \"calendar\", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: \"date\", publicName: \"date\", isSignal: true, isRequired: true, transformFunction: null }, endDayHour: { classPropertyName: \"endDayHour\", publicName: \"endDayHour\", isSignal: true, isRequired: true, transformFunction: null }, startDayHour: { classPropertyName: \"startDayHour\", publicName: \"startDayHour\", isSignal: true, isRequired: true, transformFunction: null }, appointments: { classPropertyName: \"appointments\", publicName: \"appointments\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: \"slotClickedInternal\", slotDblClickedInternal: \"slotDblClickedInternal\", slotRightClickedInternal: \"slotRightClickedInternal\", appointmentClickedInternal: \"appointmentClickedInternal\", appointmentDblClickedInternal: \"appointmentDblClickedInternal\", appointmentRightClickedInternal: \"appointmentRightClickedInternal\", onAppointmentDropInternal: \"onAppointmentDropInternal\" }, host: { properties: { \"class.ax-state-readonly\": \"this.isReadonly\" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerWeekViewComponent }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-scheduler-week-header\\\">\\n <div class=\\\"ax-scheduler-week-header-days\\\">\\n <div class=\\\"ax-scheduler-week-header-table\\\"></div>\\n <div class=\\\"ax-scheduler-week-header-date\\\" aria-hidden=\\\"true\\\">\\n @for (day of daysArray(); track day.date.date.getTime()) {\\n <div\\n [class.ax-state-today]=\\\"isToday(day.date)\\\"\\n class=\\\"ax-scheduler-week-header-date-day\\\"\\n [class.ax-state-holiday]=\\\"day.holiday.state !== 'none'\\\"\\n >\\n <span\\n class=\\\"ax-scheduler-week-header-date-day-char ax-scheduler-truncate\\\"\\n [axTooltip]=\\\"day.holiday?.holiday?.title ?? ''\\\"\\n >\\n {{ day.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n @if (day.holiday.state === 'holiday' && day.holiday.holiday.title) {\\n ( {{ day.holiday.holiday.title }} )\\n }\\n </span>\\n <span class=\\\"ax-scheduler-week-header-date-day-num\\\">\\n {{ day.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\\n </span>\\n </div>\\n }\\n </div>\\n </div>\\n <div class=\\\"ax-scheduler-week-header-days\\\">\\n <div class=\\\"ax-scheduler-week-header-table\\\">{{ 'dateTime.duration.all-day' | translate | async }}</div>\\n <div aria-hidden=\\\"true\\\" class=\\\"ax-scheduler-week-header-date\\\">\\n @for (slotData of allDayAppointmentsPerDay(); track slotData.day.date.getTime()) {\\n <div\\n axDropZone\\n #zone2=\\\"axDropZone\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone2.isHovered()\\\"\\n (onElementDrop)=\\\"handleAllDayDrop($event, slotData.day)\\\"\\n class=\\\"ax-scheduler-all-day-slot\\\"\\n (click)=\\\"handleAllDaySlotEvent($event, slotData.day)\\\"\\n (dblclick)=\\\"handleAllDaySlotEvent($event, slotData.day)\\\"\\n (contextmenu)=\\\"handleAllDaySlotEvent($event, slotData.day)\\\"\\n >\\n @if (slotData.appointments.length > 0) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || slotData.appointments[0].readonly || readonly()\\\"\\n [dragData]=\\\"slotData.appointments[0]\\\"\\n (click)=\\\"handleAppointmentEvent($event, slotData.appointments[0])\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, slotData.appointments[0])\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, slotData.appointments[0])\\\"\\n [title]=\\\"slotData.appointments[0].title\\\"\\n class=\\\"ax-scheduler-header-week-appointment\\\"\\n [ngClass]=\\\"slotData.appointments[0].cssClass??`ax-scheduler-${slotData.appointments[0].priority??'primary'}-periority`\\\"\\n >\\n <ax-title class=\\\"ax-scheduler-truncate\\\">{{ slotData.appointments[0].title }}</ax-title>\\n </div>\\n }\\n @if (slotData.appointments.length > 1) {\\n <div\\n #moreAppointments\\n class=\\\"ax-scheduler-appointment-badge\\\"\\n [ngClass]=\\\"slotData.appointments[1].cssClass??`ax-scheduler-${slotData.appointments[1].priority??'primary'}-periority`\\\"\\n >\\n +{{ slotData.appointments.length - 1 }}\\n </div>\\n <ax-popover [target]=\\\"moreAppointments\\\" [placement]=\\\"'bottom'\\\">\\n <div class=\\\"ax-overlay-pane ax-scheduler-popover\\\" [class.ax-state-readonly]=\\\"readonly()\\\">\\n @for (appointment of slotData.appointments; track appointment.id; let first = $first) {\\n @if (!first) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"appointment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || appointment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n [title]=\\\"appointment.title\\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [ngClass]=\\\"appointment.cssClass??`ax-scheduler-${appointment.priority??'primary'}-periority`\\\"\\n >\\n <ax-title class=\\\"ax-scheduler-truncate\\\">{{ appointment.title }}</ax-title>\\n </div>\\n }\\n }\\n </div>\\n </ax-popover>\\n }\\n </div>\\n }\\n </div>\\n </div>\\n</div>\\n\\n<div class=\\\"ax-scheduler-week-time-container\\\">\\n <div class=\\\"ax-scheduler-week-time\\\" aria-hidden=\\\"true\\\">\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <div>\\n {{ time | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </div>\\n }\\n </div>\\n\\n <div class=\\\"ax-scheduler-week-table-container\\\">\\n <div class=\\\"ax-scheduler-week-appointment-container\\\">\\n @for (appt of visibleAppointmentsLayout(); track appt.appointment.id) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || appt.appointment.readonly || readonly()\\\"\\n [dragData]=\\\"appt.appointment\\\"\\n (click)=\\\"handleAppointmentEvent($event, appt.appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appt.appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appt.appointment)\\\"\\n [title]=\\\"appt.appointment.title\\\"\\n [style.height]=\\\"appt.layoutHeight\\\"\\n class=\\\"ax-scheduler-week-appointment\\\"\\n [style.inset-block-start]=\\\"appt.layoutTop\\\"\\n [style.inset-inline-start]=\\\"appt.layoutLeft\\\"\\n [ngClass]=\\\"appt.appointment.cssClass??`ax-scheduler-${appt.appointment.priority??'primary'}-periority`\\\"\\n >\\n <ax-title class=\\\"ax-scheduler-truncate\\\">{{ appt.appointment.title }}</ax-title>\\n <ax-subtitle>\\n {{\\n appt.appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{ appt.appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n\\n <!-- Overflow Badges with Popovers -->\\n @for (badge of overflowBadgesWithData(); track badge.key) {\\n <!-- Wrap badge and popover for targeting -->\\n <div\\n style=\\\"position: absolute\\\"\\n class=\\\"ax-scheduler-badge-wrapper\\\"\\n [style.inset-block-start]=\\\"badge.badgeTop\\\"\\n [style.inset-inline-start]=\\\"badge.badgeLeft\\\"\\n >\\n <!-- The Badge itself -->\\n <div\\n #actionButton\\n class=\\\"ax-scheduler-appointment-badge\\\"\\n [ngClass]=\\\"badge.hiddenAppointments[0].cssClass??`ax-scheduler-${badge.hiddenAppointments[0].priority??'primary'}-periority`\\\"\\n >\\n +{{ badge.count }}\\n </div>\\n <!-- The Popover -->\\n <ax-popover [target]=\\\"actionButton\\\" [placement]=\\\"'bottom'\\\">\\n <div class=\\\"ax-overlay-pane ax-scheduler-popover\\\">\\n @for (appointment of badge.hiddenAppointments; track appointment.id) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"appointment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || appointment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n [title]=\\\"appointment.title\\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [ngClass]=\\\"appointment.cssClass??`ax-scheduler-${appointment.priority??'primary'}-periority`\\\"\\n >\\n <ax-title class=\\\"ax-scheduler-truncate\\\">{{ appointment.title }}</ax-title>\\n <ax-subtitle>\\n {{\\n appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{\\n appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n </ax-subtitle>\\n </div>\\n }\\n </div>\\n </ax-popover>\\n </div>\\n }\\n </div>\\n\\n <table aria-hidden=\\\"true\\\" [border]=\\\"1\\\">\\n <tbody>\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <tr>\\n @for (day of daysArray(); track day.date.date.getTime()) {\\n <td\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n (onElementDrop)=\\\"handleSingleDayDrop($event, time, day.date, 0)\\\"\\n (click)=\\\"handleSingleSlotEvent($event, time, day.date, 0)\\\"\\n (dblclick)=\\\"handleSingleSlotEvent($event, time, day.date, 0)\\\"\\n (contextmenu)=\\\"handleSingleSlotEvent($event, time, day.date, 0)\\\"\\n ></td>\\n }\\n </tr>\\n <tr>\\n @for (day of daysArray(); track day.date.date.getTime()) {\\n <td\\n axDropZone\\n #zone2=\\\"axDropZone\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone2.isHovered()\\\"\\n (onElementDrop)=\\\"handleSingleDayDrop($event, time, day.date, 1)\\\"\\n (click)=\\\"handleSingleSlotEvent($event, time, day.date, 1)\\\"\\n (dblclick)=\\\"handleSingleSlotEvent($event, time, day.date, 1)\\\"\\n (contextmenu)=\\\"handleSingleSlotEvent($event, time, day.date, 1)\\\"\\n ></td>\\n }\\n </tr>\\n }\\n </tbody>\\n </table>\\n </div>\\n</div>\\n\", styles: [\"ax-scheduler-week-view{display:block;position:relative;background-color:inherit;min-width:var(--ax-comp-scheduler-width)}ax-scheduler-week-view .ax-scheduler-appointment-badge{display:flex;height:1.5rem;cursor:pointer;font-size:.75rem;align-items:center;border-radius:9999px;justify-content:center;width:1.5rem!important}ax-scheduler-week-view .ax-scheduler-week-header{top:0;z-index:2;width:100%;position:sticky;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days{display:flex;background-color:inherit;border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-table{flex-shrink:0;position:sticky;text-align:center;inset-inline-start:0;width:var(--ax-comp-scheduler-basic-view-blocks-width);background-color:inherit;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date{width:100%;display:flex}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div{width:100%;text-align:center;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day{gap:.25rem;display:grid;align-items:center;padding-inline:.5rem;justify-content:center}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-char{font-weight:500}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-num{font-weight:700}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-char{max-width:100%;font-weight:300}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-num{font-weight:500;font-size:1.25rem}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div:last-child{border-inline-end-width:0}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date .ax-scheduler-all-day-slot{gap:.25rem;display:flex;width:14.2857142857%}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date .ax-scheduler-all-day-slot .ax-scheduler-header-week-appointment{display:block;overflow:hidden;text-align:start;padding-inline:.5rem;width:calc(100% - 2rem);border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-week-view .ax-scheduler-week-time-container{width:100%;display:flex;background-color:inherit}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-time{z-index:1;position:sticky;inset-inline-start:0;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-time div{display:block;text-align:center;padding-inline:.5rem;width:var(--ax-comp-scheduler-basic-view-blocks-width);height:calc(var(--ax-comp-scheduler-basic-view-blocks-height) * 2);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container{width:100%;position:relative}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container .ax-scheduler-week-appointment-container{top:0;width:100%;position:absolute}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container .ax-scheduler-week-appointment-container .ax-scheduler-week-appointment{display:flex;position:absolute;inset-inline-start:0;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;width:calc(14.2857142857% - 2rem);border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table{width:100%}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr{display:flex;height:var(--ax-comp-scheduler-basic-view-blocks-height);border-block-start:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr:first-child{border-block-start-width:0}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr td{width:100%;text-align:center;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr td:last-child{border-inline-end-width:0}ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-week-appointment,ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-header-week-appointment{cursor:pointer}ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-all-day-slot,ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-week-table-container>table td{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-all-day-slot:hover,ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-week-table-container>table td:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}\\n\"], dependencies: [{ kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"component\", type: AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: AXTranslatorPipe, name: \"translate\" }, { kind: \"component\", type: AXPopoverComponent, selector: \"ax-popover\", inputs: [\"offsetX\", \"offsetY\", \"target\", \"placement\", \"content\", \"openOn\", \"closeOn\", \"hasBackdrop\", \"openAfter\", \"closeAfter\", \"backdropClass\", \"panelClass\", \"adaptivityEnabled\"], outputs: [\"onOpened\", \"onClosed\"] }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }, { kind: \"directive\", type: AXDragDirective, selector: \"[axDrag]\", inputs: [\"dragData\", \"dragDisabled\", \"dragTransition\", \"dragElementClone\", \"dropZoneGroup\", \"dragStartDelay\", \"dragResetOnDblClick\", \"dragLockAxis\", \"dragClonedTemplate\", \"dragCursor\", \"dragBoundary\", \"dragTransitionDuration\"], outputs: [\"dragPositionChanged\"] }, { kind: \"directive\", type: AXDropZoneDirective, selector: \"[axDropZone]\", inputs: [\"dropZoneGroup\"], outputs: [\"onElementDrop\", \"onElementHover\"], exportAs: [\"axDropZone\"] }, { kind: \"directive\", type: AXTooltipDirective, selector: \"[axTooltip]\", inputs: [\"axTooltip\", \"axTooltipPlacement\", \"axTooltipOffsetX\", \"axTooltipOffsetY\", \"axTooltipOpenAfter\", \"axTooltipCloseAfter\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerWeekViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-scheduler-week-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [\n NgClass,\n AXDecoratorGenericComponent,\n AsyncPipe,\n AXTranslatorPipe,\n AXPopoverComponent,\n AXFormatPipe,\n AXDragDirective,\n AXDropZoneDirective,\n AXTooltipDirective,\n ], providers: [{ provide: AXComponent, useExisting: AXSchedulerWeekViewComponent }], template: \"<div class=\\\"ax-scheduler-week-header\\\">\\n <div class=\\\"ax-scheduler-week-header-days\\\">\\n <div class=\\\"ax-scheduler-week-header-table\\\"></div>\\n <div class=\\\"ax-scheduler-week-header-date\\\" aria-hidden=\\\"true\\\">\\n @for (day of daysArray(); track day.date.date.getTime()) {\\n <div\\n [class.ax-state-today]=\\\"isToday(day.date)\\\"\\n class=\\\"ax-scheduler-week-header-date-day\\\"\\n [class.ax-state-holiday]=\\\"day.holiday.state !== 'none'\\\"\\n >\\n <span\\n class=\\\"ax-scheduler-week-header-date-day-char ax-scheduler-truncate\\\"\\n [axTooltip]=\\\"day.holiday?.holiday?.title ?? ''\\\"\\n >\\n {{ day.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n @if (day.holiday.state === 'holiday' && day.holiday.holiday.title) {\\n ( {{ day.holiday.holiday.title }} )\\n }\\n </span>\\n <span class=\\\"ax-scheduler-week-header-date-day-num\\\">\\n {{ day.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\\n </span>\\n </div>\\n }\\n </div>\\n </div>\\n <div class=\\\"ax-scheduler-week-header-days\\\">\\n <div class=\\\"ax-scheduler-week-header-table\\\">{{ 'dateTime.duration.all-day' | translate | async }}</div>\\n <div aria-hidden=\\\"true\\\" class=\\\"ax-scheduler-week-header-date\\\">\\n @for (slotData of allDayAppointmentsPerDay(); track slotData.day.date.getTime()) {\\n <div\\n axDropZone\\n #zone2=\\\"axDropZone\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone2.isHovered()\\\"\\n (onElementDrop)=\\\"handleAllDayDrop($event, slotData.day)\\\"\\n class=\\\"ax-scheduler-all-day-slot\\\"\\n (click)=\\\"handleAllDaySlotEvent($event, slotData.day)\\\"\\n (dblclick)=\\\"handleAllDaySlotEvent($event, slotData.day)\\\"\\n (contextmenu)=\\\"handleAllDaySlotEvent($event, slotData.day)\\\"\\n >\\n @if (slotData.appointments.length > 0) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || slotData.appointments[0].readonly || readonly()\\\"\\n [dragData]=\\\"slotData.appointments[0]\\\"\\n (click)=\\\"handleAppointmentEvent($event, slotData.appointments[0])\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, slotData.appointments[0])\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, slotData.appointments[0])\\\"\\n [title]=\\\"slotData.appointments[0].title\\\"\\n class=\\\"ax-scheduler-header-week-appointment\\\"\\n [ngClass]=\\\"slotData.appointments[0].cssClass??`ax-scheduler-${slotData.appointments[0].priority??'primary'}-periority`\\\"\\n >\\n <ax-title class=\\\"ax-scheduler-truncate\\\">{{ slotData.appointments[0].title }}</ax-title>\\n </div>\\n }\\n @if (slotData.appointments.length > 1) {\\n <div\\n #moreAppointments\\n class=\\\"ax-scheduler-appointment-badge\\\"\\n [ngClass]=\\\"slotData.appointments[1].cssClass??`ax-scheduler-${slotData.appointments[1].priority??'primary'}-periority`\\\"\\n >\\n +{{ slotData.appointments.length - 1 }}\\n </div>\\n <ax-popover [target]=\\\"moreAppointments\\\" [placement]=\\\"'bottom'\\\">\\n <div class=\\\"ax-overlay-pane ax-scheduler-popover\\\" [class.ax-state-readonly]=\\\"readonly()\\\">\\n @for (appointment of slotData.appointments; track appointment.id; let first = $first) {\\n @if (!first) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"appointment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || appointment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n [title]=\\\"appointment.title\\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [ngClass]=\\\"appointment.cssClass??`ax-scheduler-${appointment.priority??'primary'}-periority`\\\"\\n >\\n <ax-title class=\\\"ax-scheduler-truncate\\\">{{ appointment.title }}</ax-title>\\n </div>\\n }\\n }\\n </div>\\n </ax-popover>\\n }\\n </div>\\n }\\n </div>\\n </div>\\n</div>\\n\\n<div class=\\\"ax-scheduler-week-time-container\\\">\\n <div class=\\\"ax-scheduler-week-time\\\" aria-hidden=\\\"true\\\">\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <div>\\n {{ time | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </div>\\n }\\n </div>\\n\\n <div class=\\\"ax-scheduler-week-table-container\\\">\\n <div class=\\\"ax-scheduler-week-appointment-container\\\">\\n @for (appt of visibleAppointmentsLayout(); track appt.appointment.id) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || appt.appointment.readonly || readonly()\\\"\\n [dragData]=\\\"appt.appointment\\\"\\n (click)=\\\"handleAppointmentEvent($event, appt.appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appt.appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appt.appointment)\\\"\\n [title]=\\\"appt.appointment.title\\\"\\n [style.height]=\\\"appt.layoutHeight\\\"\\n class=\\\"ax-scheduler-week-appointment\\\"\\n [style.inset-block-start]=\\\"appt.layoutTop\\\"\\n [style.inset-inline-start]=\\\"appt.layoutLeft\\\"\\n [ngClass]=\\\"appt.appointment.cssClass??`ax-scheduler-${appt.appointment.priority??'primary'}-periority`\\\"\\n >\\n <ax-title class=\\\"ax-scheduler-truncate\\\">{{ appt.appointment.title }}</ax-title>\\n <ax-subtitle>\\n {{\\n appt.appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{ appt.appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n\\n <!-- Overflow Badges with Popovers -->\\n @for (badge of overflowBadgesWithData(); track badge.key) {\\n <!-- Wrap badge and popover for targeting -->\\n <div\\n style=\\\"position: absolute\\\"\\n class=\\\"ax-scheduler-badge-wrapper\\\"\\n [style.inset-block-start]=\\\"badge.badgeTop\\\"\\n [style.inset-inline-start]=\\\"badge.badgeLeft\\\"\\n >\\n <!-- The Badge itself -->\\n <div\\n #actionButton\\n class=\\\"ax-scheduler-appointment-badge\\\"\\n [ngClass]=\\\"badge.hiddenAppointments[0].cssClass??`ax-scheduler-${badge.hiddenAppointments[0].priority??'primary'}-periority`\\\"\\n >\\n +{{ badge.count }}\\n </div>\\n <!-- The Popover -->\\n <ax-popover [target]=\\\"actionButton\\\" [placement]=\\\"'bottom'\\\">\\n <div class=\\\"ax-overlay-pane ax-scheduler-popover\\\">\\n @for (appointment of badge.hiddenAppointments; track appointment.id) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"appointment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || appointment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n [title]=\\\"appointment.title\\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [ngClass]=\\\"appointment.cssClass??`ax-scheduler-${appointment.priority??'primary'}-periority`\\\"\\n >\\n <ax-title class=\\\"ax-scheduler-truncate\\\">{{ appointment.title }}</ax-title>\\n <ax-subtitle>\\n {{\\n appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{\\n appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n </ax-subtitle>\\n </div>\\n }\\n </div>\\n </ax-popover>\\n </div>\\n }\\n </div>\\n\\n <table aria-hidden=\\\"true\\\" [border]=\\\"1\\\">\\n <tbody>\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <tr>\\n @for (day of daysArray(); track day.date.date.getTime()) {\\n <td\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n (onElementDrop)=\\\"handleSingleDayDrop($event, time, day.date, 0)\\\"\\n (click)=\\\"handleSingleSlotEvent($event, time, day.date, 0)\\\"\\n (dblclick)=\\\"handleSingleSlotEvent($event, time, day.date, 0)\\\"\\n (contextmenu)=\\\"handleSingleSlotEvent($event, time, day.date, 0)\\\"\\n ></td>\\n }\\n </tr>\\n <tr>\\n @for (day of daysArray(); track day.date.date.getTime()) {\\n <td\\n axDropZone\\n #zone2=\\\"axDropZone\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone2.isHovered()\\\"\\n (onElementDrop)=\\\"handleSingleDayDrop($event, time, day.date, 1)\\\"\\n (click)=\\\"handleSingleSlotEvent($event, time, day.date, 1)\\\"\\n (dblclick)=\\\"handleSingleSlotEvent($event, time, day.date, 1)\\\"\\n (contextmenu)=\\\"handleSingleSlotEvent($event, time, day.date, 1)\\\"\\n ></td>\\n }\\n </tr>\\n }\\n </tbody>\\n </table>\\n </div>\\n</div>\\n\", styles: [\"ax-scheduler-week-view{display:block;position:relative;background-color:inherit;min-width:var(--ax-comp-scheduler-width)}ax-scheduler-week-view .ax-scheduler-appointment-badge{display:flex;height:1.5rem;cursor:pointer;font-size:.75rem;align-items:center;border-radius:9999px;justify-content:center;width:1.5rem!important}ax-scheduler-week-view .ax-scheduler-week-header{top:0;z-index:2;width:100%;position:sticky;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days{display:flex;background-color:inherit;border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-table{flex-shrink:0;position:sticky;text-align:center;inset-inline-start:0;width:var(--ax-comp-scheduler-basic-view-blocks-width);background-color:inherit;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date{width:100%;display:flex}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div{width:100%;text-align:center;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day{gap:.25rem;display:grid;align-items:center;padding-inline:.5rem;justify-content:center}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-char{font-weight:500}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-num{font-weight:700}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-char{max-width:100%;font-weight:300}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-num{font-weight:500;font-size:1.25rem}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div:last-child{border-inline-end-width:0}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date .ax-scheduler-all-day-slot{gap:.25rem;display:flex;width:14.2857142857%}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date .ax-scheduler-all-day-slot .ax-scheduler-header-week-appointment{display:block;overflow:hidden;text-align:start;padding-inline:.5rem;width:calc(100% - 2rem);border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-week-view .ax-scheduler-week-time-container{width:100%;display:flex;background-color:inherit}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-time{z-index:1;position:sticky;inset-inline-start:0;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-time div{display:block;text-align:center;padding-inline:.5rem;width:var(--ax-comp-scheduler-basic-view-blocks-width);height:calc(var(--ax-comp-scheduler-basic-view-blocks-height) * 2);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container{width:100%;position:relative}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container .ax-scheduler-week-appointment-container{top:0;width:100%;position:absolute}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container .ax-scheduler-week-appointment-container .ax-scheduler-week-appointment{display:flex;position:absolute;inset-inline-start:0;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;width:calc(14.2857142857% - 2rem);border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table{width:100%}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr{display:flex;height:var(--ax-comp-scheduler-basic-view-blocks-height);border-block-start:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr:first-child{border-block-start-width:0}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr td{width:100%;text-align:center;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr td:last-child{border-inline-end-width:0}ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-week-appointment,ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-header-week-appointment{cursor:pointer}ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-all-day-slot,ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-week-table-container>table td{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-all-day-slot:hover,ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-week-table-container>table td:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}\\n\"] }]\n }], propDecorators: { isReadonly: [{\n type: HostBinding,\n args: ['class.ax-state-readonly']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLXdlZWstdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3ZpZXdzL3dlZWsvc2NoZWR1bGVyLXdlZWstdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3ZpZXdzL3dlZWsvc2NoZWR1bGVyLXdlZWstdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQXVCLE1BQU0sdUJBQXVCLENBQUM7QUFDbEcsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUE2QixNQUFNLHdCQUF3QixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04saUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFB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QUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQzlCLENBQUM7UUFDRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUE0QyxVQUFVO1FBQ3BELE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3pCLENBQUM7OEdBN2VVLDRCQUE0QjtrR0FBNUIsNEJBQTRCLHk4Q0FGNUIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLDRCQUE0QixFQUFFLENBQUMsaURDekRsRixvMVVBZ09BLG9zTkRqTEksT0FBTyxvRkFDUCwyQkFBMkIsb0xBQzNCLFNBQVMseUNBQ1QsZ0JBQWdCLGtEQUNoQixrQkFBa0IsMFFBQ2xCLFlBQVksK0NBQ1osZUFBZSwyVEFDZixtQkFBbUIsNEpBQ25CLGtCQUFrQjs7MkZBSVQsNEJBQTRCO2tCQW5CeEMsU0FBUzsrQkFDRSx3QkFBd0IsbUJBR2pCLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksV0FDNUI7d0JBQ1AsT0FBTzt3QkFDUCwyQkFBMkI7d0JBQzNCLFNBQVM7d0JBQ1QsZ0JBQWdCO3dCQUNoQixrQkFBa0I7d0JBQ2xCLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLGtCQUFrQjtxQkFDbkIsYUFDVSxDQUFDLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLDhCQUE4QixFQUFFLENBQUM7OEJBNmVwQyxVQUFVO3NCQUFyRCxXQUFXO3VCQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYQ29tcG9uZW50LCBOWENvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY2RrL2NvbW1vbic7XG5pbXBvcnQgeyBBWERyYWdEaXJlY3RpdmUsIEFYRHJvcFpvbmVEaXJlY3RpdmUsIEFYRHJvcFpvbmVEcm9wRXZlbnQgfSBmcm9tICdAYWNvcmV4L2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgQVhEZWNvcmF0b3JHZW5lcmljQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgQVhQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3BvcG92ZXInO1xuaW1wb3J0IHsgQVhUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3Rvb2x0aXAnO1xuaW1wb3J0IHsgQVhDYWxlbmRhclNlcnZpY2UsIEFYRGF0ZVRpbWUsIEFYSG9saWRheURhdGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvZGF0ZS10aW1lJztcbmltcG9ydCB7IEFYRm9ybWF0UGlwZSB9IGZyb20gJ0BhY29yZXgvY29yZS9mb3JtYXQnO1xuaW1wb3J0IHsgQVhUcmFuc2xhdG9yUGlwZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIEhvc3RCaW5kaW5nLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBvdXRwdXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG9yZGVyQnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtcbiAgQVhTY2hlZHVsZXJBY3RpdmVBcHBvaW50bWVudHNJbkJsb2NrLFxuICBBWFNjaGVkdWxlckFsbERheVNsb3REYXRhLFxuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50LFxuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50TGF5b3V0LFxuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCxcbiAgQVhTY2hlZHVsZXJPdmVyZmxvd0JhZGdlLFxufSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuY2xhc3MnO1xuaW1wb3J0IHtcbiAgQVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQsXG4gIEFYU2NoZWR1bGVyQ29tcG9uZW50LFxuICBBWFNjaGVkdWxlclNsb3REcm9wRXZlbnQsXG4gIEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQsXG59IGZyb20gJy4uLy4uL3NjaGVkdWxlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLnNlcnZpY2UnO1xuXG50eXBlIEFYU2NoZWR1bGVyR3JpZEJhZGdlSW5mbyA9IEFYU2NoZWR1bGVyT3ZlcmZsb3dCYWRnZSAmIHtcbiAgaGlkZGVuQXBwb2ludG1lbnRzOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdO1xufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtc2NoZWR1bGVyLXdlZWstdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9zY2hlZHVsZXItd2Vlay12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3NjaGVkdWxlci13ZWVrLXZpZXcuY29tcG9uZW50LnNjc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW1xuICAgIE5nQ2xhc3MsXG4gICAgQVhEZWNvcmF0b3JHZW5lcmljQ29tcG9uZW50LFxuICAgIEFzeW5jUGlwZSxcbiAgICBBWFRyYW5zbGF0b3JQaXBlLFxuICAgIEFYUG9wb3ZlckNvbXBvbmVudCxcbiAgICBBWEZvcm1hdFBpcGUsXG4gICAgQVhEcmFnRGlyZWN0aXZlLFxuICAgIEFYRHJvcFpvbmVEaXJlY3RpdmUsXG4gICAgQVhUb29sdGlwRGlyZWN0aXZlLFxuICBdLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IEFYQ29tcG9uZW50LCB1c2VFeGlzdGluZzogQVhTY2hlZHVsZXJXZWVrVmlld0NvbXBvbmVudCB9XSxcbn0pXG5leHBvcnQgY2xhc3MgQVhTY2hlZHVsZXJXZWVrVmlld0NvbXBvbmVudCBleHRlbmRzIE5YQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBzY2hlZHVsZXIgPSBpbmplY3QoQVhTY2hlZHVsZXJDb21wb25lbnQpO1xuICBwcml2YXRlIGNhbGVuZGFyU2VydmljZSA9IGluamVjdChBWENhbGVuZGFyU2VydmljZSk7XG4gIHByaXZhdGUgc2NoZWR1bGVyU2VydmljZSA9IGluamVjdChBWFNjaGVkdWxlclNlcnZpY2UpO1xuXG4gIHJlYWRvbmx5IEdBUF9QWCA9IDE7XG5cbiAgcmVhZG9ubHkgPSBpbnB1dChmYWxzZSk7XG4gIGRyYWdnYWJsZSA9IGlucHV0KHRydWUpO1xuICBjYWxlbmRhciA9IGlucHV0PHN0cmluZz4oKTtcbiAgZGF0ZSA9IGlucHV0LnJlcXVpcmVkPEFYRGF0ZVRpbWU+KCk7XG4gIGVuZERheUhvdXIgPSBpbnB1dC5yZXF1aXJlZDxudW1iZXI+KCk7XG4gIHN0YXJ0RGF5SG91ciA9IGlucHV0LnJlcXVpcmVkPG51bWJlcj4oKTtcbiAgYXBwb2ludG1lbnRzID0gaW5wdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudFtdPihbXSk7XG5cbiAgLyoqXG4gICAqIFByb2Nlc3NlcyBhbGwgb3JpZ2luYWwgYXBwb2ludG1lbnRzIGFuZCBnZW5lcmF0ZXMgZGF5LXNwZWNpZmljIHNlZ21lbnRzIGZvciB0aGUgZW50aXJlIHdlZWsuXG4gICAqIEVhY2ggc2VnbWVudCByZXByZXNlbnRzIHRoZSB2aXNpYmxlIHBhcnQgb2YgYW4gYXBwb2ludG1lbnQgb24gYSBwYXJ0aWN1bGFyIGRheS5cbiAgICogVGhlIHNlZ21lbnQncyAnYWxsRGF5JyBmbGFnIGluZGljYXRlcyBpZiBpdCBzaG91bGQgYmUgaW4gdGhlIGFsbC1kYXkgc2xvdCBvciB0aW1lZCBncmlkIGZvciB0aGF0IGRheS5cbiAgICovXG4gIHByb2Nlc3NlZEFwcG9pbnRtZW50c0ZvckxheW91dCA9IGNvbXB1dGVkPEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50W10+KCgpID0+IHtcbiAgICBjb25zdCB2aWV3RGF5cyA9IHRoaXMuZGF5c0FycmF5KCkubWFwKChlKSA9PiBlLmRhdGUpOyAvLyBBcnJheSBvZiBBWERhdGVUaW1lIGZvciBlYWNoIGRheSBpbiB0aGUgd2Vla1xuICAgIGNvbnN0IGFsbE9yaWdpbmFsQXBwb2ludG1lbnRzID0gdGhpcy5hcHBvaW50bWVudHMoKTsgLy8gUmF3IGFwcG9pbnRtZW50cyBmcm9tIGlucHV0XG4gICAgY29uc3Qgdmlld0NvbmZpZ1N0YXJ0SG91ciA9IHRoaXMuc3RhcnREYXlIb3VyKCk7IC8vIENvbmZpZ3VyZWQgc3RhcnQgaG91ciBmb3IgdGhlIHRpbWVkIGdyaWRcbiAgICBjb25zdCB2aWV3Q29uZmlnRW5kSG91ciA9IHRoaXMuZW5kRGF5SG91cigpOyAvLyBDb25maWd1cmVkIGVuZCBob3VyIGZvciB0aGUgdGltZWQgZ3JpZFxuXG4gICAgaWYgKCF2aWV3RGF5cyB8fCB2aWV3RGF5cy5sZW5ndGggPT09IDAgfHwgIWFsbE9yaWdpbmFsQXBwb2ludG1lbnRzIHx8IGFsbE9yaWdpbmFsQXBwb2ludG1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGFsbFNlZ21lbnRzSW5WaWV3OiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdID0gW107XG4gICAgZm9yIChjb25zdCBkYXkgb2Ygdmlld0RheXMpIHtcbiAgICAgIC8vIEZvciBlYWNoIGRheSBpbiB0aGUgd2Vla1xuICAgICAgY29uc3QgZGF5QXNTdGFydE9mRGF5ID0gZGF5LnN0YXJ0T2YoJ2RheScpOyAvLyBVc2Ugc3RhcnRPZignZGF5JykgZm9yIGNvbnNpc3RlbnQgY2FjaGUga2V5IGlmIEFYRGF0ZVRpbWUgaW50ZXJuc1xuICAgICAgZm9yIChjb25zdCBhcHB0IG9mIGFsbE9yaWdpbmFsQXBwb2ludG1lbnRzKSB7XG4gICAgICAgIC8vIERldGVybWluZSBzZWdtZW50YXRpb24gYm91bmRhcmllcyBmb3IgdGhpcyBzcGVjaWZpYyAnZGF5JzpcbiAgICAgICAgLy8gLSBJZiBvcmlnaW5hbCBhcHB0IGlzIGFsbERheSwgc2VnbWVudCBhY3Jvc3MgdGhlIGZ1bGwgMC0yNGggb2YgJ2RheScuXG4gICAgICAgIC8vICAgVGhlIHNlcnZpY2UgbWV0aG9kIHdpbGwgZW5zdXJlIHNlZ21lbnQuYWxsRGF5IGlzIHRydWUuXG4gICAgICAgIC8vIC0gSWYgb3JpZ2luYWwgYXBwdCBpcyB0aW1lZCwgc2VnbWVudCBhY3Jvc3Mgdmlld0NvbmZpZ1N0YXJ0SG91ci12aWV3Q29uZmlnRW5kSG91ci5cbiAgICAgICAgLy8gICBUaGUgc2VydmljZSBtZXRob2Qgd2lsbCBzZXQgc2VnbWVudC5hbGxEYXk9dHJ1ZSBpZiB0aGlzIHRpbWVkIHNlZ21lbnQgZmlsbHMgdGhhdCB3aW5kb3cuXG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZVNlZ21lbnRTdGFydEhvdXIgPSBhcHB0LmFsbERheSA/IDAgOiB2aWV3Q29uZmlnU3RhcnRIb3VyO1xuICAgICAgICBjb25zdCBlZmZlY3RpdmVTZWdtZW50RW5kSG91ciA9IGFwcHQuYWxsRGF5ID8gMjQgOiB2aWV3Q29uZmlnRW5kSG91cjtcblxuICAgICAgICBjb25zdCBzZWdtZW50ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldENsb25lZEFwcG9pbnRtZW50U2VnbWVudE9uRGF5KFxuICAgICAgICAgIGFwcHQsXG4gICAgICAgICAgZGF5QXNTdGFydE9mRGF5LCAvLyBQYXNzIHRoZSBBWERhdGVUaW1lIG9iamVjdCBmb3IgdGhlIGN1cnJlbnQgZGF5IGluIGxvb3BcbiAgICAgICAgICBlZmZlY3RpdmVTZWdtZW50U3RhcnRIb3VyLFxuICAgICAgICAgIGVmZmVjdGl2ZVNlZ21lbnRFbmRIb3VyLFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChzZWdtZW50KSB7XG4gICAgICAgICAgYWxsU2VnbWVudHNJblZpZXcucHVzaChzZWdtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERlZHVwbGljYXRlIHNlZ21lbnRzLiBBIHNlZ21lbnQgaXMgdW5pcXVlIGJ5IGl0cyBvcmlnaW5hbCBrZXkgYW5kIGl0cyBzcGVjaWZpYyBzdGFydC9lbmQgb24gYSBkYXkuXG4gICAgLy8gVGhlIHNlcnZpY2UgbWV0aG9kIGFscmVhZHkgcHJvZHVjZXMgZGF5LXNwZWNpZmljIHN0YXJ0L2VuZCB0aW1lcy5cbiAgICBjb25zdCB1bmlxdWVTZWdtZW50c01hcCA9IG5ldyBNYXA8c3RyaW5nLCBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudD4oKTtcbiAgICBhbGxTZWdtZW50c0luVmlldy5mb3JFYWNoKChzZWcpID0+IHtcbiAgICAgIC8vIENyZWF0ZSBhIHVuaXF1ZSBrZXkgZm9yIHRoZSBzZWdtZW50IGJhc2VkIG9uIG9yaWdpbmFsIGFwcHQga2V5IGFuZCBzZWdtZW50J3Mgb3duIGRhdGUgcmFuZ2VcbiAgICAgIGNvbnN0IHNlZ1N0YXJ0ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKHNlZy5zdGFydERhdGUsIHRoaXMuY2FsZW5kYXIoKSk7XG4gICAgICBjb25zdCBzZWdFbmQgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoc2VnLmVuZERhdGUsIHRoaXMuY2FsZW5kYXIoKSk7XG4gICAgICBjb25zdCBtYXBLZXkgPSBgJHtzZWcuaWR9LSR7c2VnU3RhcnQuZm9ybWF0KCdZWVlZTU1EREhIbW1zc1NTUycpfS0ke3NlZ0VuZC5mb3JtYXQoJ1lZWVlNTURESEhtbXNzU1NTJyl9YDtcbiAgICAgIGlmICghdW5pcXVlU2VnbWVudHNNYXAuaGFzKG1hcEtleSkpIHtcbiAgICAgICAgdW5pcXVlU2VnbWVudHNNYXAuc2V0KG1hcEtleSwgc2VnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh1bmlxdWVTZWdtZW50c01hcC52YWx1ZXMoKSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBTZWdtZW50cyB0aGF0IGFyZSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHRpbWVkIGdyaWQgYXJlYSBvZiB0aGUgd2VlayB2aWV3LlxuICAgKiBUaGVzZSBhcmUgc2VnbWVudHMgZnJvbSBwcm9jZXNzZWRBcHBvaW50bWVudHNGb3JMYXlvdXQgd2hlcmUgc2VnbWVudC5hbGxEYXkgaXMgZmFsc2UuXG4gICAqL1xuICB0aW1lZEdyaWRTZWdtZW50cyA9IGNvbXB1dGVkPEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50W10+KCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzZWRBcHBvaW50bWVudHNGb3JMYXlvdXQoKT8uZmlsdGVyKChzZWdtZW50KSA9PiAhc2VnbWVudC5hbGxEYXkpID8/IFtdO1xuICB9KTtcblxuICAvLyBJbnRlcm5hbCBvdXRwdXRzIHRvIGJlIGNhdWdodCBieSBwYXJlbnQgQVhTY2hlZHVsZXJDb21wb25lbnRcbiAgc2xvdENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBzbG90RGJsQ2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIHNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBhcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgYXBwb2ludG1lbnREYmxDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIGFwcG9pbnRtZW50UmlnaHRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIG9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50PigpO1xuXG4gIC8vIC0tLSBFdmVudCBIYW5kbGVycyAtLS1cbiAgcHJpdmF0ZSByZWFkb25seSBldmVudE91dHB1dE1hcCA9IHtcbiAgICBzbG90OiB7XG4gICAgICBjbGljazogdGhpcy5zbG90Q2xpY2tlZEludGVybmFsLFxuICAgICAgZGJsY2xpY2s6IHRoaXMuc2xvdERibENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGNvbnRleHRtZW51OiB0aGlzLnNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCxcbiAgICB9LFxuICAgIGFwcG9pbnRtZW50OiB7XG4gICAgICBjbGljazogdGhpcy5hcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGRibGNsaWNrOiB0aGlzLmFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsLFxuICAgICAgY29udGV4dG1lbnU6IHRoaXMuYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCxcbiAgICB9LFxuICB9O1xuICBoYW5kbGVBcHBvaW50bWVudEV2ZW50KG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQsIGFwcG9pbnRtZW50U2VnbWVudDogQVhTY2hlZHVsZXJBcHBvaW50bWVudCkge1xuICAgIC8vICdhcHBvaW50bWVudFNlZ21lbnQnIGhlcmUgaXMgdGhlIHNlZ21lbnQgdGhhdCB3YXMgaW50ZXJhY3RlZCB3aXRoXG4gICAgY29uc3Qgb3JpZ2luYWxBcHBvaW50bWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRPcmlnaW5hbEFwcG9pbnRtZW50KGFwcG9pbnRtZW50U2VnbWVudCk7XG4gICAgY29uc3QgYXBwb2ludG1lbnRSZWYgPSB7XG4gICAgICAuLi5vcmlnaW5hbEFwcG9pbnRtZW50LFxuICAgICAgZW5kRGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5lbmREYXRlLFxuICAgICAgc3RhcnREYXRlOiBvcmlnaW5hbEFwcG9pbnRtZW50LnN0YXJ0RGF0ZSxcbiAgICB9O1xuICAgIHRoaXMuc2NoZWR1bGVyU2VydmljZS5oYW5kbGVFdmVudChcbiAgICAgIHsgbmF0aXZlRXZlbnQ6IG1vdXNlRXZlbnQsIGFwcG9pbnRtZW50OiBhcHBvaW50bWVudFJlZiwgc2VuZGVyOiB0aGlzLnNjaGVkdWxlciB9LFxuICAgICAgdGhpcy5ldmVudE91dHB1dE1hcCxcbiAgICAgICdhcHBvaW50bWVudCcsXG4gICAgKTtcbiAgfVxuICBoYW5kbGVTaW5nbGVTbG90RXZlbnQobW91c2VFdmVudDogTW91c2VFdmVudCwgaG91cjogQVhEYXRlVGltZSwgZGF5OiBBWERhdGVUaW1lLCBtaW51dGVJbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gZGF5LnNldCgnaG91cicsIGhvdXIuaG91cikuc2V0KCdtaW51dGUnLCBtaW51dGVJbmRleCAqIDMwKTtcbiAgICBjb25zdCBzbG90RGF0YSA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRTbG90RGF0YShzdGFydERhdGUsICd3ZWVrJyk7XG4gICAgaWYgKHNsb3REYXRhKVxuICAgICAgdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmhhbmRsZUV2ZW50KFxuICAgICAgICB7IG5hdGl2ZUV2ZW50OiBtb3VzZUV2ZW50LCBzbG90OiBzbG90RGF0YSwgc2VuZGVyOiB0aGlzLnNjaGVkdWxlciB9LFxuICAgICAgICB0aGlzLmV2ZW50T3V0cHV0TWFwLFxuICAgICAgICAnc2xvdCcsXG4gICAgICApO1xuICB9XG4gIGhhbmRsZUFsbERheVNsb3RFdmVudChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50LCBkYXk6IEFYRGF0ZVRpbWUpIHtcbiAgICBjb25zdCBlbmREYXRlID0gZGF5LmVuZE9mKCdkYXknKTtcbiAgICBjb25zdCBzdGFydERhdGUgPSBkYXkuc3RhcnRPZignZGF5Jyk7XG4gICAgY29uc3Qgc2xvdERhdGEgPSB7IHN0YXJ0RGF0ZSwgZW5kRGF0ZSwgdmlldzogJ3dlZWsnIGFzIGNvbnN0IH07XG4gICAgaWYgKHNsb3REYXRhKVxuICAgICAgdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmhhbmRsZUV2ZW50KFxuICAgICAgICB7IG5hdGl2ZUV2ZW50OiBtb3VzZUV2ZW50LCBzbG90OiBzbG90RGF0YSwgc2VuZGVyOiB0aGlzLnNjaGVkdWxlciB9LFxuICAgICAgICB0aGlzLmV2ZW50T3V0cHV0TWFwLFxuICAgICAgICAnc2xvdCcsXG4gICAgICApO1xuICB9XG4gIGhhbmRsZUFsbERheURyb3AoZTogQVhEcm9wWm9uZURyb3BFdmVudCwgZGF5OiBBWERhdGVUaW1lKSB7XG4gICAgY29uc3QgZW5kRGF0ZSA9IGRheS5lbmRPZignZGF5Jyk7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gZGF5LnN0YXJ0T2YoJ2RheScpO1xuICAgIGNvbnN0IHNsb3REYXRhID0geyBzdGFydERhdGUsIGVuZERhdGUsIHZpZXc6ICd3ZWVrJyBhcyBjb25zdCB9O1xuICAgIGNvbnN0IGRyb3BwZWRJdGVtID0gZS5kcm9wcGVkLmRyYWdEYXRhKCkgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudDtcbiAgICBjb25zdCBvcmlnaW5hbEFwcG9pbnRtZW50ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldE9yaWdpbmFsQXBwb2ludG1lbnQoZHJvcHBlZEl0ZW0pO1xuICAgIGNvbnN0IGFwcG9pbnRtZW50UmVmID0ge1xuICAgICAgLi4ub3JpZ2luYWxBcHBvaW50bWVudCxcbiAgICAgIGVuZERhdGU6IG9yaWdpbmFsQXBwb2ludG1lbnQuZW5kRGF0ZSxcbiAgICAgIHN0YXJ0RGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5zdGFydERhdGUsXG4gICAgfTtcbiAgICB0aGlzLm9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwuZW1pdCh7XG4gICAgICBkcm9wRXZlbnQ6IGUsXG4gICAgICBzbG90OiBzbG90RGF0YSxcbiAgICAgIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIsXG4gICAgICBhcHBvaW50bWVudDogYXBwb2ludG1lbnRSZWYsXG4gICAgfSk7XG4gIH1cbiAgaGFuZGxlU2luZ2xlRGF5RHJvcChlOiBBWERyb3Bab25lRHJvcEV2ZW50LCBob3VyOiBBWERhdGVUaW1lLCBkYXk6IEFYRGF0ZVRpbWUsIG1pbnV0ZUluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBzdGFydERhdGUgPSBkYXkuc2V0KCdob3VyJywgaG91ci5ob3VyKS5zZXQoJ21pbnV0ZScsIG1pbnV0ZUluZGV4ICogMzApO1xuICAgIGNvbnN0IHNsb3REYXRhID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldFNsb3REYXRhKHN0YXJ0RGF0ZSwgJ3dlZWsnKTtcbiAgICBjb25zdCBkcm9wcGVkSXRlbSA9IGUuZHJvcHBlZC5kcmFnRGF0YSgpIGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnQ7XG4gICAgY29uc3Qgb3JpZ2luYWxBcHBvaW50bWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRPcmlnaW5hbEFwcG9pbnRtZW50KGRyb3BwZWRJdGVtKTtcbiAgICBjb25zdCBhcHBvaW50bWVudFJlZiA9IHtcbiAgICAgIC4uLm9yaWdpbmFsQXBwb2ludG1lbnQsXG4gICAgICBlbmREYXRlOiBvcmlnaW5hbEFwcG9pbnRtZW50LmVuZERhdGUsXG4gICAgICBzdGFydERhdGU6IG9yaWdpbmFsQXBwb2ludG1lbnQuc3RhcnREYXRlLFxuICAgIH07XG4gICAgdGhpcy5vbkFwcG9pbnRtZW50RHJvcEludGVybmFsLmVtaXQoe1xuICAgICAgZHJvcEV2ZW50OiBlLFxuICAgICAgc2xvdDogc2xvdERhdGEsXG4gICAgICBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyLFxuICAgICAgYXBwb2ludG1lbnQ6IGFwcG9pbnRtZW50UmVmLFxuICAgIH0pO1xuICB9XG5cbiAgaG91cnNBcnJheSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBsZXQgdGltZSA9IHRoaXMuZGF0ZSgpO1xuICAgIGlmICghdGltZSkgcmV0dXJuIFtdO1xuICAgIHRpbWUgPSB0aW1lLnNldCgnaG91cicsIHRoaXMuc3RhcnREYXlIb3VyKCkpLnN0YXJ0T2YoJ2hvdXInKTtcbiAgICBjb25zdCBob3VycyA9IFt0aW1lXTtcbiAgICB3aGlsZSAodGltZS5ob3VyIDwgdGhpcy5lbmREYXlIb3VyKCkgLSAxKSB7XG4gICAgICB0aW1lID0gdGltZS5hZGQoJ2hvdXInLCAxKTtcbiAgICAgIGhvdXJzLnB1c2godGltZSk7XG4gICAgfVxuICAgIHJldHVybiBob3VycztcbiAgfSk7XG5cbiAgZGF5c0FycmF5ID0gY29tcHV0ZWQoXG4gICAgKCk6IHsgZGF0ZTogQVhEYXRlVGltZTsgaG9saWRheT86IHsgc3RhdGU6ICdob2xpZGF5JyB8ICd3ZWVrZW5kJyB8ICdub25lJzsgaG9saWRheT86IEFYSG9saWRheURhdGUgfSB9W10gPT4ge1xuICAgICAgY29uc3QgdGltZSA9IHRoaXMuZGF0ZSgpO1xuICAgICAgaWYgKCF0aW1lKSByZXR1cm4gW107XG4gICAgICBjb25zdCBkYXlzID0gW3sgZGF0ZTogdGltZSwgaG9saWRheTogdGhpcy5pc0hvbGlkYXkodGltZSkgfV07XG4gICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDw9IDY7IGluZGV4KyspIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IHRpbWUuYWRkKCdkYXknLCBpbmRleCk7XG4gICAgICAgIGRheXMucHVzaCh7IGRhdGUsIGhvbGlkYXk6IHRoaXMuaXNIb2xpZGF5KGRhdGUpIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRheXM7XG4gICAgfSxcbiAgKTtcblxuICB0b3RhbEJsb2Nrc1BlclZpZXdEYXkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgc3RhcnRIID0gdGhpcy5zdGFydERheUhvdXIoKTtcbiAgICBjb25zdCBlbmRIID0gdGhpcy5lbmREYXlIb3VyKCk7XG4gICAgaWYgKHR5cGVvZiBzdGFydEggIT09ICdudW1iZXInIHx8IHR5cGVvZiBlbmRIICE9PSAnbnVtYmVyJykgcmV0dXJuIDA7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIChlbmRIIC0gc3RhcnRIKSAqICg2MCAvIDMwKSk7XG4gIH0pO1xuXG4gIGFwcG9pbnRtZW50c0J5U3RhcnRCbG9jayA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB2aWV3RGF0ZSA9IHRoaXMuZGF0ZSgpOyAvLyBUaGlzIHNob3VsZCBiZSB0aGUgc3RhcnQgZGF0ZSBvZiB0aGUgd2Vla1xuICAgIGNvbnN0IHN0YXJ0SCA9IHRoaXMuc3RhcnREYXlIb3VyKCk7XG4gICAgY29uc3QgZW5kSCA9IHRoaXMuZW5kRGF5SG91cigpO1xuICAgIGlmICghdmlld0RhdGUgfHwgdHlwZW9mIHN0YXJ0SCAhPT0gJ251bWJlcicgfHwgdHlwZW9mIGVuZEggIT09ICdudW1iZXInKSByZXR1cm4ge307XG4gICAgLy8gUGFzcyB0aGUgdGltZWRHcmlkU2VnbWVudHMgdG8gdGhlIHNlcnZpY2UgbWV0aG9kXG4gICAgcmV0dXJuIHRoaXMuc2NoZWR1bGVyU2VydmljZS5jYWxjdWxhdGVXZWVrVmlld0FwcG9pbnRtZW50c0J5U3RhcnRCbG9jayhcbiAgICAgIHRoaXMudGltZWRHcmlkU2VnbWVudHMoKSwgLy8gQ0hBTkdFRCBmcm9tIHNpbmdsZURheUFwcG9pbnRtZW50c1xuICAgICAgdmlld0RhdGUsXG4gICAgICBzdGFydEgsXG4gICAgICBlbmRILFxuICAgICk7XG4gIH0pO1xuXG4gIGFjdGl2ZUFwcG9pbnRtZW50c0luQmxvY2sgPSBjb21wdXRlZCgoKTogQVhTY2hlZHVsZXJBY3RpdmVBcHBvaW50bWVudHNJbkJsb2NrID0+IHtcbiAgICBjb25zdCB2aWV3RGF0ZSA9IHRoaXMuZGF0ZSgpOyAvLyBTdGFydCBkYXRlIG9mIHRoZSB3ZWVrXG4gICAgY29uc3Qgc3RhcnRIID0gdGhpcy5zdGFydERheUhvdXIoKTtcbiAgICBjb25zdCBlbmRIID0gdGhpcy5lbmREYXlIb3VyKCk7XG4gICAgaWYgKCF2aWV3RGF0ZSB8fCB0eXBlb2Ygc3RhcnRIICE9PSAnbnVtYmVyJyB8fCB0eXBlb2YgZW5kSCAhPT0gJ251bWJlcicpIHJldHVybiB7fTtcbiAgICAvLyBQYXNzIHRoZSB0aW1lZEdyaWRTZWdtZW50cyB0byB0aGUgc2VydmljZSBtZXRob2RcbiAgICByZXR1cm4gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmNhbGN1bGF0ZUFjdGl2ZUFwcG9pbnRtZW50c0luQmxvY2soXG4gICAgICB0aGlzLnRpbWVkR3JpZFNlZ21lbnRzKCksIC8vIENIQU5HRUQgZnJvbSBzaW5nbGVEYXlBcHBvaW50bWVudHNcbiAgICAgIHZpZXdEYXRlLFxuICAgICAgc3RhcnRILFxuICAgICAgZW5kSCxcbiAgICAgIDcsIC8vIEV4cGxpY2l0bHkgNyBkYXlzIGZvciB3ZWVrIHZpZXdcbiAgICApO1xuICB9KTtcblxuICB2aXNpYmxlQXBwb2ludG1lbnRzTGF5b3V0ID0gY29tcHV0ZWQoKCk6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRMYXlvdXRbXSA9PiB7XG4gICAgY29uc3QgbGF5b3V0czogQVhTY2hlZHVsZXJBcHBvaW50bWVudExheW91dFtdID0gW107XG4gICAgY29uc3Qgc3RhcnRpbmdCbG9ja3MgPSB0aGlzLmFwcG9pbnRtZW50c0J5U3RhcnRCbG9jaygpO1xuICAgIGNvbnN0IGRheXNDb3VudCA9IDc7XG4gICAgY29uc3QgdG90YWxCbG9ja3NQZXJEYXkgPSB0aGlzLnRvdGFsQmxvY2tzUGVyVmlld0RheSgpO1xuICAgIGNvbnN0IGJsb2NrSGVpZ2h0RXhwciA9IGB2YXIoLS1heC1jb21wLXNjaGVkdWxlci1iYXNpYy12aWV3LWJsb2Nrcy1oZWlnaHQsIDMwcHgpYDtcbiAgICBjb25zdCBOOiBudW1iZXIgPSBkYXlzQ291bnQ7XG4gICAgY29uc3Qgb2NjdXBpZWRCbG9ja3M6IFJlY29yZDxudW1iZXIsIFJlY29yZDxudW1iZXIsIGFueT4+ID0ge307XG5cbiAgICBmb3IgKGxldCBkYXlJbmRleCA9IDA7IGRheUluZGV4IDwgZGF5c0NvdW50OyBkYXlJbmRleCsrKSB7XG4gICAgICBjb25zdCBkYXlCbG9ja3MgPSBzdGFydGluZ0Jsb2Nrc1tkYXlJbmRleF0gPz8ge307XG4gICAgICBmb3IgKGxldCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IHRvdGFsQmxvY2tzUGVyRGF5OyBibG9ja0luZGV4KyspIHtcbiAgICAgICAgaWYgKG9jY3VwaWVkQmxvY2tzW2RheUluZGV4XT8uW2Jsb2NrSW5kZXhdKSBjb250aW51ZTtcblxuICAgICAgICBjb25zdCBzdGFydGluZ0FwcG9pbnRtZW50cyA9IGRheUJsb2Nrc1tibG9ja0luZGV4XSA/PyBbXTtcbiAgICAgICAgaWYgKHN0YXJ0aW5nQXBwb2ludG1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBhcHBvaW50bWVudFRvU2hvdyA9IG9yZGVyQnkoc3RhcnRpbmdBcHBvaW50bWVudHMsIFsoZSkgPT4gZS5lbmREYXRlLmdldFRpbWUoKV0sIFsnZGVzYyddKVswXTtcblxuICAgICAgICAgIGNvbnN0IEMgPSBkYXlJbmRleDtcbiAgICAgICAgICBsZXQgbGF5b3V0TGVmdCA9ICcwcHgnO1xuICAgICAgICAgIGlmIChDID4gMCAmJiBOID4gMSkgbGF5b3V0TGVmdCA9IGBjYWxjKCR7QyAqICgxMDAgLyBOKX0lKWA7XG4gICAgICAgICAgY29uc3QgbGF5b3V0VG9wID0gYGNhbGMoJHtibG9ja0hlaWdodEV4cHJ9ICogJHtibG9ja0luZGV4fSlgO1xuICAgICAgICAgIGxldCBsYXlvdXRIZWlnaHQgPSAnMHB4JztcbiAgICAgICAgICBsZXQgYXBwb2ludG1lbnREdXJhdGlvbk1pbnV0ZXMgPSAwO1xuICAgICAgICAgIGlmIChhcHBvaW50bWVudFRvU2hvdy5lbmREYXRlICYmIGFwcG9pbnRtZW50VG9TaG93LnN0YXJ0RGF0ZSkge1xuICAgICAgICAgICAgYXBwb2ludG1lbnREdXJhdGlvbk1pbnV0ZXMgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuY2FsY3VsYXRlRHVyYXRpb25Jbk1pbnV0ZXMoYXBwb2ludG1lbnRUb1Nob3cpO1xuICAgICAgICAgICAgaWYgKGFwcG9pbnRtZW50RHVyYXRpb25NaW51dGVzID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCBoZWlnaHRCbG9jayA9IGFwcG9pbnRtZW50RHVyYXRpb25NaW51dGVzIC8gMzA7XG4gICAgICAgICAgICAgIGxheW91dEhlaWdodCA9IGBtYXgoMHB4LCBjYWxjKCR7YmxvY2tIZWlnaHRFeHByfSAqICR7aGVpZ2h0QmxvY2t9IC0gJHt0aGlzLkdBUF9QWH1weCkpYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsYXlvdXRzLnB1c2goe1xuICAgICAgICAgICAgbGF5b3V0VG9wLFxuICAgICAgICAgICAgbGF5b3V0TGVmdCxcbiAgICAgICAgICAgIGxheW91dEhlaWdodCxcbiAgICAgICAgICAgIGFwcG9pbnRtZW50OiBhcHBvaW50bWVudFRvU2hvdyxcbiAgICAgICAgICAgIGxheW91dFdpZHRoOiAnY2FsYygxMDAlIC8gNyAtIDJyZW0pJyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IGJsb2Nrc1RvT2NjdXB5ID0gTWF0aC5jZWlsKGFwcG9pbnRtZW50RHVyYXRpb25NaW51dGVzIC8gMzApO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmxvY2tzVG9PY2N1cHk7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgb2NjdXBpZWRCbG9ja0luZGV4ID0gYmxvY2tJbmRleCArIGk7XG4gICAgICAgICAgICBpZiAob2NjdXBpZWRCbG9ja0luZGV4IDwgdG90YWxCbG9ja3NQZXJEYXkpIHtcbiAgICAgICAgICAgICAgaWYgKCFvY2N1cGllZEJsb2Nrc1tkYXlJbmRleF0pIG9jY3VwaWVkQmxvY2tzW2RheUluZGV4XSA9IHt9O1xuICAgICAgICAgICAgICBpZiAoIW9jY3VwaWVkQmxvY2tzW2RheUluZGV4XVtvY2N1cGllZEJsb2NrSW5kZXhdKSB7XG4gICAgICAgICAgICAgICAgb2NjdXBpZWRCbG9ja3NbZGF5SW5kZXhdW29jY3VwaWVkQmxvY2tJbmRleF0gPSBhcHBvaW50bWVudFRvU2hvdy5pZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsYXlvdXRzO1xuICB9KTtcblxuICB2aXN1YWxPY2N1cGFuY3lNYXAgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgbWFwID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcbiAgICBjb25zdCB2aXNpYmxlTGF5b3V0cyA9IHRoaXMudmlzaWJsZUFwcG9pbnRtZW50c0xheW91dCgpO1xuICAgIGNvbnN0IHZpZXdTdGFydERhdGUgPSB0aGlzLmRhdGUoKTtcbiAgICBjb25zdCBzdGFydEggPSB0aGlzLnN0YXJ0RGF5SG91cigpO1xuICAgIGNvbnN0IGVuZEggPSB0aGlzLmVuZERheUhvdXIoKTtcbiAgICBjb25zdCB0b3RhbEJsb2Nrc1BlckRheSA9IHRoaXMudG90YWxCbG9ja3NQZXJWaWV3RGF5KCk7XG5cbiAgICBpZiAoIXZpZXdTdGFydERhdGUgfHwgdHlwZW9mIHN0YXJ0SCAhPT0gJ251bWJlcicgfHwgdHlwZW9mIGVuZEggIT09ICdudW1iZXInKSByZXR1cm4gbWFwO1xuXG4gICAgZm9yIChjb25zdCBhcHBvaW50bWVudExheW91dCBvZiB2aXNpYmxlTGF5b3V0cykge1xuICAgICAgY29uc3Qgc3RhcnRJbmZvID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldEJsb2NrSWRlbnRpZmllcihcbiAgICAgICAgdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGFwcG9pbnRtZW50TGF5b3V0LmFwcG9pbnRtZW50LnN0YXJ0RGF0ZSwgdGhpcy5jYWxlbmRhcigpKSxcbiAgICAgICAgdmlld1N0YXJ0RGF0ZSxcbiAgICAgICAgc3RhcnRILFxuICAgICAgICBlbmRILFxuICAgICAgICA3LFxuICAgICAgKTtcbiAgICAgIGlmICghc3RhcnRJbmZvKSBjb250aW51ZTtcblxuICAgICAgY29uc3QgZHVyYXRpb25NaW51dGVzID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmNhbGN1bGF0ZUR1cmF0aW9uSW5NaW51dGVzKGFwcG9pbnRtZW50TGF5b3V0LmFwcG9pbnRtZW50KTtcbiAgICAgIGNvbnN0IGJsb2Nrc1RvT2NjdXB5ID0gTWF0aC5jZWlsKGR1cmF0aW9uTWludXRlcyAvIDMwKTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBibG9ja3NUb09jY3VweTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG9jY3VwaWVkQmxvY2tJbmRleCA9IHN0YXJ0SW5mby5ibG9ja0luZGV4ICsgaTtcbiAgICAgICAgaWYgKG9jY3VwaWVkQmxvY2tJbmRleCA+PSAwICYmIG9jY3VwaWVkQmxvY2tJbmRleCA8IHRvdGFsQmxvY2tzUGVyRGF5KSB7XG4gICAgICAgICAgY29uc3QgbWFwS2V5ID0gYCR7c3RhcnRJbmZvLmRheUluZGV4fS0ke29jY3VwaWVkQmxvY2tJbmRleH1gO1xuICAgICAgICAgIGlmICghbWFwLmhhcyhtYXBLZXkpKSB7XG4gICAgICAgICAgICBtYXAuc2V0KG1hcEtleSwgYXBwb2ludG1lbnRMYXlvdXQuYXBwb2ludG1lbnQuaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWFwO1xuICB9KTtcblxuICBvdmVyZmxvd0JhZGdlcyA9IGNvbXB1dGVkKCgpOiBBWFNjaGVkdWxlck92ZXJmbG93QmFkZ2VbXSA9PiB7XG4gICAgY29uc3QgYmFkZ2VzOiBBWFNjaGVkdWxlck92ZXJmbG93QmFkZ2VbXSA9IFtdO1xuICAgIGNvbnN0IGFjdGl2ZUJsb2NrcyA9IHRoaXMuYWN0aXZlQXBwb2ludG1lbnRzSW5CbG9jaygpO1xuICAgIGNvbnN0IG9jY3VwYW5jeU1hcCA9IHRoaXMudmlzdWFsT2NjdXBhbmN5TWFwKCk7XG4gICAgY29uc3QgZGF5c0NvdW50ID0gNztcbiAgICBjb25zdCB0b3RhbEJsb2Nrc1BlckRheSA9IHRoaXMudG90YWxCbG9ja3NQZXJWaWV3RGF5KCk7XG4gICAgY29uc3QgYmxvY2tIZWlnaHRFeHByID0gYHZhcigtLWF4LWNvbXAtc2NoZWR1bGVyLWJhc2ljLXZpZXctYmxvY2tzLWhlaWdodCwgMzBweClgO1xuICAgIGNvbnN0IE46IG51bWJlciA9IGRheXNDb3VudDtcblxuICAgIGlmICghYWN0aXZlQmxvY2tzIHx8ICFvY2N1cGFuY3lNYXAgfHwgdG90YWxCbG9ja3NQZXJEYXkgPT09IDApIHJldHVybiBiYWRnZXM7XG5cbiAgICBjb25zdCBjb3VudGVkSGlkZGVuQXBwb2ludG1lbnRLZXlzVG9kYXkgPSBuZXcgTWFwPG51bWJlciwgU2V0PGFueT4+KCk7XG5cbiAgICBmb3IgKGxldCBkYXlJbmRleCA9IDA7IGRheUluZGV4IDwgZGF5c0NvdW50OyBkYXlJbmRleCsrKSB7XG4gICAgICBjb3VudGVkSGlkZGVuQXBwb2ludG1lbnRLZXlzVG9kYXkuc2V0KGRheUluZGV4LCBuZXcgU2V0KCkpO1xuICAgICAgZm9yIChsZXQgYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCB0b3RhbEJsb2Nrc1BlckRheTsgYmxvY2tJbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IGJsb2NrTWFwS2V5ID0gYCR7ZGF5SW5kZXh9LSR7YmxvY2tJbmRleH1gO1xuICAgICAgICBjb25zdCBhY3RpdmVBcHBvaW50bWVudHMgPSBhY3RpdmVCbG9ja3NbZGF5SW5kZXhdPy5bYmxvY2tJbmRleF0gPz8gW107XG4gICAgICAgIGlmIChhY3RpdmVBcHBvaW50bWVudHMubGVuZ3RoID09PSAwKSBjb250aW51ZTtcblxuICAgICAgICBjb25zdCB2aXNpYmxlQXBwb2ludG1lbnRLZXkgPSBvY2N1cGFuY3lNYXAuZ2V0KGJsb2NrTWFwS2V5KTtcbiAgICAgICAgY29uc3QgaGlkZGVuQXBwb2ludG1lbnRzID0gYWN0aXZlQXBwb2ludG1lbnRzLmZpbHRlcigoYXBwb2ludG1lbnQpID0+IGFwcG9pbnRtZW50LmlkICE9PSB2aXNpYmxlQXBwb2ludG1lbnRLZXkpO1xuICAgICAgICBjb25zdCBuZXdseUhpZGRlbiA9IGhpZGRlbkFwcG9pbnRtZW50cy5maWx0ZXIoXG4gICAgICAgICAgKGUpID0+ICFjb3VudGVkSGlkZGVuQXBwb2ludG1lbnRLZXlzVG9kYXkuZ2V0KGRheUluZGV4KS5oYXMoZS5pZCksXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKG5ld2x5SGlkZGVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBDID0gZGF5SW5kZXg7XG4gICAgICAgICAgbGV0IGJhc2VDb2xMZWZ0ID0gJzBweCc7XG4gICAgICAgICAgaWYgKEMgPiAwICYmIE4gPiAxKSBiYXNlQ29sTGVmdCA9IGBjYWxjKCR7QyAqICgxMDAgLyBOKX0lKWA7XG4gICAgICAgICAgY29uc3QgYmFzZVRvcCA9IGBjYWxjKCR7YmxvY2tIZWlnaHRFeHByfSAqICR7YmxvY2tJbmRleH0pYDtcbiAgICAgICAgICBjb25zdCBiYWRnZUxlZnQgPSBgY2FsYygke2Jhc2VDb2xMZWZ0fSArIGNhbGMoMTAwJSAvICR7Tn0gLSAxLjc1cmVtKSlgO1xuICAgICAgICAgIGNvbnN0IGJhZGdlVG9wID0gYGNhbGMoJHtiYXNlVG9wfSArIDAuNzVyZW0pYDtcblxuICAgICAgICAgIGJhZGdlcy5wdXNoKHsga2V5OiBibG9ja01hcEtleSwgY291bnQ6IG5ld2x5SGlkZGVuLmxlbmd0aCwgYmFkZ2VUb3AsIGJhZGdlTGVmdCB9KTtcbiAgICAgICAgICBuZXdseUhpZGRlbi5mb3JFYWNoKChlKSA9PiBjb3VudGVkSGlkZGVuQXBwb2ludG1lbnRLZXlzVG9kYXkuZ2V0KGRheUluZGV4KS5hZGQoZS5pZCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBiYWRnZXM7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBTdHJ1Y3R1cmVzIGFsbC1kYXkgKG9yIFwiYmVjb21lcyBhbGwtZGF5XCIpIHNlZ21lbnRzIGZvciByZW5kZXJpbmcgaW4gdGhlIGFsbC1kYXkgc2xvdHMgZm9yIGVhY2ggZGF5IG9mIHRoZSB3ZWVrLlxuICAgKi9cbiAgYWxsRGF5QXBwb2ludG1lbnRzUGVyRGF5ID0gY29tcHV0ZWQoKCk6IEFYU2NoZWR1bGVyQWxsRGF5U2xvdERhdGFbXSA9PiB7XG4gICAgY29uc3QgZGF5c0luV2VlayA9IHRoaXMuZGF5c0FycmF5KCkubWFwKChlKSA9PiBlLmRhdGUpOyAvLyBBWERhdGVUaW1lIG9iamVjdHMgZm9yIGVhY2ggZGF5IGluIHRoZSB3ZWVrXG4gICAgY29uc3QgYWxsU2VnbWVudHNJblZpZXcgPSB0aGlzLnByb2Nlc3NlZEFwcG9pbnRtZW50c0ZvckxheW91dCgpOyAvLyBBbGwgcHJvY2Vzc2VkIHNlZ21lbnRzXG4gICAgY29uc3QgcmVzdWx0OiBBWFNjaGVkdWxlckFsbERheVNsb3REYXRhW10gPSBbXTtcblxuICAgIGlmICghZGF5c0luV2VlayB8fCBkYXlzSW5XZWVrLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHJlc3VsdDtcblxuICAgIGRheXNJbldlZWsuZm9yRWFjaCgoZGF5RGF0ZSkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudERheVN0YXJ0ID0gZGF5RGF0ZS5zdGFydE9mKCdkYXknKTsgLy8gRm9yIGFjY3VyYXRlIGRheSBjb21wYXJpc29uXG5cbiAgICAgIC8vIEZpbHRlciBzZWdtZW50cyB0aGF0IGFyZSBtYXJrZWQgYXMgJ2FsbERheScgQU5EIGJlbG9uZyB0byB0aGUgY3VycmVudCAnZGF5RGF0ZSdcbiAgICAgIGNvbnN0IGFsbERheVNlZ21lbnRzRm9yVGhpc0RheSA9IGFsbFNlZ21lbnRzSW5WaWV3LmZpbHRlcihcbiAgICAgICAgKHNlZ21lbnQpID0+XG4gICAgICAgICAgc2VnbWVudC5hbGxEYXkgJiZcbiAgICAgICAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoc2VnbWVudC5zdGFydERhdGUsIHRoaXMuY2FsZW5kYXIoKSkuc3RhcnRPZignZGF5JykuZXF1YWwoY3VycmVudERheVN0YXJ0LCAnZGF5JyksXG4gICAgICApO1xuXG4gICAgICAvLyBTb3J0IHRoZXNlIHNlZ21lbnRzIGZvciBjb25zaXN0ZW50IGRpc3BsYXlcbiAgICAgIC8vIFByaW1hcmlseSBieSBvcmlnaW5hbCBzdGFydCB0aW1lLCB0aGVuIGJ5IGR1cmF0aW9uIG9mIG9yaWdpbmFsIGFwcG9pbnRtZW50LCB0aGVuIHRpdGxlXG4gICAgICBjb25zdCBzb3J0ZWRBcHBvaW50bWVudHNGb3JUaGlzRGF5ID0gb3JkZXJCeShcbiAgICAgICAgYWxsRGF5U2VnbWVudHNGb3JUaGlzRGF5LFxuICAgICAgICBbXG4gICAgICAgICAgKHMpID0+IHMub3JpZ2luYWxTdGFydERhdGUuZ2V0VGltZSgpLFxuICAgICAgICAgIChzKSA9PiBzLm9yaWdpbmFsRW5kRGF0ZS5nZXRUaW1lKCkgLSBzLm9yaWdpbmFsU3RhcnREYXRlLmdldFRpbWUoKSxcbiAgICAgICAgICAocykgPT4gcy50aXRsZT8udG9Mb3dlckNhc2UoKSA/PyAnJyxcbiAgICAgICAgXSxcbiAgICAgICAgWydhc2MnLCAnZGVzYycsICdhc2MnXSwgLy8gRWFybGllciBzdGFydCwgbG9uZ2VyIGR1cmF0aW9uLCB0aGVuIGFscGhhYmV0aWNhbCB0aXRsZVxuICAgICAgKTtcblxuICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICBkYXk6IGRheURhdGUsIC8vIFRoZSBBWERhdGVUaW1lIGZvciB0aGlzIGRheSBjb2x1bW5cbiAgICAgICAgYXBwb2ludG1lbnRzOiBzb3J0ZWRBcHBvaW50bWVudHNGb3JUaGlzRGF5LCAvLyBBcnJheSBvZiBzZWdtZW50cyBmb3IgdGhlIGFsbC1kYXkgc2xvdFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG5cbiAgb3ZlcmZsb3dCYWRnZXNXaXRoRGF0YSA9IGNvbXB1dGVkKCgpOiBBWFNjaGVkdWxlckdyaWRCYWRnZUluZm9bXSA9PiB7XG4gICAgY29uc3QgYmFkZ2VzSW5mbzogQVhTY2hlZHVsZXJHcmlkQmFkZ2VJbmZvW10gPSBbXTtcbiAgICBjb25zdCBhY3RpdmVCbG9ja3MgPSB0aGlzLmFjdGl2ZUFwcG9pbnRtZW50c0luQmxvY2soKTtcbiAgICBjb25zdCBvY2N1cGFuY3lNYXAgPSB0aGlzLnZpc3VhbE9jY3VwYW5jeU1hcCgpO1xuICAgIGNvbnN0IGRheXNDb3VudCA9IDc7XG4gICAgY29uc3QgdG90YWxCbG9ja3NQZXJEYXkgPSB0aGlzLnRvdGFsQmxvY2tzUGVyVmlld0RheSgpO1xuICAgIGNvbnN0IGJsb2NrSGVpZ2h0RXhwciA9IGB2YXIoLS1heC1jb21wLXNjaGVkdWxlci1iYXNpYy12aWV3LWJsb2Nrcy1oZWlnaHQsIDMwcHgpYDtcbiAgICBjb25zdCBOOiBudW1iZXIgPSBkYXlzQ291bnQ7XG5cbiAgICBpZiAoIWFjdGl2ZUJsb2NrcyB8fCAhb2NjdXBhbmN5TWFwIHx8IHRvdGFsQmxvY2tzUGVyRGF5ID09PSAwKSByZXR1cm4gYmFkZ2VzSW5mbztcblxuICAgIGNvbnN0IGNvdW50ZWRIaWRkZW5BcHBvaW50bWVudEtleXNUb2RheSA9IG5ldyBNYXA8bnVtYmVyLCBTZXQ8YW55Pj4oKTtcblxuICAgIGZvciAobGV0IGRheUluZGV4ID0gMDsgZGF5SW5kZXggPCBkYXlzQ291bnQ7IGRheUluZGV4KyspIHtcbiAgICAgIGNvdW50ZWRIaWRkZW5BcHBvaW50bWVudEtleXNUb2RheS5zZXQoZGF5SW5kZXgsIG5ldyBTZXQoKSk7XG4gICAgICBmb3IgKGxldCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IHRvdGFsQmxvY2tzUGVyRGF5OyBibG9ja0luZGV4KyspIHtcbiAgICAgICAgY29uc3QgYmxvY2tNYXBLZXkgPSBgJHtkYXlJbmRleH0tJHtibG9ja0luZGV4fWA7XG4gICAgICAgIGNvbnN0IGFjdGl2ZUFwcG9pbnRtZW50cyA9IGFjdGl2ZUJsb2Nrc1tkYXlJbmRleF0/LltibG9ja0luZGV4XSA/PyBbXTtcbiAgICAgICAgaWYgKGFjdGl2ZUFwcG9pbnRtZW50cy5sZW5ndGggPT09IDApIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnN0IHZpc2libGVBcHBvaW50bWVudEtleSA9IG9jY3VwYW5jeU1hcC5nZXQoYmxvY2tNYXBLZXkpO1xuICAgICAgICAvLyBGaW5kIGFsbCBoaWRkZW4gYXBwb2ludG1lbnRzIGZvciB0aGlzIHNwZWNpZmljIGJsb2NrXG4gICAgICAgIGNvbnN0IGhpZGRlbkFwcG9pbnRtZW50cyA9IGFjdGl2ZUFwcG9pbnRtZW50cy5maWx0ZXIoKGFwcG9pbnRtZW50KSA9PiBhcHBvaW50bWVudC5pZCAhPT0gdmlzaWJsZUFwcG9pbnRtZW50S2V5KTtcbiAgICAgICAgLy8gRmluZCB3aGljaCBvZiB0aG9zZSBoaWRkZW4gb25lcyBoYXZlbid0IGJlZW4gY291bnRlZCB0b2RheSB5ZXRcbiAgICAgICAgY29uc3QgbmV3bHlIaWRkZW4gPSBoaWRkZW5BcHBvaW50bWVudHMuZmlsdGVyKFxuICAgICAgICAgIChlKSA9PiAhY291bnRlZEhpZGRlbkFwcG9pbnRtZW50S2V5c1RvZGF5LmdldChkYXlJbmRleCkuaGFzKGUuaWQpLFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChuZXdseUhpZGRlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgQyA9IGRheUluZGV4O1xuICAgICAgICAgIGxldCBiYXNlQ29sTGVmdCA9ICcwcHgnO1xuICAgICAgICAgIGlmIChDID4gMCAmJiBOID4gMSkgYmFzZUNvbExlZnQgPSBgY2FsYygke0MgKiAoMTAwIC8gTil9JSlgO1xuICAgICAgICAgIGNvbnN0IGJhc2VUb3AgPSBgY2FsYygke2Jsb2NrSGVpZ2h0RXhwcn0gKiAke2Jsb2NrSW5kZXh9KWA7XG4gICAgICAgICAgLy8gS2VlcCB5b3VyIHBvc2l0aW9uaW5nIGxvZ2ljIGZvciB0aGUgYmFkZ2UgaXRzZWxmXG4gICAgICAgICAgY29uc3QgYmFkZ2VMZWZ0ID0gYGNhbGMoJHtiYXNlQ29sTGVmdH0gKyBjYWxjKDEwMCUgLyAke059IC0gMS43NXJlbSkpYDtcbiAgICAgICAgICBjb25zdCBiYWRnZVRvcCA9IGBjYWxjKCR7YmFzZVRvcH0gKyAwLjc1cmVtKWA7XG5cbiAgICAgICAgICAvLyBTdG9yZSB0aGUgYmFkZ2UgaW5mbyAqYW5kKiB0aGUgbGlzdCBvZiBhcHBvaW50bWVudHMgaXQgcmVwcmVzZW50c1xuICAgICAgICAgIGJhZGdlc0luZm8ucHVzaCh7XG4gICAgICAgICAgICBrZXk6IGJsb2NrTWFwS2V5LFxuICAgICAgICAgICAgY291bnQ6IG5ld2x5SGlkZGVuLmxlbmd0aCxcbiAgICAgICAgICAgIGJhZGdlVG9wLFxuICAgICAgICAgICAgYmFkZ2VMZWZ0LFxuICAgICAgICAgICAgaGlkZGVuQXBwb2ludG1lbnRzOiBuZXdseUhpZGRlbiwgLy8gU3RvcmUgdGhlIGFjdHVhbCBoaWRkZW4gYXBwb2ludG1lbnRzXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBNYXJrIHRoZXNlIGFzIGNvdW50ZWQgZm9yIHRvZGF5XG4gICAgICAgICAgbmV3bHlIaWRkZW4uZm9yRWFjaCgoZSkgPT4gY291bnRlZEhpZGRlbkFwcG9pbnRtZW50S2V5c1RvZGF5LmdldChkYXlJbmRleCkuYWRkKGUuaWQpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBTb3J0IHRoZSBiYWRnZXMgYnkgdG9wIHRoZW4gbGVmdCBmb3IgY29uc2lzdGVudCByZW5kZXJpbmcgb3JkZXI/IChPcHRpb25hbClcbiAgICAvLyBiYWRnZXNJbmZvLnNvcnQoKGEsIGIpID0+IHtcbiAgICAvLyAgIGNvbnN0IHRvcENvbXBhcmUgPSBhLmJhZGdlVG9wLmxvY2FsZUNvbXBhcmUoYi5iYWRnZVRvcCk7XG4gICAgLy8gICBpZiAodG9wQ29tcGFyZSAhPT0gMCkgcmV0dXJuIHRvcENvbXBhcmU7XG4gICAgLy8gICByZXR1cm4gYS5iYWRnZUxlZnQubG9jYWxlQ29tcGFyZShiLmJhZGdlTGVmdCk7XG4gICAgLy8gfSk7XG4gICAgcmV0dXJuIGJhZGdlc0luZm87XG4gIH0pO1xuXG4gIHByb3RlY3RlZCBpc1RvZGF5KGRhdGU6IEFYRGF0ZVRpbWUpOiBib29sZWFuIHtcbiAgICBjb25zdCB0b2RheSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShuZXcgRGF0ZSgpKTtcbiAgICByZXR1cm4gZGF0ZS5lcXVhbCh0b2RheSwgJ2RheScpO1xuICB9XG4gIHByb3RlY3RlZCBpc0hvbGlkYXkoZGF0ZTogQVhEYXRlVGltZSk6IHsgc3RhdGU6ICdob2xpZGF5JyB8ICd3ZWVrZW5kJyB8ICdub25lJzsgaG9saWRheT86IEFYSG9saWRheURhdGUgfSB7XG4gICAgY29uc3QgaXNIb2xpZGF5ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmlzSG9saWRheShkYXRlKTtcbiAgICBpZiAoaXNIb2xpZGF5KSB7XG4gICAgICBjb25zdCBob2xpZGF5ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuaG9saWRheXMuZmlsdGVyKChkKSA9PiBkYXRlLmVxdWFsKGQuZGF0ZSwgJ2RheScpKVswXTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXRlOiAnaG9saWRheScsXG4gICAgICAgIGhvbGlkYXksXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBpc1dlZWtlbmQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaXNXZWVrZW5kKGRhdGUsIHRoaXMuY2FsZW5kYXIoKSk7XG4gICAgaWYgKGlzV2Vla2VuZCkge1xuICAgICAgcmV0dXJuIHsgc3RhdGU6ICd3ZWVrZW5kJyB9O1xuICAgIH1cbiAgICByZXR1cm4geyBzdGF0ZTogJ25vbmUnIH07XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmF4LXN0YXRlLXJlYWRvbmx5JykgZ2V0IGlzUmVhZG9ubHkoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZG9ubHkoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci13ZWVrLWhlYWRlclwiPlxuICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLXdlZWstaGVhZGVyLWRheXNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLXdlZWstaGVhZGVyLXRhYmxlXCI+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci13ZWVrLWhlYWRlci1kYXRlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICBAZm9yIChkYXkgb2YgZGF5c0FycmF5KCk7IHRyYWNrIGRheS5kYXRlLmRhdGUuZ2V0VGltZSgpKSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBbY2xhc3MuYXgtc3RhdGUtdG9kYXldPVwiaXNUb2RheShkYXkuZGF0ZSlcIlxuICAgICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXdlZWstaGVhZGVyLWRhdGUtZGF5XCJcbiAgICAgICAgICBbY2xhc3MuYXgtc3RhdGUtaG9saWRheV09XCJkYXkuaG9saWRheS5zdGF0ZSAhPT0gJ25vbmUnXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci13ZWVrLWhlYWRlci1kYXRlLWRheS1jaGFyIGF4LXNjaGVkdWxlci10cnVuY2F0ZVwiXG4gICAgICAgICAgICBbYXhUb29sdGlwXT1cImRheS5ob2xpZGF5Py5ob2xpZGF5Py50aXRsZSA/PyAnJ1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgZGF5LmRhdGUgfCBmb3JtYXQ6ICdkYXRlJyA6IHsgZm9ybWF0OiAnZGRkZCcsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgICAgICAgQGlmIChkYXkuaG9saWRheS5zdGF0ZSA9PT0gJ2hvbGlkYXknICYmIGRheS5ob2xpZGF5LmhvbGlkYXkudGl0bGUpIHtcbiAgICAgICAgICAgICAgKCB7eyBkYXkuaG9saWRheS5ob2xpZGF5LnRpdGxlIH19IClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC1zY2hlZHVsZXItd2Vlay1oZWFkZXItZGF0ZS1kYXktbnVtXCI+XG4gICAgICAgICAgICB7eyBkYXkuZGF0ZSB8IGZvcm1hdDogJ2RhdGUnIDogeyBmb3JtYXQ6ICdERCcsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLXdlZWstaGVhZGVyLWRheXNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLXdlZWstaGVhZGVyLXRhYmxlXCI+e3sgJ2RhdGVUaW1lLmR1cmF0aW9uLmFsbC1kYXknIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L2Rpdj5cbiAgICA8ZGl2IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXdlZWstaGVhZGVyLWRhdGVcIj5cbiAgICAgIEBmb3IgKHNsb3REYXRhIG9mIGFsbERheUFwcG9pbnRtZW50c1BlckRheSgpOyB0cmFjayBzbG90RGF0YS5kYXkuZGF0ZS5nZXRUaW1lKCkpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGF4RHJvcFpvbmVcbiAgICAgICAgICAjem9uZTI9XCJheERyb3Bab25lXCJcbiAgICAgICAgICBbY2xhc3MuYXgtc2NoZWR1bGVyLXNsb3QtaG92ZXJlZF09XCJ6b25lMi5pc0hvdmVyZWQoKVwiXG4gICAgICAgICAgKG9uRWxlbWVudERyb3ApPVwiaGFuZGxlQWxsRGF5RHJvcCgkZXZlbnQsIHNsb3REYXRhLmRheSlcIlxuICAgICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLWFsbC1kYXktc2xvdFwiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFsbERheVNsb3RFdmVudCgkZXZlbnQsIHNsb3REYXRhLmRheSlcIlxuICAgICAgICAgIChkYmxjbGljayk9XCJoYW5kbGVBbGxEYXlTbG90RXZlbnQoJGV2ZW50LCBzbG90RGF0YS5kYXkpXCJcbiAgICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlQWxsRGF5U2xvdEV2ZW50KCRldmVudCwgc2xvdERhdGEuZGF5KVwiXG4gICAgICAgID5cbiAgICAgICAgICBAaWYgKHNsb3REYXRhLmFwcG9pbnRtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGF4RHJhZ1xuICAgICAgICAgICAgICBbZHJhZ0N1cnNvcl09XCInZ3JhYidcIlxuICAgICAgICAgICAgICBbZHJhZ1RyYW5zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbZHJhZ0VsZW1lbnRDbG9uZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2RyYWdEaXNhYmxlZF09XCIhZHJhZ2dhYmxlKCkgfHwgc2xvdERhdGEuYXBwb2ludG1lbnRzWzBdLnJlYWRvbmx5IHx8IHJlYWRvbmx5KClcIlxuICAgICAgICAgICAgICBbZHJhZ0RhdGFdPVwic2xvdERhdGEuYXBwb2ludG1lbnRzWzBdXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzbG90RGF0YS5hcHBvaW50bWVudHNbMF0pXCJcbiAgICAgICAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzbG90RGF0YS5hcHBvaW50bWVudHNbMF0pXCJcbiAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzbG90RGF0YS5hcHBvaW50bWVudHNbMF0pXCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cInNsb3REYXRhLmFwcG9pbnRtZW50c1swXS50aXRsZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLWhlYWRlci13ZWVrLWFwcG9pbnRtZW50XCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic2xvdERhdGEuYXBwb2ludG1lbnRzWzBdLmNzc0NsYXNzPz9gYXgtc2NoZWR1bGVyLSR7c2xvdERhdGEuYXBwb2ludG1lbnRzWzBdLnByaW9yaXR5Pz8ncHJpbWFyeSd9LXBlcmlvcml0eWBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8YXgtdGl0bGUgY2xhc3M9XCJheC1zY2hlZHVsZXItdHJ1bmNhdGVcIj57eyBzbG90RGF0YS5hcHBvaW50bWVudHNbMF0udGl0bGUgfX08L2F4LXRpdGxlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoc2xvdERhdGEuYXBwb2ludG1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgI21vcmVBcHBvaW50bWVudHNcbiAgICAgICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItYXBwb2ludG1lbnQtYmFkZ2VcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJzbG90RGF0YS5hcHBvaW50bWVudHNbMV0uY3NzQ2xhc3M/P2BheC1zY2hlZHVsZXItJHtzbG90RGF0YS5hcHBvaW50bWVudHNbMV0ucHJpb3JpdHk/PydwcmltYXJ5J30tcGVyaW9yaXR5YFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICt7eyBzbG90RGF0YS5hcHBvaW50bWVudHMubGVuZ3RoIC0gMSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YXgtcG9wb3ZlciBbdGFyZ2V0XT1cIm1vcmVBcHBvaW50bWVudHNcIiBbcGxhY2VtZW50XT1cIidib3R0b20nXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1vdmVybGF5LXBhbmUgYXgtc2NoZWR1bGVyLXBvcG92ZXJcIiBbY2xhc3MuYXgtc3RhdGUtcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGFwcG9pbnRtZW50IG9mIHNsb3REYXRhLmFwcG9pbnRtZW50czsgdHJhY2sgYXBwb2ludG1lbnQuaWQ7IGxldCBmaXJzdCA9ICRmaXJzdCkge1xuICAgICAgICAgICAgICAgICAgQGlmICghZmlyc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGF4RHJhZ1xuICAgICAgICAgICAgICAgICAgICAgIFtkcmFnQ3Vyc29yXT1cIidncmFiJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2RyYWdEYXRhXT1cImFwcG9pbnRtZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICBbZHJhZ1RyYW5zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkcmFnRWxlbWVudENsb25lXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkcmFnRGlzYWJsZWRdPVwiIWRyYWdnYWJsZSgpIHx8IGFwcG9pbnRtZW50LnJlYWRvbmx5IHx8IHJlYWRvbmx5KClcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgYXBwb2ludG1lbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGFwcG9pbnRtZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBhcHBvaW50bWVudClcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJhcHBvaW50bWVudC50aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItcG9wb3Zlci1hcHBvaW50bWVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiYXBwb2ludG1lbnQuY3NzQ2xhc3M/P2BheC1zY2hlZHVsZXItJHthcHBvaW50bWVudC5wcmlvcml0eT8/J3ByaW1hcnknfS1wZXJpb3JpdHlgXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxheC10aXRsZSBjbGFzcz1cImF4LXNjaGVkdWxlci10cnVuY2F0ZVwiPnt7IGFwcG9pbnRtZW50LnRpdGxlIH19PC9heC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvYXgtcG9wb3Zlcj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLXdlZWstdGltZS1jb250YWluZXJcIj5cbiAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci13ZWVrLXRpbWVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICBAZm9yICh0aW1lIG9mIGhvdXJzQXJyYXkoKTsgdHJhY2sgdGltZS5kYXRlLmdldFRpbWUoKSkge1xuICAgICAgPGRpdj5cbiAgICAgICAge3sgdGltZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBmb3JtYXQ6ICdISDptbScsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLXdlZWstdGFibGUtY29udGFpbmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci13ZWVrLWFwcG9pbnRtZW50LWNvbnRhaW5lclwiPlxuICAgICAgQGZvciAoYXBwdCBvZiB2aXNpYmxlQXBwb2ludG1lbnRzTGF5b3V0KCk7IHRyYWNrIGFwcHQuYXBwb2ludG1lbnQuaWQpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGF4RHJhZ1xuICAgICAgICAgIFtkcmFnQ3Vyc29yXT1cIidncmFiJ1wiXG4gICAgICAgICAgW2RyYWdUcmFuc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICBbZHJhZ0VsZW1lbnRDbG9uZV09XCJ0cnVlXCJcbiAgICAgICAgICBbZHJhZ0Rpc2FibGVkXT1cIiFkcmFnZ2FibGUoKSB8fCBhcHB0LmFwcG9pbnRtZW50LnJlYWRvbmx5IHx8IHJlYWRvbmx5KClcIlxuICAgICAgICAgIFtkcmFnRGF0YV09XCJhcHB0LmFwcG9pbnRtZW50XCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGFwcHQuYXBwb2ludG1lbnQpXCJcbiAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGFwcHQuYXBwb2ludG1lbnQpXCJcbiAgICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGFwcHQuYXBwb2ludG1lbnQpXCJcbiAgICAgICAgICBbdGl0bGVdPVwiYXBwdC5hcHBvaW50bWVudC50aXRsZVwiXG4gICAgICAgICAgW3N0eWxlLmhlaWdodF09XCJhcHB0LmxheW91dEhlaWdodFwiXG4gICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItd2Vlay1hcHBvaW50bWVudFwiXG4gICAgICAgICAgW3N0eWxlLmluc2V0LWJsb2NrLXN0YXJ0XT1cImFwcHQubGF5b3V0VG9wXCJcbiAgICAgICAgICBbc3R5bGUuaW5zZXQtaW5saW5lLXN0YXJ0XT1cImFwcHQubGF5b3V0TGVmdFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiYXBwdC5hcHBvaW50bWVudC5jc3NDbGFzcz8/YGF4LXNjaGVkdWxlci0ke2FwcHQuYXBwb2ludG1lbnQucHJpb3JpdHk/PydwcmltYXJ5J30tcGVyaW9yaXR5YFwiXG4gICAgICAgID5cbiAgICAgICAgICA8YXgtdGl0bGUgY2xhc3M9XCJheC1zY2hlZHVsZXItdHJ1bmNhdGVcIj57eyBhcHB0LmFwcG9pbnRtZW50LnRpdGxlIH19PC9heC10aXRsZT5cbiAgICAgICAgICA8YXgtc3VidGl0bGU+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICBhcHB0LmFwcG9pbnRtZW50Lm9yaWdpbmFsU3RhcnREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgLVxuICAgICAgICAgICAge3sgYXBwdC5hcHBvaW50bWVudC5vcmlnaW5hbEVuZERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgZm9ybWF0OiAnSEg6bW0nLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX1cbiAgICAgICAgICA8L2F4LXN1YnRpdGxlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cblxuICAgICAgPCEtLSBPdmVyZmxvdyBCYWRnZXMgd2l0aCBQb3BvdmVycyAtLT5cbiAgICAgIEBmb3IgKGJhZGdlIG9mIG92ZXJmbG93QmFkZ2VzV2l0aERhdGEoKTsgdHJhY2sgYmFkZ2Uua2V5KSB7XG4gICAgICAgIDwhLS0gV3JhcCBiYWRnZSBhbmQgcG9wb3ZlciBmb3IgdGFyZ2V0aW5nIC0tPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGVcIlxuICAgICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLWJhZGdlLXdyYXBwZXJcIlxuICAgICAgICAgIFtzdHlsZS5pbnNldC1ibG9jay1zdGFydF09XCJiYWRnZS5iYWRnZVRvcFwiXG4gICAgICAgICAgW3N0eWxlLmluc2V0LWlubGluZS1zdGFydF09XCJiYWRnZS5iYWRnZUxlZnRcIlxuICAgICAgICA+XG4gICAgICAgICAgPCEtLSBUaGUgQmFkZ2UgaXRzZWxmIC0tPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICNhY3Rpb25CdXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLWFwcG9pbnRtZW50LWJhZGdlXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImJhZGdlLmhpZGRlbkFwcG9pbnRtZW50c1swXS5jc3NDbGFzcz8/YGF4LXNjaGVkdWxlci0ke2JhZGdlLmhpZGRlbkFwcG9pbnRtZW50c1swXS5wcmlvcml0eT8/J3ByaW1hcnknfS1wZXJpb3JpdHlgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICAre3sgYmFkZ2UuY291bnQgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIFRoZSBQb3BvdmVyIC0tPlxuICAgICAgICAgIDxheC1wb3BvdmVyIFt0YXJnZXRdPVwiYWN0aW9uQnV0dG9uXCIgW3BsYWNlbWVudF09XCInYm90dG9tJ1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF4LW92ZXJsYXktcGFuZSBheC1zY2hlZHVsZXItcG9wb3ZlclwiPlxuICAgICAgICAgICAgICBAZm9yIChhcHBvaW50bWVudCBvZiBiYWRnZS5oaWRkZW5BcHBvaW50bWVudHM7IHRyYWNrIGFwcG9pbnRtZW50LmlkKSB7XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgYXhEcmFnXG4gICAgICAgICAgICAgICAgICBbZHJhZ0N1cnNvcl09XCInZ3JhYidcIlxuICAgICAgICAgICAgICAgICAgW2RyYWdEYXRhXT1cImFwcG9pbnRtZW50XCJcbiAgICAgICAgICAgICAgICAgIFtkcmFnVHJhbnNpdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICBbZHJhZ0VsZW1lbnRDbG9uZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFtkcmFnRGlzYWJsZWRdPVwiIWRyYWdnYWJsZSgpIHx8IGFwcG9pbnRtZW50LnJlYWRvbmx5IHx8IHJlYWRvbmx5KClcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBhcHBvaW50bWVudClcIlxuICAgICAgICAgICAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBhcHBvaW50bWVudClcIlxuICAgICAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBhcHBvaW50bWVudClcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cImFwcG9pbnRtZW50LnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXBvcG92ZXItYXBwb2ludG1lbnRcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiYXBwb2ludG1lbnQuY3NzQ2xhc3M/P2BheC1zY2hlZHVsZXItJHthcHBvaW50bWVudC5wcmlvcml0eT8/J3ByaW1hcnknfS1wZXJpb3JpdHlgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8YXgtdGl0bGUgY2xhc3M9XCJheC1zY2hlZHVsZXItdHJ1bmNhdGVcIj57eyBhcHBvaW50bWVudC50aXRsZSB9fTwvYXgtdGl0bGU+XG4gICAgICAgICAgICAgICAgICA8YXgtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgYXBwb2ludG1lbnQub3JpZ2luYWxTdGFydERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgZm9ybWF0OiAnSEg6bW0nLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmNcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgLVxuICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgIGFwcG9pbnRtZW50Lm9yaWdpbmFsRW5kRGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBmb3JtYXQ6ICdISDptbScsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luY1xuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPC9heC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9heC1wb3BvdmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cblxuICAgIDx0YWJsZSBhcmlhLWhpZGRlbj1cInRydWVcIiBbYm9yZGVyXT1cIjFcIj5cbiAgICAgIDx0Ym9keT5cbiAgICAgICAgQGZvciAodGltZSBvZiBob3Vyc0FycmF5KCk7IHRyYWNrIHRpbWUuZGF0ZS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICBAZm9yIChkYXkgb2YgZGF5c0FycmF5KCk7IHRyYWNrIGRheS5kYXRlLmRhdGUuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgIGF4RHJvcFpvbmVcbiAgICAgICAgICAgICAgICAjem9uZT1cImF4RHJvcFpvbmVcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5heC1zY2hlZHVsZXItc2xvdC1ob3ZlcmVkXT1cInpvbmUuaXNIb3ZlcmVkKClcIlxuICAgICAgICAgICAgICAgIChvbkVsZW1lbnREcm9wKT1cImhhbmRsZVNpbmdsZURheURyb3AoJGV2ZW50LCB0aW1lLCBkYXkuZGF0ZSwgMClcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVTaW5nbGVTbG90RXZlbnQoJGV2ZW50LCB0aW1lLCBkYXkuZGF0ZSwgMClcIlxuICAgICAgICAgICAgICAgIChkYmxjbGljayk9XCJoYW5kbGVTaW5nbGVTbG90RXZlbnQoJGV2ZW50LCB0aW1lLCBkYXkuZGF0ZSwgMClcIlxuICAgICAgICAgICAgICAgIChjb250ZXh0bWVudSk9XCJoYW5kbGVTaW5nbGVTbG90RXZlbnQoJGV2ZW50LCB0aW1lLCBkYXkuZGF0ZSwgMClcIlxuICAgICAgICAgICAgICA+PC90ZD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIEBmb3IgKGRheSBvZiBkYXlzQXJyYXkoKTsgdHJhY2sgZGF5LmRhdGUuZGF0ZS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgYXhEcm9wWm9uZVxuICAgICAgICAgICAgICAgICN6b25lMj1cImF4RHJvcFpvbmVcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5heC1zY2hlZHVsZXItc2xvdC1ob3ZlcmVkXT1cInpvbmUyLmlzSG92ZXJlZCgpXCJcbiAgICAgICAgICAgICAgICAob25FbGVtZW50RHJvcCk9XCJoYW5kbGVTaW5nbGVEYXlEcm9wKCRldmVudCwgdGltZSwgZGF5LmRhdGUsIDEpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlU2luZ2xlU2xvdEV2ZW50KCRldmVudCwgdGltZSwgZGF5LmRhdGUsIDEpXCJcbiAgICAgICAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlU2luZ2xlU2xvdEV2ZW50KCRldmVudCwgdGltZSwgZGF5LmRhdGUsIDEpXCJcbiAgICAgICAgICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlU2luZ2xlU2xvdEV2ZW50KCRldmVudCwgdGltZSwgZGF5LmRhdGUsIDEpXCJcbiAgICAgICAgICAgICAgPjwvdGQ+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgfVxuICAgICAgPC90Ym9keT5cbiAgICA8L3RhYmxlPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXCalendarComponent } from '@acorex/components/calendar';\nimport { AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXSelectBoxComponent } from '@acorex/components/select-box';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXHtmlUtil, AXUnsubscriber } from '@acorex/core/utils';\nimport { isPlatformBrowser, NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, input, linkedSignal, model, output, PLATFORM_ID, signal, untracked, viewChild, ViewEncapsulation, } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXSchedulerService } from './scheduler.service';\nimport { AXSchedulerAgendaViewComponent } from './views/agenda/scheduler-agenda-view.component';\nimport { AXSchedulerDayViewComponent } from './views/day/scheduler-day-view.component';\nimport { AXSchedulerMonthViewComponent } from './views/month/scheduler-month-view.component';\nimport { AXSchedulerTimelineDayViewComponent } from './views/timeline-day/scheduler-timeline-day-view.component';\nimport { AXSchedulerTimelineMonthViewComponent } from './views/timeline-month/scheduler-timeline-month-view.component';\nimport { AXSchedulerTimelineMultiDayViewComponent } from './views/timeline-multi-day/scheduler-timeline-multi-day-view.component';\nimport { AXSchedulerWeekViewComponent } from './views/week/scheduler-week-view.component';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/forms\";\nexport class AXSchedulerComponent extends NXComponent {\n constructor() {\n super(...arguments);\n this.platformId = inject(PLATFORM_ID);\n this.unsubscriber = inject(AXUnsubscriber);\n this.formatService = inject(AXFormatService);\n this.localeService = inject(AXLocaleService);\n this.calendarService = inject(AXCalendarService);\n this.schedulerService = inject(AXSchedulerService);\n this.translationService = inject(AXTranslationService);\n this.calendarPopover = viewChild('calendarPopover');\n this.viewModeSelectbox = viewChild(AXSelectBoxComponent);\n this.displayViews = {\n day: 'daily',\n week: 'weekly',\n month: 'monthly',\n 'timeline-day': 'daily-timeline',\n 'timeline-multi-day': 'multi-day-timeline',\n 'timeline-month': 'monthly-timeline',\n agenda: 'agenda',\n };\n this.calendar = input();\n this.calendarType = linkedSignal(() => this.calendar() ?? this.localeService.activeProfile().calendar.system);\n this.startingDate = input(new Date());\n this.currentDate = linkedSignal(() => this.calendarService.create(this.startingDate(), this.calendarType()).startOf('day'));\n this._appointments = signal([]);\n this.appointments = this._appointments.asReadonly();\n this.rtl = signal(false);\n this.isFullScreen = signal(false);\n this.viewsDataSource = signal([]);\n this.prevDate = signal(this.calendarService.create(new Date(), this.calendarType()));\n this.endDayHour = input(24);\n this.startDayHour = input(8);\n this.hasHeader = input(true);\n this.readonly = input(false);\n this.draggable = input(true);\n this.allowFullScreen = input(true);\n this.multiDayViewDaysCount = input(7);\n this.dataSource = input([]);\n this.firstDayOfWeek = input('sunday');\n this.views = input([\n 'day',\n 'week',\n 'month',\n 'timeline-day',\n 'timeline-multi-day',\n 'timeline-month',\n 'agenda',\n ]);\n this.selectedView = model(this.views()[0]);\n this.prevView = signal(this.selectedView());\n // --- Public Outputs ---\n this.onDataLoaded = output();\n this.onRangeChanged = output();\n this.onSlotClicked = output();\n this.onSlotDblClicked = output();\n this.onSlotRightClick = output();\n this.onAppointmentDrop = output();\n this.onAppointmentClicked = output();\n this.onAppointmentDblClicked = output();\n this.onAppointmentRightClick = output();\n this.#appointmentEffect = effect(async () => {\n if (typeof this.dataSource() === 'function') {\n const func = this.dataSource();\n const range = {\n end: this.range().end,\n from: this.range().from,\n };\n const list = await func({ range });\n this._appointments.set(list);\n }\n else {\n const list = this.dataSource();\n this._appointments.set(list);\n }\n this.onDataLoaded.emit();\n });\n this.currentDateText = computed(() => {\n switch (this.selectedView()) {\n case 'day':\n case 'timeline-day':\n return this.formatService.format(this.currentDate(), 'datetime', {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n });\n case 'week': {\n const startOfWeek = this.formatService.format(this.currentDate(), 'datetime', {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n });\n const endOfWeek = this.formatService.format(this.currentDate().add('week', 1).add('day', -1), 'datetime', {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n });\n return `${startOfWeek} - ${endOfWeek}`;\n }\n case 'agenda':\n case 'timeline-multi-day': {\n const startOfWeek = this.formatService.format(this.currentDate(), 'datetime', {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n });\n const endOfWeek = this.formatService.format(this.currentDate().add('day', this.multiDayViewDaysCount() - 1), 'datetime', {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n });\n return `${startOfWeek} - ${endOfWeek}`;\n }\n case 'month':\n case 'timeline-month':\n return this.formatService.format(this.currentDate(), 'datetime', {\n format: 'MMMM yyyy',\n calendar: this.calendarType(),\n });\n }\n });\n this.calendarDepth = computed(() => {\n switch (this.selectedView()) {\n case 'day':\n case 'week':\n case 'agenda':\n case 'timeline-day':\n case 'timeline-multi-day':\n return 'day';\n case 'month':\n case 'timeline-month':\n return 'month';\n }\n });\n this.mappedAppointments = computed(() => {\n const items = this._appointments();\n return items\n .map((item) => {\n const startDate = this.calendarService.create(item.startDate, this.calendarType());\n const endDate = this.calendarService.create(item.endDate, this.calendarType());\n // Basic validation\n if (!startDate?.date || !endDate?.date) {\n console.warn('Scheduler: Skipping item due to invalid date fields:', item);\n return null;\n }\n // Check if dates are valid after creation\n if (isNaN(startDate.date.getTime()) || isNaN(endDate.date.getTime())) {\n console.warn('Scheduler: Skipping item due to invalid parsed date (NaN):', item);\n return null;\n }\n return item;\n })\n .filter((appt) => appt !== null); // Filter out nulls from invalid dates\n });\n this.range = computed(() => {\n const view = this.selectedView();\n const current = this.currentDate().startOf('day');\n if (!current)\n return { from: null, end: null };\n switch (view) {\n case 'day':\n case 'timeline-day': {\n const range = { from: current.date, end: current.endOf('day').date };\n return range;\n }\n case 'week': {\n const range = { from: current.date, end: current.add('day', 7).date };\n return range;\n }\n case 'month': {\n const { gridStartDate, gridEndDate } = this.getGridDateRange(current);\n const range = { from: gridStartDate.date, end: gridEndDate.add('day', 1).date };\n return range;\n }\n case 'timeline-month': {\n const range = { from: current.startOf('month').date, end: current.endOf('month').date };\n return range;\n }\n case 'agenda':\n case 'timeline-multi-day': {\n const range = { from: current.date, end: current.add('day', this.multiDayViewDaysCount()).date };\n return range;\n }\n }\n });\n this.#rangeChangedEffect = effect(() => {\n this.onRangeChanged.emit(this.range());\n });\n this.#viewChangedEffect = effect(() => {\n const view = this.selectedView();\n untracked(() => {\n this.handleViewChanged(this.prevView(), view);\n });\n });\n this.viewAppointments = computed(() => {\n const current = this.currentDate();\n const mapped = this.mappedAppointments();\n const rangeStart = this.range().from;\n const rangeEnd = this.range().end;\n if (!current || mapped.length === 0)\n return [];\n return mapped.filter((appt) => this.calendarService.create(appt.startDate, this.calendarType()).compare(rangeEnd, 'second') <= 0 &&\n this.calendarService.create(appt.endDate, this.calendarType()).compare(rangeStart, 'second') >= 0);\n });\n }\n // --- Internal Handlers for View Outputs ---\n handleSlotClickInternal(eventData) {\n this.onSlotClicked.emit(eventData);\n }\n handleSlotDblClickInternal(eventData) {\n this.onSlotDblClicked.emit(eventData);\n }\n handleSlotRightClickInternal(eventData) {\n this.onSlotRightClick.emit(eventData);\n }\n handleAppointmentClickInternal(eventData) {\n this.onAppointmentClicked.emit(eventData);\n }\n handleAppointmentDblClickInternal(eventData) {\n this.onAppointmentDblClicked.emit(eventData);\n }\n handleAppointmentRightClickInternal(eventData) {\n this.onAppointmentRightClick.emit(eventData);\n }\n handleAppointmentDropInternal(eventData) {\n this.onAppointmentDrop.emit(eventData);\n }\n ngOnInit() {\n this.calendarService.calendarChanges$.pipe(this.unsubscriber.takeUntilDestroy).subscribe(() => {\n const currentDate = this.calendarService.create(this.currentDate().date, this.calendarType());\n if (!currentDate.equal(this.currentDate())) {\n this.currentDate.set(currentDate);\n }\n });\n this.translationService.langChanges$.pipe(this.unsubscriber.takeUntilDestroy).subscribe(async () => {\n await this.fillDataSource();\n this.viewModeSelectbox().selectItems(this.viewsDataSource().find((c) => c.id == this.selectedView()));\n const currentDate = this.calendarService.create(this.currentDate().date, this.calendarType());\n if (!currentDate.equal(this.currentDate())) {\n this.currentDate.set(currentDate);\n }\n });\n if (isPlatformBrowser(this.platformId))\n this.rtl.set(AXHtmlUtil.isRtl(this.nativeElement));\n this.fillDataSource();\n }\n #appointmentEffect;\n async fillDataSource() {\n const result = [];\n for await (const c of this.views()) {\n const text = await this.translationService.translateAsync(`dateTime.duration.${this.displayViews[c]}`);\n result.push({ text, id: c });\n }\n this.viewsDataSource.set(result);\n }\n getGridDateRange(dateInMonth) {\n const firstDayOfMonth = dateInMonth.startOf('month');\n const firstDayGridNum = this.schedulerService.getDayOfWeekNumber(this.firstDayOfWeek());\n const firstDisplayedDayOfWeek = firstDayOfMonth.dayOfWeek;\n const daysFromPrevMonth = (firstDisplayedDayOfWeek - firstDayGridNum + 7) % 7;\n const gridStartDate = firstDayOfMonth.add('day', -daysFromPrevMonth);\n // Calculate end date based on standard 6 weeks for safety, or calculate dynamically if preferred\n const gridEndDate = gridStartDate.add('day', 6 * 7 - 1);\n return { gridStartDate, gridEndDate };\n }\n #rangeChangedEffect;\n #viewChangedEffect;\n viewChanged(e) {\n const newView = e.value;\n const oldView = e.oldValue;\n this.selectedView.set(newView);\n this.handleViewChanged(oldView, newView);\n }\n handleViewChanged(oldView, newView) {\n if (oldView === 'week') {\n const oldDayOfWeek = this.prevDate().dayOfWeek % 7;\n const date = this.currentDate().add('day', oldDayOfWeek - 1);\n this.currentDate.set(date);\n }\n this.prevDate.set(this.currentDate());\n if (newView === 'week') {\n const currentDate = this.currentDate();\n const currentDayOfWeek = currentDate.dayOfWeek;\n const desiredFirstDayName = this.firstDayOfWeek();\n const desiredFirstDayNumber = this.schedulerService.getDayOfWeekNumber(desiredFirstDayName);\n const daysToSubtract = (currentDayOfWeek - desiredFirstDayNumber + 7) % 7;\n const startOfWeekDate = currentDate.add('day', -daysToSubtract);\n this.currentDate.set(startOfWeekDate);\n }\n this.prevView.set(newView);\n }\n nextClick() {\n switch (this.selectedView()) {\n case 'day':\n case 'timeline-day':\n this.currentDate.set(this.currentDate().add('day', 1));\n break;\n case 'week':\n this.currentDate.set(this.currentDate().add('week', 1));\n break;\n case 'agenda':\n case 'timeline-multi-day':\n this.currentDate.set(this.currentDate().add('day', this.multiDayViewDaysCount()));\n break;\n case 'month':\n case 'timeline-month':\n this.currentDate.set(this.currentDate().add('month', 1));\n break;\n }\n }\n prevClick() {\n switch (this.selectedView()) {\n case 'day':\n case 'timeline-day':\n this.currentDate.set(this.currentDate().add('day', -1));\n break;\n case 'week':\n this.currentDate.set(this.currentDate().add('week', -1));\n break;\n case 'agenda':\n case 'timeline-multi-day':\n this.currentDate.set(this.currentDate().add('day', -this.multiDayViewDaysCount()));\n break;\n case 'month':\n case 'timeline-month':\n this.currentDate.set(this.currentDate().add('month', -1));\n break;\n }\n }\n calendarDateChanged(e) {\n let currentDate = this.calendarService.create(e.value, this.calendarType());\n if (this.selectedView() === 'week') {\n const currentDayOfWeek = currentDate.dayOfWeek;\n const desiredFirstDayName = this.firstDayOfWeek();\n const desiredFirstDayNumber = this.schedulerService.getDayOfWeekNumber(desiredFirstDayName);\n const daysToSubtract = (currentDayOfWeek - desiredFirstDayNumber + 7) % 7;\n currentDate = currentDate.add('day', -daysToSubtract);\n }\n if (!currentDate.equal(this.currentDate())) {\n this.currentDate.set(currentDate);\n }\n this.calendarPopover()?.close();\n }\n handleFullScreen() {\n if (!this.isFullScreen())\n this.nativeElement.classList.add('ax-full-screen-container');\n else\n this.nativeElement.classList.remove('ax-full-screen-container');\n this.isFullScreen.set(!this.isFullScreen());\n }\n async refresh(appointments) {\n if (appointments) {\n const newAppointments = this._appointments().map((appt) => {\n return appointments.find((a) => a.id === appt.id) ?? appt;\n });\n this._appointments.set(newAppointments);\n this.onDataLoaded.emit();\n return;\n }\n if (typeof this.dataSource() === 'function') {\n const func = this.dataSource();\n const range = {\n end: this.range().end,\n from: this.range().from,\n };\n const list = await func({ range });\n this._appointments.set(list);\n this.onDataLoaded.emit();\n return;\n }\n const list = this.dataSource();\n this._appointments.set(list);\n this.onDataLoaded.emit();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.4\", type: AXSchedulerComponent, isStandalone: true, selector: \"ax-scheduler\", inputs: { calendar: { classPropertyName: \"calendar\", publicName: \"calendar\", isSignal: true, isRequired: false, transformFunction: null }, startingDate: { classPropertyName: \"startingDate\", publicName: \"startingDate\", isSignal: true, isRequired: false, transformFunction: null }, endDayHour: { classPropertyName: \"endDayHour\", publicName: \"endDayHour\", isSignal: true, isRequired: false, transformFunction: null }, startDayHour: { classPropertyName: \"startDayHour\", publicName: \"startDayHour\", isSignal: true, isRequired: false, transformFunction: null }, hasHeader: { classPropertyName: \"hasHeader\", publicName: \"hasHeader\", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: \"readonly\", publicName: \"readonly\", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: \"draggable\", publicName: \"draggable\", isSignal: true, isRequired: false, transformFunction: null }, allowFullScreen: { classPropertyName: \"allowFullScreen\", publicName: \"allowFullScreen\", isSignal: true, isRequired: false, transformFunction: null }, multiDayViewDaysCount: { classPropertyName: \"multiDayViewDaysCount\", publicName: \"multiDayViewDaysCount\", isSignal: true, isRequired: false, transformFunction: null }, dataSource: { classPropertyName: \"dataSource\", publicName: \"dataSource\", isSignal: true, isRequired: false, transformFunction: null }, firstDayOfWeek: { classPropertyName: \"firstDayOfWeek\", publicName: \"firstDayOfWeek\", isSignal: true, isRequired: false, transformFunction: null }, views: { classPropertyName: \"views\", publicName: \"views\", isSignal: true, isRequired: false, transformFunction: null }, selectedView: { classPropertyName: \"selectedView\", publicName: \"selectedView\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedView: \"selectedViewChange\", onDataLoaded: \"onDataLoaded\", onRangeChanged: \"onRangeChanged\", onSlotClicked: \"onSlotClicked\", onSlotDblClicked: \"onSlotDblClicked\", onSlotRightClick: \"onSlotRightClick\", onAppointmentDrop: \"onAppointmentDrop\", onAppointmentClicked: \"onAppointmentClicked\", onAppointmentDblClicked: \"onAppointmentDblClicked\", onAppointmentRightClick: \"onAppointmentRightClick\" }, providers: [AXUnsubscriber, { provide: AXComponent, useExisting: AXSchedulerComponent }], viewQueries: [{ propertyName: \"calendarPopover\", first: true, predicate: [\"calendarPopover\"], descendants: true, isSignal: true }, { propertyName: \"viewModeSelectbox\", first: true, predicate: AXSelectBoxComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-scheduler-container\\\">\\n @if (hasHeader()) {\\n <div class=\\\"ax-scheduler-header\\\">\\n <div class=\\\"ax-scheduler-date\\\">\\n <ax-button look=\\\"blank\\\" (onClick)=\\\"prevClick()\\\">\\n <ax-icon\\n class=\\\"ax-icon ax-text-xl\\\"\\n [ngClass]=\\\"{\\n 'ax-icon-chevron-left': !rtl(),\\n 'ax-icon-chevron-right': rtl(),\\n }\\\"\\n ></ax-icon>\\n </ax-button>\\n <ax-button look=\\\"blank\\\" [text]=\\\"currentDateText()\\\" #date></ax-button>\\n <ax-button look=\\\"blank\\\" (onClick)=\\\"nextClick()\\\">\\n <ax-icon\\n class=\\\"ax-icon ax-text-xl\\\"\\n [ngClass]=\\\"{\\n 'ax-icon-chevron-right': !rtl(),\\n 'ax-icon-chevron-left': rtl(),\\n }\\\"\\n ></ax-icon>\\n </ax-button>\\n <ax-popover [target]=\\\"date\\\" [placement]=\\\"'bottom'\\\" #calendarPopover>\\n <div class=\\\"ax-overlay-pane\\\">\\n <ax-calendar\\n [type]=\\\"calendarType()\\\"\\n [depth]=\\\"calendarDepth()\\\"\\n [ngModel]=\\\"currentDate()\\\"\\n (onValueChanged)=\\\"calendarDateChanged($event)\\\"\\n ></ax-calendar>\\n </div>\\n </ax-popover>\\n </div>\\n <div class=\\\"ax-scheduler-actions\\\">\\n <ax-select-box\\n [dropdownWidth]=\\\"200\\\"\\n [ngModel]=\\\"selectedView()\\\"\\n [dataSource]=\\\"viewsDataSource()\\\"\\n (onValueChanged)=\\\"viewChanged($event)\\\"\\n ></ax-select-box>\\n\\n @if (allowFullScreen()) {\\n <ax-button look=\\\"blank\\\" (onClick)=\\\"handleFullScreen()\\\">\\n <ax-icon>\\n <i\\n class=\\\"fa-solid fa-expand\\\"\\n [ngClass]=\\\"{ 'fa-compress': isFullScreen(), 'fa-expand': !isFullScreen() }\\\"\\n ></i>\\n </ax-icon>\\n </ax-button>\\n }\\n </div>\\n </div>\\n }\\n <div class=\\\"ax-scheduler-views-container\\\">\\n @switch (selectedView()) {\\n @case ('day') {\\n <ax-scheduler-day-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n ></ax-scheduler-day-view>\\n }\\n @case ('week') {\\n <ax-scheduler-week-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n ></ax-scheduler-week-view>\\n }\\n @case ('month') {\\n <ax-scheduler-month-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [firstDayOfWeek]=\\\"firstDayOfWeek()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n ></ax-scheduler-month-view>\\n }\\n @case ('timeline-day') {\\n <ax-scheduler-timeline-day-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n >\\n </ax-scheduler-timeline-day-view>\\n }\\n @case ('timeline-multi-day') {\\n <ax-scheduler-timeline-multi-day-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n [daysCount]=\\\"multiDayViewDaysCount()\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n >\\n </ax-scheduler-timeline-multi-day-view>\\n }\\n @case ('timeline-month') {\\n <ax-scheduler-timeline-month-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n >\\n </ax-scheduler-timeline-month-view>\\n }\\n @case ('agenda') {\\n <ax-scheduler-agenda-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n >\\n </ax-scheduler-agenda-view>\\n }\\n }\\n </div>\\n</div>\\n\", styles: [\":root{--ax-comp-scheduler-width: 57.5rem;--ax-comp-scheduler-basic-view-blocks-height: 3rem;--ax-comp-scheduler-basic-view-blocks-width: 3.5rem;--ax-comp-scheduler-timeline-view-blocks-width: 20rem;--ax-comp-scheduler-timeline-view-blocks-height: 3rem;--ax-comp-scheduler-primary-bg-color: var(--ax-sys-color-primary-surface);--ax-comp-scheduler-primary-text-color: var(--ax-sys-color-on-primary-surface);--ax-comp-scheduler-highest-periority-bg-color: var(--ax-sys-color-danger-dark-surface);--ax-comp-scheduler-highest-periority-text-color: var(--ax-sys-color-on-danger-dark-surface);--ax-comp-scheduler-high-periority-bg-color: var(--ax-sys-color-danger-surface);--ax-comp-scheduler-high-periority-text-color: var(--ax-sys-color-on-danger-surface);--ax-comp-scheduler-medium-periority-bg-color: var(--ax-sys-color-warning-surface);--ax-comp-scheduler-medium-periority-text-color: var(--ax-sys-color-on-warning-surface);--ax-comp-scheduler-low-periority-bg-color: var(--ax-sys-color-success-light-surface);--ax-comp-scheduler-low-periority-text-color: var(--ax-sys-color-on-success-light-surface);--ax-comp-scheduler-lowest-periority-bg-color: var(--ax-sys-color-success-lightest-surface);--ax-comp-scheduler-lowest-periority-text-color: var(--ax-sys-color-on-success-lightest-surface)}ax-scheduler{width:100%;height:100%;display:block;-webkit-user-select:none;user-select:none;font-size:.875rem;background-color:inherit}ax-scheduler.ax-full-screen-container{top:0;left:0;z-index:61;width:100vw;height:100vh;position:fixed}ax-scheduler .ax-scheduler-container{height:100%;display:flex;overflow:hidden;border-width:1px;flex-direction:column;background-color:inherit;border-radius:var(--ax-sys-border-radius)}ax-scheduler .ax-scheduler-container .ax-scheduler-header{display:flex;padding:1rem;overflow-x:auto;overflow-y:hidden;align-items:center;border-bottom-width:1px;justify-content:space-between}ax-scheduler .ax-scheduler-container .ax-scheduler-header .ax-scheduler-date{display:flex;min-width:20.5rem;align-items:center;justify-content:space-between}ax-scheduler .ax-scheduler-container .ax-scheduler-header .ax-scheduler-date p{margin:0;font-size:1rem;min-width:10rem;font-weight:500;text-align:center}ax-scheduler .ax-scheduler-container .ax-scheduler-actions{gap:.75rem;display:flex;align-items:center;justify-content:center}ax-scheduler .ax-scheduler-container .ax-scheduler-truncate{display:block;overflow:hidden;text-wrap:nowrap;text-overflow:ellipsis}ax-scheduler .ax-scheduler-container ax-subtitle{font-size:.75rem}ax-scheduler .ax-scheduler-container .ax-scheduler-views-container{height:100%;overflow:auto;background-color:inherit}ax-scheduler .ax-scheduler-primary-periority{color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color))}ax-scheduler .ax-scheduler-highest-periority{color:rgba(var(--ax-comp-scheduler-highest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-highest-periority-bg-color))}ax-scheduler .ax-scheduler-high-periority{color:rgba(var(--ax-comp-scheduler-high-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-high-periority-bg-color))}ax-scheduler .ax-scheduler-medium-periority{color:rgba(var(--ax-comp-scheduler-medium-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-medium-periority-bg-color))}ax-scheduler .ax-scheduler-low-periority{color:rgba(var(--ax-comp-scheduler-low-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-low-periority-bg-color))}ax-scheduler .ax-scheduler-lowest-periority{color:rgba(var(--ax-comp-scheduler-lowest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-lowest-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover{gap:.25rem;display:grid;overflow:auto;padding:.25rem;max-height:10rem;font-size:.875rem;border-radius:.5rem}.ax-overlay-pane.ax-scheduler-popover.ax-scheduler-month-popover-appointment{font-size:.75rem}.ax-overlay-pane.ax-scheduler-popover:not(.ax-state-readonly) .ax-scheduler-popover-appointment{cursor:pointer}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-popover-appointment{display:flex;overflow:hidden;-webkit-user-select:none;user-select:none;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2);color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-popover-appointment ax-subtitle{font-size:.75rem}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-popover-appointment .ax-scheduler-truncate{display:block;overflow:hidden;text-wrap:nowrap;text-overflow:ellipsis}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-primary-periority{color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-highest-periority{color:rgba(var(--ax-comp-scheduler-highest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-highest-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-high-periority{color:rgba(var(--ax-comp-scheduler-high-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-high-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-medium-periority{color:rgba(var(--ax-comp-scheduler-medium-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-medium-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-low-periority{color:rgba(var(--ax-comp-scheduler-low-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-low-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-lowest-periority{color:rgba(var(--ax-comp-scheduler-lowest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-lowest-periority-bg-color))}\\n\"], dependencies: [{ kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: AXSelectBoxComponent, selector: \"ax-select-box\", inputs: [\"disabled\", \"readonly\", \"tabIndex\", \"placeholder\", \"minValue\", \"maxValue\", \"value\", \"state\", \"name\", \"id\", \"type\", \"look\", \"multiple\", \"valueField\", \"textField\", \"disabledField\", \"textTemplate\", \"selectedItems\", \"dataSource\", \"minRecordsForSearch\", \"caption\", \"itemTemplate\", \"selectedTemplate\", \"emptyTemplate\", \"loadingTemplate\", \"dropdownWidth\", \"searchBoxAutoFocus\"], outputs: [\"valueChange\", \"stateChange\", \"onValueChanged\", \"onBlur\", \"onFocus\", \"readonlyChange\", \"disabledChange\", \"onOpened\", \"onClosed\"] }, { kind: \"component\", type: AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"component\", type: AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"component\", type: AXPopoverComponent, selector: \"ax-popover\", inputs: [\"offsetX\", \"offsetY\", \"target\", \"placement\", \"content\", \"openOn\", \"closeOn\", \"hasBackdrop\", \"openAfter\", \"closeAfter\", \"backdropClass\", \"panelClass\", \"adaptivityEnabled\"], outputs: [\"onOpened\", \"onClosed\"] }, { kind: \"component\", type: AXCalendarComponent, selector: \"ax-calendar\", inputs: [\"rtl\", \"readonly\", \"value\", \"name\", \"disabled\", \"depth\", \"activeView\", \"minValue\", \"maxValue\", \"disabledDates\", \"holidayDates\", \"type\", \"cellTemplate\", \"cellClass\", \"showNavigation\", \"count\", \"id\"], outputs: [\"onOptionChanged\", \"valueChange\", \"onValueChanged\", \"minValueChange\", \"maxValueChange\", \"onBlur\", \"onFocus\", \"depthChange\", \"typeChange\", \"activeViewChange\", \"disabledDatesChange\", \"holidayDatesChange\", \"onNavigate\", \"onSlotClick\", \"countChange\"] }, { kind: \"component\", type: AXSchedulerDayViewComponent, selector: \"ax-scheduler-day-view\", inputs: [\"readonly\", \"draggable\", \"calendar\", \"date\", \"endDayHour\", \"startDayHour\", \"appointments\"], outputs: [\"slotClickedInternal\", \"slotDblClickedInternal\", \"slotRightClickedInternal\", \"appointmentClickedInternal\", \"appointmentDblClickedInternal\", \"appointmentRightClickedInternal\", \"onAppointmentDropInternal\"] }, { kind: \"component\", type: AXSchedulerWeekViewComponent, selector: \"ax-scheduler-week-view\", inputs: [\"readonly\", \"draggable\", \"calendar\", \"date\", \"endDayHour\", \"startDayHour\", \"appointments\"], outputs: [\"slotClickedInternal\", \"slotDblClickedInternal\", \"slotRightClickedInternal\", \"appointmentClickedInternal\", \"appointmentDblClickedInternal\", \"appointmentRightClickedInternal\", \"onAppointmentDropInternal\"] }, { kind: \"component\", type: AXSchedulerMonthViewComponent, selector: \"ax-scheduler-month-view\", inputs: [\"readonly\", \"draggable\", \"calendar\", \"date\", \"firstDayOfWeek\", \"appointments\"], outputs: [\"slotClickedInternal\", \"slotDblClickedInternal\", \"slotRightClickedInternal\", \"appointmentClickedInternal\", \"appointmentDblClickedInternal\", \"appointmentRightClickedInternal\", \"onAppointmentDropInternal\"] }, { kind: \"component\", type: AXSchedulerTimelineDayViewComponent, selector: \"ax-scheduler-timeline-day-view\", inputs: [\"readonly\", \"draggable\", \"calendar\", \"date\", \"endDayHour\", \"startDayHour\", \"appointments\"], outputs: [\"slotClickedInternal\", \"slotDblClickedInternal\", \"slotRightClickedInternal\", \"appointmentClickedInternal\", \"appointmentDblClickedInternal\", \"appointmentRightClickedInternal\", \"onAppointmentDropInternal\"] }, { kind: \"component\", type: AXSchedulerTimelineMultiDayViewComponent, selector: \"ax-scheduler-timeline-multi-day-view\", inputs: [\"daysCount\", \"readonly\", \"draggable\", \"calendar\", \"date\", \"endDayHour\", \"startDayHour\", \"appointments\"], outputs: [\"slotClickedInternal\", \"slotDblClickedInternal\", \"slotRightClickedInternal\", \"appointmentClickedInternal\", \"appointmentDblClickedInternal\", \"appointmentRightClickedInternal\", \"onAppointmentDropInternal\"] }, { kind: \"component\", type: AXSchedulerTimelineMonthViewComponent, selector: \"ax-scheduler-timeline-month-view\", inputs: [\"readonly\", \"draggable\", \"calendar\", \"date\", \"appointments\"], outputs: [\"slotClickedInternal\", \"slotDblClickedInternal\", \"slotRightClickedInternal\", \"appointmentClickedInternal\", \"appointmentDblClickedInternal\", \"appointmentRightClickedInternal\", \"onAppointmentDropInternal\"] }, { kind: \"component\", type: AXSchedulerAgendaViewComponent, selector: \"ax-scheduler-agenda-view\", inputs: [\"daysCount\", \"readonly\", \"draggable\", \"calendar\", \"date\", \"appointments\"], outputs: [\"slotClickedInternal\", \"slotDblClickedInternal\", \"slotRightClickedInternal\", \"appointmentClickedInternal\", \"appointmentDblClickedInternal\", \"appointmentRightClickedInternal\", \"onAppointmentDropInternal\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-scheduler', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [\n FormsModule,\n AXSelectBoxComponent,\n AXDecoratorIconComponent,\n AXButtonComponent,\n NgClass,\n AXPopoverComponent,\n AXCalendarComponent,\n AXSchedulerDayViewComponent,\n AXSchedulerWeekViewComponent,\n AXSchedulerMonthViewComponent,\n AXSchedulerTimelineDayViewComponent,\n AXSchedulerTimelineMultiDayViewComponent,\n AXSchedulerTimelineMonthViewComponent,\n AXSchedulerAgendaViewComponent,\n ], providers: [AXUnsubscriber, { provide: AXComponent, useExisting: AXSchedulerComponent }], template: \"<div class=\\\"ax-scheduler-container\\\">\\n @if (hasHeader()) {\\n <div class=\\\"ax-scheduler-header\\\">\\n <div class=\\\"ax-scheduler-date\\\">\\n <ax-button look=\\\"blank\\\" (onClick)=\\\"prevClick()\\\">\\n <ax-icon\\n class=\\\"ax-icon ax-text-xl\\\"\\n [ngClass]=\\\"{\\n 'ax-icon-chevron-left': !rtl(),\\n 'ax-icon-chevron-right': rtl(),\\n }\\\"\\n ></ax-icon>\\n </ax-button>\\n <ax-button look=\\\"blank\\\" [text]=\\\"currentDateText()\\\" #date></ax-button>\\n <ax-button look=\\\"blank\\\" (onClick)=\\\"nextClick()\\\">\\n <ax-icon\\n class=\\\"ax-icon ax-text-xl\\\"\\n [ngClass]=\\\"{\\n 'ax-icon-chevron-right': !rtl(),\\n 'ax-icon-chevron-left': rtl(),\\n }\\\"\\n ></ax-icon>\\n </ax-button>\\n <ax-popover [target]=\\\"date\\\" [placement]=\\\"'bottom'\\\" #calendarPopover>\\n <div class=\\\"ax-overlay-pane\\\">\\n <ax-calendar\\n [type]=\\\"calendarType()\\\"\\n [depth]=\\\"calendarDepth()\\\"\\n [ngModel]=\\\"currentDate()\\\"\\n (onValueChanged)=\\\"calendarDateChanged($event)\\\"\\n ></ax-calendar>\\n </div>\\n </ax-popover>\\n </div>\\n <div class=\\\"ax-scheduler-actions\\\">\\n <ax-select-box\\n [dropdownWidth]=\\\"200\\\"\\n [ngModel]=\\\"selectedView()\\\"\\n [dataSource]=\\\"viewsDataSource()\\\"\\n (onValueChanged)=\\\"viewChanged($event)\\\"\\n ></ax-select-box>\\n\\n @if (allowFullScreen()) {\\n <ax-button look=\\\"blank\\\" (onClick)=\\\"handleFullScreen()\\\">\\n <ax-icon>\\n <i\\n class=\\\"fa-solid fa-expand\\\"\\n [ngClass]=\\\"{ 'fa-compress': isFullScreen(), 'fa-expand': !isFullScreen() }\\\"\\n ></i>\\n </ax-icon>\\n </ax-button>\\n }\\n </div>\\n </div>\\n }\\n <div class=\\\"ax-scheduler-views-container\\\">\\n @switch (selectedView()) {\\n @case ('day') {\\n <ax-scheduler-day-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n ></ax-scheduler-day-view>\\n }\\n @case ('week') {\\n <ax-scheduler-week-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n ></ax-scheduler-week-view>\\n }\\n @case ('month') {\\n <ax-scheduler-month-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [firstDayOfWeek]=\\\"firstDayOfWeek()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n ></ax-scheduler-month-view>\\n }\\n @case ('timeline-day') {\\n <ax-scheduler-timeline-day-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n >\\n </ax-scheduler-timeline-day-view>\\n }\\n @case ('timeline-multi-day') {\\n <ax-scheduler-timeline-multi-day-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n [daysCount]=\\\"multiDayViewDaysCount()\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n >\\n </ax-scheduler-timeline-multi-day-view>\\n }\\n @case ('timeline-month') {\\n <ax-scheduler-timeline-month-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n >\\n </ax-scheduler-timeline-month-view>\\n }\\n @case ('agenda') {\\n <ax-scheduler-agenda-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n >\\n </ax-scheduler-agenda-view>\\n }\\n }\\n </div>\\n</div>\\n\", styles: [\":root{--ax-comp-scheduler-width: 57.5rem;--ax-comp-scheduler-basic-view-blocks-height: 3rem;--ax-comp-scheduler-basic-view-blocks-width: 3.5rem;--ax-comp-scheduler-timeline-view-blocks-width: 20rem;--ax-comp-scheduler-timeline-view-blocks-height: 3rem;--ax-comp-scheduler-primary-bg-color: var(--ax-sys-color-primary-surface);--ax-comp-scheduler-primary-text-color: var(--ax-sys-color-on-primary-surface);--ax-comp-scheduler-highest-periority-bg-color: var(--ax-sys-color-danger-dark-surface);--ax-comp-scheduler-highest-periority-text-color: var(--ax-sys-color-on-danger-dark-surface);--ax-comp-scheduler-high-periority-bg-color: var(--ax-sys-color-danger-surface);--ax-comp-scheduler-high-periority-text-color: var(--ax-sys-color-on-danger-surface);--ax-comp-scheduler-medium-periority-bg-color: var(--ax-sys-color-warning-surface);--ax-comp-scheduler-medium-periority-text-color: var(--ax-sys-color-on-warning-surface);--ax-comp-scheduler-low-periority-bg-color: var(--ax-sys-color-success-light-surface);--ax-comp-scheduler-low-periority-text-color: var(--ax-sys-color-on-success-light-surface);--ax-comp-scheduler-lowest-periority-bg-color: var(--ax-sys-color-success-lightest-surface);--ax-comp-scheduler-lowest-periority-text-color: var(--ax-sys-color-on-success-lightest-surface)}ax-scheduler{width:100%;height:100%;display:block;-webkit-user-select:none;user-select:none;font-size:.875rem;background-color:inherit}ax-scheduler.ax-full-screen-container{top:0;left:0;z-index:61;width:100vw;height:100vh;position:fixed}ax-scheduler .ax-scheduler-container{height:100%;display:flex;overflow:hidden;border-width:1px;flex-direction:column;background-color:inherit;border-radius:var(--ax-sys-border-radius)}ax-scheduler .ax-scheduler-container .ax-scheduler-header{display:flex;padding:1rem;overflow-x:auto;overflow-y:hidden;align-items:center;border-bottom-width:1px;justify-content:space-between}ax-scheduler .ax-scheduler-container .ax-scheduler-header .ax-scheduler-date{display:flex;min-width:20.5rem;align-items:center;justify-content:space-between}ax-scheduler .ax-scheduler-container .ax-scheduler-header .ax-scheduler-date p{margin:0;font-size:1rem;min-width:10rem;font-weight:500;text-align:center}ax-scheduler .ax-scheduler-container .ax-scheduler-actions{gap:.75rem;display:flex;align-items:center;justify-content:center}ax-scheduler .ax-scheduler-container .ax-scheduler-truncate{display:block;overflow:hidden;text-wrap:nowrap;text-overflow:ellipsis}ax-scheduler .ax-scheduler-container ax-subtitle{font-size:.75rem}ax-scheduler .ax-scheduler-container .ax-scheduler-views-container{height:100%;overflow:auto;background-color:inherit}ax-scheduler .ax-scheduler-primary-periority{color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color))}ax-scheduler .ax-scheduler-highest-periority{color:rgba(var(--ax-comp-scheduler-highest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-highest-periority-bg-color))}ax-scheduler .ax-scheduler-high-periority{color:rgba(var(--ax-comp-scheduler-high-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-high-periority-bg-color))}ax-scheduler .ax-scheduler-medium-periority{color:rgba(var(--ax-comp-scheduler-medium-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-medium-periority-bg-color))}ax-scheduler .ax-scheduler-low-periority{color:rgba(var(--ax-comp-scheduler-low-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-low-periority-bg-color))}ax-scheduler .ax-scheduler-lowest-periority{color:rgba(var(--ax-comp-scheduler-lowest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-lowest-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover{gap:.25rem;display:grid;overflow:auto;padding:.25rem;max-height:10rem;font-size:.875rem;border-radius:.5rem}.ax-overlay-pane.ax-scheduler-popover.ax-scheduler-month-popover-appointment{font-size:.75rem}.ax-overlay-pane.ax-scheduler-popover:not(.ax-state-readonly) .ax-scheduler-popover-appointment{cursor:pointer}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-popover-appointment{display:flex;overflow:hidden;-webkit-user-select:none;user-select:none;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2);color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-popover-appointment ax-subtitle{font-size:.75rem}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-popover-appointment .ax-scheduler-truncate{display:block;overflow:hidden;text-wrap:nowrap;text-overflow:ellipsis}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-primary-periority{color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-highest-periority{color:rgba(var(--ax-comp-scheduler-highest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-highest-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-high-periority{color:rgba(var(--ax-comp-scheduler-high-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-high-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-medium-periority{color:rgba(var(--ax-comp-scheduler-medium-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-medium-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-low-periority{color:rgba(var(--ax-comp-scheduler-low-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-low-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-lowest-periority{color:rgba(var(--ax-comp-scheduler-lowest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-lowest-periority-bg-color))}\\n\"] }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NyYy9saWIvc2NoZWR1bGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NyYy9saWIvc2NoZWR1bGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQXVCLFdBQVcsRUFBMEIsTUFBTSxvQkFBb0IsQ0FBQztBQUUzRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQWMsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFD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QUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMzQixDQUFDOzhHQTNaVSxvQkFBb0I7a0dBQXBCLG9CQUFvQiwwdUVBRnBCLENBQUMsY0FBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxrTUFZbEQsb0JBQW9CLHVGQ3RHNUQscWlSQTBMQSx5MkxEL0dJLFdBQVcsK1ZBQ1gsb0JBQW9CLG1rQkFDcEIsd0JBQXdCLHNFQUN4QixpQkFBaUIsMlVBQ2pCLE9BQU8sb0ZBQ1Asa0JBQWtCLCtRQUNsQixtQkFBbUIsMGdCQUNuQiwyQkFBMkIsOFhBQzNCLDRCQUE0QiwrWEFDNUIsNkJBQTZCLG9YQUM3QixtQ0FBbUMsdVlBQ25DLHdDQUF3QywwWkFDeEMscUNBQXFDLDJXQUNyQyw4QkFBOEI7OzJGQUlyQixvQkFBb0I7a0JBeEJoQyxTQUFTOytCQUNFLGNBQWMsbUJBR1AsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxXQUM1Qjt3QkFDUCxXQUFXO3dCQUNYLG9CQUFvQjt3QkFDcEIsd0JBQXdCO3dCQUN4QixpQkFBaUI7d0JBQ2pCLE9BQU87d0JBQ1Asa0JBQWtCO3dCQUNsQixtQkFBbUI7d0JBQ25CLDJCQUEyQjt3QkFDM0IsNEJBQTRCO3dCQUM1Qiw2QkFBNkI7d0JBQzdCLG1DQUFtQzt3QkFDbkMsd0NBQXdDO3dCQUN4QyxxQ0FBcUM7d0JBQ3JDLDhCQUE4QjtxQkFDL0IsYUFDVSxDQUFDLGNBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxzQkFBc0IsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhDb21wb25lbnQsIEFYVmFsdWVDaGFuZ2VkRXZlbnQsIE5YQ29tcG9uZW50LCBOWEV2ZW50LCBOWE5hdGl2ZUV2ZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYRHJvcFpvbmVEcm9wRXZlbnQgfSBmcm9tICdAYWNvcmV4L2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgQVhCdXR0b25Db21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYnV0dG9uJztcbmltcG9ydCB7IEFYQ2FsZW5kYXJDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvY2FsZW5kYXInO1xuaW1wb3J0IHsgQVhEZWNvcmF0b3JJY29uQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgQVhQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3BvcG92ZXInO1xuaW1wb3J0IHsgQVhTZWxlY3RCb3hDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvc2VsZWN0LWJveCc7XG5pbXBvcnQgeyBBWENhbGVuZGFyU2VydmljZSwgQVhEYXRlVGltZSB9IGZyb20gJ0BhY29yZXgvY29yZS9kYXRlLXRpbWUnO1xuaW1wb3J0IHsgQVhGb3JtYXRTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2Zvcm1hdCc7XG5pbXBvcnQgeyBBWExvY2FsZVNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvbG9jYWxlJztcbmltcG9ydCB7IEFYVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb3JlL3RyYW5zbGF0aW9uJztcbmltcG9ydCB7IEFYSHRtbFV0aWwsIEFYVW5zdWJzY3JpYmVyIH0gZnJvbSAnQGFjb3JleC9jb3JlL3V0aWxzJztcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyLCBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIGxpbmtlZFNpZ25hbCxcbiAgbW9kZWwsXG4gIE9uSW5pdCxcbiAgb3V0cHV0LFxuICBQTEFURk9STV9JRCxcbiAgc2lnbmFsLFxuICB1bnRyYWNrZWQsXG4gIHZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBBWERheU9mV2Vla05hbWUsXG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnQsXG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnREYXRhU291cmNlLFxuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50TG9hZGVyLFxuICBBWFNjaGVkdWxlckRhdGVSYW5nZSxcbiAgQVhTY2hlZHVsZXJWaWV3LFxufSBmcm9tICcuL3NjaGVkdWxlci5jbGFzcyc7XG5pbXBvcnQgeyBBWFNjaGVkdWxlclNlcnZpY2UgfSBmcm9tICcuL3NjaGVkdWxlci5zZXJ2aWNlJztcbmltcG9ydCB7IEFYU2NoZWR1bGVyQWdlbmRhVmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3MvYWdlbmRhL3NjaGVkdWxlci1hZ2VuZGEtdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJEYXlWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi92aWV3cy9kYXkvc2NoZWR1bGVyLWRheS12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWFNjaGVkdWxlck1vbnRoVmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3MvbW9udGgvc2NoZWR1bGVyLW1vbnRoLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IEFYU2NoZWR1bGVyVGltZWxpbmVEYXlWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi92aWV3cy90aW1lbGluZS1kYXkvc2NoZWR1bGVyLXRpbWVsaW5lLWRheS12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWFNjaGVkdWxlclRpbWVsaW5lTW9udGhWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi92aWV3cy90aW1lbGluZS1tb250aC9zY2hlZHVsZXItdGltZWxpbmUtbW9udGgtdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJUaW1lbGluZU11bHRpRGF5Vmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3MvdGltZWxpbmUtbXVsdGktZGF5L3NjaGVkdWxlci10aW1lbGluZS1tdWx0aS1kYXktdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJXZWVrVmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3Mvd2Vlay9zY2hlZHVsZXItd2Vlay12aWV3LmNvbXBvbmVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQgZXh0ZW5kcyBOWE5hdGl2ZUV2ZW50PEFYU2NoZWR1bGVyQ29tcG9uZW50LCBNb3VzZUV2ZW50PiB7XG4gIGFwcG9pbnRtZW50OiBBWFNjaGVkdWxlckFwcG9pbnRtZW50O1xufVxuZXhwb3J0IGludGVyZmFjZSBBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50IGV4dGVuZHMgTlhOYXRpdmVFdmVudDxBWFNjaGVkdWxlckNvbXBvbmVudCwgTW91c2VFdmVudD4ge1xuICBzbG90OiB7XG4gICAgZW5kRGF0ZTogQVhEYXRlVGltZTtcbiAgICBzdGFydERhdGU6IEFYRGF0ZVRpbWU7XG4gICAgdmlldzogQVhTY2hlZHVsZXJWaWV3O1xuICB9O1xufVxuZXhwb3J0IGludGVyZmFjZSBBWFNjaGVkdWxlclNsb3REcm9wRXZlbnQgZXh0ZW5kcyBOWEV2ZW50PEFYU2NoZWR1bGVyQ29tcG9uZW50PiB7XG4gIGRyb3BFdmVudDogQVhEcm9wWm9uZURyb3BFdmVudDtcbiAgYXBwb2ludG1lbnQ6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQ7XG4gIHNsb3Q6IHtcbiAgICBlbmREYXRlOiBBWERhdGVUaW1lO1xuICAgIHN0YXJ0RGF0ZTogQVhEYXRlVGltZTtcbiAgICB2aWV3OiBBWFNjaGVkdWxlclZpZXc7XG4gIH07XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LXNjaGVkdWxlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9zY2hlZHVsZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zY2hlZHVsZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGltcG9ydHM6IFtcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBBWFNlbGVjdEJveENvbXBvbmVudCxcbiAgICBBWERlY29yYXRvckljb25Db21wb25lbnQsXG4gICAgQVhCdXR0b25Db21wb25lbnQsXG4gICAgTmdDbGFzcyxcbiAgICBBWFBvcG92ZXJDb21wb25lbnQsXG4gICAgQVhDYWxlbmRhckNvbXBvbmVudCxcbiAgICBBWFNjaGVkdWxlckRheVZpZXdDb21wb25lbnQsXG4gICAgQVhTY2hlZHVsZXJXZWVrVmlld0NvbXBvbmVudCxcbiAgICBBWFNjaGVkdWxlck1vbnRoVmlld0NvbXBvbmVudCxcbiAgICBBWFNjaGVkdWxlclRpbWVsaW5lRGF5Vmlld0NvbXBvbmVudCxcbiAgICBBWFNjaGVkdWxlclRpbWVsaW5lTXVsdGlEYXlWaWV3Q29tcG9uZW50LFxuICAgIEFYU2NoZWR1bGVyVGltZWxpbmVNb250aFZpZXdDb21wb25lbnQsXG4gICAgQVhTY2hlZHVsZXJBZ2VuZGFWaWV3Q29tcG9uZW50LFxuICBdLFxuICBwcm92aWRlcnM6IFtBWFVuc3Vic2NyaWJlciwgeyBwcm92aWRlOiBBWENvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYU2NoZWR1bGVyQ29tcG9uZW50IH1dLFxufSlcbmV4cG9ydCBjbGFzcyBBWFNjaGVkdWxlckNvbXBvbmVudCBleHRlbmRzIE5YQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSBwbGF0Zm9ybUlkID0gaW5qZWN0KFBMQVRGT1JNX0lEKTtcbiAgcHJpdmF0ZSB1bnN1YnNjcmliZXIgPSBpbmplY3QoQVhVbnN1YnNjcmliZXIpO1xuICBwcml2YXRlIGZvcm1hdFNlcnZpY2UgPSBpbmplY3QoQVhGb3JtYXRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBsb2NhbGVTZXJ2aWNlID0gaW5qZWN0KEFYTG9jYWxlU2VydmljZSk7XG4gIHByaXZhdGUgY2FsZW5kYXJTZXJ2aWNlID0gaW5qZWN0KEFYQ2FsZW5kYXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzY2hlZHVsZXJTZXJ2aWNlID0gaW5qZWN0KEFYU2NoZWR1bGVyU2VydmljZSk7XG4gIHByaXZhdGUgdHJhbnNsYXRpb25TZXJ2aWNlID0gaW5qZWN0KEFYVHJhbnNsYXRpb25TZXJ2aWNlKTtcblxuICBwcml2YXRlIGNhbGVuZGFyUG9wb3ZlciA9IHZpZXdDaGlsZDxBWFBvcG92ZXJDb21wb25lbnQ+KCdjYWxlbmRhclBvcG92ZXInKTtcbiAgcHJpdmF0ZSB2aWV3TW9kZVNlbGVjdGJveCA9IHZpZXdDaGlsZChBWFNlbGVjdEJveENvbXBvbmVudCk7XG5cbiAgcHJpdmF0ZSBkaXNwbGF5Vmlld3M6IFJlY29yZDxBWFNjaGVkdWxlclZpZXcsIHN0cmluZz4gPSB7XG4gICAgZGF5OiAnZGFpbHknLFxuICAgIHdlZWs6ICd3ZWVrbHknLFxuICAgIG1vbnRoOiAnbW9udGhseScsXG4gICAgJ3RpbWVsaW5lLWRheSc6ICdkYWlseS10aW1lbGluZScsXG4gICAgJ3RpbWVsaW5lLW11bHRpLWRheSc6ICdtdWx0aS1kYXktdGltZWxpbmUnLFxuICAgICd0aW1lbGluZS1tb250aCc6ICdtb250aGx5LXRpbWVsaW5lJyxcbiAgICBhZ2VuZGE6ICdhZ2VuZGEnLFxuICB9O1xuXG4gIHB1YmxpYyBjYWxlbmRhciA9IGlucHV0PCdncmVnb3JpYW4nIHwgJ3NvbGFyLWhpanJpJyB8IHN0cmluZz4oKTtcbiAgcHJvdGVjdGVkIGNhbGVuZGFyVHlwZSA9IGxpbmtlZFNpZ25hbDwnZ3JlZ29yaWFuJyB8ICdzb2xhci1oaWpyaScgfCBzdHJpbmc+KFxuICAgICgpID0+IHRoaXMuY2FsZW5kYXIoKSA/PyB0aGlzLmxvY2FsZVNlcnZpY2UuYWN0aXZlUHJvZmlsZSgpLmNhbGVuZGFyLnN5c3RlbSxcbiAgKTtcblxuICBwdWJsaWMgc3RhcnRpbmdEYXRlID0gaW5wdXQ8RGF0ZT4obmV3IERhdGUoKSk7XG4gIHB1YmxpYyBjdXJyZW50RGF0ZSA9IGxpbmtlZFNpZ25hbDxBWERhdGVUaW1lPigoKSA9PlxuICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZSh0aGlzLnN0YXJ0aW5nRGF0ZSgpLCB0aGlzLmNhbGVuZGFyVHlwZSgpKS5zdGFydE9mKCdkYXknKSxcbiAgKTtcblxuICBwcml2YXRlIF9hcHBvaW50bWVudHMgPSBzaWduYWw8QVhTY2hlZHVsZXJBcHBvaW50bWVudFtdPihbXSk7XG4gIHB1YmxpYyBhcHBvaW50bWVudHMgPSB0aGlzLl9hcHBvaW50bWVudHMuYXNSZWFkb25seSgpO1xuICBwcm90ZWN0ZWQgcnRsID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIGlzRnVsbFNjcmVlbiA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCB2aWV3c0RhdGFTb3VyY2UgPSBzaWduYWw8eyBpZDogc3RyaW5nOyB0ZXh0OiBzdHJpbmcgfVtdPihbXSk7XG4gIHByaXZhdGUgcHJldkRhdGUgPSBzaWduYWw8QVhEYXRlVGltZT4odGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKG5ldyBEYXRlKCksIHRoaXMuY2FsZW5kYXJUeXBlKCkpKTtcblxuICBwdWJsaWMgZW5kRGF5SG91ciA9IGlucHV0KDI0KTtcbiAgcHVibGljIHN0YXJ0RGF5SG91ciA9IGlucHV0KDgpO1xuICBwdWJsaWMgaGFzSGVhZGVyID0gaW5wdXQodHJ1ZSk7XG4gIHB1YmxpYyByZWFkb25seSA9IGlucHV0KGZhbHNlKTtcbiAgcHVibGljIGRyYWdnYWJsZSA9IGlucHV0KHRydWUpO1xuICBwdWJsaWMgYWxsb3dGdWxsU2NyZWVuID0gaW5wdXQodHJ1ZSk7XG4gIHB1YmxpYyBtdWx0aURheVZpZXdEYXlzQ291bnQgPSBpbnB1dCg3KTtcbiAgcHVibGljIGRhdGFTb3VyY2UgPSBpbnB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50RGF0YVNvdXJjZT4oW10pO1xuICBwdWJsaWMgZmlyc3REYXlPZldlZWsgPSBpbnB1dDxBWERheU9mV2Vla05hbWU+KCdzdW5kYXknKTtcbiAgcHVibGljIHZpZXdzID0gaW5wdXQ8QVhTY2hlZHVsZXJWaWV3W10+KFtcbiAgICAnZGF5JyxcbiAgICAnd2VlaycsXG4gICAgJ21vbnRoJyxcbiAgICAndGltZWxpbmUtZGF5JyxcbiAgICAndGltZWxpbmUtbXVsdGktZGF5JyxcbiAgICAndGltZWxpbmUtbW9udGgnLFxuICAgICdhZ2VuZGEnLFxuICBdKTtcblxuICBwdWJsaWMgc2VsZWN0ZWRWaWV3ID0gbW9kZWw8QVhTY2hlZHVsZXJWaWV3Pih0aGlzLnZpZXdzKClbMF0pO1xuICBwcml2YXRlIHByZXZWaWV3ID0gc2lnbmFsPEFYU2NoZWR1bGVyVmlldz4odGhpcy5zZWxlY3RlZFZpZXcoKSk7XG5cbiAgLy8gLS0tIFB1YmxpYyBPdXRwdXRzIC0tLVxuICBwdWJsaWMgb25EYXRhTG9hZGVkID0gb3V0cHV0PHZvaWQ+KCk7XG4gIHB1YmxpYyBvblJhbmdlQ2hhbmdlZCA9IG91dHB1dDxBWFNjaGVkdWxlckRhdGVSYW5nZT4oKTtcbiAgcHVibGljIG9uU2xvdENsaWNrZWQgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgcHVibGljIG9uU2xvdERibENsaWNrZWQgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgcHVibGljIG9uU2xvdFJpZ2h0Q2xpY2sgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgcHVibGljIG9uQXBwb2ludG1lbnREcm9wID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdERyb3BFdmVudD4oKTtcbiAgcHVibGljIG9uQXBwb2ludG1lbnRDbGlja2VkID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBwdWJsaWMgb25BcHBvaW50bWVudERibENsaWNrZWQgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIHB1YmxpYyBvbkFwcG9pbnRtZW50UmlnaHRDbGljayA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcblxuICAvLyAtLS0gSW50ZXJuYWwgSGFuZGxlcnMgZm9yIFZpZXcgT3V0cHV0cyAtLS1cbiAgcHJvdGVjdGVkIGhhbmRsZVNsb3RDbGlja0ludGVybmFsKGV2ZW50RGF0YTogQVhTY2hlZHVsZXJTbG90TW91c2VFdmVudCkge1xuICAgIHRoaXMub25TbG90Q2xpY2tlZC5lbWl0KGV2ZW50RGF0YSk7XG4gIH1cbiAgcHJvdGVjdGVkIGhhbmRsZVNsb3REYmxDbGlja0ludGVybmFsKGV2ZW50RGF0YTogQVhTY2hlZHVsZXJTbG90TW91c2VFdmVudCkge1xuICAgIHRoaXMub25TbG90RGJsQ2xpY2tlZC5lbWl0KGV2ZW50RGF0YSk7XG4gIH1cbiAgcHJvdGVjdGVkIGhhbmRsZVNsb3RSaWdodENsaWNrSW50ZXJuYWwoZXZlbnREYXRhOiBBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5vblNsb3RSaWdodENsaWNrLmVtaXQoZXZlbnREYXRhKTtcbiAgfVxuICBwcm90ZWN0ZWQgaGFuZGxlQXBwb2ludG1lbnRDbGlja0ludGVybmFsKGV2ZW50RGF0YTogQVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLm9uQXBwb2ludG1lbnRDbGlja2VkLmVtaXQoZXZlbnREYXRhKTtcbiAgfVxuICBwcm90ZWN0ZWQgaGFuZGxlQXBwb2ludG1lbnREYmxDbGlja0ludGVybmFsKGV2ZW50RGF0YTogQVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLm9uQXBwb2ludG1lbnREYmxDbGlja2VkLmVtaXQoZXZlbnREYXRhKTtcbiAgfVxuICBwcm90ZWN0ZWQgaGFuZGxlQXBwb2ludG1lbnRSaWdodENsaWNrSW50ZXJuYWwoZXZlbnREYXRhOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudCkge1xuICAgIHRoaXMub25BcHBvaW50bWVudFJpZ2h0Q2xpY2suZW1pdChldmVudERhdGEpO1xuICB9XG4gIHByb3RlY3RlZCBoYW5kbGVBcHBvaW50bWVudERyb3BJbnRlcm5hbChldmVudERhdGE6IEFYU2NoZWR1bGVyU2xvdERyb3BFdmVudCkge1xuICAgIHRoaXMub25BcHBvaW50bWVudERyb3AuZW1pdChldmVudERhdGEpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jYWxlbmRhclNlcnZpY2UuY2FsZW5kYXJDaGFuZ2VzJC5waXBlKHRoaXMudW5zdWJzY3JpYmVyLnRha2VVbnRpbERlc3Ryb3kpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZSh0aGlzLmN1cnJlbnREYXRlKCkuZGF0ZSwgdGhpcy5jYWxlbmRhclR5cGUoKSk7XG4gICAgICBpZiAoIWN1cnJlbnREYXRlLmVxdWFsKHRoaXMuY3VycmVudERhdGUoKSkpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50RGF0ZS5zZXQoY3VycmVudERhdGUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UubGFuZ0NoYW5nZXMkLnBpcGUodGhpcy51bnN1YnNjcmliZXIudGFrZVVudGlsRGVzdHJveSkuc3Vic2NyaWJlKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHRoaXMuZmlsbERhdGFTb3VyY2UoKTtcbiAgICAgIHRoaXMudmlld01vZGVTZWxlY3Rib3goKS5zZWxlY3RJdGVtcyh0aGlzLnZpZXdzRGF0YVNvdXJjZSgpLmZpbmQoKGMpID0+IGMuaWQgPT0gdGhpcy5zZWxlY3RlZFZpZXcoKSkpO1xuICAgICAgY29uc3QgY3VycmVudERhdGUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUodGhpcy5jdXJyZW50RGF0ZSgpLmRhdGUsIHRoaXMuY2FsZW5kYXJUeXBlKCkpO1xuICAgICAgaWYgKCFjdXJyZW50RGF0ZS5lcXVhbCh0aGlzLmN1cnJlbnREYXRlKCkpKSB7XG4gICAgICAgIHRoaXMuY3VycmVudERhdGUuc2V0KGN1cnJlbnREYXRlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB0aGlzLnJ0bC5zZXQoQVhIdG1sVXRpbC5pc1J0bCh0aGlzLm5hdGl2ZUVsZW1lbnQpKTtcbiAgICB0aGlzLmZpbGxEYXRhU291cmNlKCk7XG4gIH1cblxuICAjYXBwb2ludG1lbnRFZmZlY3QgPSBlZmZlY3QoYXN5bmMgKCkgPT4ge1xuICAgIGlmICh0eXBlb2YgdGhpcy5kYXRhU291cmNlKCkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IGZ1bmMgPSB0aGlzLmRhdGFTb3VyY2UoKSBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50TG9hZGVyO1xuICAgICAgY29uc3QgcmFuZ2UgPSB7XG4gICAgICAgIGVuZDogdGhpcy5yYW5nZSgpLmVuZCxcbiAgICAgICAgZnJvbTogdGhpcy5yYW5nZSgpLmZyb20sXG4gICAgICB9O1xuICAgICAgY29uc3QgbGlzdCA9IGF3YWl0IGZ1bmMoeyByYW5nZSB9KTtcbiAgICAgIHRoaXMuX2FwcG9pbnRtZW50cy5zZXQobGlzdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxpc3QgPSB0aGlzLmRhdGFTb3VyY2UoKSBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50W107XG4gICAgICB0aGlzLl9hcHBvaW50bWVudHMuc2V0KGxpc3QpO1xuICAgIH1cbiAgICB0aGlzLm9uRGF0YUxvYWRlZC5lbWl0KCk7XG4gIH0pO1xuXG4gIHByaXZhdGUgYXN5bmMgZmlsbERhdGFTb3VyY2UoKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgZm9yIGF3YWl0IChjb25zdCBjIG9mIHRoaXMudmlld3MoKSkge1xuICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKGBkYXRlVGltZS5kdXJhdGlvbi4ke3RoaXMuZGlzcGxheVZpZXdzW2NdfWApO1xuICAgICAgcmVzdWx0LnB1c2goeyB0ZXh0LCBpZDogYyB9KTtcbiAgICB9XG4gICAgdGhpcy52aWV3c0RhdGFTb3VyY2Uuc2V0KHJlc3VsdCk7XG4gIH1cblxuICBwcml2YXRlIGdldEdyaWREYXRlUmFuZ2UoZGF0ZUluTW9udGg6IEFYRGF0ZVRpbWUpOiB7IGdyaWRTdGFydERhdGU6IEFYRGF0ZVRpbWU7IGdyaWRFbmREYXRlOiBBWERhdGVUaW1lIH0ge1xuICAgIGNvbnN0IGZpcnN0RGF5T2ZNb250aCA9IGRhdGVJbk1vbnRoLnN0YXJ0T2YoJ21vbnRoJyk7XG4gICAgY29uc3QgZmlyc3REYXlHcmlkTnVtID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldERheU9mV2Vla051bWJlcih0aGlzLmZpcnN0RGF5T2ZXZWVrKCkpO1xuICAgIGNvbnN0IGZpcnN0RGlzcGxheWVkRGF5T2ZXZWVrID0gZmlyc3REYXlPZk1vbnRoLmRheU9mV2VlaztcbiAgICBjb25zdCBkYXlzRnJvbVByZXZNb250aCA9IChmaXJzdERpc3BsYXllZERheU9mV2VlayAtIGZpcnN0RGF5R3JpZE51bSArIDcpICUgNztcbiAgICBjb25zdCBncmlkU3RhcnREYXRlID0gZmlyc3REYXlPZk1vbnRoLmFkZCgnZGF5JywgLWRheXNGcm9tUHJldk1vbnRoKTtcbiAgICAvLyBDYWxjdWxhdGUgZW5kIGRhdGUgYmFzZWQgb24gc3RhbmRhcmQgNiB3ZWVrcyBmb3Igc2FmZXR5LCBvciBjYWxjdWxhdGUgZHluYW1pY2FsbHkgaWYgcHJlZmVycmVkXG4gICAgY29uc3QgZ3JpZEVuZERhdGUgPSBncmlkU3RhcnREYXRlLmFkZCgnZGF5JywgNiAqIDcgLSAxKTtcbiAgICByZXR1cm4geyBncmlkU3RhcnREYXRlLCBncmlkRW5kRGF0ZSB9O1xuICB9XG5cbiAgcHVibGljIGN1cnJlbnREYXRlVGV4dCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBzd2l0Y2ggKHRoaXMuc2VsZWN0ZWRWaWV3KCkpIHtcbiAgICAgIGNhc2UgJ2RheSc6XG4gICAgICBjYXNlICd0aW1lbGluZS1kYXknOlxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRTZXJ2aWNlLmZvcm1hdCh0aGlzLmN1cnJlbnREYXRlKCksICdkYXRldGltZScsIHtcbiAgICAgICAgICBmb3JtYXQ6ICdERCBNTU1NIHl5eXknLFxuICAgICAgICAgIGNhbGVuZGFyOiB0aGlzLmNhbGVuZGFyVHlwZSgpLFxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ3dlZWsnOiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0T2ZXZWVrID0gdGhpcy5mb3JtYXRTZXJ2aWNlLmZvcm1hdCh0aGlzLmN1cnJlbnREYXRlKCksICdkYXRldGltZScsIHtcbiAgICAgICAgICBmb3JtYXQ6ICdERCBNTU1NIHl5eXknLFxuICAgICAgICAgIGNhbGVuZGFyOiB0aGlzLmNhbGVuZGFyVHlwZSgpLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZW5kT2ZXZWVrID0gdGhpcy5mb3JtYXRTZXJ2aWNlLmZvcm1hdCh0aGlzLmN1cnJlbnREYXRlKCkuYWRkKCd3ZWVrJywgMSkuYWRkKCdkYXknLCAtMSksICdkYXRldGltZScsIHtcbiAgICAgICAgICBmb3JtYXQ6ICdERCBNTU1NIHl5eXknLFxuICAgICAgICAgIGNhbGVuZGFyOiB0aGlzLmNhbGVuZGFyVHlwZSgpLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGAke3N0YXJ0T2ZXZWVrfSAtICR7ZW5kT2ZXZWVrfWA7XG4gICAgICB9XG4gICAgICBjYXNlICdhZ2VuZGEnOlxuICAgICAgY2FzZSAndGltZWxpbmUtbXVsdGktZGF5Jzoge1xuICAgICAgICBjb25zdCBzdGFydE9mV2VlayA9IHRoaXMuZm9ybWF0U2VydmljZS5mb3JtYXQodGhpcy5jdXJyZW50RGF0ZSgpLCAnZGF0ZXRpbWUnLCB7XG4gICAgICAgICAgZm9ybWF0OiAnREQgTU1NTSB5eXl5JyxcbiAgICAgICAgICBjYWxlbmRhcjogdGhpcy5jYWxlbmRhclR5cGUoKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGVuZE9mV2VlayA9IHRoaXMuZm9ybWF0U2VydmljZS5mb3JtYXQoXG4gICAgICAgICAgdGhpcy5jdXJyZW50RGF0ZSgpLmFkZCgnZGF5JywgdGhpcy5tdWx0aURheVZpZXdEYXlzQ291bnQoKSAtIDEpLFxuICAgICAgICAgICdkYXRldGltZScsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9ybWF0OiAnREQgTU1NTSB5eXl5JyxcbiAgICAgICAgICAgIGNhbGVuZGFyOiB0aGlzLmNhbGVuZGFyVHlwZSgpLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBgJHtzdGFydE9mV2Vla30gLSAke2VuZE9mV2Vla31gO1xuICAgICAgfVxuICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgY2FzZSAndGltZWxpbmUtbW9udGgnOlxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRTZXJ2aWNlLmZvcm1hdCh0aGlzLmN1cnJlbnREYXRlKCksICdkYXRldGltZScsIHtcbiAgICAgICAgICBmb3JtYXQ6ICdNTU1NIHl5eXknLFxuICAgICAgICAgIGNhbGVuZGFyOiB0aGlzLmNhbGVuZGFyVHlwZSgpLFxuICAgICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIHB1YmxpYyBjYWxlbmRhckRlcHRoID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHN3aXRjaCAodGhpcy5zZWxlY3RlZFZpZXcoKSkge1xuICAgICAgY2FzZSAnZGF5JzpcbiAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgY2FzZSAnYWdlbmRhJzpcbiAgICAgIGNhc2UgJ3RpbWVsaW5lLWRheSc6XG4gICAgICBjYXNlICd0aW1lbGluZS1tdWx0aS1kYXknOlxuICAgICAgICByZXR1cm4gJ2RheSc7XG4gICAgICBjYXNlICdtb250aCc6XG4gICAgICBjYXNlICd0aW1lbGluZS1tb250aCc6XG4gICAgICAgIHJldHVybiAnbW9udGgnO1xuICAgIH1cbiAgfSk7XG5cbiAgcHJpdmF0ZSBtYXBwZWRBcHBvaW50bWVudHMgPSBjb21wdXRlZDxBWFNjaGVkdWxlckFwcG9pbnRtZW50W10+KCgpID0+IHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuX2FwcG9pbnRtZW50cygpIGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRbXTtcblxuICAgIHJldHVybiBpdGVtc1xuICAgICAgLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICBjb25zdCBzdGFydERhdGUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoaXRlbS5zdGFydERhdGUsIHRoaXMuY2FsZW5kYXJUeXBlKCkpO1xuICAgICAgICBjb25zdCBlbmREYXRlID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGl0ZW0uZW5kRGF0ZSwgdGhpcy5jYWxlbmRhclR5cGUoKSk7XG4gICAgICAgIC8vIEJhc2ljIHZhbGlkYXRpb25cbiAgICAgICAgaWYgKCFzdGFydERhdGU/LmRhdGUgfHwgIWVuZERhdGU/LmRhdGUpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1NjaGVkdWxlcjogU2tpcHBpbmcgaXRlbSBkdWUgdG8gaW52YWxpZCBkYXRlIGZpZWxkczonLCBpdGVtKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICAvLyBDaGVjayBpZiBkYXRlcyBhcmUgdmFsaWQgYWZ0ZXIgY3JlYXRpb25cbiAgICAgICAgaWYgKGlzTmFOKHN0YXJ0RGF0ZS5kYXRlLmdldFRpbWUoKSkgfHwgaXNOYU4oZW5kRGF0ZS5kYXRlLmdldFRpbWUoKSkpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1NjaGVkdWxlcjogU2tpcHBpbmcgaXRlbSBkdWUgdG8gaW52YWxpZCBwYXJzZWQgZGF0ZSAoTmFOKTonLCBpdGVtKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChhcHB0KTogYXBwdCBpcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50ID0+IGFwcHQgIT09IG51bGwpOyAvLyBGaWx0ZXIgb3V0IG51bGxzIGZyb20gaW52YWxpZCBkYXRlc1xuICB9KTtcblxuICBwdWJsaWMgcmFuZ2UgPSBjb21wdXRlZDxBWFNjaGVkdWxlckRhdGVSYW5nZT4oKCkgPT4ge1xuICAgIGNvbnN0IHZpZXcgPSB0aGlzLnNlbGVjdGVkVmlldygpO1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmN1cnJlbnREYXRlKCkuc3RhcnRPZignZGF5Jyk7XG5cbiAgICBpZiAoIWN1cnJlbnQpIHJldHVybiB7IGZyb206IG51bGwsIGVuZDogbnVsbCB9O1xuXG4gICAgc3dpdGNoICh2aWV3KSB7XG4gICAgICBjYXNlICdkYXknOlxuICAgICAgY2FzZSAndGltZWxpbmUtZGF5Jzoge1xuICAgICAgICBjb25zdCByYW5nZSA9IHsgZnJvbTogY3VycmVudC5kYXRlLCBlbmQ6IGN1cnJlbnQuZW5kT2YoJ2RheScpLmRhdGUgfTtcbiAgICAgICAgcmV0dXJuIHJhbmdlO1xuICAgICAgfVxuICAgICAgY2FzZSAnd2Vlayc6IHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSB7IGZyb206IGN1cnJlbnQuZGF0ZSwgZW5kOiBjdXJyZW50LmFkZCgnZGF5JywgNykuZGF0ZSB9O1xuICAgICAgICByZXR1cm4gcmFuZ2U7XG4gICAgICB9XG4gICAgICBjYXNlICdtb250aCc6IHtcbiAgICAgICAgY29uc3QgeyBncmlkU3RhcnREYXRlLCBncmlkRW5kRGF0ZSB9ID0gdGhpcy5nZXRHcmlkRGF0ZVJhbmdlKGN1cnJlbnQpO1xuICAgICAgICBjb25zdCByYW5nZSA9IHsgZnJvbTogZ3JpZFN0YXJ0RGF0ZS5kYXRlLCBlbmQ6IGdyaWRFbmREYXRlLmFkZCgnZGF5JywgMSkuZGF0ZSB9O1xuICAgICAgICByZXR1cm4gcmFuZ2U7XG4gICAgICB9XG4gICAgICBjYXNlICd0aW1lbGluZS1tb250aCc6IHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSB7IGZyb206IGN1cnJlbnQuc3RhcnRPZignbW9udGgnKS5kYXRlLCBlbmQ6IGN1cnJlbnQuZW5kT2YoJ21vbnRoJykuZGF0ZSB9O1xuICAgICAgICByZXR1cm4gcmFuZ2U7XG4gICAgICB9XG4gICAgICBjYXNlICdhZ2VuZGEnOlxuICAgICAgY2FzZSAndGltZWxpbmUtbXVsdGktZGF5Jzoge1xuICAgICAgICBjb25zdCByYW5nZSA9IHsgZnJvbTogY3VycmVudC5kYXRlLCBlbmQ6IGN1cnJlbnQuYWRkKCdkYXknLCB0aGlzLm11bHRpRGF5Vmlld0RheXNDb3VudCgpKS5kYXRlIH07XG4gICAgICAgIHJldHVybiByYW5nZTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gICNyYW5nZUNoYW5nZWRFZmZlY3QgPSBlZmZlY3QoKCkgPT4ge1xuICAgIHRoaXMub25SYW5nZUNoYW5nZWQuZW1pdCh0aGlzLnJhbmdlKCkpO1xuICB9KTtcblxuICAjdmlld0NoYW5nZWRFZmZlY3QgPSBlZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHZpZXcgPSB0aGlzLnNlbGVjdGVkVmlldygpO1xuICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICB0aGlzLmhhbmRsZVZpZXdDaGFuZ2VkKHRoaXMucHJldlZpZXcoKSwgdmlldyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHZpZXdBcHBvaW50bWVudHMgPSBjb21wdXRlZDxBWFNjaGVkdWxlckFwcG9pbnRtZW50W10+KCgpID0+IHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jdXJyZW50RGF0ZSgpO1xuICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMubWFwcGVkQXBwb2ludG1lbnRzKCk7XG4gICAgY29uc3QgcmFuZ2VTdGFydCA9IHRoaXMucmFuZ2UoKS5mcm9tO1xuICAgIGNvbnN0IHJhbmdlRW5kID0gdGhpcy5yYW5nZSgpLmVuZDtcblxuICAgIGlmICghY3VycmVudCB8fCBtYXBwZWQubGVuZ3RoID09PSAwKSByZXR1cm4gW107XG5cbiAgICByZXR1cm4gbWFwcGVkLmZpbHRlcihcbiAgICAgIChhcHB0KSA9PlxuICAgICAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoYXBwdC5zdGFydERhdGUsIHRoaXMuY2FsZW5kYXJUeXBlKCkpLmNvbXBhcmUocmFuZ2VFbmQsICdzZWNvbmQnKSA8PSAwICYmXG4gICAgICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShhcHB0LmVuZERhdGUsIHRoaXMuY2FsZW5kYXJUeXBlKCkpLmNvbXBhcmUocmFuZ2VTdGFydCwgJ3NlY29uZCcpID49IDAsXG4gICAgKTtcbiAgfSk7XG5cbiAgdmlld0NoYW5nZWQoZTogQVhWYWx1ZUNoYW5nZWRFdmVudDxBWFNjaGVkdWxlclZpZXc+KSB7XG4gICAgY29uc3QgbmV3VmlldyA9IGUudmFsdWU7XG4gICAgY29uc3Qgb2xkVmlldyA9IGUub2xkVmFsdWU7XG4gICAgdGhpcy5zZWxlY3RlZFZpZXcuc2V0KG5ld1ZpZXcpO1xuXG4gICAgdGhpcy5oYW5kbGVWaWV3Q2hhbmdlZChvbGRWaWV3LCBuZXdWaWV3KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlVmlld0NoYW5nZWQob2xkVmlldzogQVhTY2hlZHVsZXJWaWV3LCBuZXdWaWV3OiBBWFNjaGVkdWxlclZpZXcpIHtcbiAgICBpZiAob2xkVmlldyA9PT0gJ3dlZWsnKSB7XG4gICAgICBjb25zdCBvbGREYXlPZldlZWsgPSB0aGlzLnByZXZEYXRlKCkuZGF5T2ZXZWVrICUgNztcbiAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLmN1cnJlbnREYXRlKCkuYWRkKCdkYXknLCBvbGREYXlPZldlZWsgLSAxKTtcbiAgICAgIHRoaXMuY3VycmVudERhdGUuc2V0KGRhdGUpO1xuICAgIH1cblxuICAgIHRoaXMucHJldkRhdGUuc2V0KHRoaXMuY3VycmVudERhdGUoKSk7XG5cbiAgICBpZiAobmV3VmlldyA9PT0gJ3dlZWsnKSB7XG4gICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IHRoaXMuY3VycmVudERhdGUoKTtcbiAgICAgIGNvbnN0IGN1cnJlbnREYXlPZldlZWsgPSBjdXJyZW50RGF0ZS5kYXlPZldlZWs7XG4gICAgICBjb25zdCBkZXNpcmVkRmlyc3REYXlOYW1lID0gdGhpcy5maXJzdERheU9mV2VlaygpO1xuICAgICAgY29uc3QgZGVzaXJlZEZpcnN0RGF5TnVtYmVyID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldERheU9mV2Vla051bWJlcihkZXNpcmVkRmlyc3REYXlOYW1lKTtcbiAgICAgIGNvbnN0IGRheXNUb1N1YnRyYWN0ID0gKGN1cnJlbnREYXlPZldlZWsgLSBkZXNpcmVkRmlyc3REYXlOdW1iZXIgKyA3KSAlIDc7XG4gICAgICBjb25zdCBzdGFydE9mV2Vla0RhdGUgPSBjdXJyZW50RGF0ZS5hZGQoJ2RheScsIC1kYXlzVG9TdWJ0cmFjdCk7XG4gICAgICB0aGlzLmN1cnJlbnREYXRlLnNldChzdGFydE9mV2Vla0RhdGUpO1xuICAgIH1cblxuICAgIHRoaXMucHJldlZpZXcuc2V0KG5ld1ZpZXcpO1xuICB9XG5cbiAgbmV4dENsaWNrKCkge1xuICAgIHN3aXRjaCAodGhpcy5zZWxlY3RlZFZpZXcoKSkge1xuICAgICAgY2FzZSAnZGF5JzpcbiAgICAgIGNhc2UgJ3RpbWVsaW5lLWRheSc6XG4gICAgICAgIHRoaXMuY3VycmVudERhdGUuc2V0KHRoaXMuY3VycmVudERhdGUoKS5hZGQoJ2RheScsIDEpKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICB0aGlzLmN1cnJlbnREYXRlLnNldCh0aGlzLmN1cnJlbnREYXRlKCkuYWRkKCd3ZWVrJywgMSkpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnYWdlbmRhJzpcbiAgICAgIGNhc2UgJ3RpbWVsaW5lLW11bHRpLWRheSc6XG4gICAgICAgIHRoaXMuY3VycmVudERhdGUuc2V0KHRoaXMuY3VycmVudERhdGUoKS5hZGQoJ2RheScsIHRoaXMubXVsdGlEYXlWaWV3RGF5c0NvdW50KCkpKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgIGNhc2UgJ3RpbWVsaW5lLW1vbnRoJzpcbiAgICAgICAgdGhpcy5jdXJyZW50RGF0ZS5zZXQodGhpcy5jdXJyZW50RGF0ZSgpLmFkZCgnbW9udGgnLCAxKSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByZXZDbGljaygpIHtcbiAgICBzd2l0Y2ggKHRoaXMuc2VsZWN0ZWRWaWV3KCkpIHtcbiAgICAgIGNhc2UgJ2RheSc6XG4gICAgICBjYXNlICd0aW1lbGluZS1kYXknOlxuICAgICAgICB0aGlzLmN1cnJlbnREYXRlLnNldCh0aGlzLmN1cnJlbnREYXRlKCkuYWRkKCdkYXknLCAtMSkpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgIHRoaXMuY3VycmVudERhdGUuc2V0KHRoaXMuY3VycmVudERhdGUoKS5hZGQoJ3dlZWsnLCAtMSkpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnYWdlbmRhJzpcbiAgICAgIGNhc2UgJ3RpbWVsaW5lLW11bHRpLWRheSc6XG4gICAgICAgIHRoaXMuY3VycmVudERhdGUuc2V0KHRoaXMuY3VycmVudERhdGUoKS5hZGQoJ2RheScsIC10aGlzLm11bHRpRGF5Vmlld0RheXNDb3VudCgpKSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdtb250aCc6XG4gICAgICBjYXNlICd0aW1lbGluZS1tb250aCc6XG4gICAgICAgIHRoaXMuY3VycmVudERhdGUuc2V0KHRoaXMuY3VycmVudERhdGUoKS5hZGQoJ21vbnRoJywgLTEpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgY2FsZW5kYXJEYXRlQ2hhbmdlZChlOiBBWFZhbHVlQ2hhbmdlZEV2ZW50PERhdGU+KSB7XG4gICAgbGV0IGN1cnJlbnREYXRlID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGUudmFsdWUsIHRoaXMuY2FsZW5kYXJUeXBlKCkpO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkVmlldygpID09PSAnd2VlaycpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnREYXlPZldlZWsgPSBjdXJyZW50RGF0ZS5kYXlPZldlZWs7XG4gICAgICBjb25zdCBkZXNpcmVkRmlyc3REYXlOYW1lID0gdGhpcy5maXJzdERheU9mV2VlaygpO1xuICAgICAgY29uc3QgZGVzaXJlZEZpcnN0RGF5TnVtYmVyID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldERheU9mV2Vla051bWJlcihkZXNpcmVkRmlyc3REYXlOYW1lKTtcbiAgICAgIGNvbnN0IGRheXNUb1N1YnRyYWN0ID0gKGN1cnJlbnREYXlPZldlZWsgLSBkZXNpcmVkRmlyc3REYXlOdW1iZXIgKyA3KSAlIDc7XG4gICAgICBjdXJyZW50RGF0ZSA9IGN1cnJlbnREYXRlLmFkZCgnZGF5JywgLWRheXNUb1N1YnRyYWN0KTtcbiAgICB9XG4gICAgaWYgKCFjdXJyZW50RGF0ZS5lcXVhbCh0aGlzLmN1cnJlbnREYXRlKCkpKSB7XG4gICAgICB0aGlzLmN1cnJlbnREYXRlLnNldChjdXJyZW50RGF0ZSk7XG4gICAgfVxuICAgIHRoaXMuY2FsZW5kYXJQb3BvdmVyKCk/LmNsb3NlKCk7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlRnVsbFNjcmVlbigpIHtcbiAgICBpZiAoIXRoaXMuaXNGdWxsU2NyZWVuKCkpIHRoaXMubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdheC1mdWxsLXNjcmVlbi1jb250YWluZXInKTtcbiAgICBlbHNlIHRoaXMubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdheC1mdWxsLXNjcmVlbi1jb250YWluZXInKTtcbiAgICB0aGlzLmlzRnVsbFNjcmVlbi5zZXQoIXRoaXMuaXNGdWxsU2NyZWVuKCkpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHJlZnJlc2goYXBwb2ludG1lbnRzPzogQVhTY2hlZHVsZXJBcHBvaW50bWVudFtdKSB7XG4gICAgaWYgKGFwcG9pbnRtZW50cykge1xuICAgICAgY29uc3QgbmV3QXBwb2ludG1lbnRzID0gdGhpcy5fYXBwb2ludG1lbnRzKCkubWFwKChhcHB0KSA9PiB7XG4gICAgICAgIHJldHVybiBhcHBvaW50bWVudHMuZmluZCgoYSkgPT4gYS5pZCA9PT0gYXBwdC5pZCkgPz8gYXBwdDtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fYXBwb2ludG1lbnRzLnNldChuZXdBcHBvaW50bWVudHMpO1xuICAgICAgdGhpcy5vbkRhdGFMb2FkZWQuZW1pdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHRoaXMuZGF0YVNvdXJjZSgpID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBmdW5jID0gdGhpcy5kYXRhU291cmNlKCkgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudExvYWRlcjtcbiAgICAgIGNvbnN0IHJhbmdlID0ge1xuICAgICAgICBlbmQ6IHRoaXMucmFuZ2UoKS5lbmQsXG4gICAgICAgIGZyb206IHRoaXMucmFuZ2UoKS5mcm9tLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGxpc3QgPSBhd2FpdCBmdW5jKHsgcmFuZ2UgfSk7XG4gICAgICB0aGlzLl9hcHBvaW50bWVudHMuc2V0KGxpc3QpO1xuICAgICAgdGhpcy5vbkRhdGFMb2FkZWQuZW1pdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBsaXN0ID0gdGhpcy5kYXRhU291cmNlKCkgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudFtdO1xuICAgIHRoaXMuX2FwcG9pbnRtZW50cy5zZXQobGlzdCk7XG4gICAgdGhpcy5vbkRhdGFMb2FkZWQuZW1pdCgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLWNvbnRhaW5lclwiPlxuICBAaWYgKGhhc0hlYWRlcigpKSB7XG4gICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1oZWFkZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItZGF0ZVwiPlxuICAgICAgICA8YXgtYnV0dG9uIGxvb2s9XCJibGFua1wiIChvbkNsaWNrKT1cInByZXZDbGljaygpXCI+XG4gICAgICAgICAgPGF4LWljb25cbiAgICAgICAgICAgIGNsYXNzPVwiYXgtaWNvbiBheC10ZXh0LXhsXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ2F4LWljb24tY2hldnJvbi1sZWZ0JzogIXJ0bCgpLFxuICAgICAgICAgICAgICAnYXgtaWNvbi1jaGV2cm9uLXJpZ2h0JzogcnRsKCksXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICA+PC9heC1pY29uPlxuICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgPGF4LWJ1dHRvbiBsb29rPVwiYmxhbmtcIiBbdGV4dF09XCJjdXJyZW50RGF0ZVRleHQoKVwiICNkYXRlPjwvYXgtYnV0dG9uPlxuICAgICAgICA8YXgtYnV0dG9uIGxvb2s9XCJibGFua1wiIChvbkNsaWNrKT1cIm5leHRDbGljaygpXCI+XG4gICAgICAgICAgPGF4LWljb25cbiAgICAgICAgICAgIGNsYXNzPVwiYXgtaWNvbiBheC10ZXh0LXhsXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ2F4LWljb24tY2hldnJvbi1yaWdodCc6ICFydGwoKSxcbiAgICAgICAgICAgICAgJ2F4LWljb24tY2hldnJvbi1sZWZ0JzogcnRsKCksXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICA+PC9heC1pY29uPlxuICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgPGF4LXBvcG92ZXIgW3RhcmdldF09XCJkYXRlXCIgW3BsYWNlbWVudF09XCInYm90dG9tJ1wiICNjYWxlbmRhclBvcG92ZXI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF4LW92ZXJsYXktcGFuZVwiPlxuICAgICAgICAgICAgPGF4LWNhbGVuZGFyXG4gICAgICAgICAgICAgIFt0eXBlXT1cImNhbGVuZGFyVHlwZSgpXCJcbiAgICAgICAgICAgICAgW2RlcHRoXT1cImNhbGVuZGFyRGVwdGgoKVwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cImN1cnJlbnREYXRlKClcIlxuICAgICAgICAgICAgICAob25WYWx1ZUNoYW5nZWQpPVwiY2FsZW5kYXJEYXRlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2F4LWNhbGVuZGFyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2F4LXBvcG92ZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItYWN0aW9uc1wiPlxuICAgICAgICA8YXgtc2VsZWN0LWJveFxuICAgICAgICAgIFtkcm9wZG93bldpZHRoXT1cIjIwMFwiXG4gICAgICAgICAgW25nTW9kZWxdPVwic2VsZWN0ZWRWaWV3KClcIlxuICAgICAgICAgIFtkYXRhU291cmNlXT1cInZpZXdzRGF0YVNvdXJjZSgpXCJcbiAgICAgICAgICAob25WYWx1ZUNoYW5nZWQpPVwidmlld0NoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgID48L2F4LXNlbGVjdC1ib3g+XG5cbiAgICAgICAgQGlmIChhbGxvd0Z1bGxTY3JlZW4oKSkge1xuICAgICAgICAgIDxheC1idXR0b24gbG9vaz1cImJsYW5rXCIgKG9uQ2xpY2spPVwiaGFuZGxlRnVsbFNjcmVlbigpXCI+XG4gICAgICAgICAgICA8YXgtaWNvbj5cbiAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZhLXNvbGlkIGZhLWV4cGFuZFwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZmEtY29tcHJlc3MnOiBpc0Z1bGxTY3JlZW4oKSwgJ2ZhLWV4cGFuZCc6ICFpc0Z1bGxTY3JlZW4oKSB9XCJcbiAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgIDwvYXgtaWNvbj5cbiAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIH1cbiAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci12aWV3cy1jb250YWluZXJcIj5cbiAgICBAc3dpdGNoIChzZWxlY3RlZFZpZXcoKSkge1xuICAgICAgQGNhc2UgKCdkYXknKSB7XG4gICAgICAgIDxheC1zY2hlZHVsZXItZGF5LXZpZXdcbiAgICAgICAgICBbZGF0ZV09XCJjdXJyZW50RGF0ZSgpXCJcbiAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICAgICAgW2RyYWdnYWJsZV09XCJkcmFnZ2FibGUoKVwiXG4gICAgICAgICAgW2NhbGVuZGFyXT1cImNhbGVuZGFyVHlwZSgpXCJcbiAgICAgICAgICBbZW5kRGF5SG91cl09XCJlbmREYXlIb3VyKClcIlxuICAgICAgICAgIFtzdGFydERheUhvdXJdPVwic3RhcnREYXlIb3VyKClcIlxuICAgICAgICAgIFthcHBvaW50bWVudHNdPVwidmlld0FwcG9pbnRtZW50cygpXCJcbiAgICAgICAgICAoc2xvdENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2xvdERibENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90RGJsQ2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3RSaWdodENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKG9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnREcm9wSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnREYmxDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnREYmxDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50UmlnaHRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICA+PC9heC1zY2hlZHVsZXItZGF5LXZpZXc+XG4gICAgICB9XG4gICAgICBAY2FzZSAoJ3dlZWsnKSB7XG4gICAgICAgIDxheC1zY2hlZHVsZXItd2Vlay12aWV3XG4gICAgICAgICAgW2RhdGVdPVwiY3VycmVudERhdGUoKVwiXG4gICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5KClcIlxuICAgICAgICAgIFtkcmFnZ2FibGVdPVwiZHJhZ2dhYmxlKClcIlxuICAgICAgICAgIFtjYWxlbmRhcl09XCJjYWxlbmRhclR5cGUoKVwiXG4gICAgICAgICAgW2VuZERheUhvdXJdPVwiZW5kRGF5SG91cigpXCJcbiAgICAgICAgICBbc3RhcnREYXlIb3VyXT1cInN0YXJ0RGF5SG91cigpXCJcbiAgICAgICAgICBbYXBwb2ludG1lbnRzXT1cInZpZXdBcHBvaW50bWVudHMoKVwiXG4gICAgICAgICAgKHNsb3RDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKHNsb3REYmxDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdERibENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKHNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90UmlnaHRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChvbkFwcG9pbnRtZW50RHJvcEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50RHJvcEludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50RGJsQ2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudFJpZ2h0Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgPjwvYXgtc2NoZWR1bGVyLXdlZWstdmlldz5cbiAgICAgIH1cbiAgICAgIEBjYXNlICgnbW9udGgnKSB7XG4gICAgICAgIDxheC1zY2hlZHVsZXItbW9udGgtdmlld1xuICAgICAgICAgIFtkYXRlXT1cImN1cnJlbnREYXRlKClcIlxuICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgICAgICBbZHJhZ2dhYmxlXT1cImRyYWdnYWJsZSgpXCJcbiAgICAgICAgICBbY2FsZW5kYXJdPVwiY2FsZW5kYXJUeXBlKClcIlxuICAgICAgICAgIFtmaXJzdERheU9mV2Vla109XCJmaXJzdERheU9mV2VlaygpXCJcbiAgICAgICAgICBbYXBwb2ludG1lbnRzXT1cInZpZXdBcHBvaW50bWVudHMoKVwiXG4gICAgICAgICAgKHNsb3RDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKHNsb3REYmxDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdERibENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKHNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90UmlnaHRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChvbkFwcG9pbnRtZW50RHJvcEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50RHJvcEludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50RGJsQ2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudFJpZ2h0Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgPjwvYXgtc2NoZWR1bGVyLW1vbnRoLXZpZXc+XG4gICAgICB9XG4gICAgICBAY2FzZSAoJ3RpbWVsaW5lLWRheScpIHtcbiAgICAgICAgPGF4LXNjaGVkdWxlci10aW1lbGluZS1kYXktdmlld1xuICAgICAgICAgIFtkYXRlXT1cImN1cnJlbnREYXRlKClcIlxuICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgICAgICBbZHJhZ2dhYmxlXT1cImRyYWdnYWJsZSgpXCJcbiAgICAgICAgICBbY2FsZW5kYXJdPVwiY2FsZW5kYXJUeXBlKClcIlxuICAgICAgICAgIFtlbmREYXlIb3VyXT1cImVuZERheUhvdXIoKVwiXG4gICAgICAgICAgW3N0YXJ0RGF5SG91cl09XCJzdGFydERheUhvdXIoKVwiXG4gICAgICAgICAgW2FwcG9pbnRtZW50c109XCJ2aWV3QXBwb2ludG1lbnRzKClcIlxuICAgICAgICAgIChzbG90Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3RDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChzbG90RGJsQ2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3REYmxDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChzbG90UmlnaHRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdFJpZ2h0Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAob25BcHBvaW50bWVudERyb3BJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudERyb3BJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudERibENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50UmlnaHRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnRSaWdodENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgPC9heC1zY2hlZHVsZXItdGltZWxpbmUtZGF5LXZpZXc+XG4gICAgICB9XG4gICAgICBAY2FzZSAoJ3RpbWVsaW5lLW11bHRpLWRheScpIHtcbiAgICAgICAgPGF4LXNjaGVkdWxlci10aW1lbGluZS1tdWx0aS1kYXktdmlld1xuICAgICAgICAgIFtkYXRlXT1cImN1cnJlbnREYXRlKClcIlxuICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgICAgICBbZHJhZ2dhYmxlXT1cImRyYWdnYWJsZSgpXCJcbiAgICAgICAgICBbY2FsZW5kYXJdPVwiY2FsZW5kYXJUeXBlKClcIlxuICAgICAgICAgIFtlbmREYXlIb3VyXT1cImVuZERheUhvdXIoKVwiXG4gICAgICAgICAgW3N0YXJ0RGF5SG91cl09XCJzdGFydERheUhvdXIoKVwiXG4gICAgICAgICAgW2FwcG9pbnRtZW50c109XCJ2aWV3QXBwb2ludG1lbnRzKClcIlxuICAgICAgICAgIFtkYXlzQ291bnRdPVwibXVsdGlEYXlWaWV3RGF5c0NvdW50KClcIlxuICAgICAgICAgIChzbG90Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3RDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChzbG90RGJsQ2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3REYmxDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChzbG90UmlnaHRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdFJpZ2h0Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAob25BcHBvaW50bWVudERyb3BJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudERyb3BJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudERibENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50UmlnaHRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnRSaWdodENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgPC9heC1zY2hlZHVsZXItdGltZWxpbmUtbXVsdGktZGF5LXZpZXc+XG4gICAgICB9XG4gICAgICBAY2FzZSAoJ3RpbWVsaW5lLW1vbnRoJykge1xuICAgICAgICA8YXgtc2NoZWR1bGVyLXRpbWVsaW5lLW1vbnRoLXZpZXdcbiAgICAgICAgICBbZGF0ZV09XCJjdXJyZW50RGF0ZSgpXCJcbiAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICAgICAgW2RyYWdnYWJsZV09XCJkcmFnZ2FibGUoKVwiXG4gICAgICAgICAgW2NhbGVuZGFyXT1cImNhbGVuZGFyVHlwZSgpXCJcbiAgICAgICAgICBbYXBwb2ludG1lbnRzXT1cInZpZXdBcHBvaW50bWVudHMoKVwiXG4gICAgICAgICAgKHNsb3RDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKHNsb3REYmxDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdERibENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKHNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90UmlnaHRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChvbkFwcG9pbnRtZW50RHJvcEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50RHJvcEludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50RGJsQ2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudFJpZ2h0Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICA8L2F4LXNjaGVkdWxlci10aW1lbGluZS1tb250aC12aWV3PlxuICAgICAgfVxuICAgICAgQGNhc2UgKCdhZ2VuZGEnKSB7XG4gICAgICAgIDxheC1zY2hlZHVsZXItYWdlbmRhLXZpZXdcbiAgICAgICAgICBbZGF0ZV09XCJjdXJyZW50RGF0ZSgpXCJcbiAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICAgICAgW2RyYWdnYWJsZV09XCJkcmFnZ2FibGUoKVwiXG4gICAgICAgICAgW2NhbGVuZGFyXT1cImNhbGVuZGFyVHlwZSgpXCJcbiAgICAgICAgICBbYXBwb2ludG1lbnRzXT1cInZpZXdBcHBvaW50bWVudHMoKVwiXG4gICAgICAgICAgKHNsb3RDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKHNsb3REYmxDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdERibENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKHNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90UmlnaHRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChvbkFwcG9pbnRtZW50RHJvcEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50RHJvcEludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50RGJsQ2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudFJpZ2h0Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICA8L2F4LXNjaGVkdWxlci1hZ2VuZGEtdmlldz5cbiAgICAgIH1cbiAgICB9XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=","import { NgModule } from '@angular/core';\nimport { AXSchedulerComponent } from './scheduler.component';\nimport { AXSchedulerDayViewComponent } from './views/day/scheduler-day-view.component';\nimport { AXSchedulerMonthViewComponent } from './views/month/scheduler-month-view.component';\nimport { AXSchedulerTimelineDayViewComponent } from './views/timeline-day/scheduler-timeline-day-view.component';\nimport { AXSchedulerWeekViewComponent } from './views/week/scheduler-week-view.component';\nimport * as i0 from \"@angular/core\";\nconst COMPONENT = [\n AXSchedulerComponent,\n AXSchedulerDayViewComponent,\n AXSchedulerWeekViewComponent,\n AXSchedulerMonthViewComponent,\n AXSchedulerTimelineDayViewComponent,\n];\nexport class AXSchedulerModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerModule, imports: [AXSchedulerComponent,\n AXSchedulerDayViewComponent,\n AXSchedulerWeekViewComponent,\n AXSchedulerMonthViewComponent,\n AXSchedulerTimelineDayViewComponent], exports: [AXSchedulerComponent,\n AXSchedulerDayViewComponent,\n AXSchedulerWeekViewComponent,\n AXSchedulerMonthViewComponent,\n AXSchedulerTimelineDayViewComponent] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerModule, imports: [COMPONENT] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [...COMPONENT],\n exports: [...COMPONENT],\n providers: [],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NyYy9saWIvc2NoZWR1bGVyLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzdGLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQ2pILE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDOztBQUUxRixNQUFNLFNBQVMsR0FBRztJQUNoQixvQkFBb0I7SUFDcEIsMkJBQTJCO0lBQzNCLDRCQUE0QjtJQUM1Qiw2QkFBNkI7SUFDN0IsbUNBQW1DO0NBQ3BDLENBQUM7QUFPRixNQUFNLE9BQU8saUJBQWlCOzhHQUFqQixpQkFBaUI7K0dBQWpCLGlCQUFpQixZQVo1QixvQkFBb0I7WUFDcEIsMkJBQTJCO1lBQzNCLDRCQUE0QjtZQUM1Qiw2QkFBNkI7WUFDN0IsbUNBQW1DLGFBSm5DLG9CQUFvQjtZQUNwQiwyQkFBMkI7WUFDM0IsNEJBQTRCO1lBQzVCLDZCQUE2QjtZQUM3QixtQ0FBbUM7K0dBUXhCLGlCQUFpQixZQUpmLFNBQVM7OzJGQUlYLGlCQUFpQjtrQkFMN0IsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQztvQkFDdkIsT0FBTyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUM7b0JBQ3ZCLFNBQVMsRUFBRSxFQUFFO2lCQUNkIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYU2NoZWR1bGVyQ29tcG9uZW50IH0gZnJvbSAnLi9zY2hlZHVsZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEFYU2NoZWR1bGVyRGF5Vmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3MvZGF5L3NjaGVkdWxlci1kYXktdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJNb250aFZpZXdDb21wb25lbnQgfSBmcm9tICcuL3ZpZXdzL21vbnRoL3NjaGVkdWxlci1tb250aC12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWFNjaGVkdWxlclRpbWVsaW5lRGF5Vmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3MvdGltZWxpbmUtZGF5L3NjaGVkdWxlci10aW1lbGluZS1kYXktdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJXZWVrVmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3Mvd2Vlay9zY2hlZHVsZXItd2Vlay12aWV3LmNvbXBvbmVudCc7XG5cbmNvbnN0IENPTVBPTkVOVCA9IFtcbiAgQVhTY2hlZHVsZXJDb21wb25lbnQsXG4gIEFYU2NoZWR1bGVyRGF5Vmlld0NvbXBvbmVudCxcbiAgQVhTY2hlZHVsZXJXZWVrVmlld0NvbXBvbmVudCxcbiAgQVhTY2hlZHVsZXJNb250aFZpZXdDb21wb25lbnQsXG4gIEFYU2NoZWR1bGVyVGltZWxpbmVEYXlWaWV3Q29tcG9uZW50LFxuXTtcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogWy4uLkNPTVBPTkVOVF0sXG4gIGV4cG9ydHM6IFsuLi5DT01QT05FTlRdLFxuICBwcm92aWRlcnM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBBWFNjaGVkdWxlck1vZHVsZSB7fVxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNvbXBvbmVudHMtc2NoZWR1bGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9zY2hlZHVsZXIvc3JjL2Fjb3JleC1jb21wb25lbnRzLXNjaGVkdWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}
|
1
|
+
{"version":3,"file":"acorex-components-scheduler.mjs","sources":["../tmp-esm2022/scheduler/lib/scheduler.service.js","../tmp-esm2022/scheduler/lib/views/agenda/scheduler-agenda-view.component.js","../tmp-esm2022/scheduler/lib/views/day/scheduler-day-view.component.js","../tmp-esm2022/scheduler/lib/views/month/scheduler-month-view.component.js","../tmp-esm2022/scheduler/lib/views/timeline-day/scheduler-timeline-day-view.component.js","../tmp-esm2022/scheduler/lib/views/timeline-month/scheduler-timeline-month-view.component.js","../tmp-esm2022/scheduler/lib/views/timeline-multi-day/scheduler-timeline-multi-day-view.component.js","../tmp-esm2022/scheduler/lib/views/week/scheduler-week-view.component.js","../tmp-esm2022/scheduler/lib/scheduler.component.js","../tmp-esm2022/scheduler/lib/scheduler.module.js","../tmp-esm2022/scheduler/acorex-components-scheduler.js"],"sourcesContent":["import { AXCalendarService } from '@acorex/core/date-time';\nimport { AXFormatService } from '@acorex/core/format';\nimport { inject, Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class AXSchedulerService {\n constructor() {\n this.formatService = inject(AXFormatService);\n this.calendarService = inject(AXCalendarService);\n this.HOURS_PER_DAY = 24;\n this.MINUTES_PER_HOUR = 60;\n this.BLOCK_DURATION_MINUTES = 30;\n this.MILLISECONDS_PER_MINUTE = 60 * 1000;\n this.MILLISECONDS_PER_DAY = this.HOURS_PER_DAY * this.MINUTES_PER_HOUR * this.MILLISECONDS_PER_MINUTE;\n }\n /**\n * Checks if two appointments overlap in time.\n */\n doAppointmentsOverlap(appointmentA, appointmentB) {\n if (!appointmentA?.startDate || !appointmentA.endDate || !appointmentB?.startDate || !appointmentB.endDate) {\n return false;\n }\n const startA = appointmentA.startDate.getTime();\n const endA = appointmentA.endDate.getTime();\n const startB = appointmentB.startDate.getTime();\n const endB = appointmentB.endDate.getTime();\n // Uses strict overlap check (change < / > to <= / >= if touching boundaries count)\n return startA < endB && endA > startB;\n }\n /**\n * Calculates appointment duration in minutes.\n */\n calculateDurationInMinutes(Appointment) {\n if (!Appointment?.startDate || !Appointment.endDate)\n return 0;\n const durationMillis = Appointment.endDate.getTime() - Appointment.startDate.getTime();\n return Math.max(0, durationMillis / this.MILLISECONDS_PER_MINUTE);\n }\n /**\n * Calculates appointment duration in blocks (default 30 min).\n */\n calculateDurationInBlocks(appointment) {\n const durationMinutes = this.calculateDurationInMinutes(appointment);\n return Math.ceil(durationMinutes / this.BLOCK_DURATION_MINUTES);\n }\n /**\n * Gets the day index (relative to view start) and block index (relative to start hour)\n * for a given date time within the view context. Returns null if outside view.\n */\n getBlockIdentifier(dateTime, viewStartDate, startHour, endHour, // Exclusive end hour\n viewTotalDays = 1) {\n if (!viewStartDate || !dateTime || typeof startHour !== 'number' || typeof endHour !== 'number') {\n return null;\n }\n const viewEndDate = viewStartDate.add('day', viewTotalDays); // Calculate exclusive end date\n // Check if dateTime is within the view's date and time range\n if (dateTime.compare(viewStartDate, 'day') < 0 ||\n dateTime.compare(viewEndDate, 'day') >= 0 || // Check against exclusive end date\n dateTime.hour < startHour ||\n dateTime.hour >= endHour // Check against exclusive end hour\n ) {\n return null;\n }\n // Calculate day index relative to view start\n const dayIndex = Math.floor((dateTime.date.getTime() - viewStartDate.date.getTime()) / this.MILLISECONDS_PER_DAY);\n // Ensure dayIndex is valid for the view duration\n if (dayIndex < 0 || dayIndex >= viewTotalDays) {\n return null;\n }\n const minutesIntoDay = dateTime.hour * this.MINUTES_PER_HOUR + dateTime.minute;\n const minutesIntoViewHours = minutesIntoDay - startHour * this.MINUTES_PER_HOUR;\n // This check should be redundant due to initial hour check, but safe to keep\n if (minutesIntoViewHours < 0)\n return null;\n const blockIndex = Math.floor(minutesIntoViewHours / this.BLOCK_DURATION_MINUTES);\n return { dayIndex, blockIndex };\n }\n /**\n * Groups appointments by the blocks they are ACTIVE in for a given view.\n * @param viewTotalDays - Number of days in the current view (1 for Day, 7 for Week, etc.)\n */\n calculateActiveAppointmentsInBlock(singleDayAppointments, viewStartDate, startHour, endHour, viewTotalDays) {\n const blocks = {};\n if (!viewStartDate || typeof startHour !== 'number' || typeof endHour !== 'number' || viewTotalDays <= 0) {\n return blocks;\n }\n const viewEndDate = viewStartDate.add('day', viewTotalDays); // Exclusive end date\n // Calculate total blocks based on consistent block duration\n const totalBlocksPerDay = Math.max(0, (endHour - startHour) * (this.MINUTES_PER_HOUR / this.BLOCK_DURATION_MINUTES));\n singleDayAppointments.forEach((appointment) => {\n if (!appointment.startDate || !appointment.endDate || !appointment.id)\n return;\n const appointmentEndDate = this.calendarService.create(appointment.endDate);\n const appointmentStartDate = this.calendarService.create(appointment.startDate);\n // Clamp appointment start/end times to the view boundaries (days and hours)\n let effectiveStart = appointmentStartDate.compare(viewStartDate) < 0 ? viewStartDate : appointmentStartDate;\n if (effectiveStart.hour < startHour)\n effectiveStart = effectiveStart.set('hour', startHour).startOf('hour');\n let effectiveEnd = appointmentEndDate.compare(viewEndDate) >= 0 ? viewEndDate : appointmentEndDate;\n if (effectiveEnd.hour >= endHour) {\n const endDayBase = effectiveEnd.compare(viewEndDate) >= 0 ? viewEndDate.add('day', -1) : effectiveEnd;\n effectiveEnd = endDayBase.set('hour', endHour).startOf('hour');\n }\n // Get start block info using the specified viewTotalDays\n const startInfo = this.getBlockIdentifier(effectiveStart, viewStartDate, startHour, endHour, viewTotalDays);\n if (!startInfo)\n return; // Appointment starts completely outside view\n // Get end block info (last block occupied) using the specified viewTotalDays\n const timeBeforeEnd = effectiveEnd.add('minute', -1);\n const endInfo = this.getBlockIdentifier(timeBeforeEnd, viewStartDate, startHour, endHour, viewTotalDays);\n // If endInfo is null, it means the appointment ends before the viewable part starts,\n // or exactly at the start, so it occupies no blocks. Handle this case.\n if (!endInfo ||\n endInfo.dayIndex < startInfo.dayIndex ||\n (endInfo.dayIndex === startInfo.dayIndex && endInfo.blockIndex < startInfo.blockIndex)) {\n return; // Appointment effectively has no duration within the viewable blocks\n }\n // Iterate through the days and blocks the appointment spans within the view\n for (let dIdx = startInfo.dayIndex; dIdx <= endInfo.dayIndex; dIdx++) {\n // Clamp day index just in case (should be handled by getBlockIdentifier checks)\n if (dIdx < 0 || dIdx >= viewTotalDays)\n continue;\n const startBlock = dIdx === startInfo.dayIndex ? startInfo.blockIndex : 0;\n // Make sure endBlock doesn't exceed the calculated totalBlocksPerDay\n const endBlock = dIdx === endInfo.dayIndex ? endInfo.blockIndex : totalBlocksPerDay - 1;\n if (!blocks[dIdx])\n blocks[dIdx] = {};\n for (let bIdx = startBlock; bIdx <= endBlock; bIdx++) {\n // Final check for block index validity\n if (bIdx >= 0 && bIdx < totalBlocksPerDay) {\n if (!blocks[dIdx][bIdx])\n blocks[dIdx][bIdx] = [];\n // Avoid duplicates if the same appointment is processed multiple times (shouldn't happen with outer loop)\n if (!blocks[dIdx][bIdx].some((e) => e.id === appointment.id)) {\n blocks[dIdx][bIdx].push(appointment);\n }\n }\n }\n }\n });\n return blocks;\n }\n /**\n * Calculates max concurrency and effective total columns for Day View appointments.\n */\n calculateDayViewConcurrencyInfo(singleDayAppointments, // These are segments for the current day\n viewStartDate, startHour, endHour) {\n const resultInfo = new Map();\n if (singleDayAppointments.length === 0)\n return resultInfo;\n const activeAppointmentsMap = this.calculateActiveAppointmentsInBlock(singleDayAppointments, viewStartDate, startHour, endHour, 1);\n const blocks = activeAppointmentsMap[0] ?? {};\n // 1. Calculate initial maxConcurrency for each appointment segment\n const maxConcurrencyMap = new Map();\n singleDayAppointments.forEach((segment) => {\n let maxOverlapInSegmentBlocks = 0;\n const segmentStartMinutes = segment.startDate.getHours() * this.MINUTES_PER_HOUR + segment.startDate.getMinutes();\n const segmentEndMinutes = segment.endDate.getHours() * this.MINUTES_PER_HOUR + segment.endDate.getMinutes();\n // Determine blocks this segment occupies relative to view's startHour\n const viewRelativeStartMinutes = Math.max(0, segmentStartMinutes - startHour * this.MINUTES_PER_HOUR);\n const viewRelativeEndMinutes = Math.min((endHour - startHour) * this.MINUTES_PER_HOUR, segmentEndMinutes - startHour * this.MINUTES_PER_HOUR);\n const firstBlockIndex = Math.floor(viewRelativeStartMinutes / this.BLOCK_DURATION_MINUTES);\n const lastBlockIndex = Math.floor((viewRelativeEndMinutes - 1) / this.BLOCK_DURATION_MINUTES); // -1 because end is exclusive for block counting\n for (let blockIdx = firstBlockIndex; blockIdx <= lastBlockIndex; blockIdx++) {\n const appointmentsInBlock = blocks[blockIdx];\n if (appointmentsInBlock) {\n maxOverlapInSegmentBlocks = Math.max(maxOverlapInSegmentBlocks, appointmentsInBlock.length);\n }\n }\n maxConcurrencyMap.set(segment.id, maxOverlapInSegmentBlocks || 1);\n });\n // 2. Iteratively determine effectiveTotalColumns for groups of overlapping appointments\n const initialEffectiveTotalColumns = new Map();\n singleDayAppointments.forEach((segment) => {\n initialEffectiveTotalColumns.set(segment.id, maxConcurrencyMap.get(segment.id) || 1);\n });\n let changed = true;\n while (changed) {\n changed = false;\n singleDayAppointments.forEach((segmentA) => {\n singleDayAppointments.forEach((segmentB) => {\n if (segmentA.id === segmentB.id)\n return;\n if (this.doAppointmentsOverlap(segmentA, segmentB)) {\n const etcA = initialEffectiveTotalColumns.get(segmentA.id) || 1;\n const etcB = initialEffectiveTotalColumns.get(segmentB.id) || 1;\n const maxETC = Math.max(etcA, etcB);\n if (etcA !== maxETC) {\n initialEffectiveTotalColumns.set(segmentA.id, maxETC);\n changed = true;\n }\n if (etcB !== maxETC) {\n initialEffectiveTotalColumns.set(segmentB.id, maxETC);\n changed = true;\n }\n }\n });\n });\n }\n // Populate final result\n singleDayAppointments.forEach((segment) => {\n resultInfo.set(segment.id, {\n maxConcurrency: maxConcurrencyMap.get(segment.id) || 1,\n effectiveTotalColumns: initialEffectiveTotalColumns.get(segment.id) || 1,\n });\n });\n return resultInfo;\n }\n /**\n * Groups appointments by the block they START in for Week View.\n */\n calculateWeekViewAppointmentsByStartBlock(singleDayAppointments, viewStartDate, startHour, endHour) {\n const blocks = {};\n singleDayAppointments.forEach((appointment) => {\n if (!appointment.startDate)\n return;\n const startInfo = this.getBlockIdentifier(this.calendarService.create(appointment.startDate), viewStartDate, startHour, endHour, 7);\n if (startInfo) {\n const { dayIndex, blockIndex } = startInfo;\n if (!blocks[dayIndex])\n blocks[dayIndex] = {};\n if (!blocks[dayIndex][blockIndex])\n blocks[dayIndex][blockIndex] = [];\n blocks[dayIndex][blockIndex].push(appointment);\n }\n });\n return blocks;\n }\n /**\n * Groups appointments by the day(s) they occur on within a given date range.\n * Returns a Map where the key is the date string ('YYYY-MM-DD') and the value is an array of appointments.\n */\n groupAppointmentsByDay(appointments, viewStartDate, // First day visible in the grid\n viewEndDate) {\n const groupedAppointments = new Map();\n if (!appointments || appointments.length === 0 || !viewStartDate || !viewEndDate) {\n return groupedAppointments;\n }\n // Pre-calculate the end date for comparison (exclusive)\n const exclusiveViewEndDate = viewEndDate.add('day', 1);\n appointments.forEach((appointment) => {\n if (!appointment.startDate || !appointment.endDate || !appointment.id)\n return;\n // Determine the effective start and end dates of the appointment clamped by the view range\n const appointmentStart = this.calendarService.create(appointment.startDate);\n const appointmentEnd = this.calendarService.create(appointment.endDate);\n // Skip if appointment ends before the view starts or starts after the view ends\n if (appointmentEnd.compare(viewStartDate, 'day') < 0 ||\n appointmentStart.compare(exclusiveViewEndDate, 'day') >= 0) {\n return;\n }\n // Clamp start date to the view start date\n let currentDay = appointmentStart.compare(viewStartDate, 'day') < 0 ? viewStartDate : appointmentStart.startOf('day');\n // Loop through each day the appointment spans within the view range\n let safeCount = 0; // Prevent infinite loops\n while (currentDay.compare(appointmentEnd, 'day') <= 0 &&\n currentDay.compare(exclusiveViewEndDate, 'day') < 0 &&\n safeCount < 100) {\n const dateString = this.formatService.format(currentDay, 'datetime', { format: 'YYYY-MM-DD' }); // Use a consistent key format\n if (!groupedAppointments.has(dateString)) {\n groupedAppointments.set(dateString, []);\n }\n // Add the appointment if it's not already in the list for that day\n if (!groupedAppointments.get(dateString).some((e) => e.id === appointment.id)) {\n groupedAppointments.get(dateString).push(appointment);\n }\n currentDay = currentDay.add('day', 1);\n safeCount++;\n }\n if (safeCount >= 100) {\n console.warn('Safety break hit in groupAppointmentsByDay loop for appointment:', appointment.id);\n }\n });\n return groupedAppointments;\n }\n getDayOfWeekNumber(dayName) {\n switch (dayName) {\n case 'sunday':\n return 1;\n case 'monday':\n return 2;\n case 'tuesday':\n return 3;\n case 'wednesday':\n return 4;\n case 'thursday':\n return 5;\n case 'friday':\n return 6;\n case 'saturday':\n return 7;\n default:\n console.warn(`Invalid day name: ${dayName}. Defaulting to Sunday (1).`);\n return 1;\n }\n }\n getSlotData(startDate, view) {\n let endDate;\n switch (view) {\n case 'day':\n case 'week':\n endDate = startDate.add('minute', this.BLOCK_DURATION_MINUTES);\n break;\n case 'timeline-day':\n case 'timeline-multi-day':\n endDate = startDate.add('minute', this.BLOCK_DURATION_MINUTES * 2);\n break;\n case 'month':\n case 'agenda':\n case 'timeline-month':\n startDate = startDate.startOf('day');\n endDate = startDate.endOf('day');\n break;\n }\n return { startDate, endDate, view };\n }\n handleEvent(event, eventOutputMap, eventType) {\n const mouseEvent = event.nativeEvent;\n mouseEvent.preventDefault();\n mouseEvent.stopPropagation();\n if (eventType === 'appointment') {\n const appointmentOutputMap = eventOutputMap[eventType];\n const emitter = appointmentOutputMap[mouseEvent.type];\n if (emitter)\n emitter.emit(event);\n }\n if (eventType === 'slot') {\n const slotOutputMap = eventOutputMap[eventType];\n const emitter = slotOutputMap[mouseEvent.type];\n if (emitter)\n emitter.emit(event);\n }\n }\n // --- Timeline Specific Helpers ---\n calculateTimelineLayout(\n // `appt` here will be an AXSchedulerAppointmentSegmentType when called from TimelineDayView\n appt, viewStartHour, // e.g., 8 for 8 AM\n viewEndHour) {\n if (!appt?.startDate ||\n !appt.endDate ||\n typeof viewStartHour !== 'number' ||\n typeof viewEndHour !== 'number' ||\n viewStartHour >= viewEndHour // Basic sanity check\n ) {\n console.warn('calculateTimelineLayout: Invalid input', { appt, viewStartHour, viewEndHour });\n return null;\n }\n const totalViewDurationMinutes = (viewEndHour - viewStartHour) * 60;\n if (totalViewDurationMinutes <= 0)\n return null; // No viewable duration\n // Segment's start and end times (these are already clipped to the day by getClonedAppointmentSegmentOnDay)\n const segmentStart = appt.startDate;\n const segmentEnd = appt.endDate;\n // --- Calculate Start Position (left) ---\n // Effective start of the segment within the view's hours for THIS day\n let effectiveSegmentStartMinutesInDay = segmentStart.getHours() * 60 + segmentStart.getMinutes();\n // Clamp to viewStartHour for calculation if segment starts before viewable hours (shouldn't happen if segmenter worked)\n effectiveSegmentStartMinutesInDay = Math.max(effectiveSegmentStartMinutesInDay, viewStartHour * 60);\n // Clamp to viewEndHour for calculation if segment starts after viewable hours (shouldn't happen)\n effectiveSegmentStartMinutesInDay = Math.min(effectiveSegmentStartMinutesInDay, viewEndHour * 60);\n const minutesFromViewStartToSegmentStart = effectiveSegmentStartMinutesInDay - viewStartHour * 60;\n // If segment effectively starts before the viewable part (after clamping), it means it's not visible or starts at 0%\n if (minutesFromViewStartToSegmentStart < 0 &&\n Math.abs(minutesFromViewStartToSegmentStart) > 1e-6 /*epsilon for float issues*/) {\n // This case should ideally be caught by the segmenter or initial overlap checks.\n // If it happens, treat as starting at 0% but it might mean no visible part.\n }\n const leftPercentage = (Math.max(0, minutesFromViewStartToSegmentStart) / totalViewDurationMinutes) * 100;\n // --- Calculate Duration and Width ---\n // Effective end of the segment within the view's hours for THIS day\n let effectiveSegmentEndMinutesInDay = segmentEnd.getHours() * 60 + segmentEnd.getMinutes();\n if (segmentEnd.getHours() === 0 && segmentEnd.getMinutes() === 0 && segmentEnd.getTime() > segmentStart.getTime()) {\n // If segment ends exactly at midnight (00:00 of next day, meaning it filled up to 24:00 of current day)\n effectiveSegmentEndMinutesInDay = 24 * 60;\n }\n // Clamp to viewEndHour for calculation\n effectiveSegmentEndMinutesInDay = Math.min(effectiveSegmentEndMinutesInDay, viewEndHour * 60);\n // Clamp to viewStartHour for calculation (if segment ends before view starts)\n effectiveSegmentEndMinutesInDay = Math.max(effectiveSegmentEndMinutesInDay, viewStartHour * 60);\n const segmentDurationMinutesInView = Math.max(0, effectiveSegmentEndMinutesInDay - effectiveSegmentStartMinutesInDay);\n if (segmentDurationMinutesInView <= 0) {\n // Segment has no visible duration within the timeline hours\n return null;\n }\n const widthPercentage = (segmentDurationMinutesInView / totalViewDurationMinutes) * 100;\n // Ensure percentages are valid\n if (leftPercentage > 100 ||\n leftPercentage < 0 ||\n widthPercentage <= 0 ||\n widthPercentage > 100 ||\n leftPercentage + widthPercentage > 100.0001 /*allow for float errors*/) {\n // This might indicate an issue with date clamping or logic.\n // For now, if it results in an invalid layout, return null.\n // console.warn(\"Timeline layout calculation resulted in out-of-bounds percentages:\",\n // {leftPercentage, widthPercentage, segmentStart, segmentEnd, viewStartHour, viewEndHour});\n // A common case for (left + width > 100) is if an event ends *exactly* at viewEndHour,\n // and viewEndHour itself is the boundary.\n // Let's be a bit tolerant here if width is positive.\n if (widthPercentage <= 0)\n return null;\n }\n return {\n left: `${Math.max(0, Math.min(100, leftPercentage))}%`,\n width: `${Math.max(0, Math.min(100, widthPercentage))}%`,\n };\n }\n /**\n * Calculates the visible segment of a timed appointment on a specific day,\n * constrained by the view's start and end hours.\n * Returns a new appointment-like object representing the segment.\n */\n getClonedAppointmentSegmentOnDay(appointment, // This is the ORIGINAL appointment\n day, viewStartHour, viewEndHour, isFullDayCellContext = false) {\n if (!appointment || !appointment.startDate || !appointment.endDate) {\n return null;\n }\n const appointmentStartDate = this.calendarService.create(appointment.startDate);\n const appointmentEndDate = this.calendarService.create(appointment.endDate);\n if (appointment.allDay) {\n const dayStartOf = day.clone().startOf('day');\n if (appointmentStartDate.startOf('day').equal(dayStartOf, 'day')) {\n return {\n ...appointment,\n startDate: dayStartOf.date,\n endDate: dayStartOf.clone().add('day', 1).startOf('day').date,\n allDay: true,\n originalStartDate: appointmentStartDate.date,\n originalEndDate: appointmentEndDate.date,\n isContinuationFromPreviousDay: false,\n isContinuationToNextDay: appointmentEndDate.startOf('day').compare(dayStartOf, 'day') > 0,\n originalAppointmentRef: appointment,\n };\n }\n else if (appointmentStartDate.startOf('day').compare(dayStartOf, 'day') < 0 &&\n appointmentEndDate.startOf('day').compare(dayStartOf, 'day') >= 0) {\n return {\n ...appointment,\n startDate: dayStartOf.date,\n endDate: dayStartOf.clone().add('day', 1).startOf('day').date,\n allDay: true,\n originalStartDate: appointmentStartDate.date,\n originalEndDate: appointmentEndDate.date,\n isContinuationFromPreviousDay: true,\n isContinuationToNextDay: appointmentEndDate.startOf('day').compare(dayStartOf, 'day') > 0,\n originalAppointmentRef: appointment,\n };\n }\n else {\n return null;\n }\n }\n const dayStartBoundary = isFullDayCellContext\n ? day.clone().startOf('day')\n : day.clone().set('hour', viewStartHour).startOf('hour');\n const dayEndBoundary = isFullDayCellContext\n ? day.clone().add('day', 1).startOf('day')\n : viewEndHour === 24 || (viewEndHour === 0 && viewStartHour === 0)\n ? day.clone().add('day', 1).startOf('day')\n : day.clone().set('hour', viewEndHour).startOf('hour');\n if (appointmentEndDate.compare(dayStartBoundary, 'second') <= 0 ||\n appointmentStartDate.compare(dayEndBoundary, 'second') >= 0) {\n return null;\n }\n const segmentStartDate = appointmentStartDate.compare(dayStartBoundary, 'second') > 0 ? appointmentStartDate : dayStartBoundary;\n const segmentEndDate = appointmentEndDate.compare(dayEndBoundary, 'second') < 0 ? appointmentEndDate : dayEndBoundary;\n if (segmentStartDate.compare(segmentEndDate, 'second') >= 0) {\n return null;\n }\n const isContinuationFromPreviousDay = appointmentStartDate.compare(segmentStartDate, 'second') < 0;\n const isContinuationToNextDay = appointmentEndDate.compare(segmentEndDate, 'second') > 0;\n const duration = appointmentStartDate.duration(appointmentEndDate);\n return {\n ...appointment,\n startDate: segmentStartDate.date,\n endDate: segmentEndDate.date,\n allDay: appointment.allDay || duration.total.miliseconds >= 24 * 60 * 60 * 1000 - 1,\n originalStartDate: appointmentStartDate.date,\n originalEndDate: appointmentEndDate.date,\n isContinuationFromPreviousDay,\n isContinuationToNextDay,\n originalAppointmentRef: appointment,\n };\n }\n getOriginalAppointment(item) {\n const segment = item;\n if (segment.originalAppointmentRef) {\n return segment.originalAppointmentRef;\n }\n return item;\n }\n isHoliday(date) {\n return this.calendarService.holidays.some((d) => date.equal(d.date, 'day'));\n }\n isWeekend(date, calendar) {\n const weekend = this.calendarService.resolveCalendar(calendar).weekend;\n return weekend.includes(date.dayOfWeek - 1);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root', // Provide service application-wide\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3NjaGVkdWxlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBYyxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFlbkQsTUFBTSxPQUFPLGtCQUFrQjtJQUgvQjtRQUlVLGtCQUFhLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3hDLG9CQUFlLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFM0Msa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFDbkIscUJBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLDJCQUFzQixHQUFHLEVBQUUsQ0FBQztRQUM1Qiw0QkFBdUIsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ3BDLHlCQUFvQixHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztLQXNtQjNHO0lBcG1CQzs7T0FFRztJQUNILHFCQUFxQixDQUFDLFlBQW9DLEVBQUUsWUFBb0M7UUFDOUYsSUFBSSxDQUFDLFlBQVksRUFBRSxTQUFTLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLFNBQVMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMzRyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2hELE1BQU0sSUFB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SSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUNELFNBQVMsQ0FBQyxJQUFnQixFQUFFLFFBQWdCO1FBQzFDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUN2RSxPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM5QyxDQUFDOzhHQTdtQlUsa0JBQWtCO2tIQUFsQixrQkFBa0IsY0FGakIsTUFBTTs7MkZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNLEVBQUUsbUNBQW1DO2lCQUN4RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYQ2FsZW5kYXJTZXJ2aWNlLCBBWERhdGVUaW1lIH0gZnJvbSAnQGFjb3JleC9jb3JlL2RhdGUtdGltZSc7XG5pbXBvcnQgeyBBWEZvcm1hdFNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvZm9ybWF0JztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQVhEYXlPZldlZWtOYW1lLFxuICBBWFNjaGVkdWxlckFjdGl2ZUFwcG9pbnRtZW50c0luQmxvY2ssXG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnQsXG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRzQnlTdGFydEJsb2NrLFxuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCxcbiAgQVhTY2hlZHVsZXJCbG9ja0lkZW50aWZpZXIsXG4gIEFYU2NoZWR1bGVyVmlldyxcbn0gZnJvbSAnLi9zY2hlZHVsZXIuY2xhc3MnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQsIEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQgfSBmcm9tICcuL3NjaGVkdWxlci5jb21wb25lbnQnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290JywgLy8gUHJvdmlkZSBzZXJ2aWNlIGFwcGxpY2F0aW9uLXdpZGVcbn0pXG5leHBvcnQgY2xhc3MgQVhTY2hlZHVsZXJTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBmb3JtYXRTZXJ2aWNlID0gaW5qZWN0KEFYRm9ybWF0U2VydmljZSk7XG4gIHByaXZhdGUgY2FsZW5kYXJTZXJ2aWNlID0gaW5qZWN0KEFYQ2FsZW5kYXJTZXJ2aWNlKTtcblxuICByZWFkb25seSBIT1VSU19QRVJfREFZID0gMjQ7XG4gIHJlYWRvbmx5IE1JTlVURVNfUEVSX0hPVVIgPSA2MDtcbiAgcmVhZG9ubHkgQkxPQ0tfRFVSQVRJT05fTUlOVVRFUyA9IDMwO1xuICByZWFkb25seSBNSUxMSVNFQ09ORFNfUEVSX01JTlVURSA9IDYwICogMTAwMDtcbiAgcmVhZG9ubHkgTUlMTElTRUNPTkRTX1BFUl9EQVkgPSB0aGlzLkhPVVJTX1BFUl9EQVkgKiB0aGlzLk1JTlVURVNfUEVSX0hPVVIgKiB0aGlzLk1JTExJU0VDT05EU19QRVJfTUlOVVRFO1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdHdvIGFwcG9pbnRtZW50cyBvdmVybGFwIGluIHRpbWUuXG4gICAqL1xuICBkb0FwcG9pbnRtZW50c092ZXJsYXAoYXBwb2ludG1lbnRBOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50LCBhcHBvaW50bWVudEI6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQpOiBib29sZWFuIHtcbiAgICBpZiAoIWFwcG9pbnRtZW50QT8uc3RhcnREYXRlIHx8ICFhcHBvaW50bWVudEEuZW5kRGF0ZSB8fCAhYXBwb2ludG1lbnRCPy5zdGFydERhdGUgfHwgIWFwcG9pbnRtZW50Qi5lbmREYXRlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0QSA9IGFwcG9pbnRtZW50QS5zdGFydERhdGUuZ2V0VGltZSgpO1xuICAgIGNvbnN0IGVuZEEgPSBhcHBvaW50bWVudEEuZW5kRGF0ZS5nZXRUaW1lKCk7XG4gICAgY29uc3Qgc3RhcnRCID0gYXBwb2ludG1lbnRCLnN0YXJ0RGF0ZS5nZXRUaW1lKCk7XG4gICAgY29uc3QgZW5kQiA9IGFwcG9pbnRtZW50Qi5lbmREYXRlLmdldFRpbWUoKTtcbiAgICAvLyBVc2VzIHN0cmljdCBvdmVybGFwIGNoZWNrIChjaGFuZ2UgPCAvID4gdG8gPD0gLyA+PSBpZiB0b3VjaGluZyBib3VuZGFyaWVzIGNvdW50KVxuICAgIHJldHVybiBzdGFydEEgPCBlbmRCICYmIGVuZEEgPiBzdGFydEI7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBhcHBvaW50bWVudCBkdXJhdGlvbiBpbiBtaW51dGVzLlxuICAgKi9cbiAgY2FsY3VsYXRlRHVyYXRpb25Jbk1pbnV0ZXMoQXBwb2ludG1lbnQ6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQpOiBudW1iZXIge1xuICAgIGlmICghQXBwb2ludG1lbnQ/LnN0YXJ0RGF0ZSB8fCAhQXBwb2ludG1lbnQuZW5kRGF0ZSkgcmV0dXJuIDA7XG4gICAgY29uc3QgZHVyYXRpb25NaWxsaXMgPSBBcHBvaW50bWVudC5lbmREYXRlLmdldFRpbWUoKSAtIEFwcG9pbnRtZW50LnN0YXJ0RGF0ZS5nZXRUaW1lKCk7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIGR1cmF0aW9uTWlsbGlzIC8gdGhpcy5NSUxMSVNFQ09ORFNfUEVSX01JTlVURSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBhcHBvaW50bWVudCBkdXJhdGlvbiBpbiBibG9ja3MgKGRlZmF1bHQgMzAgbWluKS5cbiAgICovXG4gIGNhbGN1bGF0ZUR1cmF0aW9uSW5CbG9ja3MoYXBwb2ludG1lbnQ6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQpOiBudW1iZXIge1xuICAgIGNvbnN0IGR1cmF0aW9uTWludXRlcyA9IHRoaXMuY2FsY3VsYXRlRHVyYXRpb25Jbk1pbnV0ZXMoYXBwb2ludG1lbnQpO1xuICAgIHJldHVybiBNYXRoLmNlaWwoZHVyYXRpb25NaW51dGVzIC8gdGhpcy5CTE9DS19EVVJBVElPTl9NSU5VVEVTKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBkYXkgaW5kZXggKHJlbGF0aXZlIHRvIHZpZXcgc3RhcnQpIGFuZCBibG9jayBpbmRleCAocmVsYXRpdmUgdG8gc3RhcnQgaG91cilcbiAgICogZm9yIGEgZ2l2ZW4gZGF0ZSB0aW1lIHdpdGhpbiB0aGUgdmlldyBjb250ZXh0LiBSZXR1cm5zIG51bGwgaWYgb3V0c2lkZSB2aWV3LlxuICAgKi9cbiAgZ2V0QmxvY2tJZGVudGlmaWVyKFxuICAgIGRhdGVUaW1lOiBBWERhdGVUaW1lLFxuICAgIHZpZXdTdGFydERhdGU6IEFYRGF0ZVRpbWUsXG4gICAgc3RhcnRIb3VyOiBudW1iZXIsXG4gICAgZW5kSG91cjogbnVtYmVyLCAvLyBFeGNsdXNpdmUgZW5kIGhvdXJcbiAgICB2aWV3VG90YWxEYXlzID0gMSwgLy8gRGVmYXVsdCB0byAxIGZvciBkYXkgdmlld1xuICApOiBBWFNjaGVkdWxlckJsb2NrSWRlbnRpZmllciB8IG51bGwge1xuICAgIGlmICghdmlld1N0YXJ0RGF0ZSB8fCAhZGF0ZVRpbWUgfHwgdHlwZW9mIHN0YXJ0SG91ciAhPT0gJ251bWJlcicgfHwgdHlwZW9mIGVuZEhvdXIgIT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qgdmlld0VuZERhdGUgPSB2aWV3U3RhcnREYXRlLmFkZCgnZGF5Jywgdmlld1RvdGFsRGF5cyk7IC8vIENhbGN1bGF0ZSBleGNsdXNpdmUgZW5kIGRhdGVcblxuICAgIC8vIENoZWNrIGlmIGRhdGVUaW1lIGlzIHdpdGhpbiB0aGUgdmlldydzIGRhdGUgYW5kIHRpbWUgcmFuZ2VcbiAgICBpZiAoXG4gICAgICBkYXRlVGltZS5jb21wYXJlKHZpZXdTdGFydERhdGUsICdkYXknKSA8IDAgfHxcbiAgICAgIGRhdGVUaW1lLmNvbXBhcmUodmlld0VuZERhdGUsICdkYXknKSA+PSAwIHx8IC8vIENoZWNrIGFnYWluc3QgZXhjbHVzaXZlIGVuZCBkYXRlXG4gICAgICBkYXRlVGltZS5ob3VyIDwgc3RhcnRIb3VyIHx8XG4gICAgICBkYXRlVGltZS5ob3VyID49IGVuZEhvdXIgLy8gQ2hlY2sgYWdhaW5zdCBleGNsdXNpdmUgZW5kIGhvdXJcbiAgICApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIENhbGN1bGF0ZSBkYXkgaW5kZXggcmVsYXRpdmUgdG8gdmlldyBzdGFydFxuICAgIGNvbnN0IGRheUluZGV4ID0gTWF0aC5mbG9vcigoZGF0ZVRpbWUuZGF0ZS5nZXRUaW1lKCkgLSB2aWV3U3RhcnREYXRlLmRhdGUuZ2V0VGltZSgpKSAvIHRoaXMuTUlMTElTRUNPTkRTX1BFUl9EQVkpO1xuXG4gICAgLy8gRW5zdXJlIGRheUluZGV4IGlzIHZhbGlkIGZvciB0aGUgdmlldyBkdXJhdGlvblxuICAgIGlmIChkYXlJbmRleCA8IDAgfHwgZGF5SW5kZXggPj0gdmlld1RvdGFsRGF5cykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgbWludXRlc0ludG9EYXkgPSBkYXRlVGltZS5ob3VyICogdGhpcy5NSU5VVEVTX1BFUl9IT1VSICsgZGF0ZVRpbWUubWludXRlO1xuICAgIGNvbnN0IG1pbnV0ZXNJbnRvVmlld0hvdXJzID0gbWludXRlc0ludG9EYXkgLSBzdGFydEhvdXIgKiB0aGlzLk1JTlVURVNfUEVSX0hPVVI7XG5cbiAgICAvLyBUaGlzIGNoZWNrIHNob3VsZCBiZSByZWR1bmRhbnQgZHVlIHRvIGluaXRpYWwgaG91ciBjaGVjaywgYnV0IHNhZmUgdG8ga2VlcFxuICAgIGlmIChtaW51dGVzSW50b1ZpZXdIb3VycyA8IDApIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgYmxvY2tJbmRleCA9IE1hdGguZmxvb3IobWludXRlc0ludG9WaWV3SG91cnMgLyB0aGlzLkJMT0NLX0RVUkFUSU9OX01JTlVURVMpO1xuXG4gICAgcmV0dXJuIHsgZGF5SW5kZXgsIGJsb2NrSW5kZXggfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcm91cHMgYXBwb2ludG1lbnRzIGJ5IHRoZSBibG9ja3MgdGhleSBhcmUgQUNUSVZFIGluIGZvciBhIGdpdmVuIHZpZXcuXG4gICAqIEBwYXJhbSB2aWV3VG90YWxEYXlzIC0gTnVtYmVyIG9mIGRheXMgaW4gdGhlIGN1cnJlbnQgdmlldyAoMSBmb3IgRGF5LCA3IGZvciBXZWVrLCBldGMuKVxuICAgKi9cbiAgY2FsY3VsYXRlQWN0aXZlQXBwb2ludG1lbnRzSW5CbG9jayhcbiAgICBzaW5nbGVEYXlBcHBvaW50bWVudHM6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50W10sXG4gICAgdmlld1N0YXJ0RGF0ZTogQVhEYXRlVGltZSxcbiAgICBzdGFydEhvdXI6IG51bWJlcixcbiAgICBlbmRIb3VyOiBudW1iZXIsXG4gICAgdmlld1RvdGFsRGF5czogbnVtYmVyLCAvLyBOb3cgcmVxdWlyZWRcbiAgKTogQVhTY2hlZHVsZXJBY3RpdmVBcHBvaW50bWVudHNJbkJsb2NrIHtcbiAgICBjb25zdCBibG9ja3M6IEFYU2NoZWR1bGVyQWN0aXZlQXBwb2ludG1lbnRzSW5CbG9jayA9IHt9O1xuICAgIGlmICghdmlld1N0YXJ0RGF0ZSB8fCB0eXBlb2Ygc3RhcnRIb3VyICE9PSAnbnVtYmVyJyB8fCB0eXBlb2YgZW5kSG91ciAhPT0gJ251bWJlcicgfHwgdmlld1RvdGFsRGF5cyA8PSAwKSB7XG4gICAgICByZXR1cm4gYmxvY2tzO1xuICAgIH1cbiAgICBjb25zdCB2aWV3RW5kRGF0ZSA9IHZpZXdTdGFydERhdGUuYWRkKCdkYXknLCB2aWV3VG90YWxEYXlzKTsgLy8gRXhjbHVzaXZlIGVuZCBkYXRlXG4gICAgLy8gQ2FsY3VsYXRlIHRvdGFsIGJsb2NrcyBiYXNlZCBvbiBjb25zaXN0ZW50IGJsb2NrIGR1cmF0aW9uXG4gICAgY29uc3QgdG90YWxCbG9ja3NQZXJEYXkgPSBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICAoZW5kSG91ciAtIHN0YXJ0SG91cikgKiAodGhpcy5NSU5VVEVTX1BFUl9IT1VSIC8gdGhpcy5CTE9DS19EVVJBVElPTl9NSU5VVEVTKSxcbiAgICApO1xuXG4gICAgc2luZ2xlRGF5QXBwb2ludG1lbnRzLmZvckVhY2goKGFwcG9pbnRtZW50KSA9PiB7XG4gICAgICBpZiAoIWFwcG9pbnRtZW50LnN0YXJ0RGF0ZSB8fCAhYXBwb2ludG1lbnQuZW5kRGF0ZSB8fCAhYXBwb2ludG1lbnQuaWQpIHJldHVybjtcblxuICAgICAgY29uc3QgYXBwb2ludG1lbnRFbmREYXRlID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGFwcG9pbnRtZW50LmVuZERhdGUpO1xuICAgICAgY29uc3QgYXBwb2ludG1lbnRTdGFydERhdGUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoYXBwb2ludG1lbnQuc3RhcnREYXRlKTtcblxuICAgICAgLy8gQ2xhbXAgYXBwb2ludG1lbnQgc3RhcnQvZW5kIHRpbWVzIHRvIHRoZSB2aWV3IGJvdW5kYXJpZXMgKGRheXMgYW5kIGhvdXJzKVxuICAgICAgbGV0IGVmZmVjdGl2ZVN0YXJ0ID0gYXBwb2ludG1lbnRTdGFydERhdGUuY29tcGFyZSh2aWV3U3RhcnREYXRlKSA8IDAgPyB2aWV3U3RhcnREYXRlIDogYXBwb2ludG1lbnRTdGFydERhdGU7XG4gICAgICBpZiAoZWZmZWN0aXZlU3RhcnQuaG91ciA8IHN0YXJ0SG91cikgZWZmZWN0aXZlU3RhcnQgPSBlZmZlY3RpdmVTdGFydC5zZXQoJ2hvdXInLCBzdGFydEhvdXIpLnN0YXJ0T2YoJ2hvdXInKTtcblxuICAgICAgbGV0IGVmZmVjdGl2ZUVuZCA9IGFwcG9pbnRtZW50RW5kRGF0ZS5jb21wYXJlKHZpZXdFbmREYXRlKSA+PSAwID8gdmlld0VuZERhdGUgOiBhcHBvaW50bWVudEVuZERhdGU7XG4gICAgICBpZiAoZWZmZWN0aXZlRW5kLmhvdXIgPj0gZW5kSG91cikge1xuICAgICAgICBjb25zdCBlbmREYXlCYXNlID0gZWZmZWN0aXZlRW5kLmNvbXBhcmUodmlld0VuZERhdGUpID49IDAgPyB2aWV3RW5kRGF0ZS5hZGQoJ2RheScsIC0xKSA6IGVmZmVjdGl2ZUVuZDtcbiAgICAgICAgZWZmZWN0aXZlRW5kID0gZW5kRGF5QmFzZS5zZXQoJ2hvdXInLCBlbmRIb3VyKS5zdGFydE9mKCdob3VyJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIEdldCBzdGFydCBibG9jayBpbmZvIHVzaW5nIHRoZSBzcGVjaWZpZWQgdmlld1RvdGFsRGF5c1xuICAgICAgY29uc3Qgc3RhcnRJbmZvID0gdGhpcy5nZXRCbG9ja0lkZW50aWZpZXIoZWZmZWN0aXZlU3RhcnQsIHZpZXdTdGFydERhdGUsIHN0YXJ0SG91ciwgZW5kSG91ciwgdmlld1RvdGFsRGF5cyk7XG4gICAgICBpZiAoIXN0YXJ0SW5mbykgcmV0dXJuOyAvLyBBcHBvaW50bWVudCBzdGFydHMgY29tcGxldGVseSBvdXRzaWRlIHZpZXdcblxuICAgICAgLy8gR2V0IGVuZCBibG9jayBpbmZvIChsYXN0IGJsb2NrIG9jY3VwaWVkKSB1c2luZyB0aGUgc3BlY2lmaWVkIHZpZXdUb3RhbERheXNcbiAgICAgIGNvbnN0IHRpbWVCZWZvcmVFbmQgPSBlZmZlY3RpdmVFbmQuYWRkKCdtaW51dGUnLCAtMSk7XG4gICAgICBjb25zdCBlbmRJbmZvID0gdGhpcy5nZXRCbG9ja0lkZW50aWZpZXIodGltZUJlZm9yZUVuZCwgdmlld1N0YXJ0RGF0ZSwgc3RhcnRIb3VyLCBlbmRIb3VyLCB2aWV3VG90YWxEYXlzKTtcbiAgICAgIC8vIElmIGVuZEluZm8gaXMgbnVsbCwgaXQgbWVhbnMgdGhlIGFwcG9pbnRtZW50IGVuZHMgYmVmb3JlIHRoZSB2aWV3YWJsZSBwYXJ0IHN0YXJ0cyxcbiAgICAgIC8vIG9yIGV4YWN0bHkgYXQgdGhlIHN0YXJ0LCBzbyBpdCBvY2N1cGllcyBubyBibG9ja3MuIEhhbmRsZSB0aGlzIGNhc2UuXG4gICAgICBpZiAoXG4gICAgICAgICFlbmRJbmZvIHx8XG4gICAgICAgIGVuZEluZm8uZGF5SW5kZXggPCBzdGFydEluZm8uZGF5SW5kZXggfHxcbiAgICAgICAgKGVuZEluZm8uZGF5SW5kZXggPT09IHN0YXJ0SW5mby5kYXlJbmRleCAmJiBlbmRJbmZvLmJsb2NrSW5kZXggPCBzdGFydEluZm8uYmxvY2tJbmRleClcbiAgICAgICkge1xuICAgICAgICByZXR1cm47IC8vIEFwcG9pbnRtZW50IGVmZmVjdGl2ZWx5IGhhcyBubyBkdXJhdGlvbiB3aXRoaW4gdGhlIHZpZXdhYmxlIGJsb2Nrc1xuICAgICAgfVxuXG4gICAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIGRheXMgYW5kIGJsb2NrcyB0aGUgYXBwb2ludG1lbnQgc3BhbnMgd2l0aGluIHRoZSB2aWV3XG4gICAgICBmb3IgKGxldCBkSWR4ID0gc3RhcnRJbmZvLmRheUluZGV4OyBkSWR4IDw9IGVuZEluZm8uZGF5SW5kZXg7IGRJZHgrKykge1xuICAgICAgICAvLyBDbGFtcCBkYXkgaW5kZXgganVzdCBpbiBjYXNlIChzaG91bGQgYmUgaGFuZGxlZCBieSBnZXRCbG9ja0lkZW50aWZpZXIgY2hlY2tzKVxuICAgICAgICBpZiAoZElkeCA8IDAgfHwgZElkeCA+PSB2aWV3VG90YWxEYXlzKSBjb250aW51ZTtcblxuICAgICAgICBjb25zdCBzdGFydEJsb2NrID0gZElkeCA9PT0gc3RhcnRJbmZvLmRheUluZGV4ID8gc3RhcnRJbmZvLmJsb2NrSW5kZXggOiAwO1xuICAgICAgICAvLyBNYWtlIHN1cmUgZW5kQmxvY2sgZG9lc24ndCBleGNlZWQgdGhlIGNhbGN1bGF0ZWQgdG90YWxCbG9ja3NQZXJEYXlcbiAgICAgICAgY29uc3QgZW5kQmxvY2sgPSBkSWR4ID09PSBlbmRJbmZvLmRheUluZGV4ID8gZW5kSW5mby5ibG9ja0luZGV4IDogdG90YWxCbG9ja3NQZXJEYXkgLSAxO1xuXG4gICAgICAgIGlmICghYmxvY2tzW2RJZHhdKSBibG9ja3NbZElkeF0gPSB7fTtcblxuICAgICAgICBmb3IgKGxldCBiSWR4ID0gc3RhcnRCbG9jazsgYklkeCA8PSBlbmRCbG9jazsgYklkeCsrKSB7XG4gICAgICAgICAgLy8gRmluYWwgY2hlY2sgZm9yIGJsb2NrIGluZGV4IHZhbGlkaXR5XG4gICAgICAgICAgaWYgKGJJZHggPj0gMCAmJiBiSWR4IDwgdG90YWxCbG9ja3NQZXJEYXkpIHtcbiAgICAgICAgICAgIGlmICghYmxvY2tzW2RJZHhdW2JJZHhdKSBibG9ja3NbZElkeF1bYklkeF0gPSBbXTtcbiAgICAgICAgICAgIC8vIEF2b2lkIGR1cGxpY2F0ZXMgaWYgdGhlIHNhbWUgYXBwb2ludG1lbnQgaXMgcHJvY2Vzc2VkIG11bHRpcGxlIHRpbWVzIChzaG91bGRuJ3QgaGFwcGVuIHdpdGggb3V0ZXIgbG9vcClcbiAgICAgICAgICAgIGlmICghYmxvY2tzW2RJZHhdW2JJZHhdLnNvbWUoKGUpID0+IGUuaWQgPT09IGFwcG9pbnRtZW50LmlkKSkge1xuICAgICAgICAgICAgICBibG9ja3NbZElkeF1bYklkeF0ucHVzaChhcHBvaW50bWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGJsb2NrcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIG1heCBjb25jdXJyZW5jeSBhbmQgZWZmZWN0aXZlIHRvdGFsIGNvbHVtbnMgZm9yIERheSBWaWV3IGFwcG9pbnRtZW50cy5cbiAgICovXG4gIGNhbGN1bGF0ZURheVZpZXdDb25jdXJyZW5jeUluZm8oXG4gICAgc2luZ2xlRGF5QXBwb2ludG1lbnRzOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdLCAvLyBUaGVzZSBhcmUgc2VnbWVudHMgZm9yIHRoZSBjdXJyZW50IGRheVxuICAgIHZpZXdTdGFydERhdGU6IEFYRGF0ZVRpbWUsXG4gICAgc3RhcnRIb3VyOiBudW1iZXIsXG4gICAgZW5kSG91cjogbnVtYmVyLFxuICApOiBNYXA8YW55LCB7IG1heENvbmN1cnJlbmN5OiBudW1iZXI7IGVmZmVjdGl2ZVRvdGFsQ29sdW1uczogbnVtYmVyIH0+IHtcbiAgICBjb25zdCByZXN1bHRJbmZvID0gbmV3IE1hcDxhbnksIHsgbWF4Q29uY3VycmVuY3k6IG51bWJlcjsgZWZmZWN0aXZlVG90YWxDb2x1bW5zOiBudW1iZXIgfT4oKTtcbiAgICBpZiAoc2luZ2xlRGF5QXBwb2ludG1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHJlc3VsdEluZm87XG5cbiAgICBjb25zdCBhY3RpdmVBcHBvaW50bWVudHNNYXAgPSB0aGlzLmNhbGN1bGF0ZUFjdGl2ZUFwcG9pbnRtZW50c0luQmxvY2soXG4gICAgICBzaW5nbGVEYXlBcHBvaW50bWVudHMsXG4gICAgICB2aWV3U3RhcnREYXRlLFxuICAgICAgc3RhcnRIb3VyLFxuICAgICAgZW5kSG91cixcbiAgICAgIDEsIC8vIERheSB2aWV3XG4gICAgKTtcbiAgICBjb25zdCBibG9ja3MgPSBhY3RpdmVBcHBvaW50bWVudHNNYXBbMF0gPz8ge307XG5cbiAgICAvLyAxLiBDYWxjdWxhdGUgaW5pdGlhbCBtYXhDb25jdXJyZW5jeSBmb3IgZWFjaCBhcHBvaW50bWVudCBzZWdtZW50XG4gICAgY29uc3QgbWF4Q29uY3VycmVuY3lNYXAgPSBuZXcgTWFwPGFueSwgbnVtYmVyPigpO1xuICAgIHNpbmdsZURheUFwcG9pbnRtZW50cy5mb3JFYWNoKChzZWdtZW50KSA9PiB7XG4gICAgICBsZXQgbWF4T3ZlcmxhcEluU2VnbWVudEJsb2NrcyA9IDA7XG4gICAgICBjb25zdCBzZWdtZW50U3RhcnRNaW51dGVzID0gc2VnbWVudC5zdGFydERhdGUuZ2V0SG91cnMoKSAqIHRoaXMuTUlOVVRFU19QRVJfSE9VUiArIHNlZ21lbnQuc3RhcnREYXRlLmdldE1pbnV0ZXMoKTtcbiAgICAgIGNvbnN0IHNlZ21lbnRFbmRNaW51dGVzID0gc2VnbWVudC5lbmREYXRlLmdldEhvdXJzKCkgKiB0aGlzLk1JTlVURVNfUEVSX0hPVVIgKyBzZWdtZW50LmVuZERhdGUuZ2V0TWludXRlcygpO1xuXG4gICAgICAvLyBEZXRlcm1pbmUgYmxvY2tzIHRoaXMgc2VnbWVudCBvY2N1cGllcyByZWxhdGl2ZSB0byB2aWV3J3Mgc3RhcnRIb3VyXG4gICAgICBjb25zdCB2aWV3UmVsYXRpdmVTdGFydE1pbnV0ZXMgPSBNYXRoLm1heCgwLCBzZWdtZW50U3RhcnRNaW51dGVzIC0gc3RhcnRIb3VyICogdGhpcy5NSU5VVEVTX1BFUl9IT1VSKTtcbiAgICAgIGNvbnN0IHZpZXdSZWxhdGl2ZUVuZE1pbnV0ZXMgPSBNYXRoLm1pbihcbiAgICAgICAgKGVuZEhvdXIgLSBzdGFydEhvdXIpICogdGhpcy5NSU5VVEVTX1BFUl9IT1VSLFxuICAgICAgICBzZWdtZW50RW5kTWludXRlcyAtIHN0YXJ0SG91ciAqIHRoaXMuTUlOVVRFU19QRVJfSE9VUixcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGZpcnN0QmxvY2tJbmRleCA9IE1hdGguZmxvb3Iodmlld1JlbGF0aXZlU3RhcnRNaW51dGVzIC8gdGhpcy5CTE9DS19EVVJBVElPTl9NSU5VVEVTKTtcbiAgICAgIGNvbnN0IGxhc3RCbG9ja0luZGV4ID0gTWF0aC5mbG9vcigodmlld1JlbGF0aXZlRW5kTWludXRlcyAtIDEpIC8gdGhpcy5CTE9DS19EVVJBVElPTl9NSU5VVEVTKTsgLy8gLTEgYmVjYXVzZSBlbmQgaXMgZXhjbHVzaXZlIGZvciBibG9jayBjb3VudGluZ1xuXG4gICAgICBmb3IgKGxldCBibG9ja0lkeCA9IGZpcnN0QmxvY2tJbmRleDsgYmxvY2tJZHggPD0gbGFzdEJsb2NrSW5kZXg7IGJsb2NrSWR4KyspIHtcbiAgICAgICAgY29uc3QgYXBwb2ludG1lbnRzSW5CbG9jayA9IGJsb2Nrc1tibG9ja0lkeF07XG4gICAgICAgIGlmIChhcHBvaW50bWVudHNJbkJsb2NrKSB7XG4gICAgICAgICAgbWF4T3ZlcmxhcEluU2VnbWVudEJsb2NrcyA9IE1hdGgubWF4KG1heE92ZXJsYXBJblNlZ21lbnRCbG9ja3MsIGFwcG9pbnRtZW50c0luQmxvY2subGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbWF4Q29uY3VycmVuY3lNYXAuc2V0KHNlZ21lbnQuaWQsIG1heE92ZXJsYXBJblNlZ21lbnRCbG9ja3MgfHwgMSk7XG4gICAgfSk7XG5cbiAgICAvLyAyLiBJdGVyYXRpdmVseSBkZXRlcm1pbmUgZWZmZWN0aXZlVG90YWxDb2x1bW5zIGZvciBncm91cHMgb2Ygb3ZlcmxhcHBpbmcgYXBwb2ludG1lbnRzXG4gICAgY29uc3QgaW5pdGlhbEVmZmVjdGl2ZVRvdGFsQ29sdW1ucyA9IG5ldyBNYXA8YW55LCBudW1iZXI+KCk7XG4gICAgc2luZ2xlRGF5QXBwb2ludG1lbnRzLmZvckVhY2goKHNlZ21lbnQpID0+IHtcbiAgICAgIGluaXRpYWxFZmZlY3RpdmVUb3RhbENvbHVtbnMuc2V0KHNlZ21lbnQuaWQsIG1heENvbmN1cnJlbmN5TWFwLmdldChzZWdtZW50LmlkKSB8fCAxKTtcbiAgICB9KTtcblxuICAgIGxldCBjaGFuZ2VkID0gdHJ1ZTtcbiAgICB3aGlsZSAoY2hhbmdlZCkge1xuICAgICAgY2hhbmdlZCA9IGZhbHNlO1xuICAgICAgc2luZ2xlRGF5QXBwb2ludG1lbnRzLmZvckVhY2goKHNlZ21lbnRBKSA9PiB7XG4gICAgICAgIHNpbmdsZURheUFwcG9pbnRtZW50cy5mb3JFYWNoKChzZWdtZW50QikgPT4ge1xuICAgICAgICAgIGlmIChzZWdtZW50QS5pZCA9PT0gc2VnbWVudEIuaWQpIHJldHVybjtcblxuICAgICAgICAgIGlmICh0aGlzLmRvQXBwb2ludG1lbnRzT3ZlcmxhcChzZWdtZW50QSwgc2VnbWVudEIpKSB7XG4gICAgICAgICAgICBjb25zdCBldGNBID0gaW5pdGlhbEVmZmVjdGl2ZVRvdGFsQ29sdW1ucy5nZXQoc2VnbWVudEEuaWQpIHx8IDE7XG4gICAgICAgICAgICBjb25zdCBldGNCID0gaW5pdGlhbEVmZmVjdGl2ZVRvdGFsQ29sdW1ucy5nZXQoc2VnbWVudEIuaWQpIHx8IDE7XG4gICAgICAgICAgICBjb25zdCBtYXhFVEMgPSBNYXRoLm1heChldGNBLCBldGNCKTtcblxuICAgICAgICAgICAgaWYgKGV0Y0EgIT09IG1heEVUQykge1xuICAgICAgICAgICAgICBpbml0aWFsRWZmZWN0aXZlVG90YWxDb2x1bW5zLnNldChzZWdtZW50QS5pZCwgbWF4RVRDKTtcbiAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXRjQiAhPT0gbWF4RVRDKSB7XG4gICAgICAgICAgICAgIGluaXRpYWxFZmZlY3RpdmVUb3RhbENvbHVtbnMuc2V0KHNlZ21lbnRCLmlkLCBtYXhFVEMpO1xuICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gUG9wdWxhdGUgZmluYWwgcmVzdWx0XG4gICAgc2luZ2xlRGF5QXBwb2ludG1lbnRzLmZvckVhY2goKHNlZ21lbnQpID0+IHtcbiAgICAgIHJlc3VsdEluZm8uc2V0KHNlZ21lbnQuaWQsIHtcbiAgICAgICAgbWF4Q29uY3VycmVuY3k6IG1heENvbmN1cnJlbmN5TWFwLmdldChzZWdtZW50LmlkKSB8fCAxLFxuICAgICAgICBlZmZlY3RpdmVUb3RhbENvbHVtbnM6IGluaXRpYWxFZmZlY3RpdmVUb3RhbENvbHVtbnMuZ2V0KHNlZ21lbnQuaWQpIHx8IDEsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHRJbmZvO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyb3VwcyBhcHBvaW50bWVudHMgYnkgdGhlIGJsb2NrIHRoZXkgU1RBUlQgaW4gZm9yIFdlZWsgVmlldy5cbiAgICovXG4gIGNhbGN1bGF0ZVdlZWtWaWV3QXBwb2ludG1lbnRzQnlTdGFydEJsb2NrKFxuICAgIHNpbmdsZURheUFwcG9pbnRtZW50czogQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXSxcbiAgICB2aWV3U3RhcnREYXRlOiBBWERhdGVUaW1lLFxuICAgIHN0YXJ0SG91cjogbnVtYmVyLFxuICAgIGVuZEhvdXI6IG51bWJlcixcbiAgKTogQVhTY2hlZHVsZXJBcHBvaW50bWVudHNCeVN0YXJ0QmxvY2sge1xuICAgIGNvbnN0IGJsb2NrczogQVhTY2hlZHVsZXJBcHBvaW50bWVudHNCeVN0YXJ0QmxvY2sgPSB7fTtcbiAgICBzaW5nbGVEYXlBcHBvaW50bWVudHMuZm9yRWFjaCgoYXBwb2ludG1lbnQpID0+IHtcbiAgICAgIGlmICghYXBwb2ludG1lbnQuc3RhcnREYXRlKSByZXR1cm47XG4gICAgICBjb25zdCBzdGFydEluZm8gPSB0aGlzLmdldEJsb2NrSWRlbnRpZmllcihcbiAgICAgICAgdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGFwcG9pbnRtZW50LnN0YXJ0RGF0ZSksXG4gICAgICAgIHZpZXdTdGFydERhdGUsXG4gICAgICAgIHN0YXJ0SG91cixcbiAgICAgICAgZW5kSG91cixcbiAgICAgICAgNyxcbiAgICAgICk7XG4gICAgICBpZiAoc3RhcnRJbmZvKSB7XG4gICAgICAgIGNvbnN0IHsgZGF5SW5kZXgsIGJsb2NrSW5kZXggfSA9IHN0YXJ0SW5mbztcbiAgICAgICAgaWYgKCFibG9ja3NbZGF5SW5kZXhdKSBibG9ja3NbZGF5SW5kZXhdID0ge307XG4gICAgICAgIGlmICghYmxvY2tzW2RheUluZGV4XVtibG9ja0luZGV4XSkgYmxvY2tzW2RheUluZGV4XVtibG9ja0luZGV4XSA9IFtdO1xuICAgICAgICBibG9ja3NbZGF5SW5kZXhdW2Jsb2NrSW5kZXhdLnB1c2goYXBwb2ludG1lbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBibG9ja3M7XG4gIH1cblxuICAvKipcbiAgICogR3JvdXBzIGFwcG9pbnRtZW50cyBieSB0aGUgZGF5KHMpIHRoZXkgb2NjdXIgb24gd2l0aGluIGEgZ2l2ZW4gZGF0ZSByYW5nZS5cbiAgICogUmV0dXJucyBhIE1hcCB3aGVyZSB0aGUga2V5IGlzIHRoZSBkYXRlIHN0cmluZyAoJ1lZWVktTU0tREQnKSBhbmQgdGhlIHZhbHVlIGlzIGFuIGFycmF5IG9mIGFwcG9pbnRtZW50cy5cbiAgICovXG4gIGdyb3VwQXBwb2ludG1lbnRzQnlEYXkoXG4gICAgYXBwb2ludG1lbnRzOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50W10sXG4gICAgdmlld1N0YXJ0RGF0ZTogQVhEYXRlVGltZSwgLy8gRmlyc3QgZGF5IHZpc2libGUgaW4gdGhlIGdyaWRcbiAgICB2aWV3RW5kRGF0ZTogQVhEYXRlVGltZSwgLy8gTGFzdCBkYXkgdmlzaWJsZSBpbiB0aGUgZ3JpZFxuICApOiBNYXA8c3RyaW5nLCBBWFNjaGVkdWxlckFwcG9pbnRtZW50W10+IHtcbiAgICBjb25zdCBncm91cGVkQXBwb2ludG1lbnRzID0gbmV3IE1hcDxzdHJpbmcsIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRbXT4oKTtcbiAgICBpZiAoIWFwcG9pbnRtZW50cyB8fCBhcHBvaW50bWVudHMubGVuZ3RoID09PSAwIHx8ICF2aWV3U3RhcnREYXRlIHx8ICF2aWV3RW5kRGF0ZSkge1xuICAgICAgcmV0dXJuIGdyb3VwZWRBcHBvaW50bWVudHM7XG4gICAgfVxuXG4gICAgLy8gUHJlLWNhbGN1bGF0ZSB0aGUgZW5kIGRhdGUgZm9yIGNvbXBhcmlzb24gKGV4Y2x1c2l2ZSlcbiAgICBjb25zdCBleGNsdXNpdmVWaWV3RW5kRGF0ZSA9IHZpZXdFbmREYXRlLmFkZCgnZGF5JywgMSk7XG5cbiAgICBhcHBvaW50bWVudHMuZm9yRWFjaCgoYXBwb2ludG1lbnQpID0+IHtcbiAgICAgIGlmICghYXBwb2ludG1lbnQuc3RhcnREYXRlIHx8ICFhcHBvaW50bWVudC5lbmREYXRlIHx8ICFhcHBvaW50bWVudC5pZCkgcmV0dXJuO1xuXG4gICAgICAvLyBEZXRlcm1pbmUgdGhlIGVmZmVjdGl2ZSBzdGFydCBhbmQgZW5kIGRhdGVzIG9mIHRoZSBhcHBvaW50bWVudCBjbGFtcGVkIGJ5IHRoZSB2aWV3IHJhbmdlXG4gICAgICBjb25zdCBhcHBvaW50bWVudFN0YXJ0ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGFwcG9pbnRtZW50LnN0YXJ0RGF0ZSk7XG4gICAgICBjb25zdCBhcHBvaW50bWVudEVuZCA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShhcHBvaW50bWVudC5lbmREYXRlKTtcblxuICAgICAgLy8gU2tpcCBpZiBhcHBvaW50bWVudCBlbmRzIGJlZm9yZSB0aGUgdmlldyBzdGFydHMgb3Igc3RhcnRzIGFmdGVyIHRoZSB2aWV3IGVuZHNcbiAgICAgIGlmIChcbiAgICAgICAgYXBwb2ludG1lbnRFbmQuY29tcGFyZSh2aWV3U3RhcnREYXRlLCAnZGF5JykgPCAwIHx8XG4gICAgICAgIGFwcG9pbnRtZW50U3RhcnQuY29tcGFyZShleGNsdXNpdmVWaWV3RW5kRGF0ZSwgJ2RheScpID49IDBcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIENsYW1wIHN0YXJ0IGRhdGUgdG8gdGhlIHZpZXcgc3RhcnQgZGF0ZVxuICAgICAgbGV0IGN1cnJlbnREYXkgPVxuICAgICAgICBhcHBvaW50bWVudFN0YXJ0LmNvbXBhcmUodmlld1N0YXJ0RGF0ZSwgJ2RheScpIDwgMCA/IHZpZXdTdGFydERhdGUgOiBhcHBvaW50bWVudFN0YXJ0LnN0YXJ0T2YoJ2RheScpO1xuXG4gICAgICAvLyBMb29wIHRocm91Z2ggZWFjaCBkYXkgdGhlIGFwcG9pbnRtZW50IHNwYW5zIHdpdGhpbiB0aGUgdmlldyByYW5nZVxuICAgICAgbGV0IHNhZmVDb3VudCA9IDA7IC8vIFByZXZlbnQgaW5maW5pdGUgbG9vcHNcbiAgICAgIHdoaWxlIChcbiAgICAgICAgY3VycmVudERheS5jb21wYXJlKGFwcG9pbnRtZW50RW5kLCAnZGF5JykgPD0gMCAmJlxuICAgICAgICBjdXJyZW50RGF5LmNvbXBhcmUoZXhjbHVzaXZlVmlld0VuZERhdGUsICdkYXknKSA8IDAgJiZcbiAgICAgICAgc2FmZUNvdW50IDwgMTAwXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgZGF0ZVN0cmluZyA9IHRoaXMuZm9ybWF0U2VydmljZS5mb3JtYXQoY3VycmVudERheSwgJ2RhdGV0aW1lJywgeyBmb3JtYXQ6ICdZWVlZLU1NLUREJyB9KTsgLy8gVXNlIGEgY29uc2lzdGVudCBrZXkgZm9ybWF0XG5cbiAgICAgICAgaWYgKCFncm91cGVkQXBwb2ludG1lbnRzLmhhcyhkYXRlU3RyaW5nKSkge1xuICAgICAgICAgIGdyb3VwZWRBcHBvaW50bWVudHMuc2V0KGRhdGVTdHJpbmcsIFtdKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBZGQgdGhlIGFwcG9pbnRtZW50IGlmIGl0J3Mgbm90IGFscmVhZHkgaW4gdGhlIGxpc3QgZm9yIHRoYXQgZGF5XG4gICAgICAgIGlmICghZ3JvdXBlZEFwcG9pbnRtZW50cy5nZXQoZGF0ZVN0cmluZykuc29tZSgoZSkgPT4gZS5pZCA9PT0gYXBwb2ludG1lbnQuaWQpKSB7XG4gICAgICAgICAgZ3JvdXBlZEFwcG9pbnRtZW50cy5nZXQoZGF0ZVN0cmluZykucHVzaChhcHBvaW50bWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50RGF5ID0gY3VycmVudERheS5hZGQoJ2RheScsIDEpO1xuICAgICAgICBzYWZlQ291bnQrKztcbiAgICAgIH1cbiAgICAgIGlmIChzYWZlQ291bnQgPj0gMTAwKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignU2FmZXR5IGJyZWFrIGhpdCBpbiBncm91cEFwcG9pbnRtZW50c0J5RGF5IGxvb3AgZm9yIGFwcG9pbnRtZW50OicsIGFwcG9pbnRtZW50LmlkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBncm91cGVkQXBwb2ludG1lbnRzO1xuICB9XG5cbiAgZ2V0RGF5T2ZXZWVrTnVtYmVyKGRheU5hbWU6IEFYRGF5T2ZXZWVrTmFtZSk6IG51bWJlciB7XG4gICAgc3dpdGNoIChkYXlOYW1lKSB7XG4gICAgICBjYXNlICdzdW5kYXknOlxuICAgICAgICByZXR1cm4gMTtcbiAgICAgIGNhc2UgJ21vbmRheSc6XG4gICAgICAgIHJldHVybiAyO1xuICAgICAgY2FzZSAndHVlc2RheSc6XG4gICAgICAgIHJldHVybiAzO1xuICAgICAgY2FzZSAnd2VkbmVzZGF5JzpcbiAgICAgICAgcmV0dXJuIDQ7XG4gICAgICBjYXNlICd0aHVyc2RheSc6XG4gICAgICAgIHJldHVybiA1O1xuICAgICAgY2FzZSAnZnJpZGF5JzpcbiAgICAgICAgcmV0dXJuIDY7XG4gICAgICBjYXNlICdzYXR1cmRheSc6XG4gICAgICAgIHJldHVybiA3O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS53YXJuKGBJbnZhbGlkIGRheSBuYW1lOiAke2RheU5hbWV9LiBEZWZhdWx0aW5nIHRvIFN1bmRheSAoMSkuYCk7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIGdldFNsb3REYXRhKFxuICAgIHN0YXJ0RGF0ZTogQVhEYXRlVGltZSxcbiAgICB2aWV3OiBBWFNjaGVkdWxlclZpZXcsXG4gICk6IHsgc3RhcnREYXRlOiBBWERhdGVUaW1lOyBlbmREYXRlOiBBWERhdGVUaW1lOyB2aWV3OiBBWFNjaGVkdWxlclZpZXcgfSB7XG4gICAgbGV0IGVuZERhdGU6IEFYRGF0ZVRpbWU7XG4gICAgc3dpdGNoICh2aWV3KSB7XG4gICAgICBjYXNlICdkYXknOlxuICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgIGVuZERhdGUgPSBzdGFydERhdGUuYWRkKCdtaW51dGUnLCB0aGlzLkJMT0NLX0RVUkFUSU9OX01JTlVURVMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RpbWVsaW5lLWRheSc6XG4gICAgICBjYXNlICd0aW1lbGluZS1tdWx0aS1kYXknOlxuICAgICAgICBlbmREYXRlID0gc3RhcnREYXRlLmFkZCgnbWludXRlJywgdGhpcy5CTE9DS19EVVJBVElPTl9NSU5VVEVTICogMik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgY2FzZSAnYWdlbmRhJzpcbiAgICAgIGNhc2UgJ3RpbWVsaW5lLW1vbnRoJzpcbiAgICAgICAgc3RhcnREYXRlID0gc3RhcnREYXRlLnN0YXJ0T2YoJ2RheScpO1xuICAgICAgICBlbmREYXRlID0gc3RhcnREYXRlLmVuZE9mKCdkYXknKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiB7IHN0YXJ0RGF0ZSwgZW5kRGF0ZSwgdmlldyB9O1xuICB9XG5cbiAgaGFuZGxlRXZlbnQoXG4gICAgZXZlbnQ6IEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQgfCBBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudCxcbiAgICBldmVudE91dHB1dE1hcCxcbiAgICBldmVudFR5cGU6ICdhcHBvaW50bWVudCcgfCAnc2xvdCcsXG4gICkge1xuICAgIGNvbnN0IG1vdXNlRXZlbnQgPSBldmVudC5uYXRpdmVFdmVudDtcbiAgICBtb3VzZUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgbW91c2VFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoZXZlbnRUeXBlID09PSAnYXBwb2ludG1lbnQnKSB7XG4gICAgICBjb25zdCBhcHBvaW50bWVudE91dHB1dE1hcCA9IGV2ZW50T3V0cHV0TWFwW2V2ZW50VHlwZV07XG4gICAgICBjb25zdCBlbWl0dGVyID0gYXBwb2ludG1lbnRPdXRwdXRNYXBbbW91c2VFdmVudC50eXBlIGFzIGtleW9mIHR5cGVvZiBhcHBvaW50bWVudE91dHB1dE1hcF07XG4gICAgICBpZiAoZW1pdHRlcikgZW1pdHRlci5lbWl0KGV2ZW50IGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50KTtcbiAgICB9XG4gICAgaWYgKGV2ZW50VHlwZSA9PT0gJ3Nsb3QnKSB7XG4gICAgICBjb25zdCBzbG90T3V0cHV0TWFwID0gZXZlbnRPdXRwdXRNYXBbZXZlbnRUeXBlXTtcbiAgICAgIGNvbnN0IGVtaXR0ZXIgPSBzbG90T3V0cHV0TWFwW21vdXNlRXZlbnQudHlwZSBhcyBrZXlvZiB0eXBlb2Ygc2xvdE91dHB1dE1hcF07XG4gICAgICBpZiAoZW1pdHRlcikgZW1pdHRlci5lbWl0KGV2ZW50IGFzIEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIC0tLSBUaW1lbGluZSBTcGVjaWZpYyBIZWxwZXJzIC0tLVxuXG4gIGNhbGN1bGF0ZVRpbWVsaW5lTGF5b3V0KFxuICAgIC8vIGBhcHB0YCBoZXJlIHdpbGwgYmUgYW4gQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRUeXBlIHdoZW4gY2FsbGVkIGZyb20gVGltZWxpbmVEYXlWaWV3XG4gICAgYXBwdDogQVhTY2hlZHVsZXJBcHBvaW50bWVudCxcbiAgICB2aWV3U3RhcnRIb3VyOiBudW1iZXIsIC8vIGUuZy4sIDggZm9yIDggQU1cbiAgICB2aWV3RW5kSG91cjogbnVtYmVyLCAvLyBlLmcuLCAxOCBmb3IgNiBQTSAodGltZWxpbmUgcnVucyBmcm9tIDg6MDAgdXAgdG8sIGJ1dCBub3QgaW5jbHVkaW5nLCAxODowMClcbiAgKTogeyBsZWZ0OiBzdHJpbmc7IHdpZHRoOiBzdHJpbmcgfSB8IG51bGwge1xuICAgIGlmIChcbiAgICAgICFhcHB0Py5zdGFydERhdGUgfHxcbiAgICAgICFhcHB0LmVuZERhdGUgfHxcbiAgICAgIHR5cGVvZiB2aWV3U3RhcnRIb3VyICE9PSAnbnVtYmVyJyB8fFxuICAgICAgdHlwZW9mIHZpZXdFbmRIb3VyICE9PSAnbnVtYmVyJyB8fFxuICAgICAgdmlld1N0YXJ0SG91ciA+PSB2aWV3RW5kSG91ciAvLyBCYXNpYyBzYW5pdHkgY2hlY2tcbiAgICApIHtcbiAgICAgIGNvbnNvbGUud2FybignY2FsY3VsYXRlVGltZWxpbmVMYXlvdXQ6IEludmFsaWQgaW5wdXQnLCB7IGFwcHQsIHZpZXdTdGFydEhvdXIsIHZpZXdFbmRIb3VyIH0pO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgdG90YWxWaWV3RHVyYXRpb25NaW51dGVzID0gKHZpZXdFbmRIb3VyIC0gdmlld1N0YXJ0SG91cikgKiA2MDtcbiAgICBpZiAodG90YWxWaWV3RHVyYXRpb25NaW51dGVzIDw9IDApIHJldHVybiBudWxsOyAvLyBObyB2aWV3YWJsZSBkdXJhdGlvblxuXG4gICAgLy8gU2VnbWVudCdzIHN0YXJ0IGFuZCBlbmQgdGltZXMgKHRoZXNlIGFyZSBhbHJlYWR5IGNsaXBwZWQgdG8gdGhlIGRheSBieSBnZXRDbG9uZWRBcHBvaW50bWVudFNlZ21lbnRPbkRheSlcbiAgICBjb25zdCBzZWdtZW50U3RhcnQgPSBhcHB0LnN0YXJ0RGF0ZTtcbiAgICBjb25zdCBzZWdtZW50RW5kID0gYXBwdC5lbmREYXRlO1xuXG4gICAgLy8gLS0tIENhbGN1bGF0ZSBTdGFydCBQb3NpdGlvbiAobGVmdCkgLS0tXG4gICAgLy8gRWZmZWN0aXZlIHN0YXJ0IG9mIHRoZSBzZWdtZW50IHdpdGhpbiB0aGUgdmlldydzIGhvdXJzIGZvciBUSElTIGRheVxuICAgIGxldCBlZmZlY3RpdmVTZWdtZW50U3RhcnRNaW51dGVzSW5EYXkgPSBzZWdtZW50U3RhcnQuZ2V0SG91cnMoKSAqIDYwICsgc2VnbWVudFN0YXJ0LmdldE1pbnV0ZXMoKTtcblxuICAgIC8vIENsYW1wIHRvIHZpZXdTdGFydEhvdXIgZm9yIGNhbGN1bGF0aW9uIGlmIHNlZ21lbnQgc3RhcnRzIGJlZm9yZSB2aWV3YWJsZSBob3VycyAoc2hvdWxkbid0IGhhcHBlbiBpZiBzZWdtZW50ZXIgd29ya2VkKVxuICAgIGVmZmVjdGl2ZVNlZ21lbnRTdGFydE1pbnV0ZXNJbkRheSA9IE1hdGgubWF4KGVmZmVjdGl2ZVNlZ21lbnRTdGFydE1pbnV0ZXNJbkRheSwgdmlld1N0YXJ0SG91ciAqIDYwKTtcbiAgICAvLyBDbGFtcCB0byB2aWV3RW5kSG91ciBmb3IgY2FsY3VsYXRpb24gaWYgc2VnbWVudCBzdGFydHMgYWZ0ZXIgdmlld2FibGUgaG91cnMgKHNob3VsZG4ndCBoYXBwZW4pXG4gICAgZWZmZWN0aXZlU2VnbWVudFN0YXJ0TWludXRlc0luRGF5ID0gTWF0aC5taW4oZWZmZWN0aXZlU2VnbWVudFN0YXJ0TWludXRlc0luRGF5LCB2aWV3RW5kSG91ciAqIDYwKTtcblxuICAgIGNvbnN0IG1pbnV0ZXNGcm9tVmlld1N0YXJ0VG9TZWdtZW50U3RhcnQgPSBlZmZlY3RpdmVTZWdtZW50U3RhcnRNaW51dGVzSW5EYXkgLSB2aWV3U3RhcnRIb3VyICogNjA7XG5cbiAgICAvLyBJZiBzZWdtZW50IGVmZmVjdGl2ZWx5IHN0YXJ0cyBiZWZvcmUgdGhlIHZpZXdhYmxlIHBhcnQgKGFmdGVyIGNsYW1waW5nKSwgaXQgbWVhbnMgaXQncyBub3QgdmlzaWJsZSBvciBzdGFydHMgYXQgMCVcbiAgICBpZiAoXG4gICAgICBtaW51dGVzRnJvbVZpZXdTdGFydFRvU2VnbWVudFN0YXJ0IDwgMCAmJlxuICAgICAgTWF0aC5hYnMobWludXRlc0Zyb21WaWV3U3RhcnRUb1NlZ21lbnRTdGFydCkgPiAxZS02IC8qZXBzaWxvbiBmb3IgZmxvYXQgaXNzdWVzKi9cbiAgICApIHtcbiAgICAgIC8vIFRoaXMgY2FzZSBzaG91bGQgaWRlYWxseSBiZSBjYXVnaHQgYnkgdGhlIHNlZ21lbnRlciBvciBpbml0aWFsIG92ZXJsYXAgY2hlY2tzLlxuICAgICAgLy8gSWYgaXQgaGFwcGVucywgdHJlYXQgYXMgc3RhcnRpbmcgYXQgMCUgYnV0IGl0IG1pZ2h0IG1lYW4gbm8gdmlzaWJsZSBwYXJ0LlxuICAgIH1cblxuICAgIGNvbnN0IGxlZnRQZXJjZW50YWdlID0gKE1hdGgubWF4KDAsIG1pbnV0ZXNGcm9tVmlld1N0YXJ0VG9TZWdtZW50U3RhcnQpIC8gdG90YWxWaWV3RHVyYXRpb25NaW51dGVzKSAqIDEwMDtcblxuICAgIC8vIC0tLSBDYWxjdWxhdGUgRHVyYXRpb24gYW5kIFdpZHRoIC0tLVxuICAgIC8vIEVmZmVjdGl2ZSBlbmQgb2YgdGhlIHNlZ21lbnQgd2l0aGluIHRoZSB2aWV3J3MgaG91cnMgZm9yIFRISVMgZGF5XG4gICAgbGV0IGVmZmVjdGl2ZVNlZ21lbnRFbmRNaW51dGVzSW5EYXkgPSBzZWdtZW50RW5kLmdldEhvdXJzKCkgKiA2MCArIHNlZ21lbnRFbmQuZ2V0TWludXRlcygpO1xuICAgIGlmIChzZWdtZW50RW5kLmdldEhvdXJzKCkgPT09IDAgJiYgc2VnbWVudEVuZC5nZXRNaW51dGVzKCkgPT09IDAgJiYgc2VnbWVudEVuZC5nZXRUaW1lKCkgPiBzZWdtZW50U3RhcnQuZ2V0VGltZSgpKSB7XG4gICAgICAvLyBJZiBzZWdtZW50IGVuZHMgZXhhY3RseSBhdCBtaWRuaWdodCAoMDA6MDAgb2YgbmV4dCBkYXksIG1lYW5pbmcgaXQgZmlsbGVkIHVwIHRvIDI0OjAwIG9mIGN1cnJlbnQgZGF5KVxuICAgICAgZWZmZWN0aXZlU2VnbWVudEVuZE1pbnV0ZXNJbkRheSA9IDI0ICogNjA7XG4gICAgfVxuXG4gICAgLy8gQ2xhbXAgdG8gdmlld0VuZEhvdXIgZm9yIGNhbGN1bGF0aW9uXG4gICAgZWZmZWN0aXZlU2VnbWVudEVuZE1pbnV0ZXNJbkRheSA9IE1hdGgubWluKGVmZmVjdGl2ZVNlZ21lbnRFbmRNaW51dGVzSW5EYXksIHZpZXdFbmRIb3VyICogNjApO1xuICAgIC8vIENsYW1wIHRvIHZpZXdTdGFydEhvdXIgZm9yIGNhbGN1bGF0aW9uIChpZiBzZWdtZW50IGVuZHMgYmVmb3JlIHZpZXcgc3RhcnRzKVxuICAgIGVmZmVjdGl2ZVNlZ21lbnRFbmRNaW51dGVzSW5EYXkgPSBNYXRoLm1heChlZmZlY3RpdmVTZWdtZW50RW5kTWludXRlc0luRGF5LCB2aWV3U3RhcnRIb3VyICogNjApO1xuXG4gICAgY29uc3Qgc2VnbWVudER1cmF0aW9uTWludXRlc0luVmlldyA9IE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIGVmZmVjdGl2ZVNlZ21lbnRFbmRNaW51dGVzSW5EYXkgLSBlZmZlY3RpdmVTZWdtZW50U3RhcnRNaW51dGVzSW5EYXksXG4gICAgKTtcblxuICAgIGlmIChzZWdtZW50RHVyYXRpb25NaW51dGVzSW5WaWV3IDw9IDApIHtcbiAgICAgIC8vIFNlZ21lbnQgaGFzIG5vIHZpc2libGUgZHVyYXRpb24gd2l0aGluIHRoZSB0aW1lbGluZSBob3Vyc1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qgd2lkdGhQZXJjZW50YWdlID0gKHNlZ21lbnREdXJhdGlvbk1pbnV0ZXNJblZpZXcgLyB0b3RhbFZpZXdEdXJhdGlvbk1pbnV0ZXMpICogMTAwO1xuXG4gICAgLy8gRW5zdXJlIHBlcmNlbnRhZ2VzIGFyZSB2YWxpZFxuICAgIGlmIChcbiAgICAgIGxlZnRQZXJjZW50YWdlID4gMTAwIHx8XG4gICAgICBsZWZ0UGVyY2VudGFnZSA8IDAgfHxcbiAgICAgIHdpZHRoUGVyY2VudGFnZSA8PSAwIHx8XG4gICAgICB3aWR0aFBlcmNlbnRhZ2UgPiAxMDAgfHxcbiAgICAgIGxlZnRQZXJjZW50YWdlICsgd2lkdGhQZXJjZW50YWdlID4gMTAwLjAwMDEgLyphbGxvdyBmb3IgZmxvYXQgZXJyb3JzKi9cbiAgICApIHtcbiAgICAgIC8vIFRoaXMgbWlnaHQgaW5kaWNhdGUgYW4gaXNzdWUgd2l0aCBkYXRlIGNsYW1waW5nIG9yIGxvZ2ljLlxuICAgICAgLy8gRm9yIG5vdywgaWYgaXQgcmVzdWx0cyBpbiBhbiBpbnZhbGlkIGxheW91dCwgcmV0dXJuIG51bGwuXG4gICAgICAvLyBjb25zb2xlLndhcm4oXCJUaW1lbGluZSBsYXlvdXQgY2FsY3VsYXRpb24gcmVzdWx0ZWQgaW4gb3V0LW9mLWJvdW5kcyBwZXJjZW50YWdlczpcIixcbiAgICAgIC8vICAgICAgICAgICAgICB7bGVmdFBlcmNlbnRhZ2UsIHdpZHRoUGVyY2VudGFnZSwgc2VnbWVudFN0YXJ0LCBzZWdtZW50RW5kLCB2aWV3U3RhcnRIb3VyLCB2aWV3RW5kSG91cn0pO1xuICAgICAgLy8gQSBjb21tb24gY2FzZSBmb3IgKGxlZnQgKyB3aWR0aCA+IDEwMCkgaXMgaWYgYW4gZXZlbnQgZW5kcyAqZXhhY3RseSogYXQgdmlld0VuZEhvdXIsXG4gICAgICAvLyBhbmQgdmlld0VuZEhvdXIgaXRzZWxmIGlzIHRoZSBib3VuZGFyeS5cbiAgICAgIC8vIExldCdzIGJlIGEgYml0IHRvbGVyYW50IGhlcmUgaWYgd2lkdGggaXMgcG9zaXRpdmUuXG4gICAgICBpZiAod2lkdGhQZXJjZW50YWdlIDw9IDApIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsZWZ0OiBgJHtNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAsIGxlZnRQZXJjZW50YWdlKSl9JWAsXG4gICAgICB3aWR0aDogYCR7TWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCB3aWR0aFBlcmNlbnRhZ2UpKX0lYCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIHZpc2libGUgc2VnbWVudCBvZiBhIHRpbWVkIGFwcG9pbnRtZW50IG9uIGEgc3BlY2lmaWMgZGF5LFxuICAgKiBjb25zdHJhaW5lZCBieSB0aGUgdmlldydzIHN0YXJ0IGFuZCBlbmQgaG91cnMuXG4gICAqIFJldHVybnMgYSBuZXcgYXBwb2ludG1lbnQtbGlrZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBzZWdtZW50LlxuICAgKi9cbiAgZ2V0Q2xvbmVkQXBwb2ludG1lbnRTZWdtZW50T25EYXkoXG4gICAgYXBwb2ludG1lbnQ6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQsIC8vIFRoaXMgaXMgdGhlIE9SSUdJTkFMIGFwcG9pbnRtZW50XG4gICAgZGF5OiBBWERhdGVUaW1lLFxuICAgIHZpZXdTdGFydEhvdXI6IG51bWJlcixcbiAgICB2aWV3RW5kSG91cjogbnVtYmVyLFxuICAgIGlzRnVsbERheUNlbGxDb250ZXh0ID0gZmFsc2UsXG4gICk6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50IHwgbnVsbCB7XG4gICAgaWYgKCFhcHBvaW50bWVudCB8fCAhYXBwb2ludG1lbnQuc3RhcnREYXRlIHx8ICFhcHBvaW50bWVudC5lbmREYXRlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBhcHBvaW50bWVudFN0YXJ0RGF0ZSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShhcHBvaW50bWVudC5zdGFydERhdGUpO1xuICAgIGNvbnN0IGFwcG9pbnRtZW50RW5kRGF0ZSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShhcHBvaW50bWVudC5lbmREYXRlKTtcblxuICAgIGlmIChhcHBvaW50bWVudC5hbGxEYXkpIHtcbiAgICAgIGNvbnN0IGRheVN0YXJ0T2YgPSBkYXkuY2xvbmUoKS5zdGFydE9mKCdkYXknKTtcbiAgICAgIGlmIChhcHBvaW50bWVudFN0YXJ0RGF0ZS5zdGFydE9mKCdkYXknKS5lcXVhbChkYXlTdGFydE9mLCAnZGF5JykpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5hcHBvaW50bWVudCxcbiAgICAgICAgICBzdGFydERhdGU6IGRheVN0YXJ0T2YuZGF0ZSxcbiAgICAgICAgICBlbmREYXRlOiBkYXlTdGFydE9mLmNsb25lKCkuYWRkKCdkYXknLCAxKS5zdGFydE9mKCdkYXknKS5kYXRlLFxuICAgICAgICAgIGFsbERheTogdHJ1ZSxcbiAgICAgICAgICBvcmlnaW5hbFN0YXJ0RGF0ZTogYXBwb2ludG1lbnRTdGFydERhdGUuZGF0ZSxcbiAgICAgICAgICBvcmlnaW5hbEVuZERhdGU6IGFwcG9pbnRtZW50RW5kRGF0ZS5kYXRlLFxuICAgICAgICAgIGlzQ29udGludWF0aW9uRnJvbVByZXZpb3VzRGF5OiBmYWxzZSxcbiAgICAgICAgICBpc0NvbnRpbnVhdGlvblRvTmV4dERheTogYXBwb2ludG1lbnRFbmREYXRlLnN0YXJ0T2YoJ2RheScpLmNvbXBhcmUoZGF5U3RhcnRPZiwgJ2RheScpID4gMCxcbiAgICAgICAgICBvcmlnaW5hbEFwcG9pbnRtZW50UmVmOiBhcHBvaW50bWVudCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGFwcG9pbnRtZW50U3RhcnREYXRlLnN0YXJ0T2YoJ2RheScpLmNvbXBhcmUoZGF5U3RhcnRPZiwgJ2RheScpIDwgMCAmJlxuICAgICAgICBhcHBvaW50bWVudEVuZERhdGUuc3RhcnRPZignZGF5JykuY29tcGFyZShkYXlTdGFydE9mLCAnZGF5JykgPj0gMFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uYXBwb2ludG1lbnQsXG4gICAgICAgICAgc3RhcnREYXRlOiBkYXlTdGFydE9mLmRhdGUsXG4gICAgICAgICAgZW5kRGF0ZTogZGF5U3RhcnRPZi5jbG9uZSgpLmFkZCgnZGF5JywgMSkuc3RhcnRPZignZGF5JykuZGF0ZSxcbiAgICAgICAgICBhbGxEYXk6IHRydWUsXG4gICAgICAgICAgb3JpZ2luYWxTdGFydERhdGU6IGFwcG9pbnRtZW50U3RhcnREYXRlLmRhdGUsXG4gICAgICAgICAgb3JpZ2luYWxFbmREYXRlOiBhcHBvaW50bWVudEVuZERhdGUuZGF0ZSxcbiAgICAgICAgICBpc0NvbnRpbnVhdGlvbkZyb21QcmV2aW91c0RheTogdHJ1ZSxcbiAgICAgICAgICBpc0NvbnRpbnVhdGlvblRvTmV4dERheTogYXBwb2ludG1lbnRFbmREYXRlLnN0YXJ0T2YoJ2RheScpLmNvbXBhcmUoZGF5U3RhcnRPZiwgJ2RheScpID4gMCxcbiAgICAgICAgICBvcmlnaW5hbEFwcG9pbnRtZW50UmVmOiBhcHBvaW50bWVudCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGRheVN0YXJ0Qm91bmRhcnkgPSBpc0Z1bGxEYXlDZWxsQ29udGV4dFxuICAgICAgPyBkYXkuY2xvbmUoKS5zdGFydE9mKCdkYXknKVxuICAgICAgOiBkYXkuY2xvbmUoKS5zZXQoJ2hvdXInLCB2aWV3U3RhcnRIb3VyKS5zdGFydE9mKCdob3VyJyk7XG4gICAgY29uc3QgZGF5RW5kQm91bmRhcnkgPSBpc0Z1bGxEYXlDZWxsQ29udGV4dFxuICAgICAgPyBkYXkuY2xvbmUoKS5hZGQoJ2RheScsIDEpLnN0YXJ0T2YoJ2RheScpXG4gICAgICA6IHZpZXdFbmRIb3VyID09PSAyNCB8fCAodmlld0VuZEhvdXIgPT09IDAgJiYgdmlld1N0YXJ0SG91ciA9PT0gMClcbiAgICAgICAgPyBkYXkuY2xvbmUoKS5hZGQoJ2RheScsIDEpLnN0YXJ0T2YoJ2RheScpXG4gICAgICAgIDogZGF5LmNsb25lKCkuc2V0KCdob3VyJywgdmlld0VuZEhvdXIpLnN0YXJ0T2YoJ2hvdXInKTtcblxuICAgIGlmIChcbiAgICAgIGFwcG9pbnRtZW50RW5kRGF0ZS5jb21wYXJlKGRheVN0YXJ0Qm91bmRhcnksICdzZWNvbmQnKSA8PSAwIHx8XG4gICAgICBhcHBvaW50bWVudFN0YXJ0RGF0ZS5jb21wYXJlKGRheUVuZEJvdW5kYXJ5LCAnc2Vjb25kJykgPj0gMFxuICAgICkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHNlZ21lbnRTdGFydERhdGUgPVxuICAgICAgYXBwb2ludG1lbnRTdGFydERhdGUuY29tcGFyZShkYXlTdGFydEJvdW5kYXJ5LCAnc2Vjb25kJykgPiAwID8gYXBwb2ludG1lbnRTdGFydERhdGUgOiBkYXlTdGFydEJvdW5kYXJ5O1xuICAgIGNvbnN0IHNlZ21lbnRFbmREYXRlID1cbiAgICAgIGFwcG9pbnRtZW50RW5kRGF0ZS5jb21wYXJlKGRheUVuZEJvdW5kYXJ5LCAnc2Vjb25kJykgPCAwID8gYXBwb2ludG1lbnRFbmREYXRlIDogZGF5RW5kQm91bmRhcnk7XG5cbiAgICBpZiAoc2VnbWVudFN0YXJ0RGF0ZS5jb21wYXJlKHNlZ21lbnRFbmREYXRlLCAnc2Vjb25kJykgPj0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgaXNDb250aW51YXRpb25Gcm9tUHJldmlvdXNEYXkgPSBhcHBvaW50bWVudFN0YXJ0RGF0ZS5jb21wYXJlKHNlZ21lbnRTdGFydERhdGUsICdzZWNvbmQnKSA8IDA7XG4gICAgY29uc3QgaXNDb250aW51YXRpb25Ub05leHREYXkgPSBhcHBvaW50bWVudEVuZERhdGUuY29tcGFyZShzZWdtZW50RW5kRGF0ZSwgJ3NlY29uZCcpID4gMDtcbiAgICBjb25zdCBkdXJhdGlvbiA9IGFwcG9pbnRtZW50U3RhcnREYXRlLmR1cmF0aW9uKGFwcG9pbnRtZW50RW5kRGF0ZSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYXBwb2ludG1lbnQsXG4gICAgICBzdGFydERhdGU6IHNlZ21lbnRTdGFydERhdGUuZGF0ZSxcbiAgICAgIGVuZERhdGU6IHNlZ21lbnRFbmREYXRlLmRhdGUsXG4gICAgICBhbGxEYXk6IGFwcG9pbnRtZW50LmFsbERheSB8fCBkdXJhdGlvbi50b3RhbC5taWxpc2Vjb25kcyA+PSAyNCAqIDYwICogNjAgKiAxMDAwIC0gMSxcbiAgICAgIG9yaWdpbmFsU3RhcnREYXRlOiBhcHBvaW50bWVudFN0YXJ0RGF0ZS5kYXRlLFxuICAgICAgb3JpZ2luYWxFbmREYXRlOiBhcHBvaW50bWVudEVuZERhdGUuZGF0ZSxcbiAgICAgIGlzQ29udGludWF0aW9uRnJvbVByZXZpb3VzRGF5LFxuICAgICAgaXNDb250aW51YXRpb25Ub05leHREYXksXG4gICAgICBvcmlnaW5hbEFwcG9pbnRtZW50UmVmOiBhcHBvaW50bWVudCxcbiAgICB9O1xuICB9XG5cbiAgZ2V0T3JpZ2luYWxBcHBvaW50bWVudChpdGVtOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50IHwgQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnQpOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50IHtcbiAgICBjb25zdCBzZWdtZW50ID0gaXRlbSBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudDtcbiAgICBpZiAoc2VnbWVudC5vcmlnaW5hbEFwcG9pbnRtZW50UmVmKSB7XG4gICAgICByZXR1cm4gc2VnbWVudC5vcmlnaW5hbEFwcG9pbnRtZW50UmVmO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuXG4gIGlzSG9saWRheShkYXRlOiBBWERhdGVUaW1lKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmhvbGlkYXlzLnNvbWUoKGQpID0+IGRhdGUuZXF1YWwoZC5kYXRlLCAnZGF5JykpO1xuICB9XG4gIGlzV2Vla2VuZChkYXRlOiBBWERhdGVUaW1lLCBjYWxlbmRhcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgd2Vla2VuZCA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLnJlc29sdmVDYWxlbmRhcihjYWxlbmRhcikud2Vla2VuZDtcbiAgICByZXR1cm4gd2Vla2VuZC5pbmNsdWRlcyhkYXRlLmRheU9mV2VlayAtIDEpO1xuICB9XG59XG4iXX0=","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXDragDirective, AXDropZoneDirective } from '@acorex/cdk/drag-drop';\nimport { AXDecoratorGenericComponent } from '@acorex/components/decorators';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe, NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, HostBinding, ViewEncapsulation, computed, inject, input, output, } from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport { AXSchedulerComponent, } from '../../scheduler.component';\nimport { AXSchedulerService } from '../../scheduler.service';\nimport * as i0 from \"@angular/core\";\nexport class AXSchedulerAgendaViewComponent extends NXComponent {\n constructor() {\n super(...arguments);\n this.scheduler = inject(AXSchedulerComponent);\n this.calendarService = inject(AXCalendarService);\n this.schedulerService = inject(AXSchedulerService);\n this.daysCount = input(7);\n this.readonly = input(false);\n this.draggable = input(true);\n this.calendar = input();\n this.date = input.required();\n this.appointments = input([]);\n this.agendaDaysLayout = computed(() => {\n const allOriginalAppointments = this.appointments();\n const agendaStartDate = this.date();\n const numberOfDays = this.daysCount();\n if (!agendaStartDate || !allOriginalAppointments) {\n return [];\n }\n const result = [];\n for (let i = 0; i < numberOfDays; i++) {\n const currentDay = agendaStartDate.add('day', i).startOf('day');\n const segmentsForThisDay = [];\n for (const appt of allOriginalAppointments) {\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, currentDay, 0, 24, true);\n if (segment) {\n segmentsForThisDay.push(segment);\n }\n }\n const sortedSegments = orderBy(segmentsForThisDay, [\n (s) => (s.allDay ? 0 : 1),\n (s) => s.startDate.getTime(),\n (s) => s.originalEndDate.getTime() - s.originalStartDate.getTime(),\n ], ['asc', 'asc', 'desc']);\n result.push({\n date: currentDay,\n appointments: sortedSegments,\n holiday: this.isHoliday(currentDay),\n });\n }\n return result;\n });\n // Internal outputs to be caught by parent AXSchedulerComponent\n this.slotClickedInternal = output();\n this.slotDblClickedInternal = output();\n this.slotRightClickedInternal = output();\n this.appointmentClickedInternal = output();\n this.appointmentDblClickedInternal = output();\n this.appointmentRightClickedInternal = output();\n this.onAppointmentDropInternal = output();\n // --- Event Handlers ---\n this.eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n }\n handleAppointmentEvent(mouseEvent, appointmentItem) {\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, appointment: appointmentRef, sender: this.scheduler }, this.eventOutputMap, 'appointment');\n }\n handleSlotEvent(mouseEvent, date) {\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'agenda');\n if (slotData) {\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler }, this.eventOutputMap, 'slot');\n }\n }\n handleDrop(e, date) {\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'agenda');\n const droppedItem = e.dropped.dragData();\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n });\n }\n isToday(date) {\n const today = this.calendarService.create(new Date());\n return date.equal(today, 'day');\n }\n isHoliday(date) {\n const isHoliday = this.schedulerService.isHoliday(date);\n if (isHoliday) {\n const holiday = this.calendarService.holidays.filter((d) => date.equal(d.date, 'day'))[0];\n return {\n state: 'holiday',\n holiday,\n };\n }\n const isWeekend = this.schedulerService.isWeekend(date, this.calendar());\n if (isWeekend) {\n return { state: 'weekend' };\n }\n return { state: 'none' };\n }\n get isReadonly() {\n return this.readonly();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerAgendaViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.4\", type: AXSchedulerAgendaViewComponent, isStandalone: true, selector: \"ax-scheduler-agenda-view\", inputs: { daysCount: { classPropertyName: \"daysCount\", publicName: \"daysCount\", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: \"readonly\", publicName: \"readonly\", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: \"draggable\", publicName: \"draggable\", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: \"calendar\", publicName: \"calendar\", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: \"date\", publicName: \"date\", isSignal: true, isRequired: true, transformFunction: null }, appointments: { classPropertyName: \"appointments\", publicName: \"appointments\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: \"slotClickedInternal\", slotDblClickedInternal: \"slotDblClickedInternal\", slotRightClickedInternal: \"slotRightClickedInternal\", appointmentClickedInternal: \"appointmentClickedInternal\", appointmentDblClickedInternal: \"appointmentDblClickedInternal\", appointmentRightClickedInternal: \"appointmentRightClickedInternal\", onAppointmentDropInternal: \"onAppointmentDropInternal\" }, host: { properties: { \"class.ax-state-readonly\": \"this.isReadonly\" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerAgendaViewComponent }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-scheduler-agenda-container\\\">\\n @for (dayData of agendaDaysLayout(); track dayData.date.date.getTime()) {\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleDrop($event, dayData.date)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n [class.ax-state-today]=\\\"isToday(dayData.date)\\\"\\n [class.ax-state-holiday]=\\\"dayData.holiday.state !== 'none'\\\"\\n class=\\\"ax-scheduler-agenda-view-container\\\"\\n (click)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n (dblclick)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n (contextmenu)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n >\\n <div class=\\\"ax-scheduler-agenda-header-date-day\\\">\\n <span\\n class=\\\"ax-scheduler-agenda-header-date-day-char ax-scheduler-truncate\\\"\\n [axTooltip]=\\\"dayData.holiday?.holiday?.title ?? ''\\\"\\n [axTooltipPlacement]=\\\"'top-start'\\\"\\n >\\n {{ dayData.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n @if (dayData.holiday.state === 'holiday' && dayData.holiday.holiday.title) {\\n ( {{ dayData.holiday.holiday.title }} )\\n }\\n </span>\\n <span class=\\\"ax-scheduler-agenda-header-date-day-num\\\">\\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\\n </span>\\n </div>\\n <div class=\\\"ax-scheduler-agenda-appointment-container\\\">\\n @for (segment of dayData.appointments; track segment.id + segment.originalStartDate.getTime()) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"segment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment)\\\"\\n [title]=\\\"\\n segment.title +\\n (segment.allDay\\n ? ' (All Day)'\\n : ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')')\\n \\\"\\n class=\\\"ax-scheduler-agenda-appointment\\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n [ngClass]=\\\"segment.cssClass??`ax-scheduler-${segment.priority??'primary'}-periority`\\\"\\n >\\n <div class=\\\"ax-scheduler-agenda-appointment-time\\\">\\n @if (segment.allDay) {\\n <span>{{ 'dateTime.duration.all-day' | translate | async }}</span>\\n } @else {\\n <span>\\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n -\\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </span>\\n }\\n </div>\\n <ax-title class=\\\"ax-scheduler-agenda-appointment-title ax-scheduler-truncate\\\">{{ segment.title }}</ax-title>\\n <!-- Description could go here if needed -->\\n <!-- @if (segment.description) {\\n <ax-subtitle>{{ segment.description }}</ax-subtitle>\\n } -->\\n </div>\\n }\\n @if (dayData.appointments.length === 0) {\\n <div class=\\\"ax-scheduler-agenda-no-appointments\\\">\\n {{ 'noRecord' | translate | async }}\\n </div>\\n }\\n </div>\\n </div>\\n }\\n</div>\\n\", styles: [\"ax-scheduler-agenda-view .ax-scheduler-agenda-container{height:100%;display:flex;flex-direction:column}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container{gap:1rem;display:flex;position:relative;padding-inline:1rem;padding-block:.25rem;border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container:last-child{border-block-end-width:0}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today{background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today .ax-scheduler-agenda-header-date-day{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today .ax-scheduler-agenda-header-date-day .ax-scheduler-month-header-date-day-char{font-weight:500}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today .ax-scheduler-agenda-header-date-day .ax-scheduler-month-header-date-day-num{font-weight:700}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container .ax-scheduler-agenda-header-date-day{gap:.25rem;display:flex;height:3.5rem;min-width:6rem;max-width:6rem;position:sticky;align-items:start;flex-direction:column;inset-block-start:1rem;justify-content:center}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container .ax-scheduler-agenda-header-date-day .ax-scheduler-agenda-header-date-day-char{max-width:100%;font-weight:300}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container .ax-scheduler-agenda-header-date-day .ax-scheduler-agenda-header-date-day-num{font-weight:500;font-size:1.25rem}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container{width:100%;gap:.25rem;display:flex;align-items:center;flex-direction:column;justify-content:center}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment{gap:.5rem;width:100%;display:flex;overflow:hidden;align-items:center;flex-direction:row;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment.all-day-segment .ax-scheduler-agenda-appointment-time{font-weight:500}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment .ax-scheduler-agenda-appointment-time{flex-shrink:0;min-width:120px;font-size:.9em;opacity:.9}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment .ax-scheduler-agenda-appointment-title{flex-grow:1}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-no-appointments{text-align:center;font-style:italic;color:rgba(var(--ax-sys-color-on-surface),.6)}ax-scheduler-agenda-view:not(.ax-state-readonly) .ax-scheduler-agenda-appointment{cursor:pointer}ax-scheduler-agenda-view:not(.ax-state-readonly) .ax-scheduler-agenda-view-container{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-agenda-view:not(.ax-state-readonly) .ax-scheduler-agenda-view-container:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}\\n\"], dependencies: [{ kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }, { kind: \"component\", type: AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"directive\", type: AXDragDirective, selector: \"[axDrag]\", inputs: [\"dragData\", \"dragDisabled\", \"dragTransition\", \"dragElementClone\", \"dropZoneGroup\", \"dragStartDelay\", \"dragResetOnDblClick\", \"dragLockAxis\", \"dragClonedTemplate\", \"dragCursor\", \"dragBoundary\", \"dragTransitionDuration\"], outputs: [\"dragPositionChanged\"] }, { kind: \"directive\", type: AXDropZoneDirective, selector: \"[axDropZone]\", inputs: [\"dropZoneGroup\"], outputs: [\"onElementDrop\", \"onElementHover\"], exportAs: [\"axDropZone\"] }, { kind: \"pipe\", type: AXTranslatorPipe, name: \"translate\" }, { kind: \"directive\", type: AXTooltipDirective, selector: \"[axTooltip]\", inputs: [\"axTooltip\", \"axTooltipPlacement\", \"axTooltipOffsetX\", \"axTooltipOffsetY\", \"axTooltipOpenAfter\", \"axTooltipCloseAfter\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerAgendaViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-scheduler-agenda-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [\n NgClass,\n AsyncPipe,\n AXFormatPipe,\n AXDecoratorGenericComponent,\n AXDragDirective,\n AXDropZoneDirective,\n AXTranslatorPipe,\n AXTooltipDirective,\n ], providers: [{ provide: AXComponent, useExisting: AXSchedulerAgendaViewComponent }], template: \"<div class=\\\"ax-scheduler-agenda-container\\\">\\n @for (dayData of agendaDaysLayout(); track dayData.date.date.getTime()) {\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleDrop($event, dayData.date)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n [class.ax-state-today]=\\\"isToday(dayData.date)\\\"\\n [class.ax-state-holiday]=\\\"dayData.holiday.state !== 'none'\\\"\\n class=\\\"ax-scheduler-agenda-view-container\\\"\\n (click)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n (dblclick)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n (contextmenu)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n >\\n <div class=\\\"ax-scheduler-agenda-header-date-day\\\">\\n <span\\n class=\\\"ax-scheduler-agenda-header-date-day-char ax-scheduler-truncate\\\"\\n [axTooltip]=\\\"dayData.holiday?.holiday?.title ?? ''\\\"\\n [axTooltipPlacement]=\\\"'top-start'\\\"\\n >\\n {{ dayData.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n @if (dayData.holiday.state === 'holiday' && dayData.holiday.holiday.title) {\\n ( {{ dayData.holiday.holiday.title }} )\\n }\\n </span>\\n <span class=\\\"ax-scheduler-agenda-header-date-day-num\\\">\\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\\n </span>\\n </div>\\n <div class=\\\"ax-scheduler-agenda-appointment-container\\\">\\n @for (segment of dayData.appointments; track segment.id + segment.originalStartDate.getTime()) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"segment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment)\\\"\\n [title]=\\\"\\n segment.title +\\n (segment.allDay\\n ? ' (All Day)'\\n : ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')')\\n \\\"\\n class=\\\"ax-scheduler-agenda-appointment\\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n [ngClass]=\\\"segment.cssClass??`ax-scheduler-${segment.priority??'primary'}-periority`\\\"\\n >\\n <div class=\\\"ax-scheduler-agenda-appointment-time\\\">\\n @if (segment.allDay) {\\n <span>{{ 'dateTime.duration.all-day' | translate | async }}</span>\\n } @else {\\n <span>\\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n -\\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </span>\\n }\\n </div>\\n <ax-title class=\\\"ax-scheduler-agenda-appointment-title ax-scheduler-truncate\\\">{{ segment.title }}</ax-title>\\n <!-- Description could go here if needed -->\\n <!-- @if (segment.description) {\\n <ax-subtitle>{{ segment.description }}</ax-subtitle>\\n } -->\\n </div>\\n }\\n @if (dayData.appointments.length === 0) {\\n <div class=\\\"ax-scheduler-agenda-no-appointments\\\">\\n {{ 'noRecord' | translate | async }}\\n </div>\\n }\\n </div>\\n </div>\\n }\\n</div>\\n\", styles: [\"ax-scheduler-agenda-view .ax-scheduler-agenda-container{height:100%;display:flex;flex-direction:column}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container{gap:1rem;display:flex;position:relative;padding-inline:1rem;padding-block:.25rem;border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container:last-child{border-block-end-width:0}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today{background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today .ax-scheduler-agenda-header-date-day{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today .ax-scheduler-agenda-header-date-day .ax-scheduler-month-header-date-day-char{font-weight:500}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today .ax-scheduler-agenda-header-date-day .ax-scheduler-month-header-date-day-num{font-weight:700}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container .ax-scheduler-agenda-header-date-day{gap:.25rem;display:flex;height:3.5rem;min-width:6rem;max-width:6rem;position:sticky;align-items:start;flex-direction:column;inset-block-start:1rem;justify-content:center}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container .ax-scheduler-agenda-header-date-day .ax-scheduler-agenda-header-date-day-char{max-width:100%;font-weight:300}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container .ax-scheduler-agenda-header-date-day .ax-scheduler-agenda-header-date-day-num{font-weight:500;font-size:1.25rem}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container{width:100%;gap:.25rem;display:flex;align-items:center;flex-direction:column;justify-content:center}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment{gap:.5rem;width:100%;display:flex;overflow:hidden;align-items:center;flex-direction:row;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment.all-day-segment .ax-scheduler-agenda-appointment-time{font-weight:500}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment .ax-scheduler-agenda-appointment-time{flex-shrink:0;min-width:120px;font-size:.9em;opacity:.9}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment .ax-scheduler-agenda-appointment-title{flex-grow:1}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-no-appointments{text-align:center;font-style:italic;color:rgba(var(--ax-sys-color-on-surface),.6)}ax-scheduler-agenda-view:not(.ax-state-readonly) .ax-scheduler-agenda-appointment{cursor:pointer}ax-scheduler-agenda-view:not(.ax-state-readonly) .ax-scheduler-agenda-view-container{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-agenda-view:not(.ax-state-readonly) .ax-scheduler-agenda-view-container:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}\\n\"] }]\n }], propDecorators: { isReadonly: [{\n type: HostBinding,\n args: ['class.ax-state-readonly']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLWFnZW5kYS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NyYy9saWIvdmlld3MvYWdlbmRhL3NjaGVkdWxlci1hZ2VuZGEtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3ZpZXdzL2FnZW5kYS9zY2hlZHVsZXItYWdlbmRhLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUF1QixNQUFNLHVCQUF1QixDQUFDO0FBQ2xHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBNkIsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXBDLE9BQU8sRUFFTCxvQkFBb0Is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LDJCQUEyQix5TEFDM0IsZUFBZSwyVEFDZixtQkFBbUIsdUpBQ25CLGdCQUFnQixrREFDaEIsa0JBQWtCOzsyRkFJVCw4QkFBOEI7a0JBbEIxQyxTQUFTOytCQUNFLDBCQUEwQixtQkFHbkIsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxXQUM1Qjt3QkFDUCxPQUFPO3dCQUNQLFNBQVM7d0JBQ1QsWUFBWTt3QkFDWiwyQkFBMkI7d0JBQzNCLGVBQWU7d0JBQ2YsbUJBQW1CO3dCQUNuQixnQkFBZ0I7d0JBQ2hCLGtCQUFrQjtxQkFDbkIsYUFDVSxDQUFDLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLGdDQUFnQyxFQUFFLENBQUM7OEJBeUl0QyxVQUFVO3NCQUFyRCxXQUFXO3VCQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYQ29tcG9uZW50LCBOWENvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY2RrL2NvbW1vbic7XG5pbXBvcnQgeyBBWERyYWdEaXJlY3RpdmUsIEFYRHJvcFpvbmVEaXJlY3RpdmUsIEFYRHJvcFpvbmVEcm9wRXZlbnQgfSBmcm9tICdAYWNvcmV4L2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgQVhEZWNvcmF0b3JHZW5lcmljQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgQVhUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3Rvb2x0aXAnO1xuaW1wb3J0IHsgQVhDYWxlbmRhclNlcnZpY2UsIEFYRGF0ZVRpbWUsIEFYSG9saWRheURhdGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvZGF0ZS10aW1lJztcbmltcG9ydCB7IEFYRm9ybWF0UGlwZSB9IGZyb20gJ0BhY29yZXgvY29yZS9mb3JtYXQnO1xuaW1wb3J0IHsgQVhUcmFuc2xhdG9yUGlwZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgSG9zdEJpbmRpbmcsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG9yZGVyQnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJBcHBvaW50bWVudCwgQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnQgfSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuY2xhc3MnO1xuaW1wb3J0IHtcbiAgQVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQsXG4gIEFYU2NoZWR1bGVyQ29tcG9uZW50LFxuICBBWFNjaGVkdWxlclNsb3REcm9wRXZlbnQsXG4gIEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQsXG59IGZyb20gJy4uLy4uL3NjaGVkdWxlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFnZW5kYURheURhdGEge1xuICBkYXRlOiBBWERhdGVUaW1lO1xuICBhcHBvaW50bWVudHM6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50W107XG4gIGhvbGlkYXk/OiB7IHN0YXRlOiAnaG9saWRheScgfCAnd2Vla2VuZCcgfCAnbm9uZSc7IGhvbGlkYXk/OiBBWEhvbGlkYXlEYXRlIH07XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LXNjaGVkdWxlci1hZ2VuZGEtdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9zY2hlZHVsZXItYWdlbmRhLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vc2NoZWR1bGVyLWFnZW5kYS12aWV3LmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0NsYXNzLFxuICAgIEFzeW5jUGlwZSxcbiAgICBBWEZvcm1hdFBpcGUsXG4gICAgQVhEZWNvcmF0b3JHZW5lcmljQ29tcG9uZW50LFxuICAgIEFYRHJhZ0RpcmVjdGl2ZSxcbiAgICBBWERyb3Bab25lRGlyZWN0aXZlLFxuICAgIEFYVHJhbnNsYXRvclBpcGUsXG4gICAgQVhUb29sdGlwRGlyZWN0aXZlLFxuICBdLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IEFYQ29tcG9uZW50LCB1c2VFeGlzdGluZzogQVhTY2hlZHVsZXJBZ2VuZGFWaWV3Q29tcG9uZW50IH1dLFxufSlcbmV4cG9ydCBjbGFzcyBBWFNjaGVkdWxlckFnZW5kYVZpZXdDb21wb25lbnQgZXh0ZW5kcyBOWENvbXBvbmVudCB7XG4gIHByaXZhdGUgc2NoZWR1bGVyID0gaW5qZWN0KEFYU2NoZWR1bGVyQ29tcG9uZW50KTtcbiAgcHJpdmF0ZSBjYWxlbmRhclNlcnZpY2UgPSBpbmplY3QoQVhDYWxlbmRhclNlcnZpY2UpO1xuICBwcml2YXRlIHNjaGVkdWxlclNlcnZpY2UgPSBpbmplY3QoQVhTY2hlZHVsZXJTZXJ2aWNlKTtcblxuICBkYXlzQ291bnQgPSBpbnB1dCg3KTtcbiAgcmVhZG9ubHkgPSBpbnB1dChmYWxzZSk7XG4gIGRyYWdnYWJsZSA9IGlucHV0KHRydWUpO1xuICBjYWxlbmRhciA9IGlucHV0PHN0cmluZz4oKTtcbiAgZGF0ZSA9IGlucHV0LnJlcXVpcmVkPEFYRGF0ZVRpbWU+KCk7XG4gIGFwcG9pbnRtZW50cyA9IGlucHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRbXT4oW10pO1xuXG4gIGFnZW5kYURheXNMYXlvdXQgPSBjb21wdXRlZDxBZ2VuZGFEYXlEYXRhW10+KCgpID0+IHtcbiAgICBjb25zdCBhbGxPcmlnaW5hbEFwcG9pbnRtZW50cyA9IHRoaXMuYXBwb2ludG1lbnRzKCk7XG4gICAgY29uc3QgYWdlbmRhU3RhcnREYXRlID0gdGhpcy5kYXRlKCk7XG4gICAgY29uc3QgbnVtYmVyT2ZEYXlzID0gdGhpcy5kYXlzQ291bnQoKTtcblxuICAgIGlmICghYWdlbmRhU3RhcnREYXRlIHx8ICFhbGxPcmlnaW5hbEFwcG9pbnRtZW50cykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdDogQWdlbmRhRGF5RGF0YVtdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bWJlck9mRGF5czsgaSsrKSB7XG4gICAgICBjb25zdCBjdXJyZW50RGF5ID0gYWdlbmRhU3RhcnREYXRlLmFkZCgnZGF5JywgaSkuc3RhcnRPZignZGF5Jyk7XG4gICAgICBjb25zdCBzZWdtZW50c0ZvclRoaXNEYXk6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50W10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBhcHB0IG9mIGFsbE9yaWdpbmFsQXBwb2ludG1lbnRzKSB7XG4gICAgICAgIGNvbnN0IHNlZ21lbnQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0Q2xvbmVkQXBwb2ludG1lbnRTZWdtZW50T25EYXkoYXBwdCwgY3VycmVudERheSwgMCwgMjQsIHRydWUpO1xuICAgICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICAgIHNlZ21lbnRzRm9yVGhpc0RheS5wdXNoKHNlZ21lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNvcnRlZFNlZ21lbnRzID0gb3JkZXJCeShcbiAgICAgICAgc2VnbWVudHNGb3JUaGlzRGF5LFxuICAgICAgICBbXG4gICAgICAgICAgKHMpID0+IChzLmFsbERheSA/IDAgOiAxKSxcbiAgICAgICAgICAocykgPT4gcy5zdGFydERhdGUuZ2V0VGltZSgpLFxuICAgICAgICAgIChzKSA9PiBzLm9yaWdpbmFsRW5kRGF0ZS5nZXRUaW1lKCkgLSBzLm9yaWdpbmFsU3RhcnREYXRlLmdldFRpbWUoKSxcbiAgICAgICAgXSxcbiAgICAgICAgWydhc2MnLCAnYXNjJywgJ2Rlc2MnXSxcbiAgICAgICk7XG5cbiAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgZGF0ZTogY3VycmVudERheSxcbiAgICAgICAgYXBwb2ludG1lbnRzOiBzb3J0ZWRTZWdtZW50cyxcbiAgICAgICAgaG9saWRheTogdGhpcy5pc0hvbGlkYXkoY3VycmVudERheSksXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG5cbiAgLy8gSW50ZXJuYWwgb3V0cHV0cyB0byBiZSBjYXVnaHQgYnkgcGFyZW50IEFYU2NoZWR1bGVyQ29tcG9uZW50XG4gIHNsb3RDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgc2xvdERibENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBzbG90UmlnaHRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgYXBwb2ludG1lbnRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIGFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBhcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBvbkFwcG9pbnRtZW50RHJvcEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdERyb3BFdmVudD4oKTtcblxuICAvLyAtLS0gRXZlbnQgSGFuZGxlcnMgLS0tXG4gIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRPdXRwdXRNYXAgPSB7XG4gICAgc2xvdDoge1xuICAgICAgY2xpY2s6IHRoaXMuc2xvdENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGRibGNsaWNrOiB0aGlzLnNsb3REYmxDbGlja2VkSW50ZXJuYWwsXG4gICAgICBjb250ZXh0bWVudTogdGhpcy5zbG90UmlnaHRDbGlja2VkSW50ZXJuYWwsXG4gICAgfSxcbiAgICBhcHBvaW50bWVudDoge1xuICAgICAgY2xpY2s6IHRoaXMuYXBwb2ludG1lbnRDbGlja2VkSW50ZXJuYWwsXG4gICAgICBkYmxjbGljazogdGhpcy5hcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGNvbnRleHRtZW51OiB0aGlzLmFwcG9pbnRtZW50UmlnaHRDbGlja2VkSW50ZXJuYWwsXG4gICAgfSxcbiAgfTtcbiAgaGFuZGxlQXBwb2ludG1lbnRFdmVudChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50LCBhcHBvaW50bWVudEl0ZW06IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQpIHtcbiAgICBjb25zdCBvcmlnaW5hbEFwcG9pbnRtZW50ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldE9yaWdpbmFsQXBwb2ludG1lbnQoYXBwb2ludG1lbnRJdGVtKTtcbiAgICBjb25zdCBhcHBvaW50bWVudFJlZiA9IHtcbiAgICAgIC4uLm9yaWdpbmFsQXBwb2ludG1lbnQsXG4gICAgICBlbmREYXRlOiBvcmlnaW5hbEFwcG9pbnRtZW50LmVuZERhdGUsXG4gICAgICBzdGFydERhdGU6IG9yaWdpbmFsQXBwb2ludG1lbnQuc3RhcnREYXRlLFxuICAgIH07XG4gICAgdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmhhbmRsZUV2ZW50KFxuICAgICAgeyBuYXRpdmVFdmVudDogbW91c2VFdmVudCwgYXBwb2ludG1lbnQ6IGFwcG9pbnRtZW50UmVmLCBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyIH0sXG4gICAgICB0aGlzLmV2ZW50T3V0cHV0TWFwLFxuICAgICAgJ2FwcG9pbnRtZW50JyxcbiAgICApO1xuICB9XG4gIGhhbmRsZVNsb3RFdmVudChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50LCBkYXRlOiBBWERhdGVUaW1lKSB7XG4gICAgY29uc3Qgc2xvdERhdGEgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0U2xvdERhdGEoZGF0ZS5zdGFydE9mKCdkYXknKSwgJ2FnZW5kYScpO1xuICAgIGlmIChzbG90RGF0YSkge1xuICAgICAgdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmhhbmRsZUV2ZW50KFxuICAgICAgICB7IG5hdGl2ZUV2ZW50OiBtb3VzZUV2ZW50LCBzbG90OiBzbG90RGF0YSwgc2VuZGVyOiB0aGlzLnNjaGVkdWxlciB9LFxuICAgICAgICB0aGlzLmV2ZW50T3V0cHV0TWFwLFxuICAgICAgICAnc2xvdCcsXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBoYW5kbGVEcm9wKGU6IEFYRHJvcFpvbmVEcm9wRXZlbnQsIGRhdGU6IEFYRGF0ZVRpbWUpIHtcbiAgICBjb25zdCBzbG90RGF0YSA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRTbG90RGF0YShkYXRlLnN0YXJ0T2YoJ2RheScpLCAnYWdlbmRhJyk7XG4gICAgY29uc3QgZHJvcHBlZEl0ZW0gPSBlLmRyb3BwZWQuZHJhZ0RhdGEoKSBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50O1xuICAgIGNvbnN0IG9yaWdpbmFsQXBwb2ludG1lbnQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0T3JpZ2luYWxBcHBvaW50bWVudChkcm9wcGVkSXRlbSk7XG4gICAgY29uc3QgYXBwb2ludG1lbnRSZWYgPSB7XG4gICAgICAuLi5vcmlnaW5hbEFwcG9pbnRtZW50LFxuICAgICAgZW5kRGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5lbmREYXRlLFxuICAgICAgc3RhcnREYXRlOiBvcmlnaW5hbEFwcG9pbnRtZW50LnN0YXJ0RGF0ZSxcbiAgICB9O1xuICAgIHRoaXMub25BcHBvaW50bWVudERyb3BJbnRlcm5hbC5lbWl0KHtcbiAgICAgIGRyb3BFdmVudDogZSxcbiAgICAgIHNsb3Q6IHNsb3REYXRhLFxuICAgICAgc2VuZGVyOiB0aGlzLnNjaGVkdWxlcixcbiAgICAgIGFwcG9pbnRtZW50OiBhcHBvaW50bWVudFJlZixcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpc1RvZGF5KGRhdGU6IEFYRGF0ZVRpbWUpOiBib29sZWFuIHtcbiAgICBjb25zdCB0b2RheSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShuZXcgRGF0ZSgpKTtcbiAgICByZXR1cm4gZGF0ZS5lcXVhbCh0b2RheSwgJ2RheScpO1xuICB9XG4gIHByb3RlY3RlZCBpc0hvbGlkYXkoZGF0ZTogQVhEYXRlVGltZSk6IHsgc3RhdGU6ICdob2xpZGF5JyB8ICd3ZWVrZW5kJyB8ICdub25lJzsgaG9saWRheT86IEFYSG9saWRheURhdGUgfSB7XG4gICAgY29uc3QgaXNIb2xpZGF5ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmlzSG9saWRheShkYXRlKTtcbiAgICBpZiAoaXNIb2xpZGF5KSB7XG4gICAgICBjb25zdCBob2xpZGF5ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuaG9saWRheXMuZmlsdGVyKChkKSA9PiBkYXRlLmVxdWFsKGQuZGF0ZSwgJ2RheScpKVswXTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXRlOiAnaG9saWRheScsXG4gICAgICAgIGhvbGlkYXksXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBpc1dlZWtlbmQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaXNXZWVrZW5kKGRhdGUsIHRoaXMuY2FsZW5kYXIoKSk7XG4gICAgaWYgKGlzV2Vla2VuZCkge1xuICAgICAgcmV0dXJuIHsgc3RhdGU6ICd3ZWVrZW5kJyB9O1xuICAgIH1cbiAgICByZXR1cm4geyBzdGF0ZTogJ25vbmUnIH07XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmF4LXN0YXRlLXJlYWRvbmx5JykgZ2V0IGlzUmVhZG9ubHkoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZG9ubHkoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1hZ2VuZGEtY29udGFpbmVyXCI+XG4gIEBmb3IgKGRheURhdGEgb2YgYWdlbmRhRGF5c0xheW91dCgpOyB0cmFjayBkYXlEYXRhLmRhdGUuZGF0ZS5nZXRUaW1lKCkpIHtcbiAgICA8ZGl2XG4gICAgICBheERyb3Bab25lXG4gICAgICAjem9uZT1cImF4RHJvcFpvbmVcIlxuICAgICAgKG9uRWxlbWVudERyb3ApPVwiaGFuZGxlRHJvcCgkZXZlbnQsIGRheURhdGEuZGF0ZSlcIlxuICAgICAgW2NsYXNzLmF4LXNjaGVkdWxlci1zbG90LWhvdmVyZWRdPVwiem9uZS5pc0hvdmVyZWQoKVwiXG4gICAgICBbY2xhc3MuYXgtc3RhdGUtdG9kYXldPVwiaXNUb2RheShkYXlEYXRhLmRhdGUpXCJcbiAgICAgIFtjbGFzcy5heC1zdGF0ZS1ob2xpZGF5XT1cImRheURhdGEuaG9saWRheS5zdGF0ZSAhPT0gJ25vbmUnXCJcbiAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLWFnZW5kYS12aWV3LWNvbnRhaW5lclwiXG4gICAgICAoY2xpY2spPVwiaGFuZGxlU2xvdEV2ZW50KCRldmVudCwgZGF5RGF0YS5kYXRlKVwiXG4gICAgICAoZGJsY2xpY2spPVwiaGFuZGxlU2xvdEV2ZW50KCRldmVudCwgZGF5RGF0YS5kYXRlKVwiXG4gICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlU2xvdEV2ZW50KCRldmVudCwgZGF5RGF0YS5kYXRlKVwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1hZ2VuZGEtaGVhZGVyLWRhdGUtZGF5XCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItYWdlbmRhLWhlYWRlci1kYXRlLWRheS1jaGFyIGF4LXNjaGVkdWxlci10cnVuY2F0ZVwiXG4gICAgICAgICAgW2F4VG9vbHRpcF09XCJkYXlEYXRhLmhvbGlkYXk/LmhvbGlkYXk/LnRpdGxlID8/ICcnXCJcbiAgICAgICAgICBbYXhUb29sdGlwUGxhY2VtZW50XT1cIid0b3Atc3RhcnQnXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGRheURhdGEuZGF0ZSB8IGZvcm1hdDogJ2RhdGUnIDogeyBmb3JtYXQ6ICdkZGRkJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgICAgQGlmIChkYXlEYXRhLmhvbGlkYXkuc3RhdGUgPT09ICdob2xpZGF5JyAmJiBkYXlEYXRhLmhvbGlkYXkuaG9saWRheS50aXRsZSkge1xuICAgICAgICAgICAgKCB7eyBkYXlEYXRhLmhvbGlkYXkuaG9saWRheS50aXRsZSB9fSApXG4gICAgICAgICAgfVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtc2NoZWR1bGVyLWFnZW5kYS1oZWFkZXItZGF0ZS1kYXktbnVtXCI+XG4gICAgICAgICAge3sgZGF5RGF0YS5kYXRlIHwgZm9ybWF0OiAnZGF0ZScgOiB7IGZvcm1hdDogJ0REJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1hZ2VuZGEtYXBwb2ludG1lbnQtY29udGFpbmVyXCI+XG4gICAgICAgIEBmb3IgKHNlZ21lbnQgb2YgZGF5RGF0YS5hcHBvaW50bWVudHM7IHRyYWNrIHNlZ21lbnQuaWQgKyBzZWdtZW50Lm9yaWdpbmFsU3RhcnREYXRlLmdldFRpbWUoKSkge1xuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGF4RHJhZ1xuICAgICAgICAgICAgW2RyYWdDdXJzb3JdPVwiJ2dyYWInXCJcbiAgICAgICAgICAgIFtkcmFnRGF0YV09XCJzZWdtZW50XCJcbiAgICAgICAgICAgIFtkcmFnVHJhbnNpdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICBbZHJhZ0VsZW1lbnRDbG9uZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtkcmFnRGlzYWJsZWRdPVwiIWRyYWdnYWJsZSgpIHx8IHNlZ21lbnQucmVhZG9ubHkgfHwgcmVhZG9ubHkoKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIHNlZ21lbnQpXCJcbiAgICAgICAgICAgIChkYmxjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgc2VnbWVudClcIlxuICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzZWdtZW50KVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiXG4gICAgICAgICAgICAgIHNlZ21lbnQudGl0bGUgK1xuICAgICAgICAgICAgICAoc2VnbWVudC5hbGxEYXlcbiAgICAgICAgICAgICAgICA/ICcgKEFsbCBEYXkpJ1xuICAgICAgICAgICAgICAgIDogJyAoJyArXG4gICAgICAgICAgICAgICAgICAoc2VnbWVudC5vcmlnaW5hbFN0YXJ0RGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMpICtcbiAgICAgICAgICAgICAgICAgICcgLSAnICtcbiAgICAgICAgICAgICAgICAgIChzZWdtZW50Lm9yaWdpbmFsRW5kRGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMpICtcbiAgICAgICAgICAgICAgICAgICcpJylcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1hZ2VuZGEtYXBwb2ludG1lbnRcIlxuICAgICAgICAgICAgW2NsYXNzLmFsbC1kYXktc2VnbWVudF09XCJzZWdtZW50LmFsbERheVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJzZWdtZW50LmNzc0NsYXNzPz9gYXgtc2NoZWR1bGVyLSR7c2VnbWVudC5wcmlvcml0eT8/J3ByaW1hcnknfS1wZXJpb3JpdHlgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLWFnZW5kYS1hcHBvaW50bWVudC10aW1lXCI+XG4gICAgICAgICAgICAgIEBpZiAoc2VnbWVudC5hbGxEYXkpIHtcbiAgICAgICAgICAgICAgICA8c3Bhbj57eyAnZGF0ZVRpbWUuZHVyYXRpb24uYWxsLWRheScgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICB7eyBzZWdtZW50Lm9yaWdpbmFsU3RhcnREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAgICAtXG4gICAgICAgICAgICAgICAgICB7eyBzZWdtZW50Lm9yaWdpbmFsRW5kRGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBmb3JtYXQ6ICdISDptbScsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YXgtdGl0bGUgY2xhc3M9XCJheC1zY2hlZHVsZXItYWdlbmRhLWFwcG9pbnRtZW50LXRpdGxlIGF4LXNjaGVkdWxlci10cnVuY2F0ZVwiPnt7IHNlZ21lbnQudGl0bGUgfX08L2F4LXRpdGxlPlxuICAgICAgICAgICAgPCEtLSBEZXNjcmlwdGlvbiBjb3VsZCBnbyBoZXJlIGlmIG5lZWRlZCAtLT5cbiAgICAgICAgICAgIDwhLS0gQGlmIChzZWdtZW50LmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgIDxheC1zdWJ0aXRsZT57eyBzZWdtZW50LmRlc2NyaXB0aW9uIH19PC9heC1zdWJ0aXRsZT5cbiAgICAgICAgICAgIH0gLS0+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChkYXlEYXRhLmFwcG9pbnRtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLWFnZW5kYS1uby1hcHBvaW50bWVudHNcIj5cbiAgICAgICAgICAgIHt7ICdub1JlY29yZCcgfCB0cmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG4iXX0=","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXDragDirective, AXDropZoneDirective } from '@acorex/cdk/drag-drop';\nimport { AXDecoratorGenericComponent } from '@acorex/components/decorators';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe, NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, HostBinding, inject, input, output, ViewEncapsulation, } from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport { AXSchedulerComponent, } from '../../scheduler.component';\nimport { AXSchedulerService } from '../../scheduler.service';\nimport * as i0 from \"@angular/core\";\nexport class AXSchedulerDayViewComponent extends NXComponent {\n constructor() {\n super(...arguments);\n this.scheduler = inject(AXSchedulerComponent);\n this.calendarService = inject(AXCalendarService);\n this.schedulerService = inject(AXSchedulerService);\n this.GAP_PX = 1;\n this.readonly = input(false);\n this.draggable = input(true);\n this.calendar = input();\n this.date = input.required();\n this.endDayHour = input.required();\n this.startDayHour = input.required();\n this.appointments = input([]);\n this.processedAppointmentsForLayout = computed(() => {\n const viewDate = this.date();\n const startH = this.startDayHour();\n const endH = this.endDayHour();\n const allAppointmentsInView = this.appointments();\n if (!viewDate || allAppointmentsInView.length === 0) {\n return [];\n }\n const segmentsForThisDay = [];\n for (const appt of allAppointmentsInView) {\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, viewDate, startH, endH);\n if (segment) {\n segmentsForThisDay.push(segment);\n }\n }\n return segmentsForThisDay;\n });\n this.allDayAppointments = computed(() => {\n const originalAllDayAppointments = this.appointments()?.filter((e) => e && e.allDay) ?? [];\n const multiDayBecomingAllDaySegments = this.processedAppointmentsForLayout()?.filter((segment) => segment && segment.allDay && !this.appointments().find((orig) => orig.id === segment.id)?.allDay) ?? [];\n const combined = new Map();\n originalAllDayAppointments.forEach((appt) => combined.set(appt.id, appt));\n multiDayBecomingAllDaySegments.forEach((appt) => {\n if (!combined.has(appt.id)) {\n combined.set(appt.id, appt);\n }\n });\n return Array.from(combined.values());\n });\n this.singleDayAppointments = computed(() => {\n return this.processedAppointmentsForLayout()?.filter((e) => e && !e.allDay) ?? [];\n });\n this.slotClickedInternal = output();\n this.slotDblClickedInternal = output();\n this.slotRightClickedInternal = output();\n this.appointmentClickedInternal = output();\n this.appointmentDblClickedInternal = output();\n this.appointmentRightClickedInternal = output();\n this.onAppointmentDropInternal = output();\n this.eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n this.hoursArray = computed(() => {\n let time = this.date();\n if (!time)\n return [];\n time = time.set('hour', this.startDayHour()).startOf('hour');\n const hours = [time];\n while (time.hour < this.endDayHour() - 1) {\n time = time.add('hour', 1);\n hours.push(time);\n }\n return hours;\n });\n this.appointmentLayouts = computed(() => {\n const layouts = new Map();\n const appointmentsToLayout = this.singleDayAppointments();\n const viewDate = this.date();\n const startH = this.startDayHour();\n const endH = this.endDayHour();\n if (appointmentsToLayout.length === 0 || !viewDate || typeof startH !== 'number' || typeof endH !== 'number') {\n return layouts;\n }\n const concurrencyInfoMap = this.schedulerService.calculateDayViewConcurrencyInfo(appointmentsToLayout, viewDate, startH, endH);\n const sortedAppointments = orderBy(appointmentsToLayout, [(e) => e.startDate.getTime(), (e) => e.originalEndDate.getTime() - e.originalStartDate.getTime()], ['asc', 'desc']);\n const columnsData = [];\n for (const appointmentSegment of sortedAppointments) {\n let assignedCol = -1;\n for (let c = 0;; c++) {\n if (!columnsData[c]) {\n columnsData[c] = { appointments: [] };\n }\n let conflict = false;\n for (const placedSegment of columnsData[c].appointments) {\n const startDate = this.calendarService.create(appointmentSegment.startDate, this.calendar());\n const endDate = this.calendarService.create(appointmentSegment.endDate, this.calendar());\n if (startDate.compare(placedSegment.endDate, 'minute') < 0 &&\n endDate.compare(placedSegment.startDate, 'minute') > 0) {\n conflict = true;\n break;\n }\n }\n if (!conflict) {\n assignedCol = c;\n columnsData[c].appointments.push(appointmentSegment);\n break;\n }\n if (c > appointmentsToLayout.length) {\n console.warn(`DayView: Safety break in column assignment for ${appointmentSegment.title}, assigning to new column ${c}`);\n if (!columnsData[c])\n columnsData[c] = { appointments: [] };\n columnsData[c].appointments.push(appointmentSegment);\n assignedCol = c;\n break;\n }\n }\n const concurrencyInfo = concurrencyInfoMap.get(appointmentSegment.id);\n const effectiveCols = concurrencyInfo ? concurrencyInfo.effectiveTotalColumns : 1;\n layouts.set(appointmentSegment.id, {\n columnIndex: assignedCol,\n effectiveTotalColumns: effectiveCols,\n });\n }\n return layouts;\n });\n }\n handleAppointmentEvent(mouseEvent, appointment) {\n const originalAppointment = appointment.originalStartDate\n ? {\n ...appointment,\n startDate: appointment.originalStartDate,\n endDate: appointment.originalEndDate,\n }\n : appointment;\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, appointment: appointmentRef, sender: this.scheduler }, this.eventOutputMap, 'appointment');\n }\n handleSingleSlotEvent(mouseEvent, startDate) {\n const slotData = this.schedulerService.getSlotData(startDate, 'day');\n if (slotData)\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler }, this.eventOutputMap, 'slot');\n }\n handleAllDaySlotEvent(mouseEvent) {\n const endDate = this.date().endOf('day');\n const startDate = this.date().startOf('day');\n const slotData = { startDate, endDate, view: 'day' };\n if (slotData)\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler }, this.eventOutputMap, 'slot');\n }\n handleAllDayDrop(e) {\n const endDate = this.date().endOf('day');\n const startDate = this.date().startOf('day');\n const slotData = { startDate, endDate, view: 'day' };\n const droppedAppt = e.dropped.dragData();\n const originalDroppedAppt = droppedAppt.originalStartDate\n ? {\n ...droppedAppt,\n startDate: droppedAppt.originalStartDate,\n endDate: droppedAppt.originalEndDate,\n }\n : droppedAppt;\n const appointmentRef = {\n ...originalDroppedAppt,\n endDate: originalDroppedAppt.endDate,\n startDate: originalDroppedAppt.startDate,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n });\n }\n handleSingleDayDrop(e, startDate) {\n const slotData = this.schedulerService.getSlotData(startDate, 'day');\n const droppedAppt = e.dropped.dragData();\n const originalDroppedAppt = droppedAppt.originalStartDate\n ? {\n ...droppedAppt,\n startDate: droppedAppt.originalStartDate,\n endDate: droppedAppt.originalEndDate,\n }\n : droppedAppt;\n const appointmentRef = {\n ...originalDroppedAppt,\n endDate: originalDroppedAppt.endDate,\n startDate: originalDroppedAppt.startDate,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n });\n }\n getAppointmentLayout(key) {\n return this.appointmentLayouts().get(key);\n }\n getAppointmentLeft(key) {\n const layout = this.getAppointmentLayout(key);\n if (layout && layout.effectiveTotalColumns > 0) {\n const N = layout.effectiveTotalColumns;\n const C = layout.columnIndex;\n if (C < 0) {\n console.warn('Invalid columnIndex < 0 for key:', key);\n return '0px';\n }\n if (C === 0 || N <= 1)\n return '0px';\n const leftPercent = C * (100 / N);\n const gapOffsetPx = C * this.GAP_PX;\n return `calc(${leftPercent}% + ${gapOffsetPx}px)`;\n }\n return '0px';\n }\n getAppointmentWidth(key) {\n const layout = this.getAppointmentLayout(key);\n if (layout && layout.effectiveTotalColumns > 0) {\n const N = layout.effectiveTotalColumns;\n if (N <= 0)\n return '0%';\n if (N === 1)\n return `calc(100% - ${this.GAP_PX}px)`;\n const widthPercent = (1 / N) * 100;\n return `calc(${widthPercent}% - ${this.GAP_PX}px)`;\n }\n return '0%';\n }\n getAppointmentTop(key) {\n const appointmentSegment = this.singleDayAppointments().find((e) => e.id === key);\n if (appointmentSegment) {\n const startMinutes = appointmentSegment.startDate.getHours() * 60 + appointmentSegment.startDate.getMinutes();\n const startBlockOffset = startMinutes - this.startDayHour() * 60;\n const yBlock = startBlockOffset / 30;\n return `calc(var(--ax-comp-scheduler-basic-view-blocks-height) * ${yBlock} + 1px)`;\n }\n return '';\n }\n getAppointmentHeight(key) {\n const appointmentSegment = this.singleDayAppointments().find((e) => e.id === key);\n if (appointmentSegment) {\n const durationMillis = appointmentSegment.endDate.getTime() - appointmentSegment.startDate.getTime();\n const durationMinutes = Math.max(0, durationMillis / (1000 * 60));\n if (durationMinutes <= 0)\n return '0px';\n const heightBlock = durationMinutes / 30;\n const blockHeightExpr = `var(--ax-comp-scheduler-basic-view-blocks-height)`;\n return `calc(${blockHeightExpr} * ${heightBlock} - ${this.GAP_PX}px)`;\n }\n return '0px';\n }\n get isReadonly() {\n return this.readonly();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerDayViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.4\", type: AXSchedulerDayViewComponent, isStandalone: true, selector: \"ax-scheduler-day-view\", inputs: { readonly: { classPropertyName: \"readonly\", publicName: \"readonly\", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: \"draggable\", publicName: \"draggable\", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: \"calendar\", publicName: \"calendar\", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: \"date\", publicName: \"date\", isSignal: true, isRequired: true, transformFunction: null }, endDayHour: { classPropertyName: \"endDayHour\", publicName: \"endDayHour\", isSignal: true, isRequired: true, transformFunction: null }, startDayHour: { classPropertyName: \"startDayHour\", publicName: \"startDayHour\", isSignal: true, isRequired: true, transformFunction: null }, appointments: { classPropertyName: \"appointments\", publicName: \"appointments\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: \"slotClickedInternal\", slotDblClickedInternal: \"slotDblClickedInternal\", slotRightClickedInternal: \"slotRightClickedInternal\", appointmentClickedInternal: \"appointmentClickedInternal\", appointmentDblClickedInternal: \"appointmentDblClickedInternal\", appointmentRightClickedInternal: \"appointmentRightClickedInternal\", onAppointmentDropInternal: \"onAppointmentDropInternal\" }, host: { properties: { \"class.ax-state-readonly\": \"this.isReadonly\" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerDayViewComponent }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-scheduler-day-header\\\">\\n <div class=\\\"ax-scheduler-day-header-table\\\" aria-hidden=\\\"true\\\">\\n <div>\\n {{ 'dateTime.duration.all-day' | translate | async }}\\n </div>\\n </div>\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleAllDayDrop($event)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n (click)=\\\"handleAllDaySlotEvent($event)\\\"\\n (dblclick)=\\\"handleAllDaySlotEvent($event)\\\"\\n (contextmenu)=\\\"handleAllDaySlotEvent($event)\\\"\\n class=\\\"ax-scheduler-day-header-table-container\\\"\\n >\\n <div class=\\\"ax-scheduler-day-header-appointment-container\\\">\\n @if (allDayAppointments().length) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || allDayAppointments()[0].readonly || readonly()\\\"\\n [dragData]=\\\"allDayAppointments()[0]\\\"\\n (click)=\\\"handleAppointmentEvent($event, allDayAppointments()[0])\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, allDayAppointments()[0])\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, allDayAppointments()[0])\\\"\\n [title]=\\\"allDayAppointments()[0].title\\\"\\n class=\\\"ax-scheduler-header-day-appointment\\\"\\n [ngClass]=\\\"allDayAppointments()[0].cssClass??`ax-scheduler-${allDayAppointments()[0].priority??'primary'}-periority`\\\"\\n >\\n <ax-title class=\\\"ax-scheduler-truncate\\\">{{ allDayAppointments()[0].title }}</ax-title>\\n <ax-subtitle>\\n {{ allDayAppointments()[0].startDate | format: 'date' : { calendar: calendar() } | async }}\\n -\\n {{ allDayAppointments()[0].endDate | format: 'date' : { calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n @if (allDayAppointments().length > 1) {\\n <div\\n #moreAppointments\\n class=\\\"ax-scheduler-day-header-more-tag\\\"\\n [ngClass]=\\\"allDayAppointments()[1].cssClass??`ax-scheduler-${allDayAppointments()[1].priority??'primary'}-periority`\\\"\\n >\\n {{ 'more-items' | translate: { params: { number: allDayAppointments().length - 1 } } | async }}\\n </div>\\n <ax-popover [target]=\\\"moreAppointments\\\" [placement]=\\\"'bottom'\\\">\\n <div class=\\\"ax-overlay-pane ax-scheduler-popover\\\" [class.ax-state-readonly]=\\\"readonly()\\\">\\n @for (appointment of allDayAppointments(); track appointment.id; let first = $first) {\\n @if (!first) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"appointment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || appointment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n [title]=\\\"appointment.title\\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [ngClass]=\\\"appointment.cssClass??`ax-scheduler-${appointment.priority??'primary'}-periority`\\\"\\n >\\n <ax-title class=\\\"ax-scheduler-truncate\\\">{{ appointment.title }}</ax-title>\\n <ax-subtitle>\\n {{ appointment.startDate | format: 'date' : { calendar: calendar() } | async }}\\n -\\n {{ appointment.endDate | format: 'date' : { calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n }\\n </div>\\n </ax-popover>\\n }\\n </div>\\n </div>\\n</div>\\n\\n<div class=\\\"ax-scheduler-day-time-container\\\">\\n <table class=\\\"ax-scheduler-day-time\\\" aria-hidden=\\\"true\\\" [border]=\\\"1\\\">\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <div>\\n {{ time | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </div>\\n }\\n </table>\\n <div class=\\\"ax-scheduler-day-table-container\\\">\\n <div class=\\\"ax-scheduler-day-appointment-container\\\">\\n @for (appointment of singleDayAppointments(); track appointment.id) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"appointment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || appointment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n [title]=\\\"appointment.title\\\"\\n class=\\\"ax-scheduler-day-appointment\\\"\\n [style.width]=\\\"getAppointmentWidth(appointment.id)\\\"\\n [style.height]=\\\"getAppointmentHeight(appointment.id)\\\"\\n [style.inset-block-start]=\\\"getAppointmentTop(appointment.id)\\\"\\n [style.inset-inline-start]=\\\"getAppointmentLeft(appointment.id)\\\"\\n [ngClass]=\\\"appointment.cssClass??`ax-scheduler-${appointment.priority??'primary'}-periority`\\\"\\n >\\n <ax-title class=\\\"ax-scheduler-truncate\\\">{{ appointment.title }}</ax-title>\\n <ax-subtitle>\\n {{ appointment.originalStartDate | format: 'time' : { calendar: calendar() } | async }} -\\n {{ appointment.originalEndDate | format: 'time' : { calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n </div>\\n <div aria-hidden=\\\"true\\\" class=\\\"ax-scheduler-day-slot\\\">\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleSingleDayDrop($event, time)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n (click)=\\\"handleSingleSlotEvent($event, time)\\\"\\n (dblclick)=\\\"handleSingleSlotEvent($event, time)\\\"\\n (contextmenu)=\\\"handleSingleSlotEvent($event, time)\\\"\\n ></div>\\n <div\\n axDropZone\\n #zone2=\\\"axDropZone\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone2.isHovered()\\\"\\n (onElementDrop)=\\\"handleSingleDayDrop($event, time.add('minute', 30))\\\"\\n (click)=\\\"handleSingleSlotEvent($event, time.add('minute', 30))\\\"\\n (dblclick)=\\\"handleSingleSlotEvent($event, time.add('minute', 30))\\\"\\n (contextmenu)=\\\"handleSingleSlotEvent($event, time.add('minute', 30))\\\"\\n ></div>\\n }\\n </div>\\n </div>\\n</div>\\n\", styles: [\"ax-scheduler-day-view{display:block;position:relative;background-color:inherit;min-width:var(--ax-comp-scheduler-width)}ax-scheduler-day-view .ax-scheduler-day-header{top:0;z-index:3;width:100%;display:flex;position:sticky;background-color:var(--ax-comp-scheduler-all-day-bg, inherit);border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table{z-index:3;position:sticky;inset-inline-start:0;background-color:inherit}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table div{display:flex;align-items:center;justify-content:center;width:var(--ax-comp-scheduler-basic-view-blocks-width);height:var(--ax-comp-scheduler-basic-view-blocks-height);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container{width:100%;display:flex}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container{gap:1rem;display:flex;width:calc(100% - 2.5rem)}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container .ax-scheduler-header-day-appointment{width:100%;display:flex;overflow:hidden;flex-direction:column;padding-inline:.5rem;justify-content:center;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container .ax-scheduler-day-header-more-tag{display:flex;cursor:pointer;text-wrap:nowrap;flex-direction:column;padding-inline:.5rem;justify-content:center;border-radius:var(--ax-sys-border-radius)}ax-scheduler-day-view .ax-scheduler-day-time-container{width:100%;display:flex;background-color:inherit}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-time{z-index:2;position:sticky;inset-inline-start:0;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-time div{display:block;text-align:center;padding-inline:.5rem;width:var(--ax-comp-scheduler-basic-view-blocks-width);height:calc(var(--ax-comp-scheduler-basic-view-blocks-height) * 2);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container{width:100%;position:relative}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-appointment-container{top:0;position:absolute;width:calc(100% - 2.5rem)}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-appointment-container .ax-scheduler-day-appointment{width:100%;display:flex;overflow:hidden;position:absolute;inset-inline-start:0;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-slot{width:100%}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-slot div{height:var(--ax-comp-scheduler-basic-view-blocks-height);display:block;padding-inline:.5rem;border-block-start:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-slot div:first-child{border-block-start-width:0}ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-header-day-appointment,ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-appointment{cursor:pointer}ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-header-table-container,ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-slot>div{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-header-table-container:hover,ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-slot>div:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}\\n\"], dependencies: [{ kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"component\", type: AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: AXTranslatorPipe, name: \"translate\" }, { kind: \"component\", type: AXPopoverComponent, selector: \"ax-popover\", inputs: [\"offsetX\", \"offsetY\", \"target\", \"placement\", \"content\", \"openOn\", \"closeOn\", \"hasBackdrop\", \"openAfter\", \"closeAfter\", \"backdropClass\", \"panelClass\", \"adaptivityEnabled\"], outputs: [\"onOpened\", \"onClosed\"] }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }, { kind: \"directive\", type: AXDragDirective, selector: \"[axDrag]\", inputs: [\"dragData\", \"dragDisabled\", \"dragTransition\", \"dragElementClone\", \"dropZoneGroup\", \"dragStartDelay\", \"dragResetOnDblClick\", \"dragLockAxis\", \"dragClonedTemplate\", \"dragCursor\", \"dragBoundary\", \"dragTransitionDuration\"], outputs: [\"dragPositionChanged\"] }, { kind: \"directive\", type: AXDropZoneDirective, selector: \"[axDropZone]\", inputs: [\"dropZoneGroup\"], outputs: [\"onElementDrop\", \"onElementHover\"], exportAs: [\"axDropZone\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerDayViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-scheduler-day-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [\n NgClass,\n AXDecoratorGenericComponent,\n AsyncPipe,\n AXTranslatorPipe,\n AXPopoverComponent,\n AXFormatPipe,\n AXDragDirective,\n AXDropZoneDirective,\n ], providers: [{ provide: AXComponent, useExisting: AXSchedulerDayViewComponent }], template: \"<div class=\\\"ax-scheduler-day-header\\\">\\n <div class=\\\"ax-scheduler-day-header-table\\\" aria-hidden=\\\"true\\\">\\n <div>\\n {{ 'dateTime.duration.all-day' | translate | async }}\\n </div>\\n </div>\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleAllDayDrop($event)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n (click)=\\\"handleAllDaySlotEvent($event)\\\"\\n (dblclick)=\\\"handleAllDaySlotEvent($event)\\\"\\n (contextmenu)=\\\"handleAllDaySlotEvent($event)\\\"\\n class=\\\"ax-scheduler-day-header-table-container\\\"\\n >\\n <div class=\\\"ax-scheduler-day-header-appointment-container\\\">\\n @if (allDayAppointments().length) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || allDayAppointments()[0].readonly || readonly()\\\"\\n [dragData]=\\\"allDayAppointments()[0]\\\"\\n (click)=\\\"handleAppointmentEvent($event, allDayAppointments()[0])\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, allDayAppointments()[0])\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, allDayAppointments()[0])\\\"\\n [title]=\\\"allDayAppointments()[0].title\\\"\\n class=\\\"ax-scheduler-header-day-appointment\\\"\\n [ngClass]=\\\"allDayAppointments()[0].cssClass??`ax-scheduler-${allDayAppointments()[0].priority??'primary'}-periority`\\\"\\n >\\n <ax-title class=\\\"ax-scheduler-truncate\\\">{{ allDayAppointments()[0].title }}</ax-title>\\n <ax-subtitle>\\n {{ allDayAppointments()[0].startDate | format: 'date' : { calendar: calendar() } | async }}\\n -\\n {{ allDayAppointments()[0].endDate | format: 'date' : { calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n @if (allDayAppointments().length > 1) {\\n <div\\n #moreAppointments\\n class=\\\"ax-scheduler-day-header-more-tag\\\"\\n [ngClass]=\\\"allDayAppointments()[1].cssClass??`ax-scheduler-${allDayAppointments()[1].priority??'primary'}-periority`\\\"\\n >\\n {{ 'more-items' | translate: { params: { number: allDayAppointments().length - 1 } } | async }}\\n </div>\\n <ax-popover [target]=\\\"moreAppointments\\\" [placement]=\\\"'bottom'\\\">\\n <div class=\\\"ax-overlay-pane ax-scheduler-popover\\\" [class.ax-state-readonly]=\\\"readonly()\\\">\\n @for (appointment of allDayAppointments(); track appointment.id; let first = $first) {\\n @if (!first) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"appointment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || appointment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n [title]=\\\"appointment.title\\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [ngClass]=\\\"appointment.cssClass??`ax-scheduler-${appointment.priority??'primary'}-periority`\\\"\\n >\\n <ax-title class=\\\"ax-scheduler-truncate\\\">{{ appointment.title }}</ax-title>\\n <ax-subtitle>\\n {{ appointment.startDate | format: 'date' : { calendar: calendar() } | async }}\\n -\\n {{ appointment.endDate | format: 'date' : { calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n }\\n </div>\\n </ax-popover>\\n }\\n </div>\\n </div>\\n</div>\\n\\n<div class=\\\"ax-scheduler-day-time-container\\\">\\n <table class=\\\"ax-scheduler-day-time\\\" aria-hidden=\\\"true\\\" [border]=\\\"1\\\">\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <div>\\n {{ time | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </div>\\n }\\n </table>\\n <div class=\\\"ax-scheduler-day-table-container\\\">\\n <div class=\\\"ax-scheduler-day-appointment-container\\\">\\n @for (appointment of singleDayAppointments(); track appointment.id) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"appointment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || appointment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n [title]=\\\"appointment.title\\\"\\n class=\\\"ax-scheduler-day-appointment\\\"\\n [style.width]=\\\"getAppointmentWidth(appointment.id)\\\"\\n [style.height]=\\\"getAppointmentHeight(appointment.id)\\\"\\n [style.inset-block-start]=\\\"getAppointmentTop(appointment.id)\\\"\\n [style.inset-inline-start]=\\\"getAppointmentLeft(appointment.id)\\\"\\n [ngClass]=\\\"appointment.cssClass??`ax-scheduler-${appointment.priority??'primary'}-periority`\\\"\\n >\\n <ax-title class=\\\"ax-scheduler-truncate\\\">{{ appointment.title }}</ax-title>\\n <ax-subtitle>\\n {{ appointment.originalStartDate | format: 'time' : { calendar: calendar() } | async }} -\\n {{ appointment.originalEndDate | format: 'time' : { calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n </div>\\n <div aria-hidden=\\\"true\\\" class=\\\"ax-scheduler-day-slot\\\">\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleSingleDayDrop($event, time)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n (click)=\\\"handleSingleSlotEvent($event, time)\\\"\\n (dblclick)=\\\"handleSingleSlotEvent($event, time)\\\"\\n (contextmenu)=\\\"handleSingleSlotEvent($event, time)\\\"\\n ></div>\\n <div\\n axDropZone\\n #zone2=\\\"axDropZone\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone2.isHovered()\\\"\\n (onElementDrop)=\\\"handleSingleDayDrop($event, time.add('minute', 30))\\\"\\n (click)=\\\"handleSingleSlotEvent($event, time.add('minute', 30))\\\"\\n (dblclick)=\\\"handleSingleSlotEvent($event, time.add('minute', 30))\\\"\\n (contextmenu)=\\\"handleSingleSlotEvent($event, time.add('minute', 30))\\\"\\n ></div>\\n }\\n </div>\\n </div>\\n</div>\\n\", styles: [\"ax-scheduler-day-view{display:block;position:relative;background-color:inherit;min-width:var(--ax-comp-scheduler-width)}ax-scheduler-day-view .ax-scheduler-day-header{top:0;z-index:3;width:100%;display:flex;position:sticky;background-color:var(--ax-comp-scheduler-all-day-bg, inherit);border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table{z-index:3;position:sticky;inset-inline-start:0;background-color:inherit}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table div{display:flex;align-items:center;justify-content:center;width:var(--ax-comp-scheduler-basic-view-blocks-width);height:var(--ax-comp-scheduler-basic-view-blocks-height);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container{width:100%;display:flex}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container{gap:1rem;display:flex;width:calc(100% - 2.5rem)}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container .ax-scheduler-header-day-appointment{width:100%;display:flex;overflow:hidden;flex-direction:column;padding-inline:.5rem;justify-content:center;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container .ax-scheduler-day-header-more-tag{display:flex;cursor:pointer;text-wrap:nowrap;flex-direction:column;padding-inline:.5rem;justify-content:center;border-radius:var(--ax-sys-border-radius)}ax-scheduler-day-view .ax-scheduler-day-time-container{width:100%;display:flex;background-color:inherit}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-time{z-index:2;position:sticky;inset-inline-start:0;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-time div{display:block;text-align:center;padding-inline:.5rem;width:var(--ax-comp-scheduler-basic-view-blocks-width);height:calc(var(--ax-comp-scheduler-basic-view-blocks-height) * 2);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container{width:100%;position:relative}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-appointment-container{top:0;position:absolute;width:calc(100% - 2.5rem)}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-appointment-container .ax-scheduler-day-appointment{width:100%;display:flex;overflow:hidden;position:absolute;inset-inline-start:0;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-slot{width:100%}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-slot div{height:var(--ax-comp-scheduler-basic-view-blocks-height);display:block;padding-inline:.5rem;border-block-start:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-slot div:first-child{border-block-start-width:0}ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-header-day-appointment,ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-appointment{cursor:pointer}ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-header-table-container,ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-slot>div{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-header-table-container:hover,ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-slot>div:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}\\n\"] }]\n }], propDecorators: { isReadonly: [{\n type: HostBinding,\n args: ['class.ax-state-readonly']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLWRheS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NyYy9saWIvdmlld3MvZGF5L3NjaGVkdWxlci1kYXktdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3ZpZXdzL2RheS9zY2hlZHVsZXItZGF5LXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUF1QixNQUFNLHVCQUF1QixDQUFDO0FBQ2xHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBYyxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04saUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFNcEMsT0FBTyxFQUVMLG9CQUFvQixHQUdyQixNQUFNLDJCQUEy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d0JBQ2YsbUJBQW1CO3FCQUNwQixhQUNVLENBQUMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsNkJBQTZCLEVBQUUsQ0FBQzs4QkF1VG5DLFVBQVU7c0JBQXJELFdBQVc7dUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhDb21wb25lbnQsIE5YQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYRHJhZ0RpcmVjdGl2ZSwgQVhEcm9wWm9uZURpcmVjdGl2ZSwgQVhEcm9wWm9uZURyb3BFdmVudCB9IGZyb20gJ0BhY29yZXgvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBBWERlY29yYXRvckdlbmVyaWNDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBBWFBvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvcG9wb3Zlcic7XG5pbXBvcnQgeyBBWENhbGVuZGFyU2VydmljZSwgQVhEYXRlVGltZSB9IGZyb20gJ0BhY29yZXgvY29yZS9kYXRlLXRpbWUnO1xuaW1wb3J0IHsgQVhGb3JtYXRQaXBlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2Zvcm1hdCc7XG5pbXBvcnQgeyBBWFRyYW5zbGF0b3JQaXBlIH0gZnJvbSAnQGFjb3JleC9jb3JlL3RyYW5zbGF0aW9uJztcbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgSG9zdEJpbmRpbmcsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgb3JkZXJCeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge1xuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50LFxuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCxcbiAgQVhTY2hlZHVsZXJEYXlBcHBvaW50bWVudExheW91dCxcbn0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLmNsYXNzJztcbmltcG9ydCB7XG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50LFxuICBBWFNjaGVkdWxlckNvbXBvbmVudCxcbiAgQVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50LFxuICBBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50LFxufSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEFYU2NoZWR1bGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NjaGVkdWxlci5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtc2NoZWR1bGVyLWRheS12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NjaGVkdWxlci1kYXktdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9zY2hlZHVsZXItZGF5LXZpZXcuY29tcG9uZW50LnNjc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW1xuICAgIE5nQ2xhc3MsXG4gICAgQVhEZWNvcmF0b3JHZW5lcmljQ29tcG9uZW50LFxuICAgIEFzeW5jUGlwZSxcbiAgICBBWFRyYW5zbGF0b3JQaXBlLFxuICAgIEFYUG9wb3ZlckNvbXBvbmVudCxcbiAgICBBWEZvcm1hdFBpcGUsXG4gICAgQVhEcmFnRGlyZWN0aXZlLFxuICAgIEFYRHJvcFpvbmVEaXJlY3RpdmUsXG4gIF0sXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogQVhDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBBWFNjaGVkdWxlckRheVZpZXdDb21wb25lbnQgfV0sXG59KVxuZXhwb3J0IGNsYXNzIEFYU2NoZWR1bGVyRGF5Vmlld0NvbXBvbmVudCBleHRlbmRzIE5YQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBzY2hlZHVsZXIgPSBpbmplY3QoQVhTY2hlZHVsZXJDb21wb25lbnQpO1xuICBwcml2YXRlIGNhbGVuZGFyU2VydmljZSA9IGluamVjdChBWENhbGVuZGFyU2VydmljZSk7XG4gIHByaXZhdGUgc2NoZWR1bGVyU2VydmljZSA9IGluamVjdChBWFNjaGVkdWxlclNlcnZpY2UpO1xuXG4gIHJlYWRvbmx5IEdBUF9QWCA9IDE7XG5cbiAgcmVhZG9ubHkgPSBpbnB1dChmYWxzZSk7XG4gIGRyYWdnYWJsZSA9IGlucHV0KHRydWUpO1xuICBjYWxlbmRhciA9IGlucHV0PHN0cmluZz4oKTtcbiAgZGF0ZSA9IGlucHV0LnJlcXVpcmVkPEFYRGF0ZVRpbWU+KCk7XG4gIGVuZERheUhvdXIgPSBpbnB1dC5yZXF1aXJlZDxudW1iZXI+KCk7XG4gIHN0YXJ0RGF5SG91ciA9IGlucHV0LnJlcXVpcmVkPG51bWJlcj4oKTtcbiAgYXBwb2ludG1lbnRzID0gaW5wdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudFtdPihbXSk7XG5cbiAgcHJvY2Vzc2VkQXBwb2ludG1lbnRzRm9yTGF5b3V0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHZpZXdEYXRlID0gdGhpcy5kYXRlKCk7XG4gICAgY29uc3Qgc3RhcnRIID0gdGhpcy5zdGFydERheUhvdXIoKTtcbiAgICBjb25zdCBlbmRIID0gdGhpcy5lbmREYXlIb3VyKCk7XG4gICAgY29uc3QgYWxsQXBwb2ludG1lbnRzSW5WaWV3ID0gdGhpcy5hcHBvaW50bWVudHMoKTtcbiAgICBpZiAoIXZpZXdEYXRlIHx8IGFsbEFwcG9pbnRtZW50c0luVmlldy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3Qgc2VnbWVudHNGb3JUaGlzRGF5OiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdID0gW107XG4gICAgZm9yIChjb25zdCBhcHB0IG9mIGFsbEFwcG9pbnRtZW50c0luVmlldykge1xuICAgICAgY29uc3Qgc2VnbWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRDbG9uZWRBcHBvaW50bWVudFNlZ21lbnRPbkRheShhcHB0LCB2aWV3RGF0ZSwgc3RhcnRILCBlbmRIKTtcbiAgICAgIGlmIChzZWdtZW50KSB7XG4gICAgICAgIHNlZ21lbnRzRm9yVGhpc0RheS5wdXNoKHNlZ21lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2VnbWVudHNGb3JUaGlzRGF5O1xuICB9KTtcbiAgYWxsRGF5QXBwb2ludG1lbnRzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsQWxsRGF5QXBwb2ludG1lbnRzID0gdGhpcy5hcHBvaW50bWVudHMoKT8uZmlsdGVyKChlKSA9PiBlICYmIGUuYWxsRGF5KSA/PyBbXTtcbiAgICBjb25zdCBtdWx0aURheUJlY29taW5nQWxsRGF5U2VnbWVudHMgPVxuICAgICAgdGhpcy5wcm9jZXNzZWRBcHBvaW50bWVudHNGb3JMYXlvdXQoKT8uZmlsdGVyKFxuICAgICAgICAoc2VnbWVudCkgPT4gc2VnbWVudCAmJiBzZWdtZW50LmFsbERheSAmJiAhdGhpcy5hcHBvaW50bWVudHMoKS5maW5kKChvcmlnKSA9PiBvcmlnLmlkID09PSBzZWdtZW50LmlkKT8uYWxsRGF5LFxuICAgICAgKSA/PyBbXTtcbiAgICBjb25zdCBjb21iaW5lZCA9IG5ldyBNYXA8YW55LCBBWFNjaGVkdWxlckFwcG9pbnRtZW50PigpO1xuICAgIG9yaWdpbmFsQWxsRGF5QXBwb2ludG1lbnRzLmZvckVhY2goKGFwcHQpID0+IGNvbWJpbmVkLnNldChhcHB0LmlkLCBhcHB0KSk7XG4gICAgbXVsdGlEYXlCZWNvbWluZ0FsbERheVNlZ21lbnRzLmZvckVhY2goKGFwcHQpID0+IHtcbiAgICAgIGlmICghY29tYmluZWQuaGFzKGFwcHQuaWQpKSB7XG4gICAgICAgIGNvbWJpbmVkLnNldChhcHB0LmlkLCBhcHB0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShjb21iaW5lZC52YWx1ZXMoKSk7XG4gIH0pO1xuICBzaW5nbGVEYXlBcHBvaW50bWVudHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc2VkQXBwb2ludG1lbnRzRm9yTGF5b3V0KCk/LmZpbHRlcigoZSkgPT4gZSAmJiAhZS5hbGxEYXkpID8/IFtdO1xuICB9KTtcblxuICBzbG90Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIHNsb3REYmxDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgc2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIGFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBhcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgb25BcHBvaW50bWVudERyb3BJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3REcm9wRXZlbnQ+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBldmVudE91dHB1dE1hcCA9IHtcbiAgICBzbG90OiB7XG4gICAgICBjbGljazogdGhpcy5zbG90Q2xpY2tlZEludGVybmFsLFxuICAgICAgZGJsY2xpY2s6IHRoaXMuc2xvdERibENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGNvbnRleHRtZW51OiB0aGlzLnNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCxcbiAgICB9LFxuICAgIGFwcG9pbnRtZW50OiB7XG4gICAgICBjbGljazogdGhpcy5hcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGRibGNsaWNrOiB0aGlzLmFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsLFxuICAgICAgY29udGV4dG1lbnU6IHRoaXMuYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCxcbiAgICB9LFxuICB9O1xuICBoYW5kbGVBcHBvaW50bWVudEV2ZW50KG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQsIGFwcG9pbnRtZW50OiBBWFNjaGVkdWxlckFwcG9pbnRtZW50KSB7XG4gICAgY29uc3Qgb3JpZ2luYWxBcHBvaW50bWVudCA9IChhcHBvaW50bWVudCBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCkub3JpZ2luYWxTdGFydERhdGVcbiAgICAgID8gKHtcbiAgICAgICAgICAuLi5hcHBvaW50bWVudCxcbiAgICAgICAgICBzdGFydERhdGU6IChhcHBvaW50bWVudCBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCkub3JpZ2luYWxTdGFydERhdGUsXG4gICAgICAgICAgZW5kRGF0ZTogKGFwcG9pbnRtZW50IGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50KS5vcmlnaW5hbEVuZERhdGUsXG4gICAgICAgIH0gYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudClcbiAgICAgIDogYXBwb2ludG1lbnQ7XG4gICAgY29uc3QgYXBwb2ludG1lbnRSZWYgPSB7XG4gICAgICAuLi5vcmlnaW5hbEFwcG9pbnRtZW50LFxuICAgICAgZW5kRGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5lbmREYXRlLFxuICAgICAgc3RhcnREYXRlOiBvcmlnaW5hbEFwcG9pbnRtZW50LnN0YXJ0RGF0ZSxcbiAgICB9O1xuICAgIHRoaXMuc2NoZWR1bGVyU2VydmljZS5oYW5kbGVFdmVudChcbiAgICAgIHsgbmF0aXZlRXZlbnQ6IG1vdXNlRXZlbnQsIGFwcG9pbnRtZW50OiBhcHBvaW50bWVudFJlZiwgc2VuZGVyOiB0aGlzLnNjaGVkdWxlciB9LFxuICAgICAgdGhpcy5ldmVudE91dHB1dE1hcCxcbiAgICAgICdhcHBvaW50bWVudCcsXG4gICAgKTtcbiAgfVxuICBoYW5kbGVTaW5nbGVTbG90RXZlbnQobW91c2VFdmVudDogTW91c2VFdmVudCwgc3RhcnREYXRlOiBBWERhdGVUaW1lKSB7XG4gICAgY29uc3Qgc2xvdERhdGEgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0U2xvdERhdGEoc3RhcnREYXRlLCAnZGF5Jyk7XG4gICAgaWYgKHNsb3REYXRhKVxuICAgICAgdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmhhbmRsZUV2ZW50KFxuICAgICAgICB7IG5hdGl2ZUV2ZW50OiBtb3VzZUV2ZW50LCBzbG90OiBzbG90RGF0YSwgc2VuZGVyOiB0aGlzLnNjaGVkdWxlciB9LFxuICAgICAgICB0aGlzLmV2ZW50T3V0cHV0TWFwLFxuICAgICAgICAnc2xvdCcsXG4gICAgICApO1xuICB9XG4gIGhhbmRsZUFsbERheVNsb3RFdmVudChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgY29uc3QgZW5kRGF0ZSA9IHRoaXMuZGF0ZSgpLmVuZE9mKCdkYXknKTtcbiAgICBjb25zdCBzdGFydERhdGUgPSB0aGlzLmRhdGUoKS5zdGFydE9mKCdkYXknKTtcbiAgICBjb25zdCBzbG90RGF0YSA9IHsgc3RhcnREYXRlLCBlbmREYXRlLCB2aWV3OiAnZGF5JyBhcyBjb25zdCB9O1xuICAgIGlmIChzbG90RGF0YSlcbiAgICAgIHRoaXMuc2NoZWR1bGVyU2VydmljZS5oYW5kbGVFdmVudChcbiAgICAgICAgeyBuYXRpdmVFdmVudDogbW91c2VFdmVudCwgc2xvdDogc2xvdERhdGEsIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIgfSxcbiAgICAgICAgdGhpcy5ldmVudE91dHB1dE1hcCxcbiAgICAgICAgJ3Nsb3QnLFxuICAgICAgKTtcbiAgfVxuICBoYW5kbGVBbGxEYXlEcm9wKGU6IEFYRHJvcFpvbmVEcm9wRXZlbnQpIHtcbiAgICBjb25zdCBlbmREYXRlID0gdGhpcy5kYXRlKCkuZW5kT2YoJ2RheScpO1xuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHRoaXMuZGF0ZSgpLnN0YXJ0T2YoJ2RheScpO1xuICAgIGNvbnN0IHNsb3REYXRhID0geyBzdGFydERhdGUsIGVuZERhdGUsIHZpZXc6ICdkYXknIGFzIGNvbnN0IH07XG5cbiAgICBjb25zdCBkcm9wcGVkQXBwdCA9IGUuZHJvcHBlZC5kcmFnRGF0YSgpIGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnQ7XG4gICAgY29uc3Qgb3JpZ2luYWxEcm9wcGVkQXBwdCA9IChkcm9wcGVkQXBwdCBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCkub3JpZ2luYWxTdGFydERhdGVcbiAgICAgID8gKHtcbiAgICAgICAgICAuLi5kcm9wcGVkQXBwdCxcbiAgICAgICAgICBzdGFydERhdGU6IChkcm9wcGVkQXBwdCBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCkub3JpZ2luYWxTdGFydERhdGUsXG4gICAgICAgICAgZW5kRGF0ZTogKGRyb3BwZWRBcHB0IGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50KS5vcmlnaW5hbEVuZERhdGUsXG4gICAgICAgIH0gYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudClcbiAgICAgIDogZHJvcHBlZEFwcHQ7XG4gICAgY29uc3QgYXBwb2ludG1lbnRSZWYgPSB7XG4gICAgICAuLi5vcmlnaW5hbERyb3BwZWRBcHB0LFxuICAgICAgZW5kRGF0ZTogb3JpZ2luYWxEcm9wcGVkQXBwdC5lbmREYXRlLFxuICAgICAgc3RhcnREYXRlOiBvcmlnaW5hbERyb3BwZWRBcHB0LnN0YXJ0RGF0ZSxcbiAgICB9O1xuICAgIHRoaXMub25BcHBvaW50bWVudERyb3BJbnRlcm5hbC5lbWl0KHtcbiAgICAgIGRyb3BFdmVudDogZSxcbiAgICAgIHNsb3Q6IHNsb3REYXRhLFxuICAgICAgc2VuZGVyOiB0aGlzLnNjaGVkdWxlcixcbiAgICAgIGFwcG9pbnRtZW50OiBhcHBvaW50bWVudFJlZixcbiAgICB9KTtcbiAgfVxuICBoYW5kbGVTaW5nbGVEYXlEcm9wKGU6IEFYRHJvcFpvbmVEcm9wRXZlbnQsIHN0YXJ0RGF0ZTogQVhEYXRlVGltZSkge1xuICAgIGNvbnN0IHNsb3REYXRhID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldFNsb3REYXRhKHN0YXJ0RGF0ZSwgJ2RheScpO1xuICAgIGNvbnN0IGRyb3BwZWRBcHB0ID0gZS5kcm9wcGVkLmRyYWdEYXRhKCkgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudDtcbiAgICBjb25zdCBvcmlnaW5hbERyb3BwZWRBcHB0ID0gKGRyb3BwZWRBcHB0IGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50KS5vcmlnaW5hbFN0YXJ0RGF0ZVxuICAgICAgPyAoe1xuICAgICAgICAgIC4uLmRyb3BwZWRBcHB0LFxuICAgICAgICAgIHN0YXJ0RGF0ZTogKGRyb3BwZWRBcHB0IGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50KS5vcmlnaW5hbFN0YXJ0RGF0ZSxcbiAgICAgICAgICBlbmREYXRlOiAoZHJvcHBlZEFwcHQgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnQpLm9yaWdpbmFsRW5kRGF0ZSxcbiAgICAgICAgfSBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50KVxuICAgICAgOiBkcm9wcGVkQXBwdDtcbiAgICBjb25zdCBhcHBvaW50bWVudFJlZiA9IHtcbiAgICAgIC4uLm9yaWdpbmFsRHJvcHBlZEFwcHQsXG4gICAgICBlbmREYXRlOiBvcmlnaW5hbERyb3BwZWRBcHB0LmVuZERhdGUsXG4gICAgICBzdGFydERhdGU6IG9yaWdpbmFsRHJvcHBlZEFwcHQuc3RhcnREYXRlLFxuICAgIH07XG4gICAgdGhpcy5vbkFwcG9pbnRtZW50RHJvcEludGVybmFsLmVtaXQoe1xuICAgICAgZHJvcEV2ZW50OiBlLFxuICAgICAgc2xvdDogc2xvdERhdGEsXG4gICAgICBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyLFxuICAgICAgYXBwb2ludG1lbnQ6IGFwcG9pbnRtZW50UmVmLFxuICAgIH0pO1xuICB9XG5cbiAgaG91cnNBcnJheSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBsZXQgdGltZSA9IHRoaXMuZGF0ZSgpO1xuICAgIGlmICghdGltZSkgcmV0dXJuIFtdO1xuICAgIHRpbWUgPSB0aW1lLnNldCgnaG91cicsIHRoaXMuc3RhcnREYXlIb3VyKCkpLnN0YXJ0T2YoJ2hvdXInKTtcbiAgICBjb25zdCBob3VycyA9IFt0aW1lXTtcbiAgICB3aGlsZSAodGltZS5ob3VyIDwgdGhpcy5lbmREYXlIb3VyKCkgLSAxKSB7XG4gICAgICB0aW1lID0gdGltZS5hZGQoJ2hvdXInLCAxKTtcbiAgICAgIGhvdXJzLnB1c2godGltZSk7XG4gICAgfVxuICAgIHJldHVybiBob3VycztcbiAgfSk7XG5cbiAgYXBwb2ludG1lbnRMYXlvdXRzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGxheW91dHMgPSBuZXcgTWFwPGFueSwgQVhTY2hlZHVsZXJEYXlBcHBvaW50bWVudExheW91dD4oKTtcbiAgICBjb25zdCBhcHBvaW50bWVudHNUb0xheW91dCA9IHRoaXMuc2luZ2xlRGF5QXBwb2ludG1lbnRzKCk7XG4gICAgY29uc3Qgdmlld0RhdGUgPSB0aGlzLmRhdGUoKTtcbiAgICBjb25zdCBzdGFydEggPSB0aGlzLnN0YXJ0RGF5SG91cigpO1xuICAgIGNvbnN0IGVuZEggPSB0aGlzLmVuZERheUhvdXIoKTtcblxuICAgIGlmIChhcHBvaW50bWVudHNUb0xheW91dC5sZW5ndGggPT09IDAgfHwgIXZpZXdEYXRlIHx8IHR5cGVvZiBzdGFydEggIT09ICdudW1iZXInIHx8IHR5cGVvZiBlbmRIICE9PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIGxheW91dHM7XG4gICAgfVxuXG4gICAgY29uc3QgY29uY3VycmVuY3lJbmZvTWFwID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmNhbGN1bGF0ZURheVZpZXdDb25jdXJyZW5jeUluZm8oXG4gICAgICBhcHBvaW50bWVudHNUb0xheW91dCxcbiAgICAgIHZpZXdEYXRlLFxuICAgICAgc3RhcnRILFxuICAgICAgZW5kSCxcbiAgICApO1xuXG4gICAgY29uc3Qgc29ydGVkQXBwb2ludG1lbnRzID0gb3JkZXJCeShcbiAgICAgIGFwcG9pbnRtZW50c1RvTGF5b3V0LFxuICAgICAgWyhlKSA9PiBlLnN0YXJ0RGF0ZS5nZXRUaW1lKCksIChlKSA9PiBlLm9yaWdpbmFsRW5kRGF0ZS5nZXRUaW1lKCkgLSBlLm9yaWdpbmFsU3RhcnREYXRlLmdldFRpbWUoKV0sXG4gICAgICBbJ2FzYycsICdkZXNjJ10sXG4gICAgKTtcblxuICAgIGNvbnN0IGNvbHVtbnNEYXRhOiB7IGFwcG9pbnRtZW50czogQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXSB9W10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgYXBwb2ludG1lbnRTZWdtZW50IG9mIHNvcnRlZEFwcG9pbnRtZW50cykge1xuICAgICAgbGV0IGFzc2lnbmVkQ29sID0gLTE7XG5cbiAgICAgIGZvciAobGV0IGMgPSAwOyA7IGMrKykge1xuICAgICAgICBpZiAoIWNvbHVtbnNEYXRhW2NdKSB7XG4gICAgICAgICAgY29sdW1uc0RhdGFbY10gPSB7IGFwcG9pbnRtZW50czogW10gfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjb25mbGljdCA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAoY29uc3QgcGxhY2VkU2VnbWVudCBvZiBjb2x1bW5zRGF0YVtjXS5hcHBvaW50bWVudHMpIHtcbiAgICAgICAgICBjb25zdCBzdGFydERhdGUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoYXBwb2ludG1lbnRTZWdtZW50LnN0YXJ0RGF0ZSwgdGhpcy5jYWxlbmRhcigpKTtcbiAgICAgICAgICBjb25zdCBlbmREYXRlID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGFwcG9pbnRtZW50U2VnbWVudC5lbmREYXRlLCB0aGlzLmNhbGVuZGFyKCkpO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHN0YXJ0RGF0ZS5jb21wYXJlKHBsYWNlZFNlZ21lbnQuZW5kRGF0ZSwgJ21pbnV0ZScpIDwgMCAmJlxuICAgICAgICAgICAgZW5kRGF0ZS5jb21wYXJlKHBsYWNlZFNlZ21lbnQuc3RhcnREYXRlLCAnbWludXRlJykgPiAwXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25mbGljdCA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNvbmZsaWN0KSB7XG4gICAgICAgICAgYXNzaWduZWRDb2wgPSBjO1xuICAgICAgICAgIGNvbHVtbnNEYXRhW2NdLmFwcG9pbnRtZW50cy5wdXNoKGFwcG9pbnRtZW50U2VnbWVudCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYyA+IGFwcG9pbnRtZW50c1RvTGF5b3V0Lmxlbmd0aCkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGBEYXlWaWV3OiBTYWZldHkgYnJlYWsgaW4gY29sdW1uIGFzc2lnbm1lbnQgZm9yICR7YXBwb2ludG1lbnRTZWdtZW50LnRpdGxlfSwgYXNzaWduaW5nIHRvIG5ldyBjb2x1bW4gJHtjfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIWNvbHVtbnNEYXRhW2NdKSBjb2x1bW5zRGF0YVtjXSA9IHsgYXBwb2ludG1lbnRzOiBbXSB9O1xuICAgICAgICAgIGNvbHVtbnNEYXRhW2NdLmFwcG9pbnRtZW50cy5wdXNoKGFwcG9pbnRtZW50U2VnbWVudCk7XG4gICAgICAgICAgYXNzaWduZWRDb2wgPSBjO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbmN1cnJlbmN5SW5mbyA9IGNvbmN1cnJlbmN5SW5mb01hcC5nZXQoYXBwb2ludG1lbnRTZWdtZW50LmlkKTtcbiAgICAgIGNvbnN0IGVmZmVjdGl2ZUNvbHMgPSBjb25jdXJyZW5jeUluZm8gPyBjb25jdXJyZW5jeUluZm8uZWZmZWN0aXZlVG90YWxDb2x1bW5zIDogMTtcblxuICAgICAgbGF5b3V0cy5zZXQoYXBwb2ludG1lbnRTZWdtZW50LmlkLCB7XG4gICAgICAgIGNvbHVtbkluZGV4OiBhc3NpZ25lZENvbCxcbiAgICAgICAgZWZmZWN0aXZlVG90YWxDb2x1bW5zOiBlZmZlY3RpdmVDb2xzLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsYXlvdXRzO1xuICB9KTtcblxuICBnZXRBcHBvaW50bWVudExheW91dChrZXk6IGFueSk6IEFYU2NoZWR1bGVyRGF5QXBwb2ludG1lbnRMYXlvdXQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmFwcG9pbnRtZW50TGF5b3V0cygpLmdldChrZXkpO1xuICB9XG5cbiAgZ2V0QXBwb2ludG1lbnRMZWZ0KGtleTogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCBsYXlvdXQgPSB0aGlzLmdldEFwcG9pbnRtZW50TGF5b3V0KGtleSk7XG4gICAgaWYgKGxheW91dCAmJiBsYXlvdXQuZWZmZWN0aXZlVG90YWxDb2x1bW5zID4gMCkge1xuICAgICAgY29uc3QgTiA9IGxheW91dC5lZmZlY3RpdmVUb3RhbENvbHVtbnM7XG4gICAgICBjb25zdCBDID0gbGF5b3V0LmNvbHVtbkluZGV4O1xuICAgICAgaWYgKEMgPCAwKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignSW52YWxpZCBjb2x1bW5JbmRleCA8IDAgZm9yIGtleTonLCBrZXkpO1xuICAgICAgICByZXR1cm4gJzBweCc7XG4gICAgICB9XG4gICAgICBpZiAoQyA9PT0gMCB8fCBOIDw9IDEpIHJldHVybiAnMHB4JztcbiAgICAgIGNvbnN0IGxlZnRQZXJjZW50ID0gQyAqICgxMDAgLyBOKTtcbiAgICAgIGNvbnN0IGdhcE9mZnNldFB4ID0gQyAqIHRoaXMuR0FQX1BYO1xuICAgICAgcmV0dXJuIGBjYWxjKCR7bGVmdFBlcmNlbnR9JSArICR7Z2FwT2Zmc2V0UHh9cHgpYDtcbiAgICB9XG4gICAgcmV0dXJuICcwcHgnO1xuICB9XG5cbiAgZ2V0QXBwb2ludG1lbnRXaWR0aChrZXk6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgbGF5b3V0ID0gdGhpcy5nZXRBcHBvaW50bWVudExheW91dChrZXkpO1xuICAgIGlmIChsYXlvdXQgJiYgbGF5b3V0LmVmZmVjdGl2ZVRvdGFsQ29sdW1ucyA+IDApIHtcbiAgICAgIGNvbnN0IE4gPSBsYXlvdXQuZWZmZWN0aXZlVG90YWxDb2x1bW5zO1xuXG4gICAgICBpZiAoTiA8PSAwKSByZXR1cm4gJzAlJztcbiAgICAgIGlmIChOID09PSAxKSByZXR1cm4gYGNhbGMoMTAwJSAtICR7dGhpcy5HQVBfUFh9cHgpYDtcblxuICAgICAgY29uc3Qgd2lkdGhQZXJjZW50ID0gKDEgLyBOKSAqIDEwMDtcblxuICAgICAgcmV0dXJuIGBjYWxjKCR7d2lkdGhQZXJjZW50fSUgLSAke3RoaXMuR0FQX1BYfXB4KWA7XG4gICAgfVxuICAgIHJldHVybiAnMCUnO1xuICB9XG5cbiAgZ2V0QXBwb2ludG1lbnRUb3Aoa2V5OiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGFwcG9pbnRtZW50U2VnbWVudCA9IHRoaXMuc2luZ2xlRGF5QXBwb2ludG1lbnRzKCkuZmluZCgoZSkgPT4gZS5pZCA9PT0ga2V5KTtcblxuICAgIGlmIChhcHBvaW50bWVudFNlZ21lbnQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0TWludXRlcyA9IGFwcG9pbnRtZW50U2VnbWVudC5zdGFydERhdGUuZ2V0SG91cnMoKSAqIDYwICsgYXBwb2ludG1lbnRTZWdtZW50LnN0YXJ0RGF0ZS5nZXRNaW51dGVzKCk7XG4gICAgICBjb25zdCBzdGFydEJsb2NrT2Zmc2V0ID0gc3RhcnRNaW51dGVzIC0gdGhpcy5zdGFydERheUhvdXIoKSAqIDYwO1xuICAgICAgY29uc3QgeUJsb2NrID0gc3RhcnRCbG9ja09mZnNldCAvIDMwO1xuICAgICAgcmV0dXJuIGBjYWxjKHZhcigtLWF4LWNvbXAtc2NoZWR1bGVyLWJhc2ljLXZpZXctYmxvY2tzLWhlaWdodCkgKiAke3lCbG9ja30gKyAxcHgpYDtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgZ2V0QXBwb2ludG1lbnRIZWlnaHQoa2V5OiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGFwcG9pbnRtZW50U2VnbWVudCA9IHRoaXMuc2luZ2xlRGF5QXBwb2ludG1lbnRzKCkuZmluZCgoZSkgPT4gZS5pZCA9PT0ga2V5KTtcbiAgICBpZiAoYXBwb2ludG1lbnRTZWdtZW50KSB7XG4gICAgICBjb25zdCBkdXJhdGlvbk1pbGxpcyA9IGFwcG9pbnRtZW50U2VnbWVudC5lbmREYXRlLmdldFRpbWUoKSAtIGFwcG9pbnRtZW50U2VnbWVudC5zdGFydERhdGUuZ2V0VGltZSgpO1xuICAgICAgY29uc3QgZHVyYXRpb25NaW51dGVzID0gTWF0aC5tYXgoMCwgZHVyYXRpb25NaWxsaXMgLyAoMTAwMCAqIDYwKSk7XG4gICAgICBpZiAoZHVyYXRpb25NaW51dGVzIDw9IDApIHJldHVybiAnMHB4JztcblxuICAgICAgY29uc3QgaGVpZ2h0QmxvY2sgPSBkdXJhdGlvbk1pbnV0ZXMgLyAzMDtcbiAgICAgIGNvbnN0IGJsb2NrSGVpZ2h0RXhwciA9IGB2YXIoLS1heC1jb21wLXNjaGVkdWxlci1iYXNpYy12aWV3LWJsb2Nrcy1oZWlnaHQpYDtcblxuICAgICAgcmV0dXJuIGBjYWxjKCR7YmxvY2tIZWlnaHRFeHByfSAqICR7aGVpZ2h0QmxvY2t9IC0gJHt0aGlzLkdBUF9QWH1weClgO1xuICAgIH1cbiAgICByZXR1cm4gJzBweCc7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmF4LXN0YXRlLXJlYWRvbmx5JykgZ2V0IGlzUmVhZG9ubHkoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZG9ubHkoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1kYXktaGVhZGVyXCI+XG4gIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItZGF5LWhlYWRlci10YWJsZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIDxkaXY+XG4gICAgICB7eyAnZGF0ZVRpbWUuZHVyYXRpb24uYWxsLWRheScgfCB0cmFuc2xhdGUgfCBhc3luYyB9fVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdlxuICAgIGF4RHJvcFpvbmVcbiAgICAjem9uZT1cImF4RHJvcFpvbmVcIlxuICAgIChvbkVsZW1lbnREcm9wKT1cImhhbmRsZUFsbERheURyb3AoJGV2ZW50KVwiXG4gICAgW2NsYXNzLmF4LXNjaGVkdWxlci1zbG90LWhvdmVyZWRdPVwiem9uZS5pc0hvdmVyZWQoKVwiXG4gICAgKGNsaWNrKT1cImhhbmRsZUFsbERheVNsb3RFdmVudCgkZXZlbnQpXCJcbiAgICAoZGJsY2xpY2spPVwiaGFuZGxlQWxsRGF5U2xvdEV2ZW50KCRldmVudClcIlxuICAgIChjb250ZXh0bWVudSk9XCJoYW5kbGVBbGxEYXlTbG90RXZlbnQoJGV2ZW50KVwiXG4gICAgY2xhc3M9XCJheC1zY2hlZHVsZXItZGF5LWhlYWRlci10YWJsZS1jb250YWluZXJcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1kYXktaGVhZGVyLWFwcG9pbnRtZW50LWNvbnRhaW5lclwiPlxuICAgICAgQGlmIChhbGxEYXlBcHBvaW50bWVudHMoKS5sZW5ndGgpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGF4RHJhZ1xuICAgICAgICAgIFtkcmFnQ3Vyc29yXT1cIidncmFiJ1wiXG4gICAgICAgICAgW2RyYWdUcmFuc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICBbZHJhZ0VsZW1lbnRDbG9uZV09XCJ0cnVlXCJcbiAgICAgICAgICBbZHJhZ0Rpc2FibGVkXT1cIiFkcmFnZ2FibGUoKSB8fCBhbGxEYXlBcHBvaW50bWVudHMoKVswXS5yZWFkb25seSB8fCByZWFkb25seSgpXCJcbiAgICAgICAgICBbZHJhZ0RhdGFdPVwiYWxsRGF5QXBwb2ludG1lbnRzKClbMF1cIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgYWxsRGF5QXBwb2ludG1lbnRzKClbMF0pXCJcbiAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGFsbERheUFwcG9pbnRtZW50cygpWzBdKVwiXG4gICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBhbGxEYXlBcHBvaW50bWVudHMoKVswXSlcIlxuICAgICAgICAgIFt0aXRsZV09XCJhbGxEYXlBcHBvaW50bWVudHMoKVswXS50aXRsZVwiXG4gICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItaGVhZGVyLWRheS1hcHBvaW50bWVudFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiYWxsRGF5QXBwb2ludG1lbnRzKClbMF0uY3NzQ2xhc3M/P2BheC1zY2hlZHVsZXItJHthbGxEYXlBcHBvaW50bWVudHMoKVswXS5wcmlvcml0eT8/J3ByaW1hcnknfS1wZXJpb3JpdHlgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxheC10aXRsZSBjbGFzcz1cImF4LXNjaGVkdWxlci10cnVuY2F0ZVwiPnt7IGFsbERheUFwcG9pbnRtZW50cygpWzBdLnRpdGxlIH19PC9heC10aXRsZT5cbiAgICAgICAgICA8YXgtc3VidGl0bGU+XG4gICAgICAgICAgICB7eyBhbGxEYXlBcHBvaW50bWVudHMoKVswXS5zdGFydERhdGUgfCBmb3JtYXQ6ICdkYXRlJyA6IHsgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgICAgICAtXG4gICAgICAgICAgICB7eyBhbGxEYXlBcHBvaW50bWVudHMoKVswXS5lbmREYXRlIHwgZm9ybWF0OiAnZGF0ZScgOiB7IGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgICAgIDwvYXgtc3VidGl0bGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGlmIChhbGxEYXlBcHBvaW50bWVudHMoKS5sZW5ndGggPiAxKSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAjbW9yZUFwcG9pbnRtZW50c1xuICAgICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLWRheS1oZWFkZXItbW9yZS10YWdcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImFsbERheUFwcG9pbnRtZW50cygpWzFdLmNzc0NsYXNzPz9gYXgtc2NoZWR1bGVyLSR7YWxsRGF5QXBwb2ludG1lbnRzKClbMV0ucHJpb3JpdHk/PydwcmltYXJ5J30tcGVyaW9yaXR5YFwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyAnbW9yZS1pdGVtcycgfCB0cmFuc2xhdGU6IHsgcGFyYW1zOiB7IG51bWJlcjogYWxsRGF5QXBwb2ludG1lbnRzKCkubGVuZ3RoIC0gMSB9IH0gfCBhc3luYyB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGF4LXBvcG92ZXIgW3RhcmdldF09XCJtb3JlQXBwb2ludG1lbnRzXCIgW3BsYWNlbWVudF09XCInYm90dG9tJ1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1vdmVybGF5LXBhbmUgYXgtc2NoZWR1bGVyLXBvcG92ZXJcIiBbY2xhc3MuYXgtc3RhdGUtcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiPlxuICAgICAgICAgICAgQGZvciAoYXBwb2ludG1lbnQgb2YgYWxsRGF5QXBwb2ludG1lbnRzKCk7IHRyYWNrIGFwcG9pbnRtZW50LmlkOyBsZXQgZmlyc3QgPSAkZmlyc3QpIHtcbiAgICAgICAgICAgICAgQGlmICghZmlyc3QpIHtcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBheERyYWdcbiAgICAgICAgICAgICAgICAgIFtkcmFnQ3Vyc29yXT1cIidncmFiJ1wiXG4gICAgICAgICAgICAgICAgICBbZHJhZ0RhdGFdPVwiYXBwb2ludG1lbnRcIlxuICAgICAgICAgICAgICAgICAgW2RyYWdUcmFuc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIFtkcmFnRWxlbWVudENsb25lXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW2RyYWdEaXNhYmxlZF09XCIhZHJhZ2dhYmxlKCkgfHwgYXBwb2ludG1lbnQucmVhZG9ubHkgfHwgcmVhZG9ubHkoKVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGFwcG9pbnRtZW50KVwiXG4gICAgICAgICAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGFwcG9pbnRtZW50KVwiXG4gICAgICAgICAgICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGFwcG9pbnRtZW50KVwiXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiYXBwb2ludG1lbnQudGl0bGVcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItcG9wb3Zlci1hcHBvaW50bWVudFwiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJhcHBvaW50bWVudC5jc3NDbGFzcz8/YGF4LXNjaGVkdWxlci0ke2FwcG9pbnRtZW50LnByaW9yaXR5Pz8ncHJpbWFyeSd9LXBlcmlvcml0eWBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxheC10aXRsZSBjbGFzcz1cImF4LXNjaGVkdWxlci10cnVuY2F0ZVwiPnt7IGFwcG9pbnRtZW50LnRpdGxlIH19PC9heC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxheC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICAgICAge3sgYXBwb2ludG1lbnQuc3RhcnREYXRlIHwgZm9ybWF0OiAnZGF0ZScgOiB7IGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgICAgICAgICAgICAgICAtXG4gICAgICAgICAgICAgICAgICAgIHt7IGFwcG9pbnRtZW50LmVuZERhdGUgfCBmb3JtYXQ6ICdkYXRlJyA6IHsgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAgICA8L2F4LXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYXgtcG9wb3Zlcj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1kYXktdGltZS1jb250YWluZXJcIj5cbiAgPHRhYmxlIGNsYXNzPVwiYXgtc2NoZWR1bGVyLWRheS10aW1lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgW2JvcmRlcl09XCIxXCI+XG4gICAgQGZvciAodGltZSBvZiBob3Vyc0FycmF5KCk7IHRyYWNrIHRpbWUuZGF0ZS5nZXRUaW1lKCkpIHtcbiAgICAgIDxkaXY+XG4gICAgICAgIHt7IHRpbWUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgZm9ybWF0OiAnSEg6bW0nLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC90YWJsZT5cbiAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1kYXktdGFibGUtY29udGFpbmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1kYXktYXBwb2ludG1lbnQtY29udGFpbmVyXCI+XG4gICAgICBAZm9yIChhcHBvaW50bWVudCBvZiBzaW5nbGVEYXlBcHBvaW50bWVudHMoKTsgdHJhY2sgYXBwb2ludG1lbnQuaWQpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGF4RHJhZ1xuICAgICAgICAgIFtkcmFnQ3Vyc29yXT1cIidncmFiJ1wiXG4gICAgICAgICAgW2RyYWdEYXRhXT1cImFwcG9pbnRtZW50XCJcbiAgICAgICAgICBbZHJhZ1RyYW5zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgIFtkcmFnRWxlbWVudENsb25lXT1cInRydWVcIlxuICAgICAgICAgIFtkcmFnRGlzYWJsZWRdPVwiIWRyYWdnYWJsZSgpIHx8IGFwcG9pbnRtZW50LnJlYWRvbmx5IHx8IHJlYWRvbmx5KClcIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgYXBwb2ludG1lbnQpXCJcbiAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGFwcG9pbnRtZW50KVwiXG4gICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBhcHBvaW50bWVudClcIlxuICAgICAgICAgIFt0aXRsZV09XCJhcHBvaW50bWVudC50aXRsZVwiXG4gICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItZGF5LWFwcG9pbnRtZW50XCJcbiAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiZ2V0QXBwb2ludG1lbnRXaWR0aChhcHBvaW50bWVudC5pZClcIlxuICAgICAgICAgIFtzdHlsZS5oZWlnaHRdPVwiZ2V0QXBwb2ludG1lbnRIZWlnaHQoYXBwb2ludG1lbnQuaWQpXCJcbiAgICAgICAgICBbc3R5bGUuaW5zZXQtYmxvY2stc3RhcnRdPVwiZ2V0QXBwb2ludG1lbnRUb3AoYXBwb2ludG1lbnQuaWQpXCJcbiAgICAgICAgICBbc3R5bGUuaW5zZXQtaW5saW5lLXN0YXJ0XT1cImdldEFwcG9pbnRtZW50TGVmdChhcHBvaW50bWVudC5pZClcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImFwcG9pbnRtZW50LmNzc0NsYXNzPz9gYXgtc2NoZWR1bGVyLSR7YXBwb2ludG1lbnQucHJpb3JpdHk/PydwcmltYXJ5J30tcGVyaW9yaXR5YFwiXG4gICAgICAgID5cbiAgICAgICAgICA8YXgtdGl0bGUgY2xhc3M9XCJheC1zY2hlZHVsZXItdHJ1bmNhdGVcIj57eyBhcHBvaW50bWVudC50aXRsZSB9fTwvYXgtdGl0bGU+XG4gICAgICAgICAgPGF4LXN1YnRpdGxlPlxuICAgICAgICAgICAge3sgYXBwb2ludG1lbnQub3JpZ2luYWxTdGFydERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19IC1cbiAgICAgICAgICAgIHt7IGFwcG9pbnRtZW50Lm9yaWdpbmFsRW5kRGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX1cbiAgICAgICAgICA8L2F4LXN1YnRpdGxlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzPVwiYXgtc2NoZWR1bGVyLWRheS1zbG90XCI+XG4gICAgICBAZm9yICh0aW1lIG9mIGhvdXJzQXJyYXkoKTsgdHJhY2sgdGltZS5kYXRlLmdldFRpbWUoKSkge1xuICAgICAgICA8ZGl2XG4gICAgICAgICAgYXhEcm9wWm9uZVxuICAgICAgICAgICN6b25lPVwiYXhEcm9wWm9uZVwiXG4gICAgICAgICAgKG9uRWxlbWVudERyb3ApPVwiaGFuZGxlU2luZ2xlRGF5RHJvcCgkZXZlbnQsIHRpbWUpXCJcbiAgICAgICAgICBbY2xhc3MuYXgtc2NoZWR1bGVyLXNsb3QtaG92ZXJlZF09XCJ6b25lLmlzSG92ZXJlZCgpXCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlU2luZ2xlU2xvdEV2ZW50KCRldmVudCwgdGltZSlcIlxuICAgICAgICAgIChkYmxjbGljayk9XCJoYW5kbGVTaW5nbGVTbG90RXZlbnQoJGV2ZW50LCB0aW1lKVwiXG4gICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZVNpbmdsZVNsb3RFdmVudCgkZXZlbnQsIHRpbWUpXCJcbiAgICAgICAgPjwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgYXhEcm9wWm9uZVxuICAgICAgICAgICN6b25lMj1cImF4RHJvcFpvbmVcIlxuICAgICAgICAgIFtjbGFzcy5heC1zY2hlZHVsZXItc2xvdC1ob3ZlcmVkXT1cInpvbmUyLmlzSG92ZXJlZCgpXCJcbiAgICAgICAgICAob25FbGVtZW50RHJvcCk9XCJoYW5kbGVTaW5nbGVEYXlEcm9wKCRldmVudCwgdGltZS5hZGQoJ21pbnV0ZScsIDMwKSlcIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVTaW5nbGVTbG90RXZlbnQoJGV2ZW50LCB0aW1lLmFkZCgnbWludXRlJywgMzApKVwiXG4gICAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZVNpbmdsZVNsb3RFdmVudCgkZXZlbnQsIHRpbWUuYWRkKCdtaW51dGUnLCAzMCkpXCJcbiAgICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlU2luZ2xlU2xvdEV2ZW50KCRldmVudCwgdGltZS5hZGQoJ21pbnV0ZScsIDMwKSlcIlxuICAgICAgICA+PC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXDragDirective, AXDropZoneDirective } from '@acorex/cdk/drag-drop';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe, NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, HostBinding, inject, input, output, ViewEncapsulation, } from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport { AXSchedulerComponent, } from '../../scheduler.component';\nimport { AXSchedulerService } from '../../scheduler.service'; // Adjust path\nimport * as i0 from \"@angular/core\";\nexport class AXSchedulerMonthViewComponent extends NXComponent {\n constructor() {\n super(...arguments);\n this.scheduler = inject(AXSchedulerComponent);\n this.calendarService = inject(AXCalendarService);\n this.schedulerService = inject(AXSchedulerService);\n // --- Inputs ---\n this.readonly = input(false);\n this.draggable = input(true);\n this.calendar = input();\n this.date = input.required();\n this.firstDayOfWeek = input('saturday');\n this.appointments = input([]);\n // --- Constants ---\n this.DAYS_IN_WEEK = 7;\n this.MAX_VISIBLE_APPOINTMENTS_PER_DAY = 2;\n // Internal outputs to be caught by parent AXSchedulerComponent\n this.slotClickedInternal = output();\n this.slotDblClickedInternal = output();\n this.slotRightClickedInternal = output();\n this.appointmentClickedInternal = output();\n this.appointmentDblClickedInternal = output();\n this.appointmentRightClickedInternal = output();\n this.onAppointmentDropInternal = output();\n // --- Event Handlers ---\n this.eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n // --- Base Computeds ---\n // Calculate the start of the month based on the input date\n this.monthStartDate = computed(() => {\n const d = this.date();\n return d ? d.startOf('month') : null;\n });\n // Generate the list of weekday names based on the firstDayOfWeek\n this.daysArray = computed(() => {\n const dayNames = [];\n const currentDate = this.date(); // Use a stable date for generating week headers\n const currentDayOfWeek = currentDate.dayOfWeek;\n const desiredFirstDayName = this.firstDayOfWeek();\n const desiredFirstDayNumber = this.schedulerService.getDayOfWeekNumber(desiredFirstDayName);\n // Calculate days to subtract to get to the start of the week based on firstDayOfWeek\n const daysToSubtract = (currentDayOfWeek - desiredFirstDayNumber + 7) % 7;\n let headerStartDate = currentDate.add('day', -daysToSubtract);\n for (let i = 0; i < 7; i++) {\n dayNames.push(headerStartDate);\n headerStartDate = headerStartDate.add('day', 1);\n }\n return dayNames;\n });\n // --- Calendar Grid Calculation ---\n this.calendarDaysInfo = computed(() => {\n const monthStart = this.monthStartDate();\n if (!monthStart)\n return { days: [], weeksNeeded: 0 };\n const firstDayOfMonth = monthStart;\n const lastDayOfMonth = monthStart.endOf('month');\n const firstDayGridNum = this.schedulerService.getDayOfWeekNumber(this.firstDayOfWeek());\n const firstDisplayedDayOfWeek = firstDayOfMonth.dayOfWeek;\n const leadingDays = (firstDisplayedDayOfWeek - firstDayGridNum + this.DAYS_IN_WEEK) % this.DAYS_IN_WEEK;\n const firstDayOfGrid = firstDayOfMonth.add('day', -leadingDays);\n // Determine how many total days to show to fill out the weeks\n // A common approach is 6 weeks to ensure consistency, but your dynamic weeksNeeded is fine too.\n // Let's stick to your dynamic `weeksNeeded` and `totalDaysToGenerate`\n const daysInMonth = lastDayOfMonth.dayOfMonth;\n const totalCellsMinimum = leadingDays + daysInMonth;\n const weeksNeededDynamic = Math.ceil(totalCellsMinimum / this.DAYS_IN_WEEK);\n const actualWeeksToShow = Math.max(4, Math.min(weeksNeededDynamic, 6)); // Clamp weeks\n const totalDaysToGenerate = actualWeeksToShow * this.DAYS_IN_WEEK;\n const days = [];\n const today = this.calendarService.create(new Date());\n let currentDay = firstDayOfGrid;\n for (let i = 0; i < totalDaysToGenerate; i++) {\n const isHoliday = this.schedulerService.isHoliday(currentDay) || this.schedulerService.isWeekend(currentDay, this.calendar());\n let holidayTitle = null;\n if (isHoliday) {\n const holiday = this.calendarService.holidays.filter((d) => currentDay.equal(d.date, 'day'))[0];\n if (holiday) {\n holidayTitle = holiday.title;\n }\n }\n days.push({\n date: currentDay,\n isCurrentMonth: currentDay.monthOfYear === monthStart.monthOfYear,\n isToday: currentDay.equal(today, 'day'),\n isHoliday,\n holidayTitle,\n });\n currentDay = currentDay.add('day', 1);\n }\n return { days: days, weeksNeeded: actualWeeksToShow };\n });\n // --- Appointment Grouping ---\n this.appointmentsGroupedByDay = computed(() => {\n const { days } = this.calendarDaysInfo(); // Destructure to get days array\n if (days.length === 0)\n return new Map();\n const viewStartDate = days[0].date;\n const viewEndDate = days[days.length - 1].date;\n const relevantAppointments = this.appointments();\n return this.schedulerService.groupAppointmentsByDay(relevantAppointments, viewStartDate, viewEndDate);\n });\n // --- Day Cell Layout Calculation ---\n this.dayCellLayouts = computed(() => {\n const { days: initialDaysInfo } = this.calendarDaysInfo();\n const allOriginalAppointments = this.appointments();\n if (initialDaysInfo.length === 0) {\n return []; // Return empty array if no days to process\n }\n if (!allOriginalAppointments || allOriginalAppointments.length === 0) {\n // If no appointments, map initialDaysInfo to the full structure with empty appointment arrays\n return initialDaysInfo.map((dayInfo) => ({\n ...dayInfo,\n appointments: [],\n visibleAppointments: [],\n hiddenAppointments: [],\n overflowCount: 0,\n }));\n }\n return initialDaysInfo.map((dayInfo) => {\n const dayAsStartOfDay = dayInfo.date.startOf('day');\n const segmentsForThisDay = [];\n for (const appt of allOriginalAppointments) {\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, dayAsStartOfDay, 0, // viewStartHour for month cell context (full day)\n 24, // viewEndHour for month cell context (full day)\n true);\n if (segment) {\n segmentsForThisDay.push(segment);\n }\n }\n const sortedSegments = orderBy(segmentsForThisDay, [\n (s) => (s.allDay ? 0 : 1), // Segments marked as allDay first\n (s) => s.originalStartDate.getTime(), // Then by original start time\n (s) => s.originalEndDate.getTime() - s.originalStartDate.getTime(), // Then by duration (longer first)\n (s) => s.title?.toLowerCase() ?? '', // Then by title\n ], ['asc', 'asc', 'desc', 'asc']);\n const visibleAppointments = sortedSegments.slice(0, this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);\n const hiddenAppointments = sortedSegments.slice(this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);\n const overflowCount = hiddenAppointments.length;\n return {\n ...dayInfo,\n appointments: sortedSegments,\n visibleAppointments,\n hiddenAppointments,\n overflowCount,\n };\n });\n });\n // --- Dynamic Grid Rows ---\n this.gridTemplateRowsStyle = computed(() => {\n const { weeksNeeded } = this.calendarDaysInfo();\n if (!weeksNeeded || weeksNeeded <= 0) {\n return `repeat(6, minmax(0, 1fr))`; // Fallback, ensures grid is at least somewhat sensible\n }\n return `repeat(${weeksNeeded}, minmax(0, 1fr))`; // Use 1fr for equal distribution\n });\n }\n handleAppointmentEvent(mouseEvent, appointmentSegmentOrOriginal) {\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentSegmentOrOriginal);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, appointment: appointmentRef, sender: this.scheduler }, this.eventOutputMap, 'appointment');\n }\n handleSlotEvent(mouseEvent, date) {\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'month'); // Ensure it's start of day\n if (slotData) {\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler }, this.eventOutputMap, 'slot');\n }\n }\n handleDrop(e, date) {\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'month');\n const droppedItem = e.dropped.dragData();\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n });\n }\n get isReadonly() {\n return this.readonly();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerMonthViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.4\", type: AXSchedulerMonthViewComponent, isStandalone: true, selector: \"ax-scheduler-month-view\", inputs: { readonly: { classPropertyName: \"readonly\", publicName: \"readonly\", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: \"draggable\", publicName: \"draggable\", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: \"calendar\", publicName: \"calendar\", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: \"date\", publicName: \"date\", isSignal: true, isRequired: true, transformFunction: null }, firstDayOfWeek: { classPropertyName: \"firstDayOfWeek\", publicName: \"firstDayOfWeek\", isSignal: true, isRequired: false, transformFunction: null }, appointments: { classPropertyName: \"appointments\", publicName: \"appointments\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: \"slotClickedInternal\", slotDblClickedInternal: \"slotDblClickedInternal\", slotRightClickedInternal: \"slotRightClickedInternal\", appointmentClickedInternal: \"appointmentClickedInternal\", appointmentDblClickedInternal: \"appointmentDblClickedInternal\", appointmentRightClickedInternal: \"appointmentRightClickedInternal\", onAppointmentDropInternal: \"onAppointmentDropInternal\" }, host: { properties: { \"class.ax-state-readonly\": \"this.isReadonly\" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerMonthViewComponent }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-scheduler-month-container\\\">\\n <!-- Weekday Header -->\\n <div class=\\\"ax-scheduler-month-weekdays\\\">\\n @for (day of daysArray(); track day.date.getTime()) {\\n <div class=\\\"ax-scheduler-month-weekday\\\">\\n {{ day | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n </div>\\n }\\n </div>\\n\\n <!-- Calendar Grid -->\\n <div class=\\\"ax-scheduler-month-grid\\\" [style.gridTemplateRows]=\\\"gridTemplateRowsStyle()\\\">\\n @for (dayCell of dayCellLayouts(); track dayCell.date.date.getTime()) {\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleDrop($event, dayCell.date)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n (click)=\\\"handleSlotEvent($event, dayCell.date)\\\"\\n (dblclick)=\\\"handleSlotEvent($event, dayCell.date)\\\"\\n (contextmenu)=\\\"handleSlotEvent($event, dayCell.date)\\\"\\n class=\\\"ax-scheduler-month-day-cell\\\"\\n [class.ax-state-today]=\\\"dayCell.isToday\\\"\\n [class.ax-state-holiday]=\\\"dayCell.isHoliday\\\"\\n [class.ax-other-month]=\\\"!dayCell.isCurrentMonth\\\"\\n [attr.data-date]=\\\"dayCell.date | format: 'date' : { format: 'YYYY-MM-DD' }\\\"\\n >\\n <div class=\\\"ax-scheduler-month-day-header\\\">\\n <span class=\\\"ax-scheduler-month-day-number ax-scheduler-truncate\\\" [axTooltip]=\\\"dayCell.holidayTitle ?? ''\\\">\\n {{ dayCell.date.dayOfMonth }}\\n\\n @if (dayCell.holidayTitle) {\\n ( {{ dayCell.holidayTitle }} )\\n }\\n </span>\\n </div>\\n <div class=\\\"ax-scheduler-month-day-appointments\\\">\\n <!-- Visible Appointment Segments -->\\n @for (segment of dayCell.visibleAppointments; track segment.id + segment.originalStartDate) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"segment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment)\\\"\\n [title]=\\\"\\n segment.title +\\n (segment.allDay\\n ? ''\\n : ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')')\\n \\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n class=\\\"ax-scheduler-month-appointment-chip\\\"\\n [ngClass]=\\\"segment.cssClass??`ax-scheduler-${segment.priority??'primary'}-periority`\\\"\\n [class.continuation-to-next]=\\\"segment.isContinuationToNextDay && !segment.allDay\\\"\\n [class.continuation-from-prev]=\\\"segment.isContinuationFromPreviousDay && !segment.allDay\\\"\\n >\\n <span class=\\\"ax-appointment-chip-title ax-scheduler-truncate\\\">{{ segment.title }}</span>\\n @if (!segment.allDay) {\\n <span>\\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n -\\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </span>\\n }\\n </div>\\n }\\n <!-- Overflow Badge and Popover -->\\n @if (dayCell.overflowCount > 0) {\\n <div #moreAppointments class=\\\"ax-scheduler-month-overflow-badge\\\" (click)=\\\"$event.stopPropagation()\\\">\\n <!-- Stop propagation to prevent slot click -->\\n +{{ 'more-items' | translate: { params: { number: dayCell.overflowCount } } | async }}\\n </div>\\n <ax-popover [target]=\\\"moreAppointments\\\" placement=\\\"bottom-start\\\" trigger=\\\"click\\\">\\n <div\\n [class.ax-state-readonly]=\\\"readonly()\\\"\\n class=\\\"ax-overlay-pane ax-scheduler-popover ax-scheduler-month-popover-appointment\\\"\\n >\\n @for (segment of dayCell.hiddenAppointments; track segment.id + segment.originalStartDate) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"segment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n [title]=\\\"\\n segment.title +\\n (segment.allDay\\n ? ''\\n : ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')')\\n \\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n [ngClass]=\\\"segment.cssClass??`ax-scheduler-${segment.priority??'primary'}-periority`\\\"\\n >\\n <span class=\\\"ax-appointment-chip-title ax-scheduler-truncate\\\">{{ segment.title }}</span>\\n @if (!segment.allDay) {\\n <span>\\n {{\\n segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{\\n segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n </span>\\n }\\n </div>\\n }\\n </div>\\n </ax-popover>\\n }\\n </div>\\n </div>\\n }\\n </div>\\n</div>\\n\", styles: [\"ax-scheduler-month-view{height:100%;display:block;background-color:inherit;min-width:var(--ax-comp-scheduler-width)}ax-scheduler-month-view .ax-scheduler-month-container{height:100%;display:flex;flex-direction:column;background-color:inherit}ax-scheduler-month-view .ax-scheduler-month-weekdays{top:0;z-index:2;width:100%;display:grid;flex-shrink:0;position:sticky;padding:.5rem 0;text-align:center;grid-template-columns:repeat(7,minmax(0,1fr));background-color:var(--ax-comp-scheduler-all-day-bg, inherit);border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-month-view .ax-scheduler-month-weekdays .ax-scheduler-month-weekday{font-weight:500;font-size:.875rem}ax-scheduler-month-view .ax-scheduler-month-grid{width:100%;flex-grow:1;display:grid;grid-auto-rows:minmax(5rem,auto);grid-template-columns:repeat(7,minmax(0,1fr));border-left:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell{padding:.25rem;overflow:hidden;position:relative;border-right:1px solid rgba(var(--ax-sys-color-border-lightest-surface));border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-other-month{background-color:rgba(var(--ax-sys-color-border-lightest-surface),.2)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-other-month .ax-scheduler-month-day-number{color:rgba(var(--ax-sys-color-on-surface),.5)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today{background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today .ax-scheduler-month-day-number{font-weight:700;color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today.ax-other-month{background-color:rgba(var(--ax-sys-color-primary-surface),.025)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today.ax-other-month .ax-scheduler-month-day-number{color:rgba(var(--ax-sys-color-primary-surface),.5)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-holiday .ax-scheduler-month-day-number{font-weight:700;color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-holiday.ax-other-month .ax-scheduler-month-day-number{color:rgba(var(--ax-sys-color-danger-surface),.5)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-header{text-align:center;margin-bottom:.25rem}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-header .ax-scheduler-month-day-number{max-width:100%;font-size:.875rem;display:inline-block}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments{gap:.125rem;display:flex;overflow:hidden;flex-direction:column}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments .ax-scheduler-month-appointment-chip{overflow:hidden;font-size:.75rem;white-space:nowrap;border-radius:.25rem;text-overflow:ellipsis;padding:.125rem .25rem}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments .ax-scheduler-month-overflow-badge{cursor:pointer;text-align:left;font-size:.75rem;padding:.125rem 0;margin-top:.125rem}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments .ax-scheduler-month-overflow-badge:hover{text-decoration:underline}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-appointment-chip{cursor:pointer}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-day-cell{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-day-cell:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-day-cell:hover.ax-state-holiday{background-color:rgba(var(--ax-sys-color-danger-surface),.1)}\\n\"], dependencies: [{ kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: AXTranslatorPipe, name: \"translate\" }, { kind: \"component\", type: AXPopoverComponent, selector: \"ax-popover\", inputs: [\"offsetX\", \"offsetY\", \"target\", \"placement\", \"content\", \"openOn\", \"closeOn\", \"hasBackdrop\", \"openAfter\", \"closeAfter\", \"backdropClass\", \"panelClass\", \"adaptivityEnabled\"], outputs: [\"onOpened\", \"onClosed\"] }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }, { kind: \"directive\", type: AXDragDirective, selector: \"[axDrag]\", inputs: [\"dragData\", \"dragDisabled\", \"dragTransition\", \"dragElementClone\", \"dropZoneGroup\", \"dragStartDelay\", \"dragResetOnDblClick\", \"dragLockAxis\", \"dragClonedTemplate\", \"dragCursor\", \"dragBoundary\", \"dragTransitionDuration\"], outputs: [\"dragPositionChanged\"] }, { kind: \"directive\", type: AXDropZoneDirective, selector: \"[axDropZone]\", inputs: [\"dropZoneGroup\"], outputs: [\"onElementDrop\", \"onElementHover\"], exportAs: [\"axDropZone\"] }, { kind: \"directive\", type: AXTooltipDirective, selector: \"[axTooltip]\", inputs: [\"axTooltip\", \"axTooltipPlacement\", \"axTooltipOffsetX\", \"axTooltipOffsetY\", \"axTooltipOpenAfter\", \"axTooltipCloseAfter\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerMonthViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-scheduler-month-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [\n NgClass,\n AsyncPipe,\n AXTranslatorPipe,\n AXPopoverComponent,\n AXFormatPipe,\n AsyncPipe,\n AXDragDirective,\n AXDropZoneDirective,\n AXTooltipDirective,\n ], providers: [{ provide: AXComponent, useExisting: AXSchedulerMonthViewComponent }], template: \"<div class=\\\"ax-scheduler-month-container\\\">\\n <!-- Weekday Header -->\\n <div class=\\\"ax-scheduler-month-weekdays\\\">\\n @for (day of daysArray(); track day.date.getTime()) {\\n <div class=\\\"ax-scheduler-month-weekday\\\">\\n {{ day | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n </div>\\n }\\n </div>\\n\\n <!-- Calendar Grid -->\\n <div class=\\\"ax-scheduler-month-grid\\\" [style.gridTemplateRows]=\\\"gridTemplateRowsStyle()\\\">\\n @for (dayCell of dayCellLayouts(); track dayCell.date.date.getTime()) {\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleDrop($event, dayCell.date)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n (click)=\\\"handleSlotEvent($event, dayCell.date)\\\"\\n (dblclick)=\\\"handleSlotEvent($event, dayCell.date)\\\"\\n (contextmenu)=\\\"handleSlotEvent($event, dayCell.date)\\\"\\n class=\\\"ax-scheduler-month-day-cell\\\"\\n [class.ax-state-today]=\\\"dayCell.isToday\\\"\\n [class.ax-state-holiday]=\\\"dayCell.isHoliday\\\"\\n [class.ax-other-month]=\\\"!dayCell.isCurrentMonth\\\"\\n [attr.data-date]=\\\"dayCell.date | format: 'date' : { format: 'YYYY-MM-DD' }\\\"\\n >\\n <div class=\\\"ax-scheduler-month-day-header\\\">\\n <span class=\\\"ax-scheduler-month-day-number ax-scheduler-truncate\\\" [axTooltip]=\\\"dayCell.holidayTitle ?? ''\\\">\\n {{ dayCell.date.dayOfMonth }}\\n\\n @if (dayCell.holidayTitle) {\\n ( {{ dayCell.holidayTitle }} )\\n }\\n </span>\\n </div>\\n <div class=\\\"ax-scheduler-month-day-appointments\\\">\\n <!-- Visible Appointment Segments -->\\n @for (segment of dayCell.visibleAppointments; track segment.id + segment.originalStartDate) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"segment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment)\\\"\\n [title]=\\\"\\n segment.title +\\n (segment.allDay\\n ? ''\\n : ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')')\\n \\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n class=\\\"ax-scheduler-month-appointment-chip\\\"\\n [ngClass]=\\\"segment.cssClass??`ax-scheduler-${segment.priority??'primary'}-periority`\\\"\\n [class.continuation-to-next]=\\\"segment.isContinuationToNextDay && !segment.allDay\\\"\\n [class.continuation-from-prev]=\\\"segment.isContinuationFromPreviousDay && !segment.allDay\\\"\\n >\\n <span class=\\\"ax-appointment-chip-title ax-scheduler-truncate\\\">{{ segment.title }}</span>\\n @if (!segment.allDay) {\\n <span>\\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n -\\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </span>\\n }\\n </div>\\n }\\n <!-- Overflow Badge and Popover -->\\n @if (dayCell.overflowCount > 0) {\\n <div #moreAppointments class=\\\"ax-scheduler-month-overflow-badge\\\" (click)=\\\"$event.stopPropagation()\\\">\\n <!-- Stop propagation to prevent slot click -->\\n +{{ 'more-items' | translate: { params: { number: dayCell.overflowCount } } | async }}\\n </div>\\n <ax-popover [target]=\\\"moreAppointments\\\" placement=\\\"bottom-start\\\" trigger=\\\"click\\\">\\n <div\\n [class.ax-state-readonly]=\\\"readonly()\\\"\\n class=\\\"ax-overlay-pane ax-scheduler-popover ax-scheduler-month-popover-appointment\\\"\\n >\\n @for (segment of dayCell.hiddenAppointments; track segment.id + segment.originalStartDate) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"segment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n [title]=\\\"\\n segment.title +\\n (segment.allDay\\n ? ''\\n : ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')')\\n \\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n [ngClass]=\\\"segment.cssClass??`ax-scheduler-${segment.priority??'primary'}-periority`\\\"\\n >\\n <span class=\\\"ax-appointment-chip-title ax-scheduler-truncate\\\">{{ segment.title }}</span>\\n @if (!segment.allDay) {\\n <span>\\n {{\\n segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{\\n segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n </span>\\n }\\n </div>\\n }\\n </div>\\n </ax-popover>\\n }\\n </div>\\n </div>\\n }\\n </div>\\n</div>\\n\", styles: [\"ax-scheduler-month-view{height:100%;display:block;background-color:inherit;min-width:var(--ax-comp-scheduler-width)}ax-scheduler-month-view .ax-scheduler-month-container{height:100%;display:flex;flex-direction:column;background-color:inherit}ax-scheduler-month-view .ax-scheduler-month-weekdays{top:0;z-index:2;width:100%;display:grid;flex-shrink:0;position:sticky;padding:.5rem 0;text-align:center;grid-template-columns:repeat(7,minmax(0,1fr));background-color:var(--ax-comp-scheduler-all-day-bg, inherit);border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-month-view .ax-scheduler-month-weekdays .ax-scheduler-month-weekday{font-weight:500;font-size:.875rem}ax-scheduler-month-view .ax-scheduler-month-grid{width:100%;flex-grow:1;display:grid;grid-auto-rows:minmax(5rem,auto);grid-template-columns:repeat(7,minmax(0,1fr));border-left:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell{padding:.25rem;overflow:hidden;position:relative;border-right:1px solid rgba(var(--ax-sys-color-border-lightest-surface));border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-other-month{background-color:rgba(var(--ax-sys-color-border-lightest-surface),.2)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-other-month .ax-scheduler-month-day-number{color:rgba(var(--ax-sys-color-on-surface),.5)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today{background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today .ax-scheduler-month-day-number{font-weight:700;color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today.ax-other-month{background-color:rgba(var(--ax-sys-color-primary-surface),.025)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today.ax-other-month .ax-scheduler-month-day-number{color:rgba(var(--ax-sys-color-primary-surface),.5)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-holiday .ax-scheduler-month-day-number{font-weight:700;color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-holiday.ax-other-month .ax-scheduler-month-day-number{color:rgba(var(--ax-sys-color-danger-surface),.5)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-header{text-align:center;margin-bottom:.25rem}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-header .ax-scheduler-month-day-number{max-width:100%;font-size:.875rem;display:inline-block}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments{gap:.125rem;display:flex;overflow:hidden;flex-direction:column}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments .ax-scheduler-month-appointment-chip{overflow:hidden;font-size:.75rem;white-space:nowrap;border-radius:.25rem;text-overflow:ellipsis;padding:.125rem .25rem}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments .ax-scheduler-month-overflow-badge{cursor:pointer;text-align:left;font-size:.75rem;padding:.125rem 0;margin-top:.125rem}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments .ax-scheduler-month-overflow-badge:hover{text-decoration:underline}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-appointment-chip{cursor:pointer}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-day-cell{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-day-cell:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-day-cell:hover.ax-state-holiday{background-color:rgba(var(--ax-sys-color-danger-surface),.1)}\\n\"] }]\n }], propDecorators: { isReadonly: [{\n type: HostBinding,\n args: ['class.ax-state-readonly']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLW1vbnRoLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9zY2hlZHVsZXIvc3JjL2xpYi92aWV3cy9tb250aC9zY2hlZHVsZXItbW9udGgtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3ZpZXdzL21vbnRoL3NjaGVkdWxlci1tb250aC12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBdUIsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQWMsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXBDLE9BQU8sRUFFTCxvQkFBb0IsR0FHckIs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LE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksV0FDNUI7d0JBQ1AsT0FBTzt3QkFDUCxTQUFTO3dCQUNULGdCQUFnQjt3QkFDaEIsa0JBQWtCO3dCQUNsQixZQUFZO3dCQUNaLFNBQVM7d0JBQ1QsZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLGtCQUFrQjtxQkFDbkIsYUFDVSxDQUFDLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLCtCQUErQixFQUFFLENBQUM7OEJBdVByQyxVQUFVO3NCQUFyRCxXQUFXO3VCQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYQ29tcG9uZW50LCBOWENvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY2RrL2NvbW1vbic7XG5pbXBvcnQgeyBBWERyYWdEaXJlY3RpdmUsIEFYRHJvcFpvbmVEaXJlY3RpdmUsIEFYRHJvcFpvbmVEcm9wRXZlbnQgfSBmcm9tICdAYWNvcmV4L2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgQVhQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3BvcG92ZXInO1xuaW1wb3J0IHsgQVhUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3Rvb2x0aXAnO1xuaW1wb3J0IHsgQVhDYWxlbmRhclNlcnZpY2UsIEFYRGF0ZVRpbWUgfSBmcm9tICdAYWNvcmV4L2NvcmUvZGF0ZS10aW1lJztcbmltcG9ydCB7IEFYRm9ybWF0UGlwZSB9IGZyb20gJ0BhY29yZXgvY29yZS9mb3JtYXQnO1xuaW1wb3J0IHsgQVhUcmFuc2xhdG9yUGlwZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIEhvc3RCaW5kaW5nLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBvdXRwdXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG9yZGVyQnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQVhEYXlPZldlZWtOYW1lLCBBWFNjaGVkdWxlckFwcG9pbnRtZW50LCBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCB9IGZyb20gJy4uLy4uL3NjaGVkdWxlci5jbGFzcyc7IC8vIEFkanVzdCBwYXRoXG5pbXBvcnQge1xuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudCxcbiAgQVhTY2hlZHVsZXJDb21wb25lbnQsXG4gIEFYU2NoZWR1bGVyU2xvdERyb3BFdmVudCxcbiAgQVhTY2hlZHVsZXJTbG90TW91c2VFdmVudCxcbn0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWFNjaGVkdWxlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuc2VydmljZSc7IC8vIEFkanVzdCBwYXRoXG5cbi8vIC0tLSBUeXBlcyBzcGVjaWZpYyB0byBNb250aCBWaWV3IExheW91dCAtLS1cbi8vIFJlcHJlc2VudHMgYSBzaW5nbGUgZGF5IGNlbGwgaW4gdGhlIG1vbnRoIGdyaWRcbmV4cG9ydCB0eXBlIEFYU2NoZWR1bGVyTW9udGhEYXlDZWxsID0ge1xuICBkYXRlOiBBWERhdGVUaW1lO1xuICBpc0N1cnJlbnRNb250aDogYm9vbGVhbjtcbiAgaXNUb2RheTogYm9vbGVhbjtcbiAgaXNIb2xpZGF5OiBib29sZWFuO1xuICBob2xpZGF5VGl0bGU/OiBzdHJpbmc7XG4gIGFwcG9pbnRtZW50czogQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXTsgLy8gQWxsIGFwcG9pbnRtZW50cyBmb3IgdGhpcyBkYXlcbiAgdmlzaWJsZUFwcG9pbnRtZW50czogQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXTsgLy8gQXBwb2ludG1lbnRzIHRvIGRpc3BsYXkgYXMgY2hpcHNcbiAgaGlkZGVuQXBwb2ludG1lbnRzOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdOyAvLyBBcHBvaW50bWVudHMgaGlkZGVuIGJlaGluZCB0aGUgYmFkZ2VcbiAgb3ZlcmZsb3dDb3VudDogbnVtYmVyOyAvLyBDb3VudCBvZiBoaWRkZW4gYXBwb2ludG1lbnRzIChsZW5ndGggb2YgaGlkZGVuQXBwb2ludG1lbnRzKVxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtc2NoZWR1bGVyLW1vbnRoLXZpZXcnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2NoZWR1bGVyLW1vbnRoLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vc2NoZWR1bGVyLW1vbnRoLXZpZXcuY29tcG9uZW50LnNjc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW1xuICAgIE5nQ2xhc3MsXG4gICAgQXN5bmNQaXBlLFxuICAgIEFYVHJhbnNsYXRvclBpcGUsXG4gICAgQVhQb3BvdmVyQ29tcG9uZW50LFxuICAgIEFYRm9ybWF0UGlwZSxcbiAgICBBc3luY1BpcGUsXG4gICAgQVhEcmFnRGlyZWN0aXZlLFxuICAgIEFYRHJvcFpvbmVEaXJlY3RpdmUsXG4gICAgQVhUb29sdGlwRGlyZWN0aXZlLFxuICBdLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IEFYQ29tcG9uZW50LCB1c2VFeGlzdGluZzogQVhTY2hlZHVsZXJNb250aFZpZXdDb21wb25lbnQgfV0sXG59KVxuZXhwb3J0IGNsYXNzIEFYU2NoZWR1bGVyTW9udGhWaWV3Q29tcG9uZW50IGV4dGVuZHMgTlhDb21wb25lbnQge1xuICBwcml2YXRlIHNjaGVkdWxlciA9IGluamVjdChBWFNjaGVkdWxlckNvbXBvbmVudCk7XG4gIHByaXZhdGUgY2FsZW5kYXJTZXJ2aWNlID0gaW5qZWN0KEFYQ2FsZW5kYXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzY2hlZHVsZXJTZXJ2aWNlID0gaW5qZWN0KEFYU2NoZWR1bGVyU2VydmljZSk7XG5cbiAgLy8gLS0tIElucHV0cyAtLS1cbiAgcmVhZG9ubHkgPSBpbnB1dChmYWxzZSk7XG4gIGRyYWdnYWJsZSA9IGlucHV0KHRydWUpO1xuICBjYWxlbmRhciA9IGlucHV0PHN0cmluZz4oKTtcbiAgZGF0ZSA9IGlucHV0LnJlcXVpcmVkPEFYRGF0ZVRpbWU+KCk7XG4gIGZpcnN0RGF5T2ZXZWVrID0gaW5wdXQ8QVhEYXlPZldlZWtOYW1lPignc2F0dXJkYXknKTtcbiAgYXBwb2ludG1lbnRzID0gaW5wdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudFtdPihbXSk7XG5cbiAgLy8gLS0tIENvbnN0YW50cyAtLS1cbiAgcmVhZG9ubHkgREFZU19JTl9XRUVLID0gNztcbiAgcmVhZG9ubHkgTUFYX1ZJU0lCTEVfQVBQT0lOVE1FTlRTX1BFUl9EQVkgPSAyO1xuXG4gIC8vIEludGVybmFsIG91dHB1dHMgdG8gYmUgY2F1Z2h0IGJ5IHBhcmVudCBBWFNjaGVkdWxlckNvbXBvbmVudFxuICBzbG90Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIHNsb3REYmxDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgc2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIGFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBhcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgb25BcHBvaW50bWVudERyb3BJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3REcm9wRXZlbnQ+KCk7XG5cbiAgLy8gLS0tIEV2ZW50IEhhbmRsZXJzIC0tLVxuICBwcml2YXRlIHJlYWRvbmx5IGV2ZW50T3V0cHV0TWFwID0ge1xuICAgIHNsb3Q6IHtcbiAgICAgIGNsaWNrOiB0aGlzLnNsb3RDbGlja2VkSW50ZXJuYWwsXG4gICAgICBkYmxjbGljazogdGhpcy5zbG90RGJsQ2xpY2tlZEludGVybmFsLFxuICAgICAgY29udGV4dG1lbnU6IHRoaXMuc2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsLFxuICAgIH0sXG4gICAgYXBwb2ludG1lbnQ6IHtcbiAgICAgIGNsaWNrOiB0aGlzLmFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsLFxuICAgICAgZGJsY2xpY2s6IHRoaXMuYXBwb2ludG1lbnREYmxDbGlja2VkSW50ZXJuYWwsXG4gICAgICBjb250ZXh0bWVudTogdGhpcy5hcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsLFxuICAgIH0sXG4gIH07XG4gIGhhbmRsZUFwcG9pbnRtZW50RXZlbnQobW91c2VFdmVudDogTW91c2VFdmVudCwgYXBwb2ludG1lbnRTZWdtZW50T3JPcmlnaW5hbDogQVhTY2hlZHVsZXJBcHBvaW50bWVudCkge1xuICAgIGNvbnN0IG9yaWdpbmFsQXBwb2ludG1lbnQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0T3JpZ2luYWxBcHBvaW50bWVudChhcHBvaW50bWVudFNlZ21lbnRPck9yaWdpbmFsKTtcbiAgICBjb25zdCBhcHBvaW50bWVudFJlZiA9IHtcbiAgICAgIC4uLm9yaWdpbmFsQXBwb2ludG1lbnQsXG4gICAgICBlbmREYXRlOiBvcmlnaW5hbEFwcG9pbnRtZW50LmVuZERhdGUsXG4gICAgICBzdGFydERhdGU6IG9yaWdpbmFsQXBwb2ludG1lbnQuc3RhcnREYXRlLFxuICAgIH07XG4gICAgdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmhhbmRsZUV2ZW50KFxuICAgICAgeyBuYXRpdmVFdmVudDogbW91c2VFdmVudCwgYXBwb2ludG1lbnQ6IGFwcG9pbnRtZW50UmVmLCBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyIH0sXG4gICAgICB0aGlzLmV2ZW50T3V0cHV0TWFwLFxuICAgICAgJ2FwcG9pbnRtZW50JyxcbiAgICApO1xuICB9XG4gIGhhbmRsZVNsb3RFdmVudChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50LCBkYXRlOiBBWERhdGVUaW1lKSB7XG4gICAgY29uc3Qgc2xvdERhdGEgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0U2xvdERhdGEoZGF0ZS5zdGFydE9mKCdkYXknKSwgJ21vbnRoJyk7IC8vIEVuc3VyZSBpdCdzIHN0YXJ0IG9mIGRheVxuICAgIGlmIChzbG90RGF0YSkge1xuICAgICAgdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmhhbmRsZUV2ZW50KFxuICAgICAgICB7IG5hdGl2ZUV2ZW50OiBtb3VzZUV2ZW50LCBzbG90OiBzbG90RGF0YSwgc2VuZGVyOiB0aGlzLnNjaGVkdWxlciB9LFxuICAgICAgICB0aGlzLmV2ZW50T3V0cHV0TWFwLFxuICAgICAgICAnc2xvdCcsXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBoYW5kbGVEcm9wKGU6IEFYRHJvcFpvbmVEcm9wRXZlbnQsIGRhdGU6IEFYRGF0ZVRpbWUpIHtcbiAgICBjb25zdCBzbG90RGF0YSA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRTbG90RGF0YShkYXRlLnN0YXJ0T2YoJ2RheScpLCAnbW9udGgnKTtcbiAgICBjb25zdCBkcm9wcGVkSXRlbSA9IGUuZHJvcHBlZC5kcmFnRGF0YSgpIGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnQ7XG4gICAgY29uc3Qgb3JpZ2luYWxBcHBvaW50bWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRPcmlnaW5hbEFwcG9pbnRtZW50KGRyb3BwZWRJdGVtKTtcbiAgICBjb25zdCBhcHBvaW50bWVudFJlZiA9IHtcbiAgICAgIC4uLm9yaWdpbmFsQXBwb2ludG1lbnQsXG4gICAgICBlbmREYXRlOiBvcmlnaW5hbEFwcG9pbnRtZW50LmVuZERhdGUsXG4gICAgICBzdGFydERhdGU6IG9yaWdpbmFsQXBwb2ludG1lbnQuc3RhcnREYXRlLFxuICAgIH07XG4gICAgdGhpcy5vbkFwcG9pbnRtZW50RHJvcEludGVybmFsLmVtaXQoe1xuICAgICAgZHJvcEV2ZW50OiBlLFxuICAgICAgc2xvdDogc2xvdERhdGEsXG4gICAgICBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyLFxuICAgICAgYXBwb2ludG1lbnQ6IGFwcG9pbnRtZW50UmVmLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gLS0tIEJhc2UgQ29tcHV0ZWRzIC0tLVxuICAvLyBDYWxjdWxhdGUgdGhlIHN0YXJ0IG9mIHRoZSBtb250aCBiYXNlZCBvbiB0aGUgaW5wdXQgZGF0ZVxuICBtb250aFN0YXJ0RGF0ZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBkID0gdGhpcy5kYXRlKCk7XG4gICAgcmV0dXJuIGQgPyBkLnN0YXJ0T2YoJ21vbnRoJykgOiBudWxsO1xuICB9KTtcblxuICAvLyBHZW5lcmF0ZSB0aGUgbGlzdCBvZiB3ZWVrZGF5IG5hbWVzIGJhc2VkIG9uIHRoZSBmaXJzdERheU9mV2Vla1xuICBkYXlzQXJyYXkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZGF5TmFtZXM6IEFYRGF0ZVRpbWVbXSA9IFtdO1xuXG4gICAgY29uc3QgY3VycmVudERhdGUgPSB0aGlzLmRhdGUoKTsgLy8gVXNlIGEgc3RhYmxlIGRhdGUgZm9yIGdlbmVyYXRpbmcgd2VlayBoZWFkZXJzXG4gICAgY29uc3QgY3VycmVudERheU9mV2VlayA9IGN1cnJlbnREYXRlLmRheU9mV2VlaztcbiAgICBjb25zdCBkZXNpcmVkRmlyc3REYXlOYW1lID0gdGhpcy5maXJzdERheU9mV2VlaygpO1xuICAgIGNvbnN0IGRlc2lyZWRGaXJzdERheU51bWJlciA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXREYXlPZldlZWtOdW1iZXIoZGVzaXJlZEZpcnN0RGF5TmFtZSk7XG5cbiAgICAvLyBDYWxjdWxhdGUgZGF5cyB0byBzdWJ0cmFjdCB0byBnZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSB3ZWVrIGJhc2VkIG9uIGZpcnN0RGF5T2ZXZWVrXG4gICAgY29uc3QgZGF5c1RvU3VidHJhY3QgPSAoY3VycmVudERheU9mV2VlayAtIGRlc2lyZWRGaXJzdERheU51bWJlciArIDcpICUgNztcbiAgICBsZXQgaGVhZGVyU3RhcnREYXRlID0gY3VycmVudERhdGUuYWRkKCdkYXknLCAtZGF5c1RvU3VidHJhY3QpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgIGRheU5hbWVzLnB1c2goaGVhZGVyU3RhcnREYXRlKTtcbiAgICAgIGhlYWRlclN0YXJ0RGF0ZSA9IGhlYWRlclN0YXJ0RGF0ZS5hZGQoJ2RheScsIDEpO1xuICAgIH1cbiAgICByZXR1cm4gZGF5TmFtZXM7XG4gIH0pO1xuXG4gIC8vIC0tLSBDYWxlbmRhciBHcmlkIENhbGN1bGF0aW9uIC0tLVxuICBjYWxlbmRhckRheXNJbmZvID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IG1vbnRoU3RhcnQgPSB0aGlzLm1vbnRoU3RhcnREYXRlKCk7XG4gICAgaWYgKCFtb250aFN0YXJ0KSByZXR1cm4geyBkYXlzOiBbXSwgd2Vla3NOZWVkZWQ6IDAgfTtcblxuICAgIGNvbnN0IGZpcnN0RGF5T2ZNb250aCA9IG1vbnRoU3RhcnQ7XG4gICAgY29uc3QgbGFzdERheU9mTW9udGggPSBtb250aFN0YXJ0LmVuZE9mKCdtb250aCcpO1xuXG4gICAgY29uc3QgZmlyc3REYXlHcmlkTnVtID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldERheU9mV2Vla051bWJlcih0aGlzLmZpcnN0RGF5T2ZXZWVrKCkpO1xuICAgIGNvbnN0IGZpcnN0RGlzcGxheWVkRGF5T2ZXZWVrID0gZmlyc3REYXlPZk1vbnRoLmRheU9mV2VlaztcblxuICAgIGNvbnN0IGxlYWRpbmdEYXlzID0gKGZpcnN0RGlzcGxheWVkRGF5T2ZXZWVrIC0gZmlyc3REYXlHcmlkTnVtICsgdGhpcy5EQVlTX0lOX1dFRUspICUgdGhpcy5EQVlTX0lOX1dFRUs7XG4gICAgY29uc3QgZmlyc3REYXlPZkdyaWQgPSBmaXJzdERheU9mTW9udGguYWRkKCdkYXknLCAtbGVhZGluZ0RheXMpO1xuXG4gICAgLy8gRGV0ZXJtaW5lIGhvdyBtYW55IHRvdGFsIGRheXMgdG8gc2hvdyB0byBmaWxsIG91dCB0aGUgd2Vla3NcbiAgICAvLyBBIGNvbW1vbiBhcHByb2FjaCBpcyA2IHdlZWtzIHRvIGVuc3VyZSBjb25zaXN0ZW5jeSwgYnV0IHlvdXIgZHluYW1pYyB3ZWVrc05lZWRlZCBpcyBmaW5lIHRvby5cbiAgICAvLyBMZXQncyBzdGljayB0byB5b3VyIGR5bmFtaWMgYHdlZWtzTmVlZGVkYCBhbmQgYHRvdGFsRGF5c1RvR2VuZXJhdGVgXG4gICAgY29uc3QgZGF5c0luTW9udGggPSBsYXN0RGF5T2ZNb250aC5kYXlPZk1vbnRoO1xuICAgIGNvbnN0IHRvdGFsQ2VsbHNNaW5pbXVtID0gbGVhZGluZ0RheXMgKyBkYXlzSW5Nb250aDtcbiAgICBjb25zdCB3ZWVrc05lZWRlZER5bmFtaWMgPSBNYXRoLmNlaWwodG90YWxDZWxsc01pbmltdW0gLyB0aGlzLkRBWVNfSU5fV0VFSyk7XG4gICAgY29uc3QgYWN0dWFsV2Vla3NUb1Nob3cgPSBNYXRoLm1heCg0LCBNYXRoLm1pbih3ZWVrc05lZWRlZER5bmFtaWMsIDYpKTsgLy8gQ2xhbXAgd2Vla3NcbiAgICBjb25zdCB0b3RhbERheXNUb0dlbmVyYXRlID0gYWN0dWFsV2Vla3NUb1Nob3cgKiB0aGlzLkRBWVNfSU5fV0VFSztcblxuICAgIGNvbnN0IGRheXM6IHtcbiAgICAgIGRhdGU6IEFYRGF0ZVRpbWU7XG4gICAgICBpc0N1cnJlbnRNb250aDogYm9vbGVhbjtcbiAgICAgIGlzVG9kYXk6IGJvb2xlYW47XG4gICAgICBpc0hvbGlkYXk6IGJvb2xlYW47XG4gICAgICBob2xpZGF5VGl0bGU/OiBzdHJpbmc7XG4gICAgfVtdID0gW107XG4gICAgY29uc3QgdG9kYXkgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUobmV3IERhdGUoKSk7XG4gICAgbGV0IGN1cnJlbnREYXkgPSBmaXJzdERheU9mR3JpZDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG90YWxEYXlzVG9HZW5lcmF0ZTsgaSsrKSB7XG4gICAgICBjb25zdCBpc0hvbGlkYXkgPVxuICAgICAgICB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaXNIb2xpZGF5KGN1cnJlbnREYXkpIHx8IHRoaXMuc2NoZWR1bGVyU2VydmljZS5pc1dlZWtlbmQoY3VycmVudERheSwgdGhpcy5jYWxlbmRhcigpKTtcblxuICAgICAgbGV0IGhvbGlkYXlUaXRsZTogbnVsbCB8IHN0cmluZyA9IG51bGw7XG4gICAgICBpZiAoaXNIb2xpZGF5KSB7XG4gICAgICAgIGNvbnN0IGhvbGlkYXkgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5ob2xpZGF5cy5maWx0ZXIoKGQpID0+IGN1cnJlbnREYXkuZXF1YWwoZC5kYXRlLCAnZGF5JykpWzBdO1xuICAgICAgICBpZiAoaG9saWRheSkge1xuICAgICAgICAgIGhvbGlkYXlUaXRsZSA9IGhvbGlkYXkudGl0bGU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZGF5cy5wdXNoKHtcbiAgICAgICAgZGF0ZTogY3VycmVudERheSxcbiAgICAgICAgaXNDdXJyZW50TW9udGg6IGN1cnJlbnREYXkubW9udGhPZlllYXIgPT09IG1vbnRoU3RhcnQubW9udGhPZlllYXIsXG4gICAgICAgIGlzVG9kYXk6IGN1cnJlbnREYXkuZXF1YWwodG9kYXksICdkYXknKSxcbiAgICAgICAgaXNIb2xpZGF5LFxuICAgICAgICBob2xpZGF5VGl0bGUsXG4gICAgICB9KTtcbiAgICAgIGN1cnJlbnREYXkgPSBjdXJyZW50RGF5LmFkZCgnZGF5JywgMSk7XG4gICAgfVxuICAgIHJldHVybiB7IGRheXM6IGRheXMsIHdlZWtzTmVlZGVkOiBhY3R1YWxXZWVrc1RvU2hvdyB9O1xuICB9KTtcblxuICAvLyAtLS0gQXBwb2ludG1lbnQgR3JvdXBpbmcgLS0tXG4gIGFwcG9pbnRtZW50c0dyb3VwZWRCeURheSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB7IGRheXMgfSA9IHRoaXMuY2FsZW5kYXJEYXlzSW5mbygpOyAvLyBEZXN0cnVjdHVyZSB0byBnZXQgZGF5cyBhcnJheVxuICAgIGlmIChkYXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG5ldyBNYXA8c3RyaW5nLCBBWFNjaGVkdWxlckFwcG9pbnRtZW50W10+KCk7XG5cbiAgICBjb25zdCB2aWV3U3RhcnREYXRlID0gZGF5c1swXS5kYXRlO1xuICAgIGNvbnN0IHZpZXdFbmREYXRlID0gZGF5c1tkYXlzLmxlbmd0aCAtIDFdLmRhdGU7XG4gICAgY29uc3QgcmVsZXZhbnRBcHBvaW50bWVudHMgPSB0aGlzLmFwcG9pbnRtZW50cygpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2NoZWR1bGVyU2VydmljZS5ncm91cEFwcG9pbnRtZW50c0J5RGF5KHJlbGV2YW50QXBwb2ludG1lbnRzLCB2aWV3U3RhcnREYXRlLCB2aWV3RW5kRGF0ZSk7XG4gIH0pO1xuXG4gIC8vIC0tLSBEYXkgQ2VsbCBMYXlvdXQgQ2FsY3VsYXRpb24gLS0tXG4gIGRheUNlbGxMYXlvdXRzID0gY29tcHV0ZWQ8QVhTY2hlZHVsZXJNb250aERheUNlbGxbXT4oKCkgPT4ge1xuICAgIGNvbnN0IHsgZGF5czogaW5pdGlhbERheXNJbmZvIH0gPSB0aGlzLmNhbGVuZGFyRGF5c0luZm8oKTtcbiAgICBjb25zdCBhbGxPcmlnaW5hbEFwcG9pbnRtZW50cyA9IHRoaXMuYXBwb2ludG1lbnRzKCk7XG5cbiAgICBpZiAoaW5pdGlhbERheXNJbmZvLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdOyAvLyBSZXR1cm4gZW1wdHkgYXJyYXkgaWYgbm8gZGF5cyB0byBwcm9jZXNzXG4gICAgfVxuICAgIGlmICghYWxsT3JpZ2luYWxBcHBvaW50bWVudHMgfHwgYWxsT3JpZ2luYWxBcHBvaW50bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBJZiBubyBhcHBvaW50bWVudHMsIG1hcCBpbml0aWFsRGF5c0luZm8gdG8gdGhlIGZ1bGwgc3RydWN0dXJlIHdpdGggZW1wdHkgYXBwb2ludG1lbnQgYXJyYXlzXG4gICAgICByZXR1cm4gaW5pdGlhbERheXNJbmZvLm1hcCgoZGF5SW5mbykgPT4gKHtcbiAgICAgICAgLi4uZGF5SW5mbyxcbiAgICAgICAgYXBwb2ludG1lbnRzOiBbXSxcbiAgICAgICAgdmlzaWJsZUFwcG9pbnRtZW50czogW10sXG4gICAgICAgIGhpZGRlbkFwcG9pbnRtZW50czogW10sXG4gICAgICAgIG92ZXJmbG93Q291bnQ6IDAsXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluaXRpYWxEYXlzSW5mby5tYXAoKGRheUluZm8pID0+IHtcbiAgICAgIGNvbnN0IGRheUFzU3RhcnRPZkRheSA9IGRheUluZm8uZGF0ZS5zdGFydE9mKCdkYXknKTtcbiAgICAgIGNvbnN0IHNlZ21lbnRzRm9yVGhpc0RheTogQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXSA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IGFwcHQgb2YgYWxsT3JpZ2luYWxBcHBvaW50bWVudHMpIHtcbiAgICAgICAgY29uc3Qgc2VnbWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRDbG9uZWRBcHBvaW50bWVudFNlZ21lbnRPbkRheShcbiAgICAgICAgICBhcHB0LFxuICAgICAgICAgIGRheUFzU3RhcnRPZkRheSxcbiAgICAgICAgICAwLCAvLyB2aWV3U3RhcnRIb3VyIGZvciBtb250aCBjZWxsIGNvbnRleHQgKGZ1bGwgZGF5KVxuICAgICAgICAgIDI0LCAvLyB2aWV3RW5kSG91ciBmb3IgbW9udGggY2VsbCBjb250ZXh0IChmdWxsIGRheSlcbiAgICAgICAgICB0cnVlLCAvLyBpc0Z1bGxEYXlDZWxsQ29udGV4dCA9IHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHNlZ21lbnQpIHtcbiAgICAgICAgICBzZWdtZW50c0ZvclRoaXNEYXkucHVzaChzZWdtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBzb3J0ZWRTZWdtZW50cyA9IG9yZGVyQnkoXG4gICAgICAgIHNlZ21lbnRzRm9yVGhpc0RheSxcbiAgICAgICAgW1xuICAgICAgICAgIChzKSA9PiAocy5hbGxEYXkgPyAwIDogMSksIC8vIFNlZ21lbnRzIG1hcmtlZCBhcyBhbGxEYXkgZmlyc3RcbiAgICAgICAgICAocykgPT4gcy5vcmlnaW5hbFN0YXJ0RGF0ZS5nZXRUaW1lKCksIC8vIFRoZW4gYnkgb3JpZ2luYWwgc3RhcnQgdGltZVxuICAgICAgICAgIChzKSA9PiBzLm9yaWdpbmFsRW5kRGF0ZS5nZXRUaW1lKCkgLSBzLm9yaWdpbmFsU3RhcnREYXRlLmdldFRpbWUoKSwgLy8gVGhlbiBieSBkdXJhdGlvbiAobG9uZ2VyIGZpcnN0KVxuICAgICAgICAgIChzKSA9PiBzLnRpdGxlPy50b0xvd2VyQ2FzZSgpID8/ICcnLCAvLyBUaGVuIGJ5IHRpdGxlXG4gICAgICAgIF0sXG4gICAgICAgIFsnYXNjJywgJ2FzYycsICdkZXNjJywgJ2FzYyddLFxuICAgICAgKTtcblxuICAgICAgY29uc3QgdmlzaWJsZUFwcG9pbnRtZW50cyA9IHNvcnRlZFNlZ21lbnRzLnNsaWNlKDAsIHRoaXMuTUFYX1ZJU0lCTEVfQVBQT0lOVE1FTlRTX1BFUl9EQVkpO1xuICAgICAgY29uc3QgaGlkZGVuQXBwb2ludG1lbnRzID0gc29ydGVkU2VnbWVudHMuc2xpY2UodGhpcy5NQVhfVklTSUJMRV9BUFBPSU5UTUVOVFNfUEVSX0RBWSk7XG4gICAgICBjb25zdCBvdmVyZmxvd0NvdW50ID0gaGlkZGVuQXBwb2ludG1lbnRzLmxlbmd0aDtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZGF5SW5mbyxcbiAgICAgICAgYXBwb2ludG1lbnRzOiBzb3J0ZWRTZWdtZW50cyxcbiAgICAgICAgdmlzaWJsZUFwcG9pbnRtZW50cyxcbiAgICAgICAgaGlkZGVuQXBwb2ludG1lbnRzLFxuICAgICAgICBvdmVyZmxvd0NvdW50LFxuICAgICAgfTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gLS0tIER5bmFtaWMgR3JpZCBSb3dzIC0tLVxuICBncmlkVGVtcGxhdGVSb3dzU3R5bGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgeyB3ZWVrc05lZWRlZCB9ID0gdGhpcy5jYWxlbmRhckRheXNJbmZvKCk7XG4gICAgaWYgKCF3ZWVrc05lZWRlZCB8fCB3ZWVrc05lZWRlZCA8PSAwKSB7XG4gICAgICByZXR1cm4gYHJlcGVhdCg2LCBtaW5tYXgoMCwgMWZyKSlgOyAvLyBGYWxsYmFjaywgZW5zdXJlcyBncmlkIGlzIGF0IGxlYXN0IHNvbWV3aGF0IHNlbnNpYmxlXG4gICAgfVxuICAgIHJldHVybiBgcmVwZWF0KCR7d2Vla3NOZWVkZWR9LCBtaW5tYXgoMCwgMWZyKSlgOyAvLyBVc2UgMWZyIGZvciBlcXVhbCBkaXN0cmlidXRpb25cbiAgfSk7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5heC1zdGF0ZS1yZWFkb25seScpIGdldCBpc1JlYWRvbmx5KCkge1xuICAgIHJldHVybiB0aGlzLnJlYWRvbmx5KCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItbW9udGgtY29udGFpbmVyXCI+XG4gIDwhLS0gV2Vla2RheSBIZWFkZXIgLS0+XG4gIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItbW9udGgtd2Vla2RheXNcIj5cbiAgICBAZm9yIChkYXkgb2YgZGF5c0FycmF5KCk7IHRyYWNrIGRheS5kYXRlLmdldFRpbWUoKSkge1xuICAgICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1tb250aC13ZWVrZGF5XCI+XG4gICAgICAgIHt7IGRheSB8IGZvcm1hdDogJ2RhdGUnIDogeyBmb3JtYXQ6ICdkZGRkJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuXG4gIDwhLS0gQ2FsZW5kYXIgR3JpZCAtLT5cbiAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1tb250aC1ncmlkXCIgW3N0eWxlLmdyaWRUZW1wbGF0ZVJvd3NdPVwiZ3JpZFRlbXBsYXRlUm93c1N0eWxlKClcIj5cbiAgICBAZm9yIChkYXlDZWxsIG9mIGRheUNlbGxMYXlvdXRzKCk7IHRyYWNrIGRheUNlbGwuZGF0ZS5kYXRlLmdldFRpbWUoKSkge1xuICAgICAgPGRpdlxuICAgICAgICBheERyb3Bab25lXG4gICAgICAgICN6b25lPVwiYXhEcm9wWm9uZVwiXG4gICAgICAgIChvbkVsZW1lbnREcm9wKT1cImhhbmRsZURyb3AoJGV2ZW50LCBkYXlDZWxsLmRhdGUpXCJcbiAgICAgICAgW2NsYXNzLmF4LXNjaGVkdWxlci1zbG90LWhvdmVyZWRdPVwiem9uZS5pc0hvdmVyZWQoKVwiXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVTbG90RXZlbnQoJGV2ZW50LCBkYXlDZWxsLmRhdGUpXCJcbiAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZVNsb3RFdmVudCgkZXZlbnQsIGRheUNlbGwuZGF0ZSlcIlxuICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlU2xvdEV2ZW50KCRldmVudCwgZGF5Q2VsbC5kYXRlKVwiXG4gICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLW1vbnRoLWRheS1jZWxsXCJcbiAgICAgICAgW2NsYXNzLmF4LXN0YXRlLXRvZGF5XT1cImRheUNlbGwuaXNUb2RheVwiXG4gICAgICAgIFtjbGFzcy5heC1zdGF0ZS1ob2xpZGF5XT1cImRheUNlbGwuaXNIb2xpZGF5XCJcbiAgICAgICAgW2NsYXNzLmF4LW90aGVyLW1vbnRoXT1cIiFkYXlDZWxsLmlzQ3VycmVudE1vbnRoXCJcbiAgICAgICAgW2F0dHIuZGF0YS1kYXRlXT1cImRheUNlbGwuZGF0ZSB8IGZvcm1hdDogJ2RhdGUnIDogeyBmb3JtYXQ6ICdZWVlZLU1NLUREJyB9XCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1tb250aC1kYXktaGVhZGVyXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC1zY2hlZHVsZXItbW9udGgtZGF5LW51bWJlciBheC1zY2hlZHVsZXItdHJ1bmNhdGVcIiBbYXhUb29sdGlwXT1cImRheUNlbGwuaG9saWRheVRpdGxlID8/ICcnXCI+XG4gICAgICAgICAgICB7eyBkYXlDZWxsLmRhdGUuZGF5T2ZNb250aCB9fVxuXG4gICAgICAgICAgICBAaWYgKGRheUNlbGwuaG9saWRheVRpdGxlKSB7XG4gICAgICAgICAgICAgICgge3sgZGF5Q2VsbC5ob2xpZGF5VGl0bGUgfX0gKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItbW9udGgtZGF5LWFwcG9pbnRtZW50c1wiPlxuICAgICAgICAgIDwhLS0gVmlzaWJsZSBBcHBvaW50bWVudCBTZWdtZW50cyAtLT5cbiAgICAgICAgICBAZm9yIChzZWdtZW50IG9mIGRheUNlbGwudmlzaWJsZUFwcG9pbnRtZW50czsgdHJhY2sgc2VnbWVudC5pZCArIHNlZ21lbnQub3JpZ2luYWxTdGFydERhdGUpIHtcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgYXhEcmFnXG4gICAgICAgICAgICAgIFtkcmFnQ3Vyc29yXT1cIidncmFiJ1wiXG4gICAgICAgICAgICAgIFtkcmFnRGF0YV09XCJzZWdtZW50XCJcbiAgICAgICAgICAgICAgW2RyYWdUcmFuc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2RyYWdFbGVtZW50Q2xvbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtkcmFnRGlzYWJsZWRdPVwiIWRyYWdnYWJsZSgpIHx8IHNlZ21lbnQucmVhZG9ubHkgfHwgcmVhZG9ubHkoKVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgc2VnbWVudClcIlxuICAgICAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIHNlZ21lbnQpXCJcbiAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzZWdtZW50KVwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCJcbiAgICAgICAgICAgICAgICBzZWdtZW50LnRpdGxlICtcbiAgICAgICAgICAgICAgICAoc2VnbWVudC5hbGxEYXlcbiAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgIDogJyAoJyArXG4gICAgICAgICAgICAgICAgICAgIChzZWdtZW50Lm9yaWdpbmFsU3RhcnREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYykgK1xuICAgICAgICAgICAgICAgICAgICAnIC0gJyArXG4gICAgICAgICAgICAgICAgICAgIChzZWdtZW50Lm9yaWdpbmFsRW5kRGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMpICtcbiAgICAgICAgICAgICAgICAgICAgJyknKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbY2xhc3MuYWxsLWRheS1zZWdtZW50XT1cInNlZ21lbnQuYWxsRGF5XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItbW9udGgtYXBwb2ludG1lbnQtY2hpcFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlZ21lbnQuY3NzQ2xhc3M/P2BheC1zY2hlZHVsZXItJHtzZWdtZW50LnByaW9yaXR5Pz8ncHJpbWFyeSd9LXBlcmlvcml0eWBcIlxuICAgICAgICAgICAgICBbY2xhc3MuY29udGludWF0aW9uLXRvLW5leHRdPVwic2VnbWVudC5pc0NvbnRpbnVhdGlvblRvTmV4dERheSAmJiAhc2VnbWVudC5hbGxEYXlcIlxuICAgICAgICAgICAgICBbY2xhc3MuY29udGludWF0aW9uLWZyb20tcHJldl09XCJzZWdtZW50LmlzQ29udGludWF0aW9uRnJvbVByZXZpb3VzRGF5ICYmICFzZWdtZW50LmFsbERheVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtYXBwb2ludG1lbnQtY2hpcC10aXRsZSBheC1zY2hlZHVsZXItdHJ1bmNhdGVcIj57eyBzZWdtZW50LnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICBAaWYgKCFzZWdtZW50LmFsbERheSkge1xuICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAge3sgc2VnbWVudC5vcmlnaW5hbFN0YXJ0RGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBmb3JtYXQ6ICdISDptbScsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgICAgICAgICAgICAgLVxuICAgICAgICAgICAgICAgICAge3sgc2VnbWVudC5vcmlnaW5hbEVuZERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgZm9ybWF0OiAnSEg6bW0nLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgICA8IS0tIE92ZXJmbG93IEJhZGdlIGFuZCBQb3BvdmVyIC0tPlxuICAgICAgICAgIEBpZiAoZGF5Q2VsbC5vdmVyZmxvd0NvdW50ID4gMCkge1xuICAgICAgICAgICAgPGRpdiAjbW9yZUFwcG9pbnRtZW50cyBjbGFzcz1cImF4LXNjaGVkdWxlci1tb250aC1vdmVyZmxvdy1iYWRnZVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgPCEtLSBTdG9wIHByb3BhZ2F0aW9uIHRvIHByZXZlbnQgc2xvdCBjbGljayAtLT5cbiAgICAgICAgICAgICAgK3t7ICdtb3JlLWl0ZW1zJyB8IHRyYW5zbGF0ZTogeyBwYXJhbXM6IHsgbnVtYmVyOiBkYXlDZWxsLm92ZXJmbG93Q291bnQgfSB9IHwgYXN5bmMgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGF4LXBvcG92ZXIgW3RhcmdldF09XCJtb3JlQXBwb2ludG1lbnRzXCIgcGxhY2VtZW50PVwiYm90dG9tLXN0YXJ0XCIgdHJpZ2dlcj1cImNsaWNrXCI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBbY2xhc3MuYXgtc3RhdGUtcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJheC1vdmVybGF5LXBhbmUgYXgtc2NoZWR1bGVyLXBvcG92ZXIgYXgtc2NoZWR1bGVyLW1vbnRoLXBvcG92ZXItYXBwb2ludG1lbnRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQGZvciAoc2VnbWVudCBvZiBkYXlDZWxsLmhpZGRlbkFwcG9pbnRtZW50czsgdHJhY2sgc2VnbWVudC5pZCArIHNlZ21lbnQub3JpZ2luYWxTdGFydERhdGUpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgYXhEcmFnXG4gICAgICAgICAgICAgICAgICAgIFtkcmFnQ3Vyc29yXT1cIidncmFiJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtkcmFnRGF0YV09XCJzZWdtZW50XCJcbiAgICAgICAgICAgICAgICAgICAgW2RyYWdUcmFuc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW2RyYWdFbGVtZW50Q2xvbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtkcmFnRGlzYWJsZWRdPVwiIWRyYWdnYWJsZSgpIHx8IHNlZ21lbnQucmVhZG9ubHkgfHwgcmVhZG9ubHkoKVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgc2VnbWVudCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgIChkYmxjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgc2VnbWVudCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgIChjb250ZXh0bWVudSk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgc2VnbWVudCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50LnRpdGxlICtcbiAgICAgICAgICAgICAgICAgICAgICAoc2VnbWVudC5hbGxEYXlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJyAoJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChzZWdtZW50Lm9yaWdpbmFsU3RhcnREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnIC0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChzZWdtZW50Lm9yaWdpbmFsRW5kRGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJyknKVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1wb3BvdmVyLWFwcG9pbnRtZW50XCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFsbC1kYXktc2VnbWVudF09XCJzZWdtZW50LmFsbERheVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlZ21lbnQuY3NzQ2xhc3M/P2BheC1zY2hlZHVsZXItJHtzZWdtZW50LnByaW9yaXR5Pz8ncHJpbWFyeSd9LXBlcmlvcml0eWBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF4LWFwcG9pbnRtZW50LWNoaXAtdGl0bGUgYXgtc2NoZWR1bGVyLXRydW5jYXRlXCI+e3sgc2VnbWVudC50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgQGlmICghc2VnbWVudC5hbGxEYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnQub3JpZ2luYWxTdGFydERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgZm9ybWF0OiAnSEg6bW0nLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmNcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAtXG4gICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50Lm9yaWdpbmFsRW5kRGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBmb3JtYXQ6ICdISDptbScsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luY1xuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2F4LXBvcG92ZXI+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXDragDirective, AXDropZoneDirective } from '@acorex/cdk/drag-drop';\nimport { AXDecoratorGenericComponent } from '@acorex/components/decorators';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AsyncPipe, NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, HostBinding, ViewEncapsulation, computed, inject, input, output, } from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport { AXSchedulerComponent, } from '../../scheduler.component';\nimport { AXSchedulerService } from '../../scheduler.service';\nimport * as i0 from \"@angular/core\";\nexport class AXSchedulerTimelineDayViewComponent extends NXComponent {\n constructor() {\n super(...arguments);\n this.scheduler = inject(AXSchedulerComponent);\n this.calendarService = inject(AXCalendarService);\n this.schedulerService = inject(AXSchedulerService);\n this.GAP_PX = 1;\n this.readonly = input(false);\n this.draggable = input(true);\n this.calendar = input();\n this.date = input.required();\n this.endDayHour = input.required();\n this.startDayHour = input.required();\n this.appointments = input([]);\n /**\n * Processes original appointments to get segments relevant to this specific day and its viewable hours.\n * Filters out original all-day events.\n */\n this.processedSegmentsForLayout = computed(() => {\n const viewDate = this.date();\n const allOriginalAppointments = this.appointments();\n const viewConfigStartHour = this.startDayHour();\n const viewConfigEndHour = this.endDayHour();\n if (!viewDate || !allOriginalAppointments || allOriginalAppointments.length === 0) {\n return [];\n }\n const segmentsOnThisDay = [];\n for (const appt of allOriginalAppointments) {\n if (appt.allDay) {\n continue;\n }\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, viewDate, viewConfigStartHour, viewConfigEndHour, false);\n if (segment) {\n segmentsOnThisDay.push(segment);\n }\n }\n return segmentsOnThisDay;\n });\n // Internal outputs to be caught by parent AXSchedulerComponent\n this.slotClickedInternal = output();\n this.slotDblClickedInternal = output();\n this.slotRightClickedInternal = output();\n this.appointmentClickedInternal = output();\n this.appointmentDblClickedInternal = output();\n this.appointmentRightClickedInternal = output();\n this.onAppointmentDropInternal = output();\n // --- Event Handlers ---\n this.eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n this.hoursArray = computed(() => {\n let time = this.date();\n if (!time)\n return [];\n time = time.set('hour', this.startDayHour()).startOf('hour');\n const hours = [time];\n while (time.hour < this.endDayHour() - 1) {\n time = time.add('hour', 1);\n hours.push(time);\n }\n return hours;\n });\n // --- Appointment Layout Calculation ---\n this.appointmentLayouts = computed(() => {\n const finalLayouts = [];\n const viewConfigStartHour = this.startDayHour();\n const viewConfigEndHour = this.endDayHour();\n const appointmentsToLayout = this.processedSegmentsForLayout(); // USE SEGMENTS\n if (typeof viewConfigStartHour !== 'number' ||\n typeof viewConfigEndHour !== 'number' ||\n appointmentsToLayout.length === 0) {\n return finalLayouts;\n }\n const sortedAppointments = orderBy(appointmentsToLayout, [(seg) => seg.startDate.getTime(), (seg) => seg.originalEndDate.getTime()], ['asc', 'desc']);\n const rowEndTimes = [];\n for (const segment of sortedAppointments) {\n const horizLayout = this.schedulerService.calculateTimelineLayout(segment, // Pass the segment\n viewConfigStartHour, viewConfigEndHour);\n if (!horizLayout)\n continue; // Segment is outside the viewable hour range or invalid\n // For overlap check, use the segment's start and end times\n const segmentStartTime = this.calendarService.create(segment.startDate, this.calendar());\n const segmentEndTime = this.calendarService.create(segment.endDate, this.calendar());\n let assignedRowIndex = -1;\n for (let i = 0; i < rowEndTimes.length; i++) {\n // If this segment starts AFTER OR AT the time the row becomes free\n if (segmentStartTime.compare(rowEndTimes[i], 'minute') >= 0) {\n assignedRowIndex = i;\n break;\n }\n }\n if (assignedRowIndex === -1) {\n assignedRowIndex = rowEndTimes.length;\n rowEndTimes.push(segmentEndTime); // Add segment's end time for the new row\n }\n else {\n // Update the end time for the assigned row with this segment's end time\n rowEndTimes[assignedRowIndex] = segmentEndTime;\n }\n const layoutHeight = 'var(--ax-comp-scheduler-timeline-view-blocks-height)'; // CSS variable for height\n const layoutLeft = horizLayout.left;\n const layoutWidth = `calc(${horizLayout.width} - ${this.GAP_PX}px)`; // Apply horizontal gap if items are side-by-side within a row (not typical for this stacking)\n const layoutTop = `calc(${assignedRowIndex} * (${layoutHeight} + ${this.GAP_PX}px))`; // Vertical stacking with gap\n finalLayouts.push({\n appointment: segment, // Store the segment data\n layoutLeft,\n layoutWidth,\n layoutTop,\n layoutHeight,\n });\n }\n return finalLayouts;\n });\n }\n handleAppointmentEvent(mouseEvent, appointmentItem) {\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, appointment: appointmentRef, sender: this.scheduler }, this.eventOutputMap, 'appointment');\n }\n handleSlotEvent(mouseEvent, startDate) {\n const slotData = this.schedulerService.getSlotData(startDate, 'timeline-day');\n if (slotData)\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler }, this.eventOutputMap, 'slot');\n }\n handleDrop(e, startDate) {\n const slotData = this.schedulerService.getSlotData(startDate, 'timeline-day');\n const droppedItem = e.dropped.dragData();\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n });\n }\n get isReadonly() {\n return this.readonly();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerTimelineDayViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.4\", type: AXSchedulerTimelineDayViewComponent, isStandalone: true, selector: \"ax-scheduler-timeline-day-view\", inputs: { readonly: { classPropertyName: \"readonly\", publicName: \"readonly\", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: \"draggable\", publicName: \"draggable\", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: \"calendar\", publicName: \"calendar\", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: \"date\", publicName: \"date\", isSignal: true, isRequired: true, transformFunction: null }, endDayHour: { classPropertyName: \"endDayHour\", publicName: \"endDayHour\", isSignal: true, isRequired: true, transformFunction: null }, startDayHour: { classPropertyName: \"startDayHour\", publicName: \"startDayHour\", isSignal: true, isRequired: true, transformFunction: null }, appointments: { classPropertyName: \"appointments\", publicName: \"appointments\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: \"slotClickedInternal\", slotDblClickedInternal: \"slotDblClickedInternal\", slotRightClickedInternal: \"slotRightClickedInternal\", appointmentClickedInternal: \"appointmentClickedInternal\", appointmentDblClickedInternal: \"appointmentDblClickedInternal\", appointmentRightClickedInternal: \"appointmentRightClickedInternal\", onAppointmentDropInternal: \"onAppointmentDropInternal\" }, host: { properties: { \"class.ax-state-readonly\": \"this.isReadonly\" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineDayViewComponent }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-scheduler-timeline-header\\\">\\n @for (hour of hoursArray(); track hour.date.getTime()) {\\n <div class=\\\"ax-scheduler-timeline-header-hours\\\">\\n <span>{{ hour | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}</span>\\n </div>\\n }\\n</div>\\n\\n<div class=\\\"ax-scheduler-timeline-content\\\">\\n <div class=\\\"ax-scheduler-timeline-appointment-container\\\">\\n @for (layout of appointmentLayouts(); track layout.appointment.id) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || layout.appointment.readonly || readonly()\\\"\\n [dragData]=\\\"layout.appointment\\\"\\n (click)=\\\"handleAppointmentEvent($event, layout.appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, layout.appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, layout.appointment)\\\"\\n [title]=\\\"layout.appointment.title\\\"\\n [style.width]=\\\"layout.layoutWidth\\\"\\n [style.height]=\\\"layout.layoutHeight\\\"\\n class=\\\"ax-scheduler-timeline-appointment\\\"\\n [style.insetBlockStart]=\\\"layout.layoutTop\\\"\\n [style.insetInlineStart]=\\\"layout.layoutLeft\\\"\\n [ngClass]=\\\"layout.appointment.cssClass??`ax-scheduler-${layout.appointment.priority??'primary'}-periority`\\\"\\n >\\n <ax-title class=\\\"ax-scheduler-truncate\\\">{{ layout.appointment.title }}</ax-title>\\n <ax-subtitle>\\n {{\\n layout.appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{ layout.appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n </div>\\n <div class=\\\"ax-scheduler-timeline-slot-row\\\" aria-hidden=\\\"true\\\">\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleDrop($event, time)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n class=\\\"ax-scheduler-timeline-slot-cell\\\"\\n (click)=\\\"handleSlotEvent($event, time)\\\"\\n (dblclick)=\\\"handleSlotEvent($event, time)\\\"\\n (contextmenu)=\\\"handleSlotEvent($event, time)\\\"\\n ></div>\\n }\\n </div>\\n</div>\\n\", styles: [\"ax-scheduler-timeline-day-view{height:100%;position:relative;display:inline-flex;flex-direction:column;background-color:inherit}ax-scheduler-timeline-day-view .ax-scheduler-timeline-header{top:0;z-index:2;width:100%;display:flex;position:sticky;background-color:var(--ax-comp-scheduler-all-day-bg, inherit);border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view .ax-scheduler-timeline-header .ax-scheduler-timeline-header-hours{position:relative;padding:.25rem .5rem;width:var(--ax-comp-scheduler-timeline-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view .ax-scheduler-timeline-header .ax-scheduler-timeline-header-hours span{position:sticky;inset-inline-start:.5rem}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content{height:100%;position:relative}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container{top:0;width:100%;height:100%;position:absolute}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;display:flex;overflow:hidden;position:absolute;inset-inline-start:0;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-slot-row{height:100%;display:flex}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-slot-row .ax-scheduler-timeline-slot-cell{width:var(--ax-comp-scheduler-timeline-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view:not(.ax-state-readonly) .ax-scheduler-timeline-appointment{z-index:1;cursor:pointer}ax-scheduler-timeline-day-view:not(.ax-state-readonly) .ax-scheduler-timeline-slot-cell{z-index:0;cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-timeline-day-view:not(.ax-state-readonly) .ax-scheduler-timeline-slot-cell:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}\\n\"], dependencies: [{ kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"component\", type: AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"directive\", type: AXDragDirective, selector: \"[axDrag]\", inputs: [\"dragData\", \"dragDisabled\", \"dragTransition\", \"dragElementClone\", \"dropZoneGroup\", \"dragStartDelay\", \"dragResetOnDblClick\", \"dragLockAxis\", \"dragClonedTemplate\", \"dragCursor\", \"dragBoundary\", \"dragTransitionDuration\"], outputs: [\"dragPositionChanged\"] }, { kind: \"directive\", type: AXDropZoneDirective, selector: \"[axDropZone]\", inputs: [\"dropZoneGroup\"], outputs: [\"onElementDrop\", \"onElementHover\"], exportAs: [\"axDropZone\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerTimelineDayViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-scheduler-timeline-day-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [NgClass, AXDecoratorGenericComponent, AXFormatPipe, AsyncPipe, AXDragDirective, AXDropZoneDirective], providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineDayViewComponent }], template: \"<div class=\\\"ax-scheduler-timeline-header\\\">\\n @for (hour of hoursArray(); track hour.date.getTime()) {\\n <div class=\\\"ax-scheduler-timeline-header-hours\\\">\\n <span>{{ hour | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}</span>\\n </div>\\n }\\n</div>\\n\\n<div class=\\\"ax-scheduler-timeline-content\\\">\\n <div class=\\\"ax-scheduler-timeline-appointment-container\\\">\\n @for (layout of appointmentLayouts(); track layout.appointment.id) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || layout.appointment.readonly || readonly()\\\"\\n [dragData]=\\\"layout.appointment\\\"\\n (click)=\\\"handleAppointmentEvent($event, layout.appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, layout.appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, layout.appointment)\\\"\\n [title]=\\\"layout.appointment.title\\\"\\n [style.width]=\\\"layout.layoutWidth\\\"\\n [style.height]=\\\"layout.layoutHeight\\\"\\n class=\\\"ax-scheduler-timeline-appointment\\\"\\n [style.insetBlockStart]=\\\"layout.layoutTop\\\"\\n [style.insetInlineStart]=\\\"layout.layoutLeft\\\"\\n [ngClass]=\\\"layout.appointment.cssClass??`ax-scheduler-${layout.appointment.priority??'primary'}-periority`\\\"\\n >\\n <ax-title class=\\\"ax-scheduler-truncate\\\">{{ layout.appointment.title }}</ax-title>\\n <ax-subtitle>\\n {{\\n layout.appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{ layout.appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n </div>\\n <div class=\\\"ax-scheduler-timeline-slot-row\\\" aria-hidden=\\\"true\\\">\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleDrop($event, time)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n class=\\\"ax-scheduler-timeline-slot-cell\\\"\\n (click)=\\\"handleSlotEvent($event, time)\\\"\\n (dblclick)=\\\"handleSlotEvent($event, time)\\\"\\n (contextmenu)=\\\"handleSlotEvent($event, time)\\\"\\n ></div>\\n }\\n </div>\\n</div>\\n\", styles: [\"ax-scheduler-timeline-day-view{height:100%;position:relative;display:inline-flex;flex-direction:column;background-color:inherit}ax-scheduler-timeline-day-view .ax-scheduler-timeline-header{top:0;z-index:2;width:100%;display:flex;position:sticky;background-color:var(--ax-comp-scheduler-all-day-bg, inherit);border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view .ax-scheduler-timeline-header .ax-scheduler-timeline-header-hours{position:relative;padding:.25rem .5rem;width:var(--ax-comp-scheduler-timeline-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view .ax-scheduler-timeline-header .ax-scheduler-timeline-header-hours span{position:sticky;inset-inline-start:.5rem}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content{height:100%;position:relative}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container{top:0;width:100%;height:100%;position:absolute}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;display:flex;overflow:hidden;position:absolute;inset-inline-start:0;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-slot-row{height:100%;display:flex}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-slot-row .ax-scheduler-timeline-slot-cell{width:var(--ax-comp-scheduler-timeline-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view:not(.ax-state-readonly) .ax-scheduler-timeline-appointment{z-index:1;cursor:pointer}ax-scheduler-timeline-day-view:not(.ax-state-readonly) .ax-scheduler-timeline-slot-cell{z-index:0;cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-timeline-day-view:not(.ax-state-readonly) .ax-scheduler-timeline-slot-cell:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}\\n\"] }]\n }], propDecorators: { isReadonly: [{\n type: HostBinding,\n args: ['class.ax-state-readonly']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLXRpbWVsaW5lLWRheS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NyYy9saWIvdmlld3MvdGltZWxpbmUtZGF5L3NjaGVkdWxlci10aW1lbGluZS1kYXktdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3ZpZXdzL3RpbWVsaW5lLWRheS9zY2hlZHVsZXItdGltZWxpbmUtZGF5LXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUF1QixNQUFNLHVCQUF1QixDQUFDO0FBQ2xHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxpQkFBaUIsRUFBYyxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFNcEMsT0FBTyxFQUVMLG9CQUFvQixHQUdyQixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5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RUFBRSxjQUFjO1NBQzVCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFvRkQsSUFBNEMsVUFBVTtRQUNwRCxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN6QixDQUFDOzhHQW5NVSxtQ0FBbUM7a0dBQW5DLG1DQUFtQyxpOUNBRm5DLENBQUMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxtQ0FBbUMsRUFBRSxDQUFDLGlEQ3JDekYsNDJFQXVEQSx3MkVEbkJZLE9BQU8sb0ZBQUUsMkJBQTJCLG9MQUFFLFlBQVksMENBQUUsU0FBUyw4Q0FBRSxlQUFlLDJUQUFFLG1CQUFtQjs7MkZBR2xHLG1DQUFtQztrQkFUL0MsU0FBUzsrQkFDRSxnQ0FBZ0MsbUJBR3pCLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksV0FDNUIsQ0FBQyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLENBQUMsYUFDbkcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxxQ0FBcUMsRUFBRSxDQUFDOzhCQW1NM0MsVUFBVTtzQkFBckQsV0FBVzt1QkFBQyx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWENvbXBvbmVudCwgTlhDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2Nkay9jb21tb24nO1xuaW1wb3J0IHsgQVhEcmFnRGlyZWN0aXZlLCBBWERyb3Bab25lRGlyZWN0aXZlLCBBWERyb3Bab25lRHJvcEV2ZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IEFYRGVjb3JhdG9yR2VuZXJpY0NvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFYQ2FsZW5kYXJTZXJ2aWNlLCBBWERhdGVUaW1lIH0gZnJvbSAnQGFjb3JleC9jb3JlL2RhdGUtdGltZSc7XG5pbXBvcnQgeyBBWEZvcm1hdFBpcGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvZm9ybWF0JztcbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBIb3N0QmluZGluZyxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGNvbXB1dGVkLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBvdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgb3JkZXJCeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge1xuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50LFxuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50TGF5b3V0LFxuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCxcbn0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLmNsYXNzJztcbmltcG9ydCB7XG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50LFxuICBBWFNjaGVkdWxlckNvbXBvbmVudCxcbiAgQVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50LFxuICBBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50LFxufSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEFYU2NoZWR1bGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NjaGVkdWxlci5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtc2NoZWR1bGVyLXRpbWVsaW5lLWRheS12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NjaGVkdWxlci10aW1lbGluZS1kYXktdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9zY2hlZHVsZXItdGltZWxpbmUtZGF5LXZpZXcuY29tcG9uZW50LnNjc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW05nQ2xhc3MsIEFYRGVjb3JhdG9yR2VuZXJpY0NvbXBvbmVudCwgQVhGb3JtYXRQaXBlLCBBc3luY1BpcGUsIEFYRHJhZ0RpcmVjdGl2ZSwgQVhEcm9wWm9uZURpcmVjdGl2ZV0sXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogQVhDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBBWFNjaGVkdWxlclRpbWVsaW5lRGF5Vmlld0NvbXBvbmVudCB9XSxcbn0pXG5leHBvcnQgY2xhc3MgQVhTY2hlZHVsZXJUaW1lbGluZURheVZpZXdDb21wb25lbnQgZXh0ZW5kcyBOWENvbXBvbmVudCB7XG4gIHByaXZhdGUgc2NoZWR1bGVyID0gaW5qZWN0KEFYU2NoZWR1bGVyQ29tcG9uZW50KTtcbiAgcHJpdmF0ZSBjYWxlbmRhclNlcnZpY2UgPSBpbmplY3QoQVhDYWxlbmRhclNlcnZpY2UpO1xuICBwcml2YXRlIHNjaGVkdWxlclNlcnZpY2UgPSBpbmplY3QoQVhTY2hlZHVsZXJTZXJ2aWNlKTtcblxuICByZWFkb25seSBHQVBfUFggPSAxO1xuXG4gIHJlYWRvbmx5ID0gaW5wdXQoZmFsc2UpO1xuICBkcmFnZ2FibGUgPSBpbnB1dCh0cnVlKTtcbiAgY2FsZW5kYXIgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIGRhdGUgPSBpbnB1dC5yZXF1aXJlZDxBWERhdGVUaW1lPigpO1xuICBlbmREYXlIb3VyID0gaW5wdXQucmVxdWlyZWQ8bnVtYmVyPigpO1xuICBzdGFydERheUhvdXIgPSBpbnB1dC5yZXF1aXJlZDxudW1iZXI+KCk7XG4gIGFwcG9pbnRtZW50cyA9IGlucHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRbXT4oW10pO1xuXG4gIC8qKlxuICAgKiBQcm9jZXNzZXMgb3JpZ2luYWwgYXBwb2ludG1lbnRzIHRvIGdldCBzZWdtZW50cyByZWxldmFudCB0byB0aGlzIHNwZWNpZmljIGRheSBhbmQgaXRzIHZpZXdhYmxlIGhvdXJzLlxuICAgKiBGaWx0ZXJzIG91dCBvcmlnaW5hbCBhbGwtZGF5IGV2ZW50cy5cbiAgICovXG4gIHByb2Nlc3NlZFNlZ21lbnRzRm9yTGF5b3V0ID0gY29tcHV0ZWQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXT4oKCkgPT4ge1xuICAgIGNvbnN0IHZpZXdEYXRlID0gdGhpcy5kYXRlKCk7XG4gICAgY29uc3QgYWxsT3JpZ2luYWxBcHBvaW50bWVudHMgPSB0aGlzLmFwcG9pbnRtZW50cygpO1xuICAgIGNvbnN0IHZpZXdDb25maWdTdGFydEhvdXIgPSB0aGlzLnN0YXJ0RGF5SG91cigpO1xuICAgIGNvbnN0IHZpZXdDb25maWdFbmRIb3VyID0gdGhpcy5lbmREYXlIb3VyKCk7XG5cbiAgICBpZiAoIXZpZXdEYXRlIHx8ICFhbGxPcmlnaW5hbEFwcG9pbnRtZW50cyB8fCBhbGxPcmlnaW5hbEFwcG9pbnRtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBzZWdtZW50c09uVGhpc0RheTogQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgYXBwdCBvZiBhbGxPcmlnaW5hbEFwcG9pbnRtZW50cykge1xuICAgICAgaWYgKGFwcHQuYWxsRGF5KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzZWdtZW50ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldENsb25lZEFwcG9pbnRtZW50U2VnbWVudE9uRGF5KFxuICAgICAgICBhcHB0LFxuICAgICAgICB2aWV3RGF0ZSxcbiAgICAgICAgdmlld0NvbmZpZ1N0YXJ0SG91cixcbiAgICAgICAgdmlld0NvbmZpZ0VuZEhvdXIsXG4gICAgICAgIGZhbHNlLFxuICAgICAgKTtcblxuICAgICAgaWYgKHNlZ21lbnQpIHtcbiAgICAgICAgc2VnbWVudHNPblRoaXNEYXkucHVzaChzZWdtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNlZ21lbnRzT25UaGlzRGF5O1xuICB9KTtcblxuICAvLyBJbnRlcm5hbCBvdXRwdXRzIHRvIGJlIGNhdWdodCBieSBwYXJlbnQgQVhTY2hlZHVsZXJDb21wb25lbnRcbiAgc2xvdENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBzbG90RGJsQ2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIHNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBhcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgYXBwb2ludG1lbnREYmxDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIGFwcG9pbnRtZW50UmlnaHRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIG9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50PigpO1xuXG4gIC8vIC0tLSBFdmVudCBIYW5kbGVycyAtLS1cbiAgcHJpdmF0ZSByZWFkb25seSBldmVudE91dHB1dE1hcCA9IHtcbiAgICBzbG90OiB7XG4gICAgICBjbGljazogdGhpcy5zbG90Q2xpY2tlZEludGVybmFsLFxuICAgICAgZGJsY2xpY2s6IHRoaXMuc2xvdERibENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGNvbnRleHRtZW51OiB0aGlzLnNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCxcbiAgICB9LFxuICAgIGFwcG9pbnRtZW50OiB7XG4gICAgICBjbGljazogdGhpcy5hcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGRibGNsaWNrOiB0aGlzLmFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsLFxuICAgICAgY29udGV4dG1lbnU6IHRoaXMuYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCxcbiAgICB9LFxuICB9O1xuICBoYW5kbGVBcHBvaW50bWVudEV2ZW50KG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQsIGFwcG9pbnRtZW50SXRlbTogQVhTY2hlZHVsZXJBcHBvaW50bWVudCkge1xuICAgIGNvbnN0IG9yaWdpbmFsQXBwb2ludG1lbnQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0T3JpZ2luYWxBcHBvaW50bWVudChhcHBvaW50bWVudEl0ZW0pO1xuICAgIGNvbnN0IGFwcG9pbnRtZW50UmVmID0ge1xuICAgICAgLi4ub3JpZ2luYWxBcHBvaW50bWVudCxcbiAgICAgIGVuZERhdGU6IG9yaWdpbmFsQXBwb2ludG1lbnQuZW5kRGF0ZSxcbiAgICAgIHN0YXJ0RGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5zdGFydERhdGUsXG4gICAgfTtcbiAgICB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaGFuZGxlRXZlbnQoXG4gICAgICB7IG5hdGl2ZUV2ZW50OiBtb3VzZUV2ZW50LCBhcHBvaW50bWVudDogYXBwb2ludG1lbnRSZWYsIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIgfSxcbiAgICAgIHRoaXMuZXZlbnRPdXRwdXRNYXAsXG4gICAgICAnYXBwb2ludG1lbnQnLFxuICAgICk7XG4gIH1cbiAgaGFuZGxlU2xvdEV2ZW50KG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQsIHN0YXJ0RGF0ZTogQVhEYXRlVGltZSkge1xuICAgIGNvbnN0IHNsb3REYXRhID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldFNsb3REYXRhKHN0YXJ0RGF0ZSwgJ3RpbWVsaW5lLWRheScpO1xuICAgIGlmIChzbG90RGF0YSlcbiAgICAgIHRoaXMuc2NoZWR1bGVyU2VydmljZS5oYW5kbGVFdmVudChcbiAgICAgICAgeyBuYXRpdmVFdmVudDogbW91c2VFdmVudCwgc2xvdDogc2xvdERhdGEsIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIgfSxcbiAgICAgICAgdGhpcy5ldmVudE91dHB1dE1hcCxcbiAgICAgICAgJ3Nsb3QnLFxuICAgICAgKTtcbiAgfVxuICBoYW5kbGVEcm9wKGU6IEFYRHJvcFpvbmVEcm9wRXZlbnQsIHN0YXJ0RGF0ZTogQVhEYXRlVGltZSkge1xuICAgIGNvbnN0IHNsb3REYXRhID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldFNsb3REYXRhKHN0YXJ0RGF0ZSwgJ3RpbWVsaW5lLWRheScpO1xuICAgIGNvbnN0IGRyb3BwZWRJdGVtID0gZS5kcm9wcGVkLmRyYWdEYXRhKCkgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudDtcbiAgICBjb25zdCBvcmlnaW5hbEFwcG9pbnRtZW50ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldE9yaWdpbmFsQXBwb2ludG1lbnQoZHJvcHBlZEl0ZW0pO1xuICAgIGNvbnN0IGFwcG9pbnRtZW50UmVmID0ge1xuICAgICAgLi4ub3JpZ2luYWxBcHBvaW50bWVudCxcbiAgICAgIGVuZERhdGU6IG9yaWdpbmFsQXBwb2ludG1lbnQuZW5kRGF0ZSxcbiAgICAgIHN0YXJ0RGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5zdGFydERhdGUsXG4gICAgfTtcbiAgICB0aGlzLm9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwuZW1pdCh7XG4gICAgICBkcm9wRXZlbnQ6IGUsXG4gICAgICBzbG90OiBzbG90RGF0YSxcbiAgICAgIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIsXG4gICAgICBhcHBvaW50bWVudDogYXBwb2ludG1lbnRSZWYsXG4gICAgfSk7XG4gIH1cblxuICBob3Vyc0FycmF5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGxldCB0aW1lID0gdGhpcy5kYXRlKCk7XG4gICAgaWYgKCF0aW1lKSByZXR1cm4gW107XG4gICAgdGltZSA9IHRpbWUuc2V0KCdob3VyJywgdGhpcy5zdGFydERheUhvdXIoKSkuc3RhcnRPZignaG91cicpO1xuICAgIGNvbnN0IGhvdXJzID0gW3RpbWVdO1xuICAgIHdoaWxlICh0aW1lLmhvdXIgPCB0aGlzLmVuZERheUhvdXIoKSAtIDEpIHtcbiAgICAgIHRpbWUgPSB0aW1lLmFkZCgnaG91cicsIDEpO1xuICAgICAgaG91cnMucHVzaCh0aW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIGhvdXJzO1xuICB9KTtcblxuICAvLyAtLS0gQXBwb2ludG1lbnQgTGF5b3V0IENhbGN1bGF0aW9uIC0tLVxuICBhcHBvaW50bWVudExheW91dHMgPSBjb21wdXRlZCgoKTogQVhTY2hlZHVsZXJBcHBvaW50bWVudExheW91dFtdID0+IHtcbiAgICBjb25zdCBmaW5hbExheW91dHM6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRMYXlvdXRbXSA9IFtdO1xuICAgIGNvbnN0IHZpZXdDb25maWdTdGFydEhvdXIgPSB0aGlzLnN0YXJ0RGF5SG91cigpO1xuICAgIGNvbnN0IHZpZXdDb25maWdFbmRIb3VyID0gdGhpcy5lbmREYXlIb3VyKCk7XG4gICAgY29uc3QgYXBwb2ludG1lbnRzVG9MYXlvdXQgPSB0aGlzLnByb2Nlc3NlZFNlZ21lbnRzRm9yTGF5b3V0KCk7IC8vIFVTRSBTRUdNRU5UU1xuXG4gICAgaWYgKFxuICAgICAgdHlwZW9mIHZpZXdDb25maWdTdGFydEhvdXIgIT09ICdudW1iZXInIHx8XG4gICAgICB0eXBlb2Ygdmlld0NvbmZpZ0VuZEhvdXIgIT09ICdudW1iZXInIHx8XG4gICAgICBhcHBvaW50bWVudHNUb0xheW91dC5sZW5ndGggPT09IDBcbiAgICApIHtcbiAgICAgIHJldHVybiBmaW5hbExheW91dHM7XG4gICAgfVxuXG4gICAgY29uc3Qgc29ydGVkQXBwb2ludG1lbnRzID0gb3JkZXJCeShcbiAgICAgIGFwcG9pbnRtZW50c1RvTGF5b3V0LFxuICAgICAgWyhzZWcpID0+IHNlZy5zdGFydERhdGUuZ2V0VGltZSgpLCAoc2VnKSA9PiBzZWcub3JpZ2luYWxFbmREYXRlLmdldFRpbWUoKV0sXG4gICAgICBbJ2FzYycsICdkZXNjJ10sXG4gICAgKTtcblxuICAgIGNvbnN0IHJvd0VuZFRpbWVzOiBBWERhdGVUaW1lW10gPSBbXTtcblxuICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBzb3J0ZWRBcHBvaW50bWVudHMpIHtcbiAgICAgIGNvbnN0IGhvcml6TGF5b3V0ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmNhbGN1bGF0ZVRpbWVsaW5lTGF5b3V0KFxuICAgICAgICBzZWdtZW50LCAvLyBQYXNzIHRoZSBzZWdtZW50XG4gICAgICAgIHZpZXdDb25maWdTdGFydEhvdXIsXG4gICAgICAgIHZpZXdDb25maWdFbmRIb3VyLFxuICAgICAgKTtcblxuICAgICAgaWYgKCFob3JpekxheW91dCkgY29udGludWU7IC8vIFNlZ21lbnQgaXMgb3V0c2lkZSB0aGUgdmlld2FibGUgaG91ciByYW5nZSBvciBpbnZhbGlkXG5cbiAgICAgIC8vIEZvciBvdmVybGFwIGNoZWNrLCB1c2UgdGhlIHNlZ21lbnQncyBzdGFydCBhbmQgZW5kIHRpbWVzXG4gICAgICBjb25zdCBzZWdtZW50U3RhcnRUaW1lID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKHNlZ21lbnQuc3RhcnREYXRlLCB0aGlzLmNhbGVuZGFyKCkpO1xuICAgICAgY29uc3Qgc2VnbWVudEVuZFRpbWUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoc2VnbWVudC5lbmREYXRlLCB0aGlzLmNhbGVuZGFyKCkpO1xuXG4gICAgICBsZXQgYXNzaWduZWRSb3dJbmRleCA9IC0xO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dFbmRUaW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyBJZiB0aGlzIHNlZ21lbnQgc3RhcnRzIEFGVEVSIE9SIEFUIHRoZSB0aW1lIHRoZSByb3cgYmVjb21lcyBmcmVlXG4gICAgICAgIGlmIChzZWdtZW50U3RhcnRUaW1lLmNvbXBhcmUocm93RW5kVGltZXNbaV0sICdtaW51dGUnKSA+PSAwKSB7XG4gICAgICAgICAgYXNzaWduZWRSb3dJbmRleCA9IGk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGFzc2lnbmVkUm93SW5kZXggPT09IC0xKSB7XG4gICAgICAgIGFzc2lnbmVkUm93SW5kZXggPSByb3dFbmRUaW1lcy5sZW5ndGg7XG4gICAgICAgIHJvd0VuZFRpbWVzLnB1c2goc2VnbWVudEVuZFRpbWUpOyAvLyBBZGQgc2VnbWVudCdzIGVuZCB0aW1lIGZvciB0aGUgbmV3IHJvd1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBlbmQgdGltZSBmb3IgdGhlIGFzc2lnbmVkIHJvdyB3aXRoIHRoaXMgc2VnbWVudCdzIGVuZCB0aW1lXG4gICAgICAgIHJvd0VuZFRpbWVzW2Fzc2lnbmVkUm93SW5kZXhdID0gc2VnbWVudEVuZFRpbWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxheW91dEhlaWdodCA9ICd2YXIoLS1heC1jb21wLXNjaGVkdWxlci10aW1lbGluZS12aWV3LWJsb2Nrcy1oZWlnaHQpJzsgLy8gQ1NTIHZhcmlhYmxlIGZvciBoZWlnaHRcbiAgICAgIGNvbnN0IGxheW91dExlZnQgPSBob3JpekxheW91dC5sZWZ0O1xuICAgICAgY29uc3QgbGF5b3V0V2lkdGggPSBgY2FsYygke2hvcml6TGF5b3V0LndpZHRofSAtICR7dGhpcy5HQVBfUFh9cHgpYDsgLy8gQXBwbHkgaG9yaXpvbnRhbCBnYXAgaWYgaXRlbXMgYXJlIHNpZGUtYnktc2lkZSB3aXRoaW4gYSByb3cgKG5vdCB0eXBpY2FsIGZvciB0aGlzIHN0YWNraW5nKVxuICAgICAgY29uc3QgbGF5b3V0VG9wID0gYGNhbGMoJHthc3NpZ25lZFJvd0luZGV4fSAqICgke2xheW91dEhlaWdodH0gKyAke3RoaXMuR0FQX1BYfXB4KSlgOyAvLyBWZXJ0aWNhbCBzdGFja2luZyB3aXRoIGdhcFxuXG4gICAgICBmaW5hbExheW91dHMucHVzaCh7XG4gICAgICAgIGFwcG9pbnRtZW50OiBzZWdtZW50LCAvLyBTdG9yZSB0aGUgc2VnbWVudCBkYXRhXG4gICAgICAgIGxheW91dExlZnQsXG4gICAgICAgIGxheW91dFdpZHRoLFxuICAgICAgICBsYXlvdXRUb3AsXG4gICAgICAgIGxheW91dEhlaWdodCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBmaW5hbExheW91dHM7XG4gIH0pO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYXgtc3RhdGUtcmVhZG9ubHknKSBnZXQgaXNSZWFkb25seSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkb25seSgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRpbWVsaW5lLWhlYWRlclwiPlxuICBAZm9yIChob3VyIG9mIGhvdXJzQXJyYXkoKTsgdHJhY2sgaG91ci5kYXRlLmdldFRpbWUoKSkge1xuICAgIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItdGltZWxpbmUtaGVhZGVyLWhvdXJzXCI+XG4gICAgICA8c3Bhbj57eyBob3VyIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19PC9zcGFuPlxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci10aW1lbGluZS1jb250ZW50XCI+XG4gIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItdGltZWxpbmUtYXBwb2ludG1lbnQtY29udGFpbmVyXCI+XG4gICAgQGZvciAobGF5b3V0IG9mIGFwcG9pbnRtZW50TGF5b3V0cygpOyB0cmFjayBsYXlvdXQuYXBwb2ludG1lbnQuaWQpIHtcbiAgICAgIDxkaXZcbiAgICAgICAgYXhEcmFnXG4gICAgICAgIFtkcmFnQ3Vyc29yXT1cIidncmFiJ1wiXG4gICAgICAgIFtkcmFnVHJhbnNpdGlvbl09XCJmYWxzZVwiXG4gICAgICAgIFtkcmFnRWxlbWVudENsb25lXT1cInRydWVcIlxuICAgICAgICBbZHJhZ0Rpc2FibGVkXT1cIiFkcmFnZ2FibGUoKSB8fCBsYXlvdXQuYXBwb2ludG1lbnQucmVhZG9ubHkgfHwgcmVhZG9ubHkoKVwiXG4gICAgICAgIFtkcmFnRGF0YV09XCJsYXlvdXQuYXBwb2ludG1lbnRcIlxuICAgICAgICAoY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGxheW91dC5hcHBvaW50bWVudClcIlxuICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGxheW91dC5hcHBvaW50bWVudClcIlxuICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGxheW91dC5hcHBvaW50bWVudClcIlxuICAgICAgICBbdGl0bGVdPVwibGF5b3V0LmFwcG9pbnRtZW50LnRpdGxlXCJcbiAgICAgICAgW3N0eWxlLndpZHRoXT1cImxheW91dC5sYXlvdXRXaWR0aFwiXG4gICAgICAgIFtzdHlsZS5oZWlnaHRdPVwibGF5b3V0LmxheW91dEhlaWdodFwiXG4gICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRpbWVsaW5lLWFwcG9pbnRtZW50XCJcbiAgICAgICAgW3N0eWxlLmluc2V0QmxvY2tTdGFydF09XCJsYXlvdXQubGF5b3V0VG9wXCJcbiAgICAgICAgW3N0eWxlLmluc2V0SW5saW5lU3RhcnRdPVwibGF5b3V0LmxheW91dExlZnRcIlxuICAgICAgICBbbmdDbGFzc109XCJsYXlvdXQuYXBwb2ludG1lbnQuY3NzQ2xhc3M/P2BheC1zY2hlZHVsZXItJHtsYXlvdXQuYXBwb2ludG1lbnQucHJpb3JpdHk/PydwcmltYXJ5J30tcGVyaW9yaXR5YFwiXG4gICAgICA+XG4gICAgICAgIDxheC10aXRsZSBjbGFzcz1cImF4LXNjaGVkdWxlci10cnVuY2F0ZVwiPnt7IGxheW91dC5hcHBvaW50bWVudC50aXRsZSB9fTwvYXgtdGl0bGU+XG4gICAgICAgIDxheC1zdWJ0aXRsZT5cbiAgICAgICAgICB7e1xuICAgICAgICAgICAgbGF5b3V0LmFwcG9pbnRtZW50Lm9yaWdpbmFsU3RhcnREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jXG4gICAgICAgICAgfX1cbiAgICAgICAgICAtXG4gICAgICAgICAge3sgbGF5b3V0LmFwcG9pbnRtZW50Lm9yaWdpbmFsRW5kRGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBmb3JtYXQ6ICdISDptbScsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgICA8L2F4LXN1YnRpdGxlPlxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci10aW1lbGluZS1zbG90LXJvd1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIEBmb3IgKHRpbWUgb2YgaG91cnNBcnJheSgpOyB0cmFjayB0aW1lLmRhdGUuZ2V0VGltZSgpKSB7XG4gICAgICA8ZGl2XG4gICAgICAgIGF4RHJvcFpvbmVcbiAgICAgICAgI3pvbmU9XCJheERyb3Bab25lXCJcbiAgICAgICAgKG9uRWxlbWVudERyb3ApPVwiaGFuZGxlRHJvcCgkZXZlbnQsIHRpbWUpXCJcbiAgICAgICAgW2NsYXNzLmF4LXNjaGVkdWxlci1zbG90LWhvdmVyZWRdPVwiem9uZS5pc0hvdmVyZWQoKVwiXG4gICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRpbWVsaW5lLXNsb3QtY2VsbFwiXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVTbG90RXZlbnQoJGV2ZW50LCB0aW1lKVwiXG4gICAgICAgIChkYmxjbGljayk9XCJoYW5kbGVTbG90RXZlbnQoJGV2ZW50LCB0aW1lKVwiXG4gICAgICAgIChjb250ZXh0bWVudSk9XCJoYW5kbGVTbG90RXZlbnQoJGV2ZW50LCB0aW1lKVwiXG4gICAgICA+PC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbjwvZGl2PlxuIl19","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXDragDirective, AXDropZoneDirective } from '@acorex/cdk/drag-drop';\nimport { AXDecoratorGenericComponent } from '@acorex/components/decorators';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe, NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, HostBinding, ViewEncapsulation, computed, inject, input, output, } from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport { AXSchedulerComponent, } from '../../scheduler.component';\nimport { AXSchedulerService } from '../../scheduler.service';\nimport * as i0 from \"@angular/core\";\nexport class AXSchedulerTimelineMonthViewComponent extends NXComponent {\n constructor() {\n super(...arguments);\n this.scheduler = inject(AXSchedulerComponent);\n this.calendarService = inject(AXCalendarService);\n this.schedulerService = inject(AXSchedulerService);\n this.MAX_VISIBLE_APPOINTMENTS_PER_DAY = 3;\n this.readonly = input(false);\n this.draggable = input(true);\n this.calendar = input();\n this.date = input.required();\n this.appointments = input([]);\n this.processedDayData = computed(() => {\n const allOriginalAppointments = this.appointments();\n const monthStartDate = this.date().startOf('month');\n const daysInMonth = monthStartDate.endOf('month').dayOfMonth;\n if (!allOriginalAppointments) {\n return Array.from({ length: daysInMonth }, (_, i) => {\n const dayDate = monthStartDate.add('day', i);\n return {\n date: dayDate,\n visibleAppointments: [],\n hiddenAppointments: [],\n moreCount: 0,\n };\n });\n }\n const result = [];\n for (let i = 0; i < daysInMonth; i++) {\n const currentDayDate = monthStartDate.add('day', i).startOf('day'); // Ensure it's start of day\n const segmentsForThisDay = [];\n for (const appt of allOriginalAppointments) {\n // For Timeline Month View, each day is a row. We want segments for the full 24h of that day.\n // The view's startHour/endHour are NOT used to clip segments here,\n // as it's not a horizontal time scale *within* the day row.\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, currentDayDate, 0, 24, true);\n if (segment) {\n segmentsForThisDay.push(segment);\n }\n }\n // Sort segments: all-day first, then by segment start time (which is clipped to the day)\n const sortedSegments = orderBy(segmentsForThisDay, [\n (s) => (s.allDay ? 0 : 1), // Segments marked as allDay first\n (s) => s.startDate.getTime(), // Segment's start time on this day\n (s) => s.endDate.getTime() - s.startDate.getTime(), // Segment's duration on this day\n (s) => s.title?.toLowerCase() ?? '',\n ], ['asc', 'asc', 'desc', 'asc']);\n const visibleAppointments = sortedSegments.slice(0, this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);\n const hiddenAppointments = sortedSegments.slice(this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);\n result.push({\n date: currentDayDate,\n visibleAppointments: visibleAppointments,\n hiddenAppointments: hiddenAppointments,\n moreCount: hiddenAppointments.length,\n holiday: this.isHoliday(currentDayDate),\n });\n }\n return result;\n });\n // Internal outputs to be caught by parent AXSchedulerComponent\n this.slotClickedInternal = output();\n this.slotDblClickedInternal = output();\n this.slotRightClickedInternal = output();\n this.appointmentClickedInternal = output();\n this.appointmentDblClickedInternal = output();\n this.appointmentRightClickedInternal = output();\n this.onAppointmentDropInternal = output();\n // --- Event Handlers ---\n this.eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n }\n handleAppointmentEvent(mouseEvent, appointmentItem) {\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, appointment: appointmentRef, sender: this.scheduler }, this.eventOutputMap, 'appointment');\n }\n handleSlotEvent(mouseEvent, date) {\n // date is the specific day\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'timeline-month');\n if (slotData)\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler }, this.eventOutputMap, 'slot');\n }\n handleDrop(e, date) {\n // date is the specific day\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'timeline-month');\n const droppedItem = e.dropped.dragData();\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n });\n }\n isToday(date) {\n const today = this.calendarService.create(new Date());\n return date.equal(today, 'day');\n }\n isHoliday(date) {\n const isHoliday = this.schedulerService.isHoliday(date);\n if (isHoliday) {\n const holiday = this.calendarService.holidays.filter((d) => date.equal(d.date, 'day'))[0];\n return {\n state: 'holiday',\n holiday,\n };\n }\n const isWeekend = this.schedulerService.isWeekend(date, this.calendar());\n if (isWeekend) {\n return { state: 'weekend' };\n }\n return { state: 'none' };\n }\n get isReadonly() {\n return this.readonly();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerTimelineMonthViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.4\", type: AXSchedulerTimelineMonthViewComponent, isStandalone: true, selector: \"ax-scheduler-timeline-month-view\", inputs: { readonly: { classPropertyName: \"readonly\", publicName: \"readonly\", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: \"draggable\", publicName: \"draggable\", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: \"calendar\", publicName: \"calendar\", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: \"date\", publicName: \"date\", isSignal: true, isRequired: true, transformFunction: null }, appointments: { classPropertyName: \"appointments\", publicName: \"appointments\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: \"slotClickedInternal\", slotDblClickedInternal: \"slotDblClickedInternal\", slotRightClickedInternal: \"slotRightClickedInternal\", appointmentClickedInternal: \"appointmentClickedInternal\", appointmentDblClickedInternal: \"appointmentDblClickedInternal\", appointmentRightClickedInternal: \"appointmentRightClickedInternal\", onAppointmentDropInternal: \"onAppointmentDropInternal\" }, host: { properties: { \"class.ax-state-readonly\": \"this.isReadonly\" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineMonthViewComponent }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-scheduler-timeline-month-container\\\">\\n @for (dayData of processedDayData(); track dayData.date.date.getTime()) {\\n <div>\\n <div class=\\\"ax-scheduler-timeline-header\\\">\\n <div\\n class=\\\"ax-scheduler-month-header-date-day\\\"\\n [class.ax-state-today]=\\\"isToday(dayData.date)\\\"\\n [class.ax-state-holiday]=\\\"dayData.holiday.state !== 'none'\\\"\\n >\\n <span\\n class=\\\"ax-scheduler-month-header-date-day-char ax-scheduler-truncate\\\"\\n [axTooltip]=\\\"dayData.holiday?.holiday?.title ?? ''\\\"\\n >\\n {{ dayData.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n @if (dayData.holiday.state === 'holiday' && dayData.holiday.holiday.title) {\\n ( {{ dayData.holiday.holiday.title }} )\\n }\\n </span>\\n <span class=\\\"ax-scheduler-month-header-date-day-num\\\">\\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\\n </span>\\n </div>\\n </div>\\n\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleDrop($event, dayData.date)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n class=\\\"ax-scheduler-timeline-content\\\"\\n (click)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n (dblclick)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n (contextmenu)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n >\\n <div class=\\\"ax-scheduler-timeline-appointment-container\\\">\\n @for (segment of dayData.visibleAppointments; track segment.id + segment.originalStartDate.getTime()) {\\n <div\\n axDrag\\n [dragData]=\\\"segment\\\"\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment)\\\"\\n [title]=\\\"\\n segment.allDay\\n ? segment.title\\n : segment.title +\\n ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')'\\n \\\"\\n class=\\\"ax-scheduler-timeline-appointment\\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n [ngClass]=\\\"segment.cssClass??`ax-scheduler-${segment.priority??'primary'}-periority`\\\"\\n >\\n <ax-title class=\\\"ax-scheduler-truncate\\\">{{ segment.title }}</ax-title>\\n <!-- Display segment's start/end times if not allDay for this segment -->\\n @if (!segment.allDay) {\\n <ax-subtitle>\\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }} -\\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </ax-subtitle>\\n }\\n </div>\\n }\\n @if (dayData.moreCount > 0) {\\n <div #moreAppointments class=\\\"ax-scheduler-month-overflow-badge\\\" (click)=\\\"$event.stopPropagation()\\\">\\n +{{ 'more-items' | translate: { params: { number: dayData.moreCount } } | async }}\\n </div>\\n <ax-popover [target]=\\\"moreAppointments\\\" placement=\\\"bottom-start\\\" trigger=\\\"click\\\">\\n <div\\n [class.ax-state-readonly]=\\\"readonly()\\\"\\n class=\\\"ax-overlay-pane ax-scheduler-popover ax-scheduler-month-popover-appointment\\\"\\n >\\n @for (segment of dayData.hiddenAppointments; track segment.id + segment.originalStartDate.getTime()) {\\n <div\\n axDrag\\n [dragData]=\\\"segment\\\"\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n [title]=\\\"\\n segment.allDay\\n ? segment.title\\n : segment.title +\\n ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')'\\n \\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n [ngClass]=\\\"segment.cssClass??`ax-scheduler-${segment.priority??'primary'}-periority`\\\"\\n >\\n <span class=\\\"ax-appointment-chip-title ax-scheduler-truncate\\\">{{ segment.title }}</span>\\n @if (!segment.allDay) {\\n <ax-subtitle>\\n {{\\n segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{\\n segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n </ax-subtitle>\\n }\\n </div>\\n }\\n </div>\\n </ax-popover>\\n }\\n </div>\\n </div>\\n </div>\\n }\\n</div>\\n\", styles: [\"ax-scheduler-timeline-month-view{height:100%;position:relative;display:inline-flex;flex-direction:column;background-color:inherit}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container{height:100%;display:flex}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header{width:100%;display:flex;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day{gap:.25rem;height:4rem;display:flex;position:relative;align-items:start;padding-inline:1rem;flex-direction:column;padding-block:.25rem;justify-content:center;width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-today .ax-scheduler-month-header-date-day-char{font-weight:500}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-today .ax-scheduler-month-header-date-day-num{font-weight:700}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day .ax-scheduler-month-header-date-day-char{max-width:100%;position:sticky;font-weight:300;inset-inline-start:1rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day .ax-scheduler-month-header-date-day-num{position:sticky;font-weight:500;font-size:1.25rem;inset-inline-start:1rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content{padding:.125rem .25rem;position:relative;height:calc(100% - 4rem);width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container{gap:1px;display:flex;flex-direction:column}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;display:flex;overflow:hidden;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-month-overflow-badge{cursor:pointer;text-align:left;font-size:.75rem;padding:.125rem 0;margin-top:.125rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-month-overflow-badge:hover{text-decoration:underline}ax-scheduler-timeline-month-view:not(.ax-state-readonly) .ax-scheduler-timeline-appointment{cursor:pointer}ax-scheduler-timeline-month-view:not(.ax-state-readonly) .ax-scheduler-timeline-content{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-timeline-month-view:not(.ax-state-readonly) .ax-scheduler-timeline-content:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}\\n\"], dependencies: [{ kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"component\", type: AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: AXTranslatorPipe, name: \"translate\" }, { kind: \"component\", type: AXPopoverComponent, selector: \"ax-popover\", inputs: [\"offsetX\", \"offsetY\", \"target\", \"placement\", \"content\", \"openOn\", \"closeOn\", \"hasBackdrop\", \"openAfter\", \"closeAfter\", \"backdropClass\", \"panelClass\", \"adaptivityEnabled\"], outputs: [\"onOpened\", \"onClosed\"] }, { kind: \"directive\", type: AXDragDirective, selector: \"[axDrag]\", inputs: [\"dragData\", \"dragDisabled\", \"dragTransition\", \"dragElementClone\", \"dropZoneGroup\", \"dragStartDelay\", \"dragResetOnDblClick\", \"dragLockAxis\", \"dragClonedTemplate\", \"dragCursor\", \"dragBoundary\", \"dragTransitionDuration\"], outputs: [\"dragPositionChanged\"] }, { kind: \"directive\", type: AXDropZoneDirective, selector: \"[axDropZone]\", inputs: [\"dropZoneGroup\"], outputs: [\"onElementDrop\", \"onElementHover\"], exportAs: [\"axDropZone\"] }, { kind: \"directive\", type: AXTooltipDirective, selector: \"[axTooltip]\", inputs: [\"axTooltip\", \"axTooltipPlacement\", \"axTooltipOffsetX\", \"axTooltipOffsetY\", \"axTooltipOpenAfter\", \"axTooltipCloseAfter\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerTimelineMonthViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-scheduler-timeline-month-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [\n NgClass,\n AXDecoratorGenericComponent,\n AXFormatPipe,\n AsyncPipe,\n AXTranslatorPipe,\n AXPopoverComponent,\n AXDragDirective,\n AXDropZoneDirective,\n AXTooltipDirective,\n ], providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineMonthViewComponent }], template: \"<div class=\\\"ax-scheduler-timeline-month-container\\\">\\n @for (dayData of processedDayData(); track dayData.date.date.getTime()) {\\n <div>\\n <div class=\\\"ax-scheduler-timeline-header\\\">\\n <div\\n class=\\\"ax-scheduler-month-header-date-day\\\"\\n [class.ax-state-today]=\\\"isToday(dayData.date)\\\"\\n [class.ax-state-holiday]=\\\"dayData.holiday.state !== 'none'\\\"\\n >\\n <span\\n class=\\\"ax-scheduler-month-header-date-day-char ax-scheduler-truncate\\\"\\n [axTooltip]=\\\"dayData.holiday?.holiday?.title ?? ''\\\"\\n >\\n {{ dayData.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n @if (dayData.holiday.state === 'holiday' && dayData.holiday.holiday.title) {\\n ( {{ dayData.holiday.holiday.title }} )\\n }\\n </span>\\n <span class=\\\"ax-scheduler-month-header-date-day-num\\\">\\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\\n </span>\\n </div>\\n </div>\\n\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleDrop($event, dayData.date)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n class=\\\"ax-scheduler-timeline-content\\\"\\n (click)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n (dblclick)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n (contextmenu)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n >\\n <div class=\\\"ax-scheduler-timeline-appointment-container\\\">\\n @for (segment of dayData.visibleAppointments; track segment.id + segment.originalStartDate.getTime()) {\\n <div\\n axDrag\\n [dragData]=\\\"segment\\\"\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment)\\\"\\n [title]=\\\"\\n segment.allDay\\n ? segment.title\\n : segment.title +\\n ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')'\\n \\\"\\n class=\\\"ax-scheduler-timeline-appointment\\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n [ngClass]=\\\"segment.cssClass??`ax-scheduler-${segment.priority??'primary'}-periority`\\\"\\n >\\n <ax-title class=\\\"ax-scheduler-truncate\\\">{{ segment.title }}</ax-title>\\n <!-- Display segment's start/end times if not allDay for this segment -->\\n @if (!segment.allDay) {\\n <ax-subtitle>\\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }} -\\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </ax-subtitle>\\n }\\n </div>\\n }\\n @if (dayData.moreCount > 0) {\\n <div #moreAppointments class=\\\"ax-scheduler-month-overflow-badge\\\" (click)=\\\"$event.stopPropagation()\\\">\\n +{{ 'more-items' | translate: { params: { number: dayData.moreCount } } | async }}\\n </div>\\n <ax-popover [target]=\\\"moreAppointments\\\" placement=\\\"bottom-start\\\" trigger=\\\"click\\\">\\n <div\\n [class.ax-state-readonly]=\\\"readonly()\\\"\\n class=\\\"ax-overlay-pane ax-scheduler-popover ax-scheduler-month-popover-appointment\\\"\\n >\\n @for (segment of dayData.hiddenAppointments; track segment.id + segment.originalStartDate.getTime()) {\\n <div\\n axDrag\\n [dragData]=\\\"segment\\\"\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n [title]=\\\"\\n segment.allDay\\n ? segment.title\\n : segment.title +\\n ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')'\\n \\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n [ngClass]=\\\"segment.cssClass??`ax-scheduler-${segment.priority??'primary'}-periority`\\\"\\n >\\n <span class=\\\"ax-appointment-chip-title ax-scheduler-truncate\\\">{{ segment.title }}</span>\\n @if (!segment.allDay) {\\n <ax-subtitle>\\n {{\\n segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{\\n segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n </ax-subtitle>\\n }\\n </div>\\n }\\n </div>\\n </ax-popover>\\n }\\n </div>\\n </div>\\n </div>\\n }\\n</div>\\n\", styles: [\"ax-scheduler-timeline-month-view{height:100%;position:relative;display:inline-flex;flex-direction:column;background-color:inherit}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container{height:100%;display:flex}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header{width:100%;display:flex;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day{gap:.25rem;height:4rem;display:flex;position:relative;align-items:start;padding-inline:1rem;flex-direction:column;padding-block:.25rem;justify-content:center;width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-today .ax-scheduler-month-header-date-day-char{font-weight:500}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-today .ax-scheduler-month-header-date-day-num{font-weight:700}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day .ax-scheduler-month-header-date-day-char{max-width:100%;position:sticky;font-weight:300;inset-inline-start:1rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day .ax-scheduler-month-header-date-day-num{position:sticky;font-weight:500;font-size:1.25rem;inset-inline-start:1rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content{padding:.125rem .25rem;position:relative;height:calc(100% - 4rem);width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container{gap:1px;display:flex;flex-direction:column}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;display:flex;overflow:hidden;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-month-overflow-badge{cursor:pointer;text-align:left;font-size:.75rem;padding:.125rem 0;margin-top:.125rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-month-overflow-badge:hover{text-decoration:underline}ax-scheduler-timeline-month-view:not(.ax-state-readonly) .ax-scheduler-timeline-appointment{cursor:pointer}ax-scheduler-timeline-month-view:not(.ax-state-readonly) .ax-scheduler-timeline-content{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-timeline-month-view:not(.ax-state-readonly) .ax-scheduler-timeline-content:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}\\n\"] }]\n }], propDecorators: { isReadonly: [{\n type: HostBinding,\n args: ['class.ax-state-readonly']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLXRpbWVsaW5lLW1vbnRoLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9zY2hlZHVsZXIvc3JjL2xpYi92aWV3cy90aW1lbGluZS1tb250aC9zY2hlZHVsZXItdGltZWxpbmUtbW9udGgtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3ZpZXdzL3RpbWVsaW5lLW1vbnRoL3NjaGVkdWxlci10aW1lbGluZS1tb250aC12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBdUIsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQTZCLE1BQU0sd0JBQXdCLENBQUM7QUFDdEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixRQUFRLEVBQ1IsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVwQyxPQUFPLEVBRUwsb0JBQW9CLEdBR3JCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBZ0M3RCxNQUFNLE9BQU8scUNBQXNDLFNBQVEsV0FBVztJQW5CdEU7O1FBb0JVLGNBQVMsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN6QyxvQkFBZSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzVDLHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBRXJDLHFDQUFnQyxHQUFHLENBQUMsQ0FBQztRQUV0RCxhQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLGNBQVMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsYUFBUSxHQUFHLEtBQUssRUFBVSxDQUFDO1FBQzNCLFNBQUksR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFjLENBQUM7UUFDcEMsaUJBQVksR0FBRyxLQUFLLENBQTJCLEVBQUUsQ0FBQyxDQUFDO1FBRW5ELHFCQUFnQixHQUFHLFFBQVEsQ0FBNkIsR0FBRyxFQUFFO1lBQzNELE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDcEQsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUM7WUFFN0QsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7Z0JBQzdCLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDbEQsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBRTdDLE9BQU87d0JBQ0wsSUFBSSxFQUFFLE9BQU87d0JBQ2IsbUJBQW1CLEVBQUUsRUFBRTt3QkFDdkIsa0JBQWtCLEVBQUUsRUFBRTt3QkFDdEIsU0FBUyxFQUFFLENBQUM7cUJBQ2IsQ0FBQztnQkFDSixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFFRCxNQUFNLE1BQU0sR0FBK0IsRUFBRSxDQUFDO1lBRTlDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDckMsTUFBTSxjQUFjLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsMkJBQTJCO2dCQUMvRixNQUFNLGtCQUFrQixHQUFvQyxFQUFFLENBQUM7Z0JBRS9ELEtBQUssTUFBTSxJQUFJLElBQUksdUJBQXVCLEVBQUUsQ0FBQztvQkFDM0MsNkZBQTZGO29CQUM3RixtRUFBbUU7b0JBQ25FLDREQUE0RDtvQkFDNUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGdDQUFnQyxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDMUcsSUFBSSxPQUFPLEVBQUUsQ0FBQzt3QkFDWixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ25DLENBQUM7Z0JBQ0gsQ0FBQztnQkFFRCx5RkFBeUY7Z0JBQ3pGLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FDNUIsa0JBQWtCLEVBQ2xCO29CQUNFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsa0NBQWtDO29CQUM3RCxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxtQ0FBbUM7b0JBQ2pFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEVBQUUsaUNBQWlDO29CQUNyRixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2lCQUNwQyxFQUNELENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQzlCLENBQUM7Z0JBRUYsTUFBTSxtQkFBbUIsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztnQkFDM0YsTUFBTSxrQkFBa0IsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO2dCQUV2RixNQUFNLENBQUMsSUFBSSxDQUFDO29CQUNWLElBQUksRUFBRSxjQUFjO29CQUNwQixtQkFBbUIsRUFBRSxtQkFBbUI7b0JBQ3hDLGtCQUFrQixFQUFFLGtCQUFrQjtvQkFDdEMsU0FBUyxFQUFFLGtCQUFrQixDQUFDLE1BQU07b0JBQ3BDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQztpQkFDeEMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUNELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO1FBRUgsK0RBQStEO1FBQy9ELHdCQUFtQixHQUFHLE1BQU0sRUFBNkIsQ0FBQztRQUMxRCwyQkFBc0IsR0FBRyxNQUFNLEVBQTZCLENBQUM7UUFDN0QsNkJBQXdCLEdBQUcsTUFBTSxFQUE2QixDQUFDO1FBQy9ELCtCQUEwQixHQUFHLE1BQU0sRUFBb0MsQ0FBQztRQUN4RSxrQ0FBNkIsR0FBRyxNQUFNLEVBQW9DLENBQUM7UUFDM0Usb0NBQStCLEdBQUcsTUFBTSxFQUFvQyxDQUFDO1FBQzdFLDhCQUF5QixHQUFHLE1BQU0sRUFBNEIsQ0FBQztRQUUvRCx5QkFBeUI7UUFDUixtQkFBYyxHQUFHO1lBQ2hDLElBQUksRUFBRTtnQkFDSixLQUFLLEVBQUUsSUFBSSxDQUFDLG1CQUFtQjtnQkFDL0IsUUFBUSxFQUFFLElBQUksQ0FBQyxzQkFBc0I7Z0JBQ3JDLFdBQVcsRUFBRSxJQUFJLENBQUMsd0JBQXdCO2FBQzNDO1lBQ0QsV0FBVyxFQUFFO2dCQUNYLEtBQUssRUFBRSxJQUFJLENBQUMsMEJBQTBCO2dCQUN0QyxRQUFRLEVBQUUsSUFBSSxDQUFDLDZCQUE2QjtnQkFDNUMsV0FBVyxFQUFFLElBQUksQ0FBQywrQkFBK0I7YUFDbEQ7U0FDRixDQUFDO0tBaUVIO0lBaEVDLHNCQUFzQixDQUFDLFVBQXNCLEVBQUUsZUFBdUM7UUFDcEYsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUYsTUFBTSxjQUFjLEdBQUc7WUFDckIsR0FBRyxtQkFBbUI7WUFDdEIsT0FBTyxFQUFFLG1CQUFtQixDQUFDLE9BQU87WUFDcEMsU0FBUyxFQUFFLG1CQUFtQixDQUFDLFNBQVM7U0FDekMsQ0FBQztRQUNGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQy9CLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQ2hGLElBQUksQ0FBQyxjQUFjLEVBQ25CLGFBQWEsQ0FDZCxDQUFDO0lBQ0osQ0FBQztJQUNELGVBQWUsQ0FBQyxVQUFzQixFQUFFLElBQWdCO1FBQ3RELDJCQUEyQjtRQUMzQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUMxRixJQUFJLFFBQVE7WUFDVixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUMvQixFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUNuRSxJQUFJLENBQUMsY0FBYyxFQUNuQixNQUFNLENBQ1AsQ0FBQztJQUNOLENBQUM7SUFDRCxVQUFVLENBQUMsQ0FBc0IsRUFBRSxJQUFnQjtRQUNqRCwyQkFBMkI7UUFDM0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDMUYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQTRCLENBQUM7UUFDbkUsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdEYsTUFBTSxjQUFjLEdBQUc7WUFDckIsR0FBRyxtQkFBbUI7WUFDdEIsT0FBTyxFQUFFLG1CQUFtQixDQUFDLE9BQU87WUFDcEMsU0FBUyxFQUFFLG1CQUFtQixDQUFDLFNBQVM7U0FDekMsQ0FBQztRQUNGLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUM7WUFDbEMsU0FBUyxFQUFFLENBQUM7WUFDWixJQUFJLEVBQUUsUUFBUTtZQUNkLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUztZQUN0QixXQUFXLEVBQUUsY0FBYztTQUM1QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRVMsT0FBTyxDQUFDLElBQWdCO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN0RCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFDUyxTQUFTLENBQUMsSUFBZ0I7UUFDbEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RCxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxRixPQUFPO2dCQUNMLEtBQUssRUFBRSxTQUFTO2dCQUNoQixPQUFPO2FBQ1IsQ0FBQztRQUNKLENBQUM7UUFDRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN6RSxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQztRQUM5QixDQUFDO1FBQ0QsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBNEMsVUFBVTtRQUNwRCxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN6QixDQUFDOzhHQTlKVSxxQ0FBcUM7a0dBQXJDLHFDQUFxQyxpc0NBRnJDLENBQUMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxxQ0FBcUMsRUFBRSxDQUFDLGlEQ3pEM0Ysd3FNQThIQSxtZ0pEL0VJLE9BQU8sb0ZBQ1AsMkJBQTJCLG9MQUMzQixZQUFZLDBDQUNaLFNBQVMseUNBQ1QsZ0JBQWdCLGtEQUNoQixrQkFBa0IsK1FBQ2xCLGVBQWUsMlRBQ2YsbUJBQW1CLDRKQUNuQixrQkFBa0I7OzJGQUlULHFDQUFxQztrQkFuQmpELFNBQVM7K0JBQ0Usa0NBQWtDLG1CQUczQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFdBQzVCO3dCQUNQLE9BQU87d0JBQ1AsMkJBQTJCO3dCQUMzQixZQUFZO3dCQUNaLFNBQVM7d0JBQ1QsZ0JBQWdCO3dCQUNoQixrQkFBa0I7d0JBQ2xCLGVBQWU7d0JBQ2YsbUJBQW1CO3dCQUNuQixrQkFBa0I7cUJBQ25CLGFBQ1UsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyx1Q0FBdUMsRUFBRSxDQUFDOzhCQThKN0MsVUFBVTtzQkFBckQsV0FBVzt1QkFBQyx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWENvbXBvbmVudCwgTlhDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2Nkay9jb21tb24nO1xuaW1wb3J0IHsgQVhEcmFnRGlyZWN0aXZlLCBBWERyb3Bab25lRGlyZWN0aXZlLCBBWERyb3Bab25lRHJvcEV2ZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IEFYRGVjb3JhdG9yR2VuZXJpY0NvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFYUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9wb3BvdmVyJztcbmltcG9ydCB7IEFYVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90b29sdGlwJztcbmltcG9ydCB7IEFYQ2FsZW5kYXJTZXJ2aWNlLCBBWERhdGVUaW1lLCBBWEhvbGlkYXlEYXRlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2RhdGUtdGltZSc7XG5pbXBvcnQgeyBBWEZvcm1hdFBpcGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvZm9ybWF0JztcbmltcG9ydCB7IEFYVHJhbnNsYXRvclBpcGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEhvc3RCaW5kaW5nLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBvcmRlckJ5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQsIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50IH0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLmNsYXNzJztcbmltcG9ydCB7XG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50LFxuICBBWFNjaGVkdWxlckNvbXBvbmVudCxcbiAgQVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50LFxuICBBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50LFxufSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEFYU2NoZWR1bGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NjaGVkdWxlci5zZXJ2aWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBUaW1lbGluZU1vbnRoVmlld0RheURhdGEge1xuICBkYXRlOiBBWERhdGVUaW1lO1xuICAvLyBUaGVzZSB3aWxsIGJlIHNlZ21lbnRzLCBwcmVjaXNlbHkgY2xpcHBlZCBhbmQgZmxhZ2dlZCBmb3IgdGhpcyBkYXlcbiAgdmlzaWJsZUFwcG9pbnRtZW50czogQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXTtcbiAgaGlkZGVuQXBwb2ludG1lbnRzOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdO1xuICBtb3JlQ291bnQ6IG51bWJlcjtcbiAgLy8gWW91IG1pZ2h0IGFsc28gd2FudCB0byBzdG9yZSBhbGwgc2VnbWVudHMgZm9yIHRoZSBkYXkgaWYgbmVlZGVkIGVsc2V3aGVyZVxuICAvLyBhbGxTZWdtZW50c0ZvckRheTogQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRUeXBlW107XG4gIGhvbGlkYXk/OiB7IHN0YXRlOiAnaG9saWRheScgfCAnd2Vla2VuZCcgfCAnbm9uZSc7IGhvbGlkYXk/OiBBWEhvbGlkYXlEYXRlIH07XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LXNjaGVkdWxlci10aW1lbGluZS1tb250aC12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NjaGVkdWxlci10aW1lbGluZS1tb250aC12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3NjaGVkdWxlci10aW1lbGluZS1tb250aC12aWV3LmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0NsYXNzLFxuICAgIEFYRGVjb3JhdG9yR2VuZXJpY0NvbXBvbmVudCxcbiAgICBBWEZvcm1hdFBpcGUsXG4gICAgQXN5bmNQaXBlLFxuICAgIEFYVHJhbnNsYXRvclBpcGUsXG4gICAgQVhQb3BvdmVyQ29tcG9uZW50LFxuICAgIEFYRHJhZ0RpcmVjdGl2ZSxcbiAgICBBWERyb3Bab25lRGlyZWN0aXZlLFxuICAgIEFYVG9vbHRpcERpcmVjdGl2ZSxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBBWENvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYU2NoZWR1bGVyVGltZWxpbmVNb250aFZpZXdDb21wb25lbnQgfV0sXG59KVxuZXhwb3J0IGNsYXNzIEFYU2NoZWR1bGVyVGltZWxpbmVNb250aFZpZXdDb21wb25lbnQgZXh0ZW5kcyBOWENvbXBvbmVudCB7XG4gIHByaXZhdGUgc2NoZWR1bGVyID0gaW5qZWN0KEFYU2NoZWR1bGVyQ29tcG9uZW50KTtcbiAgcHJpdmF0ZSBjYWxlbmRhclNlcnZpY2UgPSBpbmplY3QoQVhDYWxlbmRhclNlcnZpY2UpO1xuICBwcml2YXRlIHNjaGVkdWxlclNlcnZpY2UgPSBpbmplY3QoQVhTY2hlZHVsZXJTZXJ2aWNlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IE1BWF9WSVNJQkxFX0FQUE9JTlRNRU5UU19QRVJfREFZID0gMztcblxuICByZWFkb25seSA9IGlucHV0KGZhbHNlKTtcbiAgZHJhZ2dhYmxlID0gaW5wdXQodHJ1ZSk7XG4gIGNhbGVuZGFyID0gaW5wdXQ8c3RyaW5nPigpO1xuICBkYXRlID0gaW5wdXQucmVxdWlyZWQ8QVhEYXRlVGltZT4oKTtcbiAgYXBwb2ludG1lbnRzID0gaW5wdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudFtdPihbXSk7XG5cbiAgcHJvY2Vzc2VkRGF5RGF0YSA9IGNvbXB1dGVkPFRpbWVsaW5lTW9udGhWaWV3RGF5RGF0YVtdPigoKSA9PiB7XG4gICAgY29uc3QgYWxsT3JpZ2luYWxBcHBvaW50bWVudHMgPSB0aGlzLmFwcG9pbnRtZW50cygpO1xuICAgIGNvbnN0IG1vbnRoU3RhcnREYXRlID0gdGhpcy5kYXRlKCkuc3RhcnRPZignbW9udGgnKTtcbiAgICBjb25zdCBkYXlzSW5Nb250aCA9IG1vbnRoU3RhcnREYXRlLmVuZE9mKCdtb250aCcpLmRheU9mTW9udGg7XG5cbiAgICBpZiAoIWFsbE9yaWdpbmFsQXBwb2ludG1lbnRzKSB7XG4gICAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogZGF5c0luTW9udGggfSwgKF8sIGkpID0+IHtcbiAgICAgICAgY29uc3QgZGF5RGF0ZSA9IG1vbnRoU3RhcnREYXRlLmFkZCgnZGF5JywgaSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRlOiBkYXlEYXRlLFxuICAgICAgICAgIHZpc2libGVBcHBvaW50bWVudHM6IFtdLFxuICAgICAgICAgIGhpZGRlbkFwcG9pbnRtZW50czogW10sXG4gICAgICAgICAgbW9yZUNvdW50OiAwLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0OiBUaW1lbGluZU1vbnRoVmlld0RheURhdGFbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXlzSW5Nb250aDsgaSsrKSB7XG4gICAgICBjb25zdCBjdXJyZW50RGF5RGF0ZSA9IG1vbnRoU3RhcnREYXRlLmFkZCgnZGF5JywgaSkuc3RhcnRPZignZGF5Jyk7IC8vIEVuc3VyZSBpdCdzIHN0YXJ0IG9mIGRheVxuICAgICAgY29uc3Qgc2VnbWVudHNGb3JUaGlzRGF5OiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdID0gW107XG5cbiAgICAgIGZvciAoY29uc3QgYXBwdCBvZiBhbGxPcmlnaW5hbEFwcG9pbnRtZW50cykge1xuICAgICAgICAvLyBGb3IgVGltZWxpbmUgTW9udGggVmlldywgZWFjaCBkYXkgaXMgYSByb3cuIFdlIHdhbnQgc2VnbWVudHMgZm9yIHRoZSBmdWxsIDI0aCBvZiB0aGF0IGRheS5cbiAgICAgICAgLy8gVGhlIHZpZXcncyBzdGFydEhvdXIvZW5kSG91ciBhcmUgTk9UIHVzZWQgdG8gY2xpcCBzZWdtZW50cyBoZXJlLFxuICAgICAgICAvLyBhcyBpdCdzIG5vdCBhIGhvcml6b250YWwgdGltZSBzY2FsZSAqd2l0aGluKiB0aGUgZGF5IHJvdy5cbiAgICAgICAgY29uc3Qgc2VnbWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRDbG9uZWRBcHBvaW50bWVudFNlZ21lbnRPbkRheShhcHB0LCBjdXJyZW50RGF5RGF0ZSwgMCwgMjQsIHRydWUpO1xuICAgICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICAgIHNlZ21lbnRzRm9yVGhpc0RheS5wdXNoKHNlZ21lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFNvcnQgc2VnbWVudHM6IGFsbC1kYXkgZmlyc3QsIHRoZW4gYnkgc2VnbWVudCBzdGFydCB0aW1lICh3aGljaCBpcyBjbGlwcGVkIHRvIHRoZSBkYXkpXG4gICAgICBjb25zdCBzb3J0ZWRTZWdtZW50cyA9IG9yZGVyQnkoXG4gICAgICAgIHNlZ21lbnRzRm9yVGhpc0RheSxcbiAgICAgICAgW1xuICAgICAgICAgIChzKSA9PiAocy5hbGxEYXkgPyAwIDogMSksIC8vIFNlZ21lbnRzIG1hcmtlZCBhcyBhbGxEYXkgZmlyc3RcbiAgICAgICAgICAocykgPT4gcy5zdGFydERhdGUuZ2V0VGltZSgpLCAvLyBTZWdtZW50J3Mgc3RhcnQgdGltZSBvbiB0aGlzIGRheVxuICAgICAgICAgIChzKSA9PiBzLmVuZERhdGUuZ2V0VGltZSgpIC0gcy5zdGFydERhdGUuZ2V0VGltZSgpLCAvLyBTZWdtZW50J3MgZHVyYXRpb24gb24gdGhpcyBkYXlcbiAgICAgICAgICAocykgPT4gcy50aXRsZT8udG9Mb3dlckNhc2UoKSA/PyAnJyxcbiAgICAgICAgXSxcbiAgICAgICAgWydhc2MnLCAnYXNjJywgJ2Rlc2MnLCAnYXNjJ10sXG4gICAgICApO1xuXG4gICAgICBjb25zdCB2aXNpYmxlQXBwb2ludG1lbnRzID0gc29ydGVkU2VnbWVudHMuc2xpY2UoMCwgdGhpcy5NQVhfVklTSUJMRV9BUFBPSU5UTUVOVFNfUEVSX0RBWSk7XG4gICAgICBjb25zdCBoaWRkZW5BcHBvaW50bWVudHMgPSBzb3J0ZWRTZWdtZW50cy5zbGljZSh0aGlzLk1BWF9WSVNJQkxFX0FQUE9JTlRNRU5UU19QRVJfREFZKTtcblxuICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICBkYXRlOiBjdXJyZW50RGF5RGF0ZSxcbiAgICAgICAgdmlzaWJsZUFwcG9pbnRtZW50czogdmlzaWJsZUFwcG9pbnRtZW50cyxcbiAgICAgICAgaGlkZGVuQXBwb2ludG1lbnRzOiBoaWRkZW5BcHBvaW50bWVudHMsXG4gICAgICAgIG1vcmVDb3VudDogaGlkZGVuQXBwb2ludG1lbnRzLmxlbmd0aCxcbiAgICAgICAgaG9saWRheTogdGhpcy5pc0hvbGlkYXkoY3VycmVudERheURhdGUpLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xuXG4gIC8vIEludGVybmFsIG91dHB1dHMgdG8gYmUgY2F1Z2h0IGJ5IHBhcmVudCBBWFNjaGVkdWxlckNvbXBvbmVudFxuICBzbG90Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIHNsb3REYmxDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgc2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIGFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBhcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgb25BcHBvaW50bWVudERyb3BJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3REcm9wRXZlbnQ+KCk7XG5cbiAgLy8gLS0tIEV2ZW50IEhhbmRsZXJzIC0tLVxuICBwcml2YXRlIHJlYWRvbmx5IGV2ZW50T3V0cHV0TWFwID0ge1xuICAgIHNsb3Q6IHtcbiAgICAgIGNsaWNrOiB0aGlzLnNsb3RDbGlja2VkSW50ZXJuYWwsXG4gICAgICBkYmxjbGljazogdGhpcy5zbG90RGJsQ2xpY2tlZEludGVybmFsLFxuICAgICAgY29udGV4dG1lbnU6IHRoaXMuc2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsLFxuICAgIH0sXG4gICAgYXBwb2ludG1lbnQ6IHtcbiAgICAgIGNsaWNrOiB0aGlzLmFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsLFxuICAgICAgZGJsY2xpY2s6IHRoaXMuYXBwb2ludG1lbnREYmxDbGlja2VkSW50ZXJuYWwsXG4gICAgICBjb250ZXh0bWVudTogdGhpcy5hcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsLFxuICAgIH0sXG4gIH07XG4gIGhhbmRsZUFwcG9pbnRtZW50RXZlbnQobW91c2VFdmVudDogTW91c2VFdmVudCwgYXBwb2ludG1lbnRJdGVtOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50KSB7XG4gICAgY29uc3Qgb3JpZ2luYWxBcHBvaW50bWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRPcmlnaW5hbEFwcG9pbnRtZW50KGFwcG9pbnRtZW50SXRlbSk7XG4gICAgY29uc3QgYXBwb2ludG1lbnRSZWYgPSB7XG4gICAgICAuLi5vcmlnaW5hbEFwcG9pbnRtZW50LFxuICAgICAgZW5kRGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5lbmREYXRlLFxuICAgICAgc3RhcnREYXRlOiBvcmlnaW5hbEFwcG9pbnRtZW50LnN0YXJ0RGF0ZSxcbiAgICB9O1xuICAgIHRoaXMuc2NoZWR1bGVyU2VydmljZS5oYW5kbGVFdmVudChcbiAgICAgIHsgbmF0aXZlRXZlbnQ6IG1vdXNlRXZlbnQsIGFwcG9pbnRtZW50OiBhcHBvaW50bWVudFJlZiwgc2VuZGVyOiB0aGlzLnNjaGVkdWxlciB9LFxuICAgICAgdGhpcy5ldmVudE91dHB1dE1hcCxcbiAgICAgICdhcHBvaW50bWVudCcsXG4gICAgKTtcbiAgfVxuICBoYW5kbGVTbG90RXZlbnQobW91c2VFdmVudDogTW91c2VFdmVudCwgZGF0ZTogQVhEYXRlVGltZSkge1xuICAgIC8vIGRhdGUgaXMgdGhlIHNwZWNpZmljIGRheVxuICAgIGNvbnN0IHNsb3REYXRhID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldFNsb3REYXRhKGRhdGUuc3RhcnRPZignZGF5JyksICd0aW1lbGluZS1tb250aCcpO1xuICAgIGlmIChzbG90RGF0YSlcbiAgICAgIHRoaXMuc2NoZWR1bGVyU2VydmljZS5oYW5kbGVFdmVudChcbiAgICAgICAgeyBuYXRpdmVFdmVudDogbW91c2VFdmVudCwgc2xvdDogc2xvdERhdGEsIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIgfSxcbiAgICAgICAgdGhpcy5ldmVudE91dHB1dE1hcCxcbiAgICAgICAgJ3Nsb3QnLFxuICAgICAgKTtcbiAgfVxuICBoYW5kbGVEcm9wKGU6IEFYRHJvcFpvbmVEcm9wRXZlbnQsIGRhdGU6IEFYRGF0ZVRpbWUpIHtcbiAgICAvLyBkYXRlIGlzIHRoZSBzcGVjaWZpYyBkYXlcbiAgICBjb25zdCBzbG90RGF0YSA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRTbG90RGF0YShkYXRlLnN0YXJ0T2YoJ2RheScpLCAndGltZWxpbmUtbW9udGgnKTtcbiAgICBjb25zdCBkcm9wcGVkSXRlbSA9IGUuZHJvcHBlZC5kcmFnRGF0YSgpIGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnQ7XG4gICAgY29uc3Qgb3JpZ2luYWxBcHBvaW50bWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRPcmlnaW5hbEFwcG9pbnRtZW50KGRyb3BwZWRJdGVtKTtcbiAgICBjb25zdCBhcHBvaW50bWVudFJlZiA9IHtcbiAgICAgIC4uLm9yaWdpbmFsQXBwb2ludG1lbnQsXG4gICAgICBlbmREYXRlOiBvcmlnaW5hbEFwcG9pbnRtZW50LmVuZERhdGUsXG4gICAgICBzdGFydERhdGU6IG9yaWdpbmFsQXBwb2ludG1lbnQuc3RhcnREYXRlLFxuICAgIH07XG4gICAgdGhpcy5vbkFwcG9pbnRtZW50RHJvcEludGVybmFsLmVtaXQoe1xuICAgICAgZHJvcEV2ZW50OiBlLFxuICAgICAgc2xvdDogc2xvdERhdGEsXG4gICAgICBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyLFxuICAgICAgYXBwb2ludG1lbnQ6IGFwcG9pbnRtZW50UmVmLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzVG9kYXkoZGF0ZTogQVhEYXRlVGltZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHRvZGF5ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKG5ldyBEYXRlKCkpO1xuICAgIHJldHVybiBkYXRlLmVxdWFsKHRvZGF5LCAnZGF5Jyk7XG4gIH1cbiAgcHJvdGVjdGVkIGlzSG9saWRheShkYXRlOiBBWERhdGVUaW1lKTogeyBzdGF0ZTogJ2hvbGlkYXknIHwgJ3dlZWtlbmQnIHwgJ25vbmUnOyBob2xpZGF5PzogQVhIb2xpZGF5RGF0ZSB9IHtcbiAgICBjb25zdCBpc0hvbGlkYXkgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaXNIb2xpZGF5KGRhdGUpO1xuICAgIGlmIChpc0hvbGlkYXkpIHtcbiAgICAgIGNvbnN0IGhvbGlkYXkgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5ob2xpZGF5cy5maWx0ZXIoKGQpID0+IGRhdGUuZXF1YWwoZC5kYXRlLCAnZGF5JykpWzBdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdGU6ICdob2xpZGF5JyxcbiAgICAgICAgaG9saWRheSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGlzV2Vla2VuZCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5pc1dlZWtlbmQoZGF0ZSwgdGhpcy5jYWxlbmRhcigpKTtcbiAgICBpZiAoaXNXZWVrZW5kKSB7XG4gICAgICByZXR1cm4geyBzdGF0ZTogJ3dlZWtlbmQnIH07XG4gICAgfVxuICAgIHJldHVybiB7IHN0YXRlOiAnbm9uZScgfTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYXgtc3RhdGUtcmVhZG9ubHknKSBnZXQgaXNSZWFkb25seSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkb25seSgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRpbWVsaW5lLW1vbnRoLWNvbnRhaW5lclwiPlxuICBAZm9yIChkYXlEYXRhIG9mIHByb2Nlc3NlZERheURhdGEoKTsgdHJhY2sgZGF5RGF0YS5kYXRlLmRhdGUuZ2V0VGltZSgpKSB7XG4gICAgPGRpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItdGltZWxpbmUtaGVhZGVyXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1tb250aC1oZWFkZXItZGF0ZS1kYXlcIlxuICAgICAgICAgIFtjbGFzcy5heC1zdGF0ZS10b2RheV09XCJpc1RvZGF5KGRheURhdGEuZGF0ZSlcIlxuICAgICAgICAgIFtjbGFzcy5heC1zdGF0ZS1ob2xpZGF5XT1cImRheURhdGEuaG9saWRheS5zdGF0ZSAhPT0gJ25vbmUnXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1tb250aC1oZWFkZXItZGF0ZS1kYXktY2hhciBheC1zY2hlZHVsZXItdHJ1bmNhdGVcIlxuICAgICAgICAgICAgW2F4VG9vbHRpcF09XCJkYXlEYXRhLmhvbGlkYXk/LmhvbGlkYXk/LnRpdGxlID8/ICcnXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBkYXlEYXRhLmRhdGUgfCBmb3JtYXQ6ICdkYXRlJyA6IHsgZm9ybWF0OiAnZGRkZCcsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgICAgICAgQGlmIChkYXlEYXRhLmhvbGlkYXkuc3RhdGUgPT09ICdob2xpZGF5JyAmJiBkYXlEYXRhLmhvbGlkYXkuaG9saWRheS50aXRsZSkge1xuICAgICAgICAgICAgICAoIHt7IGRheURhdGEuaG9saWRheS5ob2xpZGF5LnRpdGxlIH19IClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC1zY2hlZHVsZXItbW9udGgtaGVhZGVyLWRhdGUtZGF5LW51bVwiPlxuICAgICAgICAgICAge3sgZGF5RGF0YS5kYXRlIHwgZm9ybWF0OiAnZGF0ZScgOiB7IGZvcm1hdDogJ0REJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2XG4gICAgICAgIGF4RHJvcFpvbmVcbiAgICAgICAgI3pvbmU9XCJheERyb3Bab25lXCJcbiAgICAgICAgKG9uRWxlbWVudERyb3ApPVwiaGFuZGxlRHJvcCgkZXZlbnQsIGRheURhdGEuZGF0ZSlcIlxuICAgICAgICBbY2xhc3MuYXgtc2NoZWR1bGVyLXNsb3QtaG92ZXJlZF09XCJ6b25lLmlzSG92ZXJlZCgpXCJcbiAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItdGltZWxpbmUtY29udGVudFwiXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVTbG90RXZlbnQoJGV2ZW50LCBkYXlEYXRhLmRhdGUpXCJcbiAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZVNsb3RFdmVudCgkZXZlbnQsIGRheURhdGEuZGF0ZSlcIlxuICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlU2xvdEV2ZW50KCRldmVudCwgZGF5RGF0YS5kYXRlKVwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItdGltZWxpbmUtYXBwb2ludG1lbnQtY29udGFpbmVyXCI+XG4gICAgICAgICAgQGZvciAoc2VnbWVudCBvZiBkYXlEYXRhLnZpc2libGVBcHBvaW50bWVudHM7IHRyYWNrIHNlZ21lbnQuaWQgKyBzZWdtZW50Lm9yaWdpbmFsU3RhcnREYXRlLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBheERyYWdcbiAgICAgICAgICAgICAgW2RyYWdEYXRhXT1cInNlZ21lbnRcIlxuICAgICAgICAgICAgICBbZHJhZ0N1cnNvcl09XCInZ3JhYidcIlxuICAgICAgICAgICAgICBbZHJhZ1RyYW5zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbZHJhZ0VsZW1lbnRDbG9uZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2RyYWdEaXNhYmxlZF09XCIhZHJhZ2dhYmxlKCkgfHwgc2VnbWVudC5yZWFkb25seSB8fCByZWFkb25seSgpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzZWdtZW50KVwiXG4gICAgICAgICAgICAgIChkYmxjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgc2VnbWVudClcIlxuICAgICAgICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIHNlZ21lbnQpXCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cIlxuICAgICAgICAgICAgICAgIHNlZ21lbnQuYWxsRGF5XG4gICAgICAgICAgICAgICAgICA/IHNlZ21lbnQudGl0bGVcbiAgICAgICAgICAgICAgICAgIDogc2VnbWVudC50aXRsZSArXG4gICAgICAgICAgICAgICAgICAgICcgKCcgK1xuICAgICAgICAgICAgICAgICAgICAoc2VnbWVudC5vcmlnaW5hbFN0YXJ0RGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMpICtcbiAgICAgICAgICAgICAgICAgICAgJyAtICcgK1xuICAgICAgICAgICAgICAgICAgICAoc2VnbWVudC5vcmlnaW5hbEVuZERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jKSArXG4gICAgICAgICAgICAgICAgICAgICcpJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci10aW1lbGluZS1hcHBvaW50bWVudFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5hbGwtZGF5LXNlZ21lbnRdPVwic2VnbWVudC5hbGxEYXlcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJzZWdtZW50LmNzc0NsYXNzPz9gYXgtc2NoZWR1bGVyLSR7c2VnbWVudC5wcmlvcml0eT8/J3ByaW1hcnknfS1wZXJpb3JpdHlgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGF4LXRpdGxlIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRydW5jYXRlXCI+e3sgc2VnbWVudC50aXRsZSB9fTwvYXgtdGl0bGU+XG4gICAgICAgICAgICAgIDwhLS0gRGlzcGxheSBzZWdtZW50J3Mgc3RhcnQvZW5kIHRpbWVzIGlmIG5vdCBhbGxEYXkgZm9yIHRoaXMgc2VnbWVudCAtLT5cbiAgICAgICAgICAgICAgQGlmICghc2VnbWVudC5hbGxEYXkpIHtcbiAgICAgICAgICAgICAgICA8YXgtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgICB7eyBzZWdtZW50Lm9yaWdpbmFsU3RhcnREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19IC1cbiAgICAgICAgICAgICAgICAgIHt7IHNlZ21lbnQub3JpZ2luYWxFbmREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAgPC9heC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoZGF5RGF0YS5tb3JlQ291bnQgPiAwKSB7XG4gICAgICAgICAgICA8ZGl2ICNtb3JlQXBwb2ludG1lbnRzIGNsYXNzPVwiYXgtc2NoZWR1bGVyLW1vbnRoLW92ZXJmbG93LWJhZGdlXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAre3sgJ21vcmUtaXRlbXMnIHwgdHJhbnNsYXRlOiB7IHBhcmFtczogeyBudW1iZXI6IGRheURhdGEubW9yZUNvdW50IH0gfSB8IGFzeW5jIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxheC1wb3BvdmVyIFt0YXJnZXRdPVwibW9yZUFwcG9pbnRtZW50c1wiIHBsYWNlbWVudD1cImJvdHRvbS1zdGFydFwiIHRyaWdnZXI9XCJjbGlja1wiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgW2NsYXNzLmF4LXN0YXRlLXJlYWRvbmx5XT1cInJlYWRvbmx5KClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtb3ZlcmxheS1wYW5lIGF4LXNjaGVkdWxlci1wb3BvdmVyIGF4LXNjaGVkdWxlci1tb250aC1wb3BvdmVyLWFwcG9pbnRtZW50XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEBmb3IgKHNlZ21lbnQgb2YgZGF5RGF0YS5oaWRkZW5BcHBvaW50bWVudHM7IHRyYWNrIHNlZ21lbnQuaWQgKyBzZWdtZW50Lm9yaWdpbmFsU3RhcnREYXRlLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBheERyYWdcbiAgICAgICAgICAgICAgICAgICAgW2RyYWdEYXRhXT1cInNlZ21lbnRcIlxuICAgICAgICAgICAgICAgICAgICBbZHJhZ0N1cnNvcl09XCInZ3JhYidcIlxuICAgICAgICAgICAgICAgICAgICBbZHJhZ1RyYW5zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICBbZHJhZ0VsZW1lbnRDbG9uZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2RyYWdEaXNhYmxlZF09XCIhZHJhZ2dhYmxlKCkgfHwgc2VnbWVudC5yZWFkb25seSB8fCByZWFkb25seSgpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzZWdtZW50KTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzZWdtZW50KTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzZWdtZW50KTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnQuYWxsRGF5XG4gICAgICAgICAgICAgICAgICAgICAgICA/IHNlZ21lbnQudGl0bGVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogc2VnbWVudC50aXRsZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICcgKCcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VnbWVudC5vcmlnaW5hbFN0YXJ0RGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJyAtICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VnbWVudC5vcmlnaW5hbEVuZERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICcpJ1xuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1wb3BvdmVyLWFwcG9pbnRtZW50XCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFsbC1kYXktc2VnbWVudF09XCJzZWdtZW50LmFsbERheVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlZ21lbnQuY3NzQ2xhc3M/P2BheC1zY2hlZHVsZXItJHtzZWdtZW50LnByaW9yaXR5Pz8ncHJpbWFyeSd9LXBlcmlvcml0eWBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF4LWFwcG9pbnRtZW50LWNoaXAtdGl0bGUgYXgtc2NoZWR1bGVyLXRydW5jYXRlXCI+e3sgc2VnbWVudC50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgQGlmICghc2VnbWVudC5hbGxEYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8YXgtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50Lm9yaWdpbmFsU3RhcnREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgLVxuICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudC5vcmlnaW5hbEVuZERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgZm9ybWF0OiAnSEg6bW0nLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmNcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9heC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvYXgtcG9wb3Zlcj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIH1cbjwvZGl2PlxuIl19","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, computed, inject, input, output } from '@angular/core';\nimport { AXSchedulerService } from '../../scheduler.service';\nimport { AXSchedulerTimelineDayViewComponent } from '../timeline-day/scheduler-timeline-day-view.component';\nimport * as i0 from \"@angular/core\";\nexport class AXSchedulerTimelineMultiDayViewComponent extends NXComponent {\n constructor() {\n super(...arguments);\n this.calendarService = inject(AXCalendarService);\n this.schedulerService = inject(AXSchedulerService);\n this.daysCount = input(7);\n this.readonly = input(false);\n this.draggable = input(true);\n this.calendar = input();\n this.date = input.required();\n this.endDayHour = input.required();\n this.startDayHour = input.required();\n this.appointments = input([]);\n this.daysDataForTimelineViews = computed(() => {\n const allOriginalAppointments = this.appointments();\n const multiViewStartDate = this.date();\n const numberOfDays = this.daysCount();\n if (!multiViewStartDate || !allOriginalAppointments) {\n return [];\n }\n const result = [];\n for (let i = 0; i < numberOfDays; i++) {\n const currentDayDate = multiViewStartDate.add('day', i);\n const currentDayStart = currentDayDate.startOf('day');\n const currentDayEnd = currentDayDate.endOf('day'); // Use full day for overlap check\n const appointmentsOverlappingThisDay = allOriginalAppointments.filter((appt) => {\n if (appt.allDay) {\n return false;\n }\n const apptStart = this.calendarService.create(appt.startDate, this.calendar());\n const apptEnd = this.calendarService.create(appt.endDate, this.calendar());\n return apptStart.compare(currentDayEnd, 'second') <= 0 && apptEnd.compare(currentDayStart, 'second') >= 0;\n });\n result.push({\n date: currentDayDate,\n holiday: this.isHoliday(currentDayDate),\n originalAppointmentsForThisDay: appointmentsOverlappingThisDay,\n });\n }\n return result;\n });\n this.slotClickedInternal = output();\n this.slotDblClickedInternal = output();\n this.slotRightClickedInternal = output();\n this.appointmentClickedInternal = output();\n this.appointmentDblClickedInternal = output();\n this.appointmentRightClickedInternal = output();\n this.onAppointmentDropInternal = output();\n }\n isToday(date) {\n const today = this.calendarService.create(new Date());\n return date.equal(today, 'day');\n }\n isHoliday(date) {\n const isHoliday = this.schedulerService.isHoliday(date);\n if (isHoliday) {\n const holiday = this.calendarService.holidays.filter((d) => date.equal(d.date, 'day'))[0];\n return {\n state: 'holiday',\n holiday,\n };\n }\n const isWeekend = this.schedulerService.isWeekend(date, this.calendar());\n if (isWeekend) {\n return { state: 'weekend' };\n }\n return { state: 'none' };\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerTimelineMultiDayViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.4\", type: AXSchedulerTimelineMultiDayViewComponent, isStandalone: true, selector: \"ax-scheduler-timeline-multi-day-view\", inputs: { daysCount: { classPropertyName: \"daysCount\", publicName: \"daysCount\", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: \"readonly\", publicName: \"readonly\", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: \"draggable\", publicName: \"draggable\", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: \"calendar\", publicName: \"calendar\", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: \"date\", publicName: \"date\", isSignal: true, isRequired: true, transformFunction: null }, endDayHour: { classPropertyName: \"endDayHour\", publicName: \"endDayHour\", isSignal: true, isRequired: true, transformFunction: null }, startDayHour: { classPropertyName: \"startDayHour\", publicName: \"startDayHour\", isSignal: true, isRequired: true, transformFunction: null }, appointments: { classPropertyName: \"appointments\", publicName: \"appointments\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: \"slotClickedInternal\", slotDblClickedInternal: \"slotDblClickedInternal\", slotRightClickedInternal: \"slotRightClickedInternal\", appointmentClickedInternal: \"appointmentClickedInternal\", appointmentDblClickedInternal: \"appointmentDblClickedInternal\", appointmentRightClickedInternal: \"appointmentRightClickedInternal\", onAppointmentDropInternal: \"onAppointmentDropInternal\" }, providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineMultiDayViewComponent }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-scheduler-timeline-day-view-container\\\">\\n @for (daySlot of daysDataForTimelineViews(); track daySlot.date.date.getTime()) {\\n <div class=\\\"ax-scheduler-timeline-multi-day-column\\\">\\n <div\\n class=\\\"ax-scheduler-week-header-date-day\\\"\\n [class.ax-state-today]=\\\"isToday(daySlot.date)\\\"\\n [class.ax-state-holiday]=\\\"daySlot.holiday.state !== 'none'\\\"\\n >\\n <span\\n class=\\\"ax-scheduler-week-header-date-day-char ax-scheduler-truncate\\\"\\n [axTooltip]=\\\"daySlot.holiday?.holiday?.title ?? ''\\\"\\n >\\n {{ daySlot.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n @if (daySlot.holiday.state === 'holiday' && daySlot.holiday.holiday.title) {\\n ( {{ daySlot.holiday.holiday.title }} )\\n }\\n </span>\\n <span class=\\\"ax-scheduler-week-header-date-day-num\\\">\\n {{ daySlot.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\\n </span>\\n </div>\\n <ax-scheduler-timeline-day-view\\n [date]=\\\"daySlot.date\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [appointments]=\\\"daySlot.originalAppointmentsForThisDay\\\"\\n (slotClickedInternal)=\\\"slotClickedInternal.emit($event)\\\"\\n (slotDblClickedInternal)=\\\"slotDblClickedInternal.emit($event)\\\"\\n (slotRightClickedInternal)=\\\"slotRightClickedInternal.emit($event)\\\"\\n (onAppointmentDropInternal)=\\\"onAppointmentDropInternal.emit($event)\\\"\\n (appointmentClickedInternal)=\\\"appointmentClickedInternal.emit($event)\\\"\\n (appointmentDblClickedInternal)=\\\"appointmentDblClickedInternal.emit($event)\\\"\\n (appointmentRightClickedInternal)=\\\"appointmentRightClickedInternal.emit($event)\\\"\\n >\\n </ax-scheduler-timeline-day-view>\\n </div>\\n }\\n</div>\\n\", styles: [\"ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container{height:100%;display:flex;flex-direction:row}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day{gap:.25rem;height:4rem;display:flex;position:relative;align-items:start;padding-inline:1rem;flex-direction:column;padding-block:.25rem;justify-content:center;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-char{font-weight:500}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-num{font-weight:700}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-char{max-width:100%;position:sticky;font-weight:300;inset-inline-start:1rem}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-num{position:sticky;font-weight:500;font-size:1.25rem;inset-inline-start:1rem}ax-scheduler-timeline-multi-day-view ax-scheduler-timeline-day-view{height:calc(100% - 4rem)}\\n\"], dependencies: [{ kind: \"component\", type: AXSchedulerTimelineDayViewComponent, selector: \"ax-scheduler-timeline-day-view\", inputs: [\"readonly\", \"draggable\", \"calendar\", \"date\", \"endDayHour\", \"startDayHour\", \"appointments\"], outputs: [\"slotClickedInternal\", \"slotDblClickedInternal\", \"slotRightClickedInternal\", \"appointmentClickedInternal\", \"appointmentDblClickedInternal\", \"appointmentRightClickedInternal\", \"onAppointmentDropInternal\"] }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }, { kind: \"directive\", type: AXTooltipDirective, selector: \"[axTooltip]\", inputs: [\"axTooltip\", \"axTooltipPlacement\", \"axTooltipOffsetX\", \"axTooltipOffsetY\", \"axTooltipOpenAfter\", \"axTooltipCloseAfter\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerTimelineMultiDayViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-scheduler-timeline-multi-day-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [AXSchedulerTimelineDayViewComponent, AsyncPipe, AXFormatPipe, AXTooltipDirective], providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineMultiDayViewComponent }], template: \"<div class=\\\"ax-scheduler-timeline-day-view-container\\\">\\n @for (daySlot of daysDataForTimelineViews(); track daySlot.date.date.getTime()) {\\n <div class=\\\"ax-scheduler-timeline-multi-day-column\\\">\\n <div\\n class=\\\"ax-scheduler-week-header-date-day\\\"\\n [class.ax-state-today]=\\\"isToday(daySlot.date)\\\"\\n [class.ax-state-holiday]=\\\"daySlot.holiday.state !== 'none'\\\"\\n >\\n <span\\n class=\\\"ax-scheduler-week-header-date-day-char ax-scheduler-truncate\\\"\\n [axTooltip]=\\\"daySlot.holiday?.holiday?.title ?? ''\\\"\\n >\\n {{ daySlot.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n @if (daySlot.holiday.state === 'holiday' && daySlot.holiday.holiday.title) {\\n ( {{ daySlot.holiday.holiday.title }} )\\n }\\n </span>\\n <span class=\\\"ax-scheduler-week-header-date-day-num\\\">\\n {{ daySlot.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\\n </span>\\n </div>\\n <ax-scheduler-timeline-day-view\\n [date]=\\\"daySlot.date\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [appointments]=\\\"daySlot.originalAppointmentsForThisDay\\\"\\n (slotClickedInternal)=\\\"slotClickedInternal.emit($event)\\\"\\n (slotDblClickedInternal)=\\\"slotDblClickedInternal.emit($event)\\\"\\n (slotRightClickedInternal)=\\\"slotRightClickedInternal.emit($event)\\\"\\n (onAppointmentDropInternal)=\\\"onAppointmentDropInternal.emit($event)\\\"\\n (appointmentClickedInternal)=\\\"appointmentClickedInternal.emit($event)\\\"\\n (appointmentDblClickedInternal)=\\\"appointmentDblClickedInternal.emit($event)\\\"\\n (appointmentRightClickedInternal)=\\\"appointmentRightClickedInternal.emit($event)\\\"\\n >\\n </ax-scheduler-timeline-day-view>\\n </div>\\n }\\n</div>\\n\", styles: [\"ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container{height:100%;display:flex;flex-direction:row}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day{gap:.25rem;height:4rem;display:flex;position:relative;align-items:start;padding-inline:1rem;flex-direction:column;padding-block:.25rem;justify-content:center;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-char{font-weight:500}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-num{font-weight:700}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-char{max-width:100%;position:sticky;font-weight:300;inset-inline-start:1rem}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-num{position:sticky;font-weight:500;font-size:1.25rem;inset-inline-start:1rem}ax-scheduler-timeline-multi-day-view ax-scheduler-timeline-day-view{height:calc(100% - 4rem)}\\n\"] }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLXRpbWVsaW5lLW11bHRpLWRheS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NyYy9saWIvdmlld3MvdGltZWxpbmUtbXVsdGktZGF5L3NjaGVkdWxlci10aW1lbGluZS1tdWx0aS1kYXktdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3ZpZXdzL3RpbWVsaW5lLW11bHRpLWRheS9zY2hlZHVsZXItdGltZWxpbmUtbXVsdGktZGF5LXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQTZCLE1BQU0sd0JBQXdCLENBQUM7QUFDdEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU92SCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSx1REFBdUQsQ0FBQzs7QUFtQjVHLE1BQU0sT0FBTyx3Q0FBeUMsU0FBUSxXQUFXO0lBVHpFOztRQVVVLG9CQUFlLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENB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RSxTQUFTLHlDQUFFLFlBQVksK0NBQUUsa0JBQWtCOzsyRkFHL0Usd0NBQXdDO2tCQVRwRCxTQUFTOytCQUNFLHNDQUFzQyxtQkFHL0IsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxXQUM1QixDQUFDLG1DQUFtQyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsa0JBQWtCLENBQUMsYUFDaEYsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVywwQ0FBMEMsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhDb21wb25lbnQsIE5YQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90b29sdGlwJztcbmltcG9ydCB7IEFYQ2FsZW5kYXJTZXJ2aWNlLCBBWERhdGVUaW1lLCBBWEhvbGlkYXlEYXRlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2RhdGUtdGltZSc7XG5pbXBvcnQgeyBBWEZvcm1hdFBpcGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvZm9ybWF0JztcbmltcG9ydCB7IEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBWaWV3RW5jYXBzdWxhdGlvbiwgY29tcHV0ZWQsIGluamVjdCwgaW5wdXQsIG91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJBcHBvaW50bWVudCB9IGZyb20gJy4uLy4uL3NjaGVkdWxlci5jbGFzcyc7XG5pbXBvcnQge1xuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudCxcbiAgQVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50LFxuICBBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50LFxufSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEFYU2NoZWR1bGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NjaGVkdWxlci5zZXJ2aWNlJztcbmltcG9ydCB7IEFYU2NoZWR1bGVyVGltZWxpbmVEYXlWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi4vdGltZWxpbmUtZGF5L3NjaGVkdWxlci10aW1lbGluZS1kYXktdmlldy5jb21wb25lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVsaW5lTXVsdGlEYXlEYXlTbG90IHtcbiAgZGF0ZTogQVhEYXRlVGltZTtcbiAgLy8gUGFzcyB0aGUgUkFXIG9yaWdpbmFsIGFwcG9pbnRtZW50cyB0aGF0ICpvdmVybGFwKiB3aXRoIHRoaXMgZGF5LlxuICAvLyBUaGUgY2hpbGQgdGltZWxpbmUtZGF5LXZpZXcgd2lsbCBoYW5kbGUgc2VnbWVudGF0aW9uLlxuICBvcmlnaW5hbEFwcG9pbnRtZW50c0ZvclRoaXNEYXk6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRbXTtcbiAgaG9saWRheT86IHsgc3RhdGU6ICdob2xpZGF5JyB8ICd3ZWVrZW5kJyB8ICdub25lJzsgaG9saWRheT86IEFYSG9saWRheURhdGUgfTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtc2NoZWR1bGVyLXRpbWVsaW5lLW11bHRpLWRheS12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NjaGVkdWxlci10aW1lbGluZS1tdWx0aS1kYXktdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9zY2hlZHVsZXItdGltZWxpbmUtbXVsdGktZGF5LXZpZXcuY29tcG9uZW50LnNjc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW0FYU2NoZWR1bGVyVGltZWxpbmVEYXlWaWV3Q29tcG9uZW50LCBBc3luY1BpcGUsIEFYRm9ybWF0UGlwZSwgQVhUb29sdGlwRGlyZWN0aXZlXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBBWENvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYU2NoZWR1bGVyVGltZWxpbmVNdWx0aURheVZpZXdDb21wb25lbnQgfV0sXG59KVxuZXhwb3J0IGNsYXNzIEFYU2NoZWR1bGVyVGltZWxpbmVNdWx0aURheVZpZXdDb21wb25lbnQgZXh0ZW5kcyBOWENvbXBvbmVudCB7XG4gIHByaXZhdGUgY2FsZW5kYXJTZXJ2aWNlID0gaW5qZWN0KEFYQ2FsZW5kYXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzY2hlZHVsZXJTZXJ2aWNlID0gaW5qZWN0KEFYU2NoZWR1bGVyU2VydmljZSk7XG5cbiAgZGF5c0NvdW50ID0gaW5wdXQoNyk7XG4gIHJlYWRvbmx5ID0gaW5wdXQoZmFsc2UpO1xuICBkcmFnZ2FibGUgPSBpbnB1dCh0cnVlKTtcbiAgY2FsZW5kYXIgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIGRhdGUgPSBpbnB1dC5yZXF1aXJlZDxBWERhdGVUaW1lPigpO1xuICBlbmREYXlIb3VyID0gaW5wdXQucmVxdWlyZWQ8bnVtYmVyPigpO1xuICBzdGFydERheUhvdXIgPSBpbnB1dC5yZXF1aXJlZDxudW1iZXI+KCk7XG4gIGFwcG9pbnRtZW50cyA9IGlucHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRbXT4oW10pO1xuXG4gIGRheXNEYXRhRm9yVGltZWxpbmVWaWV3cyA9IGNvbXB1dGVkPFRpbWVsaW5lTXVsdGlEYXlEYXlTbG90W10+KCgpID0+IHtcbiAgICBjb25zdCBhbGxPcmlnaW5hbEFwcG9pbnRtZW50cyA9IHRoaXMuYXBwb2ludG1lbnRzKCk7XG4gICAgY29uc3QgbXVsdGlWaWV3U3RhcnREYXRlID0gdGhpcy5kYXRlKCk7XG4gICAgY29uc3QgbnVtYmVyT2ZEYXlzID0gdGhpcy5kYXlzQ291bnQoKTtcblxuICAgIGlmICghbXVsdGlWaWV3U3RhcnREYXRlIHx8ICFhbGxPcmlnaW5hbEFwcG9pbnRtZW50cykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdDogVGltZWxpbmVNdWx0aURheURheVNsb3RbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1iZXJPZkRheXM7IGkrKykge1xuICAgICAgY29uc3QgY3VycmVudERheURhdGUgPSBtdWx0aVZpZXdTdGFydERhdGUuYWRkKCdkYXknLCBpKTtcbiAgICAgIGNvbnN0IGN1cnJlbnREYXlTdGFydCA9IGN1cnJlbnREYXlEYXRlLnN0YXJ0T2YoJ2RheScpO1xuICAgICAgY29uc3QgY3VycmVudERheUVuZCA9IGN1cnJlbnREYXlEYXRlLmVuZE9mKCdkYXknKTsgLy8gVXNlIGZ1bGwgZGF5IGZvciBvdmVybGFwIGNoZWNrXG5cbiAgICAgIGNvbnN0IGFwcG9pbnRtZW50c092ZXJsYXBwaW5nVGhpc0RheSA9IGFsbE9yaWdpbmFsQXBwb2ludG1lbnRzLmZpbHRlcigoYXBwdCkgPT4ge1xuICAgICAgICBpZiAoYXBwdC5hbGxEYXkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXBwdFN0YXJ0ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGFwcHQuc3RhcnREYXRlLCB0aGlzLmNhbGVuZGFyKCkpO1xuICAgICAgICBjb25zdCBhcHB0RW5kID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGFwcHQuZW5kRGF0ZSwgdGhpcy5jYWxlbmRhcigpKTtcbiAgICAgICAgcmV0dXJuIGFwcHRTdGFydC5jb21wYXJlKGN1cnJlbnREYXlFbmQsICdzZWNvbmQnKSA8PSAwICYmIGFwcHRFbmQuY29tcGFyZShjdXJyZW50RGF5U3RhcnQsICdzZWNvbmQnKSA+PSAwO1xuICAgICAgfSk7XG5cbiAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgZGF0ZTogY3VycmVudERheURhdGUsXG4gICAgICAgIGhvbGlkYXk6IHRoaXMuaXNIb2xpZGF5KGN1cnJlbnREYXlEYXRlKSxcbiAgICAgICAgb3JpZ2luYWxBcHBvaW50bWVudHNGb3JUaGlzRGF5OiBhcHBvaW50bWVudHNPdmVybGFwcGluZ1RoaXNEYXksXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG5cbiAgc2xvdENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBzbG90RGJsQ2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIHNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBhcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgYXBwb2ludG1lbnREYmxDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIGFwcG9pbnRtZW50UmlnaHRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIG9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50PigpO1xuXG4gIHByb3RlY3RlZCBpc1RvZGF5KGRhdGU6IEFYRGF0ZVRpbWUpOiBib29sZWFuIHtcbiAgICBjb25zdCB0b2RheSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShuZXcgRGF0ZSgpKTtcbiAgICByZXR1cm4gZGF0ZS5lcXVhbCh0b2RheSwgJ2RheScpO1xuICB9XG4gIHByb3RlY3RlZCBpc0hvbGlkYXkoZGF0ZTogQVhEYXRlVGltZSk6IHsgc3RhdGU6ICdob2xpZGF5JyB8ICd3ZWVrZW5kJyB8ICdub25lJzsgaG9saWRheT86IEFYSG9saWRheURhdGUgfSB7XG4gICAgY29uc3QgaXNIb2xpZGF5ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmlzSG9saWRheShkYXRlKTtcbiAgICBpZiAoaXNIb2xpZGF5KSB7XG4gICAgICBjb25zdCBob2xpZGF5ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuaG9saWRheXMuZmlsdGVyKChkKSA9PiBkYXRlLmVxdWFsKGQuZGF0ZSwgJ2RheScpKVswXTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXRlOiAnaG9saWRheScsXG4gICAgICAgIGhvbGlkYXksXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBpc1dlZWtlbmQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaXNXZWVrZW5kKGRhdGUsIHRoaXMuY2FsZW5kYXIoKSk7XG4gICAgaWYgKGlzV2Vla2VuZCkge1xuICAgICAgcmV0dXJuIHsgc3RhdGU6ICd3ZWVrZW5kJyB9O1xuICAgIH1cbiAgICByZXR1cm4geyBzdGF0ZTogJ25vbmUnIH07XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItdGltZWxpbmUtZGF5LXZpZXctY29udGFpbmVyXCI+XG4gIEBmb3IgKGRheVNsb3Qgb2YgZGF5c0RhdGFGb3JUaW1lbGluZVZpZXdzKCk7IHRyYWNrIGRheVNsb3QuZGF0ZS5kYXRlLmdldFRpbWUoKSkge1xuICAgIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItdGltZWxpbmUtbXVsdGktZGF5LWNvbHVtblwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci13ZWVrLWhlYWRlci1kYXRlLWRheVwiXG4gICAgICAgIFtjbGFzcy5heC1zdGF0ZS10b2RheV09XCJpc1RvZGF5KGRheVNsb3QuZGF0ZSlcIlxuICAgICAgICBbY2xhc3MuYXgtc3RhdGUtaG9saWRheV09XCJkYXlTbG90LmhvbGlkYXkuc3RhdGUgIT09ICdub25lJ1wiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItd2Vlay1oZWFkZXItZGF0ZS1kYXktY2hhciBheC1zY2hlZHVsZXItdHJ1bmNhdGVcIlxuICAgICAgICAgIFtheFRvb2x0aXBdPVwiZGF5U2xvdC5ob2xpZGF5Py5ob2xpZGF5Py50aXRsZSA/PyAnJ1wiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBkYXlTbG90LmRhdGUgfCBmb3JtYXQ6ICdkYXRlJyA6IHsgZm9ybWF0OiAnZGRkZCcsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgICAgIEBpZiAoZGF5U2xvdC5ob2xpZGF5LnN0YXRlID09PSAnaG9saWRheScgJiYgZGF5U2xvdC5ob2xpZGF5LmhvbGlkYXkudGl0bGUpIHtcbiAgICAgICAgICAgICgge3sgZGF5U2xvdC5ob2xpZGF5LmhvbGlkYXkudGl0bGUgfX0gKVxuICAgICAgICAgIH1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImF4LXNjaGVkdWxlci13ZWVrLWhlYWRlci1kYXRlLWRheS1udW1cIj5cbiAgICAgICAgICB7eyBkYXlTbG90LmRhdGUgfCBmb3JtYXQ6ICdkYXRlJyA6IHsgZm9ybWF0OiAnREQnLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8YXgtc2NoZWR1bGVyLXRpbWVsaW5lLWRheS12aWV3XG4gICAgICAgIFtkYXRlXT1cImRheVNsb3QuZGF0ZVwiXG4gICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgICAgW2RyYWdnYWJsZV09XCJkcmFnZ2FibGUoKVwiXG4gICAgICAgIFtlbmREYXlIb3VyXT1cImVuZERheUhvdXIoKVwiXG4gICAgICAgIFtzdGFydERheUhvdXJdPVwic3RhcnREYXlIb3VyKClcIlxuICAgICAgICBbYXBwb2ludG1lbnRzXT1cImRheVNsb3Qub3JpZ2luYWxBcHBvaW50bWVudHNGb3JUaGlzRGF5XCJcbiAgICAgICAgKHNsb3RDbGlja2VkSW50ZXJuYWwpPVwic2xvdENsaWNrZWRJbnRlcm5hbC5lbWl0KCRldmVudClcIlxuICAgICAgICAoc2xvdERibENsaWNrZWRJbnRlcm5hbCk9XCJzbG90RGJsQ2xpY2tlZEludGVybmFsLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgIChzbG90UmlnaHRDbGlja2VkSW50ZXJuYWwpPVwic2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgIChvbkFwcG9pbnRtZW50RHJvcEludGVybmFsKT1cIm9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgKGFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsKT1cImFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgIChhcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbCk9XCJhcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbC5lbWl0KCRldmVudClcIlxuICAgICAgICAoYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCk9XCJhcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsLmVtaXQoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICA8L2F4LXNjaGVkdWxlci10aW1lbGluZS1kYXktdmlldz5cbiAgICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG4iXX0=","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXDragDirective, AXDropZoneDirective } from '@acorex/cdk/drag-drop';\nimport { AXDecoratorGenericComponent } from '@acorex/components/decorators';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe, NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, HostBinding, inject, input, output, ViewEncapsulation, } from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport { AXSchedulerComponent, } from '../../scheduler.component';\nimport { AXSchedulerService } from '../../scheduler.service';\nimport * as i0 from \"@angular/core\";\nexport class AXSchedulerWeekViewComponent extends NXComponent {\n constructor() {\n super(...arguments);\n this.scheduler = inject(AXSchedulerComponent);\n this.calendarService = inject(AXCalendarService);\n this.schedulerService = inject(AXSchedulerService);\n this.GAP_PX = 1;\n this.readonly = input(false);\n this.draggable = input(true);\n this.calendar = input();\n this.date = input.required();\n this.endDayHour = input.required();\n this.startDayHour = input.required();\n this.appointments = input([]);\n /**\n * Processes all original appointments and generates day-specific segments for the entire week.\n * Each segment represents the visible part of an appointment on a particular day.\n * The segment's 'allDay' flag indicates if it should be in the all-day slot or timed grid for that day.\n */\n this.processedAppointmentsForLayout = computed(() => {\n const viewDays = this.daysArray().map((e) => e.date); // Array of AXDateTime for each day in the week\n const allOriginalAppointments = this.appointments(); // Raw appointments from input\n const viewConfigStartHour = this.startDayHour(); // Configured start hour for the timed grid\n const viewConfigEndHour = this.endDayHour(); // Configured end hour for the timed grid\n if (!viewDays || viewDays.length === 0 || !allOriginalAppointments || allOriginalAppointments.length === 0) {\n return [];\n }\n const allSegmentsInView = [];\n for (const day of viewDays) {\n // For each day in the week\n const dayAsStartOfDay = day.startOf('day'); // Use startOf('day') for consistent cache key if AXDateTime interns\n for (const appt of allOriginalAppointments) {\n // Determine segmentation boundaries for this specific 'day':\n // - If original appt is allDay, segment across the full 0-24h of 'day'.\n // The service method will ensure segment.allDay is true.\n // - If original appt is timed, segment across viewConfigStartHour-viewConfigEndHour.\n // The service method will set segment.allDay=true if this timed segment fills that window.\n const effectiveSegmentStartHour = appt.allDay ? 0 : viewConfigStartHour;\n const effectiveSegmentEndHour = appt.allDay ? 24 : viewConfigEndHour;\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, dayAsStartOfDay, // Pass the AXDateTime object for the current day in loop\n effectiveSegmentStartHour, effectiveSegmentEndHour);\n if (segment) {\n allSegmentsInView.push(segment);\n }\n }\n }\n // Deduplicate segments. A segment is unique by its original key and its specific start/end on a day.\n // The service method already produces day-specific start/end times.\n const uniqueSegmentsMap = new Map();\n allSegmentsInView.forEach((seg) => {\n // Create a unique key for the segment based on original appt key and segment's own date range\n const segStart = this.calendarService.create(seg.startDate, this.calendar());\n const segEnd = this.calendarService.create(seg.endDate, this.calendar());\n const mapKey = `${seg.id}-${segStart.format('YYYYMMDDHHmmssSSS')}-${segEnd.format('YYYYMMDDHHmmssSSS')}`;\n if (!uniqueSegmentsMap.has(mapKey)) {\n uniqueSegmentsMap.set(mapKey, seg);\n }\n });\n return Array.from(uniqueSegmentsMap.values());\n });\n /**\n * Segments that are to be displayed in the timed grid area of the week view.\n * These are segments from processedAppointmentsForLayout where segment.allDay is false.\n */\n this.timedGridSegments = computed(() => {\n return this.processedAppointmentsForLayout()?.filter((segment) => !segment.allDay) ?? [];\n });\n // Internal outputs to be caught by parent AXSchedulerComponent\n this.slotClickedInternal = output();\n this.slotDblClickedInternal = output();\n this.slotRightClickedInternal = output();\n this.appointmentClickedInternal = output();\n this.appointmentDblClickedInternal = output();\n this.appointmentRightClickedInternal = output();\n this.onAppointmentDropInternal = output();\n // --- Event Handlers ---\n this.eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n this.hoursArray = computed(() => {\n let time = this.date();\n if (!time)\n return [];\n time = time.set('hour', this.startDayHour()).startOf('hour');\n const hours = [time];\n while (time.hour < this.endDayHour() - 1) {\n time = time.add('hour', 1);\n hours.push(time);\n }\n return hours;\n });\n this.daysArray = computed(() => {\n const time = this.date();\n if (!time)\n return [];\n const days = [{ date: time, holiday: this.isHoliday(time) }];\n for (let index = 1; index <= 6; index++) {\n const date = time.add('day', index);\n days.push({ date, holiday: this.isHoliday(date) });\n }\n return days;\n });\n this.totalBlocksPerViewDay = computed(() => {\n const startH = this.startDayHour();\n const endH = this.endDayHour();\n if (typeof startH !== 'number' || typeof endH !== 'number')\n return 0;\n return Math.max(0, (endH - startH) * (60 / 30));\n });\n this.appointmentsByStartBlock = computed(() => {\n const viewDate = this.date(); // This should be the start date of the week\n const startH = this.startDayHour();\n const endH = this.endDayHour();\n if (!viewDate || typeof startH !== 'number' || typeof endH !== 'number')\n return {};\n // Pass the timedGridSegments to the service method\n return this.schedulerService.calculateWeekViewAppointmentsByStartBlock(this.timedGridSegments(), // CHANGED from singleDayAppointments\n viewDate, startH, endH);\n });\n this.activeAppointmentsInBlock = computed(() => {\n const viewDate = this.date(); // Start date of the week\n const startH = this.startDayHour();\n const endH = this.endDayHour();\n if (!viewDate || typeof startH !== 'number' || typeof endH !== 'number')\n return {};\n // Pass the timedGridSegments to the service method\n return this.schedulerService.calculateActiveAppointmentsInBlock(this.timedGridSegments(), // CHANGED from singleDayAppointments\n viewDate, startH, endH, 7);\n });\n this.visibleAppointmentsLayout = computed(() => {\n const layouts = [];\n const startingBlocks = this.appointmentsByStartBlock();\n const daysCount = 7;\n const totalBlocksPerDay = this.totalBlocksPerViewDay();\n const blockHeightExpr = `var(--ax-comp-scheduler-basic-view-blocks-height, 30px)`;\n const N = daysCount;\n const occupiedBlocks = {};\n for (let dayIndex = 0; dayIndex < daysCount; dayIndex++) {\n const dayBlocks = startingBlocks[dayIndex] ?? {};\n for (let blockIndex = 0; blockIndex < totalBlocksPerDay; blockIndex++) {\n if (occupiedBlocks[dayIndex]?.[blockIndex])\n continue;\n const startingAppointments = dayBlocks[blockIndex] ?? [];\n if (startingAppointments.length > 0) {\n const appointmentToShow = orderBy(startingAppointments, [(e) => e.endDate.getTime()], ['desc'])[0];\n const C = dayIndex;\n let layoutLeft = '0px';\n if (C > 0 && N > 1)\n layoutLeft = `calc(${C * (100 / N)}%)`;\n const layoutTop = `calc(${blockHeightExpr} * ${blockIndex})`;\n let layoutHeight = '0px';\n let appointmentDurationMinutes = 0;\n if (appointmentToShow.endDate && appointmentToShow.startDate) {\n appointmentDurationMinutes = this.schedulerService.calculateDurationInMinutes(appointmentToShow);\n if (appointmentDurationMinutes > 0) {\n const heightBlock = appointmentDurationMinutes / 30;\n layoutHeight = `max(0px, calc(${blockHeightExpr} * ${heightBlock} - ${this.GAP_PX}px))`;\n }\n }\n layouts.push({\n layoutTop,\n layoutLeft,\n layoutHeight,\n appointment: appointmentToShow,\n layoutWidth: 'calc(100% / 7 - 2rem)',\n });\n const blocksToOccupy = Math.ceil(appointmentDurationMinutes / 30);\n for (let i = 0; i < blocksToOccupy; i++) {\n const occupiedBlockIndex = blockIndex + i;\n if (occupiedBlockIndex < totalBlocksPerDay) {\n if (!occupiedBlocks[dayIndex])\n occupiedBlocks[dayIndex] = {};\n if (!occupiedBlocks[dayIndex][occupiedBlockIndex]) {\n occupiedBlocks[dayIndex][occupiedBlockIndex] = appointmentToShow.id;\n }\n }\n else {\n break;\n }\n }\n }\n }\n }\n return layouts;\n });\n this.visualOccupancyMap = computed(() => {\n const map = new Map();\n const visibleLayouts = this.visibleAppointmentsLayout();\n const viewStartDate = this.date();\n const startH = this.startDayHour();\n const endH = this.endDayHour();\n const totalBlocksPerDay = this.totalBlocksPerViewDay();\n if (!viewStartDate || typeof startH !== 'number' || typeof endH !== 'number')\n return map;\n for (const appointmentLayout of visibleLayouts) {\n const startInfo = this.schedulerService.getBlockIdentifier(this.calendarService.create(appointmentLayout.appointment.startDate, this.calendar()), viewStartDate, startH, endH, 7);\n if (!startInfo)\n continue;\n const durationMinutes = this.schedulerService.calculateDurationInMinutes(appointmentLayout.appointment);\n const blocksToOccupy = Math.ceil(durationMinutes / 30);\n for (let i = 0; i < blocksToOccupy; i++) {\n const occupiedBlockIndex = startInfo.blockIndex + i;\n if (occupiedBlockIndex >= 0 && occupiedBlockIndex < totalBlocksPerDay) {\n const mapKey = `${startInfo.dayIndex}-${occupiedBlockIndex}`;\n if (!map.has(mapKey)) {\n map.set(mapKey, appointmentLayout.appointment.id);\n }\n }\n else {\n break;\n }\n }\n }\n return map;\n });\n this.overflowBadges = computed(() => {\n const badges = [];\n const activeBlocks = this.activeAppointmentsInBlock();\n const occupancyMap = this.visualOccupancyMap();\n const daysCount = 7;\n const totalBlocksPerDay = this.totalBlocksPerViewDay();\n const blockHeightExpr = `var(--ax-comp-scheduler-basic-view-blocks-height, 30px)`;\n const N = daysCount;\n if (!activeBlocks || !occupancyMap || totalBlocksPerDay === 0)\n return badges;\n const countedHiddenAppointmentKeysToday = new Map();\n for (let dayIndex = 0; dayIndex < daysCount; dayIndex++) {\n countedHiddenAppointmentKeysToday.set(dayIndex, new Set());\n for (let blockIndex = 0; blockIndex < totalBlocksPerDay; blockIndex++) {\n const blockMapKey = `${dayIndex}-${blockIndex}`;\n const activeAppointments = activeBlocks[dayIndex]?.[blockIndex] ?? [];\n if (activeAppointments.length === 0)\n continue;\n const visibleAppointmentKey = occupancyMap.get(blockMapKey);\n const hiddenAppointments = activeAppointments.filter((appointment) => appointment.id !== visibleAppointmentKey);\n const newlyHidden = hiddenAppointments.filter((e) => !countedHiddenAppointmentKeysToday.get(dayIndex).has(e.id));\n if (newlyHidden.length > 0) {\n const C = dayIndex;\n let baseColLeft = '0px';\n if (C > 0 && N > 1)\n baseColLeft = `calc(${C * (100 / N)}%)`;\n const baseTop = `calc(${blockHeightExpr} * ${blockIndex})`;\n const badgeLeft = `calc(${baseColLeft} + calc(100% / ${N} - 1.75rem))`;\n const badgeTop = `calc(${baseTop} + 0.75rem)`;\n badges.push({ key: blockMapKey, count: newlyHidden.length, badgeTop, badgeLeft });\n newlyHidden.forEach((e) => countedHiddenAppointmentKeysToday.get(dayIndex).add(e.id));\n }\n }\n }\n return badges;\n });\n /**\n * Structures all-day (or \"becomes all-day\") segments for rendering in the all-day slots for each day of the week.\n */\n this.allDayAppointmentsPerDay = computed(() => {\n const daysInWeek = this.daysArray().map((e) => e.date); // AXDateTime objects for each day in the week\n const allSegmentsInView = this.processedAppointmentsForLayout(); // All processed segments\n const result = [];\n if (!daysInWeek || daysInWeek.length === 0)\n return result;\n daysInWeek.forEach((dayDate) => {\n const currentDayStart = dayDate.startOf('day'); // For accurate day comparison\n // Filter segments that are marked as 'allDay' AND belong to the current 'dayDate'\n const allDaySegmentsForThisDay = allSegmentsInView.filter((segment) => segment.allDay &&\n this.calendarService.create(segment.startDate, this.calendar()).startOf('day').equal(currentDayStart, 'day'));\n // Sort these segments for consistent display\n // Primarily by original start time, then by duration of original appointment, then title\n const sortedAppointmentsForThisDay = orderBy(allDaySegmentsForThisDay, [\n (s) => s.originalStartDate.getTime(),\n (s) => s.originalEndDate.getTime() - s.originalStartDate.getTime(),\n (s) => s.title?.toLowerCase() ?? '',\n ], ['asc', 'desc', 'asc']);\n result.push({\n day: dayDate, // The AXDateTime for this day column\n appointments: sortedAppointmentsForThisDay, // Array of segments for the all-day slot\n });\n });\n return result;\n });\n this.overflowBadgesWithData = computed(() => {\n const badgesInfo = [];\n const activeBlocks = this.activeAppointmentsInBlock();\n const occupancyMap = this.visualOccupancyMap();\n const daysCount = 7;\n const totalBlocksPerDay = this.totalBlocksPerViewDay();\n const blockHeightExpr = `var(--ax-comp-scheduler-basic-view-blocks-height, 30px)`;\n const N = daysCount;\n if (!activeBlocks || !occupancyMap || totalBlocksPerDay === 0)\n return badgesInfo;\n const countedHiddenAppointmentKeysToday = new Map();\n for (let dayIndex = 0; dayIndex < daysCount; dayIndex++) {\n countedHiddenAppointmentKeysToday.set(dayIndex, new Set());\n for (let blockIndex = 0; blockIndex < totalBlocksPerDay; blockIndex++) {\n const blockMapKey = `${dayIndex}-${blockIndex}`;\n const activeAppointments = activeBlocks[dayIndex]?.[blockIndex] ?? [];\n if (activeAppointments.length === 0)\n continue;\n const visibleAppointmentKey = occupancyMap.get(blockMapKey);\n // Find all hidden appointments for this specific block\n const hiddenAppointments = activeAppointments.filter((appointment) => appointment.id !== visibleAppointmentKey);\n // Find which of those hidden ones haven't been counted today yet\n const newlyHidden = hiddenAppointments.filter((e) => !countedHiddenAppointmentKeysToday.get(dayIndex).has(e.id));\n if (newlyHidden.length > 0) {\n const C = dayIndex;\n let baseColLeft = '0px';\n if (C > 0 && N > 1)\n baseColLeft = `calc(${C * (100 / N)}%)`;\n const baseTop = `calc(${blockHeightExpr} * ${blockIndex})`;\n // Keep your positioning logic for the badge itself\n const badgeLeft = `calc(${baseColLeft} + calc(100% / ${N} - 1.75rem))`;\n const badgeTop = `calc(${baseTop} + 0.75rem)`;\n // Store the badge info *and* the list of appointments it represents\n badgesInfo.push({\n key: blockMapKey,\n count: newlyHidden.length,\n badgeTop,\n badgeLeft,\n hiddenAppointments: newlyHidden, // Store the actual hidden appointments\n });\n // Mark these as counted for today\n newlyHidden.forEach((e) => countedHiddenAppointmentKeysToday.get(dayIndex).add(e.id));\n }\n }\n }\n // Sort the badges by top then left for consistent rendering order? (Optional)\n // badgesInfo.sort((a, b) => {\n // const topCompare = a.badgeTop.localeCompare(b.badgeTop);\n // if (topCompare !== 0) return topCompare;\n // return a.badgeLeft.localeCompare(b.badgeLeft);\n // });\n return badgesInfo;\n });\n }\n handleAppointmentEvent(mouseEvent, appointmentSegment) {\n // 'appointmentSegment' here is the segment that was interacted with\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentSegment);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, appointment: appointmentRef, sender: this.scheduler }, this.eventOutputMap, 'appointment');\n }\n handleSingleSlotEvent(mouseEvent, hour, day, minuteIndex) {\n const startDate = day.set('hour', hour.hour).set('minute', minuteIndex * 30);\n const slotData = this.schedulerService.getSlotData(startDate, 'week');\n if (slotData)\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler }, this.eventOutputMap, 'slot');\n }\n handleAllDaySlotEvent(mouseEvent, day) {\n const endDate = day.endOf('day');\n const startDate = day.startOf('day');\n const slotData = { startDate, endDate, view: 'week' };\n if (slotData)\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler }, this.eventOutputMap, 'slot');\n }\n handleAllDayDrop(e, day) {\n const endDate = day.endOf('day');\n const startDate = day.startOf('day');\n const slotData = { startDate, endDate, view: 'week' };\n const droppedItem = e.dropped.dragData();\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n });\n }\n handleSingleDayDrop(e, hour, day, minuteIndex) {\n const startDate = day.set('hour', hour.hour).set('minute', minuteIndex * 30);\n const slotData = this.schedulerService.getSlotData(startDate, 'week');\n const droppedItem = e.dropped.dragData();\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n });\n }\n isToday(date) {\n const today = this.calendarService.create(new Date());\n return date.equal(today, 'day');\n }\n isHoliday(date) {\n const isHoliday = this.schedulerService.isHoliday(date);\n if (isHoliday) {\n const holiday = this.calendarService.holidays.filter((d) => date.equal(d.date, 'day'))[0];\n return {\n state: 'holiday',\n holiday,\n };\n }\n const isWeekend = this.schedulerService.isWeekend(date, this.calendar());\n if (isWeekend) {\n return { state: 'weekend' };\n }\n return { state: 'none' };\n }\n get isReadonly() {\n return this.readonly();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerWeekViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.4\", type: AXSchedulerWeekViewComponent, isStandalone: true, selector: \"ax-scheduler-week-view\", inputs: { readonly: { classPropertyName: \"readonly\", publicName: \"readonly\", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: \"draggable\", publicName: \"draggable\", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: \"calendar\", publicName: \"calendar\", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: \"date\", publicName: \"date\", isSignal: true, isRequired: true, transformFunction: null }, endDayHour: { classPropertyName: \"endDayHour\", publicName: \"endDayHour\", isSignal: true, isRequired: true, transformFunction: null }, startDayHour: { classPropertyName: \"startDayHour\", publicName: \"startDayHour\", isSignal: true, isRequired: true, transformFunction: null }, appointments: { classPropertyName: \"appointments\", publicName: \"appointments\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: \"slotClickedInternal\", slotDblClickedInternal: \"slotDblClickedInternal\", slotRightClickedInternal: \"slotRightClickedInternal\", appointmentClickedInternal: \"appointmentClickedInternal\", appointmentDblClickedInternal: \"appointmentDblClickedInternal\", appointmentRightClickedInternal: \"appointmentRightClickedInternal\", onAppointmentDropInternal: \"onAppointmentDropInternal\" }, host: { properties: { \"class.ax-state-readonly\": \"this.isReadonly\" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerWeekViewComponent }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-scheduler-week-header\\\">\\n <div class=\\\"ax-scheduler-week-header-days\\\">\\n <div class=\\\"ax-scheduler-week-header-table\\\"></div>\\n <div class=\\\"ax-scheduler-week-header-date\\\" aria-hidden=\\\"true\\\">\\n @for (day of daysArray(); track day.date.date.getTime()) {\\n <div\\n [class.ax-state-today]=\\\"isToday(day.date)\\\"\\n class=\\\"ax-scheduler-week-header-date-day\\\"\\n [class.ax-state-holiday]=\\\"day.holiday.state !== 'none'\\\"\\n >\\n <span\\n class=\\\"ax-scheduler-week-header-date-day-char ax-scheduler-truncate\\\"\\n [axTooltip]=\\\"day.holiday?.holiday?.title ?? ''\\\"\\n >\\n {{ day.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n @if (day.holiday.state === 'holiday' && day.holiday.holiday.title) {\\n ( {{ day.holiday.holiday.title }} )\\n }\\n </span>\\n <span class=\\\"ax-scheduler-week-header-date-day-num\\\">\\n {{ day.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\\n </span>\\n </div>\\n }\\n </div>\\n </div>\\n <div class=\\\"ax-scheduler-week-header-days\\\">\\n <div class=\\\"ax-scheduler-week-header-table\\\">{{ 'dateTime.duration.all-day' | translate | async }}</div>\\n <div aria-hidden=\\\"true\\\" class=\\\"ax-scheduler-week-header-date\\\">\\n @for (slotData of allDayAppointmentsPerDay(); track slotData.day.date.getTime()) {\\n <div\\n axDropZone\\n #zone2=\\\"axDropZone\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone2.isHovered()\\\"\\n (onElementDrop)=\\\"handleAllDayDrop($event, slotData.day)\\\"\\n class=\\\"ax-scheduler-all-day-slot\\\"\\n (click)=\\\"handleAllDaySlotEvent($event, slotData.day)\\\"\\n (dblclick)=\\\"handleAllDaySlotEvent($event, slotData.day)\\\"\\n (contextmenu)=\\\"handleAllDaySlotEvent($event, slotData.day)\\\"\\n >\\n @if (slotData.appointments.length > 0) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || slotData.appointments[0].readonly || readonly()\\\"\\n [dragData]=\\\"slotData.appointments[0]\\\"\\n (click)=\\\"handleAppointmentEvent($event, slotData.appointments[0])\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, slotData.appointments[0])\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, slotData.appointments[0])\\\"\\n [title]=\\\"slotData.appointments[0].title\\\"\\n class=\\\"ax-scheduler-header-week-appointment\\\"\\n [ngClass]=\\\"slotData.appointments[0].cssClass??`ax-scheduler-${slotData.appointments[0].priority??'primary'}-periority`\\\"\\n >\\n <ax-title class=\\\"ax-scheduler-truncate\\\">{{ slotData.appointments[0].title }}</ax-title>\\n </div>\\n }\\n @if (slotData.appointments.length > 1) {\\n <div\\n #moreAppointments\\n class=\\\"ax-scheduler-appointment-badge\\\"\\n [ngClass]=\\\"slotData.appointments[1].cssClass??`ax-scheduler-${slotData.appointments[1].priority??'primary'}-periority`\\\"\\n >\\n +{{ slotData.appointments.length - 1 }}\\n </div>\\n <ax-popover [target]=\\\"moreAppointments\\\" [placement]=\\\"'bottom'\\\">\\n <div class=\\\"ax-overlay-pane ax-scheduler-popover\\\" [class.ax-state-readonly]=\\\"readonly()\\\">\\n @for (appointment of slotData.appointments; track appointment.id; let first = $first) {\\n @if (!first) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"appointment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || appointment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n [title]=\\\"appointment.title\\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [ngClass]=\\\"appointment.cssClass??`ax-scheduler-${appointment.priority??'primary'}-periority`\\\"\\n >\\n <ax-title class=\\\"ax-scheduler-truncate\\\">{{ appointment.title }}</ax-title>\\n </div>\\n }\\n }\\n </div>\\n </ax-popover>\\n }\\n </div>\\n }\\n </div>\\n </div>\\n</div>\\n\\n<div class=\\\"ax-scheduler-week-time-container\\\">\\n <div class=\\\"ax-scheduler-week-time\\\" aria-hidden=\\\"true\\\">\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <div>\\n {{ time | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </div>\\n }\\n </div>\\n\\n <div class=\\\"ax-scheduler-week-table-container\\\">\\n <div class=\\\"ax-scheduler-week-appointment-container\\\">\\n @for (appt of visibleAppointmentsLayout(); track appt.appointment.id) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || appt.appointment.readonly || readonly()\\\"\\n [dragData]=\\\"appt.appointment\\\"\\n (click)=\\\"handleAppointmentEvent($event, appt.appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appt.appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appt.appointment)\\\"\\n [title]=\\\"appt.appointment.title\\\"\\n [style.height]=\\\"appt.layoutHeight\\\"\\n class=\\\"ax-scheduler-week-appointment\\\"\\n [style.inset-block-start]=\\\"appt.layoutTop\\\"\\n [style.inset-inline-start]=\\\"appt.layoutLeft\\\"\\n [ngClass]=\\\"appt.appointment.cssClass??`ax-scheduler-${appt.appointment.priority??'primary'}-periority`\\\"\\n >\\n <ax-title class=\\\"ax-scheduler-truncate\\\">{{ appt.appointment.title }}</ax-title>\\n <ax-subtitle>\\n {{\\n appt.appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{ appt.appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n\\n <!-- Overflow Badges with Popovers -->\\n @for (badge of overflowBadgesWithData(); track badge.key) {\\n <!-- Wrap badge and popover for targeting -->\\n <div\\n style=\\\"position: absolute\\\"\\n class=\\\"ax-scheduler-badge-wrapper\\\"\\n [style.inset-block-start]=\\\"badge.badgeTop\\\"\\n [style.inset-inline-start]=\\\"badge.badgeLeft\\\"\\n >\\n <!-- The Badge itself -->\\n <div\\n #actionButton\\n class=\\\"ax-scheduler-appointment-badge\\\"\\n [ngClass]=\\\"badge.hiddenAppointments[0].cssClass??`ax-scheduler-${badge.hiddenAppointments[0].priority??'primary'}-periority`\\\"\\n >\\n +{{ badge.count }}\\n </div>\\n <!-- The Popover -->\\n <ax-popover [target]=\\\"actionButton\\\" [placement]=\\\"'bottom'\\\">\\n <div class=\\\"ax-overlay-pane ax-scheduler-popover\\\">\\n @for (appointment of badge.hiddenAppointments; track appointment.id) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"appointment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || appointment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n [title]=\\\"appointment.title\\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [ngClass]=\\\"appointment.cssClass??`ax-scheduler-${appointment.priority??'primary'}-periority`\\\"\\n >\\n <ax-title class=\\\"ax-scheduler-truncate\\\">{{ appointment.title }}</ax-title>\\n <ax-subtitle>\\n {{\\n appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{\\n appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n </ax-subtitle>\\n </div>\\n }\\n </div>\\n </ax-popover>\\n </div>\\n }\\n </div>\\n\\n <table aria-hidden=\\\"true\\\" [border]=\\\"1\\\">\\n <tbody>\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <tr>\\n @for (day of daysArray(); track day.date.date.getTime()) {\\n <td\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n (onElementDrop)=\\\"handleSingleDayDrop($event, time, day.date, 0)\\\"\\n (click)=\\\"handleSingleSlotEvent($event, time, day.date, 0)\\\"\\n (dblclick)=\\\"handleSingleSlotEvent($event, time, day.date, 0)\\\"\\n (contextmenu)=\\\"handleSingleSlotEvent($event, time, day.date, 0)\\\"\\n ></td>\\n }\\n </tr>\\n <tr>\\n @for (day of daysArray(); track day.date.date.getTime()) {\\n <td\\n axDropZone\\n #zone2=\\\"axDropZone\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone2.isHovered()\\\"\\n (onElementDrop)=\\\"handleSingleDayDrop($event, time, day.date, 1)\\\"\\n (click)=\\\"handleSingleSlotEvent($event, time, day.date, 1)\\\"\\n (dblclick)=\\\"handleSingleSlotEvent($event, time, day.date, 1)\\\"\\n (contextmenu)=\\\"handleSingleSlotEvent($event, time, day.date, 1)\\\"\\n ></td>\\n }\\n </tr>\\n }\\n </tbody>\\n </table>\\n </div>\\n</div>\\n\", styles: [\"ax-scheduler-week-view{display:block;position:relative;background-color:inherit;min-width:var(--ax-comp-scheduler-width)}ax-scheduler-week-view .ax-scheduler-appointment-badge{display:flex;height:1.5rem;cursor:pointer;font-size:.75rem;align-items:center;border-radius:9999px;justify-content:center;width:1.5rem!important}ax-scheduler-week-view .ax-scheduler-week-header{top:0;z-index:2;width:100%;position:sticky;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days{display:flex;background-color:inherit;border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-table{flex-shrink:0;position:sticky;text-align:center;inset-inline-start:0;width:var(--ax-comp-scheduler-basic-view-blocks-width);background-color:inherit;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date{width:100%;display:flex}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div{width:100%;text-align:center;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day{gap:.25rem;display:grid;align-items:center;padding-inline:.5rem;justify-content:center}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-char{font-weight:500}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-num{font-weight:700}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-char{max-width:100%;font-weight:300}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-num{font-weight:500;font-size:1.25rem}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div:last-child{border-inline-end-width:0}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date .ax-scheduler-all-day-slot{gap:.25rem;display:flex;width:14.2857142857%}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date .ax-scheduler-all-day-slot .ax-scheduler-header-week-appointment{display:block;overflow:hidden;text-align:start;padding-inline:.5rem;width:calc(100% - 2rem);border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-week-view .ax-scheduler-week-time-container{width:100%;display:flex;background-color:inherit}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-time{z-index:1;position:sticky;inset-inline-start:0;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-time div{display:block;text-align:center;padding-inline:.5rem;width:var(--ax-comp-scheduler-basic-view-blocks-width);height:calc(var(--ax-comp-scheduler-basic-view-blocks-height) * 2);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container{width:100%;position:relative}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container .ax-scheduler-week-appointment-container{top:0;width:100%;position:absolute}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container .ax-scheduler-week-appointment-container .ax-scheduler-week-appointment{display:flex;position:absolute;inset-inline-start:0;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;width:calc(14.2857142857% - 2rem);border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table{width:100%}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr{display:flex;height:var(--ax-comp-scheduler-basic-view-blocks-height);border-block-start:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr:first-child{border-block-start-width:0}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr td{width:100%;text-align:center;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr td:last-child{border-inline-end-width:0}ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-week-appointment,ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-header-week-appointment{cursor:pointer}ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-all-day-slot,ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-week-table-container>table td{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-all-day-slot:hover,ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-week-table-container>table td:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}\\n\"], dependencies: [{ kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"component\", type: AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: AXTranslatorPipe, name: \"translate\" }, { kind: \"component\", type: AXPopoverComponent, selector: \"ax-popover\", inputs: [\"offsetX\", \"offsetY\", \"target\", \"placement\", \"content\", \"openOn\", \"closeOn\", \"hasBackdrop\", \"openAfter\", \"closeAfter\", \"backdropClass\", \"panelClass\", \"adaptivityEnabled\"], outputs: [\"onOpened\", \"onClosed\"] }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }, { kind: \"directive\", type: AXDragDirective, selector: \"[axDrag]\", inputs: [\"dragData\", \"dragDisabled\", \"dragTransition\", \"dragElementClone\", \"dropZoneGroup\", \"dragStartDelay\", \"dragResetOnDblClick\", \"dragLockAxis\", \"dragClonedTemplate\", \"dragCursor\", \"dragBoundary\", \"dragTransitionDuration\"], outputs: [\"dragPositionChanged\"] }, { kind: \"directive\", type: AXDropZoneDirective, selector: \"[axDropZone]\", inputs: [\"dropZoneGroup\"], outputs: [\"onElementDrop\", \"onElementHover\"], exportAs: [\"axDropZone\"] }, { kind: \"directive\", type: AXTooltipDirective, selector: \"[axTooltip]\", inputs: [\"axTooltip\", \"axTooltipPlacement\", \"axTooltipOffsetX\", \"axTooltipOffsetY\", \"axTooltipOpenAfter\", \"axTooltipCloseAfter\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerWeekViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-scheduler-week-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [\n NgClass,\n AXDecoratorGenericComponent,\n AsyncPipe,\n AXTranslatorPipe,\n AXPopoverComponent,\n AXFormatPipe,\n AXDragDirective,\n AXDropZoneDirective,\n AXTooltipDirective,\n ], providers: [{ provide: AXComponent, useExisting: AXSchedulerWeekViewComponent }], template: \"<div class=\\\"ax-scheduler-week-header\\\">\\n <div class=\\\"ax-scheduler-week-header-days\\\">\\n <div class=\\\"ax-scheduler-week-header-table\\\"></div>\\n <div class=\\\"ax-scheduler-week-header-date\\\" aria-hidden=\\\"true\\\">\\n @for (day of daysArray(); track day.date.date.getTime()) {\\n <div\\n [class.ax-state-today]=\\\"isToday(day.date)\\\"\\n class=\\\"ax-scheduler-week-header-date-day\\\"\\n [class.ax-state-holiday]=\\\"day.holiday.state !== 'none'\\\"\\n >\\n <span\\n class=\\\"ax-scheduler-week-header-date-day-char ax-scheduler-truncate\\\"\\n [axTooltip]=\\\"day.holiday?.holiday?.title ?? ''\\\"\\n >\\n {{ day.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n @if (day.holiday.state === 'holiday' && day.holiday.holiday.title) {\\n ( {{ day.holiday.holiday.title }} )\\n }\\n </span>\\n <span class=\\\"ax-scheduler-week-header-date-day-num\\\">\\n {{ day.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\\n </span>\\n </div>\\n }\\n </div>\\n </div>\\n <div class=\\\"ax-scheduler-week-header-days\\\">\\n <div class=\\\"ax-scheduler-week-header-table\\\">{{ 'dateTime.duration.all-day' | translate | async }}</div>\\n <div aria-hidden=\\\"true\\\" class=\\\"ax-scheduler-week-header-date\\\">\\n @for (slotData of allDayAppointmentsPerDay(); track slotData.day.date.getTime()) {\\n <div\\n axDropZone\\n #zone2=\\\"axDropZone\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone2.isHovered()\\\"\\n (onElementDrop)=\\\"handleAllDayDrop($event, slotData.day)\\\"\\n class=\\\"ax-scheduler-all-day-slot\\\"\\n (click)=\\\"handleAllDaySlotEvent($event, slotData.day)\\\"\\n (dblclick)=\\\"handleAllDaySlotEvent($event, slotData.day)\\\"\\n (contextmenu)=\\\"handleAllDaySlotEvent($event, slotData.day)\\\"\\n >\\n @if (slotData.appointments.length > 0) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || slotData.appointments[0].readonly || readonly()\\\"\\n [dragData]=\\\"slotData.appointments[0]\\\"\\n (click)=\\\"handleAppointmentEvent($event, slotData.appointments[0])\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, slotData.appointments[0])\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, slotData.appointments[0])\\\"\\n [title]=\\\"slotData.appointments[0].title\\\"\\n class=\\\"ax-scheduler-header-week-appointment\\\"\\n [ngClass]=\\\"slotData.appointments[0].cssClass??`ax-scheduler-${slotData.appointments[0].priority??'primary'}-periority`\\\"\\n >\\n <ax-title class=\\\"ax-scheduler-truncate\\\">{{ slotData.appointments[0].title }}</ax-title>\\n </div>\\n }\\n @if (slotData.appointments.length > 1) {\\n <div\\n #moreAppointments\\n class=\\\"ax-scheduler-appointment-badge\\\"\\n [ngClass]=\\\"slotData.appointments[1].cssClass??`ax-scheduler-${slotData.appointments[1].priority??'primary'}-periority`\\\"\\n >\\n +{{ slotData.appointments.length - 1 }}\\n </div>\\n <ax-popover [target]=\\\"moreAppointments\\\" [placement]=\\\"'bottom'\\\">\\n <div class=\\\"ax-overlay-pane ax-scheduler-popover\\\" [class.ax-state-readonly]=\\\"readonly()\\\">\\n @for (appointment of slotData.appointments; track appointment.id; let first = $first) {\\n @if (!first) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"appointment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || appointment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n [title]=\\\"appointment.title\\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [ngClass]=\\\"appointment.cssClass??`ax-scheduler-${appointment.priority??'primary'}-periority`\\\"\\n >\\n <ax-title class=\\\"ax-scheduler-truncate\\\">{{ appointment.title }}</ax-title>\\n </div>\\n }\\n }\\n </div>\\n </ax-popover>\\n }\\n </div>\\n }\\n </div>\\n </div>\\n</div>\\n\\n<div class=\\\"ax-scheduler-week-time-container\\\">\\n <div class=\\\"ax-scheduler-week-time\\\" aria-hidden=\\\"true\\\">\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <div>\\n {{ time | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </div>\\n }\\n </div>\\n\\n <div class=\\\"ax-scheduler-week-table-container\\\">\\n <div class=\\\"ax-scheduler-week-appointment-container\\\">\\n @for (appt of visibleAppointmentsLayout(); track appt.appointment.id) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || appt.appointment.readonly || readonly()\\\"\\n [dragData]=\\\"appt.appointment\\\"\\n (click)=\\\"handleAppointmentEvent($event, appt.appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appt.appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appt.appointment)\\\"\\n [title]=\\\"appt.appointment.title\\\"\\n [style.height]=\\\"appt.layoutHeight\\\"\\n class=\\\"ax-scheduler-week-appointment\\\"\\n [style.inset-block-start]=\\\"appt.layoutTop\\\"\\n [style.inset-inline-start]=\\\"appt.layoutLeft\\\"\\n [ngClass]=\\\"appt.appointment.cssClass??`ax-scheduler-${appt.appointment.priority??'primary'}-periority`\\\"\\n >\\n <ax-title class=\\\"ax-scheduler-truncate\\\">{{ appt.appointment.title }}</ax-title>\\n <ax-subtitle>\\n {{\\n appt.appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{ appt.appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n\\n <!-- Overflow Badges with Popovers -->\\n @for (badge of overflowBadgesWithData(); track badge.key) {\\n <!-- Wrap badge and popover for targeting -->\\n <div\\n style=\\\"position: absolute\\\"\\n class=\\\"ax-scheduler-badge-wrapper\\\"\\n [style.inset-block-start]=\\\"badge.badgeTop\\\"\\n [style.inset-inline-start]=\\\"badge.badgeLeft\\\"\\n >\\n <!-- The Badge itself -->\\n <div\\n #actionButton\\n class=\\\"ax-scheduler-appointment-badge\\\"\\n [ngClass]=\\\"badge.hiddenAppointments[0].cssClass??`ax-scheduler-${badge.hiddenAppointments[0].priority??'primary'}-periority`\\\"\\n >\\n +{{ badge.count }}\\n </div>\\n <!-- The Popover -->\\n <ax-popover [target]=\\\"actionButton\\\" [placement]=\\\"'bottom'\\\">\\n <div class=\\\"ax-overlay-pane ax-scheduler-popover\\\">\\n @for (appointment of badge.hiddenAppointments; track appointment.id) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"appointment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragDisabled]=\\\"!draggable() || appointment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n [title]=\\\"appointment.title\\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [ngClass]=\\\"appointment.cssClass??`ax-scheduler-${appointment.priority??'primary'}-periority`\\\"\\n >\\n <ax-title class=\\\"ax-scheduler-truncate\\\">{{ appointment.title }}</ax-title>\\n <ax-subtitle>\\n {{\\n appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{\\n appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n </ax-subtitle>\\n </div>\\n }\\n </div>\\n </ax-popover>\\n </div>\\n }\\n </div>\\n\\n <table aria-hidden=\\\"true\\\" [border]=\\\"1\\\">\\n <tbody>\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <tr>\\n @for (day of daysArray(); track day.date.date.getTime()) {\\n <td\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n (onElementDrop)=\\\"handleSingleDayDrop($event, time, day.date, 0)\\\"\\n (click)=\\\"handleSingleSlotEvent($event, time, day.date, 0)\\\"\\n (dblclick)=\\\"handleSingleSlotEvent($event, time, day.date, 0)\\\"\\n (contextmenu)=\\\"handleSingleSlotEvent($event, time, day.date, 0)\\\"\\n ></td>\\n }\\n </tr>\\n <tr>\\n @for (day of daysArray(); track day.date.date.getTime()) {\\n <td\\n axDropZone\\n #zone2=\\\"axDropZone\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone2.isHovered()\\\"\\n (onElementDrop)=\\\"handleSingleDayDrop($event, time, day.date, 1)\\\"\\n (click)=\\\"handleSingleSlotEvent($event, time, day.date, 1)\\\"\\n (dblclick)=\\\"handleSingleSlotEvent($event, time, day.date, 1)\\\"\\n (contextmenu)=\\\"handleSingleSlotEvent($event, time, day.date, 1)\\\"\\n ></td>\\n }\\n </tr>\\n }\\n </tbody>\\n </table>\\n </div>\\n</div>\\n\", styles: [\"ax-scheduler-week-view{display:block;position:relative;background-color:inherit;min-width:var(--ax-comp-scheduler-width)}ax-scheduler-week-view .ax-scheduler-appointment-badge{display:flex;height:1.5rem;cursor:pointer;font-size:.75rem;align-items:center;border-radius:9999px;justify-content:center;width:1.5rem!important}ax-scheduler-week-view .ax-scheduler-week-header{top:0;z-index:2;width:100%;position:sticky;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days{display:flex;background-color:inherit;border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-table{flex-shrink:0;position:sticky;text-align:center;inset-inline-start:0;width:var(--ax-comp-scheduler-basic-view-blocks-width);background-color:inherit;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date{width:100%;display:flex}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div{width:100%;text-align:center;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day{gap:.25rem;display:grid;align-items:center;padding-inline:.5rem;justify-content:center}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-char{font-weight:500}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-num{font-weight:700}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-char{max-width:100%;font-weight:300}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-num{font-weight:500;font-size:1.25rem}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div:last-child{border-inline-end-width:0}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date .ax-scheduler-all-day-slot{gap:.25rem;display:flex;width:14.2857142857%}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date .ax-scheduler-all-day-slot .ax-scheduler-header-week-appointment{display:block;overflow:hidden;text-align:start;padding-inline:.5rem;width:calc(100% - 2rem);border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-week-view .ax-scheduler-week-time-container{width:100%;display:flex;background-color:inherit}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-time{z-index:1;position:sticky;inset-inline-start:0;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-time div{display:block;text-align:center;padding-inline:.5rem;width:var(--ax-comp-scheduler-basic-view-blocks-width);height:calc(var(--ax-comp-scheduler-basic-view-blocks-height) * 2);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container{width:100%;position:relative}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container .ax-scheduler-week-appointment-container{top:0;width:100%;position:absolute}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container .ax-scheduler-week-appointment-container .ax-scheduler-week-appointment{display:flex;position:absolute;inset-inline-start:0;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;width:calc(14.2857142857% - 2rem);border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table{width:100%}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr{display:flex;height:var(--ax-comp-scheduler-basic-view-blocks-height);border-block-start:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr:first-child{border-block-start-width:0}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr td{width:100%;text-align:center;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr td:last-child{border-inline-end-width:0}ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-week-appointment,ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-header-week-appointment{cursor:pointer}ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-all-day-slot,ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-week-table-container>table td{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-all-day-slot:hover,ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-week-table-container>table td:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}\\n\"] }]\n }], propDecorators: { isReadonly: [{\n type: HostBinding,\n args: ['class.ax-state-readonly']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLXdlZWstdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3ZpZXdzL3dlZWsvc2NoZWR1bGVyLXdlZWstdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3ZpZXdzL3dlZWsvc2NoZWR1bGVyLXdlZWstdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQXVCLE1BQU0sdUJBQXVCLENBQUM7QUFDbEcsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUE2QixNQUFNLHdCQUF3QixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04saUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFB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QUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQzlCLENBQUM7UUFDRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUE0QyxVQUFVO1FBQ3BELE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3pCLENBQUM7OEdBN2VVLDRCQUE0QjtrR0FBNUIsNEJBQTRCLHk4Q0FGNUIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLDRCQUE0QixFQUFFLENBQUMsaURDekRsRixvMVVBZ09BLG9zTkRqTEksT0FBTyxvRkFDUCwyQkFBMkIsb0xBQzNCLFNBQVMseUNBQ1QsZ0JBQWdCLGtEQUNoQixrQkFBa0IsMFFBQ2xCLFlBQVksK0NBQ1osZUFBZSwyVEFDZixtQkFBbUIsNEpBQ25CLGtCQUFrQjs7MkZBSVQsNEJBQTRCO2tCQW5CeEMsU0FBUzsrQkFDRSx3QkFBd0IsbUJBR2pCLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksV0FDNUI7d0JBQ1AsT0FBTzt3QkFDUCwyQkFBMkI7d0JBQzNCLFNBQVM7d0JBQ1QsZ0JBQWdCO3dCQUNoQixrQkFBa0I7d0JBQ2xCLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLGtCQUFrQjtxQkFDbkIsYUFDVSxDQUFDLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLDhCQUE4QixFQUFFLENBQUM7OEJBNmVwQyxVQUFVO3NCQUFyRCxXQUFXO3VCQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYQ29tcG9uZW50LCBOWENvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY2RrL2NvbW1vbic7XG5pbXBvcnQgeyBBWERyYWdEaXJlY3RpdmUsIEFYRHJvcFpvbmVEaXJlY3RpdmUsIEFYRHJvcFpvbmVEcm9wRXZlbnQgfSBmcm9tICdAYWNvcmV4L2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgQVhEZWNvcmF0b3JHZW5lcmljQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgQVhQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3BvcG92ZXInO1xuaW1wb3J0IHsgQVhUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3Rvb2x0aXAnO1xuaW1wb3J0IHsgQVhDYWxlbmRhclNlcnZpY2UsIEFYRGF0ZVRpbWUsIEFYSG9saWRheURhdGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvZGF0ZS10aW1lJztcbmltcG9ydCB7IEFYRm9ybWF0UGlwZSB9IGZyb20gJ0BhY29yZXgvY29yZS9mb3JtYXQnO1xuaW1wb3J0IHsgQVhUcmFuc2xhdG9yUGlwZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIEhvc3RCaW5kaW5nLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBvdXRwdXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG9yZGVyQnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtcbiAgQVhTY2hlZHVsZXJBY3RpdmVBcHBvaW50bWVudHNJbkJsb2NrLFxuICBBWFNjaGVkdWxlckFsbERheVNsb3REYXRhLFxuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50LFxuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50TGF5b3V0LFxuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCxcbiAgQVhTY2hlZHVsZXJPdmVyZmxvd0JhZGdlLFxufSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuY2xhc3MnO1xuaW1wb3J0IHtcbiAgQVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQsXG4gIEFYU2NoZWR1bGVyQ29tcG9uZW50LFxuICBBWFNjaGVkdWxlclNsb3REcm9wRXZlbnQsXG4gIEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQsXG59IGZyb20gJy4uLy4uL3NjaGVkdWxlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLnNlcnZpY2UnO1xuXG50eXBlIEFYU2NoZWR1bGVyR3JpZEJhZGdlSW5mbyA9IEFYU2NoZWR1bGVyT3ZlcmZsb3dCYWRnZSAmIHtcbiAgaGlkZGVuQXBwb2ludG1lbnRzOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdO1xufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtc2NoZWR1bGVyLXdlZWstdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9zY2hlZHVsZXItd2Vlay12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3NjaGVkdWxlci13ZWVrLXZpZXcuY29tcG9uZW50LnNjc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW1xuICAgIE5nQ2xhc3MsXG4gICAgQVhEZWNvcmF0b3JHZW5lcmljQ29tcG9uZW50LFxuICAgIEFzeW5jUGlwZSxcbiAgICBBWFRyYW5zbGF0b3JQaXBlLFxuICAgIEFYUG9wb3ZlckNvbXBvbmVudCxcbiAgICBBWEZvcm1hdFBpcGUsXG4gICAgQVhEcmFnRGlyZWN0aXZlLFxuICAgIEFYRHJvcFpvbmVEaXJlY3RpdmUsXG4gICAgQVhUb29sdGlwRGlyZWN0aXZlLFxuICBdLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IEFYQ29tcG9uZW50LCB1c2VFeGlzdGluZzogQVhTY2hlZHVsZXJXZWVrVmlld0NvbXBvbmVudCB9XSxcbn0pXG5leHBvcnQgY2xhc3MgQVhTY2hlZHVsZXJXZWVrVmlld0NvbXBvbmVudCBleHRlbmRzIE5YQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBzY2hlZHVsZXIgPSBpbmplY3QoQVhTY2hlZHVsZXJDb21wb25lbnQpO1xuICBwcml2YXRlIGNhbGVuZGFyU2VydmljZSA9IGluamVjdChBWENhbGVuZGFyU2VydmljZSk7XG4gIHByaXZhdGUgc2NoZWR1bGVyU2VydmljZSA9IGluamVjdChBWFNjaGVkdWxlclNlcnZpY2UpO1xuXG4gIHJlYWRvbmx5IEdBUF9QWCA9IDE7XG5cbiAgcmVhZG9ubHkgPSBpbnB1dChmYWxzZSk7XG4gIGRyYWdnYWJsZSA9IGlucHV0KHRydWUpO1xuICBjYWxlbmRhciA9IGlucHV0PHN0cmluZz4oKTtcbiAgZGF0ZSA9IGlucHV0LnJlcXVpcmVkPEFYRGF0ZVRpbWU+KCk7XG4gIGVuZERheUhvdXIgPSBpbnB1dC5yZXF1aXJlZDxudW1iZXI+KCk7XG4gIHN0YXJ0RGF5SG91ciA9IGlucHV0LnJlcXVpcmVkPG51bWJlcj4oKTtcbiAgYXBwb2ludG1lbnRzID0gaW5wdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudFtdPihbXSk7XG5cbiAgLyoqXG4gICAqIFByb2Nlc3NlcyBhbGwgb3JpZ2luYWwgYXBwb2ludG1lbnRzIGFuZCBnZW5lcmF0ZXMgZGF5LXNwZWNpZmljIHNlZ21lbnRzIGZvciB0aGUgZW50aXJlIHdlZWsuXG4gICAqIEVhY2ggc2VnbWVudCByZXByZXNlbnRzIHRoZSB2aXNpYmxlIHBhcnQgb2YgYW4gYXBwb2ludG1lbnQgb24gYSBwYXJ0aWN1bGFyIGRheS5cbiAgICogVGhlIHNlZ21lbnQncyAnYWxsRGF5JyBmbGFnIGluZGljYXRlcyBpZiBpdCBzaG91bGQgYmUgaW4gdGhlIGFsbC1kYXkgc2xvdCBvciB0aW1lZCBncmlkIGZvciB0aGF0IGRheS5cbiAgICovXG4gIHByb2Nlc3NlZEFwcG9pbnRtZW50c0ZvckxheW91dCA9IGNvbXB1dGVkPEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50W10+KCgpID0+IHtcbiAgICBjb25zdCB2aWV3RGF5cyA9IHRoaXMuZGF5c0FycmF5KCkubWFwKChlKSA9PiBlLmRhdGUpOyAvLyBBcnJheSBvZiBBWERhdGVUaW1lIGZvciBlYWNoIGRheSBpbiB0aGUgd2Vla1xuICAgIGNvbnN0IGFsbE9yaWdpbmFsQXBwb2ludG1lbnRzID0gdGhpcy5hcHBvaW50bWVudHMoKTsgLy8gUmF3IGFwcG9pbnRtZW50cyBmcm9tIGlucHV0XG4gICAgY29uc3Qgdmlld0NvbmZpZ1N0YXJ0SG91ciA9IHRoaXMuc3RhcnREYXlIb3VyKCk7IC8vIENvbmZpZ3VyZWQgc3RhcnQgaG91ciBmb3IgdGhlIHRpbWVkIGdyaWRcbiAgICBjb25zdCB2aWV3Q29uZmlnRW5kSG91ciA9IHRoaXMuZW5kRGF5SG91cigpOyAvLyBDb25maWd1cmVkIGVuZCBob3VyIGZvciB0aGUgdGltZWQgZ3JpZFxuXG4gICAgaWYgKCF2aWV3RGF5cyB8fCB2aWV3RGF5cy5sZW5ndGggPT09IDAgfHwgIWFsbE9yaWdpbmFsQXBwb2ludG1lbnRzIHx8IGFsbE9yaWdpbmFsQXBwb2ludG1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGFsbFNlZ21lbnRzSW5WaWV3OiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdID0gW107XG4gICAgZm9yIChjb25zdCBkYXkgb2Ygdmlld0RheXMpIHtcbiAgICAgIC8vIEZvciBlYWNoIGRheSBpbiB0aGUgd2Vla1xuICAgICAgY29uc3QgZGF5QXNTdGFydE9mRGF5ID0gZGF5LnN0YXJ0T2YoJ2RheScpOyAvLyBVc2Ugc3RhcnRPZignZGF5JykgZm9yIGNvbnNpc3RlbnQgY2FjaGUga2V5IGlmIEFYRGF0ZVRpbWUgaW50ZXJuc1xuICAgICAgZm9yIChjb25zdCBhcHB0IG9mIGFsbE9yaWdpbmFsQXBwb2ludG1lbnRzKSB7XG4gICAgICAgIC8vIERldGVybWluZSBzZWdtZW50YXRpb24gYm91bmRhcmllcyBmb3IgdGhpcyBzcGVjaWZpYyAnZGF5JzpcbiAgICAgICAgLy8gLSBJZiBvcmlnaW5hbCBhcHB0IGlzIGFsbERheSwgc2VnbWVudCBhY3Jvc3MgdGhlIGZ1bGwgMC0yNGggb2YgJ2RheScuXG4gICAgICAgIC8vICAgVGhlIHNlcnZpY2UgbWV0aG9kIHdpbGwgZW5zdXJlIHNlZ21lbnQuYWxsRGF5IGlzIHRydWUuXG4gICAgICAgIC8vIC0gSWYgb3JpZ2luYWwgYXBwdCBpcyB0aW1lZCwgc2VnbWVudCBhY3Jvc3Mgdmlld0NvbmZpZ1N0YXJ0SG91ci12aWV3Q29uZmlnRW5kSG91ci5cbiAgICAgICAgLy8gICBUaGUgc2VydmljZSBtZXRob2Qgd2lsbCBzZXQgc2VnbWVudC5hbGxEYXk9dHJ1ZSBpZiB0aGlzIHRpbWVkIHNlZ21lbnQgZmlsbHMgdGhhdCB3aW5kb3cuXG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZVNlZ21lbnRTdGFydEhvdXIgPSBhcHB0LmFsbERheSA/IDAgOiB2aWV3Q29uZmlnU3RhcnRIb3VyO1xuICAgICAgICBjb25zdCBlZmZlY3RpdmVTZWdtZW50RW5kSG91ciA9IGFwcHQuYWxsRGF5ID8gMjQgOiB2aWV3Q29uZmlnRW5kSG91cjtcblxuICAgICAgICBjb25zdCBzZWdtZW50ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldENsb25lZEFwcG9pbnRtZW50U2VnbWVudE9uRGF5KFxuICAgICAgICAgIGFwcHQsXG4gICAgICAgICAgZGF5QXNTdGFydE9mRGF5LCAvLyBQYXNzIHRoZSBBWERhdGVUaW1lIG9iamVjdCBmb3IgdGhlIGN1cnJlbnQgZGF5IGluIGxvb3BcbiAgICAgICAgICBlZmZlY3RpdmVTZWdtZW50U3RhcnRIb3VyLFxuICAgICAgICAgIGVmZmVjdGl2ZVNlZ21lbnRFbmRIb3VyLFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChzZWdtZW50KSB7XG4gICAgICAgICAgYWxsU2VnbWVudHNJblZpZXcucHVzaChzZWdtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERlZHVwbGljYXRlIHNlZ21lbnRzLiBBIHNlZ21lbnQgaXMgdW5pcXVlIGJ5IGl0cyBvcmlnaW5hbCBrZXkgYW5kIGl0cyBzcGVjaWZpYyBzdGFydC9lbmQgb24gYSBkYXkuXG4gICAgLy8gVGhlIHNlcnZpY2UgbWV0aG9kIGFscmVhZHkgcHJvZHVjZXMgZGF5LXNwZWNpZmljIHN0YXJ0L2VuZCB0aW1lcy5cbiAgICBjb25zdCB1bmlxdWVTZWdtZW50c01hcCA9IG5ldyBNYXA8c3RyaW5nLCBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudD4oKTtcbiAgICBhbGxTZWdtZW50c0luVmlldy5mb3JFYWNoKChzZWcpID0+IHtcbiAgICAgIC8vIENyZWF0ZSBhIHVuaXF1ZSBrZXkgZm9yIHRoZSBzZWdtZW50IGJhc2VkIG9uIG9yaWdpbmFsIGFwcHQga2V5IGFuZCBzZWdtZW50J3Mgb3duIGRhdGUgcmFuZ2VcbiAgICAgIGNvbnN0IHNlZ1N0YXJ0ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKHNlZy5zdGFydERhdGUsIHRoaXMuY2FsZW5kYXIoKSk7XG4gICAgICBjb25zdCBzZWdFbmQgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoc2VnLmVuZERhdGUsIHRoaXMuY2FsZW5kYXIoKSk7XG4gICAgICBjb25zdCBtYXBLZXkgPSBgJHtzZWcuaWR9LSR7c2VnU3RhcnQuZm9ybWF0KCdZWVlZTU1EREhIbW1zc1NTUycpfS0ke3NlZ0VuZC5mb3JtYXQoJ1lZWVlNTURESEhtbXNzU1NTJyl9YDtcbiAgICAgIGlmICghdW5pcXVlU2VnbWVudHNNYXAuaGFzKG1hcEtleSkpIHtcbiAgICAgICAgdW5pcXVlU2VnbWVudHNNYXAuc2V0KG1hcEtleSwgc2VnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh1bmlxdWVTZWdtZW50c01hcC52YWx1ZXMoKSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBTZWdtZW50cyB0aGF0IGFyZSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHRpbWVkIGdyaWQgYXJlYSBvZiB0aGUgd2VlayB2aWV3LlxuICAgKiBUaGVzZSBhcmUgc2VnbWVudHMgZnJvbSBwcm9jZXNzZWRBcHBvaW50bWVudHNGb3JMYXlvdXQgd2hlcmUgc2VnbWVudC5hbGxEYXkgaXMgZmFsc2UuXG4gICAqL1xuICB0aW1lZEdyaWRTZWdtZW50cyA9IGNvbXB1dGVkPEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50W10+KCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzZWRBcHBvaW50bWVudHNGb3JMYXlvdXQoKT8uZmlsdGVyKChzZWdtZW50KSA9PiAhc2VnbWVudC5hbGxEYXkpID8/IFtdO1xuICB9KTtcblxuICAvLyBJbnRlcm5hbCBvdXRwdXRzIHRvIGJlIGNhdWdodCBieSBwYXJlbnQgQVhTY2hlZHVsZXJDb21wb25lbnRcbiAgc2xvdENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBzbG90RGJsQ2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIHNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBhcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgYXBwb2ludG1lbnREYmxDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIGFwcG9pbnRtZW50UmlnaHRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIG9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50PigpO1xuXG4gIC8vIC0tLSBFdmVudCBIYW5kbGVycyAtLS1cbiAgcHJpdmF0ZSByZWFkb25seSBldmVudE91dHB1dE1hcCA9IHtcbiAgICBzbG90OiB7XG4gICAgICBjbGljazogdGhpcy5zbG90Q2xpY2tlZEludGVybmFsLFxuICAgICAgZGJsY2xpY2s6IHRoaXMuc2xvdERibENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGNvbnRleHRtZW51OiB0aGlzLnNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCxcbiAgICB9LFxuICAgIGFwcG9pbnRtZW50OiB7XG4gICAgICBjbGljazogdGhpcy5hcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGRibGNsaWNrOiB0aGlzLmFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsLFxuICAgICAgY29udGV4dG1lbnU6IHRoaXMuYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCxcbiAgICB9LFxuICB9O1xuICBoYW5kbGVBcHBvaW50bWVudEV2ZW50KG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQsIGFwcG9pbnRtZW50U2VnbWVudDogQVhTY2hlZHVsZXJBcHBvaW50bWVudCkge1xuICAgIC8vICdhcHBvaW50bWVudFNlZ21lbnQnIGhlcmUgaXMgdGhlIHNlZ21lbnQgdGhhdCB3YXMgaW50ZXJhY3RlZCB3aXRoXG4gICAgY29uc3Qgb3JpZ2luYWxBcHBvaW50bWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRPcmlnaW5hbEFwcG9pbnRtZW50KGFwcG9pbnRtZW50U2VnbWVudCk7XG4gICAgY29uc3QgYXBwb2ludG1lbnRSZWYgPSB7XG4gICAgICAuLi5vcmlnaW5hbEFwcG9pbnRtZW50LFxuICAgICAgZW5kRGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5lbmREYXRlLFxuICAgICAgc3RhcnREYXRlOiBvcmlnaW5hbEFwcG9pbnRtZW50LnN0YXJ0RGF0ZSxcbiAgICB9O1xuICAgIHRoaXMuc2NoZWR1bGVyU2VydmljZS5oYW5kbGVFdmVudChcbiAgICAgIHsgbmF0aXZlRXZlbnQ6IG1vdXNlRXZlbnQsIGFwcG9pbnRtZW50OiBhcHBvaW50bWVudFJlZiwgc2VuZGVyOiB0aGlzLnNjaGVkdWxlciB9LFxuICAgICAgdGhpcy5ldmVudE91dHB1dE1hcCxcbiAgICAgICdhcHBvaW50bWVudCcsXG4gICAgKTtcbiAgfVxuICBoYW5kbGVTaW5nbGVTbG90RXZlbnQobW91c2VFdmVudDogTW91c2VFdmVudCwgaG91cjogQVhEYXRlVGltZSwgZGF5OiBBWERhdGVUaW1lLCBtaW51dGVJbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gZGF5LnNldCgnaG91cicsIGhvdXIuaG91cikuc2V0KCdtaW51dGUnLCBtaW51dGVJbmRleCAqIDMwKTtcbiAgICBjb25zdCBzbG90RGF0YSA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRTbG90RGF0YShzdGFydERhdGUsICd3ZWVrJyk7XG4gICAgaWYgKHNsb3REYXRhKVxuICAgICAgdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmhhbmRsZUV2ZW50KFxuICAgICAgICB7IG5hdGl2ZUV2ZW50OiBtb3VzZUV2ZW50LCBzbG90OiBzbG90RGF0YSwgc2VuZGVyOiB0aGlzLnNjaGVkdWxlciB9LFxuICAgICAgICB0aGlzLmV2ZW50T3V0cHV0TWFwLFxuICAgICAgICAnc2xvdCcsXG4gICAgICApO1xuICB9XG4gIGhhbmRsZUFsbERheVNsb3RFdmVudChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50LCBkYXk6IEFYRGF0ZVRpbWUpIHtcbiAgICBjb25zdCBlbmREYXRlID0gZGF5LmVuZE9mKCdkYXknKTtcbiAgICBjb25zdCBzdGFydERhdGUgPSBkYXkuc3RhcnRPZignZGF5Jyk7XG4gICAgY29uc3Qgc2xvdERhdGEgPSB7IHN0YXJ0RGF0ZSwgZW5kRGF0ZSwgdmlldzogJ3dlZWsnIGFzIGNvbnN0IH07XG4gICAgaWYgKHNsb3REYXRhKVxuICAgICAgdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmhhbmRsZUV2ZW50KFxuICAgICAgICB7IG5hdGl2ZUV2ZW50OiBtb3VzZUV2ZW50LCBzbG90OiBzbG90RGF0YSwgc2VuZGVyOiB0aGlzLnNjaGVkdWxlciB9LFxuICAgICAgICB0aGlzLmV2ZW50T3V0cHV0TWFwLFxuICAgICAgICAnc2xvdCcsXG4gICAgICApO1xuICB9XG4gIGhhbmRsZUFsbERheURyb3AoZTogQVhEcm9wWm9uZURyb3BFdmVudCwgZGF5OiBBWERhdGVUaW1lKSB7XG4gICAgY29uc3QgZW5kRGF0ZSA9IGRheS5lbmRPZignZGF5Jyk7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gZGF5LnN0YXJ0T2YoJ2RheScpO1xuICAgIGNvbnN0IHNsb3REYXRhID0geyBzdGFydERhdGUsIGVuZERhdGUsIHZpZXc6ICd3ZWVrJyBhcyBjb25zdCB9O1xuICAgIGNvbnN0IGRyb3BwZWRJdGVtID0gZS5kcm9wcGVkLmRyYWdEYXRhKCkgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudDtcbiAgICBjb25zdCBvcmlnaW5hbEFwcG9pbnRtZW50ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldE9yaWdpbmFsQXBwb2ludG1lbnQoZHJvcHBlZEl0ZW0pO1xuICAgIGNvbnN0IGFwcG9pbnRtZW50UmVmID0ge1xuICAgICAgLi4ub3JpZ2luYWxBcHBvaW50bWVudCxcbiAgICAgIGVuZERhdGU6IG9yaWdpbmFsQXBwb2ludG1lbnQuZW5kRGF0ZSxcbiAgICAgIHN0YXJ0RGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5zdGFydERhdGUsXG4gICAgfTtcbiAgICB0aGlzLm9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwuZW1pdCh7XG4gICAgICBkcm9wRXZlbnQ6IGUsXG4gICAgICBzbG90OiBzbG90RGF0YSxcbiAgICAgIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIsXG4gICAgICBhcHBvaW50bWVudDogYXBwb2ludG1lbnRSZWYsXG4gICAgfSk7XG4gIH1cbiAgaGFuZGxlU2luZ2xlRGF5RHJvcChlOiBBWERyb3Bab25lRHJvcEV2ZW50LCBob3VyOiBBWERhdGVUaW1lLCBkYXk6IEFYRGF0ZVRpbWUsIG1pbnV0ZUluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBzdGFydERhdGUgPSBkYXkuc2V0KCdob3VyJywgaG91ci5ob3VyKS5zZXQoJ21pbnV0ZScsIG1pbnV0ZUluZGV4ICogMzApO1xuICAgIGNvbnN0IHNsb3REYXRhID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldFNsb3REYXRhKHN0YXJ0RGF0ZSwgJ3dlZWsnKTtcbiAgICBjb25zdCBkcm9wcGVkSXRlbSA9IGUuZHJvcHBlZC5kcmFnRGF0YSgpIGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnQ7XG4gICAgY29uc3Qgb3JpZ2luYWxBcHBvaW50bWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRPcmlnaW5hbEFwcG9pbnRtZW50KGRyb3BwZWRJdGVtKTtcbiAgICBjb25zdCBhcHBvaW50bWVudFJlZiA9IHtcbiAgICAgIC4uLm9yaWdpbmFsQXBwb2ludG1lbnQsXG4gICAgICBlbmREYXRlOiBvcmlnaW5hbEFwcG9pbnRtZW50LmVuZERhdGUsXG4gICAgICBzdGFydERhdGU6IG9yaWdpbmFsQXBwb2ludG1lbnQuc3RhcnREYXRlLFxuICAgIH07XG4gICAgdGhpcy5vbkFwcG9pbnRtZW50RHJvcEludGVybmFsLmVtaXQoe1xuICAgICAgZHJvcEV2ZW50OiBlLFxuICAgICAgc2xvdDogc2xvdERhdGEsXG4gICAgICBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyLFxuICAgICAgYXBwb2ludG1lbnQ6IGFwcG9pbnRtZW50UmVmLFxuICAgIH0pO1xuICB9XG5cbiAgaG91cnNBcnJheSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBsZXQgdGltZSA9IHRoaXMuZGF0ZSgpO1xuICAgIGlmICghdGltZSkgcmV0dXJuIFtdO1xuICAgIHRpbWUgPSB0aW1lLnNldCgnaG91cicsIHRoaXMuc3RhcnREYXlIb3VyKCkpLnN0YXJ0T2YoJ2hvdXInKTtcbiAgICBjb25zdCBob3VycyA9IFt0aW1lXTtcbiAgICB3aGlsZSAodGltZS5ob3VyIDwgdGhpcy5lbmREYXlIb3VyKCkgLSAxKSB7XG4gICAgICB0aW1lID0gdGltZS5hZGQoJ2hvdXInLCAxKTtcbiAgICAgIGhvdXJzLnB1c2godGltZSk7XG4gICAgfVxuICAgIHJldHVybiBob3VycztcbiAgfSk7XG5cbiAgZGF5c0FycmF5ID0gY29tcHV0ZWQoXG4gICAgKCk6IHsgZGF0ZTogQVhEYXRlVGltZTsgaG9saWRheT86IHsgc3RhdGU6ICdob2xpZGF5JyB8ICd3ZWVrZW5kJyB8ICdub25lJzsgaG9saWRheT86IEFYSG9saWRheURhdGUgfSB9W10gPT4ge1xuICAgICAgY29uc3QgdGltZSA9IHRoaXMuZGF0ZSgpO1xuICAgICAgaWYgKCF0aW1lKSByZXR1cm4gW107XG4gICAgICBjb25zdCBkYXlzID0gW3sgZGF0ZTogdGltZSwgaG9saWRheTogdGhpcy5pc0hvbGlkYXkodGltZSkgfV07XG4gICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDw9IDY7IGluZGV4KyspIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IHRpbWUuYWRkKCdkYXknLCBpbmRleCk7XG4gICAgICAgIGRheXMucHVzaCh7IGRhdGUsIGhvbGlkYXk6IHRoaXMuaXNIb2xpZGF5KGRhdGUpIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRheXM7XG4gICAgfSxcbiAgKTtcblxuICB0b3RhbEJsb2Nrc1BlclZpZXdEYXkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgc3RhcnRIID0gdGhpcy5zdGFydERheUhvdXIoKTtcbiAgICBjb25zdCBlbmRIID0gdGhpcy5lbmREYXlIb3VyKCk7XG4gICAgaWYgKHR5cGVvZiBzdGFydEggIT09ICdudW1iZXInIHx8IHR5cGVvZiBlbmRIICE9PSAnbnVtYmVyJykgcmV0dXJuIDA7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIChlbmRIIC0gc3RhcnRIKSAqICg2MCAvIDMwKSk7XG4gIH0pO1xuXG4gIGFwcG9pbnRtZW50c0J5U3RhcnRCbG9jayA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB2aWV3RGF0ZSA9IHRoaXMuZGF0ZSgpOyAvLyBUaGlzIHNob3VsZCBiZSB0aGUgc3RhcnQgZGF0ZSBvZiB0aGUgd2Vla1xuICAgIGNvbnN0IHN0YXJ0SCA9IHRoaXMuc3RhcnREYXlIb3VyKCk7XG4gICAgY29uc3QgZW5kSCA9IHRoaXMuZW5kRGF5SG91cigpO1xuICAgIGlmICghdmlld0RhdGUgfHwgdHlwZW9mIHN0YXJ0SCAhPT0gJ251bWJlcicgfHwgdHlwZW9mIGVuZEggIT09ICdudW1iZXInKSByZXR1cm4ge307XG4gICAgLy8gUGFzcyB0aGUgdGltZWRHcmlkU2VnbWVudHMgdG8gdGhlIHNlcnZpY2UgbWV0aG9kXG4gICAgcmV0dXJuIHRoaXMuc2NoZWR1bGVyU2VydmljZS5jYWxjdWxhdGVXZWVrVmlld0FwcG9pbnRtZW50c0J5U3RhcnRCbG9jayhcbiAgICAgIHRoaXMudGltZWRHcmlkU2VnbWVudHMoKSwgLy8gQ0hBTkdFRCBmcm9tIHNpbmdsZURheUFwcG9pbnRtZW50c1xuICAgICAgdmlld0RhdGUsXG4gICAgICBzdGFydEgsXG4gICAgICBlbmRILFxuICAgICk7XG4gIH0pO1xuXG4gIGFjdGl2ZUFwcG9pbnRtZW50c0luQmxvY2sgPSBjb21wdXRlZCgoKTogQVhTY2hlZHVsZXJBY3RpdmVBcHBvaW50bWVudHNJbkJsb2NrID0+IHtcbiAgICBjb25zdCB2aWV3RGF0ZSA9IHRoaXMuZGF0ZSgpOyAvLyBTdGFydCBkYXRlIG9mIHRoZSB3ZWVrXG4gICAgY29uc3Qgc3RhcnRIID0gdGhpcy5zdGFydERheUhvdXIoKTtcbiAgICBjb25zdCBlbmRIID0gdGhpcy5lbmREYXlIb3VyKCk7XG4gICAgaWYgKCF2aWV3RGF0ZSB8fCB0eXBlb2Ygc3RhcnRIICE9PSAnbnVtYmVyJyB8fCB0eXBlb2YgZW5kSCAhPT0gJ251bWJlcicpIHJldHVybiB7fTtcbiAgICAvLyBQYXNzIHRoZSB0aW1lZEdyaWRTZWdtZW50cyB0byB0aGUgc2VydmljZSBtZXRob2RcbiAgICByZXR1cm4gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmNhbGN1bGF0ZUFjdGl2ZUFwcG9pbnRtZW50c0luQmxvY2soXG4gICAgICB0aGlzLnRpbWVkR3JpZFNlZ21lbnRzKCksIC8vIENIQU5HRUQgZnJvbSBzaW5nbGVEYXlBcHBvaW50bWVudHNcbiAgICAgIHZpZXdEYXRlLFxuICAgICAgc3RhcnRILFxuICAgICAgZW5kSCxcbiAgICAgIDcsIC8vIEV4cGxpY2l0bHkgNyBkYXlzIGZvciB3ZWVrIHZpZXdcbiAgICApO1xuICB9KTtcblxuICB2aXNpYmxlQXBwb2ludG1lbnRzTGF5b3V0ID0gY29tcHV0ZWQoKCk6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRMYXlvdXRbXSA9PiB7XG4gICAgY29uc3QgbGF5b3V0czogQVhTY2hlZHVsZXJBcHBvaW50bWVudExheW91dFtdID0gW107XG4gICAgY29uc3Qgc3RhcnRpbmdCbG9ja3MgPSB0aGlzLmFwcG9pbnRtZW50c0J5U3RhcnRCbG9jaygpO1xuICAgIGNvbnN0IGRheXNDb3VudCA9IDc7XG4gICAgY29uc3QgdG90YWxCbG9ja3NQZXJEYXkgPSB0aGlzLnRvdGFsQmxvY2tzUGVyVmlld0RheSgpO1xuICAgIGNvbnN0IGJsb2NrSGVpZ2h0RXhwciA9IGB2YXIoLS1heC1jb21wLXNjaGVkdWxlci1iYXNpYy12aWV3LWJsb2Nrcy1oZWlnaHQsIDMwcHgpYDtcbiAgICBjb25zdCBOOiBudW1iZXIgPSBkYXlzQ291bnQ7XG4gICAgY29uc3Qgb2NjdXBpZWRCbG9ja3M6IFJlY29yZDxudW1iZXIsIFJlY29yZDxudW1iZXIsIGFueT4+ID0ge307XG5cbiAgICBmb3IgKGxldCBkYXlJbmRleCA9IDA7IGRheUluZGV4IDwgZGF5c0NvdW50OyBkYXlJbmRleCsrKSB7XG4gICAgICBjb25zdCBkYXlCbG9ja3MgPSBzdGFydGluZ0Jsb2Nrc1tkYXlJbmRleF0gPz8ge307XG4gICAgICBmb3IgKGxldCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IHRvdGFsQmxvY2tzUGVyRGF5OyBibG9ja0luZGV4KyspIHtcbiAgICAgICAgaWYgKG9jY3VwaWVkQmxvY2tzW2RheUluZGV4XT8uW2Jsb2NrSW5kZXhdKSBjb250aW51ZTtcblxuICAgICAgICBjb25zdCBzdGFydGluZ0FwcG9pbnRtZW50cyA9IGRheUJsb2Nrc1tibG9ja0luZGV4XSA/PyBbXTtcbiAgICAgICAgaWYgKHN0YXJ0aW5nQXBwb2ludG1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBhcHBvaW50bWVudFRvU2hvdyA9IG9yZGVyQnkoc3RhcnRpbmdBcHBvaW50bWVudHMsIFsoZSkgPT4gZS5lbmREYXRlLmdldFRpbWUoKV0sIFsnZGVzYyddKVswXTtcblxuICAgICAgICAgIGNvbnN0IEMgPSBkYXlJbmRleDtcbiAgICAgICAgICBsZXQgbGF5b3V0TGVmdCA9ICcwcHgnO1xuICAgICAgICAgIGlmIChDID4gMCAmJiBOID4gMSkgbGF5b3V0TGVmdCA9IGBjYWxjKCR7QyAqICgxMDAgLyBOKX0lKWA7XG4gICAgICAgICAgY29uc3QgbGF5b3V0VG9wID0gYGNhbGMoJHtibG9ja0hlaWdodEV4cHJ9ICogJHtibG9ja0luZGV4fSlgO1xuICAgICAgICAgIGxldCBsYXlvdXRIZWlnaHQgPSAnMHB4JztcbiAgICAgICAgICBsZXQgYXBwb2ludG1lbnREdXJhdGlvbk1pbnV0ZXMgPSAwO1xuICAgICAgICAgIGlmIChhcHBvaW50bWVudFRvU2hvdy5lbmREYXRlICYmIGFwcG9pbnRtZW50VG9TaG93LnN0YXJ0RGF0ZSkge1xuICAgICAgICAgICAgYXBwb2ludG1lbnREdXJhdGlvbk1pbnV0ZXMgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuY2FsY3VsYXRlRHVyYXRpb25Jbk1pbnV0ZXMoYXBwb2ludG1lbnRUb1Nob3cpO1xuICAgICAgICAgICAgaWYgKGFwcG9pbnRtZW50RHVyYXRpb25NaW51dGVzID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCBoZWlnaHRCbG9jayA9IGFwcG9pbnRtZW50RHVyYXRpb25NaW51dGVzIC8gMzA7XG4gICAgICAgICAgICAgIGxheW91dEhlaWdodCA9IGBtYXgoMHB4LCBjYWxjKCR7YmxvY2tIZWlnaHRFeHByfSAqICR7aGVpZ2h0QmxvY2t9IC0gJHt0aGlzLkdBUF9QWH1weCkpYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsYXlvdXRzLnB1c2goe1xuICAgICAgICAgICAgbGF5b3V0VG9wLFxuICAgICAgICAgICAgbGF5b3V0TGVmdCxcbiAgICAgICAgICAgIGxheW91dEhlaWdodCxcbiAgICAgICAgICAgIGFwcG9pbnRtZW50OiBhcHBvaW50bWVudFRvU2hvdyxcbiAgICAgICAgICAgIGxheW91dFdpZHRoOiAnY2FsYygxMDAlIC8gNyAtIDJyZW0pJyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IGJsb2Nrc1RvT2NjdXB5ID0gTWF0aC5jZWlsKGFwcG9pbnRtZW50RHVyYXRpb25NaW51dGVzIC8gMzApO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmxvY2tzVG9PY2N1cHk7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgb2NjdXBpZWRCbG9ja0luZGV4ID0gYmxvY2tJbmRleCArIGk7XG4gICAgICAgICAgICBpZiAob2NjdXBpZWRCbG9ja0luZGV4IDwgdG90YWxCbG9ja3NQZXJEYXkpIHtcbiAgICAgICAgICAgICAgaWYgKCFvY2N1cGllZEJsb2Nrc1tkYXlJbmRleF0pIG9jY3VwaWVkQmxvY2tzW2RheUluZGV4XSA9IHt9O1xuICAgICAgICAgICAgICBpZiAoIW9jY3VwaWVkQmxvY2tzW2RheUluZGV4XVtvY2N1cGllZEJsb2NrSW5kZXhdKSB7XG4gICAgICAgICAgICAgICAgb2NjdXBpZWRCbG9ja3NbZGF5SW5kZXhdW29jY3VwaWVkQmxvY2tJbmRleF0gPSBhcHBvaW50bWVudFRvU2hvdy5pZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsYXlvdXRzO1xuICB9KTtcblxuICB2aXN1YWxPY2N1cGFuY3lNYXAgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgbWFwID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcbiAgICBjb25zdCB2aXNpYmxlTGF5b3V0cyA9IHRoaXMudmlzaWJsZUFwcG9pbnRtZW50c0xheW91dCgpO1xuICAgIGNvbnN0IHZpZXdTdGFydERhdGUgPSB0aGlzLmRhdGUoKTtcbiAgICBjb25zdCBzdGFydEggPSB0aGlzLnN0YXJ0RGF5SG91cigpO1xuICAgIGNvbnN0IGVuZEggPSB0aGlzLmVuZERheUhvdXIoKTtcbiAgICBjb25zdCB0b3RhbEJsb2Nrc1BlckRheSA9IHRoaXMudG90YWxCbG9ja3NQZXJWaWV3RGF5KCk7XG5cbiAgICBpZiAoIXZpZXdTdGFydERhdGUgfHwgdHlwZW9mIHN0YXJ0SCAhPT0gJ251bWJlcicgfHwgdHlwZW9mIGVuZEggIT09ICdudW1iZXInKSByZXR1cm4gbWFwO1xuXG4gICAgZm9yIChjb25zdCBhcHBvaW50bWVudExheW91dCBvZiB2aXNpYmxlTGF5b3V0cykge1xuICAgICAgY29uc3Qgc3RhcnRJbmZvID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldEJsb2NrSWRlbnRpZmllcihcbiAgICAgICAgdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGFwcG9pbnRtZW50TGF5b3V0LmFwcG9pbnRtZW50LnN0YXJ0RGF0ZSwgdGhpcy5jYWxlbmRhcigpKSxcbiAgICAgICAgdmlld1N0YXJ0RGF0ZSxcbiAgICAgICAgc3RhcnRILFxuICAgICAgICBlbmRILFxuICAgICAgICA3LFxuICAgICAgKTtcbiAgICAgIGlmICghc3RhcnRJbmZvKSBjb250aW51ZTtcblxuICAgICAgY29uc3QgZHVyYXRpb25NaW51dGVzID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmNhbGN1bGF0ZUR1cmF0aW9uSW5NaW51dGVzKGFwcG9pbnRtZW50TGF5b3V0LmFwcG9pbnRtZW50KTtcbiAgICAgIGNvbnN0IGJsb2Nrc1RvT2NjdXB5ID0gTWF0aC5jZWlsKGR1cmF0aW9uTWludXRlcyAvIDMwKTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBibG9ja3NUb09jY3VweTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG9jY3VwaWVkQmxvY2tJbmRleCA9IHN0YXJ0SW5mby5ibG9ja0luZGV4ICsgaTtcbiAgICAgICAgaWYgKG9jY3VwaWVkQmxvY2tJbmRleCA+PSAwICYmIG9jY3VwaWVkQmxvY2tJbmRleCA8IHRvdGFsQmxvY2tzUGVyRGF5KSB7XG4gICAgICAgICAgY29uc3QgbWFwS2V5ID0gYCR7c3RhcnRJbmZvLmRheUluZGV4fS0ke29jY3VwaWVkQmxvY2tJbmRleH1gO1xuICAgICAgICAgIGlmICghbWFwLmhhcyhtYXBLZXkpKSB7XG4gICAgICAgICAgICBtYXAuc2V0KG1hcEtleSwgYXBwb2ludG1lbnRMYXlvdXQuYXBwb2ludG1lbnQuaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWFwO1xuICB9KTtcblxuICBvdmVyZmxvd0JhZGdlcyA9IGNvbXB1dGVkKCgpOiBBWFNjaGVkdWxlck92ZXJmbG93QmFkZ2VbXSA9PiB7XG4gICAgY29uc3QgYmFkZ2VzOiBBWFNjaGVkdWxlck92ZXJmbG93QmFkZ2VbXSA9IFtdO1xuICAgIGNvbnN0IGFjdGl2ZUJsb2NrcyA9IHRoaXMuYWN0aXZlQXBwb2ludG1lbnRzSW5CbG9jaygpO1xuICAgIGNvbnN0IG9jY3VwYW5jeU1hcCA9IHRoaXMudmlzdWFsT2NjdXBhbmN5TWFwKCk7XG4gICAgY29uc3QgZGF5c0NvdW50ID0gNztcbiAgICBjb25zdCB0b3RhbEJsb2Nrc1BlckRheSA9IHRoaXMudG90YWxCbG9ja3NQZXJWaWV3RGF5KCk7XG4gICAgY29uc3QgYmxvY2tIZWlnaHRFeHByID0gYHZhcigtLWF4LWNvbXAtc2NoZWR1bGVyLWJhc2ljLXZpZXctYmxvY2tzLWhlaWdodCwgMzBweClgO1xuICAgIGNvbnN0IE46IG51bWJlciA9IGRheXNDb3VudDtcblxuICAgIGlmICghYWN0aXZlQmxvY2tzIHx8ICFvY2N1cGFuY3lNYXAgfHwgdG90YWxCbG9ja3NQZXJEYXkgPT09IDApIHJldHVybiBiYWRnZXM7XG5cbiAgICBjb25zdCBjb3VudGVkSGlkZGVuQXBwb2ludG1lbnRLZXlzVG9kYXkgPSBuZXcgTWFwPG51bWJlciwgU2V0PGFueT4+KCk7XG5cbiAgICBmb3IgKGxldCBkYXlJbmRleCA9IDA7IGRheUluZGV4IDwgZGF5c0NvdW50OyBkYXlJbmRleCsrKSB7XG4gICAgICBjb3VudGVkSGlkZGVuQXBwb2ludG1lbnRLZXlzVG9kYXkuc2V0KGRheUluZGV4LCBuZXcgU2V0KCkpO1xuICAgICAgZm9yIChsZXQgYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCB0b3RhbEJsb2Nrc1BlckRheTsgYmxvY2tJbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IGJsb2NrTWFwS2V5ID0gYCR7ZGF5SW5kZXh9LSR7YmxvY2tJbmRleH1gO1xuICAgICAgICBjb25zdCBhY3RpdmVBcHBvaW50bWVudHMgPSBhY3RpdmVCbG9ja3NbZGF5SW5kZXhdPy5bYmxvY2tJbmRleF0gPz8gW107XG4gICAgICAgIGlmIChhY3RpdmVBcHBvaW50bWVudHMubGVuZ3RoID09PSAwKSBjb250aW51ZTtcblxuICAgICAgICBjb25zdCB2aXNpYmxlQXBwb2ludG1lbnRLZXkgPSBvY2N1cGFuY3lNYXAuZ2V0KGJsb2NrTWFwS2V5KTtcbiAgICAgICAgY29uc3QgaGlkZGVuQXBwb2ludG1lbnRzID0gYWN0aXZlQXBwb2ludG1lbnRzLmZpbHRlcigoYXBwb2ludG1lbnQpID0+IGFwcG9pbnRtZW50LmlkICE9PSB2aXNpYmxlQXBwb2ludG1lbnRLZXkpO1xuICAgICAgICBjb25zdCBuZXdseUhpZGRlbiA9IGhpZGRlbkFwcG9pbnRtZW50cy5maWx0ZXIoXG4gICAgICAgICAgKGUpID0+ICFjb3VudGVkSGlkZGVuQXBwb2ludG1lbnRLZXlzVG9kYXkuZ2V0KGRheUluZGV4KS5oYXMoZS5pZCksXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKG5ld2x5SGlkZGVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBDID0gZGF5SW5kZXg7XG4gICAgICAgICAgbGV0IGJhc2VDb2xMZWZ0ID0gJzBweCc7XG4gICAgICAgICAgaWYgKEMgPiAwICYmIE4gPiAxKSBiYXNlQ29sTGVmdCA9IGBjYWxjKCR7QyAqICgxMDAgLyBOKX0lKWA7XG4gICAgICAgICAgY29uc3QgYmFzZVRvcCA9IGBjYWxjKCR7YmxvY2tIZWlnaHRFeHByfSAqICR7YmxvY2tJbmRleH0pYDtcbiAgICAgICAgICBjb25zdCBiYWRnZUxlZnQgPSBgY2FsYygke2Jhc2VDb2xMZWZ0fSArIGNhbGMoMTAwJSAvICR7Tn0gLSAxLjc1cmVtKSlgO1xuICAgICAgICAgIGNvbnN0IGJhZGdlVG9wID0gYGNhbGMoJHtiYXNlVG9wfSArIDAuNzVyZW0pYDtcblxuICAgICAgICAgIGJhZGdlcy5wdXNoKHsga2V5OiBibG9ja01hcEtleSwgY291bnQ6IG5ld2x5SGlkZGVuLmxlbmd0aCwgYmFkZ2VUb3AsIGJhZGdlTGVmdCB9KTtcbiAgICAgICAgICBuZXdseUhpZGRlbi5mb3JFYWNoKChlKSA9PiBjb3VudGVkSGlkZGVuQXBwb2ludG1lbnRLZXlzVG9kYXkuZ2V0KGRheUluZGV4KS5hZGQoZS5pZCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBiYWRnZXM7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBTdHJ1Y3R1cmVzIGFsbC1kYXkgKG9yIFwiYmVjb21lcyBhbGwtZGF5XCIpIHNlZ21lbnRzIGZvciByZW5kZXJpbmcgaW4gdGhlIGFsbC1kYXkgc2xvdHMgZm9yIGVhY2ggZGF5IG9mIHRoZSB3ZWVrLlxuICAgKi9cbiAgYWxsRGF5QXBwb2ludG1lbnRzUGVyRGF5ID0gY29tcHV0ZWQoKCk6IEFYU2NoZWR1bGVyQWxsRGF5U2xvdERhdGFbXSA9PiB7XG4gICAgY29uc3QgZGF5c0luV2VlayA9IHRoaXMuZGF5c0FycmF5KCkubWFwKChlKSA9PiBlLmRhdGUpOyAvLyBBWERhdGVUaW1lIG9iamVjdHMgZm9yIGVhY2ggZGF5IGluIHRoZSB3ZWVrXG4gICAgY29uc3QgYWxsU2VnbWVudHNJblZpZXcgPSB0aGlzLnByb2Nlc3NlZEFwcG9pbnRtZW50c0ZvckxheW91dCgpOyAvLyBBbGwgcHJvY2Vzc2VkIHNlZ21lbnRzXG4gICAgY29uc3QgcmVzdWx0OiBBWFNjaGVkdWxlckFsbERheVNsb3REYXRhW10gPSBbXTtcblxuICAgIGlmICghZGF5c0luV2VlayB8fCBkYXlzSW5XZWVrLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHJlc3VsdDtcblxuICAgIGRheXNJbldlZWsuZm9yRWFjaCgoZGF5RGF0ZSkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudERheVN0YXJ0ID0gZGF5RGF0ZS5zdGFydE9mKCdkYXknKTsgLy8gRm9yIGFjY3VyYXRlIGRheSBjb21wYXJpc29uXG5cbiAgICAgIC8vIEZpbHRlciBzZWdtZW50cyB0aGF0IGFyZSBtYXJrZWQgYXMgJ2FsbERheScgQU5EIGJlbG9uZyB0byB0aGUgY3VycmVudCAnZGF5RGF0ZSdcbiAgICAgIGNvbnN0IGFsbERheVNlZ21lbnRzRm9yVGhpc0RheSA9IGFsbFNlZ21lbnRzSW5WaWV3LmZpbHRlcihcbiAgICAgICAgKHNlZ21lbnQpID0+XG4gICAgICAgICAgc2VnbWVudC5hbGxEYXkgJiZcbiAgICAgICAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoc2VnbWVudC5zdGFydERhdGUsIHRoaXMuY2FsZW5kYXIoKSkuc3RhcnRPZignZGF5JykuZXF1YWwoY3VycmVudERheVN0YXJ0LCAnZGF5JyksXG4gICAgICApO1xuXG4gICAgICAvLyBTb3J0IHRoZXNlIHNlZ21lbnRzIGZvciBjb25zaXN0ZW50IGRpc3BsYXlcbiAgICAgIC8vIFByaW1hcmlseSBieSBvcmlnaW5hbCBzdGFydCB0aW1lLCB0aGVuIGJ5IGR1cmF0aW9uIG9mIG9yaWdpbmFsIGFwcG9pbnRtZW50LCB0aGVuIHRpdGxlXG4gICAgICBjb25zdCBzb3J0ZWRBcHBvaW50bWVudHNGb3JUaGlzRGF5ID0gb3JkZXJCeShcbiAgICAgICAgYWxsRGF5U2VnbWVudHNGb3JUaGlzRGF5LFxuICAgICAgICBbXG4gICAgICAgICAgKHMpID0+IHMub3JpZ2luYWxTdGFydERhdGUuZ2V0VGltZSgpLFxuICAgICAgICAgIChzKSA9PiBzLm9yaWdpbmFsRW5kRGF0ZS5nZXRUaW1lKCkgLSBzLm9yaWdpbmFsU3RhcnREYXRlLmdldFRpbWUoKSxcbiAgICAgICAgICAocykgPT4gcy50aXRsZT8udG9Mb3dlckNhc2UoKSA/PyAnJyxcbiAgICAgICAgXSxcbiAgICAgICAgWydhc2MnLCAnZGVzYycsICdhc2MnXSwgLy8gRWFybGllciBzdGFydCwgbG9uZ2VyIGR1cmF0aW9uLCB0aGVuIGFscGhhYmV0aWNhbCB0aXRsZVxuICAgICAgKTtcblxuICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICBkYXk6IGRheURhdGUsIC8vIFRoZSBBWERhdGVUaW1lIGZvciB0aGlzIGRheSBjb2x1bW5cbiAgICAgICAgYXBwb2ludG1lbnRzOiBzb3J0ZWRBcHBvaW50bWVudHNGb3JUaGlzRGF5LCAvLyBBcnJheSBvZiBzZWdtZW50cyBmb3IgdGhlIGFsbC1kYXkgc2xvdFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG5cbiAgb3ZlcmZsb3dCYWRnZXNXaXRoRGF0YSA9IGNvbXB1dGVkKCgpOiBBWFNjaGVkdWxlckdyaWRCYWRnZUluZm9bXSA9PiB7XG4gICAgY29uc3QgYmFkZ2VzSW5mbzogQVhTY2hlZHVsZXJHcmlkQmFkZ2VJbmZvW10gPSBbXTtcbiAgICBjb25zdCBhY3RpdmVCbG9ja3MgPSB0aGlzLmFjdGl2ZUFwcG9pbnRtZW50c0luQmxvY2soKTtcbiAgICBjb25zdCBvY2N1cGFuY3lNYXAgPSB0aGlzLnZpc3VhbE9jY3VwYW5jeU1hcCgpO1xuICAgIGNvbnN0IGRheXNDb3VudCA9IDc7XG4gICAgY29uc3QgdG90YWxCbG9ja3NQZXJEYXkgPSB0aGlzLnRvdGFsQmxvY2tzUGVyVmlld0RheSgpO1xuICAgIGNvbnN0IGJsb2NrSGVpZ2h0RXhwciA9IGB2YXIoLS1heC1jb21wLXNjaGVkdWxlci1iYXNpYy12aWV3LWJsb2Nrcy1oZWlnaHQsIDMwcHgpYDtcbiAgICBjb25zdCBOOiBudW1iZXIgPSBkYXlzQ291bnQ7XG5cbiAgICBpZiAoIWFjdGl2ZUJsb2NrcyB8fCAhb2NjdXBhbmN5TWFwIHx8IHRvdGFsQmxvY2tzUGVyRGF5ID09PSAwKSByZXR1cm4gYmFkZ2VzSW5mbztcblxuICAgIGNvbnN0IGNvdW50ZWRIaWRkZW5BcHBvaW50bWVudEtleXNUb2RheSA9IG5ldyBNYXA8bnVtYmVyLCBTZXQ8YW55Pj4oKTtcblxuICAgIGZvciAobGV0IGRheUluZGV4ID0gMDsgZGF5SW5kZXggPCBkYXlzQ291bnQ7IGRheUluZGV4KyspIHtcbiAgICAgIGNvdW50ZWRIaWRkZW5BcHBvaW50bWVudEtleXNUb2RheS5zZXQoZGF5SW5kZXgsIG5ldyBTZXQoKSk7XG4gICAgICBmb3IgKGxldCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IHRvdGFsQmxvY2tzUGVyRGF5OyBibG9ja0luZGV4KyspIHtcbiAgICAgICAgY29uc3QgYmxvY2tNYXBLZXkgPSBgJHtkYXlJbmRleH0tJHtibG9ja0luZGV4fWA7XG4gICAgICAgIGNvbnN0IGFjdGl2ZUFwcG9pbnRtZW50cyA9IGFjdGl2ZUJsb2Nrc1tkYXlJbmRleF0/LltibG9ja0luZGV4XSA/PyBbXTtcbiAgICAgICAgaWYgKGFjdGl2ZUFwcG9pbnRtZW50cy5sZW5ndGggPT09IDApIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnN0IHZpc2libGVBcHBvaW50bWVudEtleSA9IG9jY3VwYW5jeU1hcC5nZXQoYmxvY2tNYXBLZXkpO1xuICAgICAgICAvLyBGaW5kIGFsbCBoaWRkZW4gYXBwb2ludG1lbnRzIGZvciB0aGlzIHNwZWNpZmljIGJsb2NrXG4gICAgICAgIGNvbnN0IGhpZGRlbkFwcG9pbnRtZW50cyA9IGFjdGl2ZUFwcG9pbnRtZW50cy5maWx0ZXIoKGFwcG9pbnRtZW50KSA9PiBhcHBvaW50bWVudC5pZCAhPT0gdmlzaWJsZUFwcG9pbnRtZW50S2V5KTtcbiAgICAgICAgLy8gRmluZCB3aGljaCBvZiB0aG9zZSBoaWRkZW4gb25lcyBoYXZlbid0IGJlZW4gY291bnRlZCB0b2RheSB5ZXRcbiAgICAgICAgY29uc3QgbmV3bHlIaWRkZW4gPSBoaWRkZW5BcHBvaW50bWVudHMuZmlsdGVyKFxuICAgICAgICAgIChlKSA9PiAhY291bnRlZEhpZGRlbkFwcG9pbnRtZW50S2V5c1RvZGF5LmdldChkYXlJbmRleCkuaGFzKGUuaWQpLFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChuZXdseUhpZGRlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgQyA9IGRheUluZGV4O1xuICAgICAgICAgIGxldCBiYXNlQ29sTGVmdCA9ICcwcHgnO1xuICAgICAgICAgIGlmIChDID4gMCAmJiBOID4gMSkgYmFzZUNvbExlZnQgPSBgY2FsYygke0MgKiAoMTAwIC8gTil9JSlgO1xuICAgICAgICAgIGNvbnN0IGJhc2VUb3AgPSBgY2FsYygke2Jsb2NrSGVpZ2h0RXhwcn0gKiAke2Jsb2NrSW5kZXh9KWA7XG4gICAgICAgICAgLy8gS2VlcCB5b3VyIHBvc2l0aW9uaW5nIGxvZ2ljIGZvciB0aGUgYmFkZ2UgaXRzZWxmXG4gICAgICAgICAgY29uc3QgYmFkZ2VMZWZ0ID0gYGNhbGMoJHtiYXNlQ29sTGVmdH0gKyBjYWxjKDEwMCUgLyAke059IC0gMS43NXJlbSkpYDtcbiAgICAgICAgICBjb25zdCBiYWRnZVRvcCA9IGBjYWxjKCR7YmFzZVRvcH0gKyAwLjc1cmVtKWA7XG5cbiAgICAgICAgICAvLyBTdG9yZSB0aGUgYmFkZ2UgaW5mbyAqYW5kKiB0aGUgbGlzdCBvZiBhcHBvaW50bWVudHMgaXQgcmVwcmVzZW50c1xuICAgICAgICAgIGJhZGdlc0luZm8ucHVzaCh7XG4gICAgICAgICAgICBrZXk6IGJsb2NrTWFwS2V5LFxuICAgICAgICAgICAgY291bnQ6IG5ld2x5SGlkZGVuLmxlbmd0aCxcbiAgICAgICAgICAgIGJhZGdlVG9wLFxuICAgICAgICAgICAgYmFkZ2VMZWZ0LFxuICAgICAgICAgICAgaGlkZGVuQXBwb2ludG1lbnRzOiBuZXdseUhpZGRlbiwgLy8gU3RvcmUgdGhlIGFjdHVhbCBoaWRkZW4gYXBwb2ludG1lbnRzXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBNYXJrIHRoZXNlIGFzIGNvdW50ZWQgZm9yIHRvZGF5XG4gICAgICAgICAgbmV3bHlIaWRkZW4uZm9yRWFjaCgoZSkgPT4gY291bnRlZEhpZGRlbkFwcG9pbnRtZW50S2V5c1RvZGF5LmdldChkYXlJbmRleCkuYWRkKGUuaWQpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBTb3J0IHRoZSBiYWRnZXMgYnkgdG9wIHRoZW4gbGVmdCBmb3IgY29uc2lzdGVudCByZW5kZXJpbmcgb3JkZXI/IChPcHRpb25hbClcbiAgICAvLyBiYWRnZXNJbmZvLnNvcnQoKGEsIGIpID0+IHtcbiAgICAvLyAgIGNvbnN0IHRvcENvbXBhcmUgPSBhLmJhZGdlVG9wLmxvY2FsZUNvbXBhcmUoYi5iYWRnZVRvcCk7XG4gICAgLy8gICBpZiAodG9wQ29tcGFyZSAhPT0gMCkgcmV0dXJuIHRvcENvbXBhcmU7XG4gICAgLy8gICByZXR1cm4gYS5iYWRnZUxlZnQubG9jYWxlQ29tcGFyZShiLmJhZGdlTGVmdCk7XG4gICAgLy8gfSk7XG4gICAgcmV0dXJuIGJhZGdlc0luZm87XG4gIH0pO1xuXG4gIHByb3RlY3RlZCBpc1RvZGF5KGRhdGU6IEFYRGF0ZVRpbWUpOiBib29sZWFuIHtcbiAgICBjb25zdCB0b2RheSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShuZXcgRGF0ZSgpKTtcbiAgICByZXR1cm4gZGF0ZS5lcXVhbCh0b2RheSwgJ2RheScpO1xuICB9XG4gIHByb3RlY3RlZCBpc0hvbGlkYXkoZGF0ZTogQVhEYXRlVGltZSk6IHsgc3RhdGU6ICdob2xpZGF5JyB8ICd3ZWVrZW5kJyB8ICdub25lJzsgaG9saWRheT86IEFYSG9saWRheURhdGUgfSB7XG4gICAgY29uc3QgaXNIb2xpZGF5ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmlzSG9saWRheShkYXRlKTtcbiAgICBpZiAoaXNIb2xpZGF5KSB7XG4gICAgICBjb25zdCBob2xpZGF5ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuaG9saWRheXMuZmlsdGVyKChkKSA9PiBkYXRlLmVxdWFsKGQuZGF0ZSwgJ2RheScpKVswXTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXRlOiAnaG9saWRheScsXG4gICAgICAgIGhvbGlkYXksXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBpc1dlZWtlbmQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaXNXZWVrZW5kKGRhdGUsIHRoaXMuY2FsZW5kYXIoKSk7XG4gICAgaWYgKGlzV2Vla2VuZCkge1xuICAgICAgcmV0dXJuIHsgc3RhdGU6ICd3ZWVrZW5kJyB9O1xuICAgIH1cbiAgICByZXR1cm4geyBzdGF0ZTogJ25vbmUnIH07XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmF4LXN0YXRlLXJlYWRvbmx5JykgZ2V0IGlzUmVhZG9ubHkoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZG9ubHkoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci13ZWVrLWhlYWRlclwiPlxuICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLXdlZWstaGVhZGVyLWRheXNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLXdlZWstaGVhZGVyLXRhYmxlXCI+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci13ZWVrLWhlYWRlci1kYXRlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICBAZm9yIChkYXkgb2YgZGF5c0FycmF5KCk7IHRyYWNrIGRheS5kYXRlLmRhdGUuZ2V0VGltZSgpKSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBbY2xhc3MuYXgtc3RhdGUtdG9kYXldPVwiaXNUb2RheShkYXkuZGF0ZSlcIlxuICAgICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXdlZWstaGVhZGVyLWRhdGUtZGF5XCJcbiAgICAgICAgICBbY2xhc3MuYXgtc3RhdGUtaG9saWRheV09XCJkYXkuaG9saWRheS5zdGF0ZSAhPT0gJ25vbmUnXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci13ZWVrLWhlYWRlci1kYXRlLWRheS1jaGFyIGF4LXNjaGVkdWxlci10cnVuY2F0ZVwiXG4gICAgICAgICAgICBbYXhUb29sdGlwXT1cImRheS5ob2xpZGF5Py5ob2xpZGF5Py50aXRsZSA/PyAnJ1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgZGF5LmRhdGUgfCBmb3JtYXQ6ICdkYXRlJyA6IHsgZm9ybWF0OiAnZGRkZCcsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgICAgICAgQGlmIChkYXkuaG9saWRheS5zdGF0ZSA9PT0gJ2hvbGlkYXknICYmIGRheS5ob2xpZGF5LmhvbGlkYXkudGl0bGUpIHtcbiAgICAgICAgICAgICAgKCB7eyBkYXkuaG9saWRheS5ob2xpZGF5LnRpdGxlIH19IClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC1zY2hlZHVsZXItd2Vlay1oZWFkZXItZGF0ZS1kYXktbnVtXCI+XG4gICAgICAgICAgICB7eyBkYXkuZGF0ZSB8IGZvcm1hdDogJ2RhdGUnIDogeyBmb3JtYXQ6ICdERCcsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLXdlZWstaGVhZGVyLWRheXNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLXdlZWstaGVhZGVyLXRhYmxlXCI+e3sgJ2RhdGVUaW1lLmR1cmF0aW9uLmFsbC1kYXknIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L2Rpdj5cbiAgICA8ZGl2IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXdlZWstaGVhZGVyLWRhdGVcIj5cbiAgICAgIEBmb3IgKHNsb3REYXRhIG9mIGFsbERheUFwcG9pbnRtZW50c1BlckRheSgpOyB0cmFjayBzbG90RGF0YS5kYXkuZGF0ZS5nZXRUaW1lKCkpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGF4RHJvcFpvbmVcbiAgICAgICAgICAjem9uZTI9XCJheERyb3Bab25lXCJcbiAgICAgICAgICBbY2xhc3MuYXgtc2NoZWR1bGVyLXNsb3QtaG92ZXJlZF09XCJ6b25lMi5pc0hvdmVyZWQoKVwiXG4gICAgICAgICAgKG9uRWxlbWVudERyb3ApPVwiaGFuZGxlQWxsRGF5RHJvcCgkZXZlbnQsIHNsb3REYXRhLmRheSlcIlxuICAgICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLWFsbC1kYXktc2xvdFwiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFsbERheVNsb3RFdmVudCgkZXZlbnQsIHNsb3REYXRhLmRheSlcIlxuICAgICAgICAgIChkYmxjbGljayk9XCJoYW5kbGVBbGxEYXlTbG90RXZlbnQoJGV2ZW50LCBzbG90RGF0YS5kYXkpXCJcbiAgICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlQWxsRGF5U2xvdEV2ZW50KCRldmVudCwgc2xvdERhdGEuZGF5KVwiXG4gICAgICAgID5cbiAgICAgICAgICBAaWYgKHNsb3REYXRhLmFwcG9pbnRtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGF4RHJhZ1xuICAgICAgICAgICAgICBbZHJhZ0N1cnNvcl09XCInZ3JhYidcIlxuICAgICAgICAgICAgICBbZHJhZ1RyYW5zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbZHJhZ0VsZW1lbnRDbG9uZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2RyYWdEaXNhYmxlZF09XCIhZHJhZ2dhYmxlKCkgfHwgc2xvdERhdGEuYXBwb2ludG1lbnRzWzBdLnJlYWRvbmx5IHx8IHJlYWRvbmx5KClcIlxuICAgICAgICAgICAgICBbZHJhZ0RhdGFdPVwic2xvdERhdGEuYXBwb2ludG1lbnRzWzBdXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzbG90RGF0YS5hcHBvaW50bWVudHNbMF0pXCJcbiAgICAgICAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzbG90RGF0YS5hcHBvaW50bWVudHNbMF0pXCJcbiAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzbG90RGF0YS5hcHBvaW50bWVudHNbMF0pXCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cInNsb3REYXRhLmFwcG9pbnRtZW50c1swXS50aXRsZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLWhlYWRlci13ZWVrLWFwcG9pbnRtZW50XCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic2xvdERhdGEuYXBwb2ludG1lbnRzWzBdLmNzc0NsYXNzPz9gYXgtc2NoZWR1bGVyLSR7c2xvdERhdGEuYXBwb2ludG1lbnRzWzBdLnByaW9yaXR5Pz8ncHJpbWFyeSd9LXBlcmlvcml0eWBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8YXgtdGl0bGUgY2xhc3M9XCJheC1zY2hlZHVsZXItdHJ1bmNhdGVcIj57eyBzbG90RGF0YS5hcHBvaW50bWVudHNbMF0udGl0bGUgfX08L2F4LXRpdGxlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoc2xvdERhdGEuYXBwb2ludG1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgI21vcmVBcHBvaW50bWVudHNcbiAgICAgICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItYXBwb2ludG1lbnQtYmFkZ2VcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJzbG90RGF0YS5hcHBvaW50bWVudHNbMV0uY3NzQ2xhc3M/P2BheC1zY2hlZHVsZXItJHtzbG90RGF0YS5hcHBvaW50bWVudHNbMV0ucHJpb3JpdHk/PydwcmltYXJ5J30tcGVyaW9yaXR5YFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICt7eyBzbG90RGF0YS5hcHBvaW50bWVudHMubGVuZ3RoIC0gMSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YXgtcG9wb3ZlciBbdGFyZ2V0XT1cIm1vcmVBcHBvaW50bWVudHNcIiBbcGxhY2VtZW50XT1cIidib3R0b20nXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1vdmVybGF5LXBhbmUgYXgtc2NoZWR1bGVyLXBvcG92ZXJcIiBbY2xhc3MuYXgtc3RhdGUtcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGFwcG9pbnRtZW50IG9mIHNsb3REYXRhLmFwcG9pbnRtZW50czsgdHJhY2sgYXBwb2ludG1lbnQuaWQ7IGxldCBmaXJzdCA9ICRmaXJzdCkge1xuICAgICAgICAgICAgICAgICAgQGlmICghZmlyc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGF4RHJhZ1xuICAgICAgICAgICAgICAgICAgICAgIFtkcmFnQ3Vyc29yXT1cIidncmFiJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2RyYWdEYXRhXT1cImFwcG9pbnRtZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICBbZHJhZ1RyYW5zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkcmFnRWxlbWVudENsb25lXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkcmFnRGlzYWJsZWRdPVwiIWRyYWdnYWJsZSgpIHx8IGFwcG9pbnRtZW50LnJlYWRvbmx5IHx8IHJlYWRvbmx5KClcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgYXBwb2ludG1lbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGFwcG9pbnRtZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBhcHBvaW50bWVudClcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJhcHBvaW50bWVudC50aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItcG9wb3Zlci1hcHBvaW50bWVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiYXBwb2ludG1lbnQuY3NzQ2xhc3M/P2BheC1zY2hlZHVsZXItJHthcHBvaW50bWVudC5wcmlvcml0eT8/J3ByaW1hcnknfS1wZXJpb3JpdHlgXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxheC10aXRsZSBjbGFzcz1cImF4LXNjaGVkdWxlci10cnVuY2F0ZVwiPnt7IGFwcG9pbnRtZW50LnRpdGxlIH19PC9heC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvYXgtcG9wb3Zlcj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLXdlZWstdGltZS1jb250YWluZXJcIj5cbiAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci13ZWVrLXRpbWVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICBAZm9yICh0aW1lIG9mIGhvdXJzQXJyYXkoKTsgdHJhY2sgdGltZS5kYXRlLmdldFRpbWUoKSkge1xuICAgICAgPGRpdj5cbiAgICAgICAge3sgdGltZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBmb3JtYXQ6ICdISDptbScsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLXdlZWstdGFibGUtY29udGFpbmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci13ZWVrLWFwcG9pbnRtZW50LWNvbnRhaW5lclwiPlxuICAgICAgQGZvciAoYXBwdCBvZiB2aXNpYmxlQXBwb2ludG1lbnRzTGF5b3V0KCk7IHRyYWNrIGFwcHQuYXBwb2ludG1lbnQuaWQpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGF4RHJhZ1xuICAgICAgICAgIFtkcmFnQ3Vyc29yXT1cIidncmFiJ1wiXG4gICAgICAgICAgW2RyYWdUcmFuc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICBbZHJhZ0VsZW1lbnRDbG9uZV09XCJ0cnVlXCJcbiAgICAgICAgICBbZHJhZ0Rpc2FibGVkXT1cIiFkcmFnZ2FibGUoKSB8fCBhcHB0LmFwcG9pbnRtZW50LnJlYWRvbmx5IHx8IHJlYWRvbmx5KClcIlxuICAgICAgICAgIFtkcmFnRGF0YV09XCJhcHB0LmFwcG9pbnRtZW50XCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGFwcHQuYXBwb2ludG1lbnQpXCJcbiAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGFwcHQuYXBwb2ludG1lbnQpXCJcbiAgICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGFwcHQuYXBwb2ludG1lbnQpXCJcbiAgICAgICAgICBbdGl0bGVdPVwiYXBwdC5hcHBvaW50bWVudC50aXRsZVwiXG4gICAgICAgICAgW3N0eWxlLmhlaWdodF09XCJhcHB0LmxheW91dEhlaWdodFwiXG4gICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItd2Vlay1hcHBvaW50bWVudFwiXG4gICAgICAgICAgW3N0eWxlLmluc2V0LWJsb2NrLXN0YXJ0XT1cImFwcHQubGF5b3V0VG9wXCJcbiAgICAgICAgICBbc3R5bGUuaW5zZXQtaW5saW5lLXN0YXJ0XT1cImFwcHQubGF5b3V0TGVmdFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiYXBwdC5hcHBvaW50bWVudC5jc3NDbGFzcz8/YGF4LXNjaGVkdWxlci0ke2FwcHQuYXBwb2ludG1lbnQucHJpb3JpdHk/PydwcmltYXJ5J30tcGVyaW9yaXR5YFwiXG4gICAgICAgID5cbiAgICAgICAgICA8YXgtdGl0bGUgY2xhc3M9XCJheC1zY2hlZHVsZXItdHJ1bmNhdGVcIj57eyBhcHB0LmFwcG9pbnRtZW50LnRpdGxlIH19PC9heC10aXRsZT5cbiAgICAgICAgICA8YXgtc3VidGl0bGU+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICBhcHB0LmFwcG9pbnRtZW50Lm9yaWdpbmFsU3RhcnREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgLVxuICAgICAgICAgICAge3sgYXBwdC5hcHBvaW50bWVudC5vcmlnaW5hbEVuZERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgZm9ybWF0OiAnSEg6bW0nLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX1cbiAgICAgICAgICA8L2F4LXN1YnRpdGxlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cblxuICAgICAgPCEtLSBPdmVyZmxvdyBCYWRnZXMgd2l0aCBQb3BvdmVycyAtLT5cbiAgICAgIEBmb3IgKGJhZGdlIG9mIG92ZXJmbG93QmFkZ2VzV2l0aERhdGEoKTsgdHJhY2sgYmFkZ2Uua2V5KSB7XG4gICAgICAgIDwhLS0gV3JhcCBiYWRnZSBhbmQgcG9wb3ZlciBmb3IgdGFyZ2V0aW5nIC0tPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGVcIlxuICAgICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLWJhZGdlLXdyYXBwZXJcIlxuICAgICAgICAgIFtzdHlsZS5pbnNldC1ibG9jay1zdGFydF09XCJiYWRnZS5iYWRnZVRvcFwiXG4gICAgICAgICAgW3N0eWxlLmluc2V0LWlubGluZS1zdGFydF09XCJiYWRnZS5iYWRnZUxlZnRcIlxuICAgICAgICA+XG4gICAgICAgICAgPCEtLSBUaGUgQmFkZ2UgaXRzZWxmIC0tPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICNhY3Rpb25CdXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLWFwcG9pbnRtZW50LWJhZGdlXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImJhZGdlLmhpZGRlbkFwcG9pbnRtZW50c1swXS5jc3NDbGFzcz8/YGF4LXNjaGVkdWxlci0ke2JhZGdlLmhpZGRlbkFwcG9pbnRtZW50c1swXS5wcmlvcml0eT8/J3ByaW1hcnknfS1wZXJpb3JpdHlgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICAre3sgYmFkZ2UuY291bnQgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIFRoZSBQb3BvdmVyIC0tPlxuICAgICAgICAgIDxheC1wb3BvdmVyIFt0YXJnZXRdPVwiYWN0aW9uQnV0dG9uXCIgW3BsYWNlbWVudF09XCInYm90dG9tJ1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF4LW92ZXJsYXktcGFuZSBheC1zY2hlZHVsZXItcG9wb3ZlclwiPlxuICAgICAgICAgICAgICBAZm9yIChhcHBvaW50bWVudCBvZiBiYWRnZS5oaWRkZW5BcHBvaW50bWVudHM7IHRyYWNrIGFwcG9pbnRtZW50LmlkKSB7XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgYXhEcmFnXG4gICAgICAgICAgICAgICAgICBbZHJhZ0N1cnNvcl09XCInZ3JhYidcIlxuICAgICAgICAgICAgICAgICAgW2RyYWdEYXRhXT1cImFwcG9pbnRtZW50XCJcbiAgICAgICAgICAgICAgICAgIFtkcmFnVHJhbnNpdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICBbZHJhZ0VsZW1lbnRDbG9uZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFtkcmFnRGlzYWJsZWRdPVwiIWRyYWdnYWJsZSgpIHx8IGFwcG9pbnRtZW50LnJlYWRvbmx5IHx8IHJlYWRvbmx5KClcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBhcHBvaW50bWVudClcIlxuICAgICAgICAgICAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBhcHBvaW50bWVudClcIlxuICAgICAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBhcHBvaW50bWVudClcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cImFwcG9pbnRtZW50LnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXBvcG92ZXItYXBwb2ludG1lbnRcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiYXBwb2ludG1lbnQuY3NzQ2xhc3M/P2BheC1zY2hlZHVsZXItJHthcHBvaW50bWVudC5wcmlvcml0eT8/J3ByaW1hcnknfS1wZXJpb3JpdHlgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8YXgtdGl0bGUgY2xhc3M9XCJheC1zY2hlZHVsZXItdHJ1bmNhdGVcIj57eyBhcHBvaW50bWVudC50aXRsZSB9fTwvYXgtdGl0bGU+XG4gICAgICAgICAgICAgICAgICA8YXgtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgYXBwb2ludG1lbnQub3JpZ2luYWxTdGFydERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgZm9ybWF0OiAnSEg6bW0nLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmNcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgLVxuICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgIGFwcG9pbnRtZW50Lm9yaWdpbmFsRW5kRGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBmb3JtYXQ6ICdISDptbScsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luY1xuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPC9heC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9heC1wb3BvdmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cblxuICAgIDx0YWJsZSBhcmlhLWhpZGRlbj1cInRydWVcIiBbYm9yZGVyXT1cIjFcIj5cbiAgICAgIDx0Ym9keT5cbiAgICAgICAgQGZvciAodGltZSBvZiBob3Vyc0FycmF5KCk7IHRyYWNrIHRpbWUuZGF0ZS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICBAZm9yIChkYXkgb2YgZGF5c0FycmF5KCk7IHRyYWNrIGRheS5kYXRlLmRhdGUuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgIGF4RHJvcFpvbmVcbiAgICAgICAgICAgICAgICAjem9uZT1cImF4RHJvcFpvbmVcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5heC1zY2hlZHVsZXItc2xvdC1ob3ZlcmVkXT1cInpvbmUuaXNIb3ZlcmVkKClcIlxuICAgICAgICAgICAgICAgIChvbkVsZW1lbnREcm9wKT1cImhhbmRsZVNpbmdsZURheURyb3AoJGV2ZW50LCB0aW1lLCBkYXkuZGF0ZSwgMClcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVTaW5nbGVTbG90RXZlbnQoJGV2ZW50LCB0aW1lLCBkYXkuZGF0ZSwgMClcIlxuICAgICAgICAgICAgICAgIChkYmxjbGljayk9XCJoYW5kbGVTaW5nbGVTbG90RXZlbnQoJGV2ZW50LCB0aW1lLCBkYXkuZGF0ZSwgMClcIlxuICAgICAgICAgICAgICAgIChjb250ZXh0bWVudSk9XCJoYW5kbGVTaW5nbGVTbG90RXZlbnQoJGV2ZW50LCB0aW1lLCBkYXkuZGF0ZSwgMClcIlxuICAgICAgICAgICAgICA+PC90ZD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIEBmb3IgKGRheSBvZiBkYXlzQXJyYXkoKTsgdHJhY2sgZGF5LmRhdGUuZGF0ZS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgYXhEcm9wWm9uZVxuICAgICAgICAgICAgICAgICN6b25lMj1cImF4RHJvcFpvbmVcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5heC1zY2hlZHVsZXItc2xvdC1ob3ZlcmVkXT1cInpvbmUyLmlzSG92ZXJlZCgpXCJcbiAgICAgICAgICAgICAgICAob25FbGVtZW50RHJvcCk9XCJoYW5kbGVTaW5nbGVEYXlEcm9wKCRldmVudCwgdGltZSwgZGF5LmRhdGUsIDEpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlU2luZ2xlU2xvdEV2ZW50KCRldmVudCwgdGltZSwgZGF5LmRhdGUsIDEpXCJcbiAgICAgICAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlU2luZ2xlU2xvdEV2ZW50KCRldmVudCwgdGltZSwgZGF5LmRhdGUsIDEpXCJcbiAgICAgICAgICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlU2luZ2xlU2xvdEV2ZW50KCRldmVudCwgdGltZSwgZGF5LmRhdGUsIDEpXCJcbiAgICAgICAgICAgICAgPjwvdGQ+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgfVxuICAgICAgPC90Ym9keT5cbiAgICA8L3RhYmxlPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXCalendarComponent } from '@acorex/components/calendar';\nimport { AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXSelectBoxComponent } from '@acorex/components/select-box';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXHtmlUtil, AXUnsubscriber } from '@acorex/core/utils';\nimport { isPlatformBrowser, NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, input, linkedSignal, model, output, PLATFORM_ID, signal, untracked, viewChild, ViewEncapsulation, } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXSchedulerService } from './scheduler.service';\nimport { AXSchedulerAgendaViewComponent } from './views/agenda/scheduler-agenda-view.component';\nimport { AXSchedulerDayViewComponent } from './views/day/scheduler-day-view.component';\nimport { AXSchedulerMonthViewComponent } from './views/month/scheduler-month-view.component';\nimport { AXSchedulerTimelineDayViewComponent } from './views/timeline-day/scheduler-timeline-day-view.component';\nimport { AXSchedulerTimelineMonthViewComponent } from './views/timeline-month/scheduler-timeline-month-view.component';\nimport { AXSchedulerTimelineMultiDayViewComponent } from './views/timeline-multi-day/scheduler-timeline-multi-day-view.component';\nimport { AXSchedulerWeekViewComponent } from './views/week/scheduler-week-view.component';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/forms\";\nexport class AXSchedulerComponent extends NXComponent {\n constructor() {\n super(...arguments);\n this.platformId = inject(PLATFORM_ID);\n this.unsubscriber = inject(AXUnsubscriber);\n this.formatService = inject(AXFormatService);\n this.localeService = inject(AXLocaleService);\n this.calendarService = inject(AXCalendarService);\n this.schedulerService = inject(AXSchedulerService);\n this.translationService = inject(AXTranslationService);\n this.viewModeSelectbox = viewChild(AXSelectBoxComponent);\n this.calendarPopover = viewChild('calendarPopover');\n this.displayViews = {\n day: 'daily',\n week: 'weekly',\n month: 'monthly',\n 'timeline-day': 'daily-timeline',\n 'timeline-multi-day': 'multi-day-timeline',\n 'timeline-month': 'monthly-timeline',\n agenda: 'agenda',\n };\n this.calendar = input();\n this.calendarType = linkedSignal(() => this.calendar() ?? this.localeService.activeProfile().calendar.system);\n this.startingDate = input(new Date());\n this.currentDate = linkedSignal(() => this.calendarService.create(this.startingDate(), this.calendarType()).startOf('day'));\n this._appointments = signal([]);\n this.appointments = this._appointments.asReadonly();\n this.rtl = signal(false);\n this.isFullScreen = signal(false);\n this.viewsDataSource = signal([]);\n this.prevDate = signal(this.calendarService.create(new Date(), this.calendarType()));\n this.endDayHour = input(24);\n this.startDayHour = input(8);\n this.hasHeader = input(true);\n this.readonly = input(false);\n this.draggable = input(true);\n this.allowFullScreen = input(true);\n this.multiDayViewDaysCount = input(7);\n this.dataSource = input([]);\n this.firstDayOfWeek = input('sunday');\n this.views = input([\n 'day',\n 'week',\n 'month',\n 'timeline-day',\n 'timeline-multi-day',\n 'timeline-month',\n 'agenda',\n ]);\n this.selectedView = model(this.views()[0]);\n this.prevView = signal(this.selectedView());\n // --- Public Outputs ---\n this.onDataLoaded = output();\n this.onRangeChanged = output();\n this.onSlotClicked = output();\n this.onSlotDblClicked = output();\n this.onSlotRightClick = output();\n this.onAppointmentDrop = output();\n this.onAppointmentClicked = output();\n this.onAppointmentDblClicked = output();\n this.onAppointmentRightClick = output();\n this.#appointmentEffect = effect(async () => {\n if (typeof this.dataSource() === 'function') {\n const func = this.dataSource();\n const range = {\n end: this.range().end,\n from: this.range().from,\n };\n const list = await func({ range });\n this._appointments.set(list);\n }\n else {\n const list = this.dataSource();\n this._appointments.set(list);\n }\n this.onDataLoaded.emit();\n });\n this.currentDateText = computed(() => {\n switch (this.selectedView()) {\n case 'day':\n case 'timeline-day':\n return this.formatService.format(this.currentDate(), 'datetime', {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n });\n case 'week': {\n const startOfWeek = this.formatService.format(this.currentDate(), 'datetime', {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n });\n const endOfWeek = this.formatService.format(this.currentDate().add('week', 1).add('day', -1), 'datetime', {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n });\n return `${startOfWeek} - ${endOfWeek}`;\n }\n case 'agenda':\n case 'timeline-multi-day': {\n const startOfWeek = this.formatService.format(this.currentDate(), 'datetime', {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n });\n const endOfWeek = this.formatService.format(this.currentDate().add('day', this.multiDayViewDaysCount() - 1), 'datetime', {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n });\n return `${startOfWeek} - ${endOfWeek}`;\n }\n case 'month':\n case 'timeline-month':\n return this.formatService.format(this.currentDate(), 'datetime', {\n format: 'MMMM yyyy',\n calendar: this.calendarType(),\n });\n }\n });\n this.calendarDepth = computed(() => {\n switch (this.selectedView()) {\n case 'day':\n case 'week':\n case 'agenda':\n case 'timeline-day':\n case 'timeline-multi-day':\n return 'day';\n case 'month':\n case 'timeline-month':\n return 'month';\n }\n });\n this.mappedAppointments = computed(() => {\n const items = this._appointments();\n return items\n .map((item) => {\n const startDate = this.calendarService.create(item.startDate, this.calendarType());\n const endDate = this.calendarService.create(item.endDate, this.calendarType());\n // Basic validation\n if (!startDate?.date || !endDate?.date) {\n console.warn('Scheduler: Skipping item due to invalid date fields:', item);\n return null;\n }\n // Check if dates are valid after creation\n if (isNaN(startDate.date.getTime()) || isNaN(endDate.date.getTime())) {\n console.warn('Scheduler: Skipping item due to invalid parsed date (NaN):', item);\n return null;\n }\n return item;\n })\n .filter((appt) => appt !== null); // Filter out nulls from invalid dates\n });\n this.range = computed(() => {\n const view = this.selectedView();\n const current = this.currentDate().startOf('day');\n if (!current)\n return { from: null, end: null };\n switch (view) {\n case 'day':\n case 'timeline-day': {\n const range = { from: current.date, end: current.endOf('day').date };\n return range;\n }\n case 'week': {\n const range = { from: current.date, end: current.add('day', 7).date };\n return range;\n }\n case 'month': {\n const { gridStartDate, gridEndDate } = this.getGridDateRange(current);\n const range = { from: gridStartDate.date, end: gridEndDate.add('day', 1).date };\n return range;\n }\n case 'timeline-month': {\n const range = { from: current.startOf('month').date, end: current.endOf('month').date };\n return range;\n }\n case 'agenda':\n case 'timeline-multi-day': {\n const range = { from: current.date, end: current.add('day', this.multiDayViewDaysCount()).date };\n return range;\n }\n }\n });\n this.#rangeChangedEffect = effect(() => {\n this.onRangeChanged.emit(this.range());\n });\n this.#viewChangedEffect = effect(() => {\n const view = this.selectedView();\n untracked(() => {\n this.handleViewChanged(this.prevView(), view);\n });\n });\n this.viewAppointments = computed(() => {\n const current = this.currentDate();\n const mapped = this.mappedAppointments();\n const rangeStart = this.range().from;\n const rangeEnd = this.range().end;\n if (!current || mapped.length === 0)\n return [];\n return mapped.filter((appt) => this.calendarService.create(appt.startDate, this.calendarType()).compare(rangeEnd, 'second') <= 0 &&\n this.calendarService.create(appt.endDate, this.calendarType()).compare(rangeStart, 'second') >= 0);\n });\n }\n // --- Internal Handlers for View Outputs ---\n handleSlotClickInternal(eventData) {\n this.onSlotClicked.emit(eventData);\n }\n handleSlotDblClickInternal(eventData) {\n this.onSlotDblClicked.emit(eventData);\n }\n handleSlotRightClickInternal(eventData) {\n this.onSlotRightClick.emit(eventData);\n }\n handleAppointmentClickInternal(eventData) {\n this.onAppointmentClicked.emit(eventData);\n }\n handleAppointmentDblClickInternal(eventData) {\n this.onAppointmentDblClicked.emit(eventData);\n }\n handleAppointmentRightClickInternal(eventData) {\n this.onAppointmentRightClick.emit(eventData);\n }\n handleAppointmentDropInternal(eventData) {\n this.onAppointmentDrop.emit(eventData);\n }\n ngOnInit() {\n this.calendarService.calendarChanges$.pipe(this.unsubscriber.takeUntilDestroy).subscribe(() => {\n const currentDate = this.calendarService.create(this.currentDate().date, this.calendarType());\n if (!currentDate.equal(this.currentDate())) {\n this.currentDate.set(currentDate);\n }\n });\n this.translationService.langChanges$.pipe(this.unsubscriber.takeUntilDestroy).subscribe(async () => {\n await this.fillDataSource();\n this.viewModeSelectbox()?.selectItems(this.viewsDataSource().find((c) => c.id == this.selectedView()));\n const currentDate = this.calendarService.create(this.currentDate().date, this.calendarType());\n if (!currentDate.equal(this.currentDate())) {\n this.currentDate.set(currentDate);\n }\n });\n if (isPlatformBrowser(this.platformId))\n this.rtl.set(AXHtmlUtil.isRtl(this.nativeElement));\n this.fillDataSource();\n }\n #appointmentEffect;\n async fillDataSource() {\n const result = [];\n for await (const c of this.views()) {\n const text = await this.translationService.translateAsync(`dateTime.duration.${this.displayViews[c]}`);\n result.push({ text, id: c });\n }\n this.viewsDataSource.set(result);\n }\n getGridDateRange(dateInMonth) {\n const firstDayOfMonth = dateInMonth.startOf('month');\n const firstDayGridNum = this.schedulerService.getDayOfWeekNumber(this.firstDayOfWeek());\n const firstDisplayedDayOfWeek = firstDayOfMonth.dayOfWeek;\n const daysFromPrevMonth = (firstDisplayedDayOfWeek - firstDayGridNum + 7) % 7;\n const gridStartDate = firstDayOfMonth.add('day', -daysFromPrevMonth);\n // Calculate end date based on standard 6 weeks for safety, or calculate dynamically if preferred\n const gridEndDate = gridStartDate.add('day', 6 * 7 - 1);\n return { gridStartDate, gridEndDate };\n }\n #rangeChangedEffect;\n #viewChangedEffect;\n viewChanged(e) {\n const newView = e.value;\n const oldView = e.oldValue;\n this.selectedView.set(newView);\n this.handleViewChanged(oldView, newView);\n }\n handleViewChanged(oldView, newView) {\n if (oldView === 'week') {\n const oldDayOfWeek = this.prevDate().dayOfWeek % 7;\n const date = this.currentDate().add('day', oldDayOfWeek - 1);\n this.currentDate.set(date);\n }\n this.prevDate.set(this.currentDate());\n if (newView === 'week') {\n const currentDate = this.currentDate();\n const currentDayOfWeek = currentDate.dayOfWeek;\n const desiredFirstDayName = this.firstDayOfWeek();\n const desiredFirstDayNumber = this.schedulerService.getDayOfWeekNumber(desiredFirstDayName);\n const daysToSubtract = (currentDayOfWeek - desiredFirstDayNumber + 7) % 7;\n const startOfWeekDate = currentDate.add('day', -daysToSubtract);\n this.currentDate.set(startOfWeekDate);\n }\n this.prevView.set(newView);\n }\n nextClick() {\n switch (this.selectedView()) {\n case 'day':\n case 'timeline-day':\n this.currentDate.set(this.currentDate().add('day', 1));\n break;\n case 'week':\n this.currentDate.set(this.currentDate().add('week', 1));\n break;\n case 'agenda':\n case 'timeline-multi-day':\n this.currentDate.set(this.currentDate().add('day', this.multiDayViewDaysCount()));\n break;\n case 'month':\n case 'timeline-month':\n this.currentDate.set(this.currentDate().add('month', 1));\n break;\n }\n }\n prevClick() {\n switch (this.selectedView()) {\n case 'day':\n case 'timeline-day':\n this.currentDate.set(this.currentDate().add('day', -1));\n break;\n case 'week':\n this.currentDate.set(this.currentDate().add('week', -1));\n break;\n case 'agenda':\n case 'timeline-multi-day':\n this.currentDate.set(this.currentDate().add('day', -this.multiDayViewDaysCount()));\n break;\n case 'month':\n case 'timeline-month':\n this.currentDate.set(this.currentDate().add('month', -1));\n break;\n }\n }\n calendarDateChanged(e) {\n let currentDate = this.calendarService.create(e.value, this.calendarType());\n if (this.selectedView() === 'week') {\n const currentDayOfWeek = currentDate.dayOfWeek;\n const desiredFirstDayName = this.firstDayOfWeek();\n const desiredFirstDayNumber = this.schedulerService.getDayOfWeekNumber(desiredFirstDayName);\n const daysToSubtract = (currentDayOfWeek - desiredFirstDayNumber + 7) % 7;\n currentDate = currentDate.add('day', -daysToSubtract);\n }\n if (!currentDate.equal(this.currentDate())) {\n this.currentDate.set(currentDate);\n }\n this.calendarPopover()?.close();\n }\n handleFullScreen() {\n if (!this.isFullScreen())\n this.nativeElement.classList.add('ax-full-screen-container');\n else\n this.nativeElement.classList.remove('ax-full-screen-container');\n this.isFullScreen.set(!this.isFullScreen());\n }\n async refresh(appointments) {\n if (appointments) {\n const newAppointments = this._appointments().map((appt) => {\n return appointments.find((a) => a.id === appt.id) ?? appt;\n });\n this._appointments.set(newAppointments);\n this.onDataLoaded.emit();\n return;\n }\n if (typeof this.dataSource() === 'function') {\n const func = this.dataSource();\n const range = {\n end: this.range().end,\n from: this.range().from,\n };\n const list = await func({ range });\n this._appointments.set(list);\n this.onDataLoaded.emit();\n return;\n }\n const list = this.dataSource();\n this._appointments.set(list);\n this.onDataLoaded.emit();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.4\", type: AXSchedulerComponent, isStandalone: true, selector: \"ax-scheduler\", inputs: { calendar: { classPropertyName: \"calendar\", publicName: \"calendar\", isSignal: true, isRequired: false, transformFunction: null }, startingDate: { classPropertyName: \"startingDate\", publicName: \"startingDate\", isSignal: true, isRequired: false, transformFunction: null }, endDayHour: { classPropertyName: \"endDayHour\", publicName: \"endDayHour\", isSignal: true, isRequired: false, transformFunction: null }, startDayHour: { classPropertyName: \"startDayHour\", publicName: \"startDayHour\", isSignal: true, isRequired: false, transformFunction: null }, hasHeader: { classPropertyName: \"hasHeader\", publicName: \"hasHeader\", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: \"readonly\", publicName: \"readonly\", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: \"draggable\", publicName: \"draggable\", isSignal: true, isRequired: false, transformFunction: null }, allowFullScreen: { classPropertyName: \"allowFullScreen\", publicName: \"allowFullScreen\", isSignal: true, isRequired: false, transformFunction: null }, multiDayViewDaysCount: { classPropertyName: \"multiDayViewDaysCount\", publicName: \"multiDayViewDaysCount\", isSignal: true, isRequired: false, transformFunction: null }, dataSource: { classPropertyName: \"dataSource\", publicName: \"dataSource\", isSignal: true, isRequired: false, transformFunction: null }, firstDayOfWeek: { classPropertyName: \"firstDayOfWeek\", publicName: \"firstDayOfWeek\", isSignal: true, isRequired: false, transformFunction: null }, views: { classPropertyName: \"views\", publicName: \"views\", isSignal: true, isRequired: false, transformFunction: null }, selectedView: { classPropertyName: \"selectedView\", publicName: \"selectedView\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedView: \"selectedViewChange\", onDataLoaded: \"onDataLoaded\", onRangeChanged: \"onRangeChanged\", onSlotClicked: \"onSlotClicked\", onSlotDblClicked: \"onSlotDblClicked\", onSlotRightClick: \"onSlotRightClick\", onAppointmentDrop: \"onAppointmentDrop\", onAppointmentClicked: \"onAppointmentClicked\", onAppointmentDblClicked: \"onAppointmentDblClicked\", onAppointmentRightClick: \"onAppointmentRightClick\" }, providers: [AXUnsubscriber, { provide: AXComponent, useExisting: AXSchedulerComponent }], viewQueries: [{ propertyName: \"viewModeSelectbox\", first: true, predicate: AXSelectBoxComponent, descendants: true, isSignal: true }, { propertyName: \"calendarPopover\", first: true, predicate: [\"calendarPopover\"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-scheduler-container\\\">\\n @if (hasHeader()) {\\n <div class=\\\"ax-scheduler-header\\\">\\n <div class=\\\"ax-scheduler-date\\\">\\n <ax-button look=\\\"blank\\\" (onClick)=\\\"prevClick()\\\">\\n <ax-icon\\n class=\\\"ax-icon ax-text-xl\\\"\\n [ngClass]=\\\"{\\n 'ax-icon-chevron-left': !rtl(),\\n 'ax-icon-chevron-right': rtl(),\\n }\\\"\\n ></ax-icon>\\n </ax-button>\\n <ax-button look=\\\"blank\\\" [text]=\\\"currentDateText()\\\" #date></ax-button>\\n <ax-button look=\\\"blank\\\" (onClick)=\\\"nextClick()\\\">\\n <ax-icon\\n class=\\\"ax-icon ax-text-xl\\\"\\n [ngClass]=\\\"{\\n 'ax-icon-chevron-right': !rtl(),\\n 'ax-icon-chevron-left': rtl(),\\n }\\\"\\n ></ax-icon>\\n </ax-button>\\n <ax-popover [target]=\\\"date\\\" [placement]=\\\"'bottom'\\\" #calendarPopover>\\n <div class=\\\"ax-overlay-pane\\\">\\n <ax-calendar\\n [type]=\\\"calendarType()\\\"\\n [depth]=\\\"calendarDepth()\\\"\\n [ngModel]=\\\"currentDate()\\\"\\n (onValueChanged)=\\\"calendarDateChanged($event)\\\"\\n ></ax-calendar>\\n </div>\\n </ax-popover>\\n </div>\\n <div class=\\\"ax-scheduler-actions\\\">\\n <ax-select-box\\n [dropdownWidth]=\\\"200\\\"\\n [ngModel]=\\\"selectedView()\\\"\\n [dataSource]=\\\"viewsDataSource()\\\"\\n (onValueChanged)=\\\"viewChanged($event)\\\"\\n ></ax-select-box>\\n\\n @if (allowFullScreen()) {\\n <ax-button look=\\\"blank\\\" (onClick)=\\\"handleFullScreen()\\\">\\n <ax-icon>\\n <i\\n class=\\\"fa-solid fa-expand\\\"\\n [ngClass]=\\\"{ 'fa-compress': isFullScreen(), 'fa-expand': !isFullScreen() }\\\"\\n ></i>\\n </ax-icon>\\n </ax-button>\\n }\\n </div>\\n </div>\\n }\\n <div class=\\\"ax-scheduler-views-container\\\">\\n @switch (selectedView()) {\\n @case ('day') {\\n <ax-scheduler-day-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n ></ax-scheduler-day-view>\\n }\\n @case ('week') {\\n <ax-scheduler-week-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n ></ax-scheduler-week-view>\\n }\\n @case ('month') {\\n <ax-scheduler-month-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [firstDayOfWeek]=\\\"firstDayOfWeek()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n ></ax-scheduler-month-view>\\n }\\n @case ('timeline-day') {\\n <ax-scheduler-timeline-day-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n >\\n </ax-scheduler-timeline-day-view>\\n }\\n @case ('timeline-multi-day') {\\n <ax-scheduler-timeline-multi-day-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n [daysCount]=\\\"multiDayViewDaysCount()\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n >\\n </ax-scheduler-timeline-multi-day-view>\\n }\\n @case ('timeline-month') {\\n <ax-scheduler-timeline-month-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n >\\n </ax-scheduler-timeline-month-view>\\n }\\n @case ('agenda') {\\n <ax-scheduler-agenda-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n >\\n </ax-scheduler-agenda-view>\\n }\\n }\\n </div>\\n</div>\\n\", styles: [\":root{--ax-comp-scheduler-width: 57.5rem;--ax-comp-scheduler-basic-view-blocks-height: 3rem;--ax-comp-scheduler-basic-view-blocks-width: 3.5rem;--ax-comp-scheduler-timeline-view-blocks-width: 20rem;--ax-comp-scheduler-timeline-view-blocks-height: 3rem;--ax-comp-scheduler-primary-bg-color: var(--ax-sys-color-primary-surface);--ax-comp-scheduler-primary-text-color: var(--ax-sys-color-on-primary-surface);--ax-comp-scheduler-highest-periority-bg-color: var(--ax-sys-color-danger-dark-surface);--ax-comp-scheduler-highest-periority-text-color: var(--ax-sys-color-on-danger-dark-surface);--ax-comp-scheduler-high-periority-bg-color: var(--ax-sys-color-danger-surface);--ax-comp-scheduler-high-periority-text-color: var(--ax-sys-color-on-danger-surface);--ax-comp-scheduler-medium-periority-bg-color: var(--ax-sys-color-warning-surface);--ax-comp-scheduler-medium-periority-text-color: var(--ax-sys-color-on-warning-surface);--ax-comp-scheduler-low-periority-bg-color: var(--ax-sys-color-success-light-surface);--ax-comp-scheduler-low-periority-text-color: var(--ax-sys-color-on-success-light-surface);--ax-comp-scheduler-lowest-periority-bg-color: var(--ax-sys-color-success-lightest-surface);--ax-comp-scheduler-lowest-periority-text-color: var(--ax-sys-color-on-success-lightest-surface)}ax-scheduler{width:100%;height:100%;display:block;-webkit-user-select:none;user-select:none;font-size:.875rem;background-color:inherit}ax-scheduler.ax-full-screen-container{top:0;left:0;z-index:61;width:100vw;height:100vh;position:fixed}ax-scheduler .ax-scheduler-container{height:100%;display:flex;overflow:hidden;border-width:1px;flex-direction:column;background-color:inherit;border-radius:var(--ax-sys-border-radius)}ax-scheduler .ax-scheduler-container .ax-scheduler-header{display:flex;padding:1rem;overflow-x:auto;overflow-y:hidden;align-items:center;border-bottom-width:1px;justify-content:space-between}ax-scheduler .ax-scheduler-container .ax-scheduler-header .ax-scheduler-date{display:flex;min-width:20.5rem;align-items:center;justify-content:space-between}ax-scheduler .ax-scheduler-container .ax-scheduler-header .ax-scheduler-date p{margin:0;font-size:1rem;min-width:10rem;font-weight:500;text-align:center}ax-scheduler .ax-scheduler-container .ax-scheduler-actions{gap:.75rem;display:flex;align-items:center;justify-content:center}ax-scheduler .ax-scheduler-container .ax-scheduler-truncate{display:block;overflow:hidden;text-wrap:nowrap;text-overflow:ellipsis}ax-scheduler .ax-scheduler-container ax-subtitle{font-size:.75rem}ax-scheduler .ax-scheduler-container .ax-scheduler-views-container{height:100%;overflow:auto;background-color:inherit}ax-scheduler .ax-scheduler-primary-periority{color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color))}ax-scheduler .ax-scheduler-highest-periority{color:rgba(var(--ax-comp-scheduler-highest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-highest-periority-bg-color))}ax-scheduler .ax-scheduler-high-periority{color:rgba(var(--ax-comp-scheduler-high-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-high-periority-bg-color))}ax-scheduler .ax-scheduler-medium-periority{color:rgba(var(--ax-comp-scheduler-medium-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-medium-periority-bg-color))}ax-scheduler .ax-scheduler-low-periority{color:rgba(var(--ax-comp-scheduler-low-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-low-periority-bg-color))}ax-scheduler .ax-scheduler-lowest-periority{color:rgba(var(--ax-comp-scheduler-lowest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-lowest-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover{gap:.25rem;display:grid;overflow:auto;padding:.25rem;max-height:10rem;font-size:.875rem;border-radius:.5rem}.ax-overlay-pane.ax-scheduler-popover.ax-scheduler-month-popover-appointment{font-size:.75rem}.ax-overlay-pane.ax-scheduler-popover:not(.ax-state-readonly) .ax-scheduler-popover-appointment{cursor:pointer}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-popover-appointment{display:flex;overflow:hidden;-webkit-user-select:none;user-select:none;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2);color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-popover-appointment ax-subtitle{font-size:.75rem}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-popover-appointment .ax-scheduler-truncate{display:block;overflow:hidden;text-wrap:nowrap;text-overflow:ellipsis}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-primary-periority{color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-highest-periority{color:rgba(var(--ax-comp-scheduler-highest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-highest-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-high-periority{color:rgba(var(--ax-comp-scheduler-high-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-high-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-medium-periority{color:rgba(var(--ax-comp-scheduler-medium-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-medium-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-low-periority{color:rgba(var(--ax-comp-scheduler-low-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-low-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-lowest-periority{color:rgba(var(--ax-comp-scheduler-lowest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-lowest-periority-bg-color))}\\n\"], dependencies: [{ kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: AXSelectBoxComponent, selector: \"ax-select-box\", inputs: [\"disabled\", \"readonly\", \"tabIndex\", \"placeholder\", \"minValue\", \"maxValue\", \"value\", \"state\", \"name\", \"id\", \"type\", \"look\", \"multiple\", \"valueField\", \"textField\", \"disabledField\", \"textTemplate\", \"selectedItems\", \"dataSource\", \"minRecordsForSearch\", \"caption\", \"itemTemplate\", \"selectedTemplate\", \"emptyTemplate\", \"loadingTemplate\", \"dropdownWidth\", \"searchBoxAutoFocus\"], outputs: [\"valueChange\", \"stateChange\", \"onValueChanged\", \"onBlur\", \"onFocus\", \"readonlyChange\", \"disabledChange\", \"onOpened\", \"onClosed\"] }, { kind: \"component\", type: AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"component\", type: AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"component\", type: AXPopoverComponent, selector: \"ax-popover\", inputs: [\"offsetX\", \"offsetY\", \"target\", \"placement\", \"content\", \"openOn\", \"closeOn\", \"hasBackdrop\", \"openAfter\", \"closeAfter\", \"backdropClass\", \"panelClass\", \"adaptivityEnabled\"], outputs: [\"onOpened\", \"onClosed\"] }, { kind: \"component\", type: AXCalendarComponent, selector: \"ax-calendar\", inputs: [\"rtl\", \"readonly\", \"value\", \"name\", \"disabled\", \"depth\", \"activeView\", \"minValue\", \"maxValue\", \"disabledDates\", \"holidayDates\", \"type\", \"cellTemplate\", \"cellClass\", \"showNavigation\", \"count\", \"id\"], outputs: [\"onOptionChanged\", \"valueChange\", \"onValueChanged\", \"minValueChange\", \"maxValueChange\", \"onBlur\", \"onFocus\", \"depthChange\", \"typeChange\", \"activeViewChange\", \"disabledDatesChange\", \"holidayDatesChange\", \"onNavigate\", \"onSlotClick\", \"countChange\"] }, { kind: \"component\", type: AXSchedulerDayViewComponent, selector: \"ax-scheduler-day-view\", inputs: [\"readonly\", \"draggable\", \"calendar\", \"date\", \"endDayHour\", \"startDayHour\", \"appointments\"], outputs: [\"slotClickedInternal\", \"slotDblClickedInternal\", \"slotRightClickedInternal\", \"appointmentClickedInternal\", \"appointmentDblClickedInternal\", \"appointmentRightClickedInternal\", \"onAppointmentDropInternal\"] }, { kind: \"component\", type: AXSchedulerWeekViewComponent, selector: \"ax-scheduler-week-view\", inputs: [\"readonly\", \"draggable\", \"calendar\", \"date\", \"endDayHour\", \"startDayHour\", \"appointments\"], outputs: [\"slotClickedInternal\", \"slotDblClickedInternal\", \"slotRightClickedInternal\", \"appointmentClickedInternal\", \"appointmentDblClickedInternal\", \"appointmentRightClickedInternal\", \"onAppointmentDropInternal\"] }, { kind: \"component\", type: AXSchedulerMonthViewComponent, selector: \"ax-scheduler-month-view\", inputs: [\"readonly\", \"draggable\", \"calendar\", \"date\", \"firstDayOfWeek\", \"appointments\"], outputs: [\"slotClickedInternal\", \"slotDblClickedInternal\", \"slotRightClickedInternal\", \"appointmentClickedInternal\", \"appointmentDblClickedInternal\", \"appointmentRightClickedInternal\", \"onAppointmentDropInternal\"] }, { kind: \"component\", type: AXSchedulerTimelineDayViewComponent, selector: \"ax-scheduler-timeline-day-view\", inputs: [\"readonly\", \"draggable\", \"calendar\", \"date\", \"endDayHour\", \"startDayHour\", \"appointments\"], outputs: [\"slotClickedInternal\", \"slotDblClickedInternal\", \"slotRightClickedInternal\", \"appointmentClickedInternal\", \"appointmentDblClickedInternal\", \"appointmentRightClickedInternal\", \"onAppointmentDropInternal\"] }, { kind: \"component\", type: AXSchedulerTimelineMultiDayViewComponent, selector: \"ax-scheduler-timeline-multi-day-view\", inputs: [\"daysCount\", \"readonly\", \"draggable\", \"calendar\", \"date\", \"endDayHour\", \"startDayHour\", \"appointments\"], outputs: [\"slotClickedInternal\", \"slotDblClickedInternal\", \"slotRightClickedInternal\", \"appointmentClickedInternal\", \"appointmentDblClickedInternal\", \"appointmentRightClickedInternal\", \"onAppointmentDropInternal\"] }, { kind: \"component\", type: AXSchedulerTimelineMonthViewComponent, selector: \"ax-scheduler-timeline-month-view\", inputs: [\"readonly\", \"draggable\", \"calendar\", \"date\", \"appointments\"], outputs: [\"slotClickedInternal\", \"slotDblClickedInternal\", \"slotRightClickedInternal\", \"appointmentClickedInternal\", \"appointmentDblClickedInternal\", \"appointmentRightClickedInternal\", \"onAppointmentDropInternal\"] }, { kind: \"component\", type: AXSchedulerAgendaViewComponent, selector: \"ax-scheduler-agenda-view\", inputs: [\"daysCount\", \"readonly\", \"draggable\", \"calendar\", \"date\", \"appointments\"], outputs: [\"slotClickedInternal\", \"slotDblClickedInternal\", \"slotRightClickedInternal\", \"appointmentClickedInternal\", \"appointmentDblClickedInternal\", \"appointmentRightClickedInternal\", \"onAppointmentDropInternal\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-scheduler', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [\n FormsModule,\n AXSelectBoxComponent,\n AXDecoratorIconComponent,\n AXButtonComponent,\n NgClass,\n AXPopoverComponent,\n AXCalendarComponent,\n AXSchedulerDayViewComponent,\n AXSchedulerWeekViewComponent,\n AXSchedulerMonthViewComponent,\n AXSchedulerTimelineDayViewComponent,\n AXSchedulerTimelineMultiDayViewComponent,\n AXSchedulerTimelineMonthViewComponent,\n AXSchedulerAgendaViewComponent,\n ], providers: [AXUnsubscriber, { provide: AXComponent, useExisting: AXSchedulerComponent }], template: \"<div class=\\\"ax-scheduler-container\\\">\\n @if (hasHeader()) {\\n <div class=\\\"ax-scheduler-header\\\">\\n <div class=\\\"ax-scheduler-date\\\">\\n <ax-button look=\\\"blank\\\" (onClick)=\\\"prevClick()\\\">\\n <ax-icon\\n class=\\\"ax-icon ax-text-xl\\\"\\n [ngClass]=\\\"{\\n 'ax-icon-chevron-left': !rtl(),\\n 'ax-icon-chevron-right': rtl(),\\n }\\\"\\n ></ax-icon>\\n </ax-button>\\n <ax-button look=\\\"blank\\\" [text]=\\\"currentDateText()\\\" #date></ax-button>\\n <ax-button look=\\\"blank\\\" (onClick)=\\\"nextClick()\\\">\\n <ax-icon\\n class=\\\"ax-icon ax-text-xl\\\"\\n [ngClass]=\\\"{\\n 'ax-icon-chevron-right': !rtl(),\\n 'ax-icon-chevron-left': rtl(),\\n }\\\"\\n ></ax-icon>\\n </ax-button>\\n <ax-popover [target]=\\\"date\\\" [placement]=\\\"'bottom'\\\" #calendarPopover>\\n <div class=\\\"ax-overlay-pane\\\">\\n <ax-calendar\\n [type]=\\\"calendarType()\\\"\\n [depth]=\\\"calendarDepth()\\\"\\n [ngModel]=\\\"currentDate()\\\"\\n (onValueChanged)=\\\"calendarDateChanged($event)\\\"\\n ></ax-calendar>\\n </div>\\n </ax-popover>\\n </div>\\n <div class=\\\"ax-scheduler-actions\\\">\\n <ax-select-box\\n [dropdownWidth]=\\\"200\\\"\\n [ngModel]=\\\"selectedView()\\\"\\n [dataSource]=\\\"viewsDataSource()\\\"\\n (onValueChanged)=\\\"viewChanged($event)\\\"\\n ></ax-select-box>\\n\\n @if (allowFullScreen()) {\\n <ax-button look=\\\"blank\\\" (onClick)=\\\"handleFullScreen()\\\">\\n <ax-icon>\\n <i\\n class=\\\"fa-solid fa-expand\\\"\\n [ngClass]=\\\"{ 'fa-compress': isFullScreen(), 'fa-expand': !isFullScreen() }\\\"\\n ></i>\\n </ax-icon>\\n </ax-button>\\n }\\n </div>\\n </div>\\n }\\n <div class=\\\"ax-scheduler-views-container\\\">\\n @switch (selectedView()) {\\n @case ('day') {\\n <ax-scheduler-day-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n ></ax-scheduler-day-view>\\n }\\n @case ('week') {\\n <ax-scheduler-week-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n ></ax-scheduler-week-view>\\n }\\n @case ('month') {\\n <ax-scheduler-month-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [firstDayOfWeek]=\\\"firstDayOfWeek()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n ></ax-scheduler-month-view>\\n }\\n @case ('timeline-day') {\\n <ax-scheduler-timeline-day-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n >\\n </ax-scheduler-timeline-day-view>\\n }\\n @case ('timeline-multi-day') {\\n <ax-scheduler-timeline-multi-day-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n [daysCount]=\\\"multiDayViewDaysCount()\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n >\\n </ax-scheduler-timeline-multi-day-view>\\n }\\n @case ('timeline-month') {\\n <ax-scheduler-timeline-month-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n >\\n </ax-scheduler-timeline-month-view>\\n }\\n @case ('agenda') {\\n <ax-scheduler-agenda-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n >\\n </ax-scheduler-agenda-view>\\n }\\n }\\n </div>\\n</div>\\n\", styles: [\":root{--ax-comp-scheduler-width: 57.5rem;--ax-comp-scheduler-basic-view-blocks-height: 3rem;--ax-comp-scheduler-basic-view-blocks-width: 3.5rem;--ax-comp-scheduler-timeline-view-blocks-width: 20rem;--ax-comp-scheduler-timeline-view-blocks-height: 3rem;--ax-comp-scheduler-primary-bg-color: var(--ax-sys-color-primary-surface);--ax-comp-scheduler-primary-text-color: var(--ax-sys-color-on-primary-surface);--ax-comp-scheduler-highest-periority-bg-color: var(--ax-sys-color-danger-dark-surface);--ax-comp-scheduler-highest-periority-text-color: var(--ax-sys-color-on-danger-dark-surface);--ax-comp-scheduler-high-periority-bg-color: var(--ax-sys-color-danger-surface);--ax-comp-scheduler-high-periority-text-color: var(--ax-sys-color-on-danger-surface);--ax-comp-scheduler-medium-periority-bg-color: var(--ax-sys-color-warning-surface);--ax-comp-scheduler-medium-periority-text-color: var(--ax-sys-color-on-warning-surface);--ax-comp-scheduler-low-periority-bg-color: var(--ax-sys-color-success-light-surface);--ax-comp-scheduler-low-periority-text-color: var(--ax-sys-color-on-success-light-surface);--ax-comp-scheduler-lowest-periority-bg-color: var(--ax-sys-color-success-lightest-surface);--ax-comp-scheduler-lowest-periority-text-color: var(--ax-sys-color-on-success-lightest-surface)}ax-scheduler{width:100%;height:100%;display:block;-webkit-user-select:none;user-select:none;font-size:.875rem;background-color:inherit}ax-scheduler.ax-full-screen-container{top:0;left:0;z-index:61;width:100vw;height:100vh;position:fixed}ax-scheduler .ax-scheduler-container{height:100%;display:flex;overflow:hidden;border-width:1px;flex-direction:column;background-color:inherit;border-radius:var(--ax-sys-border-radius)}ax-scheduler .ax-scheduler-container .ax-scheduler-header{display:flex;padding:1rem;overflow-x:auto;overflow-y:hidden;align-items:center;border-bottom-width:1px;justify-content:space-between}ax-scheduler .ax-scheduler-container .ax-scheduler-header .ax-scheduler-date{display:flex;min-width:20.5rem;align-items:center;justify-content:space-between}ax-scheduler .ax-scheduler-container .ax-scheduler-header .ax-scheduler-date p{margin:0;font-size:1rem;min-width:10rem;font-weight:500;text-align:center}ax-scheduler .ax-scheduler-container .ax-scheduler-actions{gap:.75rem;display:flex;align-items:center;justify-content:center}ax-scheduler .ax-scheduler-container .ax-scheduler-truncate{display:block;overflow:hidden;text-wrap:nowrap;text-overflow:ellipsis}ax-scheduler .ax-scheduler-container ax-subtitle{font-size:.75rem}ax-scheduler .ax-scheduler-container .ax-scheduler-views-container{height:100%;overflow:auto;background-color:inherit}ax-scheduler .ax-scheduler-primary-periority{color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color))}ax-scheduler .ax-scheduler-highest-periority{color:rgba(var(--ax-comp-scheduler-highest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-highest-periority-bg-color))}ax-scheduler .ax-scheduler-high-periority{color:rgba(var(--ax-comp-scheduler-high-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-high-periority-bg-color))}ax-scheduler .ax-scheduler-medium-periority{color:rgba(var(--ax-comp-scheduler-medium-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-medium-periority-bg-color))}ax-scheduler .ax-scheduler-low-periority{color:rgba(var(--ax-comp-scheduler-low-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-low-periority-bg-color))}ax-scheduler .ax-scheduler-lowest-periority{color:rgba(var(--ax-comp-scheduler-lowest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-lowest-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover{gap:.25rem;display:grid;overflow:auto;padding:.25rem;max-height:10rem;font-size:.875rem;border-radius:.5rem}.ax-overlay-pane.ax-scheduler-popover.ax-scheduler-month-popover-appointment{font-size:.75rem}.ax-overlay-pane.ax-scheduler-popover:not(.ax-state-readonly) .ax-scheduler-popover-appointment{cursor:pointer}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-popover-appointment{display:flex;overflow:hidden;-webkit-user-select:none;user-select:none;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2);color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-popover-appointment ax-subtitle{font-size:.75rem}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-popover-appointment .ax-scheduler-truncate{display:block;overflow:hidden;text-wrap:nowrap;text-overflow:ellipsis}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-primary-periority{color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-highest-periority{color:rgba(var(--ax-comp-scheduler-highest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-highest-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-high-periority{color:rgba(var(--ax-comp-scheduler-high-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-high-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-medium-periority{color:rgba(var(--ax-comp-scheduler-medium-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-medium-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-low-periority{color:rgba(var(--ax-comp-scheduler-low-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-low-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-lowest-periority{color:rgba(var(--ax-comp-scheduler-lowest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-lowest-periority-bg-color))}\\n\"] }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NyYy9saWIvc2NoZWR1bGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NyYy9saWIvc2NoZWR1bGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQXVCLFdBQVcsRUFBMEIsTUFBTSxvQkFBb0IsQ0FBQztBQUUzRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQWMsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixXQUFXLEVBQ1gsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVM3QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNoRyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN2RixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUM3RixPQUFPLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUNqSCxPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUN2SCxPQUFPLEVBQUUsd0NBQXdDLEVBQUUsTUFBTSx3RUFBd0UsQ0FBQztBQUNsSSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQzs7O0FBOEMxRixNQUFNLE9BQU8sb0JBQXFCLFNBQVEsV0FBVztJQXhCckQ7O1FBeUJVLGVBQVUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDakMsaUJBQVksR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdEMsa0JBQWEsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDeEMsa0JBQWEsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDeEMsb0JBQWUsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUM1QyxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUM5Qyx1QkFBa0IsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUVsRCxzQkFBaUIsR0FBRyxTQUFTLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNwRCxvQkFBZSxHQUFHLFNBQVMsQ0FBcUIsaUJBQWlCLENBQUMsQ0FBQztRQUVuRSxpQkFBWSxHQUFvQztZQUN0RCxHQUFHLEVBQUUsT0FBTztZQUNaLElBQUksRUFBRSxRQUFRO1lBQ2QsS0FBSyxFQUFFLFNBQVM7WUFDaEIsY0FBYyxFQUFFLGdCQUFnQjtZQUNoQyxvQkFBb0IsRUFBRSxvQkFBb0I7WUFDMUMsZ0JBQWdCLEVBQUUsa0JBQWtCO1lBQ3BDLE1BQU0sRUFBRSxRQUFRO1NBQ2pCLENBQUM7UUFFSyxhQUFRLEdBQUcsS0FBSyxFQUF3QyxDQUFDO1FBQ3RELGlCQUFZLEdBQUcsWUFBWSxDQUNuQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUM1RSxDQUFDO1FBRUssaUJBQVksR0FBRyxLQUFLLENBQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZDLGdCQUFXLEdBQUcsWUFBWSxDQUFhLEdBQUcsRUFBRSxDQUNqRCxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUNyRixDQUFDO1FBRU0sa0JBQWEsR0FBRyxNQUFNLENBQTJCLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELGlCQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUM1QyxRQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BCLGlCQUFZLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLG9CQUFlLEdBQUcsTUFBTSxDQUFpQyxFQUFFLENBQUMsQ0FBQztRQUMvRCxhQUFRLEdBQUcsTUFBTSxDQUFhLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUU3RixlQUFVLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZCLGlCQUFZLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLGNBQVMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsYUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixjQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hCLG9CQUFlLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlCLDBCQUFxQixHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQyxlQUFVLEdBQUcsS0FBSyxDQUFtQyxFQUFFLENBQUMsQ0FBQztRQUN6RCxtQkFBYyxHQUFHLEtBQUssQ0FBa0IsUUFBUSxDQUFDLENBQUM7UUFDbEQsVUFBSyxHQUFHLEtBQUssQ0FBb0I7WUFDdEMsS0FBSztZQUNMLE1BQU07WUFDTixPQUFPO1lBQ1AsY0FBYztZQUNkLG9CQUFvQjtZQUNwQixnQkFBZ0I7WUFDaEIsUUFBUTtTQUNULENBQUMsQ0FBQztRQUVJLGlCQUFZLEdBQUcsS0FBSyxDQUFrQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RCxhQUFRLEdBQUcsTUFBTSxDQUFrQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUVoRSx5QkFBeUI7UUFDbEIsaUJBQVksR0FBRyxNQUFNLEVBQVEsQ0FBQztRQUM5QixtQkFBYyxHQUFHLE1BQU0sRUFBd0IsQ0FBQztRQUNoRCxrQkFBYSxHQUFHLE1BQU0sRUFBNkIsQ0FBQztRQUNwRCxxQkFBZ0IsR0FBRyxNQUFNLEVBQTZCLENBQUM7UUFDdkQscUJBQWdCLEdBQUcsTUFBTSxFQUE2QixDQUFDO1FBQ3ZELHNCQUFpQixHQUFHLE1BQU0sRUFBNEIsQ0FBQztRQUN2RCx5QkFBb0IsR0FBRyxNQUFNLEVBQW9DLENBQUM7UUFDbEUsNEJBQXVCLEdBQUcsTUFBTSxFQUFvQyxDQUFDO1FBQ3JFLDRCQUF1QixHQUFHLE1BQU0sRUFBb0MsQ0FBQztRQThDNUUsdUJBQWtCLEdBQUcsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ3JDLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQzVDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQWtDLENBQUM7Z0JBQy9ELE1BQU0sS0FBSyxHQUFHO29CQUNaLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRztvQkFDckIsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJO2lCQUN4QixDQUFDO2dCQUNGLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0IsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQThCLENBQUM7Z0JBQzNELElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9CLENBQUM7WUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO1FBc0JJLG9CQUFlLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNyQyxRQUFRLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO2dCQUM1QixLQUFLLEtBQUssQ0FBQztnQkFDWCxLQUFLLGNBQWM7b0JBQ2pCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLFVBQVUsRUFBRTt3QkFDL0QsTUFBTSxFQUFFLGNBQWM7d0JBQ3RCLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFO3FCQUM5QixDQUFDLENBQUM7Z0JBQ0wsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDO29CQUNaLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxVQUFVLEVBQUU7d0JBQzVFLE1BQU0sRUFBRSxjQUFjO3dCQUN0QixRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRTtxQkFDOUIsQ0FBQyxDQUFDO29CQUNILE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUU7d0JBQ3hHLE1BQU0sRUFBRSxjQUFjO3dCQUN0QixRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRTtxQkFDOUIsQ0FBQyxDQUFDO29CQUNILE9BQU8sR0FBRyxXQUFXLE1BQU0sU0FBUyxFQUFFLENBQUM7Z0JBQ3pDLENBQUM7Z0JBQ0QsS0FBSyxRQUFRLENBQUM7Z0JBQ2QsS0FBSyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7b0JBQzFCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxVQUFVLEVBQUU7d0JBQzVFLE1BQU0sRUFBRSxjQUFjO3dCQUN0QixRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRTtxQkFDOUIsQ0FBQyxDQUFDO29CQUNILE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUN6QyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMscUJBQXFCLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFDL0QsVUFBVSxFQUNWO3dCQUNFLE1BQU0sRUFBRSxjQUFjO3dCQUN0QixRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRTtxQkFDOUIsQ0FDRixDQUFDO29CQUNGLE9BQU8sR0FBRyxXQUFXLE1BQU0sU0FBUyxFQUFFLENBQUM7Z0JBQ3pDLENBQUM7Z0JBQ0QsS0FBSyxPQUFPLENBQUM7Z0JBQ2IsS0FBSyxnQkFBZ0I7b0JBQ25CLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLFVBQVUsRUFBRTt3QkFDL0QsTUFBTSxFQUFFLFdBQVc7d0JBQ25CLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFO3FCQUM5QixDQUFDLENBQUM7WUFDUCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSSxrQkFBYSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDbkMsUUFBUSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztnQkFDNUIsS0FBSyxLQUFLLENBQUM7Z0JBQ1gsS0FBSyxNQUFNLENBQUM7Z0JBQ1osS0FBSyxRQUFRLENBQUM7Z0JBQ2QsS0FBSyxjQUFjLENBQUM7Z0JBQ3BCLEtBQUssb0JBQW9CO29CQUN2QixPQUFPLEtBQUssQ0FBQztnQkFDZixLQUFLLE9BQU8sQ0FBQztnQkFDYixLQUFLLGdCQUFnQjtvQkFDbkIsT0FBTyxPQUFPLENBQUM7WUFDbkIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUssdUJBQWtCLEdBQUcsUUFBUSxDQUEyQixHQUFHLEVBQUU7WUFDbkUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBOEIsQ0FBQztZQUUvRCxPQUFPLEtBQUs7aUJBQ1QsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ1osTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztnQkFDbkYsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztnQkFDL0UsbUJBQW1CO2dCQUNuQixJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztvQkFDdkMsT0FBTyxDQUFDLElBQUksQ0FBQyxzREFBc0QsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDM0UsT0FBTyxJQUFJLENBQUM7Z0JBQ2QsQ0FBQztnQkFDRCwwQ0FBMEM7Z0JBQzFDLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQ3JFLE9BQU8sQ0FBQyxJQUFJLENBQUMsNERBQTRELEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ2pGLE9BQU8sSUFBSSxDQUFDO2dCQUNkLENBQUM7Z0JBQ0QsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDLENBQUM7aUJBQ0QsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFrQyxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsc0NBQXNDO1FBQzVHLENBQUMsQ0FBQyxDQUFDO1FBRUksVUFBSyxHQUFHLFFBQVEsQ0FBdUIsR0FBRyxFQUFFO1lBQ2pELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNqQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRWxELElBQUksQ0FBQyxPQUFPO2dCQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUUvQyxRQUFRLElBQUksRUFBRSxDQUFDO2dCQUNiLEtBQUssS0FBSyxDQUFDO2dCQUNYLEtBQUssY0FBYyxDQUFDLENBQUMsQ0FBQztvQkFDcEIsTUFBTSxLQUFLLEdBQUcsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDckUsT0FBTyxLQUFLLENBQUM7Z0JBQ2YsQ0FBQztnQkFDRCxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUM7b0JBQ1osTUFBTSxLQUFLLEdBQUcsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ3RFLE9BQU8sS0FBSyxDQUFDO2dCQUNmLENBQUM7Z0JBQ0QsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDO29CQUNiLE1BQU0sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUN0RSxNQUFNLEtBQUssR0FBRyxFQUFFLElBQUksRUFBRSxhQUFhLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDaEYsT0FBTyxLQUFLLENBQUM7Z0JBQ2YsQ0FBQztnQkFDRCxLQUFLLGdCQUFnQixDQUFDLENBQUMsQ0FBQztvQkFDdEIsTUFBTSxLQUFLLEdBQUcsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ3hGLE9BQU8sS0FBSyxDQUFDO2dCQUNmLENBQUM7Z0JBQ0QsS0FBSyxRQUFRLENBQUM7Z0JBQ2QsS0FBSyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7b0JBQzFCLE1BQU0sS0FBSyxHQUFHLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ2pHLE9BQU8sS0FBSyxDQUFDO2dCQUNmLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCx3QkFBbUIsR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBRUgsdUJBQWtCLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUMvQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDakMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDYixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2hELENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxxQkFBZ0IsR0FBRyxRQUFRLENBQTJCLEdBQUcsRUFBRTtZQUN6RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDekMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQztZQUNyQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDO1lBRWxDLElBQUksQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDO2dCQUFFLE9BQU8sRUFBRSxDQUFDO1lBRS9DLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FDbEIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUNQLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUNqRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUNwRyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7S0EySEo7SUFwVkMsNkNBQTZDO0lBQ25DLHVCQUF1QixDQUFDLFNBQW9DO1FBQ3BFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFDUywwQkFBMEIsQ0FBQyxTQUFvQztRQUN2RSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFDUyw0QkFBNEIsQ0FBQyxTQUFvQztRQUN6RSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFDUyw4QkFBOEIsQ0FBQyxTQUEyQztRQUNsRixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFDUyxpQ0FBaUMsQ0FBQyxTQUEyQztRQUNyRixJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFDUyxtQ0FBbUMsQ0FBQyxTQUEyQztRQUN2RixJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFDUyw2QkFBNkIsQ0FBQyxTQUFtQztRQUN6RSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDNUYsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztZQUM5RixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUMzQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNwQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ2pHLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdkcsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztZQUM5RixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUMzQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNwQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7WUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBQzNGLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsa0JBQWtCLENBY2Y7SUFFSyxLQUFLLENBQUMsY0FBYztRQUMxQixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDbkMsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLHFCQUFxQixJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN2RyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsV0FBdUI7UUFDOUMsTUFBTSxlQUFlLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDeEYsTUFBTSx1QkFBdUIsR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDO1FBQzFELE1BQU0saUJBQWlCLEdBQUcsQ0FBQyx1QkFBdUIsR0FBRyxlQUFlLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlFLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNyRSxpR0FBaUc7UUFDakcsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFtSEQsbUJBQW1CLENBRWhCO0lBRUgsa0JBQWtCLENBS2Y7SUFpQkgsV0FBVyxDQUFDLENBQXVDO1FBQ2pELE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDeEIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUUvQixJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxPQUF3QixFQUFFLE9BQXdCO1FBQzFFLElBQUksT0FBTyxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ25ELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM3RCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFFdEMsSUFBSSxPQUFPLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDdkIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQztZQUMvQyxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNsRCxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQzVGLE1BQU0sY0FBYyxHQUFHLENBQUMsZ0JBQWdCLEdBQUcscUJBQXFCLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFFLE1BQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDaEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDeEMsQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxTQUFTO1FBQ1AsUUFBUSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztZQUM1QixLQUFLLEtBQUssQ0FBQztZQUNYLEtBQUssY0FBYztnQkFDakIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkQsTUFBTTtZQUVSLEtBQUssTUFBTTtnQkFDVCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4RCxNQUFNO1lBRVIsS0FBSyxRQUFRLENBQUM7WUFDZCxLQUFLLG9CQUFvQjtnQkFDdkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNsRixNQUFNO1lBRVIsS0FBSyxPQUFPLENBQUM7WUFDYixLQUFLLGdCQUFnQjtnQkFDbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekQsTUFBTTtRQUNWLENBQUM7SUFDSCxDQUFDO0lBRUQsU0FBUztRQUNQLFFBQVEsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7WUFDNUIsS0FBSyxLQUFLLENBQUM7WUFDWCxLQUFLLGNBQWM7Z0JBQ2pCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEQsTUFBTTtZQUVSLEtBQUssTUFBTTtnQkFDVCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pELE1BQU07WUFFUixLQUFLLFFBQVEsQ0FBQztZQUNkLEtBQUssb0JBQW9CO2dCQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDbkYsTUFBTTtZQUVSLEtBQUssT0FBTyxDQUFDO1lBQ2IsS0FBSyxnQkFBZ0I7Z0JBQ25CLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUQsTUFBTTtRQUNWLENBQUM7SUFDSCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsQ0FBNEI7UUFDOUMsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUM1RSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUNuQyxNQUFNLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUM7WUFDL0MsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDbEQsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUM1RixNQUFNLGNBQWMsR0FBRyxDQUFDLGdCQUFnQixHQUFHLHFCQUFxQixHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxRSxXQUFXLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFTSxnQkFBZ0I7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQzs7WUFDbEYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUF1QztRQUMxRCxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDeEQsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUM7WUFDNUQsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3pCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUM1QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFrQyxDQUFDO1lBQy9ELE1BQU0sS0FBSyxHQUFHO2dCQUNaLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRztnQkFDckIsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJO2FBQ3hCLENBQUM7WUFDRixNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN6QixPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQThCLENBQUM7UUFDM0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMzQixDQUFDOzhHQTNaVSxvQkFBb0I7a0dBQXBCLG9CQUFvQiwwdUVBRnBCLENBQUMsY0FBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyw2RUFXbEQsb0JBQW9CLDRNQ3JHNUQscWlSQTBMQSx5MkxEL0dJLFdBQVcsK1ZBQ1gsb0JBQW9CLG1rQkFDcEIsd0JBQXdCLHNFQUN4QixpQkFBaUIsMlVBQ2pCLE9BQU8sb0ZBQ1Asa0JBQWtCLCtRQUNsQixtQkFBbUIsMGdCQUNuQiwyQkFBMkIsOFhBQzNCLDRCQUE0QiwrWEFDNUIsNkJBQTZCLG9YQUM3QixtQ0FBbUMsdVlBQ25DLHdDQUF3QywwWkFDeEMscUNBQXFDLDJXQUNyQyw4QkFBOEI7OzJGQUlyQixvQkFBb0I7a0JBeEJoQyxTQUFTOytCQUNFLGNBQWMsbUJBR1AsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxXQUM1Qjt3QkFDUCxXQUFXO3dCQUNYLG9CQUFvQjt3QkFDcEIsd0JBQXdCO3dCQUN4QixpQkFBaUI7d0JBQ2pCLE9BQU87d0JBQ1Asa0JBQWtCO3dCQUNsQixtQkFBbUI7d0JBQ25CLDJCQUEyQjt3QkFDM0IsNEJBQTRCO3dCQUM1Qiw2QkFBNkI7d0JBQzdCLG1DQUFtQzt3QkFDbkMsd0NBQXdDO3dCQUN4QyxxQ0FBcUM7d0JBQ3JDLDhCQUE4QjtxQkFDL0IsYUFDVSxDQUFDLGNBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxzQkFBc0IsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhDb21wb25lbnQsIEFYVmFsdWVDaGFuZ2VkRXZlbnQsIE5YQ29tcG9uZW50LCBOWEV2ZW50LCBOWE5hdGl2ZUV2ZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYRHJvcFpvbmVEcm9wRXZlbnQgfSBmcm9tICdAYWNvcmV4L2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgQVhCdXR0b25Db21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYnV0dG9uJztcbmltcG9ydCB7IEFYQ2FsZW5kYXJDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvY2FsZW5kYXInO1xuaW1wb3J0IHsgQVhEZWNvcmF0b3JJY29uQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgQVhQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3BvcG92ZXInO1xuaW1wb3J0IHsgQVhTZWxlY3RCb3hDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvc2VsZWN0LWJveCc7XG5pbXBvcnQgeyBBWENhbGVuZGFyU2VydmljZSwgQVhEYXRlVGltZSB9IGZyb20gJ0BhY29yZXgvY29yZS9kYXRlLXRpbWUnO1xuaW1wb3J0IHsgQVhGb3JtYXRTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2Zvcm1hdCc7XG5pbXBvcnQgeyBBWExvY2FsZVNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvbG9jYWxlJztcbmltcG9ydCB7IEFYVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb3JlL3RyYW5zbGF0aW9uJztcbmltcG9ydCB7IEFYSHRtbFV0aWwsIEFYVW5zdWJzY3JpYmVyIH0gZnJvbSAnQGFjb3JleC9jb3JlL3V0aWxzJztcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyLCBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIGxpbmtlZFNpZ25hbCxcbiAgbW9kZWwsXG4gIE9uSW5pdCxcbiAgb3V0cHV0LFxuICBQTEFURk9STV9JRCxcbiAgc2lnbmFsLFxuICB1bnRyYWNrZWQsXG4gIHZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBBWERheU9mV2Vla05hbWUsXG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnQsXG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnREYXRhU291cmNlLFxuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50TG9hZGVyLFxuICBBWFNjaGVkdWxlckRhdGVSYW5nZSxcbiAgQVhTY2hlZHVsZXJWaWV3LFxufSBmcm9tICcuL3NjaGVkdWxlci5jbGFzcyc7XG5pbXBvcnQgeyBBWFNjaGVkdWxlclNlcnZpY2UgfSBmcm9tICcuL3NjaGVkdWxlci5zZXJ2aWNlJztcbmltcG9ydCB7IEFYU2NoZWR1bGVyQWdlbmRhVmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3MvYWdlbmRhL3NjaGVkdWxlci1hZ2VuZGEtdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJEYXlWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi92aWV3cy9kYXkvc2NoZWR1bGVyLWRheS12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWFNjaGVkdWxlck1vbnRoVmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3MvbW9udGgvc2NoZWR1bGVyLW1vbnRoLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IEFYU2NoZWR1bGVyVGltZWxpbmVEYXlWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi92aWV3cy90aW1lbGluZS1kYXkvc2NoZWR1bGVyLXRpbWVsaW5lLWRheS12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWFNjaGVkdWxlclRpbWVsaW5lTW9udGhWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi92aWV3cy90aW1lbGluZS1tb250aC9zY2hlZHVsZXItdGltZWxpbmUtbW9udGgtdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJUaW1lbGluZU11bHRpRGF5Vmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3MvdGltZWxpbmUtbXVsdGktZGF5L3NjaGVkdWxlci10aW1lbGluZS1tdWx0aS1kYXktdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJXZWVrVmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3Mvd2Vlay9zY2hlZHVsZXItd2Vlay12aWV3LmNvbXBvbmVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQgZXh0ZW5kcyBOWE5hdGl2ZUV2ZW50PEFYU2NoZWR1bGVyQ29tcG9uZW50LCBNb3VzZUV2ZW50PiB7XG4gIGFwcG9pbnRtZW50OiBBWFNjaGVkdWxlckFwcG9pbnRtZW50O1xufVxuZXhwb3J0IGludGVyZmFjZSBBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50IGV4dGVuZHMgTlhOYXRpdmVFdmVudDxBWFNjaGVkdWxlckNvbXBvbmVudCwgTW91c2VFdmVudD4ge1xuICBzbG90OiB7XG4gICAgZW5kRGF0ZTogQVhEYXRlVGltZTtcbiAgICBzdGFydERhdGU6IEFYRGF0ZVRpbWU7XG4gICAgdmlldzogQVhTY2hlZHVsZXJWaWV3O1xuICB9O1xufVxuZXhwb3J0IGludGVyZmFjZSBBWFNjaGVkdWxlclNsb3REcm9wRXZlbnQgZXh0ZW5kcyBOWEV2ZW50PEFYU2NoZWR1bGVyQ29tcG9uZW50PiB7XG4gIGRyb3BFdmVudDogQVhEcm9wWm9uZURyb3BFdmVudDtcbiAgYXBwb2ludG1lbnQ6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQ7XG4gIHNsb3Q6IHtcbiAgICBlbmREYXRlOiBBWERhdGVUaW1lO1xuICAgIHN0YXJ0RGF0ZTogQVhEYXRlVGltZTtcbiAgICB2aWV3OiBBWFNjaGVkdWxlclZpZXc7XG4gIH07XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LXNjaGVkdWxlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9zY2hlZHVsZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zY2hlZHVsZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGltcG9ydHM6IFtcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBBWFNlbGVjdEJveENvbXBvbmVudCxcbiAgICBBWERlY29yYXRvckljb25Db21wb25lbnQsXG4gICAgQVhCdXR0b25Db21wb25lbnQsXG4gICAgTmdDbGFzcyxcbiAgICBBWFBvcG92ZXJDb21wb25lbnQsXG4gICAgQVhDYWxlbmRhckNvbXBvbmVudCxcbiAgICBBWFNjaGVkdWxlckRheVZpZXdDb21wb25lbnQsXG4gICAgQVhTY2hlZHVsZXJXZWVrVmlld0NvbXBvbmVudCxcbiAgICBBWFNjaGVkdWxlck1vbnRoVmlld0NvbXBvbmVudCxcbiAgICBBWFNjaGVkdWxlclRpbWVsaW5lRGF5Vmlld0NvbXBvbmVudCxcbiAgICBBWFNjaGVkdWxlclRpbWVsaW5lTXVsdGlEYXlWaWV3Q29tcG9uZW50LFxuICAgIEFYU2NoZWR1bGVyVGltZWxpbmVNb250aFZpZXdDb21wb25lbnQsXG4gICAgQVhTY2hlZHVsZXJBZ2VuZGFWaWV3Q29tcG9uZW50LFxuICBdLFxuICBwcm92aWRlcnM6IFtBWFVuc3Vic2NyaWJlciwgeyBwcm92aWRlOiBBWENvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYU2NoZWR1bGVyQ29tcG9uZW50IH1dLFxufSlcbmV4cG9ydCBjbGFzcyBBWFNjaGVkdWxlckNvbXBvbmVudCBleHRlbmRzIE5YQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSBwbGF0Zm9ybUlkID0gaW5qZWN0KFBMQVRGT1JNX0lEKTtcbiAgcHJpdmF0ZSB1bnN1YnNjcmliZXIgPSBpbmplY3QoQVhVbnN1YnNjcmliZXIpO1xuICBwcml2YXRlIGZvcm1hdFNlcnZpY2UgPSBpbmplY3QoQVhGb3JtYXRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBsb2NhbGVTZXJ2aWNlID0gaW5qZWN0KEFYTG9jYWxlU2VydmljZSk7XG4gIHByaXZhdGUgY2FsZW5kYXJTZXJ2aWNlID0gaW5qZWN0KEFYQ2FsZW5kYXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzY2hlZHVsZXJTZXJ2aWNlID0gaW5qZWN0KEFYU2NoZWR1bGVyU2VydmljZSk7XG4gIHByaXZhdGUgdHJhbnNsYXRpb25TZXJ2aWNlID0gaW5qZWN0KEFYVHJhbnNsYXRpb25TZXJ2aWNlKTtcblxuICBwcml2YXRlIHZpZXdNb2RlU2VsZWN0Ym94ID0gdmlld0NoaWxkKEFYU2VsZWN0Qm94Q29tcG9uZW50KTtcbiAgcHJpdmF0ZSBjYWxlbmRhclBvcG92ZXIgPSB2aWV3Q2hpbGQ8QVhQb3BvdmVyQ29tcG9uZW50PignY2FsZW5kYXJQb3BvdmVyJyk7XG5cbiAgcHJpdmF0ZSBkaXNwbGF5Vmlld3M6IFJlY29yZDxBWFNjaGVkdWxlclZpZXcsIHN0cmluZz4gPSB7XG4gICAgZGF5OiAnZGFpbHknLFxuICAgIHdlZWs6ICd3ZWVrbHknLFxuICAgIG1vbnRoOiAnbW9udGhseScsXG4gICAgJ3RpbWVsaW5lLWRheSc6ICdkYWlseS10aW1lbGluZScsXG4gICAgJ3RpbWVsaW5lLW11bHRpLWRheSc6ICdtdWx0aS1kYXktdGltZWxpbmUnLFxuICAgICd0aW1lbGluZS1tb250aCc6ICdtb250aGx5LXRpbWVsaW5lJyxcbiAgICBhZ2VuZGE6ICdhZ2VuZGEnLFxuICB9O1xuXG4gIHB1YmxpYyBjYWxlbmRhciA9IGlucHV0PCdncmVnb3JpYW4nIHwgJ3NvbGFyLWhpanJpJyB8IHN0cmluZz4oKTtcbiAgcHJvdGVjdGVkIGNhbGVuZGFyVHlwZSA9IGxpbmtlZFNpZ25hbDwnZ3JlZ29yaWFuJyB8ICdzb2xhci1oaWpyaScgfCBzdHJpbmc+KFxuICAgICgpID0+IHRoaXMuY2FsZW5kYXIoKSA/PyB0aGlzLmxvY2FsZVNlcnZpY2UuYWN0aXZlUHJvZmlsZSgpLmNhbGVuZGFyLnN5c3RlbSxcbiAgKTtcblxuICBwdWJsaWMgc3RhcnRpbmdEYXRlID0gaW5wdXQ8RGF0ZT4obmV3IERhdGUoKSk7XG4gIHB1YmxpYyBjdXJyZW50RGF0ZSA9IGxpbmtlZFNpZ25hbDxBWERhdGVUaW1lPigoKSA9PlxuICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZSh0aGlzLnN0YXJ0aW5nRGF0ZSgpLCB0aGlzLmNhbGVuZGFyVHlwZSgpKS5zdGFydE9mKCdkYXknKSxcbiAgKTtcblxuICBwcml2YXRlIF9hcHBvaW50bWVudHMgPSBzaWduYWw8QVhTY2hlZHVsZXJBcHBvaW50bWVudFtdPihbXSk7XG4gIHB1YmxpYyBhcHBvaW50bWVudHMgPSB0aGlzLl9hcHBvaW50bWVudHMuYXNSZWFkb25seSgpO1xuICBwcm90ZWN0ZWQgcnRsID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIGlzRnVsbFNjcmVlbiA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCB2aWV3c0RhdGFTb3VyY2UgPSBzaWduYWw8eyBpZDogc3RyaW5nOyB0ZXh0OiBzdHJpbmcgfVtdPihbXSk7XG4gIHByaXZhdGUgcHJldkRhdGUgPSBzaWduYWw8QVhEYXRlVGltZT4odGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKG5ldyBEYXRlKCksIHRoaXMuY2FsZW5kYXJUeXBlKCkpKTtcblxuICBwdWJsaWMgZW5kRGF5SG91ciA9IGlucHV0KDI0KTtcbiAgcHVibGljIHN0YXJ0RGF5SG91ciA9IGlucHV0KDgpO1xuICBwdWJsaWMgaGFzSGVhZGVyID0gaW5wdXQodHJ1ZSk7XG4gIHB1YmxpYyByZWFkb25seSA9IGlucHV0KGZhbHNlKTtcbiAgcHVibGljIGRyYWdnYWJsZSA9IGlucHV0KHRydWUpO1xuICBwdWJsaWMgYWxsb3dGdWxsU2NyZWVuID0gaW5wdXQodHJ1ZSk7XG4gIHB1YmxpYyBtdWx0aURheVZpZXdEYXlzQ291bnQgPSBpbnB1dCg3KTtcbiAgcHVibGljIGRhdGFTb3VyY2UgPSBpbnB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50RGF0YVNvdXJjZT4oW10pO1xuICBwdWJsaWMgZmlyc3REYXlPZldlZWsgPSBpbnB1dDxBWERheU9mV2Vla05hbWU+KCdzdW5kYXknKTtcbiAgcHVibGljIHZpZXdzID0gaW5wdXQ8QVhTY2hlZHVsZXJWaWV3W10+KFtcbiAgICAnZGF5JyxcbiAgICAnd2VlaycsXG4gICAgJ21vbnRoJyxcbiAgICAndGltZWxpbmUtZGF5JyxcbiAgICAndGltZWxpbmUtbXVsdGktZGF5JyxcbiAgICAndGltZWxpbmUtbW9udGgnLFxuICAgICdhZ2VuZGEnLFxuICBdKTtcblxuICBwdWJsaWMgc2VsZWN0ZWRWaWV3ID0gbW9kZWw8QVhTY2hlZHVsZXJWaWV3Pih0aGlzLnZpZXdzKClbMF0pO1xuICBwcml2YXRlIHByZXZWaWV3ID0gc2lnbmFsPEFYU2NoZWR1bGVyVmlldz4odGhpcy5zZWxlY3RlZFZpZXcoKSk7XG5cbiAgLy8gLS0tIFB1YmxpYyBPdXRwdXRzIC0tLVxuICBwdWJsaWMgb25EYXRhTG9hZGVkID0gb3V0cHV0PHZvaWQ+KCk7XG4gIHB1YmxpYyBvblJhbmdlQ2hhbmdlZCA9IG91dHB1dDxBWFNjaGVkdWxlckRhdGVSYW5nZT4oKTtcbiAgcHVibGljIG9uU2xvdENsaWNrZWQgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgcHVibGljIG9uU2xvdERibENsaWNrZWQgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgcHVibGljIG9uU2xvdFJpZ2h0Q2xpY2sgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgcHVibGljIG9uQXBwb2ludG1lbnREcm9wID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdERyb3BFdmVudD4oKTtcbiAgcHVibGljIG9uQXBwb2ludG1lbnRDbGlja2VkID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBwdWJsaWMgb25BcHBvaW50bWVudERibENsaWNrZWQgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIHB1YmxpYyBvbkFwcG9pbnRtZW50UmlnaHRDbGljayA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcblxuICAvLyAtLS0gSW50ZXJuYWwgSGFuZGxlcnMgZm9yIFZpZXcgT3V0cHV0cyAtLS1cbiAgcHJvdGVjdGVkIGhhbmRsZVNsb3RDbGlja0ludGVybmFsKGV2ZW50RGF0YTogQVhTY2hlZHVsZXJTbG90TW91c2VFdmVudCkge1xuICAgIHRoaXMub25TbG90Q2xpY2tlZC5lbWl0KGV2ZW50RGF0YSk7XG4gIH1cbiAgcHJvdGVjdGVkIGhhbmRsZVNsb3REYmxDbGlja0ludGVybmFsKGV2ZW50RGF0YTogQVhTY2hlZHVsZXJTbG90TW91c2VFdmVudCkge1xuICAgIHRoaXMub25TbG90RGJsQ2xpY2tlZC5lbWl0KGV2ZW50RGF0YSk7XG4gIH1cbiAgcHJvdGVjdGVkIGhhbmRsZVNsb3RSaWdodENsaWNrSW50ZXJuYWwoZXZlbnREYXRhOiBBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5vblNsb3RSaWdodENsaWNrLmVtaXQoZXZlbnREYXRhKTtcbiAgfVxuICBwcm90ZWN0ZWQgaGFuZGxlQXBwb2ludG1lbnRDbGlja0ludGVybmFsKGV2ZW50RGF0YTogQVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLm9uQXBwb2ludG1lbnRDbGlja2VkLmVtaXQoZXZlbnREYXRhKTtcbiAgfVxuICBwcm90ZWN0ZWQgaGFuZGxlQXBwb2ludG1lbnREYmxDbGlja0ludGVybmFsKGV2ZW50RGF0YTogQVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLm9uQXBwb2ludG1lbnREYmxDbGlja2VkLmVtaXQoZXZlbnREYXRhKTtcbiAgfVxuICBwcm90ZWN0ZWQgaGFuZGxlQXBwb2ludG1lbnRSaWdodENsaWNrSW50ZXJuYWwoZXZlbnREYXRhOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudCkge1xuICAgIHRoaXMub25BcHBvaW50bWVudFJpZ2h0Q2xpY2suZW1pdChldmVudERhdGEpO1xuICB9XG4gIHByb3RlY3RlZCBoYW5kbGVBcHBvaW50bWVudERyb3BJbnRlcm5hbChldmVudERhdGE6IEFYU2NoZWR1bGVyU2xvdERyb3BFdmVudCkge1xuICAgIHRoaXMub25BcHBvaW50bWVudERyb3AuZW1pdChldmVudERhdGEpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jYWxlbmRhclNlcnZpY2UuY2FsZW5kYXJDaGFuZ2VzJC5waXBlKHRoaXMudW5zdWJzY3JpYmVyLnRha2VVbnRpbERlc3Ryb3kpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZSh0aGlzLmN1cnJlbnREYXRlKCkuZGF0ZSwgdGhpcy5jYWxlbmRhclR5cGUoKSk7XG4gICAgICBpZiAoIWN1cnJlbnREYXRlLmVxdWFsKHRoaXMuY3VycmVudERhdGUoKSkpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50RGF0ZS5zZXQoY3VycmVudERhdGUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UubGFuZ0NoYW5nZXMkLnBpcGUodGhpcy51bnN1YnNjcmliZXIudGFrZVVudGlsRGVzdHJveSkuc3Vic2NyaWJlKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHRoaXMuZmlsbERhdGFTb3VyY2UoKTtcbiAgICAgIHRoaXMudmlld01vZGVTZWxlY3Rib3goKT8uc2VsZWN0SXRlbXModGhpcy52aWV3c0RhdGFTb3VyY2UoKS5maW5kKChjKSA9PiBjLmlkID09IHRoaXMuc2VsZWN0ZWRWaWV3KCkpKTtcbiAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKHRoaXMuY3VycmVudERhdGUoKS5kYXRlLCB0aGlzLmNhbGVuZGFyVHlwZSgpKTtcbiAgICAgIGlmICghY3VycmVudERhdGUuZXF1YWwodGhpcy5jdXJyZW50RGF0ZSgpKSkge1xuICAgICAgICB0aGlzLmN1cnJlbnREYXRlLnNldChjdXJyZW50RGF0ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgdGhpcy5ydGwuc2V0KEFYSHRtbFV0aWwuaXNSdGwodGhpcy5uYXRpdmVFbGVtZW50KSk7XG4gICAgdGhpcy5maWxsRGF0YVNvdXJjZSgpO1xuICB9XG5cbiAgI2FwcG9pbnRtZW50RWZmZWN0ID0gZWZmZWN0KGFzeW5jICgpID0+IHtcbiAgICBpZiAodHlwZW9mIHRoaXMuZGF0YVNvdXJjZSgpID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBmdW5jID0gdGhpcy5kYXRhU291cmNlKCkgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudExvYWRlcjtcbiAgICAgIGNvbnN0IHJhbmdlID0ge1xuICAgICAgICBlbmQ6IHRoaXMucmFuZ2UoKS5lbmQsXG4gICAgICAgIGZyb206IHRoaXMucmFuZ2UoKS5mcm9tLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGxpc3QgPSBhd2FpdCBmdW5jKHsgcmFuZ2UgfSk7XG4gICAgICB0aGlzLl9hcHBvaW50bWVudHMuc2V0KGxpc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsaXN0ID0gdGhpcy5kYXRhU291cmNlKCkgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudFtdO1xuICAgICAgdGhpcy5fYXBwb2ludG1lbnRzLnNldChsaXN0KTtcbiAgICB9XG4gICAgdGhpcy5vbkRhdGFMb2FkZWQuZW1pdCgpO1xuICB9KTtcblxuICBwcml2YXRlIGFzeW5jIGZpbGxEYXRhU291cmNlKCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGZvciBhd2FpdCAoY29uc3QgYyBvZiB0aGlzLnZpZXdzKCkpIHtcbiAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhgZGF0ZVRpbWUuZHVyYXRpb24uJHt0aGlzLmRpc3BsYXlWaWV3c1tjXX1gKTtcbiAgICAgIHJlc3VsdC5wdXNoKHsgdGV4dCwgaWQ6IGMgfSk7XG4gICAgfVxuICAgIHRoaXMudmlld3NEYXRhU291cmNlLnNldChyZXN1bHQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRHcmlkRGF0ZVJhbmdlKGRhdGVJbk1vbnRoOiBBWERhdGVUaW1lKTogeyBncmlkU3RhcnREYXRlOiBBWERhdGVUaW1lOyBncmlkRW5kRGF0ZTogQVhEYXRlVGltZSB9IHtcbiAgICBjb25zdCBmaXJzdERheU9mTW9udGggPSBkYXRlSW5Nb250aC5zdGFydE9mKCdtb250aCcpO1xuICAgIGNvbnN0IGZpcnN0RGF5R3JpZE51bSA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXREYXlPZldlZWtOdW1iZXIodGhpcy5maXJzdERheU9mV2VlaygpKTtcbiAgICBjb25zdCBmaXJzdERpc3BsYXllZERheU9mV2VlayA9IGZpcnN0RGF5T2ZNb250aC5kYXlPZldlZWs7XG4gICAgY29uc3QgZGF5c0Zyb21QcmV2TW9udGggPSAoZmlyc3REaXNwbGF5ZWREYXlPZldlZWsgLSBmaXJzdERheUdyaWROdW0gKyA3KSAlIDc7XG4gICAgY29uc3QgZ3JpZFN0YXJ0RGF0ZSA9IGZpcnN0RGF5T2ZNb250aC5hZGQoJ2RheScsIC1kYXlzRnJvbVByZXZNb250aCk7XG4gICAgLy8gQ2FsY3VsYXRlIGVuZCBkYXRlIGJhc2VkIG9uIHN0YW5kYXJkIDYgd2Vla3MgZm9yIHNhZmV0eSwgb3IgY2FsY3VsYXRlIGR5bmFtaWNhbGx5IGlmIHByZWZlcnJlZFxuICAgIGNvbnN0IGdyaWRFbmREYXRlID0gZ3JpZFN0YXJ0RGF0ZS5hZGQoJ2RheScsIDYgKiA3IC0gMSk7XG4gICAgcmV0dXJuIHsgZ3JpZFN0YXJ0RGF0ZSwgZ3JpZEVuZERhdGUgfTtcbiAgfVxuXG4gIHB1YmxpYyBjdXJyZW50RGF0ZVRleHQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgc3dpdGNoICh0aGlzLnNlbGVjdGVkVmlldygpKSB7XG4gICAgICBjYXNlICdkYXknOlxuICAgICAgY2FzZSAndGltZWxpbmUtZGF5JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0U2VydmljZS5mb3JtYXQodGhpcy5jdXJyZW50RGF0ZSgpLCAnZGF0ZXRpbWUnLCB7XG4gICAgICAgICAgZm9ybWF0OiAnREQgTU1NTSB5eXl5JyxcbiAgICAgICAgICBjYWxlbmRhcjogdGhpcy5jYWxlbmRhclR5cGUoKSxcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICd3ZWVrJzoge1xuICAgICAgICBjb25zdCBzdGFydE9mV2VlayA9IHRoaXMuZm9ybWF0U2VydmljZS5mb3JtYXQodGhpcy5jdXJyZW50RGF0ZSgpLCAnZGF0ZXRpbWUnLCB7XG4gICAgICAgICAgZm9ybWF0OiAnREQgTU1NTSB5eXl5JyxcbiAgICAgICAgICBjYWxlbmRhcjogdGhpcy5jYWxlbmRhclR5cGUoKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGVuZE9mV2VlayA9IHRoaXMuZm9ybWF0U2VydmljZS5mb3JtYXQodGhpcy5jdXJyZW50RGF0ZSgpLmFkZCgnd2VlaycsIDEpLmFkZCgnZGF5JywgLTEpLCAnZGF0ZXRpbWUnLCB7XG4gICAgICAgICAgZm9ybWF0OiAnREQgTU1NTSB5eXl5JyxcbiAgICAgICAgICBjYWxlbmRhcjogdGhpcy5jYWxlbmRhclR5cGUoKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBgJHtzdGFydE9mV2Vla30gLSAke2VuZE9mV2Vla31gO1xuICAgICAgfVxuICAgICAgY2FzZSAnYWdlbmRhJzpcbiAgICAgIGNhc2UgJ3RpbWVsaW5lLW11bHRpLWRheSc6IHtcbiAgICAgICAgY29uc3Qgc3RhcnRPZldlZWsgPSB0aGlzLmZvcm1hdFNlcnZpY2UuZm9ybWF0KHRoaXMuY3VycmVudERhdGUoKSwgJ2RhdGV0aW1lJywge1xuICAgICAgICAgIGZvcm1hdDogJ0REIE1NTU0geXl5eScsXG4gICAgICAgICAgY2FsZW5kYXI6IHRoaXMuY2FsZW5kYXJUeXBlKCksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBlbmRPZldlZWsgPSB0aGlzLmZvcm1hdFNlcnZpY2UuZm9ybWF0KFxuICAgICAgICAgIHRoaXMuY3VycmVudERhdGUoKS5hZGQoJ2RheScsIHRoaXMubXVsdGlEYXlWaWV3RGF5c0NvdW50KCkgLSAxKSxcbiAgICAgICAgICAnZGF0ZXRpbWUnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvcm1hdDogJ0REIE1NTU0geXl5eScsXG4gICAgICAgICAgICBjYWxlbmRhcjogdGhpcy5jYWxlbmRhclR5cGUoKSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gYCR7c3RhcnRPZldlZWt9IC0gJHtlbmRPZldlZWt9YDtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgIGNhc2UgJ3RpbWVsaW5lLW1vbnRoJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0U2VydmljZS5mb3JtYXQodGhpcy5jdXJyZW50RGF0ZSgpLCAnZGF0ZXRpbWUnLCB7XG4gICAgICAgICAgZm9ybWF0OiAnTU1NTSB5eXl5JyxcbiAgICAgICAgICBjYWxlbmRhcjogdGhpcy5jYWxlbmRhclR5cGUoKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICBwdWJsaWMgY2FsZW5kYXJEZXB0aCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBzd2l0Y2ggKHRoaXMuc2VsZWN0ZWRWaWV3KCkpIHtcbiAgICAgIGNhc2UgJ2RheSc6XG4gICAgICBjYXNlICd3ZWVrJzpcbiAgICAgIGNhc2UgJ2FnZW5kYSc6XG4gICAgICBjYXNlICd0aW1lbGluZS1kYXknOlxuICAgICAgY2FzZSAndGltZWxpbmUtbXVsdGktZGF5JzpcbiAgICAgICAgcmV0dXJuICdkYXknO1xuICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgY2FzZSAndGltZWxpbmUtbW9udGgnOlxuICAgICAgICByZXR1cm4gJ21vbnRoJztcbiAgICB9XG4gIH0pO1xuXG4gIHByaXZhdGUgbWFwcGVkQXBwb2ludG1lbnRzID0gY29tcHV0ZWQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudFtdPigoKSA9PiB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLl9hcHBvaW50bWVudHMoKSBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50W107XG5cbiAgICByZXR1cm4gaXRlbXNcbiAgICAgIC5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGl0ZW0uc3RhcnREYXRlLCB0aGlzLmNhbGVuZGFyVHlwZSgpKTtcbiAgICAgICAgY29uc3QgZW5kRGF0ZSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShpdGVtLmVuZERhdGUsIHRoaXMuY2FsZW5kYXJUeXBlKCkpO1xuICAgICAgICAvLyBCYXNpYyB2YWxpZGF0aW9uXG4gICAgICAgIGlmICghc3RhcnREYXRlPy5kYXRlIHx8ICFlbmREYXRlPy5kYXRlKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdTY2hlZHVsZXI6IFNraXBwaW5nIGl0ZW0gZHVlIHRvIGludmFsaWQgZGF0ZSBmaWVsZHM6JywgaXRlbSk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgZGF0ZXMgYXJlIHZhbGlkIGFmdGVyIGNyZWF0aW9uXG4gICAgICAgIGlmIChpc05hTihzdGFydERhdGUuZGF0ZS5nZXRUaW1lKCkpIHx8IGlzTmFOKGVuZERhdGUuZGF0ZS5nZXRUaW1lKCkpKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdTY2hlZHVsZXI6IFNraXBwaW5nIGl0ZW0gZHVlIHRvIGludmFsaWQgcGFyc2VkIGRhdGUgKE5hTik6JywgaXRlbSk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICB9KVxuICAgICAgLmZpbHRlcigoYXBwdCk6IGFwcHQgaXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudCA9PiBhcHB0ICE9PSBudWxsKTsgLy8gRmlsdGVyIG91dCBudWxscyBmcm9tIGludmFsaWQgZGF0ZXNcbiAgfSk7XG5cbiAgcHVibGljIHJhbmdlID0gY29tcHV0ZWQ8QVhTY2hlZHVsZXJEYXRlUmFuZ2U+KCgpID0+IHtcbiAgICBjb25zdCB2aWV3ID0gdGhpcy5zZWxlY3RlZFZpZXcoKTtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jdXJyZW50RGF0ZSgpLnN0YXJ0T2YoJ2RheScpO1xuXG4gICAgaWYgKCFjdXJyZW50KSByZXR1cm4geyBmcm9tOiBudWxsLCBlbmQ6IG51bGwgfTtcblxuICAgIHN3aXRjaCAodmlldykge1xuICAgICAgY2FzZSAnZGF5JzpcbiAgICAgIGNhc2UgJ3RpbWVsaW5lLWRheSc6IHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSB7IGZyb206IGN1cnJlbnQuZGF0ZSwgZW5kOiBjdXJyZW50LmVuZE9mKCdkYXknKS5kYXRlIH07XG4gICAgICAgIHJldHVybiByYW5nZTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3dlZWsnOiB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0geyBmcm9tOiBjdXJyZW50LmRhdGUsIGVuZDogY3VycmVudC5hZGQoJ2RheScsIDcpLmRhdGUgfTtcbiAgICAgICAgcmV0dXJuIHJhbmdlO1xuICAgICAgfVxuICAgICAgY2FzZSAnbW9udGgnOiB7XG4gICAgICAgIGNvbnN0IHsgZ3JpZFN0YXJ0RGF0ZSwgZ3JpZEVuZERhdGUgfSA9IHRoaXMuZ2V0R3JpZERhdGVSYW5nZShjdXJyZW50KTtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSB7IGZyb206IGdyaWRTdGFydERhdGUuZGF0ZSwgZW5kOiBncmlkRW5kRGF0ZS5hZGQoJ2RheScsIDEpLmRhdGUgfTtcbiAgICAgICAgcmV0dXJuIHJhbmdlO1xuICAgICAgfVxuICAgICAgY2FzZSAndGltZWxpbmUtbW9udGgnOiB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0geyBmcm9tOiBjdXJyZW50LnN0YXJ0T2YoJ21vbnRoJykuZGF0ZSwgZW5kOiBjdXJyZW50LmVuZE9mKCdtb250aCcpLmRhdGUgfTtcbiAgICAgICAgcmV0dXJuIHJhbmdlO1xuICAgICAgfVxuICAgICAgY2FzZSAnYWdlbmRhJzpcbiAgICAgIGNhc2UgJ3RpbWVsaW5lLW11bHRpLWRheSc6IHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSB7IGZyb206IGN1cnJlbnQuZGF0ZSwgZW5kOiBjdXJyZW50LmFkZCgnZGF5JywgdGhpcy5tdWx0aURheVZpZXdEYXlzQ291bnQoKSkuZGF0ZSB9O1xuICAgICAgICByZXR1cm4gcmFuZ2U7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICAjcmFuZ2VDaGFuZ2VkRWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcbiAgICB0aGlzLm9uUmFuZ2VDaGFuZ2VkLmVtaXQodGhpcy5yYW5nZSgpKTtcbiAgfSk7XG5cbiAgI3ZpZXdDaGFuZ2VkRWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCB2aWV3ID0gdGhpcy5zZWxlY3RlZFZpZXcoKTtcbiAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgdGhpcy5oYW5kbGVWaWV3Q2hhbmdlZCh0aGlzLnByZXZWaWV3KCksIHZpZXcpO1xuICAgIH0pO1xuICB9KTtcblxuICB2aWV3QXBwb2ludG1lbnRzID0gY29tcHV0ZWQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudFtdPigoKSA9PiB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuY3VycmVudERhdGUoKTtcbiAgICBjb25zdCBtYXBwZWQgPSB0aGlzLm1hcHBlZEFwcG9pbnRtZW50cygpO1xuICAgIGNvbnN0IHJhbmdlU3RhcnQgPSB0aGlzLnJhbmdlKCkuZnJvbTtcbiAgICBjb25zdCByYW5nZUVuZCA9IHRoaXMucmFuZ2UoKS5lbmQ7XG5cbiAgICBpZiAoIWN1cnJlbnQgfHwgbWFwcGVkLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtdO1xuXG4gICAgcmV0dXJuIG1hcHBlZC5maWx0ZXIoXG4gICAgICAoYXBwdCkgPT5cbiAgICAgICAgdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGFwcHQuc3RhcnREYXRlLCB0aGlzLmNhbGVuZGFyVHlwZSgpKS5jb21wYXJlKHJhbmdlRW5kLCAnc2Vjb25kJykgPD0gMCAmJlxuICAgICAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoYXBwdC5lbmREYXRlLCB0aGlzLmNhbGVuZGFyVHlwZSgpKS5jb21wYXJlKHJhbmdlU3RhcnQsICdzZWNvbmQnKSA+PSAwLFxuICAgICk7XG4gIH0pO1xuXG4gIHZpZXdDaGFuZ2VkKGU6IEFYVmFsdWVDaGFuZ2VkRXZlbnQ8QVhTY2hlZHVsZXJWaWV3Pikge1xuICAgIGNvbnN0IG5ld1ZpZXcgPSBlLnZhbHVlO1xuICAgIGNvbnN0IG9sZFZpZXcgPSBlLm9sZFZhbHVlO1xuICAgIHRoaXMuc2VsZWN0ZWRWaWV3LnNldChuZXdWaWV3KTtcblxuICAgIHRoaXMuaGFuZGxlVmlld0NoYW5nZWQob2xkVmlldywgbmV3Vmlldyk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVZpZXdDaGFuZ2VkKG9sZFZpZXc6IEFYU2NoZWR1bGVyVmlldywgbmV3VmlldzogQVhTY2hlZHVsZXJWaWV3KSB7XG4gICAgaWYgKG9sZFZpZXcgPT09ICd3ZWVrJykge1xuICAgICAgY29uc3Qgb2xkRGF5T2ZXZWVrID0gdGhpcy5wcmV2RGF0ZSgpLmRheU9mV2VlayAlIDc7XG4gICAgICBjb25zdCBkYXRlID0gdGhpcy5jdXJyZW50RGF0ZSgpLmFkZCgnZGF5Jywgb2xkRGF5T2ZXZWVrIC0gMSk7XG4gICAgICB0aGlzLmN1cnJlbnREYXRlLnNldChkYXRlKTtcbiAgICB9XG5cbiAgICB0aGlzLnByZXZEYXRlLnNldCh0aGlzLmN1cnJlbnREYXRlKCkpO1xuXG4gICAgaWYgKG5ld1ZpZXcgPT09ICd3ZWVrJykge1xuICAgICAgY29uc3QgY3VycmVudERhdGUgPSB0aGlzLmN1cnJlbnREYXRlKCk7XG4gICAgICBjb25zdCBjdXJyZW50RGF5T2ZXZWVrID0gY3VycmVudERhdGUuZGF5T2ZXZWVrO1xuICAgICAgY29uc3QgZGVzaXJlZEZpcnN0RGF5TmFtZSA9IHRoaXMuZmlyc3REYXlPZldlZWsoKTtcbiAgICAgIGNvbnN0IGRlc2lyZWRGaXJzdERheU51bWJlciA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXREYXlPZldlZWtOdW1iZXIoZGVzaXJlZEZpcnN0RGF5TmFtZSk7XG4gICAgICBjb25zdCBkYXlzVG9TdWJ0cmFjdCA9IChjdXJyZW50RGF5T2ZXZWVrIC0gZGVzaXJlZEZpcnN0RGF5TnVtYmVyICsgNykgJSA3O1xuICAgICAgY29uc3Qgc3RhcnRPZldlZWtEYXRlID0gY3VycmVudERhdGUuYWRkKCdkYXknLCAtZGF5c1RvU3VidHJhY3QpO1xuICAgICAgdGhpcy5jdXJyZW50RGF0ZS5zZXQoc3RhcnRPZldlZWtEYXRlKTtcbiAgICB9XG5cbiAgICB0aGlzLnByZXZWaWV3LnNldChuZXdWaWV3KTtcbiAgfVxuXG4gIG5leHRDbGljaygpIHtcbiAgICBzd2l0Y2ggKHRoaXMuc2VsZWN0ZWRWaWV3KCkpIHtcbiAgICAgIGNhc2UgJ2RheSc6XG4gICAgICBjYXNlICd0aW1lbGluZS1kYXknOlxuICAgICAgICB0aGlzLmN1cnJlbnREYXRlLnNldCh0aGlzLmN1cnJlbnREYXRlKCkuYWRkKCdkYXknLCAxKSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgdGhpcy5jdXJyZW50RGF0ZS5zZXQodGhpcy5jdXJyZW50RGF0ZSgpLmFkZCgnd2VlaycsIDEpKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2FnZW5kYSc6XG4gICAgICBjYXNlICd0aW1lbGluZS1tdWx0aS1kYXknOlxuICAgICAgICB0aGlzLmN1cnJlbnREYXRlLnNldCh0aGlzLmN1cnJlbnREYXRlKCkuYWRkKCdkYXknLCB0aGlzLm11bHRpRGF5Vmlld0RheXNDb3VudCgpKSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdtb250aCc6XG4gICAgICBjYXNlICd0aW1lbGluZS1tb250aCc6XG4gICAgICAgIHRoaXMuY3VycmVudERhdGUuc2V0KHRoaXMuY3VycmVudERhdGUoKS5hZGQoJ21vbnRoJywgMSkpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcmV2Q2xpY2soKSB7XG4gICAgc3dpdGNoICh0aGlzLnNlbGVjdGVkVmlldygpKSB7XG4gICAgICBjYXNlICdkYXknOlxuICAgICAgY2FzZSAndGltZWxpbmUtZGF5JzpcbiAgICAgICAgdGhpcy5jdXJyZW50RGF0ZS5zZXQodGhpcy5jdXJyZW50RGF0ZSgpLmFkZCgnZGF5JywgLTEpKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICB0aGlzLmN1cnJlbnREYXRlLnNldCh0aGlzLmN1cnJlbnREYXRlKCkuYWRkKCd3ZWVrJywgLTEpKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2FnZW5kYSc6XG4gICAgICBjYXNlICd0aW1lbGluZS1tdWx0aS1kYXknOlxuICAgICAgICB0aGlzLmN1cnJlbnREYXRlLnNldCh0aGlzLmN1cnJlbnREYXRlKCkuYWRkKCdkYXknLCAtdGhpcy5tdWx0aURheVZpZXdEYXlzQ291bnQoKSkpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgY2FzZSAndGltZWxpbmUtbW9udGgnOlxuICAgICAgICB0aGlzLmN1cnJlbnREYXRlLnNldCh0aGlzLmN1cnJlbnREYXRlKCkuYWRkKCdtb250aCcsIC0xKSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGNhbGVuZGFyRGF0ZUNoYW5nZWQoZTogQVhWYWx1ZUNoYW5nZWRFdmVudDxEYXRlPikge1xuICAgIGxldCBjdXJyZW50RGF0ZSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShlLnZhbHVlLCB0aGlzLmNhbGVuZGFyVHlwZSgpKTtcbiAgICBpZiAodGhpcy5zZWxlY3RlZFZpZXcoKSA9PT0gJ3dlZWsnKSB7XG4gICAgICBjb25zdCBjdXJyZW50RGF5T2ZXZWVrID0gY3VycmVudERhdGUuZGF5T2ZXZWVrO1xuICAgICAgY29uc3QgZGVzaXJlZEZpcnN0RGF5TmFtZSA9IHRoaXMuZmlyc3REYXlPZldlZWsoKTtcbiAgICAgIGNvbnN0IGRlc2lyZWRGaXJzdERheU51bWJlciA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXREYXlPZldlZWtOdW1iZXIoZGVzaXJlZEZpcnN0RGF5TmFtZSk7XG4gICAgICBjb25zdCBkYXlzVG9TdWJ0cmFjdCA9IChjdXJyZW50RGF5T2ZXZWVrIC0gZGVzaXJlZEZpcnN0RGF5TnVtYmVyICsgNykgJSA3O1xuICAgICAgY3VycmVudERhdGUgPSBjdXJyZW50RGF0ZS5hZGQoJ2RheScsIC1kYXlzVG9TdWJ0cmFjdCk7XG4gICAgfVxuICAgIGlmICghY3VycmVudERhdGUuZXF1YWwodGhpcy5jdXJyZW50RGF0ZSgpKSkge1xuICAgICAgdGhpcy5jdXJyZW50RGF0ZS5zZXQoY3VycmVudERhdGUpO1xuICAgIH1cbiAgICB0aGlzLmNhbGVuZGFyUG9wb3ZlcigpPy5jbG9zZSgpO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZUZ1bGxTY3JlZW4oKSB7XG4gICAgaWYgKCF0aGlzLmlzRnVsbFNjcmVlbigpKSB0aGlzLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnYXgtZnVsbC1zY3JlZW4tY29udGFpbmVyJyk7XG4gICAgZWxzZSB0aGlzLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnYXgtZnVsbC1zY3JlZW4tY29udGFpbmVyJyk7XG4gICAgdGhpcy5pc0Z1bGxTY3JlZW4uc2V0KCF0aGlzLmlzRnVsbFNjcmVlbigpKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZWZyZXNoKGFwcG9pbnRtZW50cz86IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRbXSkge1xuICAgIGlmIChhcHBvaW50bWVudHMpIHtcbiAgICAgIGNvbnN0IG5ld0FwcG9pbnRtZW50cyA9IHRoaXMuX2FwcG9pbnRtZW50cygpLm1hcCgoYXBwdCkgPT4ge1xuICAgICAgICByZXR1cm4gYXBwb2ludG1lbnRzLmZpbmQoKGEpID0+IGEuaWQgPT09IGFwcHQuaWQpID8/IGFwcHQ7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX2FwcG9pbnRtZW50cy5zZXQobmV3QXBwb2ludG1lbnRzKTtcbiAgICAgIHRoaXMub25EYXRhTG9hZGVkLmVtaXQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB0aGlzLmRhdGFTb3VyY2UoKSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3QgZnVuYyA9IHRoaXMuZGF0YVNvdXJjZSgpIGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRMb2FkZXI7XG4gICAgICBjb25zdCByYW5nZSA9IHtcbiAgICAgICAgZW5kOiB0aGlzLnJhbmdlKCkuZW5kLFxuICAgICAgICBmcm9tOiB0aGlzLnJhbmdlKCkuZnJvbSxcbiAgICAgIH07XG4gICAgICBjb25zdCBsaXN0ID0gYXdhaXQgZnVuYyh7IHJhbmdlIH0pO1xuICAgICAgdGhpcy5fYXBwb2ludG1lbnRzLnNldChsaXN0KTtcbiAgICAgIHRoaXMub25EYXRhTG9hZGVkLmVtaXQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbGlzdCA9IHRoaXMuZGF0YVNvdXJjZSgpIGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRbXTtcbiAgICB0aGlzLl9hcHBvaW50bWVudHMuc2V0KGxpc3QpO1xuICAgIHRoaXMub25EYXRhTG9hZGVkLmVtaXQoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1jb250YWluZXJcIj5cbiAgQGlmIChoYXNIZWFkZXIoKSkge1xuICAgIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItaGVhZGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLWRhdGVcIj5cbiAgICAgICAgPGF4LWJ1dHRvbiBsb29rPVwiYmxhbmtcIiAob25DbGljayk9XCJwcmV2Q2xpY2soKVwiPlxuICAgICAgICAgIDxheC1pY29uXG4gICAgICAgICAgICBjbGFzcz1cImF4LWljb24gYXgtdGV4dC14bFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdheC1pY29uLWNoZXZyb24tbGVmdCc6ICFydGwoKSxcbiAgICAgICAgICAgICAgJ2F4LWljb24tY2hldnJvbi1yaWdodCc6IHJ0bCgpLFxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgPjwvYXgtaWNvbj5cbiAgICAgICAgPC9heC1idXR0b24+XG4gICAgICAgIDxheC1idXR0b24gbG9vaz1cImJsYW5rXCIgW3RleHRdPVwiY3VycmVudERhdGVUZXh0KClcIiAjZGF0ZT48L2F4LWJ1dHRvbj5cbiAgICAgICAgPGF4LWJ1dHRvbiBsb29rPVwiYmxhbmtcIiAob25DbGljayk9XCJuZXh0Q2xpY2soKVwiPlxuICAgICAgICAgIDxheC1pY29uXG4gICAgICAgICAgICBjbGFzcz1cImF4LWljb24gYXgtdGV4dC14bFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdheC1pY29uLWNoZXZyb24tcmlnaHQnOiAhcnRsKCksXG4gICAgICAgICAgICAgICdheC1pY29uLWNoZXZyb24tbGVmdCc6IHJ0bCgpLFxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgPjwvYXgtaWNvbj5cbiAgICAgICAgPC9heC1idXR0b24+XG4gICAgICAgIDxheC1wb3BvdmVyIFt0YXJnZXRdPVwiZGF0ZVwiIFtwbGFjZW1lbnRdPVwiJ2JvdHRvbSdcIiAjY2FsZW5kYXJQb3BvdmVyPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1vdmVybGF5LXBhbmVcIj5cbiAgICAgICAgICAgIDxheC1jYWxlbmRhclxuICAgICAgICAgICAgICBbdHlwZV09XCJjYWxlbmRhclR5cGUoKVwiXG4gICAgICAgICAgICAgIFtkZXB0aF09XCJjYWxlbmRhckRlcHRoKClcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJjdXJyZW50RGF0ZSgpXCJcbiAgICAgICAgICAgICAgKG9uVmFsdWVDaGFuZ2VkKT1cImNhbGVuZGFyRGF0ZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9heC1jYWxlbmRhcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9heC1wb3BvdmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLWFjdGlvbnNcIj5cbiAgICAgICAgPGF4LXNlbGVjdC1ib3hcbiAgICAgICAgICBbZHJvcGRvd25XaWR0aF09XCIyMDBcIlxuICAgICAgICAgIFtuZ01vZGVsXT1cInNlbGVjdGVkVmlldygpXCJcbiAgICAgICAgICBbZGF0YVNvdXJjZV09XCJ2aWV3c0RhdGFTb3VyY2UoKVwiXG4gICAgICAgICAgKG9uVmFsdWVDaGFuZ2VkKT1cInZpZXdDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICA+PC9heC1zZWxlY3QtYm94PlxuXG4gICAgICAgIEBpZiAoYWxsb3dGdWxsU2NyZWVuKCkpIHtcbiAgICAgICAgICA8YXgtYnV0dG9uIGxvb2s9XCJibGFua1wiIChvbkNsaWNrKT1cImhhbmRsZUZ1bGxTY3JlZW4oKVwiPlxuICAgICAgICAgICAgPGF4LWljb24+XG4gICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmYS1zb2xpZCBmYS1leHBhbmRcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2ZhLWNvbXByZXNzJzogaXNGdWxsU2NyZWVuKCksICdmYS1leHBhbmQnOiAhaXNGdWxsU2NyZWVuKCkgfVwiXG4gICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICA8L2F4LWljb24+XG4gICAgICAgICAgPC9heC1idXR0b24+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG4gIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItdmlld3MtY29udGFpbmVyXCI+XG4gICAgQHN3aXRjaCAoc2VsZWN0ZWRWaWV3KCkpIHtcbiAgICAgIEBjYXNlICgnZGF5Jykge1xuICAgICAgICA8YXgtc2NoZWR1bGVyLWRheS12aWV3XG4gICAgICAgICAgW2RhdGVdPVwiY3VycmVudERhdGUoKVwiXG4gICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5KClcIlxuICAgICAgICAgIFtkcmFnZ2FibGVdPVwiZHJhZ2dhYmxlKClcIlxuICAgICAgICAgIFtjYWxlbmRhcl09XCJjYWxlbmRhclR5cGUoKVwiXG4gICAgICAgICAgW2VuZERheUhvdXJdPVwiZW5kRGF5SG91cigpXCJcbiAgICAgICAgICBbc3RhcnREYXlIb3VyXT1cInN0YXJ0RGF5SG91cigpXCJcbiAgICAgICAgICBbYXBwb2ludG1lbnRzXT1cInZpZXdBcHBvaW50bWVudHMoKVwiXG4gICAgICAgICAgKHNsb3RDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKHNsb3REYmxDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdERibENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKHNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90UmlnaHRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChvbkFwcG9pbnRtZW50RHJvcEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50RHJvcEludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50RGJsQ2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudFJpZ2h0Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgPjwvYXgtc2NoZWR1bGVyLWRheS12aWV3PlxuICAgICAgfVxuICAgICAgQGNhc2UgKCd3ZWVrJykge1xuICAgICAgICA8YXgtc2NoZWR1bGVyLXdlZWstdmlld1xuICAgICAgICAgIFtkYXRlXT1cImN1cnJlbnREYXRlKClcIlxuICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgICAgICBbZHJhZ2dhYmxlXT1cImRyYWdnYWJsZSgpXCJcbiAgICAgICAgICBbY2FsZW5kYXJdPVwiY2FsZW5kYXJUeXBlKClcIlxuICAgICAgICAgIFtlbmREYXlIb3VyXT1cImVuZERheUhvdXIoKVwiXG4gICAgICAgICAgW3N0YXJ0RGF5SG91cl09XCJzdGFydERheUhvdXIoKVwiXG4gICAgICAgICAgW2FwcG9pbnRtZW50c109XCJ2aWV3QXBwb2ludG1lbnRzKClcIlxuICAgICAgICAgIChzbG90Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3RDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChzbG90RGJsQ2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3REYmxDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChzbG90UmlnaHRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdFJpZ2h0Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAob25BcHBvaW50bWVudERyb3BJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudERyb3BJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudERibENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50UmlnaHRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnRSaWdodENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgID48L2F4LXNjaGVkdWxlci13ZWVrLXZpZXc+XG4gICAgICB9XG4gICAgICBAY2FzZSAoJ21vbnRoJykge1xuICAgICAgICA8YXgtc2NoZWR1bGVyLW1vbnRoLXZpZXdcbiAgICAgICAgICBbZGF0ZV09XCJjdXJyZW50RGF0ZSgpXCJcbiAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICAgICAgW2RyYWdnYWJsZV09XCJkcmFnZ2FibGUoKVwiXG4gICAgICAgICAgW2NhbGVuZGFyXT1cImNhbGVuZGFyVHlwZSgpXCJcbiAgICAgICAgICBbZmlyc3REYXlPZldlZWtdPVwiZmlyc3REYXlPZldlZWsoKVwiXG4gICAgICAgICAgW2FwcG9pbnRtZW50c109XCJ2aWV3QXBwb2ludG1lbnRzKClcIlxuICAgICAgICAgIChzbG90Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3RDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChzbG90RGJsQ2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3REYmxDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChzbG90UmlnaHRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdFJpZ2h0Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAob25BcHBvaW50bWVudERyb3BJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudERyb3BJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudERibENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50UmlnaHRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnRSaWdodENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgID48L2F4LXNjaGVkdWxlci1tb250aC12aWV3PlxuICAgICAgfVxuICAgICAgQGNhc2UgKCd0aW1lbGluZS1kYXknKSB7XG4gICAgICAgIDxheC1zY2hlZHVsZXItdGltZWxpbmUtZGF5LXZpZXdcbiAgICAgICAgICBbZGF0ZV09XCJjdXJyZW50RGF0ZSgpXCJcbiAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICAgICAgW2RyYWdnYWJsZV09XCJkcmFnZ2FibGUoKVwiXG4gICAgICAgICAgW2NhbGVuZGFyXT1cImNhbGVuZGFyVHlwZSgpXCJcbiAgICAgICAgICBbZW5kRGF5SG91cl09XCJlbmREYXlIb3VyKClcIlxuICAgICAgICAgIFtzdGFydERheUhvdXJdPVwic3RhcnREYXlIb3VyKClcIlxuICAgICAgICAgIFthcHBvaW50bWVudHNdPVwidmlld0FwcG9pbnRtZW50cygpXCJcbiAgICAgICAgICAoc2xvdENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2xvdERibENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90RGJsQ2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3RSaWdodENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKG9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnREcm9wSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnREYmxDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnREYmxDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50UmlnaHRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgIDwvYXgtc2NoZWR1bGVyLXRpbWVsaW5lLWRheS12aWV3PlxuICAgICAgfVxuICAgICAgQGNhc2UgKCd0aW1lbGluZS1tdWx0aS1kYXknKSB7XG4gICAgICAgIDxheC1zY2hlZHVsZXItdGltZWxpbmUtbXVsdGktZGF5LXZpZXdcbiAgICAgICAgICBbZGF0ZV09XCJjdXJyZW50RGF0ZSgpXCJcbiAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICAgICAgW2RyYWdnYWJsZV09XCJkcmFnZ2FibGUoKVwiXG4gICAgICAgICAgW2NhbGVuZGFyXT1cImNhbGVuZGFyVHlwZSgpXCJcbiAgICAgICAgICBbZW5kRGF5SG91cl09XCJlbmREYXlIb3VyKClcIlxuICAgICAgICAgIFtzdGFydERheUhvdXJdPVwic3RhcnREYXlIb3VyKClcIlxuICAgICAgICAgIFthcHBvaW50bWVudHNdPVwidmlld0FwcG9pbnRtZW50cygpXCJcbiAgICAgICAgICBbZGF5c0NvdW50XT1cIm11bHRpRGF5Vmlld0RheXNDb3VudCgpXCJcbiAgICAgICAgICAoc2xvdENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2xvdERibENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90RGJsQ2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3RSaWdodENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKG9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnREcm9wSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnREYmxDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnREYmxDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50UmlnaHRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgIDwvYXgtc2NoZWR1bGVyLXRpbWVsaW5lLW11bHRpLWRheS12aWV3PlxuICAgICAgfVxuICAgICAgQGNhc2UgKCd0aW1lbGluZS1tb250aCcpIHtcbiAgICAgICAgPGF4LXNjaGVkdWxlci10aW1lbGluZS1tb250aC12aWV3XG4gICAgICAgICAgW2RhdGVdPVwiY3VycmVudERhdGUoKVwiXG4gICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5KClcIlxuICAgICAgICAgIFtkcmFnZ2FibGVdPVwiZHJhZ2dhYmxlKClcIlxuICAgICAgICAgIFtjYWxlbmRhcl09XCJjYWxlbmRhclR5cGUoKVwiXG4gICAgICAgICAgW2FwcG9pbnRtZW50c109XCJ2aWV3QXBwb2ludG1lbnRzKClcIlxuICAgICAgICAgIChzbG90Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3RDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChzbG90RGJsQ2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3REYmxDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChzbG90UmlnaHRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdFJpZ2h0Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAob25BcHBvaW50bWVudERyb3BJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudERyb3BJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudERibENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50UmlnaHRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnRSaWdodENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgPC9heC1zY2hlZHVsZXItdGltZWxpbmUtbW9udGgtdmlldz5cbiAgICAgIH1cbiAgICAgIEBjYXNlICgnYWdlbmRhJykge1xuICAgICAgICA8YXgtc2NoZWR1bGVyLWFnZW5kYS12aWV3XG4gICAgICAgICAgW2RhdGVdPVwiY3VycmVudERhdGUoKVwiXG4gICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5KClcIlxuICAgICAgICAgIFtkcmFnZ2FibGVdPVwiZHJhZ2dhYmxlKClcIlxuICAgICAgICAgIFtjYWxlbmRhcl09XCJjYWxlbmRhclR5cGUoKVwiXG4gICAgICAgICAgW2FwcG9pbnRtZW50c109XCJ2aWV3QXBwb2ludG1lbnRzKClcIlxuICAgICAgICAgIChzbG90Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3RDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChzbG90RGJsQ2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3REYmxDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChzbG90UmlnaHRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdFJpZ2h0Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAob25BcHBvaW50bWVudERyb3BJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudERyb3BJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudERibENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50UmlnaHRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnRSaWdodENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgPC9heC1zY2hlZHVsZXItYWdlbmRhLXZpZXc+XG4gICAgICB9XG4gICAgfVxuICA8L2Rpdj5cbjwvZGl2PlxuIl19","import { NgModule } from '@angular/core';\nimport { AXSchedulerComponent } from './scheduler.component';\nimport { AXSchedulerDayViewComponent } from './views/day/scheduler-day-view.component';\nimport { AXSchedulerMonthViewComponent } from './views/month/scheduler-month-view.component';\nimport { AXSchedulerTimelineDayViewComponent } from './views/timeline-day/scheduler-timeline-day-view.component';\nimport { AXSchedulerWeekViewComponent } from './views/week/scheduler-week-view.component';\nimport * as i0 from \"@angular/core\";\nconst COMPONENT = [\n AXSchedulerComponent,\n AXSchedulerDayViewComponent,\n AXSchedulerWeekViewComponent,\n AXSchedulerMonthViewComponent,\n AXSchedulerTimelineDayViewComponent,\n];\nexport class AXSchedulerModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerModule, imports: [AXSchedulerComponent,\n AXSchedulerDayViewComponent,\n AXSchedulerWeekViewComponent,\n AXSchedulerMonthViewComponent,\n AXSchedulerTimelineDayViewComponent], exports: [AXSchedulerComponent,\n AXSchedulerDayViewComponent,\n AXSchedulerWeekViewComponent,\n AXSchedulerMonthViewComponent,\n AXSchedulerTimelineDayViewComponent] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerModule, imports: [COMPONENT] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [...COMPONENT],\n exports: [...COMPONENT],\n providers: [],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NyYy9saWIvc2NoZWR1bGVyLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzdGLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQ2pILE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDOztBQUUxRixNQUFNLFNBQVMsR0FBRztJQUNoQixvQkFBb0I7SUFDcEIsMkJBQTJCO0lBQzNCLDRCQUE0QjtJQUM1Qiw2QkFBNkI7SUFDN0IsbUNBQW1DO0NBQ3BDLENBQUM7QUFPRixNQUFNLE9BQU8saUJBQWlCOzhHQUFqQixpQkFBaUI7K0dBQWpCLGlCQUFpQixZQVo1QixvQkFBb0I7WUFDcEIsMkJBQTJCO1lBQzNCLDRCQUE0QjtZQUM1Qiw2QkFBNkI7WUFDN0IsbUNBQW1DLGFBSm5DLG9CQUFvQjtZQUNwQiwyQkFBMkI7WUFDM0IsNEJBQTRCO1lBQzVCLDZCQUE2QjtZQUM3QixtQ0FBbUM7K0dBUXhCLGlCQUFpQixZQUpmLFNBQVM7OzJGQUlYLGlCQUFpQjtrQkFMN0IsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQztvQkFDdkIsT0FBTyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUM7b0JBQ3ZCLFNBQVMsRUFBRSxFQUFFO2lCQUNkIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYU2NoZWR1bGVyQ29tcG9uZW50IH0gZnJvbSAnLi9zY2hlZHVsZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEFYU2NoZWR1bGVyRGF5Vmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3MvZGF5L3NjaGVkdWxlci1kYXktdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJNb250aFZpZXdDb21wb25lbnQgfSBmcm9tICcuL3ZpZXdzL21vbnRoL3NjaGVkdWxlci1tb250aC12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWFNjaGVkdWxlclRpbWVsaW5lRGF5Vmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3MvdGltZWxpbmUtZGF5L3NjaGVkdWxlci10aW1lbGluZS1kYXktdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJXZWVrVmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3Mvd2Vlay9zY2hlZHVsZXItd2Vlay12aWV3LmNvbXBvbmVudCc7XG5cbmNvbnN0IENPTVBPTkVOVCA9IFtcbiAgQVhTY2hlZHVsZXJDb21wb25lbnQsXG4gIEFYU2NoZWR1bGVyRGF5Vmlld0NvbXBvbmVudCxcbiAgQVhTY2hlZHVsZXJXZWVrVmlld0NvbXBvbmVudCxcbiAgQVhTY2hlZHVsZXJNb250aFZpZXdDb21wb25lbnQsXG4gIEFYU2NoZWR1bGVyVGltZWxpbmVEYXlWaWV3Q29tcG9uZW50LFxuXTtcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogWy4uLkNPTVBPTkVOVF0sXG4gIGV4cG9ydHM6IFsuLi5DT01QT05FTlRdLFxuICBwcm92aWRlcnM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBBWFNjaGVkdWxlck1vZHVsZSB7fVxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNvbXBvbmVudHMtc2NoZWR1bGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9zY2hlZHVsZXIvc3JjL2Fjb3JleC1jb21wb25lbnRzLXNjaGVkdWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}
|