@sbb-esta/lyne-elements-experimental-dev 0.0.0 → 4.5.1-dev.1771859300

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.
Files changed (249) hide show
  1. package/README.md +55 -0
  2. package/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.js +86 -0
  3. package/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.component.js +54 -0
  4. package/autocomplete-grid/autocomplete-grid-button.js +4 -0
  5. package/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.component.js +25 -0
  6. package/autocomplete-grid/autocomplete-grid-cell.js +4 -0
  7. package/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.component.js +29 -0
  8. package/autocomplete-grid/autocomplete-grid-optgroup.js +4 -0
  9. package/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.component.js +41 -0
  10. package/autocomplete-grid/autocomplete-grid-option.js +5 -0
  11. package/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.component.js +28 -0
  12. package/autocomplete-grid/autocomplete-grid-row.js +4 -0
  13. package/autocomplete-grid/autocomplete-grid.js +4 -0
  14. package/autocomplete-grid.js +15 -0
  15. package/core/datetime/date-helper.js +191 -0
  16. package/core/datetime.js +5 -0
  17. package/core/timetable/access-leg-helper.js +91 -0
  18. package/core/timetable/timetable-helper.js +12 -0
  19. package/core/timetable/timetable-properties.js +1 -0
  20. package/core/timetable.js +8 -0
  21. package/custom-elements.json +8211 -0
  22. package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.d.ts +39 -0
  23. package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.d.ts.map +1 -0
  24. package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.js +141 -0
  25. package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.component.d.ts +31 -0
  26. package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.component.d.ts.map +1 -0
  27. package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.component.js +82 -0
  28. package/development/autocomplete-grid/autocomplete-grid-button.d.ts +5 -0
  29. package/development/autocomplete-grid/autocomplete-grid-button.d.ts.map +1 -0
  30. package/development/autocomplete-grid/autocomplete-grid-button.js +5 -0
  31. package/development/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.component.d.ts +19 -0
  32. package/development/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.component.d.ts.map +1 -0
  33. package/development/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.component.js +40 -0
  34. package/development/autocomplete-grid/autocomplete-grid-cell.d.ts +5 -0
  35. package/development/autocomplete-grid/autocomplete-grid-cell.d.ts.map +1 -0
  36. package/development/autocomplete-grid/autocomplete-grid-cell.js +5 -0
  37. package/development/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.component.d.ts +19 -0
  38. package/development/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.component.d.ts.map +1 -0
  39. package/development/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.component.js +40 -0
  40. package/development/autocomplete-grid/autocomplete-grid-optgroup.d.ts +5 -0
  41. package/development/autocomplete-grid/autocomplete-grid-optgroup.d.ts.map +1 -0
  42. package/development/autocomplete-grid/autocomplete-grid-optgroup.js +5 -0
  43. package/development/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.component.d.ts +26 -0
  44. package/development/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.component.d.ts.map +1 -0
  45. package/development/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.component.js +134 -0
  46. package/development/autocomplete-grid/autocomplete-grid-option.d.ts +5 -0
  47. package/development/autocomplete-grid/autocomplete-grid-option.d.ts.map +1 -0
  48. package/development/autocomplete-grid/autocomplete-grid-option.js +6 -0
  49. package/development/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.component.d.ts +20 -0
  50. package/development/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.component.d.ts.map +1 -0
  51. package/development/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.component.js +115 -0
  52. package/development/autocomplete-grid/autocomplete-grid-row.d.ts +5 -0
  53. package/development/autocomplete-grid/autocomplete-grid-row.d.ts.map +1 -0
  54. package/development/autocomplete-grid/autocomplete-grid-row.js +5 -0
  55. package/development/autocomplete-grid/autocomplete-grid.d.ts +5 -0
  56. package/development/autocomplete-grid/autocomplete-grid.d.ts.map +1 -0
  57. package/development/autocomplete-grid/autocomplete-grid.js +5 -0
  58. package/development/autocomplete-grid.d.ts +10 -0
  59. package/development/autocomplete-grid.d.ts.map +1 -0
  60. package/development/autocomplete-grid.js +16 -0
  61. package/development/core/datetime/date-helper.d.ts +27 -0
  62. package/development/core/datetime/date-helper.d.ts.map +1 -0
  63. package/development/core/datetime/date-helper.js +285 -0
  64. package/development/core/datetime.d.ts +5 -0
  65. package/development/core/datetime.d.ts.map +1 -0
  66. package/development/core/datetime.js +6 -0
  67. package/development/core/timetable/access-leg-helper.d.ts +26 -0
  68. package/development/core/timetable/access-leg-helper.d.ts.map +1 -0
  69. package/development/core/timetable/access-leg-helper.js +125 -0
  70. package/development/core/timetable/timetable-helper.d.ts +12 -0
  71. package/development/core/timetable/timetable-helper.d.ts.map +1 -0
  72. package/development/core/timetable/timetable-helper.js +20 -0
  73. package/development/core/timetable/timetable-properties.d.ts +308 -0
  74. package/development/core/timetable/timetable-properties.d.ts.map +1 -0
  75. package/development/core/timetable/timetable-properties.js +2 -0
  76. package/development/core/timetable.d.ts +7 -0
  77. package/development/core/timetable.d.ts.map +1 -0
  78. package/development/core/timetable.js +9 -0
  79. package/development/differenceInMinutes-B0dawX-5.js +26 -0
  80. package/development/format-BMkeaqaF.js +1433 -0
  81. package/development/isValid-BYRch7pV.js +53 -0
  82. package/development/journey-summary/journey-summary.component.d.ts +65 -0
  83. package/development/journey-summary/journey-summary.component.d.ts.map +1 -0
  84. package/development/journey-summary/journey-summary.component.js +294 -0
  85. package/development/journey-summary.d.ts +5 -0
  86. package/development/journey-summary.d.ts.map +1 -0
  87. package/development/journey-summary.js +5 -0
  88. package/development/pearl-chain/pearl-chain.component.d.ts +42 -0
  89. package/development/pearl-chain/pearl-chain.component.d.ts.map +1 -0
  90. package/development/pearl-chain/pearl-chain.component.js +639 -0
  91. package/development/pearl-chain-time/pearl-chain-time.component.d.ts +47 -0
  92. package/development/pearl-chain-time/pearl-chain-time.component.d.ts.map +1 -0
  93. package/development/pearl-chain-time/pearl-chain-time.component.js +312 -0
  94. package/development/pearl-chain-time.d.ts +5 -0
  95. package/development/pearl-chain-time.d.ts.map +1 -0
  96. package/development/pearl-chain-time.js +5 -0
  97. package/development/pearl-chain-vertical/pearl-chain-vertical.component.d.ts +16 -0
  98. package/development/pearl-chain-vertical/pearl-chain-vertical.component.d.ts.map +1 -0
  99. package/development/pearl-chain-vertical/pearl-chain-vertical.component.js +40 -0
  100. package/development/pearl-chain-vertical-item/pearl-chain-vertical-item.component.d.ts +34 -0
  101. package/development/pearl-chain-vertical-item/pearl-chain-vertical-item.component.d.ts.map +1 -0
  102. package/development/pearl-chain-vertical-item/pearl-chain-vertical-item.component.js +398 -0
  103. package/development/pearl-chain-vertical-item.d.ts +5 -0
  104. package/development/pearl-chain-vertical-item.d.ts.map +1 -0
  105. package/development/pearl-chain-vertical-item.js +5 -0
  106. package/development/pearl-chain-vertical.d.ts +5 -0
  107. package/development/pearl-chain-vertical.d.ts.map +1 -0
  108. package/development/pearl-chain-vertical.js +5 -0
  109. package/development/pearl-chain.d.ts +5 -0
  110. package/development/pearl-chain.d.ts.map +1 -0
  111. package/development/pearl-chain.js +5 -0
  112. package/development/seat-reservation/common/mapper/icon-mapper.d.ts +106 -0
  113. package/development/seat-reservation/common/mapper/icon-mapper.d.ts.map +1 -0
  114. package/development/seat-reservation/common/mapper/icon-mapper.js +72 -0
  115. package/development/seat-reservation/common/mapper/mapper.d.ts +34 -0
  116. package/development/seat-reservation/common/mapper/mapper.d.ts.map +1 -0
  117. package/development/seat-reservation/common/mapper/mapper.js +129 -0
  118. package/development/seat-reservation/common/mapper/seat-reservation-sample-data.d.ts +372 -0
  119. package/development/seat-reservation/common/mapper/seat-reservation-sample-data.d.ts.map +1 -0
  120. package/development/seat-reservation/common/mapper/seat-reservation-sample-data.js +31673 -0
  121. package/development/seat-reservation/common/mapper.d.ts +3 -0
  122. package/development/seat-reservation/common/mapper.d.ts.map +1 -0
  123. package/development/seat-reservation/common/mapper.js +10 -0
  124. package/development/seat-reservation/common/svgs.d.ts +24 -0
  125. package/development/seat-reservation/common/svgs.d.ts.map +1 -0
  126. package/development/seat-reservation/common/svgs.js +46 -0
  127. package/development/seat-reservation/common/translations/i18n.d.ts +28 -0
  128. package/development/seat-reservation/common/translations/i18n.d.ts.map +1 -0
  129. package/development/seat-reservation/common/translations/i18n.js +871 -0
  130. package/development/seat-reservation/common/translations.d.ts +2 -0
  131. package/development/seat-reservation/common/translations.d.ts.map +1 -0
  132. package/development/seat-reservation/common/translations.js +5 -0
  133. package/development/seat-reservation/common/types.d.ts +97 -0
  134. package/development/seat-reservation/common/types.d.ts.map +1 -0
  135. package/development/seat-reservation/common/types.js +2 -0
  136. package/development/seat-reservation/common.d.ts +8 -0
  137. package/development/seat-reservation/common.d.ts.map +1 -0
  138. package/development/seat-reservation/common.js +14 -0
  139. package/development/seat-reservation/seat-reservation/seat-reservation-base-element.d.ts +273 -0
  140. package/development/seat-reservation/seat-reservation/seat-reservation-base-element.d.ts.map +1 -0
  141. package/development/seat-reservation/seat-reservation/seat-reservation-base-element.js +1171 -0
  142. package/development/seat-reservation/seat-reservation/seat-reservation.component.d.ts +75 -0
  143. package/development/seat-reservation/seat-reservation/seat-reservation.component.d.ts.map +1 -0
  144. package/development/seat-reservation/seat-reservation/seat-reservation.component.js +832 -0
  145. package/development/seat-reservation/seat-reservation-area/seat-reservation-area.component.d.ts +18 -0
  146. package/development/seat-reservation/seat-reservation-area/seat-reservation-area.component.d.ts.map +1 -0
  147. package/development/seat-reservation/seat-reservation-area/seat-reservation-area.component.js +112 -0
  148. package/development/seat-reservation/seat-reservation-area.d.ts +5 -0
  149. package/development/seat-reservation/seat-reservation-area.d.ts.map +1 -0
  150. package/development/seat-reservation/seat-reservation-area.js +5 -0
  151. package/development/seat-reservation/seat-reservation-graphic/seat-reservation-assets.d.ts +9 -0
  152. package/development/seat-reservation/seat-reservation-graphic/seat-reservation-assets.d.ts.map +1 -0
  153. package/development/seat-reservation/seat-reservation-graphic/seat-reservation-assets.js +303 -0
  154. package/development/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.d.ts +20 -0
  155. package/development/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.d.ts.map +1 -0
  156. package/development/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.js +167 -0
  157. package/development/seat-reservation/seat-reservation-graphic.d.ts +5 -0
  158. package/development/seat-reservation/seat-reservation-graphic.d.ts.map +1 -0
  159. package/development/seat-reservation/seat-reservation-graphic.js +5 -0
  160. package/development/seat-reservation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.d.ts +65 -0
  161. package/development/seat-reservation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.d.ts.map +1 -0
  162. package/development/seat-reservation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.js +798 -0
  163. package/development/seat-reservation/seat-reservation-navigation-coach.d.ts +5 -0
  164. package/development/seat-reservation/seat-reservation-navigation-coach.d.ts.map +1 -0
  165. package/development/seat-reservation/seat-reservation-navigation-coach.js +5 -0
  166. package/development/seat-reservation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.d.ts +21 -0
  167. package/development/seat-reservation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.d.ts.map +1 -0
  168. package/development/seat-reservation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.js +120 -0
  169. package/development/seat-reservation/seat-reservation-navigation-services.d.ts +5 -0
  170. package/development/seat-reservation/seat-reservation-navigation-services.d.ts.map +1 -0
  171. package/development/seat-reservation/seat-reservation-navigation-services.js +5 -0
  172. package/development/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.d.ts +42 -0
  173. package/development/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.d.ts.map +1 -0
  174. package/development/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.js +462 -0
  175. package/development/seat-reservation/seat-reservation-place-control.d.ts +5 -0
  176. package/development/seat-reservation/seat-reservation-place-control.d.ts.map +1 -0
  177. package/development/seat-reservation/seat-reservation-place-control.js +5 -0
  178. package/development/seat-reservation/seat-reservation-scoped/seat-reservation-scoped.component.d.ts +14 -0
  179. package/development/seat-reservation/seat-reservation-scoped/seat-reservation-scoped.component.d.ts.map +1 -0
  180. package/development/seat-reservation/seat-reservation-scoped/seat-reservation-scoped.component.js +34 -0
  181. package/development/seat-reservation/seat-reservation-scoped.d.ts +5 -0
  182. package/development/seat-reservation/seat-reservation-scoped.d.ts.map +1 -0
  183. package/development/seat-reservation/seat-reservation-scoped.js +5 -0
  184. package/development/seat-reservation/seat-reservation.d.ts +6 -0
  185. package/development/seat-reservation/seat-reservation.d.ts.map +1 -0
  186. package/development/seat-reservation/seat-reservation.js +7 -0
  187. package/development/seat-reservation.d.ts +12 -0
  188. package/development/seat-reservation.d.ts.map +1 -0
  189. package/development/seat-reservation.js +30 -0
  190. package/development/timetable-duration/timetable-duration.component.d.ts +22 -0
  191. package/development/timetable-duration/timetable-duration.component.d.ts.map +1 -0
  192. package/development/timetable-duration/timetable-duration.component.js +114 -0
  193. package/development/timetable-duration.d.ts +5 -0
  194. package/development/timetable-duration.d.ts.map +1 -0
  195. package/development/timetable-duration.js +5 -0
  196. package/development/timetable-row/timetable-row.component.d.ts +87 -0
  197. package/development/timetable-row/timetable-row.component.d.ts.map +1 -0
  198. package/development/timetable-row/timetable-row.component.js +787 -0
  199. package/development/timetable-row.d.ts +5 -0
  200. package/development/timetable-row.d.ts.map +1 -0
  201. package/development/timetable-row.js +12 -0
  202. package/development/toDate-BWb6Z1JD.js +24 -0
  203. package/differenceInMinutes-COvvdYsJ.js +23 -0
  204. package/format-CmKROkbc.js +1186 -0
  205. package/index.d.ts +44 -0
  206. package/index.js +43 -0
  207. package/isValid-m3_OsPaB.js +45 -0
  208. package/journey-summary/journey-summary.component.js +193 -0
  209. package/journey-summary.js +4 -0
  210. package/package.json +161 -1
  211. package/pearl-chain/pearl-chain.component.js +164 -0
  212. package/pearl-chain-time/pearl-chain-time.component.js +156 -0
  213. package/pearl-chain-time.js +4 -0
  214. package/pearl-chain-vertical/pearl-chain-vertical.component.js +24 -0
  215. package/pearl-chain-vertical-item/pearl-chain-vertical-item.component.js +76 -0
  216. package/pearl-chain-vertical-item.js +4 -0
  217. package/pearl-chain-vertical.js +4 -0
  218. package/pearl-chain.js +4 -0
  219. package/seat-reservation/common/mapper/icon-mapper.js +71 -0
  220. package/seat-reservation/common/mapper/mapper.js +89 -0
  221. package/seat-reservation/common/mapper/seat-reservation-sample-data.js +31668 -0
  222. package/seat-reservation/common/mapper.js +9 -0
  223. package/seat-reservation/common/svgs.js +243 -0
  224. package/seat-reservation/common/translations/i18n.js +861 -0
  225. package/seat-reservation/common/translations.js +4 -0
  226. package/seat-reservation/common/types.js +1 -0
  227. package/seat-reservation/common.js +13 -0
  228. package/seat-reservation/seat-reservation/seat-reservation-base-element.js +756 -0
  229. package/seat-reservation/seat-reservation/seat-reservation.component.js +410 -0
  230. package/seat-reservation/seat-reservation-area/seat-reservation-area.component.js +50 -0
  231. package/seat-reservation/seat-reservation-area.js +4 -0
  232. package/seat-reservation/seat-reservation-graphic/seat-reservation-assets.js +292 -0
  233. package/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.js +73 -0
  234. package/seat-reservation/seat-reservation-graphic.js +4 -0
  235. package/seat-reservation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.js +277 -0
  236. package/seat-reservation/seat-reservation-navigation-coach.js +4 -0
  237. package/seat-reservation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.js +73 -0
  238. package/seat-reservation/seat-reservation-navigation-services.js +4 -0
  239. package/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.js +167 -0
  240. package/seat-reservation/seat-reservation-place-control.js +4 -0
  241. package/seat-reservation/seat-reservation-scoped/seat-reservation-scoped.component.js +20 -0
  242. package/seat-reservation/seat-reservation-scoped.js +4 -0
  243. package/seat-reservation/seat-reservation.js +6 -0
  244. package/seat-reservation.js +29 -0
  245. package/timetable-duration/timetable-duration.component.js +56 -0
  246. package/timetable-duration.js +4 -0
  247. package/timetable-row/timetable-row.component.js +426 -0
  248. package/timetable-row.js +11 -0
  249. package/toDate-Bw2KTWeq.js +15 -0
@@ -0,0 +1,285 @@
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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
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @entrypoint
3
+ */
4
+ export * from './datetime/date-helper.ts';
5
+ //# sourceMappingURL=datetime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datetime.d.ts","sourceRoot":"","sources":["../../../../src/elements-experimental/core/datetime.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,2BAA2B,CAAC"}
@@ -0,0 +1,6 @@
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
@@ -0,0 +1,26 @@
1
+ import { TemplateResult } from 'lit';
2
+ import { Leg } from './timetable-properties.ts';
3
+ interface IAccessAttribute {
4
+ duration: number;
5
+ text: string;
6
+ icon: string;
7
+ }
8
+ /**
9
+ * @returns renderDepartureTimeAttribute: A function that renders the element for the departure time attribute.
10
+ * @returns renderArrivalTimeAttribute: A function that renders the element for the arrival time attribute.
11
+ * @returns arrivalTimeAttribute: The access attribute for the arrival time.
12
+ * @returns departureTimeAttribute: The access attribute for the departure time.
13
+ * @param legs An array of Leg objects representing the journey legs.
14
+ * @param departureWalk The walking distance in minutes from the departure point to the first leg.
15
+ * @param arrivalWalk The walking distance in minutes from the last leg to the arrival point.
16
+ * @param currentLanguage The current language for localization.
17
+ * @param a11yFootpath Whether the a11y-icon should be shown.
18
+ */
19
+ export declare function getDepartureArrivalTimeAttribute(legs: Leg[], departureWalk: number, arrivalWalk: number, currentLanguage: string, a11yFootpath?: boolean): {
20
+ renderDepartureTimeAttribute: () => TemplateResult;
21
+ renderArrivalTimeAttribute: () => TemplateResult;
22
+ departureTimeAttribute: IAccessAttribute | null;
23
+ arrivalTimeAttribute: IAccessAttribute | null;
24
+ };
25
+ export {};
26
+ //# sourceMappingURL=access-leg-helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access-leg-helper.d.ts","sourceRoot":"","sources":["../../../../../src/elements-experimental/core/timetable/access-leg-helper.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAQ1C,OAAO,KAAK,EAAE,GAAG,EAA8B,MAAM,2BAA2B,CAAC;AAEjF,OAAO,iCAAiC,CAAC;AAEzC,UAAU,gBAAgB;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAuID;;;;;;;;;;GAUG;AACH,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,GAAG,EAAE,EACX,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,EACvB,YAAY,CAAC,EAAE,OAAO,GACrB;IACD,4BAA4B,EAAE,MAAM,cAAc,CAAC;IACnD,0BAA0B,EAAE,MAAM,cAAc,CAAC;IACjD,sBAAsB,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAChD,oBAAoB,EAAE,gBAAgB,GAAG,IAAI,CAAC;CAC/C,CAiJA"}
@@ -0,0 +1,125 @@
1
+ import { i18nWalkingDistanceDeparture, i18nWalkingDistanceArrival } from "@sbb-esta/lyne-elements/core/i18n.js";
2
+ import { nothing, html } from "lit";
3
+ import { isRideLeg, isConnectionLeg, extractTimeAndStringFromNoticeText } from "./timetable-helper.js";
4
+ import "@sbb-esta/lyne-elements/icon.js";
5
+ function getPTConnectionAttribute(leg, connectionLegNotice) {
6
+ const connectionFirstLeg = isConnectionLeg(leg) ? leg : null;
7
+ const connectionFirstLegNotice = connectionFirstLeg ? connectionFirstLeg?.notices?.filter((notice) => connectionLegNotice.includes(notice.name))[0] : null;
8
+ return connectionFirstLegNotice ? {
9
+ duration: connectionFirstLeg?.duration || 0,
10
+ text: connectionFirstLegNotice?.text?.template || "",
11
+ icon: "walk-small"
12
+ } : null;
13
+ }
14
+ function getFirstExtendedLegAttribute(leg, departureWalk, a11yFootpath, currentLanguage) {
15
+ const extendedFirstLeg = isRideLeg(leg) ? leg?.serviceJourney?.notices?.filter((notice) => ["CI"].includes(notice.name))[0] : null;
16
+ const extractTimeAndString = extendedFirstLeg && extractTimeAndStringFromNoticeText(extendedFirstLeg);
17
+ return extendedFirstLeg ? {
18
+ duration: (extractTimeAndString?.duration || 0) + (departureWalk || 0),
19
+ text: a11yFootpath ? i18nWalkingDistanceDeparture[currentLanguage] : extractTimeAndString?.text || "",
20
+ icon: a11yFootpath ? "wheelchair-small" : `sa-${extendedFirstLeg?.name?.toLowerCase()}`
21
+ } : null;
22
+ }
23
+ function getLastExtendedLegAttribute(leg, arrivalWalk, a11yFootpath, currentLanguage) {
24
+ const extendedLastLeg = isRideLeg(leg) ? leg?.serviceJourney?.notices?.filter((notice) => ["CO"].includes(notice.name))[0] : null;
25
+ const extractTimeAndString = extendedLastLeg && extractTimeAndStringFromNoticeText(extendedLastLeg);
26
+ return extendedLastLeg ? {
27
+ duration: (extractTimeAndString?.duration || 0) + (arrivalWalk || 0),
28
+ text: a11yFootpath ? i18nWalkingDistanceArrival[currentLanguage] : extractTimeAndString?.text || "",
29
+ icon: a11yFootpath ? "wheelchair-small" : `sa-${extendedLastLeg?.name?.toLowerCase()}`
30
+ } : null;
31
+ }
32
+ function renderTransferTime(duration, icon, currentLanguage, label, type) {
33
+ return html`
34
+ <span class="sbb-pearl-chain__time-transfer sbb-pearl-chain__time-transfer--${icon}-${type}">
35
+ <sbb-icon name=${icon}></sbb-icon>
36
+ <time datetime=${duration + "M"}>
37
+ <span class="sbb-screen-reader-only">
38
+ ${!label && type ? type === "departure" ? i18nWalkingDistanceDeparture[currentLanguage] : i18nWalkingDistanceArrival[currentLanguage] : nothing}
39
+ ${label ? html`<span>${label}</span>` : nothing}&nbsp;
40
+ </span>
41
+ ${duration}
42
+ <span class="sbb-pearl-chain__time-walktime-prime-symbol" aria-hidden="true">'</span>
43
+ <span class="sbb-screen-reader-only">min</span>
44
+ </time>
45
+ </span>
46
+ `;
47
+ }
48
+ function renderWalkTime(duration, label, variant, icon) {
49
+ return html`
50
+ <span class="sbb-pearl-chain__time-walktime sbb-pearl-chain__time-walktime--${icon}-${variant}">
51
+ <sbb-icon name=${icon}></sbb-icon>
52
+ <time datetime=${duration + "M"}>
53
+ <span class="sbb-screen-reader-only">${label}</span>
54
+ ${duration}
55
+ <span class="sbb-pearl-chain__time-walktime-prime-symbol" aria-hidden="true">'</span>
56
+ </time>
57
+ </span>
58
+ `;
59
+ }
60
+ function getDepartureArrivalTimeAttribute(legs, departureWalk, arrivalWalk, currentLanguage, a11yFootpath) {
61
+ const connectionRideLeg = legs && legs.filter((leg) => isRideLeg(leg) || isConnectionLeg(leg))[0];
62
+ const connectionLegNotice = ["YM", "YB", "Y", "YT"];
63
+ const connectionFirstLeg = getPTConnectionAttribute(connectionRideLeg, connectionLegNotice);
64
+ const extendedFirstLeg = getFirstExtendedLegAttribute(connectionRideLeg, departureWalk, a11yFootpath, currentLanguage);
65
+ const departureWalkAttribute = departureWalk ? {
66
+ text: i18nWalkingDistanceDeparture[currentLanguage],
67
+ duration: departureWalk,
68
+ icon: a11yFootpath ? "wheelchair-small" : "walk-small"
69
+ } : null;
70
+ const getDepartureType = () => {
71
+ if (connectionFirstLeg) {
72
+ return connectionFirstLeg;
73
+ } else if (departureWalkAttribute && !extendedFirstLeg && !connectionFirstLeg) {
74
+ return departureWalkAttribute;
75
+ } else if (extendedFirstLeg) {
76
+ return extendedFirstLeg;
77
+ } else {
78
+ return null;
79
+ }
80
+ };
81
+ function renderDepartureTimeAttribute() {
82
+ return html`
83
+ ${connectionFirstLeg ? renderWalkTime(connectionFirstLeg.duration, connectionFirstLeg.text, "left", connectionFirstLeg.icon) : nothing}
84
+ ${departureWalkAttribute && !extendedFirstLeg && !connectionFirstLeg ? renderWalkTime(departureWalkAttribute.duration, departureWalkAttribute.text, "left", departureWalkAttribute.icon) : nothing}
85
+ ${extendedFirstLeg ? a11yFootpath ? renderWalkTime(extendedFirstLeg.duration, extendedFirstLeg.text, "left", extendedFirstLeg.icon) : renderTransferTime(extendedFirstLeg.duration, extendedFirstLeg.icon, currentLanguage, extendedFirstLeg.text, "departure") : nothing}
86
+ `;
87
+ }
88
+ const lastLeg = legs && legs[legs.length - 1];
89
+ const lastConnectionRideLeg = (isConnectionLeg(lastLeg) || isRideLeg(lastLeg)) && lastLeg;
90
+ const connectionLastLeg = lastConnectionRideLeg && getPTConnectionAttribute(lastConnectionRideLeg, connectionLegNotice);
91
+ const extendedLastLeg = lastConnectionRideLeg && getLastExtendedLegAttribute(lastConnectionRideLeg, arrivalWalk, a11yFootpath, currentLanguage);
92
+ const arrivalWalkAttribute = arrivalWalk ? {
93
+ text: i18nWalkingDistanceArrival[currentLanguage],
94
+ duration: arrivalWalk,
95
+ icon: a11yFootpath ? "wheelchair-small" : "walk-small"
96
+ } : null;
97
+ const getArrivalType = () => {
98
+ if (connectionLastLeg) {
99
+ return connectionLastLeg;
100
+ } else if (arrivalWalkAttribute && !extendedLastLeg && !connectionLastLeg) {
101
+ return arrivalWalkAttribute;
102
+ } else if (extendedLastLeg) {
103
+ return extendedLastLeg;
104
+ } else {
105
+ return null;
106
+ }
107
+ };
108
+ function renderArrivalTimeAttribute() {
109
+ return html`
110
+ ${connectionLastLeg ? renderWalkTime(connectionLastLeg.duration, connectionLastLeg.text, "right", connectionLastLeg.icon) : nothing}
111
+ ${arrivalWalkAttribute && !extendedLastLeg && !connectionLastLeg ? renderWalkTime(arrivalWalkAttribute.duration, arrivalWalkAttribute.text, "right", arrivalWalkAttribute.icon) : nothing}
112
+ ${extendedLastLeg ? a11yFootpath ? renderWalkTime(extendedLastLeg.duration, extendedLastLeg.text, "right", extendedLastLeg.icon) : renderTransferTime(extendedLastLeg.duration, extendedLastLeg.icon, currentLanguage, extendedLastLeg.text, "arrival") : nothing}
113
+ `;
114
+ }
115
+ return {
116
+ renderDepartureTimeAttribute,
117
+ renderArrivalTimeAttribute,
118
+ departureTimeAttribute: getDepartureType(),
119
+ arrivalTimeAttribute: getArrivalType()
120
+ };
121
+ }
122
+ export {
123
+ getDepartureArrivalTimeAttribute
124
+ };
125
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLWxlZy1oZWxwZXIuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy1leHBlcmltZW50YWwvY29yZS90aW1ldGFibGUvYWNjZXNzLWxlZy1oZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhpcyBoZWxwZXIgZmlsZSBjb250YWlucyBzZXZlcmFsIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGFjY2Vzc2luZyBhdHRyaWJ1dGVzIGZvciB0aGUgY29ubmVjdGlvbnMuXG5cbmltcG9ydCB7XG4gIGkxOG5XYWxraW5nRGlzdGFuY2VBcnJpdmFsLFxuICBpMThuV2Fsa2luZ0Rpc3RhbmNlRGVwYXJ0dXJlLFxufSBmcm9tICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9jb3JlL2kxOG4uanMnO1xuaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZVJlc3VsdCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBodG1sLCBub3RoaW5nIH0gZnJvbSAnbGl0JztcblxuaW1wb3J0IHtcbiAgZXh0cmFjdFRpbWVBbmRTdHJpbmdGcm9tTm90aWNlVGV4dCxcbiAgaXNDb25uZWN0aW9uTGVnLFxuICBpc1JpZGVMZWcsXG59IGZyb20gJy4vdGltZXRhYmxlLWhlbHBlci50cyc7XG5pbXBvcnQgdHlwZSB7IExlZywgUHRDb25uZWN0aW9uTGVnLCBQdFJpZGVMZWcgfSBmcm9tICcuL3RpbWV0YWJsZS1wcm9wZXJ0aWVzLnRzJztcblxuaW1wb3J0ICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9pY29uLmpzJztcblxuaW50ZXJmYWNlIElBY2Nlc3NBdHRyaWJ1dGUge1xuICBkdXJhdGlvbjogbnVtYmVyO1xuICB0ZXh0OiBzdHJpbmc7XG4gIGljb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB0aGUgYXR0cmlidXRlIG9mIGEgQ29ubmVjdGlvbkxlZ1xuICovXG5mdW5jdGlvbiBnZXRQVENvbm5lY3Rpb25BdHRyaWJ1dGUoXG4gIGxlZzogUHRSaWRlTGVnIHwgUHRDb25uZWN0aW9uTGVnLFxuICBjb25uZWN0aW9uTGVnTm90aWNlOiBzdHJpbmdbXSxcbik6IElBY2Nlc3NBdHRyaWJ1dGUgfCBudWxsIHtcbiAgY29uc3QgY29ubmVjdGlvbkZpcnN0TGVnID0gaXNDb25uZWN0aW9uTGVnKGxlZykgPyAobGVnIGFzIFB0Q29ubmVjdGlvbkxlZykgOiBudWxsO1xuXG4gIGNvbnN0IGNvbm5lY3Rpb25GaXJzdExlZ05vdGljZSA9IGNvbm5lY3Rpb25GaXJzdExlZ1xuICAgID8gY29ubmVjdGlvbkZpcnN0TGVnPy5ub3RpY2VzPy5maWx0ZXIoKG5vdGljZSkgPT4gY29ubmVjdGlvbkxlZ05vdGljZS5pbmNsdWRlcyhub3RpY2UubmFtZSkpWzBdXG4gICAgOiBudWxsO1xuXG4gIHJldHVybiBjb25uZWN0aW9uRmlyc3RMZWdOb3RpY2VcbiAgICA/IHtcbiAgICAgICAgZHVyYXRpb246IGNvbm5lY3Rpb25GaXJzdExlZz8uZHVyYXRpb24gfHwgMCxcbiAgICAgICAgdGV4dDogY29ubmVjdGlvbkZpcnN0TGVnTm90aWNlPy50ZXh0Py50ZW1wbGF0ZSB8fCAnJyxcbiAgICAgICAgaWNvbjogJ3dhbGstc21hbGwnLFxuICAgICAgfVxuICAgIDogbnVsbDtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB0aGUgZXh0ZW5kZWQgZW50ZXIgYXR0cmlidXRlIG9mIHRoZSBQVFJpZGVMZWdcbiAqL1xuZnVuY3Rpb24gZ2V0Rmlyc3RFeHRlbmRlZExlZ0F0dHJpYnV0ZShcbiAgbGVnOiBQdFJpZGVMZWcgfCBQdENvbm5lY3Rpb25MZWcsXG4gIGRlcGFydHVyZVdhbGs6IG51bWJlcixcbiAgYTExeUZvb3RwYXRoOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuICBjdXJyZW50TGFuZ3VhZ2U6IHN0cmluZyxcbik6IElBY2Nlc3NBdHRyaWJ1dGUgfCBudWxsIHtcbiAgLy8gRXh0ZW5kZWQgZW50ZXJcbiAgY29uc3QgZXh0ZW5kZWRGaXJzdExlZyA9IGlzUmlkZUxlZyhsZWcpXG4gICAgPyAobGVnIGFzIFB0UmlkZUxlZyk/LnNlcnZpY2VKb3VybmV5Py5ub3RpY2VzPy5maWx0ZXIoKG5vdGljZSkgPT5cbiAgICAgICAgWydDSSddLmluY2x1ZGVzKG5vdGljZS5uYW1lKSxcbiAgICAgIClbMF1cbiAgICA6IG51bGw7XG5cbiAgY29uc3QgZXh0cmFjdFRpbWVBbmRTdHJpbmcgPVxuICAgIGV4dGVuZGVkRmlyc3RMZWcgJiYgZXh0cmFjdFRpbWVBbmRTdHJpbmdGcm9tTm90aWNlVGV4dChleHRlbmRlZEZpcnN0TGVnKTtcblxuICByZXR1cm4gZXh0ZW5kZWRGaXJzdExlZ1xuICAgID8ge1xuICAgICAgICBkdXJhdGlvbjogKGV4dHJhY3RUaW1lQW5kU3RyaW5nPy5kdXJhdGlvbiB8fCAwKSArIChkZXBhcnR1cmVXYWxrIHx8IDApLFxuICAgICAgICB0ZXh0OiBhMTF5Rm9vdHBhdGhcbiAgICAgICAgICA/IGkxOG5XYWxraW5nRGlzdGFuY2VEZXBhcnR1cmVbY3VycmVudExhbmd1YWdlXVxuICAgICAgICAgIDogZXh0cmFjdFRpbWVBbmRTdHJpbmc/LnRleHQgfHwgJycsXG4gICAgICAgIGljb246IGExMXlGb290cGF0aCA/ICd3aGVlbGNoYWlyLXNtYWxsJyA6IGBzYS0ke2V4dGVuZGVkRmlyc3RMZWc/Lm5hbWU/LnRvTG93ZXJDYXNlKCl9YCxcbiAgICAgIH1cbiAgICA6IG51bGw7XG59XG5cbi8qKlxuICogQHJldHVybnMgdGhlIGV4dGVuZGVkIGV4aXQgYXR0cmlidXRlIG9mIHRoZSBQVFJpZGVMZWdcbiAqL1xuZnVuY3Rpb24gZ2V0TGFzdEV4dGVuZGVkTGVnQXR0cmlidXRlKFxuICBsZWc6IExlZyxcbiAgYXJyaXZhbFdhbGs6IG51bWJlcixcbiAgYTExeUZvb3RwYXRoOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuICBjdXJyZW50TGFuZ3VhZ2U6IHN0cmluZyxcbik6IElBY2Nlc3NBdHRyaWJ1dGUgfCBudWxsIHtcbiAgLy8gRXh0ZW5kZWQgZXhpdFxuICBjb25zdCBleHRlbmRlZExhc3RMZWcgPSBpc1JpZGVMZWcobGVnKVxuICAgID8gKGxlZyBhcyBQdFJpZGVMZWcpPy5zZXJ2aWNlSm91cm5leT8ubm90aWNlcz8uZmlsdGVyKChub3RpY2UpID0+XG4gICAgICAgIFsnQ08nXS5pbmNsdWRlcyhub3RpY2UubmFtZSksXG4gICAgICApWzBdXG4gICAgOiBudWxsO1xuXG4gIGNvbnN0IGV4dHJhY3RUaW1lQW5kU3RyaW5nID1cbiAgICBleHRlbmRlZExhc3RMZWcgJiYgZXh0cmFjdFRpbWVBbmRTdHJpbmdGcm9tTm90aWNlVGV4dChleHRlbmRlZExhc3RMZWcpO1xuXG4gIHJldHVybiBleHRlbmRlZExhc3RMZWdcbiAgICA/IHtcbiAgICAgICAgZHVyYXRpb246IChleHRyYWN0VGltZUFuZFN0cmluZz8uZHVyYXRpb24gfHwgMCkgKyAoYXJyaXZhbFdhbGsgfHwgMCksXG4gICAgICAgIHRleHQ6IGExMXlGb290cGF0aFxuICAgICAgICAgID8gaTE4bldhbGtpbmdEaXN0YW5jZUFycml2YWxbY3VycmVudExhbmd1YWdlXVxuICAgICAgICAgIDogZXh0cmFjdFRpbWVBbmRTdHJpbmc/LnRleHQgfHwgJycsXG4gICAgICAgIGljb246IGExMXlGb290cGF0aCA/ICd3aGVlbGNoYWlyLXNtYWxsJyA6IGBzYS0ke2V4dGVuZGVkTGFzdExlZz8ubmFtZT8udG9Mb3dlckNhc2UoKX1gLFxuICAgICAgfVxuICAgIDogbnVsbDtcbn1cblxuLyoqXG4gKiByZW5kZXJzIHRoZSBleHRlbmRlZCBleGl0L2VudGVyIGljb24gd2l0aCB0aGUgZHVyYXRpb25cbiAqL1xuZnVuY3Rpb24gcmVuZGVyVHJhbnNmZXJUaW1lKFxuICBkdXJhdGlvbjogbnVtYmVyIHwgc3RyaW5nLFxuICBpY29uOiBzdHJpbmcsXG4gIGN1cnJlbnRMYW5ndWFnZTogc3RyaW5nLFxuICBsYWJlbD86IHN0cmluZyxcbiAgdHlwZT86ICdkZXBhcnR1cmUnIHwgJ2Fycml2YWwnLFxuKTogVGVtcGxhdGVSZXN1bHQge1xuICByZXR1cm4gaHRtbGBcbiAgICA8c3BhbiBjbGFzcz1cInNiYi1wZWFybC1jaGFpbl9fdGltZS10cmFuc2ZlciBzYmItcGVhcmwtY2hhaW5fX3RpbWUtdHJhbnNmZXItLSR7aWNvbn0tJHt0eXBlfVwiPlxuICAgICAgPHNiYi1pY29uIG5hbWU9JHtpY29ufT48L3NiYi1pY29uPlxuICAgICAgPHRpbWUgZGF0ZXRpbWU9JHtkdXJhdGlvbiArICdNJ30+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLXNjcmVlbi1yZWFkZXItb25seVwiPlxuICAgICAgICAgICR7IWxhYmVsICYmIHR5cGVcbiAgICAgICAgICAgID8gdHlwZSA9PT0gJ2RlcGFydHVyZSdcbiAgICAgICAgICAgICAgPyBpMThuV2Fsa2luZ0Rpc3RhbmNlRGVwYXJ0dXJlW2N1cnJlbnRMYW5ndWFnZV1cbiAgICAgICAgICAgICAgOiBpMThuV2Fsa2luZ0Rpc3RhbmNlQXJyaXZhbFtjdXJyZW50TGFuZ3VhZ2VdXG4gICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgJHtsYWJlbCA/IGh0bWxgPHNwYW4+JHtsYWJlbH08L3NwYW4+YCA6IG5vdGhpbmd9Jm5ic3A7XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgJHtkdXJhdGlvbn1cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItcGVhcmwtY2hhaW5fX3RpbWUtd2Fsa3RpbWUtcHJpbWUtc3ltYm9sXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+Jzwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItc2NyZWVuLXJlYWRlci1vbmx5XCI+bWluPC9zcGFuPlxuICAgICAgPC90aW1lPlxuICAgIDwvc3Bhbj5cbiAgYDtcbn1cblxuLyoqXG4gKiByZW5kZXJzIGEgd2Fsay10aW1lIGljb24gd2l0aCB0aGUgd2FsayBkdXJhdGlvblxuICovXG5mdW5jdGlvbiByZW5kZXJXYWxrVGltZShcbiAgZHVyYXRpb246IG51bWJlciB8IHN0cmluZyxcbiAgbGFiZWw6IHN0cmluZyxcbiAgdmFyaWFudDogJ2xlZnQnIHwgJ3JpZ2h0JyxcbiAgaWNvbjogc3RyaW5nLFxuKTogVGVtcGxhdGVSZXN1bHQge1xuICByZXR1cm4gaHRtbGBcbiAgICA8c3BhbiBjbGFzcz1cInNiYi1wZWFybC1jaGFpbl9fdGltZS13YWxrdGltZSBzYmItcGVhcmwtY2hhaW5fX3RpbWUtd2Fsa3RpbWUtLSR7aWNvbn0tJHt2YXJpYW50fVwiPlxuICAgICAgPHNiYi1pY29uIG5hbWU9JHtpY29ufT48L3NiYi1pY29uPlxuICAgICAgPHRpbWUgZGF0ZXRpbWU9JHtkdXJhdGlvbiArICdNJ30+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLXNjcmVlbi1yZWFkZXItb25seVwiPiR7bGFiZWx9PC9zcGFuPlxuICAgICAgICAke2R1cmF0aW9ufVxuICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1wZWFybC1jaGFpbl9fdGltZS13YWxrdGltZS1wcmltZS1zeW1ib2xcIiBhcmlhLWhpZGRlbj1cInRydWVcIj4nPC9zcGFuPlxuICAgICAgPC90aW1lPlxuICAgIDwvc3Bhbj5cbiAgYDtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyByZW5kZXJEZXBhcnR1cmVUaW1lQXR0cmlidXRlOiBBIGZ1bmN0aW9uIHRoYXQgcmVuZGVycyB0aGUgZWxlbWVudCBmb3IgdGhlIGRlcGFydHVyZSB0aW1lIGF0dHJpYnV0ZS5cbiAqIEByZXR1cm5zIHJlbmRlckFycml2YWxUaW1lQXR0cmlidXRlOiBBIGZ1bmN0aW9uIHRoYXQgcmVuZGVycyB0aGUgZWxlbWVudCBmb3IgdGhlIGFycml2YWwgdGltZSBhdHRyaWJ1dGUuXG4gKiBAcmV0dXJucyBhcnJpdmFsVGltZUF0dHJpYnV0ZTogVGhlIGFjY2VzcyBhdHRyaWJ1dGUgZm9yIHRoZSBhcnJpdmFsIHRpbWUuXG4gKiBAcmV0dXJucyBkZXBhcnR1cmVUaW1lQXR0cmlidXRlOiBUaGUgYWNjZXNzIGF0dHJpYnV0ZSBmb3IgdGhlIGRlcGFydHVyZSB0aW1lLlxuICogQHBhcmFtIGxlZ3MgQW4gYXJyYXkgb2YgTGVnIG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZSBqb3VybmV5IGxlZ3MuXG4gKiBAcGFyYW0gZGVwYXJ0dXJlV2FsayBUaGUgd2Fsa2luZyBkaXN0YW5jZSBpbiBtaW51dGVzIGZyb20gdGhlIGRlcGFydHVyZSBwb2ludCB0byB0aGUgZmlyc3QgbGVnLlxuICogQHBhcmFtIGFycml2YWxXYWxrIFRoZSB3YWxraW5nIGRpc3RhbmNlIGluIG1pbnV0ZXMgZnJvbSB0aGUgbGFzdCBsZWcgdG8gdGhlIGFycml2YWwgcG9pbnQuXG4gKiBAcGFyYW0gY3VycmVudExhbmd1YWdlIFRoZSBjdXJyZW50IGxhbmd1YWdlIGZvciBsb2NhbGl6YXRpb24uXG4gKiBAcGFyYW0gYTExeUZvb3RwYXRoIFdoZXRoZXIgdGhlIGExMXktaWNvbiBzaG91bGQgYmUgc2hvd24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXBhcnR1cmVBcnJpdmFsVGltZUF0dHJpYnV0ZShcbiAgbGVnczogTGVnW10sXG4gIGRlcGFydHVyZVdhbGs6IG51bWJlcixcbiAgYXJyaXZhbFdhbGs6IG51bWJlcixcbiAgY3VycmVudExhbmd1YWdlOiBzdHJpbmcsXG4gIGExMXlGb290cGF0aD86IGJvb2xlYW4sXG4pOiB7XG4gIHJlbmRlckRlcGFydHVyZVRpbWVBdHRyaWJ1dGU6ICgpID0+IFRlbXBsYXRlUmVzdWx0O1xuICByZW5kZXJBcnJpdmFsVGltZUF0dHJpYnV0ZTogKCkgPT4gVGVtcGxhdGVSZXN1bHQ7XG4gIGRlcGFydHVyZVRpbWVBdHRyaWJ1dGU6IElBY2Nlc3NBdHRyaWJ1dGUgfCBudWxsO1xuICBhcnJpdmFsVGltZUF0dHJpYnV0ZTogSUFjY2Vzc0F0dHJpYnV0ZSB8IG51bGw7XG59IHtcbiAgY29uc3QgY29ubmVjdGlvblJpZGVMZWcgPVxuICAgIGxlZ3MgJiZcbiAgICAobGVncy5maWx0ZXIoKGxlZykgPT4gaXNSaWRlTGVnKGxlZykgfHwgaXNDb25uZWN0aW9uTGVnKGxlZykpWzBdIGFzXG4gICAgICB8IFB0UmlkZUxlZ1xuICAgICAgfCBQdENvbm5lY3Rpb25MZWcpO1xuXG4gIGNvbnN0IGNvbm5lY3Rpb25MZWdOb3RpY2UgPSBbJ1lNJywgJ1lCJywgJ1knLCAnWVQnXTtcblxuICBjb25zdCBjb25uZWN0aW9uRmlyc3RMZWcgPSBnZXRQVENvbm5lY3Rpb25BdHRyaWJ1dGUoY29ubmVjdGlvblJpZGVMZWcsIGNvbm5lY3Rpb25MZWdOb3RpY2UpO1xuICBjb25zdCBleHRlbmRlZEZpcnN0TGVnID0gZ2V0Rmlyc3RFeHRlbmRlZExlZ0F0dHJpYnV0ZShcbiAgICBjb25uZWN0aW9uUmlkZUxlZyxcbiAgICBkZXBhcnR1cmVXYWxrLFxuICAgIGExMXlGb290cGF0aCxcbiAgICBjdXJyZW50TGFuZ3VhZ2UsXG4gICk7XG4gIGNvbnN0IGRlcGFydHVyZVdhbGtBdHRyaWJ1dGUgPSBkZXBhcnR1cmVXYWxrXG4gICAgPyB7XG4gICAgICAgIHRleHQ6IGkxOG5XYWxraW5nRGlzdGFuY2VEZXBhcnR1cmVbY3VycmVudExhbmd1YWdlXSxcbiAgICAgICAgZHVyYXRpb246IGRlcGFydHVyZVdhbGssXG4gICAgICAgIGljb246IGExMXlGb290cGF0aCA/ICd3aGVlbGNoYWlyLXNtYWxsJyA6ICd3YWxrLXNtYWxsJyxcbiAgICAgIH1cbiAgICA6IG51bGw7XG5cbiAgY29uc3QgZ2V0RGVwYXJ0dXJlVHlwZSA9ICgpOiBJQWNjZXNzQXR0cmlidXRlIHwgbnVsbCA9PiB7XG4gICAgaWYgKGNvbm5lY3Rpb25GaXJzdExlZykge1xuICAgICAgcmV0dXJuIGNvbm5lY3Rpb25GaXJzdExlZztcbiAgICB9IGVsc2UgaWYgKGRlcGFydHVyZVdhbGtBdHRyaWJ1dGUgJiYgIWV4dGVuZGVkRmlyc3RMZWcgJiYgIWNvbm5lY3Rpb25GaXJzdExlZykge1xuICAgICAgcmV0dXJuIGRlcGFydHVyZVdhbGtBdHRyaWJ1dGU7XG4gICAgfSBlbHNlIGlmIChleHRlbmRlZEZpcnN0TGVnKSB7XG4gICAgICByZXR1cm4gZXh0ZW5kZWRGaXJzdExlZztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIHJlbmRlckRlcGFydHVyZVRpbWVBdHRyaWJ1dGUoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgJHtjb25uZWN0aW9uRmlyc3RMZWdcbiAgICAgICAgPyByZW5kZXJXYWxrVGltZShcbiAgICAgICAgICAgIGNvbm5lY3Rpb25GaXJzdExlZy5kdXJhdGlvbixcbiAgICAgICAgICAgIGNvbm5lY3Rpb25GaXJzdExlZy50ZXh0LFxuICAgICAgICAgICAgJ2xlZnQnLFxuICAgICAgICAgICAgY29ubmVjdGlvbkZpcnN0TGVnLmljb24sXG4gICAgICAgICAgKVxuICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAke2RlcGFydHVyZVdhbGtBdHRyaWJ1dGUgJiYgIWV4dGVuZGVkRmlyc3RMZWcgJiYgIWNvbm5lY3Rpb25GaXJzdExlZ1xuICAgICAgICA/IHJlbmRlcldhbGtUaW1lKFxuICAgICAgICAgICAgZGVwYXJ0dXJlV2Fsa0F0dHJpYnV0ZS5kdXJhdGlvbixcbiAgICAgICAgICAgIGRlcGFydHVyZVdhbGtBdHRyaWJ1dGUudGV4dCxcbiAgICAgICAgICAgICdsZWZ0JyxcbiAgICAgICAgICAgIGRlcGFydHVyZVdhbGtBdHRyaWJ1dGUuaWNvbixcbiAgICAgICAgICApXG4gICAgICAgIDogbm90aGluZ31cbiAgICAgICR7ZXh0ZW5kZWRGaXJzdExlZ1xuICAgICAgICA/IGExMXlGb290cGF0aFxuICAgICAgICAgID8gcmVuZGVyV2Fsa1RpbWUoXG4gICAgICAgICAgICAgIGV4dGVuZGVkRmlyc3RMZWcuZHVyYXRpb24sXG4gICAgICAgICAgICAgIGV4dGVuZGVkRmlyc3RMZWcudGV4dCxcbiAgICAgICAgICAgICAgJ2xlZnQnLFxuICAgICAgICAgICAgICBleHRlbmRlZEZpcnN0TGVnLmljb24sXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiByZW5kZXJUcmFuc2ZlclRpbWUoXG4gICAgICAgICAgICAgIGV4dGVuZGVkRmlyc3RMZWcuZHVyYXRpb24sXG4gICAgICAgICAgICAgIGV4dGVuZGVkRmlyc3RMZWcuaWNvbixcbiAgICAgICAgICAgICAgY3VycmVudExhbmd1YWdlLFxuICAgICAgICAgICAgICBleHRlbmRlZEZpcnN0TGVnLnRleHQsXG4gICAgICAgICAgICAgICdkZXBhcnR1cmUnLFxuICAgICAgICAgICAgKVxuICAgICAgICA6IG5vdGhpbmd9XG4gICAgYDtcbiAgfVxuXG4gIGNvbnN0IGxhc3RMZWcgPSBsZWdzICYmIGxlZ3NbbGVncy5sZW5ndGggLSAxXTtcbiAgY29uc3QgbGFzdENvbm5lY3Rpb25SaWRlTGVnID1cbiAgICAoaXNDb25uZWN0aW9uTGVnKGxhc3RMZWcpIHx8IGlzUmlkZUxlZyhsYXN0TGVnKSkgJiYgKGxhc3RMZWcgYXMgUHRDb25uZWN0aW9uTGVnIHwgUHRSaWRlTGVnKTtcblxuICBjb25zdCBjb25uZWN0aW9uTGFzdExlZyA9XG4gICAgbGFzdENvbm5lY3Rpb25SaWRlTGVnICYmIGdldFBUQ29ubmVjdGlvbkF0dHJpYnV0ZShsYXN0Q29ubmVjdGlvblJpZGVMZWcsIGNvbm5lY3Rpb25MZWdOb3RpY2UpO1xuICBjb25zdCBleHRlbmRlZExhc3RMZWcgPVxuICAgIGxhc3RDb25uZWN0aW9uUmlkZUxlZyAmJlxuICAgIGdldExhc3RFeHRlbmRlZExlZ0F0dHJpYnV0ZShsYXN0Q29ubmVjdGlvblJpZGVMZWcsIGFycml2YWxXYWxrLCBhMTF5Rm9vdHBhdGgsIGN1cnJlbnRMYW5ndWFnZSk7XG4gIGNvbnN0IGFycml2YWxXYWxrQXR0cmlidXRlID0gYXJyaXZhbFdhbGtcbiAgICA/IHtcbiAgICAgICAgdGV4dDogaTE4bldhbGtpbmdEaXN0YW5jZUFycml2YWxbY3VycmVudExhbmd1YWdlXSxcbiAgICAgICAgZHVyYXRpb246IGFycml2YWxXYWxrLFxuICAgICAgICBpY29uOiBhMTF5Rm9vdHBhdGggPyAnd2hlZWxjaGFpci1zbWFsbCcgOiAnd2Fsay1zbWFsbCcsXG4gICAgICB9XG4gICAgOiBudWxsO1xuXG4gIGNvbnN0IGdldEFycml2YWxUeXBlID0gKCk6IElBY2Nlc3NBdHRyaWJ1dGUgfCBudWxsID0+IHtcbiAgICBpZiAoY29ubmVjdGlvbkxhc3RMZWcpIHtcbiAgICAgIHJldHVybiBjb25uZWN0aW9uTGFzdExlZztcbiAgICB9IGVsc2UgaWYgKGFycml2YWxXYWxrQXR0cmlidXRlICYmICFleHRlbmRlZExhc3RMZWcgJiYgIWNvbm5lY3Rpb25MYXN0TGVnKSB7XG4gICAgICByZXR1cm4gYXJyaXZhbFdhbGtBdHRyaWJ1dGU7XG4gICAgfSBlbHNlIGlmIChleHRlbmRlZExhc3RMZWcpIHtcbiAgICAgIHJldHVybiBleHRlbmRlZExhc3RMZWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiByZW5kZXJBcnJpdmFsVGltZUF0dHJpYnV0ZSgpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICAke2Nvbm5lY3Rpb25MYXN0TGVnXG4gICAgICAgID8gcmVuZGVyV2Fsa1RpbWUoXG4gICAgICAgICAgICBjb25uZWN0aW9uTGFzdExlZy5kdXJhdGlvbixcbiAgICAgICAgICAgIGNvbm5lY3Rpb25MYXN0TGVnLnRleHQsXG4gICAgICAgICAgICAncmlnaHQnLFxuICAgICAgICAgICAgY29ubmVjdGlvbkxhc3RMZWcuaWNvbixcbiAgICAgICAgICApXG4gICAgICAgIDogbm90aGluZ31cbiAgICAgICR7YXJyaXZhbFdhbGtBdHRyaWJ1dGUgJiYgIWV4dGVuZGVkTGFzdExlZyAmJiAhY29ubmVjdGlvbkxhc3RMZWdcbiAgICAgICAgPyByZW5kZXJXYWxrVGltZShcbiAgICAgICAgICAgIGFycml2YWxXYWxrQXR0cmlidXRlLmR1cmF0aW9uLFxuICAgICAgICAgICAgYXJyaXZhbFdhbGtBdHRyaWJ1dGUudGV4dCxcbiAgICAgICAgICAgICdyaWdodCcsXG4gICAgICAgICAgICBhcnJpdmFsV2Fsa0F0dHJpYnV0ZS5pY29uLFxuICAgICAgICAgIClcbiAgICAgICAgOiBub3RoaW5nfVxuICAgICAgJHtleHRlbmRlZExhc3RMZWdcbiAgICAgICAgPyBhMTF5Rm9vdHBhdGhcbiAgICAgICAgICA/IHJlbmRlcldhbGtUaW1lKFxuICAgICAgICAgICAgICBleHRlbmRlZExhc3RMZWcuZHVyYXRpb24sXG4gICAgICAgICAgICAgIGV4dGVuZGVkTGFzdExlZy50ZXh0LFxuICAgICAgICAgICAgICAncmlnaHQnLFxuICAgICAgICAgICAgICBleHRlbmRlZExhc3RMZWcuaWNvbixcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IHJlbmRlclRyYW5zZmVyVGltZShcbiAgICAgICAgICAgICAgZXh0ZW5kZWRMYXN0TGVnLmR1cmF0aW9uLFxuICAgICAgICAgICAgICBleHRlbmRlZExhc3RMZWcuaWNvbixcbiAgICAgICAgICAgICAgY3VycmVudExhbmd1YWdlLFxuICAgICAgICAgICAgICBleHRlbmRlZExhc3RMZWcudGV4dCxcbiAgICAgICAgICAgICAgJ2Fycml2YWwnLFxuICAgICAgICAgICAgKVxuICAgICAgICA6IG5vdGhpbmd9XG4gICAgYDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcmVuZGVyRGVwYXJ0dXJlVGltZUF0dHJpYnV0ZSxcbiAgICByZW5kZXJBcnJpdmFsVGltZUF0dHJpYnV0ZSxcbiAgICBkZXBhcnR1cmVUaW1lQXR0cmlidXRlOiBnZXREZXBhcnR1cmVUeXBlKCksXG4gICAgYXJyaXZhbFRpbWVBdHRyaWJ1dGU6IGdldEFycml2YWxUeXBlKCksXG4gIH07XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQTJCQSxTQUFTLHlCQUNQLEtBQ0EscUJBQTZCO0FBRTdCLFFBQU0scUJBQXFCLGdCQUFnQixHQUFHLElBQUssTUFBMEI7QUFFN0UsUUFBTSwyQkFBMkIscUJBQzdCLG9CQUFvQixTQUFTLE9BQU8sQ0FBQyxXQUFXLG9CQUFvQixT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
@@ -0,0 +1,12 @@
1
+ import { Leg, Notice } from './timetable-properties.ts';
2
+ export declare const isRideLeg: (leg: any) => leg is Extract<Leg, {
3
+ __typename: "PTRideLeg";
4
+ }>;
5
+ export declare const isConnectionLeg: (leg: any) => leg is Extract<Leg, {
6
+ __typename: "PTConnectionLeg";
7
+ }>;
8
+ export declare const extractTimeAndStringFromNoticeText: (notice?: Notice) => {
9
+ duration: number;
10
+ text: string;
11
+ };
12
+ //# sourceMappingURL=timetable-helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timetable-helper.d.ts","sourceRoot":"","sources":["../../../../../src/elements-experimental/core/timetable/timetable-helper.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAE7D,eAAO,MAAM,SAAS,GAAI,KAAK,GAAG,KAAG,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;IAAE,UAAU,EAAE,WAAW,CAAA;CAAE,CAEnF,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,KAAK,GAAG,KACP,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;IAAE,UAAU,EAAE,iBAAiB,CAAA;CAAE,CAEvD,CAAC;AAEF,eAAO,MAAM,kCAAkC,GAC7C,SAAS,MAAM,KACd;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAWlC,CAAC"}
@@ -0,0 +1,20 @@
1
+ const isRideLeg = (leg) => {
2
+ return leg?.__typename === "PTRideLeg";
3
+ };
4
+ const isConnectionLeg = (leg) => {
5
+ return leg?.__typename === "PTConnectionLeg";
6
+ };
7
+ const extractTimeAndStringFromNoticeText = (notice) => {
8
+ const firstIndex = notice?.text?.template && notice.text.template.indexOf("(") + 1;
9
+ const noticeDuration = notice?.text?.template?.substring(firstIndex || 0, notice?.text?.template.indexOf(")"));
10
+ return {
11
+ duration: noticeDuration && +noticeDuration.substring(0, noticeDuration.length - 1) || 0,
12
+ text: notice?.text?.template?.split("(")[0] || ""
13
+ };
14
+ };
15
+ export {
16
+ extractTimeAndStringFromNoticeText,
17
+ isConnectionLeg,
18
+ isRideLeg
19
+ };
20
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXRhYmxlLWhlbHBlci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzLWV4cGVyaW1lbnRhbC9jb3JlL3RpbWV0YWJsZS90aW1ldGFibGUtaGVscGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbiAqL1xuXG5pbXBvcnQgdHlwZSB7IExlZywgTm90aWNlIH0gZnJvbSAnLi90aW1ldGFibGUtcHJvcGVydGllcy50cyc7XG5cbmV4cG9ydCBjb25zdCBpc1JpZGVMZWcgPSAobGVnOiBhbnkpOiBsZWcgaXMgRXh0cmFjdDxMZWcsIHsgX190eXBlbmFtZTogJ1BUUmlkZUxlZycgfT4gPT4ge1xuICByZXR1cm4gbGVnPy5fX3R5cGVuYW1lID09PSAnUFRSaWRlTGVnJztcbn07XG5cbmV4cG9ydCBjb25zdCBpc0Nvbm5lY3Rpb25MZWcgPSAoXG4gIGxlZzogYW55LFxuKTogbGVnIGlzIEV4dHJhY3Q8TGVnLCB7IF9fdHlwZW5hbWU6ICdQVENvbm5lY3Rpb25MZWcnIH0+ID0+IHtcbiAgcmV0dXJuIGxlZz8uX190eXBlbmFtZSA9PT0gJ1BUQ29ubmVjdGlvbkxlZyc7XG59O1xuXG5leHBvcnQgY29uc3QgZXh0cmFjdFRpbWVBbmRTdHJpbmdGcm9tTm90aWNlVGV4dCA9IChcbiAgbm90aWNlPzogTm90aWNlLFxuKTogeyBkdXJhdGlvbjogbnVtYmVyOyB0ZXh0OiBzdHJpbmcgfSA9PiB7XG4gIGNvbnN0IGZpcnN0SW5kZXggPSBub3RpY2U/LnRleHQ/LnRlbXBsYXRlICYmIG5vdGljZS50ZXh0LnRlbXBsYXRlLmluZGV4T2YoJygnKSArIDE7XG4gIGNvbnN0IG5vdGljZUR1cmF0aW9uID0gbm90aWNlPy50ZXh0Py50ZW1wbGF0ZT8uc3Vic3RyaW5nKFxuICAgIGZpcnN0SW5kZXggfHwgMCxcbiAgICBub3RpY2U/LnRleHQ/LnRlbXBsYXRlLmluZGV4T2YoJyknKSxcbiAgKTtcblxuICByZXR1cm4ge1xuICAgIGR1cmF0aW9uOiAobm90aWNlRHVyYXRpb24gJiYgK25vdGljZUR1cmF0aW9uLnN1YnN0cmluZygwLCBub3RpY2VEdXJhdGlvbi5sZW5ndGggLSAxKSkgfHwgMCxcbiAgICB0ZXh0OiBub3RpY2U/LnRleHQ/LnRlbXBsYXRlPy5zcGxpdCgnKCcpWzBdIHx8ICcnLFxuICB9O1xufTtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJTyxNQUFNLFlBQVksQ0FBQyxRQUE4RDtBQUN0RixTQUFPLEtBQUssZUFBZTtBQUM3QjtBQUVPLE1BQU0sa0JBQWtCLENBQzdCLFFBQzBEO0FBQzFELFNBQU8sS0FBSyxlQUFlO0FBQzdCO0FBRU8sTUFBTSxxQ0FBcUMsQ0FDaEQsV0FDc0M7QUFDdEMsUUFBTSxhQUFhLFFBQVEsTUFBTSxZQUFZLE9BQU8sS0FBSyxTQUFTLFFBQVEsR0FBRyxJQUFJO0FBQ2pGLFFBQU0saUJBQWlCLFFBQVEsTUFBTSxVQUFVLFVBQzdDLGNBQWMsR0FDZCxRQUFRLE1BQU0sU0FBUyxRQUFRLEdBQUcsQ0FBQztBQUdyQyxTQUFPO0FBQUEsSUFDTCxVQUFXLGtCQUFrQixDQUFDLGVBQWUsVUFBVSxHQUFHLGVBQWUsU0FBUyxDQUFDLEtBQU07QUFBQSxJQUN6RixNQUFNLFFBQVEsTUFBTSxVQUFVLE1BQU0sR0FBRyxFQUFFLENBQUMsS0FBSztBQUFBLEVBQUE7QUFFbkQ7In0=