@sbb-esta/lyne-elements-experimental 1.8.0 → 1.10.0

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 (34) hide show
  1. package/core/timetable/access-leg-helper.d.ts +2 -1
  2. package/core/timetable/access-leg-helper.d.ts.map +1 -1
  3. package/core/timetable.js +111 -76
  4. package/custom-elements.json +44 -0
  5. package/development/core/timetable/access-leg-helper.d.ts +2 -1
  6. package/development/core/timetable/access-leg-helper.d.ts.map +1 -1
  7. package/development/core/timetable.js +57 -22
  8. package/development/journey-summary.js +2 -15
  9. package/development/pearl-chain/pearl-chain.sample-data.d.ts +1 -0
  10. package/development/pearl-chain/pearl-chain.sample-data.d.ts.map +1 -1
  11. package/development/pearl-chain-time/pearl-chain-time.d.ts +2 -0
  12. package/development/pearl-chain-time/pearl-chain-time.d.ts.map +1 -1
  13. package/development/pearl-chain-time.js +20 -20
  14. package/development/pearl-chain-vertical-item.js +2 -15
  15. package/development/pearl-chain-vertical.js +2 -15
  16. package/development/pearl-chain.js +3 -16
  17. package/development/timetable-duration.js +2 -15
  18. package/development/timetable-row/timetable-row.d.ts +7 -0
  19. package/development/timetable-row/timetable-row.d.ts.map +1 -1
  20. package/development/timetable-row/timetable-row.sample-data.d.ts +2 -0
  21. package/development/timetable-row/timetable-row.sample-data.d.ts.map +1 -1
  22. package/development/timetable-row.js +8 -16
  23. package/package.json +2 -2
  24. package/pearl-chain/pearl-chain.sample-data.d.ts +1 -0
  25. package/pearl-chain/pearl-chain.sample-data.d.ts.map +1 -1
  26. package/pearl-chain-time/pearl-chain-time.d.ts +2 -0
  27. package/pearl-chain-time/pearl-chain-time.d.ts.map +1 -1
  28. package/pearl-chain-time.js +37 -33
  29. package/pearl-chain.js +11 -11
  30. package/timetable-row/timetable-row.d.ts +7 -0
  31. package/timetable-row/timetable-row.d.ts.map +1 -1
  32. package/timetable-row/timetable-row.sample-data.d.ts +2 -0
  33. package/timetable-row/timetable-row.sample-data.d.ts.map +1 -1
  34. package/timetable-row.js +40 -35
@@ -10,12 +10,13 @@ interface IAccessAttribute {
10
10
  * @param departureWalk: The walking distance in minutes from the departure point to the first leg.
11
11
  * @param arrivalWalk: The walking distance in minutes from the last leg to the arrival point.
12
12
  * @param currentLanguage: The current language for localization.
13
+ * @param a11yFootpath: Whether the a11y-icon should be shown.
13
14
  * @returns renderDepartureTimeAttribute: A function that renders the element for the departure time attribute.
14
15
  * @returns renderArrivalTimeAttribute: A function that renders the element for the arrival time attribute.
15
16
  * @returns arrivalTimeAttribute: The access attribute for the arrival time.
16
17
  * @returns departureTimeAttribute: The access attribute for the departure time.
17
18
  */
18
- export declare function getDepartureArrivalTimeAttribute(legs: Leg[], departureWalk: number, arrivalWalk: number, currentLanguage: string): {
19
+ export declare function getDepartureArrivalTimeAttribute(legs: Leg[], departureWalk: number, arrivalWalk: number, currentLanguage: string, a11yFootpath?: boolean): {
19
20
  renderDepartureTimeAttribute: () => TemplateResult;
20
21
  renderArrivalTimeAttribute: () => TemplateResult;
21
22
  departureTimeAttribute: IAccessAttribute | null;
@@ -1 +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;AA2HD;;;;;;;;;GASG;AACH,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,GAAG,EAAE,EACX,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,GACtB;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,CAyGA"}
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"}
package/core/timetable.js CHANGED
@@ -1,56 +1,56 @@
1
- import { i18nWalkingDistanceDeparture as k, i18nWalkingDistanceArrival as y } from "@sbb-esta/lyne-elements/core/i18n.js";
2
- import { html as b, nothing as m } from "lit";
1
+ import { i18nWalkingDistanceDeparture as w, i18nWalkingDistanceArrival as T } from "@sbb-esta/lyne-elements/core/i18n.js";
2
+ import { html as f, nothing as b } from "lit";
3
3
  import "@sbb-esta/lyne-elements/icon.js";
4
- const x = (t) => (t == null ? void 0 : t.__typename) === "PTRideLeg", _ = (t) => (t == null ? void 0 : t.__typename) === "PTConnectionLeg", A = (t) => {
5
- var n, r, u, s, a, o;
6
- const i = ((n = t == null ? void 0 : t.text) == null ? void 0 : n.template) && t.text.template.indexOf("(") + 1, e = (s = (r = t == null ? void 0 : t.text) == null ? void 0 : r.template) == null ? void 0 : s.substring(
7
- i || 0,
8
- (u = t == null ? void 0 : t.text) == null ? void 0 : u.template.indexOf(")")
4
+ const $ = (t) => (t == null ? void 0 : t.__typename) === "PTRideLeg", _ = (t) => (t == null ? void 0 : t.__typename) === "PTConnectionLeg", v = (t) => {
5
+ var r, e, i, u, a, s;
6
+ const l = ((r = t == null ? void 0 : t.text) == null ? void 0 : r.template) && t.text.template.indexOf("(") + 1, n = (u = (e = t == null ? void 0 : t.text) == null ? void 0 : e.template) == null ? void 0 : u.substring(
7
+ l || 0,
8
+ (i = t == null ? void 0 : t.text) == null ? void 0 : i.template.indexOf(")")
9
9
  );
10
10
  return {
11
- duration: e && +e.substring(0, e.length - 1) || 0,
12
- text: ((o = (a = t == null ? void 0 : t.text) == null ? void 0 : a.template) == null ? void 0 : o.split("(")[0]) || ""
11
+ duration: n && +n.substring(0, n.length - 1) || 0,
12
+ text: ((s = (a = t == null ? void 0 : t.text) == null ? void 0 : a.template) == null ? void 0 : s.split("(")[0]) || ""
13
13
  };
14
14
  };
15
- function w(t, i) {
16
- var r, u;
17
- const e = _(t) ? t : null, n = e ? (r = e == null ? void 0 : e.notices) == null ? void 0 : r.filter((s) => i.includes(s.name))[0] : null;
18
- return n ? {
19
- duration: (e == null ? void 0 : e.duration) || 0,
20
- text: ((u = n == null ? void 0 : n.text) == null ? void 0 : u.template) || "",
15
+ function k(t, l) {
16
+ var e, i;
17
+ const n = _(t) ? t : null, r = n ? (e = n == null ? void 0 : n.notices) == null ? void 0 : e.filter((u) => l.includes(u.name))[0] : null;
18
+ return r ? {
19
+ duration: (n == null ? void 0 : n.duration) || 0,
20
+ text: ((i = r == null ? void 0 : r.text) == null ? void 0 : i.template) || "",
21
21
  icon: "walk-small"
22
22
  } : null;
23
23
  }
24
- function R(t, i) {
25
- var r, u, s;
26
- const e = x(t) ? (u = (r = t == null ? void 0 : t.serviceJourney) == null ? void 0 : r.notices) == null ? void 0 : u.filter(
27
- (a) => ["CI"].includes(a.name)
28
- )[0] : null, n = e && A(e);
24
+ function M(t, l, n, r) {
25
+ var u, a, s;
26
+ const e = $(t) ? (a = (u = t == null ? void 0 : t.serviceJourney) == null ? void 0 : u.notices) == null ? void 0 : a.filter(
27
+ (m) => ["CI"].includes(m.name)
28
+ )[0] : null, i = e && v(e);
29
29
  return e ? {
30
- duration: ((n == null ? void 0 : n.duration) || 0) + (i || 0),
31
- text: (n == null ? void 0 : n.text) || "",
32
- icon: `sa-${(s = e == null ? void 0 : e.name) == null ? void 0 : s.toLowerCase()}`
30
+ duration: ((i == null ? void 0 : i.duration) || 0) + (l || 0),
31
+ text: n ? w[r] : (i == null ? void 0 : i.text) || "",
32
+ icon: n ? "wheelchair-small" : `sa-${(s = e == null ? void 0 : e.name) == null ? void 0 : s.toLowerCase()}`
33
33
  } : null;
34
34
  }
35
- function Y(t, i) {
36
- var r, u, s;
37
- const e = x(t) ? (u = (r = t == null ? void 0 : t.serviceJourney) == null ? void 0 : r.notices) == null ? void 0 : u.filter(
38
- (a) => ["CO"].includes(a.name)
39
- )[0] : null, n = e && A(e);
35
+ function O(t, l, n, r) {
36
+ var u, a, s;
37
+ const e = $(t) ? (a = (u = t == null ? void 0 : t.serviceJourney) == null ? void 0 : u.notices) == null ? void 0 : a.filter(
38
+ (m) => ["CO"].includes(m.name)
39
+ )[0] : null, i = e && v(e);
40
40
  return e ? {
41
- duration: ((n == null ? void 0 : n.duration) || 0) + (i || 0),
42
- text: (n == null ? void 0 : n.text) || "",
43
- icon: `sa-${(s = e == null ? void 0 : e.name) == null ? void 0 : s.toLowerCase()}`
41
+ duration: ((i == null ? void 0 : i.duration) || 0) + (l || 0),
42
+ text: n ? T[r] : (i == null ? void 0 : i.text) || "",
43
+ icon: n ? "wheelchair-small" : `sa-${(s = e == null ? void 0 : e.name) == null ? void 0 : s.toLowerCase()}`
44
44
  } : null;
45
45
  }
46
- function T(t, i, e, n, r) {
47
- return b`
48
- <span class="sbb-pearl-chain__time-transfer sbb-pearl-chain__time-transfer--${r}">
49
- <sbb-icon name=${i}></sbb-icon>
46
+ function C(t, l, n, r, e) {
47
+ return f`
48
+ <span class="sbb-pearl-chain__time-transfer sbb-pearl-chain__time-transfer--${l}-${e}">
49
+ <sbb-icon name=${l}></sbb-icon>
50
50
  <time datetime=${t + "M"}>
51
51
  <span class="sbb-screen-reader-only">
52
- ${!n && r ? r === "departure" ? k[e] : y[e] : m}
53
- ${n ? b`<span>${n}</span>` : m}&nbsp;
52
+ ${!r && e ? e === "departure" ? w[n] : T[n] : b}
53
+ ${r ? f`<span>${r}</span>` : b}&nbsp;
54
54
  </span>
55
55
  ${t}
56
56
  <span class="sbb-pearl-chain__time-walktime-prime-symbol" aria-hidden="true">'</span>
@@ -59,65 +59,100 @@ function T(t, i, e, n, r) {
59
59
  </span>
60
60
  `;
61
61
  }
62
- function f(t, i, e) {
63
- return b`
64
- <span class="sbb-pearl-chain__time-walktime sbb-pearl-chain__time-walktime--${e}">
65
- <sbb-icon name="walk-small"></sbb-icon>
62
+ function p(t, l, n, r) {
63
+ return f`
64
+ <span class="sbb-pearl-chain__time-walktime sbb-pearl-chain__time-walktime--${r}-${n}">
65
+ <sbb-icon name=${r}></sbb-icon>
66
66
  <time datetime=${t + "M"}>
67
- <span class="sbb-screen-reader-only">${i}</span>
67
+ <span class="sbb-screen-reader-only">${l}</span>
68
68
  ${t}
69
69
  <span class="sbb-pearl-chain__time-walktime-prime-symbol" aria-hidden="true">'</span>
70
70
  </time>
71
71
  </span>
72
72
  `;
73
73
  }
74
- function E(t, i, e, n) {
75
- const r = t && t.filter((h) => x(h) || _(h))[0], u = ["YM", "YB", "Y", "YT"], s = w(r, u), a = R(r, i), o = i ? {
76
- text: k[n],
77
- duration: i,
78
- icon: "walk-small"
79
- } : null, C = () => s || (o && !a && !s ? o : a || null);
74
+ function I(t, l, n, r, e) {
75
+ const i = t && t.filter((A) => $(A) || _(A))[0], u = ["YM", "YB", "Y", "YT"], a = k(i, u), s = M(
76
+ i,
77
+ l,
78
+ e,
79
+ r
80
+ ), m = l ? {
81
+ text: w[r],
82
+ duration: l,
83
+ icon: e ? "wheelchair-small" : "walk-small"
84
+ } : null, D = () => a || (m && !s && !a ? m : s || null);
80
85
  function L() {
81
- return b`
82
- ${s ? f(s.duration, s.text, "left") : m}
83
- ${o && !a && !s ? f(o.duration, o.text, "left") : m}
84
- ${a ? T(
86
+ return f`
87
+ ${a ? p(
85
88
  a.duration,
86
- a.icon,
87
- n,
88
89
  a.text,
90
+ "left",
91
+ a.icon
92
+ ) : b}
93
+ ${m && !s && !a ? p(
94
+ m.duration,
95
+ m.text,
96
+ "left",
97
+ m.icon
98
+ ) : b}
99
+ ${s ? e ? p(
100
+ s.duration,
101
+ s.text,
102
+ "left",
103
+ s.icon
104
+ ) : C(
105
+ s.duration,
106
+ s.icon,
107
+ r,
108
+ s.text,
89
109
  "departure"
90
- ) : m}
110
+ ) : b}
91
111
  `;
92
112
  }
93
- const $ = t && t[t.length - 1], d = (_($) || x($)) && $, c = d && w(d, u), l = d && Y(d, e), p = e ? {
94
- text: y[n],
95
- duration: e,
96
- icon: "walk-small"
97
- } : null, v = () => c || (p && !l && !c ? p : l || null);
98
- function D() {
99
- return b`
100
- ${c ? f(c.duration, c.text, "right") : m}
101
- ${p && !l && !c ? f(p.duration, p.text, "right") : m}
102
- ${l ? T(
103
- l.duration,
104
- l.icon,
105
- n,
106
- l.text,
113
+ const h = t && t[t.length - 1], x = (_(h) || $(h)) && h, c = x && k(x, u), o = x && O(x, n, e, r), d = n ? {
114
+ text: T[r],
115
+ duration: n,
116
+ icon: e ? "wheelchair-small" : "walk-small"
117
+ } : null, R = () => c || (d && !o && !c ? d : o || null);
118
+ function Y() {
119
+ return f`
120
+ ${c ? p(
121
+ c.duration,
122
+ c.text,
123
+ "right",
124
+ c.icon
125
+ ) : b}
126
+ ${d && !o && !c ? p(
127
+ d.duration,
128
+ d.text,
129
+ "right",
130
+ d.icon
131
+ ) : b}
132
+ ${o ? e ? p(
133
+ o.duration,
134
+ o.text,
135
+ "right",
136
+ o.icon
137
+ ) : C(
138
+ o.duration,
139
+ o.icon,
140
+ r,
141
+ o.text,
107
142
  "arrival"
108
- ) : m}
143
+ ) : b}
109
144
  `;
110
145
  }
111
146
  return {
112
147
  renderDepartureTimeAttribute: L,
113
- renderArrivalTimeAttribute: D,
114
- departureTimeAttribute: C(),
115
- arrivalTimeAttribute: v()
148
+ renderArrivalTimeAttribute: Y,
149
+ departureTimeAttribute: D(),
150
+ arrivalTimeAttribute: R()
116
151
  };
117
152
  }
118
153
  export {
119
- A as extractTimeAndStringFromNoticeText,
120
- E as getDepartureArrivalTimeAttribute,
154
+ v as extractTimeAndStringFromNoticeText,
155
+ I as getDepartureArrivalTimeAttribute,
121
156
  _ as isConnectionLeg,
122
- x as isRideLeg
157
+ $ as isRideLeg
123
158
  };
@@ -312,6 +312,16 @@
312
312
  "description": "Per default, the current location has a pulsating animation. You can\ndisable the animation with this property.",
313
313
  "attribute": "disable-animation"
314
314
  },
315
+ {
316
+ "kind": "field",
317
+ "name": "a11yFootpath",
318
+ "type": {
319
+ "text": "boolean | undefined"
320
+ },
321
+ "privacy": "public",
322
+ "description": "Optional prop to render wheelchair-small instead of walk-small",
323
+ "attribute": "a11y-footpath"
324
+ },
315
325
  {
316
326
  "kind": "field",
317
327
  "name": "now",
@@ -388,6 +398,14 @@
388
398
  "description": "Per default, the current location has a pulsating animation. You can\ndisable the animation with this property.",
389
399
  "fieldName": "disableAnimation"
390
400
  },
401
+ {
402
+ "name": "a11y-footpath",
403
+ "type": {
404
+ "text": "boolean | undefined"
405
+ },
406
+ "description": "Optional prop to render wheelchair-small instead of walk-small",
407
+ "fieldName": "a11yFootpath"
408
+ },
391
409
  {
392
410
  "name": "now",
393
411
  "description": "A configured date which acts as the current date instead of the real current date. Recommended for testing purposes.",
@@ -1073,6 +1091,16 @@
1073
1091
  "description": "The loading state -\nwhen this is true it will be render skeleton with an idling animation",
1074
1092
  "attribute": "loading-trip"
1075
1093
  },
1094
+ {
1095
+ "kind": "field",
1096
+ "name": "a11yFootpath",
1097
+ "type": {
1098
+ "text": "boolean | undefined"
1099
+ },
1100
+ "privacy": "public",
1101
+ "description": "The Footpath attribute for rendering different icons\ntrue: render a11y-icon\nfalse: render walk-icon\ndefault: render walk-icon",
1102
+ "attribute": "a11y-footpath"
1103
+ },
1076
1104
  {
1077
1105
  "kind": "field",
1078
1106
  "name": "loadingPrice",
@@ -1251,6 +1279,14 @@
1251
1279
  "description": "The loading state -\nwhen this is true it will be render skeleton with an idling animation",
1252
1280
  "fieldName": "loadingTrip"
1253
1281
  },
1282
+ {
1283
+ "name": "a11y-footpath",
1284
+ "type": {
1285
+ "text": "boolean | undefined"
1286
+ },
1287
+ "description": "The Footpath attribute for rendering different icons\ntrue: render a11y-icon\nfalse: render walk-icon\ndefault: render walk-icon",
1288
+ "fieldName": "a11yFootpath"
1289
+ },
1254
1290
  {
1255
1291
  "name": "loading-price",
1256
1292
  "type": {
@@ -1487,6 +1523,14 @@
1487
1523
  "text": "string"
1488
1524
  },
1489
1525
  "description": ": The current language for localization."
1526
+ },
1527
+ {
1528
+ "name": "a11yFootpath",
1529
+ "optional": true,
1530
+ "type": {
1531
+ "text": "boolean"
1532
+ },
1533
+ "description": ": Whether the a11y-icon should be shown."
1490
1534
  }
1491
1535
  ]
1492
1536
  },
@@ -10,12 +10,13 @@ interface IAccessAttribute {
10
10
  * @param departureWalk: The walking distance in minutes from the departure point to the first leg.
11
11
  * @param arrivalWalk: The walking distance in minutes from the last leg to the arrival point.
12
12
  * @param currentLanguage: The current language for localization.
13
+ * @param a11yFootpath: Whether the a11y-icon should be shown.
13
14
  * @returns renderDepartureTimeAttribute: A function that renders the element for the departure time attribute.
14
15
  * @returns renderArrivalTimeAttribute: A function that renders the element for the arrival time attribute.
15
16
  * @returns arrivalTimeAttribute: The access attribute for the arrival time.
16
17
  * @returns departureTimeAttribute: The access attribute for the departure time.
17
18
  */
18
- export declare function getDepartureArrivalTimeAttribute(legs: Leg[], departureWalk: number, arrivalWalk: number, currentLanguage: string): {
19
+ export declare function getDepartureArrivalTimeAttribute(legs: Leg[], departureWalk: number, arrivalWalk: number, currentLanguage: string, a11yFootpath?: boolean): {
19
20
  renderDepartureTimeAttribute: () => TemplateResult;
20
21
  renderArrivalTimeAttribute: () => TemplateResult;
21
22
  departureTimeAttribute: IAccessAttribute | null;
@@ -1 +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;AA2HD;;;;;;;;;GASG;AACH,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,GAAG,EAAE,EACX,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,GACtB;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,CAyGA"}
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"}
@@ -29,7 +29,7 @@ function getPTConnectionAttribute(leg, connectionLegNotice) {
29
29
  icon: "walk-small"
30
30
  } : null;
31
31
  }
32
- function getFirstExtendedLegAttribute(leg, departureWalk) {
32
+ function getFirstExtendedLegAttribute(leg, departureWalk, a11yFootpath, currentLanguage) {
33
33
  var _a, _b, _c;
34
34
  const extendedFirstLeg = isRideLeg(leg) ? (_b = (_a = leg == null ? void 0 : leg.serviceJourney) == null ? void 0 : _a.notices) == null ? void 0 : _b.filter(
35
35
  (notice) => ["CI"].includes(notice.name)
@@ -37,11 +37,11 @@ function getFirstExtendedLegAttribute(leg, departureWalk) {
37
37
  const extractTimeAndString = extendedFirstLeg && extractTimeAndStringFromNoticeText(extendedFirstLeg);
38
38
  return extendedFirstLeg ? {
39
39
  duration: ((extractTimeAndString == null ? void 0 : extractTimeAndString.duration) || 0) + (departureWalk || 0),
40
- text: (extractTimeAndString == null ? void 0 : extractTimeAndString.text) || "",
41
- icon: `sa-${(_c = extendedFirstLeg == null ? void 0 : extendedFirstLeg.name) == null ? void 0 : _c.toLowerCase()}`
40
+ text: a11yFootpath ? i18nWalkingDistanceDeparture[currentLanguage] : (extractTimeAndString == null ? void 0 : extractTimeAndString.text) || "",
41
+ icon: a11yFootpath ? "wheelchair-small" : `sa-${(_c = extendedFirstLeg == null ? void 0 : extendedFirstLeg.name) == null ? void 0 : _c.toLowerCase()}`
42
42
  } : null;
43
43
  }
44
- function getLastExtendedLegAttribute(leg, arrivalWalk) {
44
+ function getLastExtendedLegAttribute(leg, arrivalWalk, a11yFootpath, currentLanguage) {
45
45
  var _a, _b, _c;
46
46
  const extendedLastLeg = isRideLeg(leg) ? (_b = (_a = leg == null ? void 0 : leg.serviceJourney) == null ? void 0 : _a.notices) == null ? void 0 : _b.filter(
47
47
  (notice) => ["CO"].includes(notice.name)
@@ -49,13 +49,13 @@ function getLastExtendedLegAttribute(leg, arrivalWalk) {
49
49
  const extractTimeAndString = extendedLastLeg && extractTimeAndStringFromNoticeText(extendedLastLeg);
50
50
  return extendedLastLeg ? {
51
51
  duration: ((extractTimeAndString == null ? void 0 : extractTimeAndString.duration) || 0) + (arrivalWalk || 0),
52
- text: (extractTimeAndString == null ? void 0 : extractTimeAndString.text) || "",
53
- icon: `sa-${(_c = extendedLastLeg == null ? void 0 : extendedLastLeg.name) == null ? void 0 : _c.toLowerCase()}`
52
+ text: a11yFootpath ? i18nWalkingDistanceArrival[currentLanguage] : (extractTimeAndString == null ? void 0 : extractTimeAndString.text) || "",
53
+ icon: a11yFootpath ? "wheelchair-small" : `sa-${(_c = extendedLastLeg == null ? void 0 : extendedLastLeg.name) == null ? void 0 : _c.toLowerCase()}`
54
54
  } : null;
55
55
  }
56
56
  function renderTransferTime(duration, icon, currentLanguage, label, type) {
57
57
  return html`
58
- <span class="sbb-pearl-chain__time-transfer sbb-pearl-chain__time-transfer--${type}">
58
+ <span class="sbb-pearl-chain__time-transfer sbb-pearl-chain__time-transfer--${icon}-${type}">
59
59
  <sbb-icon name=${icon}></sbb-icon>
60
60
  <time datetime=${duration + "M"}>
61
61
  <span class="sbb-screen-reader-only">
@@ -69,10 +69,10 @@ function renderTransferTime(duration, icon, currentLanguage, label, type) {
69
69
  </span>
70
70
  `;
71
71
  }
72
- function renderWalkTime(duration, label, variant) {
72
+ function renderWalkTime(duration, label, variant, icon) {
73
73
  return html`
74
- <span class="sbb-pearl-chain__time-walktime sbb-pearl-chain__time-walktime--${variant}">
75
- <sbb-icon name="walk-small"></sbb-icon>
74
+ <span class="sbb-pearl-chain__time-walktime sbb-pearl-chain__time-walktime--${icon}-${variant}">
75
+ <sbb-icon name=${icon}></sbb-icon>
76
76
  <time datetime=${duration + "M"}>
77
77
  <span class="sbb-screen-reader-only">${label}</span>
78
78
  ${duration}
@@ -81,15 +81,20 @@ function renderWalkTime(duration, label, variant) {
81
81
  </span>
82
82
  `;
83
83
  }
84
- function getDepartureArrivalTimeAttribute(legs, departureWalk, arrivalWalk, currentLanguage) {
84
+ function getDepartureArrivalTimeAttribute(legs, departureWalk, arrivalWalk, currentLanguage, a11yFootpath) {
85
85
  const connectionRideLeg = legs && legs.filter((leg) => isRideLeg(leg) || isConnectionLeg(leg))[0];
86
86
  const connectionLegNotice = ["YM", "YB", "Y", "YT"];
87
87
  const connectionFirstLeg = getPTConnectionAttribute(connectionRideLeg, connectionLegNotice);
88
- const extendedFirstLeg = getFirstExtendedLegAttribute(connectionRideLeg, departureWalk);
88
+ const extendedFirstLeg = getFirstExtendedLegAttribute(
89
+ connectionRideLeg,
90
+ departureWalk,
91
+ a11yFootpath,
92
+ currentLanguage
93
+ );
89
94
  const departureWalkAttribute = departureWalk ? {
90
95
  text: i18nWalkingDistanceDeparture[currentLanguage],
91
96
  duration: departureWalk,
92
- icon: "walk-small"
97
+ icon: a11yFootpath ? "wheelchair-small" : "walk-small"
93
98
  } : null;
94
99
  const getDepartureType = () => {
95
100
  if (connectionFirstLeg) {
@@ -104,9 +109,24 @@ function getDepartureArrivalTimeAttribute(legs, departureWalk, arrivalWalk, curr
104
109
  };
105
110
  function renderDepartureTimeAttribute() {
106
111
  return html`
107
- ${connectionFirstLeg ? renderWalkTime(connectionFirstLeg.duration, connectionFirstLeg.text, "left") : nothing}
108
- ${departureWalkAttribute && !extendedFirstLeg && !connectionFirstLeg ? renderWalkTime(departureWalkAttribute.duration, departureWalkAttribute.text, "left") : nothing}
109
- ${extendedFirstLeg ? renderTransferTime(
112
+ ${connectionFirstLeg ? renderWalkTime(
113
+ connectionFirstLeg.duration,
114
+ connectionFirstLeg.text,
115
+ "left",
116
+ connectionFirstLeg.icon
117
+ ) : nothing}
118
+ ${departureWalkAttribute && !extendedFirstLeg && !connectionFirstLeg ? renderWalkTime(
119
+ departureWalkAttribute.duration,
120
+ departureWalkAttribute.text,
121
+ "left",
122
+ departureWalkAttribute.icon
123
+ ) : nothing}
124
+ ${extendedFirstLeg ? a11yFootpath ? renderWalkTime(
125
+ extendedFirstLeg.duration,
126
+ extendedFirstLeg.text,
127
+ "left",
128
+ extendedFirstLeg.icon
129
+ ) : renderTransferTime(
110
130
  extendedFirstLeg.duration,
111
131
  extendedFirstLeg.icon,
112
132
  currentLanguage,
@@ -118,11 +138,11 @@ function getDepartureArrivalTimeAttribute(legs, departureWalk, arrivalWalk, curr
118
138
  const lastLeg = legs && legs[legs.length - 1];
119
139
  const lastConnectionRideLeg = (isConnectionLeg(lastLeg) || isRideLeg(lastLeg)) && lastLeg;
120
140
  const connectionLastLeg = lastConnectionRideLeg && getPTConnectionAttribute(lastConnectionRideLeg, connectionLegNotice);
121
- const extendedLastLeg = lastConnectionRideLeg && getLastExtendedLegAttribute(lastConnectionRideLeg, arrivalWalk);
141
+ const extendedLastLeg = lastConnectionRideLeg && getLastExtendedLegAttribute(lastConnectionRideLeg, arrivalWalk, a11yFootpath, currentLanguage);
122
142
  const arrivalWalkAttribute = arrivalWalk ? {
123
143
  text: i18nWalkingDistanceArrival[currentLanguage],
124
144
  duration: arrivalWalk,
125
- icon: "walk-small"
145
+ icon: a11yFootpath ? "wheelchair-small" : "walk-small"
126
146
  } : null;
127
147
  const getArrivalType = () => {
128
148
  if (connectionLastLeg) {
@@ -137,9 +157,24 @@ function getDepartureArrivalTimeAttribute(legs, departureWalk, arrivalWalk, curr
137
157
  };
138
158
  function renderArrivalTimeAttribute() {
139
159
  return html`
140
- ${connectionLastLeg ? renderWalkTime(connectionLastLeg.duration, connectionLastLeg.text, "right") : nothing}
141
- ${arrivalWalkAttribute && !extendedLastLeg && !connectionLastLeg ? renderWalkTime(arrivalWalkAttribute.duration, arrivalWalkAttribute.text, "right") : nothing}
142
- ${extendedLastLeg ? renderTransferTime(
160
+ ${connectionLastLeg ? renderWalkTime(
161
+ connectionLastLeg.duration,
162
+ connectionLastLeg.text,
163
+ "right",
164
+ connectionLastLeg.icon
165
+ ) : nothing}
166
+ ${arrivalWalkAttribute && !extendedLastLeg && !connectionLastLeg ? renderWalkTime(
167
+ arrivalWalkAttribute.duration,
168
+ arrivalWalkAttribute.text,
169
+ "right",
170
+ arrivalWalkAttribute.icon
171
+ ) : nothing}
172
+ ${extendedLastLeg ? a11yFootpath ? renderWalkTime(
173
+ extendedLastLeg.duration,
174
+ extendedLastLeg.text,
175
+ "right",
176
+ extendedLastLeg.icon
177
+ ) : renderTransferTime(
143
178
  extendedLastLeg.duration,
144
179
  extendedLastLeg.icon,
145
180
  currentLanguage,
@@ -161,4 +196,4 @@ export {
161
196
  isConnectionLeg,
162
197
  isRideLeg
163
198
  };
164
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXRhYmxlLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMtZXhwZXJpbWVudGFsL2NvcmUvdGltZXRhYmxlL3RpbWV0YWJsZS1oZWxwZXIudHMiLCIuLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMtZXhwZXJpbWVudGFsL2NvcmUvdGltZXRhYmxlL2FjY2Vzcy1sZWctaGVscGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbiAqL1xuXG5pbXBvcnQgdHlwZSB7IExlZywgTm90aWNlIH0gZnJvbSAnLi90aW1ldGFibGUtcHJvcGVydGllcy5qcyc7XG5cbmV4cG9ydCBjb25zdCBpc1JpZGVMZWcgPSAobGVnOiBhbnkpOiBsZWcgaXMgRXh0cmFjdDxMZWcsIHsgX190eXBlbmFtZTogJ1BUUmlkZUxlZycgfT4gPT4ge1xuICByZXR1cm4gbGVnPy5fX3R5cGVuYW1lID09PSAnUFRSaWRlTGVnJztcbn07XG5cbmV4cG9ydCBjb25zdCBpc0Nvbm5lY3Rpb25MZWcgPSAoXG4gIGxlZzogYW55LFxuKTogbGVnIGlzIEV4dHJhY3Q8TGVnLCB7IF9fdHlwZW5hbWU6ICdQVENvbm5lY3Rpb25MZWcnIH0+ID0+IHtcbiAgcmV0dXJuIGxlZz8uX190eXBlbmFtZSA9PT0gJ1BUQ29ubmVjdGlvbkxlZyc7XG59O1xuXG5leHBvcnQgY29uc3QgZXh0cmFjdFRpbWVBbmRTdHJpbmdGcm9tTm90aWNlVGV4dCA9IChcbiAgbm90aWNlPzogTm90aWNlLFxuKTogeyBkdXJhdGlvbjogbnVtYmVyOyB0ZXh0OiBzdHJpbmcgfSA9PiB7XG4gIGNvbnN0IGZpcnN0SW5kZXggPSBub3RpY2U/LnRleHQ/LnRlbXBsYXRlICYmIG5vdGljZS50ZXh0LnRlbXBsYXRlLmluZGV4T2YoJygnKSArIDE7XG4gIGNvbnN0IG5vdGljZUR1cmF0aW9uID0gbm90aWNlPy50ZXh0Py50ZW1wbGF0ZT8uc3Vic3RyaW5nKFxuICAgIGZpcnN0SW5kZXggfHwgMCxcbiAgICBub3RpY2U/LnRleHQ/LnRlbXBsYXRlLmluZGV4T2YoJyknKSxcbiAgKTtcblxuICByZXR1cm4ge1xuICAgIGR1cmF0aW9uOiAobm90aWNlRHVyYXRpb24gJiYgK25vdGljZUR1cmF0aW9uLnN1YnN0cmluZygwLCBub3RpY2VEdXJhdGlvbi5sZW5ndGggLSAxKSkgfHwgMCxcbiAgICB0ZXh0OiBub3RpY2U/LnRleHQ/LnRlbXBsYXRlPy5zcGxpdCgnKCcpWzBdIHx8ICcnLFxuICB9O1xufTtcbiIsIi8vIFRoaXMgaGVscGVyIGZpbGUgY29udGFpbnMgc2V2ZXJhbCBmdW5jdGlvbnMgcmVsYXRlZCB0byBhY2Nlc3NpbmcgYXR0cmlidXRlcyBmb3IgdGhlIGNvbm5lY3Rpb25zLlxuXG5pbXBvcnQge1xuICBpMThuV2Fsa2luZ0Rpc3RhbmNlQXJyaXZhbCxcbiAgaTE4bldhbGtpbmdEaXN0YW5jZURlcGFydHVyZSxcbn0gZnJvbSAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvY29yZS9pMThuLmpzJztcbmltcG9ydCB0eXBlIHsgVGVtcGxhdGVSZXN1bHQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgaHRtbCwgbm90aGluZyB9IGZyb20gJ2xpdCc7XG5cbmltcG9ydCB7XG4gIGV4dHJhY3RUaW1lQW5kU3RyaW5nRnJvbU5vdGljZVRleHQsXG4gIGlzQ29ubmVjdGlvbkxlZyxcbiAgaXNSaWRlTGVnLFxufSBmcm9tICcuL3RpbWV0YWJsZS1oZWxwZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBMZWcsIFB0Q29ubmVjdGlvbkxlZywgUHRSaWRlTGVnIH0gZnJvbSAnLi90aW1ldGFibGUtcHJvcGVydGllcy5qcyc7XG5cbmltcG9ydCAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvaWNvbi5qcyc7XG5cbmludGVyZmFjZSBJQWNjZXNzQXR0cmlidXRlIHtcbiAgZHVyYXRpb246IG51bWJlcjtcbiAgdGV4dDogc3RyaW5nO1xuICBpY29uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQHJldHVybnMgdGhlIGF0dHJpYnV0ZSBvZiBhIENvbm5lY3Rpb25MZWdcbiAqL1xuZnVuY3Rpb24gZ2V0UFRDb25uZWN0aW9uQXR0cmlidXRlKFxuICBsZWc6IFB0UmlkZUxlZyB8IFB0Q29ubmVjdGlvbkxlZyxcbiAgY29ubmVjdGlvbkxlZ05vdGljZTogc3RyaW5nW10sXG4pOiBJQWNjZXNzQXR0cmlidXRlIHwgbnVsbCB7XG4gIGNvbnN0IGNvbm5lY3Rpb25GaXJzdExlZyA9IGlzQ29ubmVjdGlvbkxlZyhsZWcpID8gKGxlZyBhcyBQdENvbm5lY3Rpb25MZWcpIDogbnVsbDtcblxuICBjb25zdCBjb25uZWN0aW9uRmlyc3RMZWdOb3RpY2UgPSBjb25uZWN0aW9uRmlyc3RMZWdcbiAgICA/IGNvbm5lY3Rpb25GaXJzdExlZz8ubm90aWNlcz8uZmlsdGVyKChub3RpY2UpID0+IGNvbm5lY3Rpb25MZWdOb3RpY2UuaW5jbHVkZXMobm90aWNlLm5hbWUpKVswXVxuICAgIDogbnVsbDtcblxuICByZXR1cm4gY29ubmVjdGlvbkZpcnN0TGVnTm90aWNlXG4gICAgPyB7XG4gICAgICAgIGR1cmF0aW9uOiBjb25uZWN0aW9uRmlyc3RMZWc/LmR1cmF0aW9uIHx8IDAsXG4gICAgICAgIHRleHQ6IGNvbm5lY3Rpb25GaXJzdExlZ05vdGljZT8udGV4dD8udGVtcGxhdGUgfHwgJycsXG4gICAgICAgIGljb246ICd3YWxrLXNtYWxsJyxcbiAgICAgIH1cbiAgICA6IG51bGw7XG59XG5cbi8qKlxuICogQHJldHVybnMgdGhlIGV4dGVuZGVkIGVudGVyIGF0dHJpYnV0ZSBvZiB0aGUgUFRSaWRlTGVnXG4gKi9cbmZ1bmN0aW9uIGdldEZpcnN0RXh0ZW5kZWRMZWdBdHRyaWJ1dGUoXG4gIGxlZzogUHRSaWRlTGVnIHwgUHRDb25uZWN0aW9uTGVnLFxuICBkZXBhcnR1cmVXYWxrOiBudW1iZXIsXG4pOiBJQWNjZXNzQXR0cmlidXRlIHwgbnVsbCB7XG4gIC8vIEV4dGVuZGVkIGVudGVyXG4gIGNvbnN0IGV4dGVuZGVkRmlyc3RMZWcgPSBpc1JpZGVMZWcobGVnKVxuICAgID8gKGxlZyBhcyBQdFJpZGVMZWcpPy5zZXJ2aWNlSm91cm5leT8ubm90aWNlcz8uZmlsdGVyKChub3RpY2UpID0+XG4gICAgICAgIFsnQ0knXS5pbmNsdWRlcyhub3RpY2UubmFtZSksXG4gICAgICApWzBdXG4gICAgOiBudWxsO1xuXG4gIGNvbnN0IGV4dHJhY3RUaW1lQW5kU3RyaW5nID1cbiAgICBleHRlbmRlZEZpcnN0TGVnICYmIGV4dHJhY3RUaW1lQW5kU3RyaW5nRnJvbU5vdGljZVRleHQoZXh0ZW5kZWRGaXJzdExlZyk7XG5cbiAgcmV0dXJuIGV4dGVuZGVkRmlyc3RMZWdcbiAgICA/IHtcbiAgICAgICAgZHVyYXRpb246IChleHRyYWN0VGltZUFuZFN0cmluZz8uZHVyYXRpb24gfHwgMCkgKyAoZGVwYXJ0dXJlV2FsayB8fCAwKSxcbiAgICAgICAgdGV4dDogZXh0cmFjdFRpbWVBbmRTdHJpbmc/LnRleHQgfHwgJycsXG4gICAgICAgIGljb246IGBzYS0ke2V4dGVuZGVkRmlyc3RMZWc/Lm5hbWU/LnRvTG93ZXJDYXNlKCl9YCxcbiAgICAgIH1cbiAgICA6IG51bGw7XG59XG5cbi8qKlxuICogQHJldHVybnMgdGhlIGV4dGVuZGVkIGV4aXQgYXR0cmlidXRlIG9mIHRoZSBQVFJpZGVMZWdcbiAqL1xuZnVuY3Rpb24gZ2V0TGFzdEV4dGVuZGVkTGVnQXR0cmlidXRlKGxlZzogTGVnLCBhcnJpdmFsV2FsazogbnVtYmVyKTogSUFjY2Vzc0F0dHJpYnV0ZSB8IG51bGwge1xuICAvLyBFeHRlbmRlZCBleGl0XG4gIGNvbnN0IGV4dGVuZGVkTGFzdExlZyA9IGlzUmlkZUxlZyhsZWcpXG4gICAgPyAobGVnIGFzIFB0UmlkZUxlZyk/LnNlcnZpY2VKb3VybmV5Py5ub3RpY2VzPy5maWx0ZXIoKG5vdGljZSkgPT5cbiAgICAgICAgWydDTyddLmluY2x1ZGVzKG5vdGljZS5uYW1lKSxcbiAgICAgIClbMF1cbiAgICA6IG51bGw7XG5cbiAgY29uc3QgZXh0cmFjdFRpbWVBbmRTdHJpbmcgPVxuICAgIGV4dGVuZGVkTGFzdExlZyAmJiBleHRyYWN0VGltZUFuZFN0cmluZ0Zyb21Ob3RpY2VUZXh0KGV4dGVuZGVkTGFzdExlZyk7XG5cbiAgcmV0dXJuIGV4dGVuZGVkTGFzdExlZ1xuICAgID8ge1xuICAgICAgICBkdXJhdGlvbjogKGV4dHJhY3RUaW1lQW5kU3RyaW5nPy5kdXJhdGlvbiB8fCAwKSArIChhcnJpdmFsV2FsayB8fCAwKSxcbiAgICAgICAgdGV4dDogZXh0cmFjdFRpbWVBbmRTdHJpbmc/LnRleHQgfHwgJycsXG4gICAgICAgIGljb246IGBzYS0ke2V4dGVuZGVkTGFzdExlZz8ubmFtZT8udG9Mb3dlckNhc2UoKX1gLFxuICAgICAgfVxuICAgIDogbnVsbDtcbn1cblxuLyoqXG4gKiByZW5kZXJzIHRoZSBleHRlbmRlZCBleGl0L2VudGVyIGljb24gd2l0aCB0aGUgZHVyYXRpb25cbiAqL1xuZnVuY3Rpb24gcmVuZGVyVHJhbnNmZXJUaW1lKFxuICBkdXJhdGlvbjogbnVtYmVyIHwgc3RyaW5nLFxuICBpY29uOiBzdHJpbmcsXG4gIGN1cnJlbnRMYW5ndWFnZTogc3RyaW5nLFxuICBsYWJlbD86IHN0cmluZyxcbiAgdHlwZT86ICdkZXBhcnR1cmUnIHwgJ2Fycml2YWwnLFxuKTogVGVtcGxhdGVSZXN1bHQge1xuICByZXR1cm4gaHRtbGBcbiAgICA8c3BhbiBjbGFzcz1cInNiYi1wZWFybC1jaGFpbl9fdGltZS10cmFuc2ZlciBzYmItcGVhcmwtY2hhaW5fX3RpbWUtdHJhbnNmZXItLSR7dHlwZX1cIj5cbiAgICAgIDxzYmItaWNvbiBuYW1lPSR7aWNvbn0+PC9zYmItaWNvbj5cbiAgICAgIDx0aW1lIGRhdGV0aW1lPSR7ZHVyYXRpb24gKyAnTSd9PlxuICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1zY3JlZW4tcmVhZGVyLW9ubHlcIj5cbiAgICAgICAgICAkeyFsYWJlbCAmJiB0eXBlXG4gICAgICAgICAgICA/IHR5cGUgPT09ICdkZXBhcnR1cmUnXG4gICAgICAgICAgICAgID8gaTE4bldhbGtpbmdEaXN0YW5jZURlcGFydHVyZVtjdXJyZW50TGFuZ3VhZ2VdXG4gICAgICAgICAgICAgIDogaTE4bldhbGtpbmdEaXN0YW5jZUFycml2YWxbY3VycmVudExhbmd1YWdlXVxuICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgICR7bGFiZWwgPyBodG1sYDxzcGFuPiR7bGFiZWx9PC9zcGFuPmAgOiBub3RoaW5nfSZuYnNwO1xuICAgICAgICA8L3NwYW4+XG4gICAgICAgICR7ZHVyYXRpb259XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLXBlYXJsLWNoYWluX190aW1lLXdhbGt0aW1lLXByaW1lLXN5bWJvbFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPic8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLXNjcmVlbi1yZWFkZXItb25seVwiPm1pbjwvc3Bhbj5cbiAgICAgIDwvdGltZT5cbiAgICA8L3NwYW4+XG4gIGA7XG59XG5cbi8qKlxuICogcmVuZGVycyBhIHdhbGstdGltZSBpY29uIHdpdGggdGhlIHdhbGsgZHVyYXRpb25cbiAqL1xuZnVuY3Rpb24gcmVuZGVyV2Fsa1RpbWUoXG4gIGR1cmF0aW9uOiBudW1iZXIgfCBzdHJpbmcsXG4gIGxhYmVsOiBzdHJpbmcsXG4gIHZhcmlhbnQ6ICdsZWZ0JyB8ICdyaWdodCcsXG4pOiBUZW1wbGF0ZVJlc3VsdCB7XG4gIHJldHVybiBodG1sYFxuICAgIDxzcGFuIGNsYXNzPVwic2JiLXBlYXJsLWNoYWluX190aW1lLXdhbGt0aW1lIHNiYi1wZWFybC1jaGFpbl9fdGltZS13YWxrdGltZS0tJHt2YXJpYW50fVwiPlxuICAgICAgPHNiYi1pY29uIG5hbWU9XCJ3YWxrLXNtYWxsXCI+PC9zYmItaWNvbj5cbiAgICAgIDx0aW1lIGRhdGV0aW1lPSR7ZHVyYXRpb24gKyAnTSd9PlxuICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1zY3JlZW4tcmVhZGVyLW9ubHlcIj4ke2xhYmVsfTwvc3Bhbj5cbiAgICAgICAgJHtkdXJhdGlvbn1cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItcGVhcmwtY2hhaW5fX3RpbWUtd2Fsa3RpbWUtcHJpbWUtc3ltYm9sXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+Jzwvc3Bhbj5cbiAgICAgIDwvdGltZT5cbiAgICA8L3NwYW4+XG4gIGA7XG59XG5cbi8qKlxuICogQHBhcmFtIGxlZ3M6IEFuIGFycmF5IG9mIExlZyBvYmplY3RzIHJlcHJlc2VudGluZyB0aGUgam91cm5leSBsZWdzLlxuICogQHBhcmFtIGRlcGFydHVyZVdhbGs6IFRoZSB3YWxraW5nIGRpc3RhbmNlIGluIG1pbnV0ZXMgZnJvbSB0aGUgZGVwYXJ0dXJlIHBvaW50IHRvIHRoZSBmaXJzdCBsZWcuXG4gKiBAcGFyYW0gYXJyaXZhbFdhbGs6IFRoZSB3YWxraW5nIGRpc3RhbmNlIGluIG1pbnV0ZXMgZnJvbSB0aGUgbGFzdCBsZWcgdG8gdGhlIGFycml2YWwgcG9pbnQuXG4gKiBAcGFyYW0gY3VycmVudExhbmd1YWdlOiBUaGUgY3VycmVudCBsYW5ndWFnZSBmb3IgbG9jYWxpemF0aW9uLlxuICogQHJldHVybnMgcmVuZGVyRGVwYXJ0dXJlVGltZUF0dHJpYnV0ZTogQSBmdW5jdGlvbiB0aGF0IHJlbmRlcnMgdGhlIGVsZW1lbnQgZm9yIHRoZSBkZXBhcnR1cmUgdGltZSBhdHRyaWJ1dGUuXG4gKiBAcmV0dXJucyByZW5kZXJBcnJpdmFsVGltZUF0dHJpYnV0ZTogQSBmdW5jdGlvbiB0aGF0IHJlbmRlcnMgdGhlIGVsZW1lbnQgZm9yIHRoZSBhcnJpdmFsIHRpbWUgYXR0cmlidXRlLlxuICogQHJldHVybnMgYXJyaXZhbFRpbWVBdHRyaWJ1dGU6IFRoZSBhY2Nlc3MgYXR0cmlidXRlIGZvciB0aGUgYXJyaXZhbCB0aW1lLlxuICogQHJldHVybnMgZGVwYXJ0dXJlVGltZUF0dHJpYnV0ZTogVGhlIGFjY2VzcyBhdHRyaWJ1dGUgZm9yIHRoZSBkZXBhcnR1cmUgdGltZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlcGFydHVyZUFycml2YWxUaW1lQXR0cmlidXRlKFxuICBsZWdzOiBMZWdbXSxcbiAgZGVwYXJ0dXJlV2FsazogbnVtYmVyLFxuICBhcnJpdmFsV2FsazogbnVtYmVyLFxuICBjdXJyZW50TGFuZ3VhZ2U6IHN0cmluZyxcbik6IHtcbiAgcmVuZGVyRGVwYXJ0dXJlVGltZUF0dHJpYnV0ZTogKCkgPT4gVGVtcGxhdGVSZXN1bHQ7XG4gIHJlbmRlckFycml2YWxUaW1lQXR0cmlidXRlOiAoKSA9PiBUZW1wbGF0ZVJlc3VsdDtcbiAgZGVwYXJ0dXJlVGltZUF0dHJpYnV0ZTogSUFjY2Vzc0F0dHJpYnV0ZSB8IG51bGw7XG4gIGFycml2YWxUaW1lQXR0cmlidXRlOiBJQWNjZXNzQXR0cmlidXRlIHwgbnVsbDtcbn0ge1xuICBjb25zdCBjb25uZWN0aW9uUmlkZUxlZyA9XG4gICAgbGVncyAmJlxuICAgIChsZWdzLmZpbHRlcigobGVnKSA9PiBpc1JpZGVMZWcobGVnKSB8fCBpc0Nvbm5lY3Rpb25MZWcobGVnKSlbMF0gYXNcbiAgICAgIHwgUHRSaWRlTGVnXG4gICAgICB8IFB0Q29ubmVjdGlvbkxlZyk7XG5cbiAgY29uc3QgY29ubmVjdGlvbkxlZ05vdGljZSA9IFsnWU0nLCAnWUInLCAnWScsICdZVCddO1xuXG4gIGNvbnN0IGNvbm5lY3Rpb25GaXJzdExlZyA9IGdldFBUQ29ubmVjdGlvbkF0dHJpYnV0ZShjb25uZWN0aW9uUmlkZUxlZywgY29ubmVjdGlvbkxlZ05vdGljZSk7XG4gIGNvbnN0IGV4dGVuZGVkRmlyc3RMZWcgPSBnZXRGaXJzdEV4dGVuZGVkTGVnQXR0cmlidXRlKGNvbm5lY3Rpb25SaWRlTGVnLCBkZXBhcnR1cmVXYWxrKTtcbiAgY29uc3QgZGVwYXJ0dXJlV2Fsa0F0dHJpYnV0ZSA9IGRlcGFydHVyZVdhbGtcbiAgICA/IHtcbiAgICAgICAgdGV4dDogaTE4bldhbGtpbmdEaXN0YW5jZURlcGFydHVyZVtjdXJyZW50TGFuZ3VhZ2VdLFxuICAgICAgICBkdXJhdGlvbjogZGVwYXJ0dXJlV2FsayxcbiAgICAgICAgaWNvbjogJ3dhbGstc21hbGwnLFxuICAgICAgfVxuICAgIDogbnVsbDtcblxuICBjb25zdCBnZXREZXBhcnR1cmVUeXBlID0gKCk6IElBY2Nlc3NBdHRyaWJ1dGUgfCBudWxsID0+IHtcbiAgICBpZiAoY29ubmVjdGlvbkZpcnN0TGVnKSB7XG4gICAgICByZXR1cm4gY29ubmVjdGlvbkZpcnN0TGVnO1xuICAgIH0gZWxzZSBpZiAoZGVwYXJ0dXJlV2Fsa0F0dHJpYnV0ZSAmJiAhZXh0ZW5kZWRGaXJzdExlZyAmJiAhY29ubmVjdGlvbkZpcnN0TGVnKSB7XG4gICAgICByZXR1cm4gZGVwYXJ0dXJlV2Fsa0F0dHJpYnV0ZTtcbiAgICB9IGVsc2UgaWYgKGV4dGVuZGVkRmlyc3RMZWcpIHtcbiAgICAgIHJldHVybiBleHRlbmRlZEZpcnN0TGVnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gcmVuZGVyRGVwYXJ0dXJlVGltZUF0dHJpYnV0ZSgpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICAke2Nvbm5lY3Rpb25GaXJzdExlZ1xuICAgICAgICA/IHJlbmRlcldhbGtUaW1lKGNvbm5lY3Rpb25GaXJzdExlZy5kdXJhdGlvbiwgY29ubmVjdGlvbkZpcnN0TGVnLnRleHQsICdsZWZ0JylcbiAgICAgICAgOiBub3RoaW5nfVxuICAgICAgJHtkZXBhcnR1cmVXYWxrQXR0cmlidXRlICYmICFleHRlbmRlZEZpcnN0TGVnICYmICFjb25uZWN0aW9uRmlyc3RMZWdcbiAgICAgICAgPyByZW5kZXJXYWxrVGltZShkZXBhcnR1cmVXYWxrQXR0cmlidXRlLmR1cmF0aW9uLCBkZXBhcnR1cmVXYWxrQXR0cmlidXRlLnRleHQsICdsZWZ0JylcbiAgICAgICAgOiBub3RoaW5nfVxuICAgICAgJHtleHRlbmRlZEZpcnN0TGVnXG4gICAgICAgID8gcmVuZGVyVHJhbnNmZXJUaW1lKFxuICAgICAgICAgICAgZXh0ZW5kZWRGaXJzdExlZy5kdXJhdGlvbixcbiAgICAgICAgICAgIGV4dGVuZGVkRmlyc3RMZWcuaWNvbixcbiAgICAgICAgICAgIGN1cnJlbnRMYW5ndWFnZSxcbiAgICAgICAgICAgIGV4dGVuZGVkRmlyc3RMZWcudGV4dCxcbiAgICAgICAgICAgICdkZXBhcnR1cmUnLFxuICAgICAgICAgIClcbiAgICAgICAgOiBub3RoaW5nfVxuICAgIGA7XG4gIH1cblxuICBjb25zdCBsYXN0TGVnID0gbGVncyAmJiBsZWdzW2xlZ3MubGVuZ3RoIC0gMV07XG4gIGNvbnN0IGxhc3RDb25uZWN0aW9uUmlkZUxlZyA9XG4gICAgKGlzQ29ubmVjdGlvbkxlZyhsYXN0TGVnKSB8fCBpc1JpZGVMZWcobGFzdExlZykpICYmIChsYXN0TGVnIGFzIFB0Q29ubmVjdGlvbkxlZyB8IFB0UmlkZUxlZyk7XG5cbiAgY29uc3QgY29ubmVjdGlvbkxhc3RMZWcgPVxuICAgIGxhc3RDb25uZWN0aW9uUmlkZUxlZyAmJiBnZXRQVENvbm5lY3Rpb25BdHRyaWJ1dGUobGFzdENvbm5lY3Rpb25SaWRlTGVnLCBjb25uZWN0aW9uTGVnTm90aWNlKTtcbiAgY29uc3QgZXh0ZW5kZWRMYXN0TGVnID1cbiAgICBsYXN0Q29ubmVjdGlvblJpZGVMZWcgJiYgZ2V0TGFzdEV4dGVuZGVkTGVnQXR0cmlidXRlKGxhc3RDb25uZWN0aW9uUmlkZUxlZywgYXJyaXZhbFdhbGspO1xuICBjb25zdCBhcnJpdmFsV2Fsa0F0dHJpYnV0ZSA9IGFycml2YWxXYWxrXG4gICAgPyB7XG4gICAgICAgIHRleHQ6IGkxOG5XYWxraW5nRGlzdGFuY2VBcnJpdmFsW2N1cnJlbnRMYW5ndWFnZV0sXG4gICAgICAgIGR1cmF0aW9uOiBhcnJpdmFsV2FsayxcbiAgICAgICAgaWNvbjogJ3dhbGstc21hbGwnLFxuICAgICAgfVxuICAgIDogbnVsbDtcblxuICBjb25zdCBnZXRBcnJpdmFsVHlwZSA9ICgpOiBJQWNjZXNzQXR0cmlidXRlIHwgbnVsbCA9PiB7XG4gICAgaWYgKGNvbm5lY3Rpb25MYXN0TGVnKSB7XG4gICAgICByZXR1cm4gY29ubmVjdGlvbkxhc3RMZWc7XG4gICAgfSBlbHNlIGlmIChhcnJpdmFsV2Fsa0F0dHJpYnV0ZSAmJiAhZXh0ZW5kZWRMYXN0TGVnICYmICFjb25uZWN0aW9uTGFzdExlZykge1xuICAgICAgcmV0dXJuIGFycml2YWxXYWxrQXR0cmlidXRlO1xuICAgIH0gZWxzZSBpZiAoZXh0ZW5kZWRMYXN0TGVnKSB7XG4gICAgICByZXR1cm4gZXh0ZW5kZWRMYXN0TGVnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gcmVuZGVyQXJyaXZhbFRpbWVBdHRyaWJ1dGUoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgJHtjb25uZWN0aW9uTGFzdExlZ1xuICAgICAgICA/IHJlbmRlcldhbGtUaW1lKGNvbm5lY3Rpb25MYXN0TGVnLmR1cmF0aW9uLCBjb25uZWN0aW9uTGFzdExlZy50ZXh0LCAncmlnaHQnKVxuICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAke2Fycml2YWxXYWxrQXR0cmlidXRlICYmICFleHRlbmRlZExhc3RMZWcgJiYgIWNvbm5lY3Rpb25MYXN0TGVnXG4gICAgICAgID8gcmVuZGVyV2Fsa1RpbWUoYXJyaXZhbFdhbGtBdHRyaWJ1dGUuZHVyYXRpb24sIGFycml2YWxXYWxrQXR0cmlidXRlLnRleHQsICdyaWdodCcpXG4gICAgICAgIDogbm90aGluZ31cbiAgICAgICR7ZXh0ZW5kZWRMYXN0TGVnXG4gICAgICAgID8gcmVuZGVyVHJhbnNmZXJUaW1lKFxuICAgICAgICAgICAgZXh0ZW5kZWRMYXN0TGVnLmR1cmF0aW9uLFxuICAgICAgICAgICAgZXh0ZW5kZWRMYXN0TGVnLmljb24sXG4gICAgICAgICAgICBjdXJyZW50TGFuZ3VhZ2UsXG4gICAgICAgICAgICBleHRlbmRlZExhc3RMZWcudGV4dCxcbiAgICAgICAgICAgICdhcnJpdmFsJyxcbiAgICAgICAgICApXG4gICAgICAgIDogbm90aGluZ31cbiAgICBgO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICByZW5kZXJEZXBhcnR1cmVUaW1lQXR0cmlidXRlLFxuICAgIHJlbmRlckFycml2YWxUaW1lQXR0cmlidXRlLFxuICAgIGRlcGFydHVyZVRpbWVBdHRyaWJ1dGU6IGdldERlcGFydHVyZVR5cGUoKSxcbiAgICBhcnJpdmFsVGltZUF0dHJpYnV0ZTogZ2V0QXJyaXZhbFR5cGUoKSxcbiAgfTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFJYSxNQUFBLFlBQVksQ0FBQyxRQUErRDtBQUN2RixVQUFPLDJCQUFLLGdCQUFlO0FBQzdCO0FBRWEsTUFBQSxrQkFBa0IsQ0FDN0IsUUFDMkQ7QUFDM0QsVUFBTywyQkFBSyxnQkFBZTtBQUM3QjtBQUVhLE1BQUEscUNBQXFDLENBQ2hELFdBQ3VDOztBQUNqQyxRQUFBLGVBQWEsc0NBQVEsU0FBUixtQkFBYyxhQUFZLE9BQU8sS0FBSyxTQUFTLFFBQVEsR0FBRyxJQUFJO0FBQzNFLFFBQUEsa0JBQWlCLDRDQUFRLFNBQVIsbUJBQWMsYUFBZCxtQkFBd0I7QUFBQSxJQUM3QyxjQUFjO0FBQUEsS0FDZCxzQ0FBUSxTQUFSLG1CQUFjLFNBQVMsUUFBUTtBQUFBO0FBRzFCLFNBQUE7QUFBQSxJQUNMLFVBQVcsa0JBQWtCLENBQUMsZUFBZSxVQUFVLEdBQUcsZUFBZSxTQUFTLENBQUMsS0FBTTtBQUFBLElBQ3pGLFFBQU0sNENBQVEsU0FBUixtQkFBYyxhQUFkLG1CQUF3QixNQUFNLEtBQUssT0FBTTtBQUFBLEVBQUE7QUFFbkQ7QUNBQSxTQUFTLHlCQUNQLEtBQ0EscUJBQ3lCOztBQUN6QixRQUFNLHFCQUFxQixnQkFBZ0IsR0FBRyxJQUFLLE1BQTBCO0FBRTdFLFFBQU0sMkJBQTJCLHNCQUM3Qiw4REFBb0IsWUFBcEIsbUJBQTZCLE9BQU8sQ0FBQyxX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
199
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXRhYmxlLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMtZXhwZXJpbWVudGFsL2NvcmUvdGltZXRhYmxlL3RpbWV0YWJsZS1oZWxwZXIudHMiLCIuLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMtZXhwZXJpbWVudGFsL2NvcmUvdGltZXRhYmxlL2FjY2Vzcy1sZWctaGVscGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbiAqL1xuXG5pbXBvcnQgdHlwZSB7IExlZywgTm90aWNlIH0gZnJvbSAnLi90aW1ldGFibGUtcHJvcGVydGllcy5qcyc7XG5cbmV4cG9ydCBjb25zdCBpc1JpZGVMZWcgPSAobGVnOiBhbnkpOiBsZWcgaXMgRXh0cmFjdDxMZWcsIHsgX190eXBlbmFtZTogJ1BUUmlkZUxlZycgfT4gPT4ge1xuICByZXR1cm4gbGVnPy5fX3R5cGVuYW1lID09PSAnUFRSaWRlTGVnJztcbn07XG5cbmV4cG9ydCBjb25zdCBpc0Nvbm5lY3Rpb25MZWcgPSAoXG4gIGxlZzogYW55LFxuKTogbGVnIGlzIEV4dHJhY3Q8TGVnLCB7IF9fdHlwZW5hbWU6ICdQVENvbm5lY3Rpb25MZWcnIH0+ID0+IHtcbiAgcmV0dXJuIGxlZz8uX190eXBlbmFtZSA9PT0gJ1BUQ29ubmVjdGlvbkxlZyc7XG59O1xuXG5leHBvcnQgY29uc3QgZXh0cmFjdFRpbWVBbmRTdHJpbmdGcm9tTm90aWNlVGV4dCA9IChcbiAgbm90aWNlPzogTm90aWNlLFxuKTogeyBkdXJhdGlvbjogbnVtYmVyOyB0ZXh0OiBzdHJpbmcgfSA9PiB7XG4gIGNvbnN0IGZpcnN0SW5kZXggPSBub3RpY2U/LnRleHQ/LnRlbXBsYXRlICYmIG5vdGljZS50ZXh0LnRlbXBsYXRlLmluZGV4T2YoJygnKSArIDE7XG4gIGNvbnN0IG5vdGljZUR1cmF0aW9uID0gbm90aWNlPy50ZXh0Py50ZW1wbGF0ZT8uc3Vic3RyaW5nKFxuICAgIGZpcnN0SW5kZXggfHwgMCxcbiAgICBub3RpY2U/LnRleHQ/LnRlbXBsYXRlLmluZGV4T2YoJyknKSxcbiAgKTtcblxuICByZXR1cm4ge1xuICAgIGR1cmF0aW9uOiAobm90aWNlRHVyYXRpb24gJiYgK25vdGljZUR1cmF0aW9uLnN1YnN0cmluZygwLCBub3RpY2VEdXJhdGlvbi5sZW5ndGggLSAxKSkgfHwgMCxcbiAgICB0ZXh0OiBub3RpY2U/LnRleHQ/LnRlbXBsYXRlPy5zcGxpdCgnKCcpWzBdIHx8ICcnLFxuICB9O1xufTtcbiIsIi8vIFRoaXMgaGVscGVyIGZpbGUgY29udGFpbnMgc2V2ZXJhbCBmdW5jdGlvbnMgcmVsYXRlZCB0byBhY2Nlc3NpbmcgYXR0cmlidXRlcyBmb3IgdGhlIGNvbm5lY3Rpb25zLlxuXG5pbXBvcnQge1xuICBpMThuV2Fsa2luZ0Rpc3RhbmNlQXJyaXZhbCxcbiAgaTE4bldhbGtpbmdEaXN0YW5jZURlcGFydHVyZSxcbn0gZnJvbSAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvY29yZS9pMThuLmpzJztcbmltcG9ydCB0eXBlIHsgVGVtcGxhdGVSZXN1bHQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgaHRtbCwgbm90aGluZyB9IGZyb20gJ2xpdCc7XG5cbmltcG9ydCB7XG4gIGV4dHJhY3RUaW1lQW5kU3RyaW5nRnJvbU5vdGljZVRleHQsXG4gIGlzQ29ubmVjdGlvbkxlZyxcbiAgaXNSaWRlTGVnLFxufSBmcm9tICcuL3RpbWV0YWJsZS1oZWxwZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBMZWcsIFB0Q29ubmVjdGlvbkxlZywgUHRSaWRlTGVnIH0gZnJvbSAnLi90aW1ldGFibGUtcHJvcGVydGllcy5qcyc7XG5cbmltcG9ydCAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvaWNvbi5qcyc7XG5cbmludGVyZmFjZSBJQWNjZXNzQXR0cmlidXRlIHtcbiAgZHVyYXRpb246IG51bWJlcjtcbiAgdGV4dDogc3RyaW5nO1xuICBpY29uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQHJldHVybnMgdGhlIGF0dHJpYnV0ZSBvZiBhIENvbm5lY3Rpb25MZWdcbiAqL1xuZnVuY3Rpb24gZ2V0UFRDb25uZWN0aW9uQXR0cmlidXRlKFxuICBsZWc6IFB0UmlkZUxlZyB8IFB0Q29ubmVjdGlvbkxlZyxcbiAgY29ubmVjdGlvbkxlZ05vdGljZTogc3RyaW5nW10sXG4pOiBJQWNjZXNzQXR0cmlidXRlIHwgbnVsbCB7XG4gIGNvbnN0IGNvbm5lY3Rpb25GaXJzdExlZyA9IGlzQ29ubmVjdGlvbkxlZyhsZWcpID8gKGxlZyBhcyBQdENvbm5lY3Rpb25MZWcpIDogbnVsbDtcblxuICBjb25zdCBjb25uZWN0aW9uRmlyc3RMZWdOb3RpY2UgPSBjb25uZWN0aW9uRmlyc3RMZWdcbiAgICA/IGNvbm5lY3Rpb25GaXJzdExlZz8ubm90aWNlcz8uZmlsdGVyKChub3RpY2UpID0+IGNvbm5lY3Rpb25MZWdOb3RpY2UuaW5jbHVkZXMobm90aWNlLm5hbWUpKVswXVxuICAgIDogbnVsbDtcblxuICByZXR1cm4gY29ubmVjdGlvbkZpcnN0TGVnTm90aWNlXG4gICAgPyB7XG4gICAgICAgIGR1cmF0aW9uOiBjb25uZWN0aW9uRmlyc3RMZWc/LmR1cmF0aW9uIHx8IDAsXG4gICAgICAgIHRleHQ6IGNvbm5lY3Rpb25GaXJzdExlZ05vdGljZT8udGV4dD8udGVtcGxhdGUgfHwgJycsXG4gICAgICAgIGljb246ICd3YWxrLXNtYWxsJyxcbiAgICAgIH1cbiAgICA6IG51bGw7XG59XG5cbi8qKlxuICogQHJldHVybnMgdGhlIGV4dGVuZGVkIGVudGVyIGF0dHJpYnV0ZSBvZiB0aGUgUFRSaWRlTGVnXG4gKi9cbmZ1bmN0aW9uIGdldEZpcnN0RXh0ZW5kZWRMZWdBdHRyaWJ1dGUoXG4gIGxlZzogUHRSaWRlTGVnIHwgUHRDb25uZWN0aW9uTGVnLFxuICBkZXBhcnR1cmVXYWxrOiBudW1iZXIsXG4gIGExMXlGb290cGF0aDogYm9vbGVhbiB8IHVuZGVmaW5lZCxcbiAgY3VycmVudExhbmd1YWdlOiBzdHJpbmcsXG4pOiBJQWNjZXNzQXR0cmlidXRlIHwgbnVsbCB7XG4gIC8vIEV4dGVuZGVkIGVudGVyXG4gIGNvbnN0IGV4dGVuZGVkRmlyc3RMZWcgPSBpc1JpZGVMZWcobGVnKVxuICAgID8gKGxlZyBhcyBQdFJpZGVMZWcpPy5zZXJ2aWNlSm91cm5leT8ubm90aWNlcz8uZmlsdGVyKChub3RpY2UpID0+XG4gICAgICAgIFsnQ0knXS5pbmNsdWRlcyhub3RpY2UubmFtZSksXG4gICAgICApWzBdXG4gICAgOiBudWxsO1xuXG4gIGNvbnN0IGV4dHJhY3RUaW1lQW5kU3RyaW5nID1cbiAgICBleHRlbmRlZEZpcnN0TGVnICYmIGV4dHJhY3RUaW1lQW5kU3RyaW5nRnJvbU5vdGljZVRleHQoZXh0ZW5kZWRGaXJzdExlZyk7XG5cbiAgcmV0dXJuIGV4dGVuZGVkRmlyc3RMZWdcbiAgICA/IHtcbiAgICAgICAgZHVyYXRpb246IChleHRyYWN0VGltZUFuZFN0cmluZz8uZHVyYXRpb24gfHwgMCkgKyAoZGVwYXJ0dXJlV2FsayB8fCAwKSxcbiAgICAgICAgdGV4dDogYTExeUZvb3RwYXRoXG4gICAgICAgICAgPyBpMThuV2Fsa2luZ0Rpc3RhbmNlRGVwYXJ0dXJlW2N1cnJlbnRMYW5ndWFnZV1cbiAgICAgICAgICA6IGV4dHJhY3RUaW1lQW5kU3RyaW5nPy50ZXh0IHx8ICcnLFxuICAgICAgICBpY29uOiBhMTF5Rm9vdHBhdGggPyAnd2hlZWxjaGFpci1zbWFsbCcgOiBgc2EtJHtleHRlbmRlZEZpcnN0TGVnPy5uYW1lPy50b0xvd2VyQ2FzZSgpfWAsXG4gICAgICB9XG4gICAgOiBudWxsO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHRoZSBleHRlbmRlZCBleGl0IGF0dHJpYnV0ZSBvZiB0aGUgUFRSaWRlTGVnXG4gKi9cbmZ1bmN0aW9uIGdldExhc3RFeHRlbmRlZExlZ0F0dHJpYnV0ZShcbiAgbGVnOiBMZWcsXG4gIGFycml2YWxXYWxrOiBudW1iZXIsXG4gIGExMXlGb290cGF0aDogYm9vbGVhbiB8IHVuZGVmaW5lZCxcbiAgY3VycmVudExhbmd1YWdlOiBzdHJpbmcsXG4pOiBJQWNjZXNzQXR0cmlidXRlIHwgbnVsbCB7XG4gIC8vIEV4dGVuZGVkIGV4aXRcbiAgY29uc3QgZXh0ZW5kZWRMYXN0TGVnID0gaXNSaWRlTGVnKGxlZylcbiAgICA/IChsZWcgYXMgUHRSaWRlTGVnKT8uc2VydmljZUpvdXJuZXk/Lm5vdGljZXM/LmZpbHRlcigobm90aWNlKSA9PlxuICAgICAgICBbJ0NPJ10uaW5jbHVkZXMobm90aWNlLm5hbWUpLFxuICAgICAgKVswXVxuICAgIDogbnVsbDtcblxuICBjb25zdCBleHRyYWN0VGltZUFuZFN0cmluZyA9XG4gICAgZXh0ZW5kZWRMYXN0TGVnICYmIGV4dHJhY3RUaW1lQW5kU3RyaW5nRnJvbU5vdGljZVRleHQoZXh0ZW5kZWRMYXN0TGVnKTtcblxuICByZXR1cm4gZXh0ZW5kZWRMYXN0TGVnXG4gICAgPyB7XG4gICAgICAgIGR1cmF0aW9uOiAoZXh0cmFjdFRpbWVBbmRTdHJpbmc/LmR1cmF0aW9uIHx8IDApICsgKGFycml2YWxXYWxrIHx8IDApLFxuICAgICAgICB0ZXh0OiBhMTF5Rm9vdHBhdGhcbiAgICAgICAgICA/IGkxOG5XYWxraW5nRGlzdGFuY2VBcnJpdmFsW2N1cnJlbnRMYW5ndWFnZV1cbiAgICAgICAgICA6IGV4dHJhY3RUaW1lQW5kU3RyaW5nPy50ZXh0IHx8ICcnLFxuICAgICAgICBpY29uOiBhMTF5Rm9vdHBhdGggPyAnd2hlZWxjaGFpci1zbWFsbCcgOiBgc2EtJHtleHRlbmRlZExhc3RMZWc/Lm5hbWU/LnRvTG93ZXJDYXNlKCl9YCxcbiAgICAgIH1cbiAgICA6IG51bGw7XG59XG5cbi8qKlxuICogcmVuZGVycyB0aGUgZXh0ZW5kZWQgZXhpdC9lbnRlciBpY29uIHdpdGggdGhlIGR1cmF0aW9uXG4gKi9cbmZ1bmN0aW9uIHJlbmRlclRyYW5zZmVyVGltZShcbiAgZHVyYXRpb246IG51bWJlciB8IHN0cmluZyxcbiAgaWNvbjogc3RyaW5nLFxuICBjdXJyZW50TGFuZ3VhZ2U6IHN0cmluZyxcbiAgbGFiZWw/OiBzdHJpbmcsXG4gIHR5cGU/OiAnZGVwYXJ0dXJlJyB8ICdhcnJpdmFsJyxcbik6IFRlbXBsYXRlUmVzdWx0IHtcbiAgcmV0dXJuIGh0bWxgXG4gICAgPHNwYW4gY2xhc3M9XCJzYmItcGVhcmwtY2hhaW5fX3RpbWUtdHJhbnNmZXIgc2JiLXBlYXJsLWNoYWluX190aW1lLXRyYW5zZmVyLS0ke2ljb259LSR7dHlwZX1cIj5cbiAgICAgIDxzYmItaWNvbiBuYW1lPSR7aWNvbn0+PC9zYmItaWNvbj5cbiAgICAgIDx0aW1lIGRhdGV0aW1lPSR7ZHVyYXRpb24gKyAnTSd9PlxuICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1zY3JlZW4tcmVhZGVyLW9ubHlcIj5cbiAgICAgICAgICAkeyFsYWJlbCAmJiB0eXBlXG4gICAgICAgICAgICA/IHR5cGUgPT09ICdkZXBhcnR1cmUnXG4gICAgICAgICAgICAgID8gaTE4bldhbGtpbmdEaXN0YW5jZURlcGFydHVyZVtjdXJyZW50TGFuZ3VhZ2VdXG4gICAgICAgICAgICAgIDogaTE4bldhbGtpbmdEaXN0YW5jZUFycml2YWxbY3VycmVudExhbmd1YWdlXVxuICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgICR7bGFiZWwgPyBodG1sYDxzcGFuPiR7bGFiZWx9PC9zcGFuPmAgOiBub3RoaW5nfSZuYnNwO1xuICAgICAgICA8L3NwYW4+XG4gICAgICAgICR7ZHVyYXRpb259XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLXBlYXJsLWNoYWluX190aW1lLXdhbGt0aW1lLXByaW1lLXN5bWJvbFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPic8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLXNjcmVlbi1yZWFkZXItb25seVwiPm1pbjwvc3Bhbj5cbiAgICAgIDwvdGltZT5cbiAgICA8L3NwYW4+XG4gIGA7XG59XG5cbi8qKlxuICogcmVuZGVycyBhIHdhbGstdGltZSBpY29uIHdpdGggdGhlIHdhbGsgZHVyYXRpb25cbiAqL1xuZnVuY3Rpb24gcmVuZGVyV2Fsa1RpbWUoXG4gIGR1cmF0aW9uOiBudW1iZXIgfCBzdHJpbmcsXG4gIGxhYmVsOiBzdHJpbmcsXG4gIHZhcmlhbnQ6ICdsZWZ0JyB8ICdyaWdodCcsXG4gIGljb246IHN0cmluZyxcbik6IFRlbXBsYXRlUmVzdWx0IHtcbiAgcmV0dXJuIGh0bWxgXG4gICAgPHNwYW4gY2xhc3M9XCJzYmItcGVhcmwtY2hhaW5fX3RpbWUtd2Fsa3RpbWUgc2JiLXBlYXJsLWNoYWluX190aW1lLXdhbGt0aW1lLS0ke2ljb259LSR7dmFyaWFudH1cIj5cbiAgICAgIDxzYmItaWNvbiBuYW1lPSR7aWNvbn0+PC9zYmItaWNvbj5cbiAgICAgIDx0aW1lIGRhdGV0aW1lPSR7ZHVyYXRpb24gKyAnTSd9PlxuICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1zY3JlZW4tcmVhZGVyLW9ubHlcIj4ke2xhYmVsfTwvc3Bhbj5cbiAgICAgICAgJHtkdXJhdGlvbn1cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItcGVhcmwtY2hhaW5fX3RpbWUtd2Fsa3RpbWUtcHJpbWUtc3ltYm9sXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+Jzwvc3Bhbj5cbiAgICAgIDwvdGltZT5cbiAgICA8L3NwYW4+XG4gIGA7XG59XG5cbi8qKlxuICogQHBhcmFtIGxlZ3M6IEFuIGFycmF5IG9mIExlZyBvYmplY3RzIHJlcHJlc2VudGluZyB0aGUgam91cm5leSBsZWdzLlxuICogQHBhcmFtIGRlcGFydHVyZVdhbGs6IFRoZSB3YWxraW5nIGRpc3RhbmNlIGluIG1pbnV0ZXMgZnJvbSB0aGUgZGVwYXJ0dXJlIHBvaW50IHRvIHRoZSBmaXJzdCBsZWcuXG4gKiBAcGFyYW0gYXJyaXZhbFdhbGs6IFRoZSB3YWxraW5nIGRpc3RhbmNlIGluIG1pbnV0ZXMgZnJvbSB0aGUgbGFzdCBsZWcgdG8gdGhlIGFycml2YWwgcG9pbnQuXG4gKiBAcGFyYW0gY3VycmVudExhbmd1YWdlOiBUaGUgY3VycmVudCBsYW5ndWFnZSBmb3IgbG9jYWxpemF0aW9uLlxuICogQHBhcmFtIGExMXlGb290cGF0aDogV2hldGhlciB0aGUgYTExeS1pY29uIHNob3VsZCBiZSBzaG93bi5cbiAqIEByZXR1cm5zIHJlbmRlckRlcGFydHVyZVRpbWVBdHRyaWJ1dGU6IEEgZnVuY3Rpb24gdGhhdCByZW5kZXJzIHRoZSBlbGVtZW50IGZvciB0aGUgZGVwYXJ0dXJlIHRpbWUgYXR0cmlidXRlLlxuICogQHJldHVybnMgcmVuZGVyQXJyaXZhbFRpbWVBdHRyaWJ1dGU6IEEgZnVuY3Rpb24gdGhhdCByZW5kZXJzIHRoZSBlbGVtZW50IGZvciB0aGUgYXJyaXZhbCB0aW1lIGF0dHJpYnV0ZS5cbiAqIEByZXR1cm5zIGFycml2YWxUaW1lQXR0cmlidXRlOiBUaGUgYWNjZXNzIGF0dHJpYnV0ZSBmb3IgdGhlIGFycml2YWwgdGltZS5cbiAqIEByZXR1cm5zIGRlcGFydHVyZVRpbWVBdHRyaWJ1dGU6IFRoZSBhY2Nlc3MgYXR0cmlidXRlIGZvciB0aGUgZGVwYXJ0dXJlIHRpbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXBhcnR1cmVBcnJpdmFsVGltZUF0dHJpYnV0ZShcbiAgbGVnczogTGVnW10sXG4gIGRlcGFydHVyZVdhbGs6IG51bWJlcixcbiAgYXJyaXZhbFdhbGs6IG51bWJlcixcbiAgY3VycmVudExhbmd1YWdlOiBzdHJpbmcsXG4gIGExMXlGb290cGF0aD86IGJvb2xlYW4sXG4pOiB7XG4gIHJlbmRlckRlcGFydHVyZVRpbWVBdHRyaWJ1dGU6ICgpID0+IFRlbXBsYXRlUmVzdWx0O1xuICByZW5kZXJBcnJpdmFsVGltZUF0dHJpYnV0ZTogKCkgPT4gVGVtcGxhdGVSZXN1bHQ7XG4gIGRlcGFydHVyZVRpbWVBdHRyaWJ1dGU6IElBY2Nlc3NBdHRyaWJ1dGUgfCBudWxsO1xuICBhcnJpdmFsVGltZUF0dHJpYnV0ZTogSUFjY2Vzc0F0dHJpYnV0ZSB8IG51bGw7XG59IHtcbiAgY29uc3QgY29ubmVjdGlvblJpZGVMZWcgPVxuICAgIGxlZ3MgJiZcbiAgICAobGVncy5maWx0ZXIoKGxlZykgPT4gaXNSaWRlTGVnKGxlZykgfHwgaXNDb25uZWN0aW9uTGVnKGxlZykpWzBdIGFzXG4gICAgICB8IFB0UmlkZUxlZ1xuICAgICAgfCBQdENvbm5lY3Rpb25MZWcpO1xuXG4gIGNvbnN0IGNvbm5lY3Rpb25MZWdOb3RpY2UgPSBbJ1lNJywgJ1lCJywgJ1knLCAnWVQnXTtcblxuICBjb25zdCBjb25uZWN0aW9uRmlyc3RMZWcgPSBnZXRQVENvbm5lY3Rpb25BdHRyaWJ1dGUoY29ubmVjdGlvblJpZGVMZWcsIGNvbm5lY3Rpb25MZWdOb3RpY2UpO1xuICBjb25zdCBleHRlbmRlZEZpcnN0TGVnID0gZ2V0Rmlyc3RFeHRlbmRlZExlZ0F0dHJpYnV0ZShcbiAgICBjb25uZWN0aW9uUmlkZUxlZyxcbiAgICBkZXBhcnR1cmVXYWxrLFxuICAgIGExMXlGb290cGF0aCxcbiAgICBjdXJyZW50TGFuZ3VhZ2UsXG4gICk7XG4gIGNvbnN0IGRlcGFydHVyZVdhbGtBdHRyaWJ1dGUgPSBkZXBhcnR1cmVXYWxrXG4gICAgPyB7XG4gICAgICAgIHRleHQ6IGkxOG5XYWxraW5nRGlzdGFuY2VEZXBhcnR1cmVbY3VycmVudExhbmd1YWdlXSxcbiAgICAgICAgZHVyYXRpb246IGRlcGFydHVyZVdhbGssXG4gICAgICAgIGljb246IGExMXlGb290cGF0aCA/ICd3aGVlbGNoYWlyLXNtYWxsJyA6ICd3YWxrLXNtYWxsJyxcbiAgICAgIH1cbiAgICA6IG51bGw7XG5cbiAgY29uc3QgZ2V0RGVwYXJ0dXJlVHlwZSA9ICgpOiBJQWNjZXNzQXR0cmlidXRlIHwgbnVsbCA9PiB7XG4gICAgaWYgKGNvbm5lY3Rpb25GaXJzdExlZykge1xuICAgICAgcmV0dXJuIGNvbm5lY3Rpb25GaXJzdExlZztcbiAgICB9IGVsc2UgaWYgKGRlcGFydHVyZVdhbGtBdHRyaWJ1dGUgJiYgIWV4dGVuZGVkRmlyc3RMZWcgJiYgIWNvbm5lY3Rpb25GaXJzdExlZykge1xuICAgICAgcmV0dXJuIGRlcGFydHVyZVdhbGtBdHRyaWJ1dGU7XG4gICAgfSBlbHNlIGlmIChleHRlbmRlZEZpcnN0TGVnKSB7XG4gICAgICByZXR1cm4gZXh0ZW5kZWRGaXJzdExlZztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIHJlbmRlckRlcGFydHVyZVRpbWVBdHRyaWJ1dGUoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgJHtjb25uZWN0aW9uRmlyc3RMZWdcbiAgICAgICAgPyByZW5kZXJXYWxrVGltZShcbiAgICAgICAgICAgIGNvbm5lY3Rpb25GaXJzdExlZy5kdXJhdGlvbixcbiAgICAgICAgICAgIGNvbm5lY3Rpb25GaXJzdExlZy50ZXh0LFxuICAgICAgICAgICAgJ2xlZnQnLFxuICAgICAgICAgICAgY29ubmVjdGlvbkZpcnN0TGVnLmljb24sXG4gICAgICAgICAgKVxuICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAke2RlcGFydHVyZVdhbGtBdHRyaWJ1dGUgJiYgIWV4dGVuZGVkRmlyc3RMZWcgJiYgIWNvbm5lY3Rpb25GaXJzdExlZ1xuICAgICAgICA/IHJlbmRlcldhbGtUaW1lKFxuICAgICAgICAgICAgZGVwYXJ0dXJlV2Fsa0F0dHJpYnV0ZS5kdXJhdGlvbixcbiAgICAgICAgICAgIGRlcGFydHVyZVdhbGtBdHRyaWJ1dGUudGV4dCxcbiAgICAgICAgICAgICdsZWZ0JyxcbiAgICAgICAgICAgIGRlcGFydHVyZVdhbGtBdHRyaWJ1dGUuaWNvbixcbiAgICAgICAgICApXG4gICAgICAgIDogbm90aGluZ31cbiAgICAgICR7ZXh0ZW5kZWRGaXJzdExlZ1xuICAgICAgICA/IGExMXlGb290cGF0aFxuICAgICAgICAgID8gcmVuZGVyV2Fsa1RpbWUoXG4gICAgICAgICAgICAgIGV4dGVuZGVkRmlyc3RMZWcuZHVyYXRpb24sXG4gICAgICAgICAgICAgIGV4dGVuZGVkRmlyc3RMZWcudGV4dCxcbiAgICAgICAgICAgICAgJ2xlZnQnLFxuICAgICAgICAgICAgICBleHRlbmRlZEZpcnN0TGVnLmljb24sXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiByZW5kZXJUcmFuc2ZlclRpbWUoXG4gICAgICAgICAgICAgIGV4dGVuZGVkRmlyc3RMZWcuZHVyYXRpb24sXG4gICAgICAgICAgICAgIGV4dGVuZGVkRmlyc3RMZWcuaWNvbixcbiAgICAgICAgICAgICAgY3VycmVudExhbmd1YWdlLFxuICAgICAgICAgICAgICBleHRlbmRlZEZpcnN0TGVnLnRleHQsXG4gICAgICAgICAgICAgICdkZXBhcnR1cmUnLFxuICAgICAgICAgICAgKVxuICAgICAgICA6IG5vdGhpbmd9XG4gICAgYDtcbiAgfVxuXG4gIGNvbnN0IGxhc3RMZWcgPSBsZWdzICYmIGxlZ3NbbGVncy5sZW5ndGggLSAxXTtcbiAgY29uc3QgbGFzdENvbm5lY3Rpb25SaWRlTGVnID1cbiAgICAoaXNDb25uZWN0aW9uTGVnKGxhc3RMZWcpIHx8IGlzUmlkZUxlZyhsYXN0TGVnKSkgJiYgKGxhc3RMZWcgYXMgUHRDb25uZWN0aW9uTGVnIHwgUHRSaWRlTGVnKTtcblxuICBjb25zdCBjb25uZWN0aW9uTGFzdExlZyA9XG4gICAgbGFzdENvbm5lY3Rpb25SaWRlTGVnICYmIGdldFBUQ29ubmVjdGlvbkF0dHJpYnV0ZShsYXN0Q29ubmVjdGlvblJpZGVMZWcsIGNvbm5lY3Rpb25MZWdOb3RpY2UpO1xuICBjb25zdCBleHRlbmRlZExhc3RMZWcgPVxuICAgIGxhc3RDb25uZWN0aW9uUmlkZUxlZyAmJlxuICAgIGdldExhc3RFeHRlbmRlZExlZ0F0dHJpYnV0ZShsYXN0Q29ubmVjdGlvblJpZGVMZWcsIGFycml2YWxXYWxrLCBhMTF5Rm9vdHBhdGgsIGN1cnJlbnRMYW5ndWFnZSk7XG4gIGNvbnN0IGFycml2YWxXYWxrQXR0cmlidXRlID0gYXJyaXZhbFdhbGtcbiAgICA/IHtcbiAgICAgICAgdGV4dDogaTE4bldhbGtpbmdEaXN0YW5jZUFycml2YWxbY3VycmVudExhbmd1YWdlXSxcbiAgICAgICAgZHVyYXRpb246IGFycml2YWxXYWxrLFxuICAgICAgICBpY29uOiBhMTF5Rm9vdHBhdGggPyAnd2hlZWxjaGFpci1zbWFsbCcgOiAnd2Fsay1zbWFsbCcsXG4gICAgICB9XG4gICAgOiBudWxsO1xuXG4gIGNvbnN0IGdldEFycml2YWxUeXBlID0gKCk6IElBY2Nlc3NBdHRyaWJ1dGUgfCBudWxsID0+IHtcbiAgICBpZiAoY29ubmVjdGlvbkxhc3RMZWcpIHtcbiAgICAgIHJldHVybiBjb25uZWN0aW9uTGFzdExlZztcbiAgICB9IGVsc2UgaWYgKGFycml2YWxXYWxrQXR0cmlidXRlICYmICFleHRlbmRlZExhc3RMZWcgJiYgIWNvbm5lY3Rpb25MYXN0TGVnKSB7XG4gICAgICByZXR1cm4gYXJyaXZhbFdhbGtBdHRyaWJ1dGU7XG4gICAgfSBlbHNlIGlmIChleHRlbmRlZExhc3RMZWcpIHtcbiAgICAgIHJldHVybiBleHRlbmRlZExhc3RMZWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiByZW5kZXJBcnJpdmFsVGltZUF0dHJpYnV0ZSgpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICAke2Nvbm5lY3Rpb25MYXN0TGVnXG4gICAgICAgID8gcmVuZGVyV2Fsa1RpbWUoXG4gICAgICAgICAgICBjb25uZWN0aW9uTGFzdExlZy5kdXJhdGlvbixcbiAgICAgICAgICAgIGNvbm5lY3Rpb25MYXN0TGVnLnRleHQsXG4gICAgICAgICAgICAncmlnaHQnLFxuICAgICAgICAgICAgY29ubmVjdGlvbkxhc3RMZWcuaWNvbixcbiAgICAgICAgICApXG4gICAgICAgIDogbm90aGluZ31cbiAgICAgICR7YXJyaXZhbFdhbGtBdHRyaWJ1dGUgJiYgIWV4dGVuZGVkTGFzdExlZyAmJiAhY29ubmVjdGlvbkxhc3RMZWdcbiAgICAgICAgPyByZW5kZXJXYWxrVGltZShcbiAgICAgICAgICAgIGFycml2YWxXYWxrQXR0cmlidXRlLmR1cmF0aW9uLFxuICAgICAgICAgICAgYXJyaXZhbFdhbGtBdHRyaWJ1dGUudGV4dCxcbiAgICAgICAgICAgICdyaWdodCcsXG4gICAgICAgICAgICBhcnJpdmFsV2Fsa0F0dHJpYnV0ZS5pY29uLFxuICAgICAgICAgIClcbiAgICAgICAgOiBub3RoaW5nfVxuICAgICAgJHtleHRlbmRlZExhc3RMZWdcbiAgICAgICAgPyBhMTF5Rm9vdHBhdGhcbiAgICAgICAgICA/IHJlbmRlcldhbGtUaW1lKFxuICAgICAgICAgICAgICBleHRlbmRlZExhc3RMZWcuZHVyYXRpb24sXG4gICAgICAgICAgICAgIGV4dGVuZGVkTGFzdExlZy50ZXh0LFxuICAgICAgICAgICAgICAncmlnaHQnLFxuICAgICAgICAgICAgICBleHRlbmRlZExhc3RMZWcuaWNvbixcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IHJlbmRlclRyYW5zZmVyVGltZShcbiAgICAgICAgICAgICAgZXh0ZW5kZWRMYXN0TGVnLmR1cmF0aW9uLFxuICAgICAgICAgICAgICBleHRlbmRlZExhc3RMZWcuaWNvbixcbiAgICAgICAgICAgICAgY3VycmVudExhbmd1YWdlLFxuICAgICAgICAgICAgICBleHRlbmRlZExhc3RMZWcudGV4dCxcbiAgICAgICAgICAgICAgJ2Fycml2YWwnLFxuICAgICAgICAgICAgKVxuICAgICAgICA6IG5vdGhpbmd9XG4gICAgYDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcmVuZGVyRGVwYXJ0dXJlVGltZUF0dHJpYnV0ZSxcbiAgICByZW5kZXJBcnJpdmFsVGltZUF0dHJpYnV0ZSxcbiAgICBkZXBhcnR1cmVUaW1lQXR0cmlidXRlOiBnZXREZXBhcnR1cmVUeXBlKCksXG4gICAgYXJyaXZhbFRpbWVBdHRyaWJ1dGU6IGdldEFycml2YWxUeXBlKCksXG4gIH07XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBSWEsTUFBQSxZQUFZ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