@sbb-esta/lyne-elements-experimental-dev 4.7.0-dev.1773388997 → 4.7.0-dev.1773393170
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/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.js +76 -65
- package/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.component.js +52 -72
- package/autocomplete-grid/autocomplete-grid-button.js +6 -3
- package/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.component.js +17 -2
- package/autocomplete-grid/autocomplete-grid-cell.js +7 -4
- package/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.component.js +21 -20
- package/autocomplete-grid/autocomplete-grid-optgroup.js +6 -3
- package/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.component.js +33 -2
- package/autocomplete-grid/autocomplete-grid-option.js +9 -4
- package/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.component.js +22 -2
- package/autocomplete-grid/autocomplete-grid-row.js +7 -4
- package/autocomplete-grid/autocomplete-grid.js +6 -3
- package/autocomplete-grid.js +21 -9
- package/autocomplete-grid.pure.js +15 -7
- package/core/datetime/date-helper.js +191 -2
- package/core/datetime.js +5 -2
- package/core/timetable/access-leg-helper.js +71 -76
- package/core/timetable/timetable-helper.js +11 -9
- package/core/timetable/timetable-properties.js +1 -0
- package/core/timetable.js +7 -3
- package/custom-elements.json +84 -84
- package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.js +122 -114
- package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.component.js +70 -92
- package/development/autocomplete-grid/autocomplete-grid-button.js +4 -6
- package/development/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.component.js +29 -2
- package/development/autocomplete-grid/autocomplete-grid-cell.js +5 -7
- package/development/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.component.js +22 -27
- package/development/autocomplete-grid/autocomplete-grid-optgroup.js +4 -6
- package/development/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.component.js +109 -2
- package/development/autocomplete-grid/autocomplete-grid-option.js +7 -7
- package/development/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.component.js +91 -2
- package/development/autocomplete-grid/autocomplete-grid-row.js +5 -7
- package/development/autocomplete-grid/autocomplete-grid.js +4 -6
- package/development/autocomplete-grid.js +14 -10
- package/development/autocomplete-grid.pure.js +13 -4
- package/development/core/datetime/date-helper.js +285 -2
- package/development/core/datetime.js +6 -2
- package/development/core/timetable/access-leg-helper.js +82 -104
- package/development/core/timetable/timetable-helper.js +17 -16
- package/development/core/timetable/timetable-properties.js +2 -0
- package/development/core/timetable.js +8 -3
- package/development/differenceInMinutes-B0dawX-5.js +26 -0
- package/development/format-BMkeaqaF.js +1433 -0
- package/development/isValid-BYRch7pV.js +53 -0
- package/development/journey-summary/journey-summary.component.js +288 -2
- package/development/journey-summary.js +5 -8
- package/development/journey-summary.pure.js +5 -2
- package/development/pearl-chain/pearl-chain.component.js +634 -2
- package/development/pearl-chain-time/pearl-chain-time.component.js +306 -2
- package/development/pearl-chain-time.js +5 -8
- package/development/pearl-chain-time.pure.js +5 -2
- package/development/pearl-chain-vertical/pearl-chain-vertical.component.js +28 -2
- package/development/pearl-chain-vertical-item/pearl-chain-vertical-item.component.js +393 -2
- package/development/pearl-chain-vertical-item.js +5 -8
- package/development/pearl-chain-vertical-item.pure.js +5 -2
- package/development/pearl-chain-vertical.js +5 -8
- package/development/pearl-chain-vertical.pure.js +5 -2
- package/development/pearl-chain.js +5 -8
- package/development/pearl-chain.pure.js +5 -2
- package/development/seat-reservation/common/mapper/icon-mapper.js +71 -168
- package/development/seat-reservation/common/mapper/mapper.js +122 -153
- package/development/seat-reservation/common/mapper/sample-data/seat-reservation-sample-data-bus.js +559 -570
- package/development/seat-reservation/common/mapper/sample-data/seat-reservation-sample-data-decks.js +972 -992
- package/development/seat-reservation/common/mapper/sample-data/seat-reservation-sample-data-giruno.js +20367 -20334
- package/development/seat-reservation/common/mapper/sample-data/seat-reservation-sample-data-others.js +1738 -1731
- package/development/seat-reservation/common/mapper/sample-data/seat-reservation-sample-data-train.js +9782 -9741
- package/development/seat-reservation/common/mapper.js +8 -1
- package/development/seat-reservation/common/svgs.js +46 -2
- package/development/seat-reservation/common/translations/i18n.js +900 -1118
- package/development/seat-reservation/common/translations.js +4 -1
- package/development/seat-reservation/common/types.js +2 -0
- package/development/seat-reservation/common.js +11 -7
- package/development/seat-reservation/seat-reservation/seat-reservation-base-element.js +1230 -1305
- package/development/seat-reservation/seat-reservation/seat-reservation.component.js +859 -2
- package/development/seat-reservation/seat-reservation-area/seat-reservation-area.component.js +106 -2
- package/development/seat-reservation/seat-reservation-area.js +5 -7
- package/development/seat-reservation/seat-reservation-graphic/seat-reservation-assets.js +34 -35
- package/development/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.js +162 -2
- package/development/seat-reservation/seat-reservation-graphic.js +5 -7
- package/development/seat-reservation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.js +713 -2
- package/development/seat-reservation/seat-reservation-navigation-coach.js +5 -7
- package/development/seat-reservation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.js +131 -2
- package/development/seat-reservation/seat-reservation-navigation-services.js +5 -7
- package/development/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.js +601 -2
- package/development/seat-reservation/seat-reservation-place-control.js +5 -7
- package/development/seat-reservation/seat-reservation-scoped/seat-reservation-scoped.component.js +22 -2
- package/development/seat-reservation/seat-reservation-scoped.js +5 -7
- package/development/seat-reservation/seat-reservation.js +6 -7
- package/development/seat-reservation.js +28 -15
- package/development/seat-reservation.pure.js +28 -10
- package/development/timetable-duration/timetable-duration.component.js +108 -2
- package/development/timetable-duration.js +5 -8
- package/development/timetable-duration.pure.js +5 -2
- package/development/timetable-row/timetable-row.component.js +781 -2
- package/development/timetable-row.js +13 -8
- package/development/timetable-row.pure.js +12 -2
- package/development/toDate-BWb6Z1JD.js +24 -0
- package/differenceInMinutes-COvvdYsJ.js +23 -0
- package/format-CmKROkbc.js +1186 -0
- package/isValid-m3_OsPaB.js +45 -0
- package/journey-summary/journey-summary.component.js +194 -2
- package/journey-summary.js +4 -5
- package/journey-summary.pure.js +4 -2
- package/package.json +2 -2
- package/pearl-chain/pearl-chain.component.js +165 -2
- package/pearl-chain-time/pearl-chain-time.component.js +157 -2
- package/pearl-chain-time.js +4 -5
- package/pearl-chain-time.pure.js +4 -2
- package/pearl-chain-vertical/pearl-chain-vertical.component.js +17 -2
- package/pearl-chain-vertical-item/pearl-chain-vertical-item.component.js +77 -2
- package/pearl-chain-vertical-item.js +4 -5
- package/pearl-chain-vertical-item.pure.js +4 -2
- package/pearl-chain-vertical.js +4 -5
- package/pearl-chain-vertical.pure.js +4 -2
- package/pearl-chain.js +4 -5
- package/pearl-chain.pure.js +4 -2
- package/seat-reservation/common/mapper/icon-mapper.js +71 -71
- package/seat-reservation/common/mapper/mapper.js +89 -95
- package/seat-reservation/common/mapper/sample-data/seat-reservation-sample-data-bus.js +558 -568
- package/seat-reservation/common/mapper/sample-data/seat-reservation-sample-data-decks.js +970 -989
- package/seat-reservation/common/mapper/sample-data/seat-reservation-sample-data-giruno.js +20366 -20332
- package/seat-reservation/common/mapper/sample-data/seat-reservation-sample-data-others.js +1737 -1729
- package/seat-reservation/common/mapper/sample-data/seat-reservation-sample-data-train.js +9781 -9739
- package/seat-reservation/common/mapper.js +9 -3
- package/seat-reservation/common/svgs.js +243 -2
- package/seat-reservation/common/translations/i18n.js +891 -1084
- package/seat-reservation/common/translations.js +4 -2
- package/seat-reservation/common/types.js +1 -0
- package/seat-reservation/common.js +15 -9
- package/seat-reservation/seat-reservation/seat-reservation-base-element.js +810 -832
- package/seat-reservation/seat-reservation/seat-reservation.component.js +420 -2
- package/seat-reservation/seat-reservation-area/seat-reservation-area.component.js +51 -2
- package/seat-reservation/seat-reservation-area.js +7 -4
- package/seat-reservation/seat-reservation-graphic/seat-reservation-assets.js +71 -68
- package/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.js +75 -2
- package/seat-reservation/seat-reservation-graphic.js +7 -4
- package/seat-reservation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.js +234 -2
- package/seat-reservation/seat-reservation-navigation-coach.js +7 -4
- package/seat-reservation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.js +85 -2
- package/seat-reservation/seat-reservation-navigation-services.js +7 -4
- package/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.js +203 -2
- package/seat-reservation/seat-reservation-place-control.js +7 -4
- package/seat-reservation/seat-reservation-scoped/seat-reservation-scoped.component.js +13 -2
- package/seat-reservation/seat-reservation-scoped.js +7 -4
- package/seat-reservation/seat-reservation.js +9 -5
- package/seat-reservation.js +39 -17
- package/seat-reservation.pure.js +32 -15
- package/timetable-duration/timetable-duration.component.js +57 -2
- package/timetable-duration.js +4 -5
- package/timetable-duration.pure.js +4 -2
- package/timetable-row/timetable-row.component.js +427 -2
- package/timetable-row.js +13 -6
- package/timetable-row.pure.js +11 -2
- package/toDate-Bw2KTWeq.js +15 -0
- package/autocomplete-grid-cell.component-Dak9wlBr.js +0 -24
- package/autocomplete-grid-option.component-DNRFHOwc.js +0 -37
- package/autocomplete-grid-row.component-DBHZQ0GQ.js +0 -27
- package/date-helper-CGproP5d.js +0 -185
- package/development/autocomplete-grid-cell.component-BBvM4o2H.js +0 -42
- package/development/autocomplete-grid-option.component-QzfM5eIE.js +0 -123
- package/development/autocomplete-grid-row.component-H8sCTCkT.js +0 -104
- package/development/date-helper-8_Y-PuHh.js +0 -520
- package/development/differenceInMinutes-DN_1Rk3O.js +0 -110
- package/development/format-Bbrn2bgo.js +0 -1848
- package/development/isValid-C-HzKv4v.js +0 -178
- package/development/journey-summary.component-uGhZvA4p.js +0 -385
- package/development/pearl-chain-time.component-B8mayTWD.js +0 -415
- package/development/pearl-chain-vertical-item.component-BDzbcIaf.js +0 -435
- package/development/pearl-chain-vertical.component-CswE7b3M.js +0 -39
- package/development/pearl-chain.component-wpsTvoSe.js +0 -704
- package/development/seat-reservation-area.component-BK92ZtFo.js +0 -138
- package/development/seat-reservation-graphic.component-cUnsHh5x.js +0 -193
- package/development/seat-reservation-navigation-coach.component-D6Bglus8.js +0 -828
- package/development/seat-reservation-navigation-services.component-DYJ6Ddkg.js +0 -179
- package/development/seat-reservation-place-control.component-Bg9evKBW.js +0 -726
- package/development/seat-reservation-scoped.component-DRQ_I702.js +0 -31
- package/development/seat-reservation.component-Cq_aJKR0.js +0 -818
- package/development/svgs-C3JMWR26.js +0 -28
- package/development/timetable-duration.component-DI0lET17.js +0 -125
- package/development/timetable-row.component-CAED6Zwc.js +0 -932
- package/development/toDate-Biiv3kyf.js +0 -150
- package/differenceInMinutes-Dr9gRqtu.js +0 -27
- package/format-CM5exOsN.js +0 -1103
- package/isValid-B9oVW3lA.js +0 -36
- package/journey-summary.component-Cq_4kaOp.js +0 -264
- package/pearl-chain-time.component-DGDW5S1c.js +0 -239
- package/pearl-chain-vertical-item.component-G22bWhLU.js +0 -108
- package/pearl-chain-vertical.component-CXIDT5RD.js +0 -21
- package/pearl-chain.component-DmjkVIva.js +0 -194
- package/seat-reservation-area.component-n-9rGn_y.js +0 -75
- package/seat-reservation-graphic.component-YTXRmKt0.js +0 -102
- package/seat-reservation-navigation-coach.component-YJ0vaYmO.js +0 -333
- package/seat-reservation-navigation-services.component-C3xnLJg2.js +0 -127
- package/seat-reservation-place-control.component-DmBAfM6K.js +0 -322
- package/seat-reservation-scoped.component-DPkz6u17.js +0 -17
- package/seat-reservation.component-C_anMkgw.js +0 -364
- package/svgs-D9arBcqr.js +0 -26
- package/timetable-duration.component-DCu8Phts.js +0 -65
- package/timetable-row.component-BVRCB3xK.js +0 -559
- package/toDate-p-Tpkb7t.js +0 -16
|
@@ -1,2 +1,285 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { i18nDurationDay, i18nDurationHour, i18nDurationMinute } from "@sbb-esta/lyne-elements/core/i18n.js";
|
|
2
|
+
import { n as normalizeDates, d as differenceInCalendarDays, i as isValid } from "../../isValid-BYRch7pV.js";
|
|
3
|
+
import { t as toDate, c as constructFrom, b as millisecondsInHour, m as millisecondsInMinute } from "../../toDate-BWb6Z1JD.js";
|
|
4
|
+
import { g as getRoundingMethod, a as addMinutes, d as differenceInMinutes } from "../../differenceInMinutes-B0dawX-5.js";
|
|
5
|
+
function addDays(date, amount, options) {
|
|
6
|
+
const _date = toDate(date, options?.in);
|
|
7
|
+
if (isNaN(amount)) return constructFrom(date, NaN);
|
|
8
|
+
if (!amount) return _date;
|
|
9
|
+
_date.setDate(_date.getDate() + amount);
|
|
10
|
+
return _date;
|
|
11
|
+
}
|
|
12
|
+
function addMilliseconds(date, amount, options) {
|
|
13
|
+
return constructFrom(date, +toDate(date) + amount);
|
|
14
|
+
}
|
|
15
|
+
function addHours(date, amount, options) {
|
|
16
|
+
return addMilliseconds(date, amount * millisecondsInHour);
|
|
17
|
+
}
|
|
18
|
+
function differenceInDays(laterDate, earlierDate, options) {
|
|
19
|
+
const [laterDate_, earlierDate_] = normalizeDates(
|
|
20
|
+
options?.in,
|
|
21
|
+
laterDate,
|
|
22
|
+
earlierDate
|
|
23
|
+
);
|
|
24
|
+
const sign = compareLocalAsc(laterDate_, earlierDate_);
|
|
25
|
+
const difference = Math.abs(
|
|
26
|
+
differenceInCalendarDays(laterDate_, earlierDate_)
|
|
27
|
+
);
|
|
28
|
+
laterDate_.setDate(laterDate_.getDate() - sign * difference);
|
|
29
|
+
const isLastDayNotFull = Number(
|
|
30
|
+
compareLocalAsc(laterDate_, earlierDate_) === -sign
|
|
31
|
+
);
|
|
32
|
+
const result = sign * (difference - isLastDayNotFull);
|
|
33
|
+
return result === 0 ? 0 : result;
|
|
34
|
+
}
|
|
35
|
+
function compareLocalAsc(laterDate, earlierDate) {
|
|
36
|
+
const diff = laterDate.getFullYear() - earlierDate.getFullYear() || laterDate.getMonth() - earlierDate.getMonth() || laterDate.getDate() - earlierDate.getDate() || laterDate.getHours() - earlierDate.getHours() || laterDate.getMinutes() - earlierDate.getMinutes() || laterDate.getSeconds() - earlierDate.getSeconds() || laterDate.getMilliseconds() - earlierDate.getMilliseconds();
|
|
37
|
+
if (diff < 0) return -1;
|
|
38
|
+
if (diff > 0) return 1;
|
|
39
|
+
return diff;
|
|
40
|
+
}
|
|
41
|
+
function differenceInHours(laterDate, earlierDate, options) {
|
|
42
|
+
const [laterDate_, earlierDate_] = normalizeDates(
|
|
43
|
+
options?.in,
|
|
44
|
+
laterDate,
|
|
45
|
+
earlierDate
|
|
46
|
+
);
|
|
47
|
+
const diff = (+laterDate_ - +earlierDate_) / millisecondsInHour;
|
|
48
|
+
return getRoundingMethod(options?.roundingMethod)(diff);
|
|
49
|
+
}
|
|
50
|
+
function subDays(date, amount, options) {
|
|
51
|
+
return addDays(date, -amount, options);
|
|
52
|
+
}
|
|
53
|
+
function parseISO(argument, options) {
|
|
54
|
+
const invalidDate = () => constructFrom(options?.in, NaN);
|
|
55
|
+
const additionalDigits = 2;
|
|
56
|
+
const dateStrings = splitDateString(argument);
|
|
57
|
+
let date;
|
|
58
|
+
if (dateStrings.date) {
|
|
59
|
+
const parseYearResult = parseYear(dateStrings.date, additionalDigits);
|
|
60
|
+
date = parseDate(parseYearResult.restDateString, parseYearResult.year);
|
|
61
|
+
}
|
|
62
|
+
if (!date || isNaN(+date)) return invalidDate();
|
|
63
|
+
const timestamp = +date;
|
|
64
|
+
let time = 0;
|
|
65
|
+
let offset;
|
|
66
|
+
if (dateStrings.time) {
|
|
67
|
+
time = parseTime(dateStrings.time);
|
|
68
|
+
if (isNaN(time)) return invalidDate();
|
|
69
|
+
}
|
|
70
|
+
if (dateStrings.timezone) {
|
|
71
|
+
offset = parseTimezone(dateStrings.timezone);
|
|
72
|
+
if (isNaN(offset)) return invalidDate();
|
|
73
|
+
} else {
|
|
74
|
+
const tmpDate = new Date(timestamp + time);
|
|
75
|
+
const result = toDate(0, options?.in);
|
|
76
|
+
result.setFullYear(
|
|
77
|
+
tmpDate.getUTCFullYear(),
|
|
78
|
+
tmpDate.getUTCMonth(),
|
|
79
|
+
tmpDate.getUTCDate()
|
|
80
|
+
);
|
|
81
|
+
result.setHours(
|
|
82
|
+
tmpDate.getUTCHours(),
|
|
83
|
+
tmpDate.getUTCMinutes(),
|
|
84
|
+
tmpDate.getUTCSeconds(),
|
|
85
|
+
tmpDate.getUTCMilliseconds()
|
|
86
|
+
);
|
|
87
|
+
return result;
|
|
88
|
+
}
|
|
89
|
+
return toDate(timestamp + time + offset, options?.in);
|
|
90
|
+
}
|
|
91
|
+
const patterns = {
|
|
92
|
+
dateTimeDelimiter: /[T ]/,
|
|
93
|
+
timeZoneDelimiter: /[Z ]/i,
|
|
94
|
+
timezone: /([Z+-].*)$/
|
|
95
|
+
};
|
|
96
|
+
const dateRegex = /^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/;
|
|
97
|
+
const timeRegex = /^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/;
|
|
98
|
+
const timezoneRegex = /^([+-])(\d{2})(?::?(\d{2}))?$/;
|
|
99
|
+
function splitDateString(dateString) {
|
|
100
|
+
const dateStrings = {};
|
|
101
|
+
const array = dateString.split(patterns.dateTimeDelimiter);
|
|
102
|
+
let timeString;
|
|
103
|
+
if (array.length > 2) {
|
|
104
|
+
return dateStrings;
|
|
105
|
+
}
|
|
106
|
+
if (/:/.test(array[0])) {
|
|
107
|
+
timeString = array[0];
|
|
108
|
+
} else {
|
|
109
|
+
dateStrings.date = array[0];
|
|
110
|
+
timeString = array[1];
|
|
111
|
+
if (patterns.timeZoneDelimiter.test(dateStrings.date)) {
|
|
112
|
+
dateStrings.date = dateString.split(patterns.timeZoneDelimiter)[0];
|
|
113
|
+
timeString = dateString.substr(
|
|
114
|
+
dateStrings.date.length,
|
|
115
|
+
dateString.length
|
|
116
|
+
);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (timeString) {
|
|
120
|
+
const token = patterns.timezone.exec(timeString);
|
|
121
|
+
if (token) {
|
|
122
|
+
dateStrings.time = timeString.replace(token[1], "");
|
|
123
|
+
dateStrings.timezone = token[1];
|
|
124
|
+
} else {
|
|
125
|
+
dateStrings.time = timeString;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return dateStrings;
|
|
129
|
+
}
|
|
130
|
+
function parseYear(dateString, additionalDigits) {
|
|
131
|
+
const regex = new RegExp(
|
|
132
|
+
"^(?:(\\d{4}|[+-]\\d{" + (4 + additionalDigits) + "})|(\\d{2}|[+-]\\d{" + (2 + additionalDigits) + "})$)"
|
|
133
|
+
);
|
|
134
|
+
const captures = dateString.match(regex);
|
|
135
|
+
if (!captures) return { year: NaN, restDateString: "" };
|
|
136
|
+
const year = captures[1] ? parseInt(captures[1]) : null;
|
|
137
|
+
const century = captures[2] ? parseInt(captures[2]) : null;
|
|
138
|
+
return {
|
|
139
|
+
year: century === null ? year : century * 100,
|
|
140
|
+
restDateString: dateString.slice((captures[1] || captures[2]).length)
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
function parseDate(dateString, year) {
|
|
144
|
+
if (year === null) return /* @__PURE__ */ new Date(NaN);
|
|
145
|
+
const captures = dateString.match(dateRegex);
|
|
146
|
+
if (!captures) return /* @__PURE__ */ new Date(NaN);
|
|
147
|
+
const isWeekDate = !!captures[4];
|
|
148
|
+
const dayOfYear = parseDateUnit(captures[1]);
|
|
149
|
+
const month = parseDateUnit(captures[2]) - 1;
|
|
150
|
+
const day = parseDateUnit(captures[3]);
|
|
151
|
+
const week = parseDateUnit(captures[4]);
|
|
152
|
+
const dayOfWeek = parseDateUnit(captures[5]) - 1;
|
|
153
|
+
if (isWeekDate) {
|
|
154
|
+
if (!validateWeekDate(year, week, dayOfWeek)) {
|
|
155
|
+
return /* @__PURE__ */ new Date(NaN);
|
|
156
|
+
}
|
|
157
|
+
return dayOfISOWeekYear(year, week, dayOfWeek);
|
|
158
|
+
} else {
|
|
159
|
+
const date = /* @__PURE__ */ new Date(0);
|
|
160
|
+
if (!validateDate(year, month, day) || !validateDayOfYearDate(year, dayOfYear)) {
|
|
161
|
+
return /* @__PURE__ */ new Date(NaN);
|
|
162
|
+
}
|
|
163
|
+
date.setUTCFullYear(year, month, Math.max(dayOfYear, day));
|
|
164
|
+
return date;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
function parseDateUnit(value) {
|
|
168
|
+
return value ? parseInt(value) : 1;
|
|
169
|
+
}
|
|
170
|
+
function parseTime(timeString) {
|
|
171
|
+
const captures = timeString.match(timeRegex);
|
|
172
|
+
if (!captures) return NaN;
|
|
173
|
+
const hours = parseTimeUnit(captures[1]);
|
|
174
|
+
const minutes = parseTimeUnit(captures[2]);
|
|
175
|
+
const seconds = parseTimeUnit(captures[3]);
|
|
176
|
+
if (!validateTime(hours, minutes, seconds)) {
|
|
177
|
+
return NaN;
|
|
178
|
+
}
|
|
179
|
+
return hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * 1e3;
|
|
180
|
+
}
|
|
181
|
+
function parseTimeUnit(value) {
|
|
182
|
+
return value && parseFloat(value.replace(",", ".")) || 0;
|
|
183
|
+
}
|
|
184
|
+
function parseTimezone(timezoneString) {
|
|
185
|
+
if (timezoneString === "Z") return 0;
|
|
186
|
+
const captures = timezoneString.match(timezoneRegex);
|
|
187
|
+
if (!captures) return 0;
|
|
188
|
+
const sign = captures[1] === "+" ? -1 : 1;
|
|
189
|
+
const hours = parseInt(captures[2]);
|
|
190
|
+
const minutes = captures[3] && parseInt(captures[3]) || 0;
|
|
191
|
+
if (!validateTimezone(hours, minutes)) {
|
|
192
|
+
return NaN;
|
|
193
|
+
}
|
|
194
|
+
return sign * (hours * millisecondsInHour + minutes * millisecondsInMinute);
|
|
195
|
+
}
|
|
196
|
+
function dayOfISOWeekYear(isoWeekYear, week, day) {
|
|
197
|
+
const date = /* @__PURE__ */ new Date(0);
|
|
198
|
+
date.setUTCFullYear(isoWeekYear, 0, 4);
|
|
199
|
+
const fourthOfJanuaryDay = date.getUTCDay() || 7;
|
|
200
|
+
const diff = (week - 1) * 7 + day + 1 - fourthOfJanuaryDay;
|
|
201
|
+
date.setUTCDate(date.getUTCDate() + diff);
|
|
202
|
+
return date;
|
|
203
|
+
}
|
|
204
|
+
const daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
|
|
205
|
+
function isLeapYearIndex(year) {
|
|
206
|
+
return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;
|
|
207
|
+
}
|
|
208
|
+
function validateDate(year, month, date) {
|
|
209
|
+
return month >= 0 && month <= 11 && date >= 1 && date <= (daysInMonths[month] || (isLeapYearIndex(year) ? 29 : 28));
|
|
210
|
+
}
|
|
211
|
+
function validateDayOfYearDate(year, dayOfYear) {
|
|
212
|
+
return dayOfYear >= 1 && dayOfYear <= (isLeapYearIndex(year) ? 366 : 365);
|
|
213
|
+
}
|
|
214
|
+
function validateWeekDate(_year, week, day) {
|
|
215
|
+
return week >= 1 && week <= 53 && day >= 0 && day <= 6;
|
|
216
|
+
}
|
|
217
|
+
function validateTime(hours, minutes, seconds) {
|
|
218
|
+
if (hours === 24) {
|
|
219
|
+
return minutes === 0 && seconds === 0;
|
|
220
|
+
}
|
|
221
|
+
return seconds >= 0 && seconds < 60 && minutes >= 0 && minutes < 60 && hours >= 0 && hours < 25;
|
|
222
|
+
}
|
|
223
|
+
function validateTimezone(_hours, minutes) {
|
|
224
|
+
return minutes >= 0 && minutes <= 59;
|
|
225
|
+
}
|
|
226
|
+
function subHours(date, amount, options) {
|
|
227
|
+
return addHours(date, -amount);
|
|
228
|
+
}
|
|
229
|
+
function removeTimezoneFromISOTimeString(isoTime) {
|
|
230
|
+
if (!isoTime) {
|
|
231
|
+
return void 0;
|
|
232
|
+
}
|
|
233
|
+
const parsedDate = parseISO(isoTime);
|
|
234
|
+
if (!isValid(parsedDate)) {
|
|
235
|
+
return void 0;
|
|
236
|
+
}
|
|
237
|
+
if (isoTime.includes("Z")) {
|
|
238
|
+
return new Date(isoTime.replace("Z", ""));
|
|
239
|
+
}
|
|
240
|
+
if (isoTime.includes("T")) {
|
|
241
|
+
const dateTime = isoTime.split("T");
|
|
242
|
+
if (dateTime[1] && (dateTime[1].includes("+") || dateTime[1].includes("-"))) {
|
|
243
|
+
return /* @__PURE__ */ new Date(`${dateTime[0]}T${dateTime[1].split(/[+-]/)[0]}`);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
return new Date(isoTime);
|
|
247
|
+
}
|
|
248
|
+
const durationToTime = (duration, currentLanguage) => {
|
|
249
|
+
const short = [];
|
|
250
|
+
const long = [];
|
|
251
|
+
const now = 0;
|
|
252
|
+
let future = addMinutes(now, duration);
|
|
253
|
+
const days = differenceInDays(future, now);
|
|
254
|
+
if (days > 0) {
|
|
255
|
+
short.push(`${days} d`);
|
|
256
|
+
if (currentLanguage) {
|
|
257
|
+
long.push(`${days} ${days > 1 ? i18nDurationDay.multiple.long[currentLanguage] : i18nDurationDay.single.long[currentLanguage]}`);
|
|
258
|
+
}
|
|
259
|
+
future = subDays(future, days);
|
|
260
|
+
}
|
|
261
|
+
const hours = differenceInHours(future, now);
|
|
262
|
+
if (hours > 0) {
|
|
263
|
+
short.push(`${hours} h`);
|
|
264
|
+
if (currentLanguage) {
|
|
265
|
+
long.push(`${hours} ${hours > 1 ? i18nDurationHour.multiple.long[currentLanguage] : i18nDurationHour.single.long[currentLanguage]}`);
|
|
266
|
+
}
|
|
267
|
+
future = subHours(future, hours);
|
|
268
|
+
}
|
|
269
|
+
const minutes = differenceInMinutes(future, now);
|
|
270
|
+
if (minutes > 0) {
|
|
271
|
+
short.push(`${minutes} min`);
|
|
272
|
+
if (currentLanguage) {
|
|
273
|
+
long.push(`${minutes} ${minutes > 1 ? i18nDurationMinute.multiple.long[currentLanguage] : i18nDurationMinute.single.long[currentLanguage]}`);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
return {
|
|
277
|
+
short: short.join(" "),
|
|
278
|
+
long: long.join(" ")
|
|
279
|
+
};
|
|
280
|
+
};
|
|
281
|
+
export {
|
|
282
|
+
durationToTime,
|
|
283
|
+
removeTimezoneFromISOTimeString
|
|
284
|
+
};
|
|
285
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1oZWxwZXIuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGREYXlzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZE1pbGxpc2Vjb25kcy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRIb3Vycy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5EYXlzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbkhvdXJzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N1YkRheXMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2VJU08uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViSG91cnMuanMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMtZXhwZXJpbWVudGFsL2NvcmUvZGF0ZXRpbWUvZGF0ZS1oZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29uc3RydWN0RnJvbSB9IGZyb20gXCIuL2NvbnN0cnVjdEZyb20uanNcIjtcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgYWRkRGF5c30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGFkZERheXNcbiAqIEBjYXRlZ29yeSBEYXkgSGVscGVyc1xuICogQHN1bW1hcnkgQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGRheXMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgZGF5cyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0gYW1vdW50IC0gVGhlIGFtb3VudCBvZiBkYXlzIHRvIGJlIGFkZGVkLlxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIG5ldyBkYXRlIHdpdGggdGhlIGRheXMgYWRkZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQWRkIDEwIGRheXMgdG8gMSBTZXB0ZW1iZXIgMjAxNDpcbiAqIGNvbnN0IHJlc3VsdCA9IGFkZERheXMobmV3IERhdGUoMjAxNCwgOCwgMSksIDEwKVxuICogLy89PiBUaHUgU2VwIDExIDIwMTQgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZERheXMoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7XG4gIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcbiAgaWYgKGlzTmFOKGFtb3VudCkpIHJldHVybiBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIE5hTik7XG5cbiAgLy8gSWYgMCBkYXlzLCBuby1vcCB0byBhdm9pZCBjaGFuZ2luZyB0aW1lcyBpbiB0aGUgaG91ciBiZWZvcmUgZW5kIG9mIERTVFxuICBpZiAoIWFtb3VudCkgcmV0dXJuIF9kYXRlO1xuXG4gIF9kYXRlLnNldERhdGUoX2RhdGUuZ2V0RGF0ZSgpICsgYW1vdW50KTtcbiAgcmV0dXJuIF9kYXRlO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGFkZERheXM7XG4iLCJpbXBvcnQgeyBjb25zdHJ1Y3RGcm9tIH0gZnJvbSBcIi4vY29uc3RydWN0RnJvbS5qc1wiO1xuaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBhZGRNaWxsaXNlY29uZHN9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBhZGRNaWxsaXNlY29uZHNcbiAqIEBjYXRlZ29yeSBNaWxsaXNlY29uZCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0gYW1vdW50IC0gVGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gYmUgYWRkZWQuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIFRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBtaWxsaXNlY29uZHMgYWRkZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQWRkIDc1MCBtaWxsaXNlY29uZHMgdG8gMTAgSnVseSAyMDE0IDEyOjQ1OjMwLjAwMDpcbiAqIGNvbnN0IHJlc3VsdCA9IGFkZE1pbGxpc2Vjb25kcyhuZXcgRGF0ZSgyMDE0LCA2LCAxMCwgMTIsIDQ1LCAzMCwgMCksIDc1MClcbiAqIC8vPT4gVGh1IEp1bCAxMCAyMDE0IDEyOjQ1OjMwLjc1MFxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkTWlsbGlzZWNvbmRzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykge1xuICByZXR1cm4gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCArdG9EYXRlKGRhdGUpICsgYW1vdW50KTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBhZGRNaWxsaXNlY29uZHM7XG4iLCJpbXBvcnQgeyBhZGRNaWxsaXNlY29uZHMgfSBmcm9tIFwiLi9hZGRNaWxsaXNlY29uZHMuanNcIjtcbmltcG9ydCB7IG1pbGxpc2Vjb25kc0luSG91ciB9IGZyb20gXCIuL2NvbnN0YW50cy5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgYWRkSG91cnN9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBhZGRIb3Vyc1xuICogQGNhdGVnb3J5IEhvdXIgSGVscGVyc1xuICogQHN1bW1hcnkgQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGhvdXJzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGhvdXJzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSBhbW91bnQgLSBUaGUgYW1vdW50IG9mIGhvdXJzIHRvIGJlIGFkZGVkXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgbmV3IGRhdGUgd2l0aCB0aGUgaG91cnMgYWRkZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQWRkIDIgaG91cnMgdG8gMTAgSnVseSAyMDE0IDIzOjAwOjAwOlxuICogY29uc3QgcmVzdWx0ID0gYWRkSG91cnMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDIzLCAwKSwgMilcbiAqIC8vPT4gRnJpIEp1bCAxMSAyMDE0IDAxOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRIb3VycyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGFkZE1pbGxpc2Vjb25kcyhkYXRlLCBhbW91bnQgKiBtaWxsaXNlY29uZHNJbkhvdXIsIG9wdGlvbnMpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGFkZEhvdXJzO1xuIiwiaW1wb3J0IHsgbm9ybWFsaXplRGF0ZXMgfSBmcm9tIFwiLi9fbGliL25vcm1hbGl6ZURhdGVzLmpzXCI7XG5pbXBvcnQgeyBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMgfSBmcm9tIFwiLi9kaWZmZXJlbmNlSW5DYWxlbmRhckRheXMuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGRpZmZlcmVuY2VJbkRheXN9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBkaWZmZXJlbmNlSW5EYXlzXG4gKiBAY2F0ZWdvcnkgRGF5IEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgbnVtYmVyIG9mIGZ1bGwgZGF5cyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgbnVtYmVyIG9mIGZ1bGwgZGF5IHBlcmlvZHMgYmV0d2VlbiB0d28gZGF0ZXMuIEZyYWN0aW9uYWwgZGF5cyBhcmVcbiAqIHRydW5jYXRlZCB0b3dhcmRzIHplcm8uXG4gKlxuICogT25lIFwiZnVsbCBkYXlcIiBpcyB0aGUgZGlzdGFuY2UgYmV0d2VlbiBhIGxvY2FsIHRpbWUgaW4gb25lIGRheSB0byB0aGUgc2FtZVxuICogbG9jYWwgdGltZSBvbiB0aGUgbmV4dCBvciBwcmV2aW91cyBkYXkuIEEgZnVsbCBkYXkgY2FuIHNvbWV0aW1lcyBiZSBsZXNzIHRoYW5cbiAqIG9yIG1vcmUgdGhhbiAyNCBob3VycyBpZiBhIGRheWxpZ2h0IHNhdmluZ3MgY2hhbmdlIGhhcHBlbnMgYmV0d2VlbiB0d28gZGF0ZXMuXG4gKlxuICogVG8gaWdub3JlIERTVCBhbmQgb25seSBtZWFzdXJlIGV4YWN0IDI0LWhvdXIgcGVyaW9kcywgdXNlIHRoaXMgaW5zdGVhZDpcbiAqIGBNYXRoLnRydW5jKGRpZmZlcmVuY2VJbkhvdXJzKGRhdGVMZWZ0LCBkYXRlUmlnaHQpLzI0KXwwYC5cbiAqXG4gKiBAcGFyYW0gbGF0ZXJEYXRlIC0gVGhlIGxhdGVyIGRhdGVcbiAqIEBwYXJhbSBlYXJsaWVyRGF0ZSAtIFRoZSBlYXJsaWVyIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgZnVsbCBkYXlzIGFjY29yZGluZyB0byB0aGUgbG9jYWwgdGltZXpvbmVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSG93IG1hbnkgZnVsbCBkYXlzIGFyZSBiZXR3ZWVuXG4gKiAvLyAyIEp1bHkgMjAxMSAyMzowMDowMCBhbmQgMiBKdWx5IDIwMTIgMDA6MDA6MDA/XG4gKiBjb25zdCByZXN1bHQgPSBkaWZmZXJlbmNlSW5EYXlzKFxuICogICBuZXcgRGF0ZSgyMDEyLCA2LCAyLCAwLCAwKSxcbiAqICAgbmV3IERhdGUoMjAxMSwgNiwgMiwgMjMsIDApXG4gKiApXG4gKiAvLz0+IDM2NVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBIb3cgbWFueSBmdWxsIGRheXMgYXJlIGJldHdlZW5cbiAqIC8vIDIgSnVseSAyMDExIDIzOjU5OjAwIGFuZCAzIEp1bHkgMjAxMSAwMDowMTowMD9cbiAqIGNvbnN0IHJlc3VsdCA9IGRpZmZlcmVuY2VJbkRheXMoXG4gKiAgIG5ldyBEYXRlKDIwMTEsIDYsIDMsIDAsIDEpLFxuICogICBuZXcgRGF0ZSgyMDExLCA2LCAyLCAyMywgNTkpXG4gKiApXG4gKiAvLz0+IDBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSG93IG1hbnkgZnVsbCBkYXlzIGFyZSBiZXR3ZWVuXG4gKiAvLyAxIE1hcmNoIDIwMjAgMDowMCBhbmQgMSBKdW5lIDIwMjAgMDowMCA/XG4gKiAvLyBOb3RlOiBiZWNhdXNlIGxvY2FsIHRpbWUgaXMgdXNlZCwgdGhlXG4gKiAvLyByZXN1bHQgd2lsbCBhbHdheXMgYmUgOTIgZGF5cywgZXZlbiBpblxuICogLy8gdGltZSB6b25lcyB3aGVyZSBEU1Qgc3RhcnRzIGFuZCB0aGVcbiAqIC8vIHBlcmlvZCBoYXMgb25seSA5MioyNC0xIGhvdXJzLlxuICogY29uc3QgcmVzdWx0ID0gZGlmZmVyZW5jZUluRGF5cyhcbiAqICAgbmV3IERhdGUoMjAyMCwgNSwgMSksXG4gKiAgIG5ldyBEYXRlKDIwMjAsIDIsIDEpXG4gKiApXG4gKiAvLz0+IDkyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWZmZXJlbmNlSW5EYXlzKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcyhcbiAgICBvcHRpb25zPy5pbixcbiAgICBsYXRlckRhdGUsXG4gICAgZWFybGllckRhdGUsXG4gICk7XG5cbiAgY29uc3Qgc2lnbiA9IGNvbXBhcmVMb2NhbEFzYyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pO1xuICBjb25zdCBkaWZmZXJlbmNlID0gTWF0aC5hYnMoXG4gICAgZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyksXG4gICk7XG5cbiAgbGF0ZXJEYXRlXy5zZXREYXRlKGxhdGVyRGF0ZV8uZ2V0RGF0ZSgpIC0gc2lnbiAqIGRpZmZlcmVuY2UpO1xuXG4gIC8vIE1hdGguYWJzKGRpZmYgaW4gZnVsbCBkYXlzIC0gZGlmZiBpbiBjYWxlbmRhciBkYXlzKSA9PT0gMSBpZiBsYXN0IGNhbGVuZGFyIGRheSBpcyBub3QgZnVsbFxuICAvLyBJZiBzbywgcmVzdWx0IG11c3QgYmUgZGVjcmVhc2VkIGJ5IDEgaW4gYWJzb2x1dGUgdmFsdWVcbiAgY29uc3QgaXNMYXN0RGF5Tm90RnVsbCA9IE51bWJlcihcbiAgICBjb21wYXJlTG9jYWxBc2MobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKSA9PT0gLXNpZ24sXG4gICk7XG5cbiAgY29uc3QgcmVzdWx0ID0gc2lnbiAqIChkaWZmZXJlbmNlIC0gaXNMYXN0RGF5Tm90RnVsbCk7XG4gIC8vIFByZXZlbnQgbmVnYXRpdmUgemVyb1xuICByZXR1cm4gcmVzdWx0ID09PSAwID8gMCA6IHJlc3VsdDtcbn1cblxuLy8gTGlrZSBgY29tcGFyZUFzY2AgYnV0IHVzZXMgbG9jYWwgdGltZSBub3QgVVRDLCB3aGljaCBpcyBuZWVkZWRcbi8vIGZvciBhY2N1cmF0ZSBlcXVhbGl0eSBjb21wYXJpc29ucyBvZiBVVEMgdGltZXN0YW1wcyB0aGF0IGVuZCB1cFxuLy8gaGF2aW5nIHRoZSBzYW1lIHJlcHJlc2VudGF0aW9uIGluIGxvY2FsIHRpbWUsIGUuZy4gb25lIGhvdXIgYmVmb3JlXG4vLyBEU1QgZW5kcyB2cy4gdGhlIGluc3RhbnQgdGhhdCBEU1QgZW5kcy5cbmZ1bmN0aW9uIGNvbXBhcmVMb2NhbEFzYyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlKSB7XG4gIGNvbnN0IGRpZmYgPVxuICAgIGxhdGVyRGF0ZS5nZXRGdWxsWWVhcigpIC0gZWFybGllckRhdGUuZ2V0RnVsbFllYXIoKSB8fFxuICAgIGxhdGVyRGF0ZS5nZXRNb250aCgpIC0gZWFybGllckRhdGUuZ2V0TW9udGgoKSB8fFxuICAgIGxhdGVyRGF0ZS5nZXREYXRlKCkgLSBlYXJsaWVyRGF0ZS5nZXREYXRlKCkgfHxcbiAgICBsYXRlckRhdGUuZ2V0SG91cnMoKSAtIGVhcmxpZXJEYXRlLmdldEhvdXJzKCkgfHxcbiAgICBsYXRlckRhdGUuZ2V0TWludXRlcygpIC0gZWFybGllckRhdGUuZ2V0TWludXRlcygpIHx8XG4gICAgbGF0ZXJEYXRlLmdldFNlY29uZHMoKSAtIGVhcmxpZXJEYXRlLmdldFNlY29uZHMoKSB8fFxuICAgIGxhdGVyRGF0ZS5nZXRNaWxsaXNlY29uZHMoKSAtIGVhcmxpZXJEYXRlLmdldE1pbGxpc2Vjb25kcygpO1xuXG4gIGlmIChkaWZmIDwgMCkgcmV0dXJuIC0xO1xuICBpZiAoZGlmZiA+IDApIHJldHVybiAxO1xuXG4gIC8vIFJldHVybiAwIGlmIGRpZmYgaXMgMDsgcmV0dXJuIE5hTiBpZiBkaWZmIGlzIE5hTlxuICByZXR1cm4gZGlmZjtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBkaWZmZXJlbmNlSW5EYXlzO1xuIiwiaW1wb3J0IHsgZ2V0Um91bmRpbmdNZXRob2QgfSBmcm9tIFwiLi9fbGliL2dldFJvdW5kaW5nTWV0aG9kLmpzXCI7XG5pbXBvcnQgeyBub3JtYWxpemVEYXRlcyB9IGZyb20gXCIuL19saWIvbm9ybWFsaXplRGF0ZXMuanNcIjtcbmltcG9ydCB7IG1pbGxpc2Vjb25kc0luSG91ciB9IGZyb20gXCIuL2NvbnN0YW50cy5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZGlmZmVyZW5jZUluSG91cnN9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBkaWZmZXJlbmNlSW5Ib3Vyc1xuICogQGNhdGVnb3J5IEhvdXIgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IHRoZSBudW1iZXIgb2YgaG91cnMgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZXMuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBHZXQgdGhlIG51bWJlciBvZiBob3VycyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAcGFyYW0gbGF0ZXJEYXRlIC0gVGhlIGxhdGVyIGRhdGVcbiAqIEBwYXJhbSBlYXJsaWVyRGF0ZSAtIFRoZSBlYXJsaWVyIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9ucy5cbiAqXG4gKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGhvdXJzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEhvdyBtYW55IGhvdXJzIGFyZSBiZXR3ZWVuIDIgSnVseSAyMDE0IDA2OjUwOjAwIGFuZCAyIEp1bHkgMjAxNCAxOTowMDowMD9cbiAqIGNvbnN0IHJlc3VsdCA9IGRpZmZlcmVuY2VJbkhvdXJzKFxuICogICBuZXcgRGF0ZSgyMDE0LCA2LCAyLCAxOSwgMCksXG4gKiAgIG5ldyBEYXRlKDIwMTQsIDYsIDIsIDYsIDUwKVxuICogKVxuICogLy89PiAxMlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlmZmVyZW5jZUluSG91cnMobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBbbGF0ZXJEYXRlXywgZWFybGllckRhdGVfXSA9IG5vcm1hbGl6ZURhdGVzKFxuICAgIG9wdGlvbnM/LmluLFxuICAgIGxhdGVyRGF0ZSxcbiAgICBlYXJsaWVyRGF0ZSxcbiAgKTtcbiAgY29uc3QgZGlmZiA9ICgrbGF0ZXJEYXRlXyAtICtlYXJsaWVyRGF0ZV8pIC8gbWlsbGlzZWNvbmRzSW5Ib3VyO1xuICByZXR1cm4gZ2V0Um91bmRpbmdNZXRob2Qob3B0aW9ucz8ucm91bmRpbmdNZXRob2QpKGRpZmYpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGRpZmZlcmVuY2VJbkhvdXJzO1xuIiwiaW1wb3J0IHsgYWRkRGF5cyB9IGZyb20gXCIuL2FkZERheXMuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIHN1YkRheXN9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBzdWJEYXlzXG4gKiBAY2F0ZWdvcnkgRGF5IEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGRheXMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0gYW1vdW50IC0gVGhlIGFtb3VudCBvZiBkYXlzIHRvIGJlIHN1YnRyYWN0ZWQuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgbmV3IGRhdGUgd2l0aCB0aGUgZGF5cyBzdWJ0cmFjdGVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFN1YnRyYWN0IDEwIGRheXMgZnJvbSAxIFNlcHRlbWJlciAyMDE0OlxuICogY29uc3QgcmVzdWx0ID0gc3ViRGF5cyhuZXcgRGF0ZSgyMDE0LCA4LCAxKSwgMTApXG4gKiAvLz0+IEZyaSBBdWcgMjIgMjAxNCAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3ViRGF5cyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGFkZERheXMoZGF0ZSwgLWFtb3VudCwgb3B0aW9ucyk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgc3ViRGF5cztcbiIsImltcG9ydCB7XG4gIG1pbGxpc2Vjb25kc0luSG91cixcbiAgbWlsbGlzZWNvbmRzSW5NaW51dGUsXG59IGZyb20gXCIuL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgY29uc3RydWN0RnJvbSB9IGZyb20gXCIuL2NvbnN0cnVjdEZyb20uanNcIjtcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgcGFyc2VJU099IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBwYXJzZUlTT1xuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBQYXJzZSBJU08gc3RyaW5nXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBQYXJzZSB0aGUgZ2l2ZW4gc3RyaW5nIGluIElTTyA4NjAxIGZvcm1hdCBhbmQgcmV0dXJuIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogRnVuY3Rpb24gYWNjZXB0cyBjb21wbGV0ZSBJU08gODYwMSBmb3JtYXRzIGFzIHdlbGwgYXMgcGFydGlhbCBpbXBsZW1lbnRhdGlvbnMuXG4gKiBJU08gODYwMTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMVxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpc24ndCBhIHN0cmluZywgdGhlIGZ1bmN0aW9uIGNhbm5vdCBwYXJzZSB0aGUgc3RyaW5nIG9yXG4gKiB0aGUgdmFsdWVzIGFyZSBpbnZhbGlkLCBpdCByZXR1cm5zIEludmFsaWQgRGF0ZS5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGFyZ3VtZW50IC0gVGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBwYXJzZWQgZGF0ZSBpbiB0aGUgbG9jYWwgdGltZSB6b25lXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgc3RyaW5nICcyMDE0LTAyLTExVDExOjMwOjMwJyB0byBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gcGFyc2VJU08oJzIwMTQtMDItMTFUMTE6MzA6MzAnKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCBzdHJpbmcgJyswMjAxNDEwMScgdG8gZGF0ZSxcbiAqIC8vIGlmIHRoZSBhZGRpdGlvbmFsIG51bWJlciBvZiBkaWdpdHMgaW4gdGhlIGV4dGVuZGVkIHllYXIgZm9ybWF0IGlzIDE6XG4gKiBjb25zdCByZXN1bHQgPSBwYXJzZUlTTygnKzAyMDE0MTAxJywgeyBhZGRpdGlvbmFsRGlnaXRzOiAxIH0pXG4gKiAvLz0+IEZyaSBBcHIgMTEgMjAxNCAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJU08oYXJndW1lbnQsIG9wdGlvbnMpIHtcbiAgY29uc3QgaW52YWxpZERhdGUgPSAoKSA9PiBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluLCBOYU4pO1xuXG4gIGNvbnN0IGFkZGl0aW9uYWxEaWdpdHMgPSBvcHRpb25zPy5hZGRpdGlvbmFsRGlnaXRzID8/IDI7XG4gIGNvbnN0IGRhdGVTdHJpbmdzID0gc3BsaXREYXRlU3RyaW5nKGFyZ3VtZW50KTtcblxuICBsZXQgZGF0ZTtcbiAgaWYgKGRhdGVTdHJpbmdzLmRhdGUpIHtcbiAgICBjb25zdCBwYXJzZVllYXJSZXN1bHQgPSBwYXJzZVllYXIoZGF0ZVN0cmluZ3MuZGF0ZSwgYWRkaXRpb25hbERpZ2l0cyk7XG4gICAgZGF0ZSA9IHBhcnNlRGF0ZShwYXJzZVllYXJSZXN1bHQucmVzdERhdGVTdHJpbmcsIHBhcnNlWWVhclJlc3VsdC55ZWFyKTtcbiAgfVxuXG4gIGlmICghZGF0ZSB8fCBpc05hTigrZGF0ZSkpIHJldHVybiBpbnZhbGlkRGF0ZSgpO1xuXG4gIGNvbnN0IHRpbWVzdGFtcCA9ICtkYXRlO1xuICBsZXQgdGltZSA9IDA7XG4gIGxldCBvZmZzZXQ7XG5cbiAgaWYgKGRhdGVTdHJpbmdzLnRpbWUpIHtcbiAgICB0aW1lID0gcGFyc2VUaW1lKGRhdGVTdHJpbmdzLnRpbWUpO1xuICAgIGlmIChpc05hTih0aW1lKSkgcmV0dXJuIGludmFsaWREYXRlKCk7XG4gIH1cblxuICBpZiAoZGF0ZVN0cmluZ3MudGltZXpvbmUpIHtcbiAgICBvZmZzZXQgPSBwYXJzZVRpbWV6b25lKGRhdGVTdHJpbmdzLnRpbWV6b25lKTtcbiAgICBpZiAoaXNOYU4ob2Zmc2V0KSkgcmV0dXJuIGludmFsaWREYXRlKCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdG1wRGF0ZSA9IG5ldyBEYXRlKHRpbWVzdGFtcCArIHRpbWUpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRvRGF0ZSgwLCBvcHRpb25zPy5pbik7XG4gICAgcmVzdWx0LnNldEZ1bGxZZWFyKFxuICAgICAgdG1wRGF0ZS5nZXRVVENGdWxsWWVhcigpLFxuICAgICAgdG1wRGF0ZS5nZXRVVENNb250aCgpLFxuICAgICAgdG1wRGF0ZS5nZXRVVENEYXRlKCksXG4gICAgKTtcbiAgICByZXN1bHQuc2V0SG91cnMoXG4gICAgICB0bXBEYXRlLmdldFVUQ0hvdXJzKCksXG4gICAgICB0bXBEYXRlLmdldFVUQ01pbnV0ZXMoKSxcbiAgICAgIHRtcERhdGUuZ2V0VVRDU2Vjb25kcygpLFxuICAgICAgdG1wRGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKSxcbiAgICApO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICByZXR1cm4gdG9EYXRlKHRpbWVzdGFtcCArIHRpbWUgKyBvZmZzZXQsIG9wdGlvbnM/LmluKTtcbn1cblxuY29uc3QgcGF0dGVybnMgPSB7XG4gIGRhdGVUaW1lRGVsaW1pdGVyOiAvW1QgXS8sXG4gIHRpbWVab25lRGVsaW1pdGVyOiAvW1ogXS9pLFxuICB0aW1lem9uZTogLyhbWistXS4qKSQvLFxufTtcblxuY29uc3QgZGF0ZVJlZ2V4ID1cbiAgL14tPyg/OihcXGR7M30pfChcXGR7Mn0pKD86LT8oXFxkezJ9KSk/fFcoXFxkezJ9KSg/Oi0/KFxcZHsxfSkpP3wpJC87XG5jb25zdCB0aW1lUmVnZXggPVxuICAvXihcXGR7Mn0oPzpbLixdXFxkKik/KSg/Ojo/KFxcZHsyfSg/OlsuLF1cXGQqKT8pKT8oPzo6PyhcXGR7Mn0oPzpbLixdXFxkKik/KSk/JC87XG5jb25zdCB0aW1lem9uZVJlZ2V4ID0gL14oWystXSkoXFxkezJ9KSg/Ojo/KFxcZHsyfSkpPyQvO1xuXG5mdW5jdGlvbiBzcGxpdERhdGVTdHJpbmcoZGF0ZVN0cmluZykge1xuICBjb25zdCBkYXRlU3RyaW5ncyA9IHt9O1xuICBjb25zdCBhcnJheSA9IGRhdGVTdHJpbmcuc3BsaXQocGF0dGVybnMuZGF0ZVRpbWVEZWxpbWl0ZXIpO1xuICBsZXQgdGltZVN0cmluZztcblxuICAvLyBUaGUgcmVnZXggbWF0Y2ggc2hvdWxkIG9ubHkgcmV0dXJuIGF0IG1heGltdW0gdHdvIGFycmF5IGVsZW1lbnRzLlxuICAvLyBbZGF0ZV0sIFt0aW1lXSwgb3IgW2RhdGUsIHRpbWVdLlxuICBpZiAoYXJyYXkubGVuZ3RoID4gMikge1xuICAgIHJldHVybiBkYXRlU3RyaW5ncztcbiAgfVxuXG4gIGlmICgvOi8udGVzdChhcnJheVswXSkpIHtcbiAgICB0aW1lU3RyaW5nID0gYXJyYXlbMF07XG4gIH0gZWxzZSB7XG4gICAgZGF0ZVN0cmluZ3MuZGF0ZSA9IGFycmF5WzBdO1xuICAgIHRpbWVTdHJpbmcgPSBhcnJheVsxXTtcbiAgICBpZiAocGF0dGVybnMudGltZVpvbmVEZWxpbWl0ZXIudGVzdChkYXRlU3RyaW5ncy5kYXRlKSkge1xuICAgICAgZGF0ZVN0cmluZ3MuZGF0ZSA9IGRhdGVTdHJpbmcuc3BsaXQocGF0dGVybnMudGltZVpvbmVEZWxpbWl0ZXIpWzBdO1xuICAgICAgdGltZVN0cmluZyA9IGRhdGVTdHJpbmcuc3Vic3RyKFxuICAgICAgICBkYXRlU3RyaW5ncy5kYXRlLmxlbmd0aCxcbiAgICAgICAgZGF0ZVN0cmluZy5sZW5ndGgsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aW1lU3RyaW5nKSB7XG4gICAgY29uc3QgdG9rZW4gPSBwYXR0ZXJucy50aW1lem9uZS5leGVjKHRpbWVTdHJpbmcpO1xuICAgIGlmICh0b2tlbikge1xuICAgICAgZGF0ZVN0cmluZ3MudGltZSA9IHRpbWVTdHJpbmcucmVwbGFjZSh0b2tlblsxXSwgXCJcIik7XG4gICAgICBkYXRlU3RyaW5ncy50aW1lem9uZSA9IHRva2VuWzFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRlU3RyaW5ncy50aW1lID0gdGltZVN0cmluZztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGF0ZVN0cmluZ3M7XG59XG5cbmZ1bmN0aW9uIHBhcnNlWWVhcihkYXRlU3RyaW5nLCBhZGRpdGlvbmFsRGlnaXRzKSB7XG4gIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICBcIl4oPzooXFxcXGR7NH18WystXVxcXFxke1wiICtcbiAgICAgICg0ICsgYWRkaXRpb25hbERpZ2l0cykgK1xuICAgICAgXCJ9KXwoXFxcXGR7Mn18WystXVxcXFxke1wiICtcbiAgICAgICgyICsgYWRkaXRpb25hbERpZ2l0cykgK1xuICAgICAgXCJ9KSQpXCIsXG4gICk7XG5cbiAgY29uc3QgY2FwdHVyZXMgPSBkYXRlU3RyaW5nLm1hdGNoKHJlZ2V4KTtcbiAgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIHllYXJcbiAgaWYgKCFjYXB0dXJlcykgcmV0dXJuIHsgeWVhcjogTmFOLCByZXN0RGF0ZVN0cmluZzogXCJcIiB9O1xuXG4gIGNvbnN0IHllYXIgPSBjYXB0dXJlc1sxXSA/IHBhcnNlSW50KGNhcHR1cmVzWzFdKSA6IG51bGw7XG4gIGNvbnN0IGNlbnR1cnkgPSBjYXB0dXJlc1syXSA/IHBhcnNlSW50KGNhcHR1cmVzWzJdKSA6IG51bGw7XG5cbiAgLy8gZWl0aGVyIHllYXIgb3IgY2VudHVyeSBpcyBudWxsLCBub3QgYm90aFxuICByZXR1cm4ge1xuICAgIHllYXI6IGNlbnR1cnkgPT09IG51bGwgPyB5ZWFyIDogY2VudHVyeSAqIDEwMCxcbiAgICByZXN0RGF0ZVN0cmluZzogZGF0ZVN0cmluZy5zbGljZSgoY2FwdHVyZXNbMV0gfHwgY2FwdHVyZXNbMl0pLmxlbmd0aCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlRGF0ZShkYXRlU3RyaW5nLCB5ZWFyKSB7XG4gIC8vIEludmFsaWQgSVNPLWZvcm1hdHRlZCB5ZWFyXG4gIGlmICh5ZWFyID09PSBudWxsKSByZXR1cm4gbmV3IERhdGUoTmFOKTtcblxuICBjb25zdCBjYXB0dXJlcyA9IGRhdGVTdHJpbmcubWF0Y2goZGF0ZVJlZ2V4KTtcbiAgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIHN0cmluZ1xuICBpZiAoIWNhcHR1cmVzKSByZXR1cm4gbmV3IERhdGUoTmFOKTtcblxuICBjb25zdCBpc1dlZWtEYXRlID0gISFjYXB0dXJlc1s0XTtcbiAgY29uc3QgZGF5T2ZZZWFyID0gcGFyc2VEYXRlVW5pdChjYXB0dXJlc1sxXSk7XG4gIGNvbnN0IG1vbnRoID0gcGFyc2VEYXRlVW5pdChjYXB0dXJlc1syXSkgLSAxO1xuICBjb25zdCBkYXkgPSBwYXJzZURhdGVVbml0KGNhcHR1cmVzWzNdKTtcbiAgY29uc3Qgd2VlayA9IHBhcnNlRGF0ZVVuaXQoY2FwdHVyZXNbNF0pO1xuICBjb25zdCBkYXlPZldlZWsgPSBwYXJzZURhdGVVbml0KGNhcHR1cmVzWzVdKSAtIDE7XG5cbiAgaWYgKGlzV2Vla0RhdGUpIHtcbiAgICBpZiAoIXZhbGlkYXRlV2Vla0RhdGUoeWVhciwgd2VlaywgZGF5T2ZXZWVrKSkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gICAgfVxuICAgIHJldHVybiBkYXlPZklTT1dlZWtZZWFyKHllYXIsIHdlZWssIGRheU9mV2Vlayk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDApO1xuICAgIGlmIChcbiAgICAgICF2YWxpZGF0ZURhdGUoeWVhciwgbW9udGgsIGRheSkgfHxcbiAgICAgICF2YWxpZGF0ZURheU9mWWVhckRhdGUoeWVhciwgZGF5T2ZZZWFyKVxuICAgICkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gICAgfVxuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeWVhciwgbW9udGgsIE1hdGgubWF4KGRheU9mWWVhciwgZGF5KSk7XG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VEYXRlVW5pdCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPyBwYXJzZUludCh2YWx1ZSkgOiAxO1xufVxuXG5mdW5jdGlvbiBwYXJzZVRpbWUodGltZVN0cmluZykge1xuICBjb25zdCBjYXB0dXJlcyA9IHRpbWVTdHJpbmcubWF0Y2godGltZVJlZ2V4KTtcbiAgaWYgKCFjYXB0dXJlcykgcmV0dXJuIE5hTjsgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIHRpbWVcblxuICBjb25zdCBob3VycyA9IHBhcnNlVGltZVVuaXQoY2FwdHVyZXNbMV0pO1xuICBjb25zdCBtaW51dGVzID0gcGFyc2VUaW1lVW5pdChjYXB0dXJlc1syXSk7XG4gIGNvbnN0IHNlY29uZHMgPSBwYXJzZVRpbWVVbml0KGNhcHR1cmVzWzNdKTtcblxuICBpZiAoIXZhbGlkYXRlVGltZShob3VycywgbWludXRlcywgc2Vjb25kcykpIHtcbiAgICByZXR1cm4gTmFOO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBob3VycyAqIG1pbGxpc2Vjb25kc0luSG91ciArIG1pbnV0ZXMgKiBtaWxsaXNlY29uZHNJbk1pbnV0ZSArIHNlY29uZHMgKiAxMDAwXG4gICk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVGltZVVuaXQodmFsdWUpIHtcbiAgcmV0dXJuICh2YWx1ZSAmJiBwYXJzZUZsb2F0KHZhbHVlLnJlcGxhY2UoXCIsXCIsIFwiLlwiKSkpIHx8IDA7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVGltZXpvbmUodGltZXpvbmVTdHJpbmcpIHtcbiAgaWYgKHRpbWV6b25lU3RyaW5nID09PSBcIlpcIikgcmV0dXJuIDA7XG5cbiAgY29uc3QgY2FwdHVyZXMgPSB0aW1lem9uZVN0cmluZy5tYXRjaCh0aW1lem9uZVJlZ2V4KTtcbiAgaWYgKCFjYXB0dXJlcykgcmV0dXJuIDA7XG5cbiAgY29uc3Qgc2lnbiA9IGNhcHR1cmVzWzFdID09PSBcIitcIiA/IC0xIDogMTtcbiAgY29uc3QgaG91cnMgPSBwYXJzZUludChjYXB0dXJlc1syXSk7XG4gIGNvbnN0IG1pbnV0ZXMgPSAoY2FwdHVyZXNbM10gJiYgcGFyc2VJbnQoY2FwdHVyZXNbM10pKSB8fCAwO1xuXG4gIGlmICghdmFsaWRhdGVUaW1lem9uZShob3VycywgbWludXRlcykpIHtcbiAgICByZXR1cm4gTmFOO1xuICB9XG5cbiAgcmV0dXJuIHNpZ24gKiAoaG91cnMgKiBtaWxsaXNlY29uZHNJbkhvdXIgKyBtaW51dGVzICogbWlsbGlzZWNvbmRzSW5NaW51dGUpO1xufVxuXG5mdW5jdGlvbiBkYXlPZklTT1dlZWtZZWFyKGlzb1dlZWtZZWFyLCB3ZWVrLCBkYXkpIHtcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDApO1xuICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGlzb1dlZWtZZWFyLCAwLCA0KTtcbiAgY29uc3QgZm91cnRoT2ZKYW51YXJ5RGF5ID0gZGF0ZS5nZXRVVENEYXkoKSB8fCA3O1xuICBjb25zdCBkaWZmID0gKHdlZWsgLSAxKSAqIDcgKyBkYXkgKyAxIC0gZm91cnRoT2ZKYW51YXJ5RGF5O1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgKyBkaWZmKTtcbiAgcmV0dXJuIGRhdGU7XG59XG5cbi8vIFZhbGlkYXRpb24gZnVuY3Rpb25zXG5cbi8vIEZlYnJ1YXJ5IGlzIG51bGwgdG8gaGFuZGxlIHRoZSBsZWFwIHllYXIgKHVzaW5nIHx8KVxuY29uc3QgZGF5c0luTW9udGhzID0gWzMxLCBudWxsLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV07XG5cbmZ1bmN0aW9uIGlzTGVhcFllYXJJbmRleCh5ZWFyKSB7XG4gIHJldHVybiB5ZWFyICUgNDAwID09PSAwIHx8ICh5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVEYXRlKHllYXIsIG1vbnRoLCBkYXRlKSB7XG4gIHJldHVybiAoXG4gICAgbW9udGggPj0gMCAmJlxuICAgIG1vbnRoIDw9IDExICYmXG4gICAgZGF0ZSA+PSAxICYmXG4gICAgZGF0ZSA8PSAoZGF5c0luTW9udGhzW21vbnRoXSB8fCAoaXNMZWFwWWVhckluZGV4KHllYXIpID8gMjkgOiAyOCkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRGF5T2ZZZWFyRGF0ZSh5ZWFyLCBkYXlPZlllYXIpIHtcbiAgcmV0dXJuIGRheU9mWWVhciA+PSAxICYmIGRheU9mWWVhciA8PSAoaXNMZWFwWWVhckluZGV4KHllYXIpID8gMzY2IDogMzY1KTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVXZWVrRGF0ZShfeWVhciwgd2VlaywgZGF5KSB7XG4gIHJldHVybiB3ZWVrID49IDEgJiYgd2VlayA8PSA1MyAmJiBkYXkgPj0gMCAmJiBkYXkgPD0gNjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVUaW1lKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKSB7XG4gIGlmIChob3VycyA9PT0gMjQpIHtcbiAgICByZXR1cm4gbWludXRlcyA9PT0gMCAmJiBzZWNvbmRzID09PSAwO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBzZWNvbmRzID49IDAgJiZcbiAgICBzZWNvbmRzIDwgNjAgJiZcbiAgICBtaW51dGVzID49IDAgJiZcbiAgICBtaW51dGVzIDwgNjAgJiZcbiAgICBob3VycyA+PSAwICYmXG4gICAgaG91cnMgPCAyNVxuICApO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVRpbWV6b25lKF9ob3VycywgbWludXRlcykge1xuICByZXR1cm4gbWludXRlcyA+PSAwICYmIG1pbnV0ZXMgPD0gNTk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgcGFyc2VJU087XG4iLCJpbXBvcnQgeyBhZGRIb3VycyB9IGZyb20gXCIuL2FkZEhvdXJzLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBzdWJIb3Vyc30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIHN1YkhvdXJzXG4gKiBAY2F0ZWdvcnkgSG91ciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBob3VycyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgaG91cnMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0gYW1vdW50IC0gVGhlIGFtb3VudCBvZiBob3VycyB0byBiZSBzdWJ0cmFjdGVkLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBob3VycyBzdWJ0cmFjdGVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFN1YnRyYWN0IDIgaG91cnMgZnJvbSAxMSBKdWx5IDIwMTQgMDE6MDA6MDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdWJIb3VycyhuZXcgRGF0ZSgyMDE0LCA2LCAxMSwgMSwgMCksIDIpXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAyMzowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3ViSG91cnMoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7XG4gIHJldHVybiBhZGRIb3VycyhkYXRlLCAtYW1vdW50LCBvcHRpb25zKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBzdWJIb3VycztcbiIsImltcG9ydCB7XG4gIGkxOG5EdXJhdGlvbkhvdXIsXG4gIGkxOG5EdXJhdGlvbk1pbnV0ZSxcbiAgaTE4bkR1cmF0aW9uRGF5LFxufSBmcm9tICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9jb3JlL2kxOG4uanMnO1xuaW1wb3J0IHtcbiAgaXNWYWxpZCxcbiAgcGFyc2VJU08sXG4gIGRpZmZlcmVuY2VJbkRheXMsXG4gIGRpZmZlcmVuY2VJbkhvdXJzLFxuICBkaWZmZXJlbmNlSW5NaW51dGVzLFxuICBhZGRNaW51dGVzLFxuICBzdWJIb3VycyxcbiAgc3ViRGF5cyxcbn0gZnJvbSAnZGF0ZS1mbnMnO1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgb2Zmc2V0IG9mIGEgSVNPIGRhdGUgc3RyaW5nLiBUaGlzIG5lZWRzIHRvIGJlIGRvbmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIG9mZnNldCBpcyBpZ25vcmVkLlxuICogSWYgaXQgaXMgbm90IHJlbW92ZWQgdGhlIHRpbWUgd291bGQgYmUgY29udmVydGVkIHRvIHRoZSBicm93c2VycyBsb2NhbCB0aW1lLlxuICogRXhhbXBsZTogXCIyMDIyLTA4LTI5VDA5OjMwOjAwKzAzOjAwXCIgd291bGQgYmUgY2hhbmdlZCB0byBcIjIwMjItMDgtMjlUMDg6MzA6MDArMDI6MDBcIiAtLT4gbm90IHRoZSBkZXNpcmVkIG91dGNvbWUsIGFzIHdlIHdhbnQgdG8gdXNlIHRoZSB0aW1lIGluIHRoZSB0aW1lem9uZSBhbmQgbm90IHRoZSBsb2NhbCB0aW1lLlxuICpcbiAqIEFmdGVyIHRoZSBvZmZzZXQgaXMgcmVtb3ZlZCBhIG5ldyBkYXRlIGlzIGNyZWF0ZWQgaW4gdGhlIGJyb3dzZXJzIGxvY2FsIHRpbWUuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSB0aW1lIG9mIHRoZSBJU08gZGF0ZSBzdHJpbmcgaXMgZGlzcGxheWVkIGFuZCBub3QgYSBjb252ZXJ0ZWQgdGltZS5cbiAqIEV4YW1wbGU6IFwiMjAyMi0wOC0yOVQwOTozMDowMCswMzowMFwiIHdvdWxkIGJlIGNoYW5nZWQgdG8gXCIyMDIyLTA4LTI5VDA5OjMwOjAwKzAyOjAwXCIgLS0+IGRlc2lyZWQgb3V0Y29tZVxuICogQXR0ZW50aW9uOiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNvbnZlcnQgdGhlIHRpbWUgdG8gdGhlIGNvcnJlY3QgdGltZSBpbiB0aGUgbG9jYWwgdGltZXpvbmUuIEl0IGlzIGEgd29ya2Fyb3VuZCB0byBtYWtlIHN1cmUsIHRoYXQgdGhlIGdpdmVuIHRpbWUgaXMgZGlzcGxheWVkIHdpdGhvdXQgYmVpbmcgY29udmVydGVkLlxuICpcbiAqIE9mZnNldDogRGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0aW1lem9uZSBhbmQgQ29vcmRpbmF0ZWQgVW5pdmVyc2FsIFRpbWUuXG4gKlxuICogQHBhcmFtIGlzb1RpbWUgLSB0aGUgaXNvIHRpbWUgd2l0aCB0aGUgdGltZXpvbmUgb2Zmc2V0XG4gKiBAcmV0dXJucyBhIG5ldyBkYXRlIHdpdGggdGhlIGxvY2FsIHRpbWV6b25lIHdpdGggdGhlIGxvY2FsIG9mZnNldFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlVGltZXpvbmVGcm9tSVNPVGltZVN0cmluZyhpc29UaW1lPzogc3RyaW5nKTogRGF0ZSB8IHVuZGVmaW5lZCB7XG4gIGlmICghaXNvVGltZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcGFyc2VkRGF0ZSA9IHBhcnNlSVNPKGlzb1RpbWUpO1xuXG4gIGlmICghaXNWYWxpZChwYXJzZWREYXRlKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoaXNvVGltZS5pbmNsdWRlcygnWicpKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGlzb1RpbWUucmVwbGFjZSgnWicsICcnKSk7XG4gIH1cblxuICBpZiAoaXNvVGltZS5pbmNsdWRlcygnVCcpKSB7XG4gICAgY29uc3QgZGF0ZVRpbWUgPSBpc29UaW1lLnNwbGl0KCdUJyk7XG5cbiAgICBpZiAoZGF0ZVRpbWVbMV0gJiYgKGRhdGVUaW1lWzFdLmluY2x1ZGVzKCcrJykgfHwgZGF0ZVRpbWVbMV0uaW5jbHVkZXMoJy0nKSkpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShgJHtkYXRlVGltZVswXX1UJHtkYXRlVGltZVsxXS5zcGxpdCgvWystXS8pWzBdfWApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3IERhdGUoaXNvVGltZSk7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyBhIGR1cmF0aW9uIG51bWJlciB0byBkYXRlIHN0cmluZyB3aXRoIHNwZWNpZmljIGZvcm1hdFxuICpcbiAqIEBwYXJhbSBkdXJhdGlvbiAtIGR1cmF0aW9uIGluIG1pbnV0ZXNcbiAqIEBwYXJhbSBjdXJyZW50TGFuZ3VhZ2UgLSBjdXJyZW50TGFuZ3VhZ2VcbiAqIEByZXR1cm5zIGFuIE9iamVjdCB3aXRoIHR3byBzdHJpbmdzIGluIHRoZSBmb3JtYXQgXCJkZCBoaCBtbVwiIChzaG9ydCkgYW4gXCJ4IERheShzKSB4IEhvdXIocykgeCBNaW51dGUocykgKGxvbmcpXCJcbiAqICovXG5cbmV4cG9ydCBjb25zdCBkdXJhdGlvblRvVGltZSA9IChcbiAgZHVyYXRpb246IG51bWJlcixcbiAgY3VycmVudExhbmd1YWdlPzogc3RyaW5nLFxuKTogeyBzaG9ydDogc3RyaW5nOyBsb25nOiBzdHJpbmcgfSA9PiB7XG4gIGNvbnN0IHNob3J0ID0gW107XG4gIGNvbnN0IGxvbmcgPSBbXTtcblxuICBjb25zdCBub3cgPSAwO1xuICBsZXQgZnV0dXJlID0gYWRkTWludXRlcyhub3csIGR1cmF0aW9uKTtcblxuICBjb25zdCBkYXlzID0gZGlmZmVyZW5jZUluRGF5cyhmdXR1cmUsIG5vdyk7XG4gIGlmIChkYXlzID4gMCkge1xuICAgIHNob3J0LnB1c2goYCR7ZGF5c30gZGApO1xuICAgIGlmIChjdXJyZW50TGFuZ3VhZ2UpIHtcbiAgICAgIGxvbmcucHVzaChcbiAgICAgICAgYCR7ZGF5c30gJHtcbiAgICAgICAgICBkYXlzID4gMVxuICAgICAgICAgICAgPyBpMThuRHVyYXRpb25EYXkubXVsdGlwbGUubG9uZ1tjdXJyZW50TGFuZ3VhZ2VdXG4gICAgICAgICAgICA6IGkxOG5EdXJhdGlvbkRheS5zaW5nbGUubG9uZ1tjdXJyZW50TGFuZ3VhZ2VdXG4gICAgICAgIH1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgZnV0dXJlID0gc3ViRGF5cyhmdXR1cmUsIGRheXMpO1xuICB9XG5cbiAgY29uc3QgaG91cnMgPSBkaWZmZXJlbmNlSW5Ib3VycyhmdXR1cmUsIG5vdyk7XG4gIGlmIChob3VycyA+IDApIHtcbiAgICBzaG9ydC5wdXNoKGAke2hvdXJzfSBoYCk7XG4gICAgaWYgKGN1cnJlbnRMYW5ndWFnZSkge1xuICAgICAgbG9uZy5wdXNoKFxuICAgICAgICBgJHtob3Vyc30gJHtcbiAgICAgICAgICBob3VycyA+IDFcbiAgICAgICAgICAgID8gaTE4bkR1cmF0aW9uSG91ci5tdWx0aXBsZS5sb25nW2N1cnJlbnRMYW5ndWFnZV1cbiAgICAgICAgICAgIDogaTE4bkR1cmF0aW9uSG91ci5zaW5nbGUubG9uZ1tjdXJyZW50TGFuZ3VhZ2VdXG4gICAgICAgIH1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgZnV0dXJlID0gc3ViSG91cnMoZnV0dXJlLCBob3Vycyk7XG4gIH1cblxuICBjb25zdCBtaW51dGVzID0gZGlmZmVyZW5jZUluTWludXRlcyhmdXR1cmUsIG5vdyk7XG4gIGlmIChtaW51dGVzID4gMCkge1xuICAgIHNob3J0LnB1c2goYCR7bWludXRlc30gbWluYCk7XG4gICAgaWYgKGN1cnJlbnRMYW5ndWFnZSkge1xuICAgICAgbG9uZy5wdXNoKFxuICAgICAgICBgJHttaW51dGVzfSAke1xuICAgICAgICAgIG1pbnV0ZXMgPiAxXG4gICAgICAgICAgICA/IGkxOG5EdXJhdGlvbk1pbnV0ZS5tdWx0aXBsZS5sb25nW2N1cnJlbnRMYW5ndWFnZV1cbiAgICAgICAgICAgIDogaTE4bkR1cmF0aW9uTWludXRlLnNpbmdsZS5sb25nW2N1cnJlbnRMYW5ndWFnZV1cbiAgICAgICAgfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc2hvcnQ6IHNob3J0LmpvaW4oJyAnKSxcbiAgICBsb25nOiBsb25nLmpvaW4oJyAnKSxcbiAgfTtcbn07XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQTZCTyxTQUFTLFFBQVEsTUFBTSxRQUFRLFNBQVM7QUFDN0MsUUFBTSxRQUFRLE9BQU8sTUFBTSxTQUFTLEVBQUU7QUFDdEMsTUFBSSxNQUFNLE1BQU0sRUFBRyxRQUFPLGNBQTZCLE1BQU0sR0FBRztBQUdoRSxNQUFJLENBQUMsT0FBUSxRQUFPO0FBRXBCLFFBQU0sUUFBUSxNQUFNLFFBQU8sSUFBSyxNQUFNO0FBQ3RDLFNBQU87QUFDVDtBQ1RPLFNBQVMsZ0JBQWdCLE1BQU0sUUFBUSxTQUFTO0FBQ3JELFNBQU8sY0FBNkIsTUFBTSxDQUFDLE9BQU8sSUFBSSxJQUFJLE1BQU07QUFDbEU7QUNGTyxTQUFTLFNBQVMsTUFBTSxRQUFRLFNBQVM7QUFDOUMsU0FBTyxnQkFBZ0IsTUFBTSxTQUFTLGtCQUEyQjtBQUNuRTtBQzZCTyxTQUFTLGlCQUFpQixXQUFXLGFBQWEsU0FBUztBQUNoRSxRQUFNLENB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
|
|
@@ -1,2 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export {
|
|
1
|
+
import { durationToTime, removeTimezoneFromISOTimeString } from "./datetime/date-helper.js";
|
|
2
|
+
export {
|
|
3
|
+
durationToTime,
|
|
4
|
+
removeTimezoneFromISOTimeString
|
|
5
|
+
};
|
|
6
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUuanMiLCJzb3VyY2VzIjpbXSwic291cmNlc0NvbnRlbnQiOltdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOyJ9
|