mis-crystal-design-system 14.0.63 → 14.0.64-dayjs

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 (58) hide show
  1. package/async-search-dropdown/async-dropdown.component.d.ts +2 -0
  2. package/datepicker_v2/tz-dp-container/tz-dp-container.component.d.ts +16 -1
  3. package/daterangepicker_v2/tz-drp-container/tz-drp-container.component.d.ts +1 -1
  4. package/dynamic-form/dynamic-form.component.d.ts +0 -1
  5. package/esm2020/async-search-dropdown/async-dropdown.component.mjs +9 -5
  6. package/esm2020/datepicker_v2/tz-dp-container/tz-dp-container.component.mjs +262 -76
  7. package/esm2020/daterangepicker_v2/models/drp-config.model.mjs +1 -1
  8. package/esm2020/daterangepicker_v2/tz-drp-container/tz-drp-container.component.mjs +44 -36
  9. package/esm2020/dynamic-form/dynamic-form.component.mjs +18 -6
  10. package/esm2020/radio-button/radio-button.component.mjs +2 -2
  11. package/esm2020/specificdatepicker/tz-sdp-container/tz-sdp-container.component.mjs +55 -41
  12. package/esm2020/timepicker/timepicker.component.mjs +54 -48
  13. package/esm2020/timerangepicker/public_api.mjs +1 -1
  14. package/esm2020/timerangepicker/timerangepicker.component.mjs +46 -42
  15. package/esm2020/tooltip/tooltip-container/tooltip.component.mjs +12 -11
  16. package/esm2020/tooltip/tooltip.directive.mjs +9 -3
  17. package/fesm2015/mis-crystal-design-system-async-search-dropdown.mjs +8 -4
  18. package/fesm2015/mis-crystal-design-system-async-search-dropdown.mjs.map +1 -1
  19. package/fesm2015/mis-crystal-design-system-datepicker_v2.mjs +285 -75
  20. package/fesm2015/mis-crystal-design-system-datepicker_v2.mjs.map +1 -1
  21. package/fesm2015/mis-crystal-design-system-daterangepicker_v2.mjs +44 -35
  22. package/fesm2015/mis-crystal-design-system-daterangepicker_v2.mjs.map +1 -1
  23. package/fesm2015/mis-crystal-design-system-dynamic-form.mjs +20 -6
  24. package/fesm2015/mis-crystal-design-system-dynamic-form.mjs.map +1 -1
  25. package/fesm2015/mis-crystal-design-system-radio-button.mjs +1 -1
  26. package/fesm2015/mis-crystal-design-system-radio-button.mjs.map +1 -1
  27. package/fesm2015/mis-crystal-design-system-specificdatepicker.mjs +54 -40
  28. package/fesm2015/mis-crystal-design-system-specificdatepicker.mjs.map +1 -1
  29. package/fesm2015/mis-crystal-design-system-timepicker.mjs +53 -47
  30. package/fesm2015/mis-crystal-design-system-timepicker.mjs.map +1 -1
  31. package/fesm2015/mis-crystal-design-system-timerangepicker.mjs +45 -41
  32. package/fesm2015/mis-crystal-design-system-timerangepicker.mjs.map +1 -1
  33. package/fesm2015/mis-crystal-design-system-tooltip.mjs +19 -12
  34. package/fesm2015/mis-crystal-design-system-tooltip.mjs.map +1 -1
  35. package/fesm2020/mis-crystal-design-system-async-search-dropdown.mjs +8 -4
  36. package/fesm2020/mis-crystal-design-system-async-search-dropdown.mjs.map +1 -1
  37. package/fesm2020/mis-crystal-design-system-datepicker_v2.mjs +261 -75
  38. package/fesm2020/mis-crystal-design-system-datepicker_v2.mjs.map +1 -1
  39. package/fesm2020/mis-crystal-design-system-daterangepicker_v2.mjs +43 -34
  40. package/fesm2020/mis-crystal-design-system-daterangepicker_v2.mjs.map +1 -1
  41. package/fesm2020/mis-crystal-design-system-dynamic-form.mjs +17 -4
  42. package/fesm2020/mis-crystal-design-system-dynamic-form.mjs.map +1 -1
  43. package/fesm2020/mis-crystal-design-system-radio-button.mjs +1 -1
  44. package/fesm2020/mis-crystal-design-system-radio-button.mjs.map +1 -1
  45. package/fesm2020/mis-crystal-design-system-specificdatepicker.mjs +54 -40
  46. package/fesm2020/mis-crystal-design-system-specificdatepicker.mjs.map +1 -1
  47. package/fesm2020/mis-crystal-design-system-timepicker.mjs +53 -47
  48. package/fesm2020/mis-crystal-design-system-timepicker.mjs.map +1 -1
  49. package/fesm2020/mis-crystal-design-system-timerangepicker.mjs +45 -41
  50. package/fesm2020/mis-crystal-design-system-timerangepicker.mjs.map +1 -1
  51. package/fesm2020/mis-crystal-design-system-tooltip.mjs +19 -12
  52. package/fesm2020/mis-crystal-design-system-tooltip.mjs.map +1 -1
  53. package/package.json +1 -1
  54. package/specificdatepicker/tz-sdp-container/tz-sdp-container.component.d.ts +1 -1
  55. package/timepicker/timepicker.component.d.ts +2 -2
  56. package/timerangepicker/public_api.d.ts +1 -0
  57. package/tooltip/tooltip-container/tooltip.component.d.ts +2 -1
  58. package/tooltip/tooltip.directive.d.ts +3 -1
@@ -1,72 +1,174 @@
1
1
  import { Component, HostListener, Inject } from "@angular/core";
2
2
  import { CONTAINER_DATA, DATE_FORMAT } from "../datepicker-constants";
3
- import { parseZone, tz } from "moment-timezone";
4
3
  import { getMonth } from "../utils";
4
+ import dayjs, { tz } from 'dayjs';
5
+ import timezone from 'dayjs/plugin/timezone';
6
+ import utc from 'dayjs/plugin/utc';
7
+ import isSameOrAfter from 'dayjs/plugin/isSameOrAfter';
8
+ import isSameOrBefore from 'dayjs/plugin/isSameOrBefore';
9
+ import customParseFormat from 'dayjs/plugin/customParseFormat';
5
10
  import * as i0 from "@angular/core";
6
11
  import * as i1 from "mis-crystal-design-system/toast";
7
12
  import * as i2 from "@angular/common";
8
13
  import * as i3 from "mis-crystal-design-system/button";
9
14
  import * as i4 from "@angular/cdk/a11y";
10
- const _c0 = function (a0) { return { "current-day": a0 }; };
15
+ function TzDpContainerComponent_div_6_Template(rf, ctx) { if (rf & 1) {
16
+ const _r8 = i0.ɵɵgetCurrentView();
17
+ i0.ɵɵnamespaceSVG();
18
+ i0.ɵɵnamespaceHTML();
19
+ i0.ɵɵelementStart(0, "div", 15);
20
+ i0.ɵɵlistener("click", function TzDpContainerComponent_div_6_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r7 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r7.toggleMonthSelector()); });
21
+ i0.ɵɵtext(1);
22
+ i0.ɵɵelementEnd();
23
+ } if (rf & 2) {
24
+ const ctx_r0 = i0.ɵɵnextContext();
25
+ i0.ɵɵadvance(1);
26
+ i0.ɵɵtextInterpolate1(" ", ctx_r0.isYearSelectionFlow ? ctx_r0.selectedYear : ctx_r0.availableMonths[ctx_r0.currentMonthNumber], " ");
27
+ } }
28
+ function TzDpContainerComponent_div_7_Template(rf, ctx) { if (rf & 1) {
29
+ const _r10 = i0.ɵɵgetCurrentView();
30
+ i0.ɵɵnamespaceSVG();
31
+ i0.ɵɵnamespaceHTML();
32
+ i0.ɵɵelementStart(0, "div", 16);
33
+ i0.ɵɵlistener("click", function TzDpContainerComponent_div_7_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r9 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r9.toggleYearSelector()); });
34
+ i0.ɵɵtext(1);
35
+ i0.ɵɵelementEnd();
36
+ } if (rf & 2) {
37
+ const ctx_r1 = i0.ɵɵnextContext();
38
+ i0.ɵɵadvance(1);
39
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.isSelectingYear ? ctx_r1.yearRange : ctx_r1.currentYearNumber, " ");
40
+ } }
41
+ const _c0 = function (a0, a1) { return { "disable-month": a0, "select-month": a1 }; };
42
+ function TzDpContainerComponent_div_12_div_2_Template(rf, ctx) { if (rf & 1) {
43
+ const _r15 = i0.ɵɵgetCurrentView();
44
+ i0.ɵɵelementStart(0, "div", 20);
45
+ i0.ɵɵlistener("click", function TzDpContainerComponent_div_12_div_2_Template_div_click_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r15); const i_r13 = restoredCtx.index; const month_r12 = restoredCtx.$implicit; const ctx_r14 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(!ctx_r14.disabledMonths[i_r13] && ctx_r14.selectMonth(month_r12)); });
46
+ i0.ɵɵtext(1);
47
+ i0.ɵɵelementEnd();
48
+ } if (rf & 2) {
49
+ const month_r12 = ctx.$implicit;
50
+ const i_r13 = ctx.index;
51
+ const ctx_r11 = i0.ɵɵnextContext(2);
52
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(2, _c0, ctx_r11.disabledMonths[i_r13], !ctx_r11.disabledMonths[ctx_r11.currentMonthNumber] && month_r12 === ctx_r11.availableMonths[ctx_r11.currentMonthNumber]));
53
+ i0.ɵɵadvance(1);
54
+ i0.ɵɵtextInterpolate1(" ", month_r12, " ");
55
+ } }
56
+ function TzDpContainerComponent_div_12_Template(rf, ctx) { if (rf & 1) {
57
+ i0.ɵɵelementStart(0, "div", 17)(1, "div", 18);
58
+ i0.ɵɵtemplate(2, TzDpContainerComponent_div_12_div_2_Template, 2, 5, "div", 19);
59
+ i0.ɵɵelementEnd()();
60
+ } if (rf & 2) {
61
+ const ctx_r2 = i0.ɵɵnextContext();
62
+ i0.ɵɵadvance(2);
63
+ i0.ɵɵproperty("ngForOf", ctx_r2.availableMonths);
64
+ } }
65
+ const _c1 = function (a0, a1) { return { "disable-year": a0, "select-year": a1 }; };
66
+ function TzDpContainerComponent_div_13_div_2_Template(rf, ctx) { if (rf & 1) {
67
+ const _r20 = i0.ɵɵgetCurrentView();
68
+ i0.ɵɵelementStart(0, "div", 23);
69
+ i0.ɵɵlistener("click", function TzDpContainerComponent_div_13_div_2_Template_div_click_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r20); const i_r18 = restoredCtx.index; const year_r17 = restoredCtx.$implicit; const ctx_r19 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(!ctx_r19.disabledYears[i_r18] && ctx_r19.selectYear(year_r17)); });
70
+ i0.ɵɵtext(1);
71
+ i0.ɵɵelementEnd();
72
+ } if (rf & 2) {
73
+ const year_r17 = ctx.$implicit;
74
+ const i_r18 = ctx.index;
75
+ const ctx_r16 = i0.ɵɵnextContext(2);
76
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(2, _c1, ctx_r16.disabledYears[i_r18], year_r17 === ctx_r16.currentYearNumber));
77
+ i0.ɵɵadvance(1);
78
+ i0.ɵɵtextInterpolate1(" ", year_r17, " ");
79
+ } }
11
80
  function TzDpContainerComponent_div_13_Template(rf, ctx) { if (rf & 1) {
12
- i0.ɵɵelementStart(0, "div", 13)(1, "span", 14);
81
+ i0.ɵɵelementStart(0, "div", 21)(1, "div", 18);
82
+ i0.ɵɵtemplate(2, TzDpContainerComponent_div_13_div_2_Template, 2, 5, "div", 22);
83
+ i0.ɵɵelementEnd()();
84
+ } if (rf & 2) {
85
+ const ctx_r3 = i0.ɵɵnextContext();
86
+ i0.ɵɵadvance(2);
87
+ i0.ɵɵproperty("ngForOf", ctx_r3.availableYears);
88
+ } }
89
+ const _c2 = function (a0) { return { "current-day": a0 }; };
90
+ function TzDpContainerComponent_div_14_div_1_Template(rf, ctx) { if (rf & 1) {
91
+ i0.ɵɵelementStart(0, "div", 26)(1, "span", 27);
13
92
  i0.ɵɵtext(2);
14
93
  i0.ɵɵelementEnd()();
15
94
  } if (rf & 2) {
16
- const weekDay_r3 = ctx.$implicit;
95
+ const weekDay_r22 = ctx.$implicit;
17
96
  i0.ɵɵadvance(1);
18
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(2, _c0, weekDay_r3.isCurrentDay));
97
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(2, _c2, weekDay_r22.isCurrentDay));
19
98
  i0.ɵɵadvance(1);
20
- i0.ɵɵtextInterpolate(weekDay_r3.label);
99
+ i0.ɵɵtextInterpolate(weekDay_r22.label);
21
100
  } }
22
- const _c1 = function (a0, a1, a2) { return { "current-day": a0, "selected-day": a1, "disabled-day": a2 }; };
23
- function TzDpContainerComponent_div_15_span_1_Template(rf, ctx) { if (rf & 1) {
24
- i0.ɵɵelementStart(0, "span", 17);
101
+ function TzDpContainerComponent_div_14_Template(rf, ctx) { if (rf & 1) {
102
+ i0.ɵɵelementStart(0, "div", 24);
103
+ i0.ɵɵtemplate(1, TzDpContainerComponent_div_14_div_1_Template, 3, 4, "div", 25);
104
+ i0.ɵɵelementEnd();
105
+ } if (rf & 2) {
106
+ const ctx_r4 = i0.ɵɵnextContext();
107
+ i0.ɵɵadvance(1);
108
+ i0.ɵɵproperty("ngForOf", ctx_r4.weekDays);
109
+ } }
110
+ const _c3 = function (a0, a1, a2) { return { "current-day": a0, "selected-day": a1, "disabled-day": a2 }; };
111
+ function TzDpContainerComponent_div_15_div_1_span_1_Template(rf, ctx) { if (rf & 1) {
112
+ i0.ɵɵelementStart(0, "span", 32);
25
113
  i0.ɵɵtext(1);
26
114
  i0.ɵɵelementEnd();
27
115
  } if (rf & 2) {
28
- const day_r4 = i0.ɵɵnextContext().$implicit;
29
- const ctx_r5 = i0.ɵɵnextContext();
30
- i0.ɵɵproperty("tabindex", day_r4.isDisabledDay ? -1 : 0)("ngClass", i0.ɵɵpureFunction3(4, _c1, day_r4.isCurrentDay, !ctx_r5.localSelectedDate ? day_r4.isSelectedDay : day_r4 === ctx_r5.localSelectedDate, day_r4.isDisabledDay));
31
- i0.ɵɵattribute("aria-label", ctx_r5.retractDayMonth(day_r4.date, ctx_r5.currentMonth, ctx_r5.currentYearNumber));
116
+ const day_r24 = i0.ɵɵnextContext().$implicit;
117
+ const ctx_r25 = i0.ɵɵnextContext(2);
118
+ i0.ɵɵproperty("tabindex", day_r24.isDisabledDay ? -1 : 0)("ngClass", i0.ɵɵpureFunction3(4, _c3, day_r24.isCurrentDay, !ctx_r25.localSelectedDate ? day_r24.isSelectedDay : day_r24 === ctx_r25.localSelectedDate, day_r24.isDisabledDay));
119
+ i0.ɵɵattribute("aria-label", ctx_r25.retractDayMonth(day_r24.date, ctx_r25.currentMonth, ctx_r25.currentYearNumber));
120
+ i0.ɵɵadvance(1);
121
+ i0.ɵɵtextInterpolate1(" ", day_r24.date, " ");
122
+ } }
123
+ const _c4 = function (a0, a1, a2) { return { "selected-day": a0, "disabled-day": a1, "is-valid-date": a2 }; };
124
+ function TzDpContainerComponent_div_15_div_1_Template(rf, ctx) { if (rf & 1) {
125
+ const _r28 = i0.ɵɵgetCurrentView();
126
+ i0.ɵɵelementStart(0, "div", 30);
127
+ i0.ɵɵlistener("click", function TzDpContainerComponent_div_15_div_1_Template_div_click_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r28); const day_r24 = restoredCtx.$implicit; const ctx_r27 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r27.selectDay(day_r24)); })("keyup.enter", function TzDpContainerComponent_div_15_div_1_Template_div_keyup_enter_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r28); const day_r24 = restoredCtx.$implicit; const ctx_r29 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r29.selectDay(day_r24)); });
128
+ i0.ɵɵtemplate(1, TzDpContainerComponent_div_15_div_1_span_1_Template, 2, 8, "span", 31);
129
+ i0.ɵɵelementEnd();
130
+ } if (rf & 2) {
131
+ const day_r24 = ctx.$implicit;
132
+ const ctx_r23 = i0.ɵɵnextContext(2);
133
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction3(2, _c4, !ctx_r23.localSelectedDate ? day_r24.isSelectedDay : day_r24 === ctx_r23.localSelectedDate, day_r24.isDisabledDay, day_r24.date > 0 && !day_r24.isSelectedDay));
32
134
  i0.ɵɵadvance(1);
33
- i0.ɵɵtextInterpolate1(" ", day_r4.date, " ");
135
+ i0.ɵɵproperty("ngIf", day_r24.date > 0);
34
136
  } }
35
- const _c2 = function (a0, a1, a2) { return { "selected-day": a0, "disabled-day": a1, "is-valid-date": a2 }; };
36
137
  function TzDpContainerComponent_div_15_Template(rf, ctx) { if (rf & 1) {
37
- const _r8 = i0.ɵɵgetCurrentView();
38
- i0.ɵɵelementStart(0, "div", 15);
39
- i0.ɵɵlistener("click", function TzDpContainerComponent_div_15_Template_div_click_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r8); const day_r4 = restoredCtx.$implicit; const ctx_r7 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r7.selectDay(day_r4)); })("keyup.enter", function TzDpContainerComponent_div_15_Template_div_keyup_enter_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r8); const day_r4 = restoredCtx.$implicit; const ctx_r9 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r9.selectDay(day_r4)); });
40
- i0.ɵɵtemplate(1, TzDpContainerComponent_div_15_span_1_Template, 2, 8, "span", 16);
138
+ i0.ɵɵelementStart(0, "div", 28);
139
+ i0.ɵɵtemplate(1, TzDpContainerComponent_div_15_div_1_Template, 2, 6, "div", 29);
41
140
  i0.ɵɵelementEnd();
42
141
  } if (rf & 2) {
43
- const day_r4 = ctx.$implicit;
44
- const ctx_r1 = i0.ɵɵnextContext();
45
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction3(2, _c2, !ctx_r1.localSelectedDate ? day_r4.isSelectedDay : day_r4 === ctx_r1.localSelectedDate, day_r4.isDisabledDay, day_r4.date > 0 && !day_r4.isSelectedDay));
142
+ const ctx_r5 = i0.ɵɵnextContext();
46
143
  i0.ɵɵadvance(1);
47
- i0.ɵɵproperty("ngIf", day_r4.date > 0);
144
+ i0.ɵɵproperty("ngForOf", ctx_r5.currentMonthDates);
48
145
  } }
49
146
  function TzDpContainerComponent_div_16_Template(rf, ctx) { if (rf & 1) {
50
- const _r11 = i0.ɵɵgetCurrentView();
51
- i0.ɵɵelementStart(0, "div", 18)(1, "button", 19);
52
- i0.ɵɵlistener("click", function TzDpContainerComponent_div_16_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r11); const ctx_r10 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r10.cancelDatePicker()); });
147
+ const _r31 = i0.ɵɵgetCurrentView();
148
+ i0.ɵɵelementStart(0, "div", 33)(1, "button", 34);
149
+ i0.ɵɵlistener("click", function TzDpContainerComponent_div_16_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r31); const ctx_r30 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r30.cancelDatePicker()); });
53
150
  i0.ɵɵtext(2, "Cancel");
54
151
  i0.ɵɵelementEnd();
55
- i0.ɵɵelementStart(3, "button", 20);
56
- i0.ɵɵlistener("click", function TzDpContainerComponent_div_16_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r11); const ctx_r12 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r12.applyDate()); });
152
+ i0.ɵɵelementStart(3, "button", 35);
153
+ i0.ɵɵlistener("click", function TzDpContainerComponent_div_16_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r31); const ctx_r32 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r32.applyDate()); });
57
154
  i0.ɵɵtext(4, "Apply");
58
155
  i0.ɵɵelementEnd()();
59
156
  } if (rf & 2) {
60
- const ctx_r2 = i0.ɵɵnextContext();
157
+ const ctx_r6 = i0.ɵɵnextContext();
61
158
  i0.ɵɵadvance(3);
62
- i0.ɵɵproperty("disabled", !(ctx_r2.data.date || ctx_r2.localSelectedDate));
159
+ i0.ɵɵproperty("disabled", !(ctx_r6.data.date || ctx_r6.localSelectedDate.date));
63
160
  } }
64
- const _c3 = function (a0) { return { "disabled-month": a0 }; };
161
+ const _c5 = function (a0) { return { "disabled-month": a0 }; };
162
+ dayjs.extend(utc);
163
+ dayjs.extend(timezone);
164
+ dayjs.extend(customParseFormat);
165
+ dayjs.extend(isSameOrAfter);
166
+ dayjs.extend(isSameOrBefore);
65
167
  export class TzDpContainerComponent {
66
168
  constructor(data, toast) {
67
169
  this.toast = toast;
68
170
  this.parseZoneInstance = (...args) => {
69
- return parseZone(...args);
171
+ return dayjs(...args);
70
172
  };
71
173
  this.rawWeekDays = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"];
72
174
  this.weekDays = [];
@@ -74,10 +176,17 @@ export class TzDpContainerComponent {
74
176
  this.isPreviousMonthDisabled = false;
75
177
  this.isNextMonthDisabled = false;
76
178
  this.allowBookingOnDisabledDay = false;
179
+ this.isSelectingMonth = false;
180
+ this.isSelectingYear = false;
181
+ this.availableYears = [];
182
+ this.availableMonths = [];
183
+ this.disabledMonths = [];
184
+ this.disabledYears = [];
185
+ this.isYearSelectionFlow = false;
77
186
  this.data = data;
78
187
  if (this.data?.dpConfig?.timezone) {
79
188
  this.parseZoneInstance = (...args) => {
80
- return tz(args[0], args[1], this.data.dpConfig.timezone);
189
+ return tz(args[0], args[1] || 'DD/MM/YYYY', this.data.dpConfig.timezone);
81
190
  };
82
191
  }
83
192
  this.currentMonthNumber = this.parseZoneInstance().month();
@@ -93,6 +202,8 @@ export class TzDpContainerComponent {
93
202
  format: DATE_FORMAT
94
203
  };
95
204
  }
205
+ this.availableMonths = Array.from({ length: 12 }, (_, i) => dayjs().month(i).format('MMMM'));
206
+ this.availableYears = Array.from({ length: 12 }, (_, index) => this.currentYearNumber - 6 + index);
96
207
  }
97
208
  retractDayMonth(day, month, year) {
98
209
  return `${day} ${month} ${year}`;
@@ -100,11 +211,12 @@ export class TzDpContainerComponent {
100
211
  ngOnInit() {
101
212
  this.currentDateInstance();
102
213
  this.calculateMinMaxDays();
214
+ this.calculateDisabledMonthsAndYears();
103
215
  }
104
216
  currentDateInstance() {
105
- const selectedDate = parseZone(this.data.date, this.data.dpConfig.format);
217
+ const selectedDate = dayjs(this.data.date, this.data.dpConfig.format);
106
218
  if (selectedDate.isValid()) {
107
- this.currentYearNumber = selectedDate.year();
219
+ this.selectedYear = this.currentYearNumber = selectedDate.year();
108
220
  this.currentMonthNumber = selectedDate.month();
109
221
  this.currentMonth = getMonth(this.currentMonthNumber);
110
222
  }
@@ -112,41 +224,68 @@ export class TzDpContainerComponent {
112
224
  }
113
225
  calculateMinMaxDays() {
114
226
  const currentInstance = this.parseZoneInstance().year(this.currentYearNumber).month(this.currentMonthNumber);
115
- const minDate = this.parseZoneInstance(this.data.dpConfig.minDate, this.data.dpConfig.format);
227
+ const minDate = !!this.data.dpConfig.minDate ? this.parseZoneInstance(this.data.dpConfig.minDate, this.data.dpConfig.format) : dayjs('invalid');
116
228
  if (minDate.isValid()) {
117
229
  this.isPreviousMonthDisabled = minDate.isSameOrAfter(currentInstance, "month");
118
230
  }
119
- const maxDate = this.parseZoneInstance(this.data.dpConfig.maxDate, this.data.dpConfig.format);
231
+ const maxDate = !!this.data.dpConfig.maxDate ? this.parseZoneInstance(this.data.dpConfig.maxDate, this.data.dpConfig.format) : dayjs('invalid');
120
232
  if (maxDate.isValid()) {
121
233
  this.isNextMonthDisabled = maxDate.isSameOrBefore(currentInstance, "month");
122
234
  }
123
235
  }
124
- navigateMonth(direction) {
125
- let thisMonth = parseZone().year(this.currentYearNumber).month(this.currentMonthNumber);
126
- if (direction === "NEXT") {
127
- thisMonth = thisMonth.add(1, "month");
236
+ calculateDisabledMonthsAndYears() {
237
+ const minDate = this.parseZoneInstance(this.data.dpConfig.minDate, this.data.dpConfig.format);
238
+ const maxDate = this.parseZoneInstance(this.data.dpConfig.maxDate, this.data.dpConfig.format);
239
+ this.disabledMonths = this.availableMonths.map((month, index) => {
240
+ const monthDate = this.parseZoneInstance().year(this.selectedYear).month(index);
241
+ return (minDate.isValid() && monthDate.isBefore(minDate, 'month')) ||
242
+ (maxDate.isValid() && monthDate.isAfter(maxDate, 'month'));
243
+ });
244
+ this.disabledYears = this.availableYears.map((year) => {
245
+ const yearDate = this.parseZoneInstance().year(year);
246
+ return (minDate.isValid() && yearDate.isBefore(minDate, 'year')) ||
247
+ (maxDate.isValid() && yearDate.isAfter(maxDate, 'year'));
248
+ });
249
+ if (this.isSelectingYear) {
250
+ this.isPreviousMonthDisabled = minDate.isValid() && ((this.selectedYear - 6) <= minDate.year());
251
+ this.isNextMonthDisabled = maxDate.isValid() && ((this.selectedYear + 5) >= maxDate.year());
128
252
  }
129
- else if (direction === "PREVIOUS") {
130
- thisMonth = thisMonth.subtract(1, "month");
253
+ }
254
+ get yearRange() {
255
+ return `${this.selectedYear - 6} - ${this.selectedYear + 5}`;
256
+ }
257
+ navigateView(direction) {
258
+ if ((direction === 'NEXT' && (this.isNextMonthDisabled || this.isSelectingMonth)) ||
259
+ (direction === 'PREVIOUS' && (this.isPreviousMonthDisabled || this.isSelectingMonth))) {
260
+ return;
261
+ }
262
+ if (this.isSelectingYear) {
263
+ this.selectedYear += direction === "NEXT" ? 12 : -12;
264
+ this.availableYears = Array.from({ length: 12 }, (_, index) => this.selectedYear - 6 + index);
265
+ }
266
+ else {
267
+ let thisMonth = dayjs().year(this.currentYearNumber).month(this.currentMonthNumber);
268
+ thisMonth = direction === "NEXT" ? thisMonth.add(1, "month") : thisMonth.subtract(1, "month");
269
+ this.currentMonthNumber = thisMonth.month();
270
+ this.currentMonth = getMonth(this.currentMonthNumber);
271
+ this.selectedYear = this.currentYearNumber = thisMonth.year();
272
+ this.currentMonthDates = this.generateDates(this.currentMonthNumber, this.currentYearNumber);
131
273
  }
132
- this.currentMonthNumber = thisMonth.month();
133
- this.currentMonth = getMonth(this.currentMonthNumber);
134
- this.currentYearNumber = thisMonth.year();
135
- this.currentMonthDates = this.generateDates(this.currentMonthNumber, this.currentYearNumber);
136
274
  this.calculateMinMaxDays();
275
+ this.calculateDisabledMonthsAndYears();
137
276
  }
138
277
  generateDates(month, currentYearNumber) {
139
278
  let dates = [];
140
- const daysInMonth = parseZone().year(currentYearNumber).month(month).daysInMonth();
279
+ const daysInMonth = dayjs().year(currentYearNumber).month(month).daysInMonth();
141
280
  for (let currentDate = 1; currentDate <= daysInMonth; currentDate++) {
142
281
  const date = this.parseZoneInstance().year(currentYearNumber).month(month).date(currentDate);
143
282
  const dateString = date.format(this.data.dpConfig.format);
144
283
  let isDisabledDay = this.data.datesDisabled.some(d => d === dateString);
145
- const minDate = this.parseZoneInstance(this.data.dpConfig.minDate, this.data.dpConfig.format);
284
+ const minDate = !!this.data.dpConfig.minDate ? this.parseZoneInstance(this.data.dpConfig.minDate, this.data.dpConfig.format) : dayjs('invalid');
146
285
  if (!isDisabledDay && minDate.isValid()) {
147
286
  isDisabledDay = minDate.isAfter(date, "day");
148
287
  }
149
- const maxDate = this.parseZoneInstance(this.data.dpConfig.maxDate, this.data.dpConfig.format);
288
+ const maxDate = !!this.data.dpConfig.maxDate ? this.parseZoneInstance(this.data.dpConfig.maxDate, this.data.dpConfig.format) : dayjs('invalid');
150
289
  if (!isDisabledDay && maxDate.isValid()) {
151
290
  isDisabledDay = maxDate.isBefore(date, "day");
152
291
  }
@@ -167,8 +306,8 @@ export class TzDpContainerComponent {
167
306
  }
168
307
  selectDay(day) {
169
308
  this.currentSelection = this.parseZoneInstance().year(this.currentYearNumber).month(this.currentMonthNumber).date(day.date);
170
- const maxDate = this.parseZoneInstance(this.data.dpConfig.maxDate).endOf("day");
171
- const minDate = this.parseZoneInstance(this.data.dpConfig.minDate).startOf("day");
309
+ const maxDate = !!this.data.dpConfig.maxDate ? this.parseZoneInstance(this.data.dpConfig.maxDate).endOf("day") : dayjs('invalid');
310
+ const minDate = !!this.data.dpConfig.maxDate ? this.parseZoneInstance(this.data.dpConfig.minDate).startOf("day") : dayjs('invalid');
172
311
  this.allowBookingOnDisabledDay = this.data.allowBookingOnDisabledDay;
173
312
  if (day.date <= 0)
174
313
  return;
@@ -184,7 +323,7 @@ export class TzDpContainerComponent {
184
323
  }
185
324
  applyDate(day) {
186
325
  if (day || this.localSelectedDate) {
187
- this.data.dateChange(parseZone()
326
+ this.data.dateChange(dayjs()
188
327
  .year(this.currentYearNumber)
189
328
  .month(this.currentMonthNumber)
190
329
  .date(day ? day.date : this.localSelectedDate.date)
@@ -200,56 +339,103 @@ export class TzDpContainerComponent {
200
339
  cancelDatePicker() {
201
340
  this.data.dateChange("");
202
341
  }
342
+ toggleMonthSelector() {
343
+ if (this.isYearSelectionFlow)
344
+ return;
345
+ this.isSelectingMonth = !this.isSelectingMonth;
346
+ this.isSelectingYear = false;
347
+ this.calculateDisabledMonthsAndYears();
348
+ }
349
+ toggleYearSelector() {
350
+ this.isSelectingYear = !this.isSelectingYear;
351
+ this.selectedYear = this.currentYearNumber;
352
+ this.availableYears = Array.from({ length: 12 }, (_, index) => this.selectedYear - 6 + index);
353
+ this.isSelectingMonth = false;
354
+ this.calculateDisabledMonthsAndYears();
355
+ }
356
+ resetDateSelection() {
357
+ this.localSelectedDate = {
358
+ date: 0,
359
+ weekDay: 0,
360
+ isCurrentDay: false,
361
+ isSelectedDay: false,
362
+ isDisabledDay: false,
363
+ toastMessage: ''
364
+ };
365
+ this.data.date = '';
366
+ }
367
+ selectMonth(month) {
368
+ this.currentMonthNumber = this.availableMonths.indexOf(month);
369
+ this.currentMonth = getMonth(this.currentMonthNumber);
370
+ this.isSelectingMonth = false;
371
+ this.isYearSelectionFlow = false;
372
+ this.resetDateSelection();
373
+ this.currentMonthDates = this.generateDates(this.currentMonthNumber, this.currentYearNumber);
374
+ this.calculateMinMaxDays();
375
+ }
376
+ selectYear(year) {
377
+ this.selectedYear = this.currentYearNumber = year;
378
+ this.isSelectingYear = false;
379
+ this.isSelectingMonth = true;
380
+ this.isYearSelectionFlow = true;
381
+ this.resetDateSelection();
382
+ this.calculateDisabledMonthsAndYears();
383
+ }
203
384
  }
204
385
  TzDpContainerComponent.ɵfac = function TzDpContainerComponent_Factory(t) { return new (t || TzDpContainerComponent)(i0.ɵɵdirectiveInject(CONTAINER_DATA), i0.ɵɵdirectiveInject(i1.ToastService)); };
205
386
  TzDpContainerComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TzDpContainerComponent, selectors: [["mis-tz-dp"]], hostBindings: function TzDpContainerComponent_HostBindings(rf, ctx) { if (rf & 1) {
206
387
  i0.ɵɵlistener("keydown.esc", function TzDpContainerComponent_keydown_esc_HostBindingHandler() { return ctx.closeOnEsc(); });
207
- } }, decls: 17, vars: 13, consts: [["aria-label", "date picker", "cdkTrapFocus", "", 1, "datepicker-container", 3, "ngClass", "cdkTrapFocusAutoCapture"], ["tabindex", "-1", "cdkFocusInitial", ""], [1, "datepicker-container__header"], ["tabindex", "0", "aria-label", "Previous Month", 1, "datepicker-container__arrow__icon", 3, "ngClass", "click", "keyup.enter"], ["width", "20", "height", "16", "viewBox", "0 0 20 16", "fill", "none", "xmlns", "http://www.w3.org/2000/svg"], ["d", "M19.7071 8.70711C20.0976 8.31658 20.0976 7.68342 19.7071 7.29289L13.3431 0.928933C12.9526 0.538409 12.3195 0.538409 11.9289 0.928933C11.5384 1.31946 11.5384 1.95262 11.9289 2.34315L17.5858 8L11.9289 13.6569C11.5384 14.0474 11.5384 14.6805 11.9289 15.0711C12.3195 15.4616 12.9526 15.4616 13.3431 15.0711L19.7071 8.70711ZM-8.74228e-08 9L19 9L19 7L8.74228e-08 7L-8.74228e-08 9Z", "fill", "#181F33"], ["tabindex", "0", "aria-label", "Next Month", 1, "datepicker-container__arrow__icon", 3, "ngClass", "click", "keyup.enter"], [1, "datepicker-container__body"], [1, "datepicker-container__weekdays"], ["class", "datepicker-container__weekday", 4, "ngFor", "ngForOf"], [1, "datepicker-container__days"], ["class", "datepicker-container__day", 3, "ngClass", "click", "keyup.enter", 4, "ngFor", "ngForOf"], ["class", "datepicker-container__footer", 4, "ngIf"], [1, "datepicker-container__weekday"], [3, "ngClass"], [1, "datepicker-container__day", 3, "ngClass", "click", "keyup.enter"], [3, "tabindex", "ngClass", 4, "ngIf"], [3, "tabindex", "ngClass"], [1, "datepicker-container__footer"], ["mis-button", "", "size", "md", "type", "'none'", 3, "click"], ["mis-button", "", "size", "md", "type", "primary", 3, "disabled", "click"]], template: function TzDpContainerComponent_Template(rf, ctx) { if (rf & 1) {
388
+ } }, decls: 17, vars: 15, consts: [["aria-label", "date picker", "cdkTrapFocus", "", 1, "datepicker-container", 3, "ngClass", "cdkTrapFocusAutoCapture"], ["tabindex", "-1", "cdkFocusInitial", ""], [1, "datepicker-container__header"], ["tabindex", "0", "aria-label", "Previous Month", 1, "datepicker-container__arrow__icon", 3, "ngClass", "click", "keyup.enter"], ["width", "20", "height", "16", "viewBox", "0 0 20 16", "fill", "none", "xmlns", "http://www.w3.org/2000/svg"], ["d", "M19.7071 8.70711C20.0976 8.31658 20.0976 7.68342 19.7071 7.29289L13.3431 0.928933C12.9526 0.538409 12.3195 0.538409 11.9289 0.928933C11.5384 1.31946 11.5384 1.95262 11.9289 2.34315L17.5858 8L11.9289 13.6569C11.5384 14.0474 11.5384 14.6805 11.9289 15.0711C12.3195 15.4616 12.9526 15.4616 13.3431 15.0711L19.7071 8.70711ZM-8.74228e-08 9L19 9L19 7L8.74228e-08 7L-8.74228e-08 9Z", "fill", "#181F33"], ["class", "month-header", 3, "click", 4, "ngIf"], ["class", "year-header", 3, "click", 4, "ngIf"], ["tabindex", "0", "aria-label", "Next Month", 1, "datepicker-container__arrow__icon", 3, "ngClass", "click", "keyup.enter"], [1, "datepicker-container__body"], ["class", "month-selector", 4, "ngIf"], ["class", "year-selector", 4, "ngIf"], ["class", "datepicker-container__weekdays", 4, "ngIf"], ["class", "datepicker-container__days", 4, "ngIf"], ["class", "datepicker-container__footer", 4, "ngIf"], [1, "month-header", 3, "click"], [1, "year-header", 3, "click"], [1, "month-selector"], [1, "row"], ["class", "month", 3, "ngClass", "click", 4, "ngFor", "ngForOf"], [1, "month", 3, "ngClass", "click"], [1, "year-selector"], ["class", "year", 3, "ngClass", "click", 4, "ngFor", "ngForOf"], [1, "year", 3, "ngClass", "click"], [1, "datepicker-container__weekdays"], ["class", "datepicker-container__weekday", 4, "ngFor", "ngForOf"], [1, "datepicker-container__weekday"], [3, "ngClass"], [1, "datepicker-container__days"], ["class", "datepicker-container__day", 3, "ngClass", "click", "keyup.enter", 4, "ngFor", "ngForOf"], [1, "datepicker-container__day", 3, "ngClass", "click", "keyup.enter"], [3, "tabindex", "ngClass", 4, "ngIf"], [3, "tabindex", "ngClass"], [1, "datepicker-container__footer"], ["mis-button", "", "size", "md", "type", "'none'", 3, "click"], ["mis-button", "", "size", "md", "type", "primary", 3, "disabled", "click"]], template: function TzDpContainerComponent_Template(rf, ctx) { if (rf & 1) {
208
389
  i0.ɵɵelementStart(0, "div", 0);
209
390
  i0.ɵɵelement(1, "div", 1);
210
391
  i0.ɵɵelementStart(2, "div", 2)(3, "div", 3);
211
- i0.ɵɵlistener("click", function TzDpContainerComponent_Template_div_click_3_listener() { return !ctx.isPreviousMonthDisabled && ctx.navigateMonth("PREVIOUS"); })("keyup.enter", function TzDpContainerComponent_Template_div_keyup_enter_3_listener() { return !ctx.isPreviousMonthDisabled && ctx.navigateMonth("PREVIOUS"); });
392
+ i0.ɵɵlistener("click", function TzDpContainerComponent_Template_div_click_3_listener() { return ctx.navigateView("PREVIOUS"); })("keyup.enter", function TzDpContainerComponent_Template_div_keyup_enter_3_listener() { return ctx.navigateView("PREVIOUS"); });
212
393
  i0.ɵɵnamespaceSVG();
213
394
  i0.ɵɵelementStart(4, "svg", 4);
214
395
  i0.ɵɵelement(5, "path", 5);
215
396
  i0.ɵɵelementEnd()();
397
+ i0.ɵɵtemplate(6, TzDpContainerComponent_div_6_Template, 2, 1, "div", 6);
398
+ i0.ɵɵtemplate(7, TzDpContainerComponent_div_7_Template, 2, 1, "div", 7);
216
399
  i0.ɵɵnamespaceHTML();
217
- i0.ɵɵelementStart(6, "span");
218
- i0.ɵɵtext(7);
219
- i0.ɵɵelementEnd();
220
- i0.ɵɵelementStart(8, "div", 6);
221
- i0.ɵɵlistener("click", function TzDpContainerComponent_Template_div_click_8_listener() { return !ctx.isNextMonthDisabled && ctx.navigateMonth("NEXT"); })("keyup.enter", function TzDpContainerComponent_Template_div_keyup_enter_8_listener() { return !ctx.isNextMonthDisabled && ctx.navigateMonth("NEXT"); });
400
+ i0.ɵɵelementStart(8, "div", 8);
401
+ i0.ɵɵlistener("click", function TzDpContainerComponent_Template_div_click_8_listener() { return ctx.navigateView("NEXT"); })("keyup.enter", function TzDpContainerComponent_Template_div_keyup_enter_8_listener() { return ctx.navigateView("NEXT"); });
222
402
  i0.ɵɵnamespaceSVG();
223
403
  i0.ɵɵelementStart(9, "svg", 4);
224
404
  i0.ɵɵelement(10, "path", 5);
225
405
  i0.ɵɵelementEnd()()();
226
406
  i0.ɵɵnamespaceHTML();
227
- i0.ɵɵelementStart(11, "div", 7)(12, "div", 8);
228
- i0.ɵɵtemplate(13, TzDpContainerComponent_div_13_Template, 3, 4, "div", 9);
407
+ i0.ɵɵelementStart(11, "div", 9);
408
+ i0.ɵɵtemplate(12, TzDpContainerComponent_div_12_Template, 3, 1, "div", 10);
409
+ i0.ɵɵtemplate(13, TzDpContainerComponent_div_13_Template, 3, 1, "div", 11);
410
+ i0.ɵɵtemplate(14, TzDpContainerComponent_div_14_Template, 2, 1, "div", 12);
411
+ i0.ɵɵtemplate(15, TzDpContainerComponent_div_15_Template, 2, 1, "div", 13);
229
412
  i0.ɵɵelementEnd();
230
- i0.ɵɵelementStart(14, "div", 10);
231
- i0.ɵɵtemplate(15, TzDpContainerComponent_div_15_Template, 2, 6, "div", 11);
232
- i0.ɵɵelementEnd()();
233
- i0.ɵɵtemplate(16, TzDpContainerComponent_div_16_Template, 5, 1, "div", 12);
413
+ i0.ɵɵtemplate(16, TzDpContainerComponent_div_16_Template, 5, 1, "div", 14);
234
414
  i0.ɵɵelementEnd();
235
415
  } if (rf & 2) {
236
416
  i0.ɵɵproperty("ngClass", ctx.data.disableBoxShadow ? "remove-box-shadow" : "")("cdkTrapFocusAutoCapture", true);
237
417
  i0.ɵɵadvance(3);
238
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(9, _c3, ctx.isPreviousMonthDisabled));
418
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(11, _c5, ctx.isPreviousMonthDisabled || ctx.isSelectingMonth));
419
+ i0.ɵɵadvance(3);
420
+ i0.ɵɵproperty("ngIf", !ctx.isSelectingYear);
421
+ i0.ɵɵadvance(1);
422
+ i0.ɵɵproperty("ngIf", !ctx.isSelectingMonth);
423
+ i0.ɵɵadvance(1);
424
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(13, _c5, ctx.isNextMonthDisabled || ctx.isSelectingMonth));
239
425
  i0.ɵɵadvance(4);
240
- i0.ɵɵtextInterpolate2(" ", ctx.currentMonth, " ", ctx.currentYearNumber, " ");
426
+ i0.ɵɵproperty("ngIf", ctx.isSelectingMonth && !ctx.isSelectingYear);
427
+ i0.ɵɵadvance(1);
428
+ i0.ɵɵproperty("ngIf", ctx.isSelectingYear && !ctx.isSelectingMonth);
429
+ i0.ɵɵadvance(1);
430
+ i0.ɵɵproperty("ngIf", !ctx.isSelectingMonth && !ctx.isSelectingYear);
241
431
  i0.ɵɵadvance(1);
242
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(11, _c3, ctx.isNextMonthDisabled));
243
- i0.ɵɵadvance(5);
244
- i0.ɵɵproperty("ngForOf", ctx.weekDays);
245
- i0.ɵɵadvance(2);
246
- i0.ɵɵproperty("ngForOf", ctx.currentMonthDates);
432
+ i0.ɵɵproperty("ngIf", !ctx.isSelectingMonth && !ctx.isSelectingYear);
247
433
  i0.ɵɵadvance(1);
248
434
  i0.ɵɵproperty("ngIf", ctx.data.dpConfig.showApplyButton);
249
- } }, dependencies: [i2.NgClass, i2.NgForOf, i2.NgIf, i3.ButtonDirective, i4.CdkTrapFocus], styles: [".datepicker-container[_ngcontent-%COMP%]{background:#ffffff;border:1px solid #e0e0e0;box-shadow:0 12px 24px #0000001f,0 4px 8px #0000001f;border-radius:12px;display:flex;flex-direction:column;font-family:Lato;-webkit-user-select:none;user-select:none;box-sizing:border-box;width:290px}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__header[_ngcontent-%COMP%]{display:flex;height:32px;margin:16px;justify-content:space-between;align-items:center;width:258px}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__header[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:16px;font-style:normal;font-weight:700;line-height:24px;letter-spacing:.2px;text-align:center}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__header[_ngcontent-%COMP%] .datepicker-container__arrow__icon[_ngcontent-%COMP%]{height:20px;width:20px;display:flex;align-items:center;justify-content:center;border-radius:4px;padding:4px}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__header[_ngcontent-%COMP%] .datepicker-container__arrow__icon.disabled-month[_ngcontent-%COMP%]{opacity:.5;cursor:not-allowed}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__header[_ngcontent-%COMP%] .datepicker-container__arrow__icon[_ngcontent-%COMP%]:not(.disabled-month):hover{cursor:pointer;background-color:#cbddfb}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__header[_ngcontent-%COMP%] .datepicker-container__arrow__icon[_ngcontent-%COMP%]:nth-child(1){transform:rotate(180deg)}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%]{width:258px;height:100%;margin:0 16px 16px}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .datepicker-container__weekdays[_ngcontent-%COMP%]{width:100%;display:flex;padding-bottom:10px}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .datepicker-container__weekdays[_ngcontent-%COMP%] .datepicker-container__weekday[_ngcontent-%COMP%]{width:36px;height:18px;text-align:center}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .datepicker-container__weekdays[_ngcontent-%COMP%] .datepicker-container__weekday[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:12px;font-style:normal;font-weight:400;line-height:18px;letter-spacing:.2px;text-align:center;color:#c7c7c7}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .datepicker-container__weekdays[_ngcontent-%COMP%] .datepicker-container__weekday[_ngcontent-%COMP%] span.current-day[_ngcontent-%COMP%]{font-weight:700;letter-spacing:.25px;color:#181f33}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .datepicker-container__days[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:2px}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .datepicker-container__days[_ngcontent-%COMP%] .datepicker-container__day[_ngcontent-%COMP%]{width:34px;height:34px;display:flex;align-items:center;justify-content:center;border-radius:4px}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .datepicker-container__days[_ngcontent-%COMP%] .datepicker-container__day.selected-day[_ngcontent-%COMP%]{background-color:#0937b2;cursor:pointer}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .datepicker-container__days[_ngcontent-%COMP%] .datepicker-container__day.disabled-day[_ngcontent-%COMP%]{cursor:default}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .datepicker-container__days[_ngcontent-%COMP%] .datepicker-container__day.disabled-day[_ngcontent-%COMP%]:hover{background-color:transparent}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .datepicker-container__days[_ngcontent-%COMP%] .datepicker-container__day.is-valid-date[_ngcontent-%COMP%]:not(.disabled-day):not(.selected-day):hover{background-color:#cbddfb;cursor:pointer}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .datepicker-container__days[_ngcontent-%COMP%] .datepicker-container__day.is-valid-date[_ngcontent-%COMP%]:not(.disabled-day):not(.selected-day):hover span.selected-day[_ngcontent-%COMP%]{color:#181f33!important}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .datepicker-container__days[_ngcontent-%COMP%] .datepicker-container__day[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:.2px;text-align:center;color:#181f33}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .datepicker-container__days[_ngcontent-%COMP%] .datepicker-container__day[_ngcontent-%COMP%] span.current-day[_ngcontent-%COMP%]{font-weight:700;letter-spacing:.25px}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .datepicker-container__days[_ngcontent-%COMP%] .datepicker-container__day[_ngcontent-%COMP%] span.selected-day[_ngcontent-%COMP%]{color:#fff}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .datepicker-container__days[_ngcontent-%COMP%] .datepicker-container__day[_ngcontent-%COMP%] span.disabled-day[_ngcontent-%COMP%]{color:#c7c7c7}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__footer[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;gap:8px;bottom:0;align-items:center;position:sticky;padding:16px;border-top:1px solid #e0e0e0}.remove-box-shadow[_ngcontent-%COMP%]{box-shadow:none!important;border:none!important;border-radius:0!important}"] });
435
+ } }, dependencies: [i2.NgClass, i2.NgForOf, i2.NgIf, i3.ButtonDirective, i4.CdkTrapFocus], styles: [".h1[_ngcontent-%COMP%]{font-size:40px;font-weight:400;letter-spacing:0px;line-height:48px}.h2[_ngcontent-%COMP%]{font-size:32px;font-weight:400;letter-spacing:0px;line-height:40px}.h3[_ngcontent-%COMP%]{font-size:28px;font-weight:400;letter-spacing:0px;line-height:36px}.h4[_ngcontent-%COMP%]{font-size:24px;font-weight:400;letter-spacing:0px;line-height:32px}.h5-b[_ngcontent-%COMP%]{font-size:20px;font-weight:700;letter-spacing:.25px;line-height:28px}.h5[_ngcontent-%COMP%]{font-size:20px;font-weight:400;letter-spacing:.15px;line-height:28px}.h6-b[_ngcontent-%COMP%]{font-size:16px;font-weight:700;letter-spacing:0px;line-height:24px}.h6[_ngcontent-%COMP%]{font-size:16px;font-weight:400;letter-spacing:0px;line-height:24px}.p[_ngcontent-%COMP%]{font-size:16px;font-weight:400;letter-spacing:0px;line-height:180%}.h7-b[_ngcontent-%COMP%]{font-size:14px;font-weight:700;letter-spacing:.25px;line-height:20px}.h7[_ngcontent-%COMP%], .datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .month[_ngcontent-%COMP%], .datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .year[_ngcontent-%COMP%]{font-size:14px;font-weight:400;letter-spacing:.2px;line-height:20px}.h8-b[_ngcontent-%COMP%]{font-size:12px;font-weight:700;letter-spacing:.25px;line-height:18px}.h8[_ngcontent-%COMP%]{font-size:12px;font-weight:400;letter-spacing:.2px;line-height:18px}.h9[_ngcontent-%COMP%]{font-size:10px;font-weight:400;letter-spacing:0px;line-height:15px}.btn-lg-b[_ngcontent-%COMP%]{font-size:16px;font-weight:700;letter-spacing:.5px;line-height:24px}.btn-lg[_ngcontent-%COMP%]{font-size:16px;font-weight:400;letter-spacing:.2px;line-height:24px}.btn-sm[_ngcontent-%COMP%]{font-size:14px;font-weight:400;letter-spacing:.25px;line-height:20px}.btn-link[_ngcontent-%COMP%]{font-size:16px;font-weight:400;letter-spacing:0px;line-height:24px}.display-1[_ngcontent-%COMP%]{font-size:48px;font-weight:400;letter-spacing:0px;line-height:56px}.display-2[_ngcontent-%COMP%]{font-size:14px;font-weight:400;letter-spacing:.5px;line-height:20px}[_ngcontent-%COMP%]:root{--pmry-200: #99BAF7;--pmry-100: #CBDDFB;--pmry-500: #0937B2;--pmry-400: #3C68D0;--pmry-600: #062A99;--pmry-700: #041F80;--pmry-300: #638FE7;--pmry-800: #021567;--pmry-900: #010F55;--sec-d-purple: #40447F;--sec-maroon: #6B034E;--sec-mud-red: #B23600;--sec-orange: #ED711C;--sec-purple: #815FD5;--sec-teal: #10ADAE;--sec-yellow: #D4900C;--sec-green: #547F40;--sec-bright-green: #27D22E;--sec-dark-teal: #035F6B;--sec-chocolate: #7C2F33;--sec-rube-pink: #C13D6D;--sec-cerulean: #0087B2;--sem-error: #B00020;--sem-info: #0091FF;--sem-warning: #FF9D00;--sem-success: #38AF49;--grey-bg-1: #FAFAFA;--grey-bg: #F5F5F5;--grey-seperators: #E0E0E0;--grey-disabled: #C8CDD3;--grey-hover: #F5F7FC;--grey-pressed: #E6EBF7;--grey-row: #F5F7FC;--dec-light-yellow: #F4E7C3;--dec-light-purple: #DACFF9;--dec-light-green: #E4F5E9;--dec-light-green2: #F1FFF3;--dec-light-pink: #FAE1EA;--dec-: #F4CBC1;--dec-lt-orange: #FAEFED;--dec-light-blue: #CFECF9;--dec-row-selection: #F1FDF8;--dec-row-selection2: #F2FBFF;--dec-row-lines: #D3E1E9;--text-white: #FFFFFF;--text-disabled: #929DAB;--text-muted: #6A737D;--text-black: #181F33;--MR-solid-blue2:#C8D5F6;--MR-solid-purple:#C9C3FB;--MR-solid-orange:#EEAC9F;--MR-solid-green:#ACDADA;--MR-solid-brown:#E8C8AF;--MR-solid-yellow:#FFEFC7;--MR-solid-blue:#BBE6FF;--MR-solid-pink:#FFC6F2;--tr-hover:#F0F3FA;--tr-pressed:#DAE1F3}.datepicker-container[_ngcontent-%COMP%]{background:#ffffff;border:1px solid #e0e0e0;box-shadow:0 12px 24px #0000001f,0 4px 8px #0000001f;border-radius:12px;display:flex;flex-direction:column;font-family:Lato;-webkit-user-select:none;user-select:none;box-sizing:border-box;width:290px}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__header[_ngcontent-%COMP%]{display:flex;height:32px;margin:16px;justify-content:space-between;align-items:center;width:258px}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__header[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:16px;font-style:normal;font-weight:700;line-height:24px;letter-spacing:.2px;text-align:center}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__header[_ngcontent-%COMP%] .month-header[_ngcontent-%COMP%], .datepicker-container[_ngcontent-%COMP%] .datepicker-container__header[_ngcontent-%COMP%] .year-header[_ngcontent-%COMP%]{padding:8px;border-radius:10px}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__header[_ngcontent-%COMP%] .month-header[_ngcontent-%COMP%]:hover, .datepicker-container[_ngcontent-%COMP%] .datepicker-container__header[_ngcontent-%COMP%] .year-header[_ngcontent-%COMP%]:hover{cursor:pointer;background-color:#e6ebf7}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__header[_ngcontent-%COMP%] .datepicker-container__arrow__icon[_ngcontent-%COMP%]{height:20px;width:20px;display:flex;align-items:center;justify-content:center;border-radius:4px;padding:4px}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__header[_ngcontent-%COMP%] .datepicker-container__arrow__icon.disabled-month[_ngcontent-%COMP%]{opacity:.5;cursor:not-allowed}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__header[_ngcontent-%COMP%] .datepicker-container__arrow__icon[_ngcontent-%COMP%]:not(.disabled-month):hover{cursor:pointer;background-color:#cbddfb}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__header[_ngcontent-%COMP%] .datepicker-container__arrow__icon[_ngcontent-%COMP%]:nth-child(1){transform:rotate(180deg)}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%]{width:258px;height:100%;margin:0 16px 16px}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .row[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:10px}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .month[_ngcontent-%COMP%], .datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .year[_ngcontent-%COMP%]{padding:10px 6px;cursor:pointer;border-radius:5px;text-align:center;background-color:#fff}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .month[_ngcontent-%COMP%]:hover, .datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .year[_ngcontent-%COMP%]:hover{background-color:#cbddfb}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .disable-month[_ngcontent-%COMP%], .datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .disable-year[_ngcontent-%COMP%]{cursor:default;color:#c8cdd3}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .disable-month[_ngcontent-%COMP%]:hover, .datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .disable-year[_ngcontent-%COMP%]:hover{background-color:transparent}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .select-month[_ngcontent-%COMP%], .datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .select-year[_ngcontent-%COMP%]{background-color:#0937b2;color:#fff}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .select-month[_ngcontent-%COMP%]:hover, .datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .select-year[_ngcontent-%COMP%]:hover{cursor:pointer;background-color:#cbddfb}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .datepicker-container__weekdays[_ngcontent-%COMP%]{width:100%;display:flex;padding-bottom:10px}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .datepicker-container__weekdays[_ngcontent-%COMP%] .datepicker-container__weekday[_ngcontent-%COMP%]{width:36px;height:18px;text-align:center}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .datepicker-container__weekdays[_ngcontent-%COMP%] .datepicker-container__weekday[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:12px;font-style:normal;font-weight:400;line-height:18px;letter-spacing:.2px;text-align:center;color:#c7c7c7}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .datepicker-container__weekdays[_ngcontent-%COMP%] .datepicker-container__weekday[_ngcontent-%COMP%] span.current-day[_ngcontent-%COMP%]{font-weight:700;letter-spacing:.25px;color:#181f33}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .datepicker-container__days[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:2px}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .datepicker-container__days[_ngcontent-%COMP%] .datepicker-container__day[_ngcontent-%COMP%]{width:34px;height:34px;display:flex;align-items:center;justify-content:center;border-radius:4px}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .datepicker-container__days[_ngcontent-%COMP%] .datepicker-container__day.selected-day[_ngcontent-%COMP%]{background-color:#0937b2;cursor:pointer}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .datepicker-container__days[_ngcontent-%COMP%] .datepicker-container__day.disabled-day[_ngcontent-%COMP%]{cursor:default}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .datepicker-container__days[_ngcontent-%COMP%] .datepicker-container__day.disabled-day[_ngcontent-%COMP%]:hover{background-color:transparent}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .datepicker-container__days[_ngcontent-%COMP%] .datepicker-container__day.is-valid-date[_ngcontent-%COMP%]:not(.disabled-day):not(.selected-day):hover{background-color:#cbddfb;cursor:pointer}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .datepicker-container__days[_ngcontent-%COMP%] .datepicker-container__day.is-valid-date[_ngcontent-%COMP%]:not(.disabled-day):not(.selected-day):hover span.selected-day[_ngcontent-%COMP%]{color:#181f33!important}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .datepicker-container__days[_ngcontent-%COMP%] .datepicker-container__day[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:.2px;text-align:center;color:#181f33}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .datepicker-container__days[_ngcontent-%COMP%] .datepicker-container__day[_ngcontent-%COMP%] span.current-day[_ngcontent-%COMP%]{font-weight:700;letter-spacing:.25px}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .datepicker-container__days[_ngcontent-%COMP%] .datepicker-container__day[_ngcontent-%COMP%] span.selected-day[_ngcontent-%COMP%]{color:#fff}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__body[_ngcontent-%COMP%] .datepicker-container__days[_ngcontent-%COMP%] .datepicker-container__day[_ngcontent-%COMP%] span.disabled-day[_ngcontent-%COMP%]{color:#c7c7c7}.datepicker-container[_ngcontent-%COMP%] .datepicker-container__footer[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;gap:8px;bottom:0;align-items:center;position:sticky;padding:16px;border-top:1px solid #e0e0e0}.remove-box-shadow[_ngcontent-%COMP%]{box-shadow:none!important;border:none!important;border-radius:0!important}"] });
250
436
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TzDpContainerComponent, [{
251
437
  type: Component,
252
- args: [{ selector: "mis-tz-dp", template: "<div class=\"datepicker-container\" [ngClass]=\"data.disableBoxShadow?'remove-box-shadow':''\" aria-label=\"date picker\" cdkTrapFocus [cdkTrapFocusAutoCapture]=\"true\">\n <div tabindex=\"-1\" cdkFocusInitial></div>\n <div class=\"datepicker-container__header\">\n <div\n class=\"datepicker-container__arrow__icon\"\n (click)=\"!isPreviousMonthDisabled && navigateMonth('PREVIOUS')\"\n tabindex=\"0\"\n aria-label=\"Previous Month\"\n (keyup.enter)=\"!isPreviousMonthDisabled && navigateMonth('PREVIOUS')\"\n [ngClass]=\"{\n 'disabled-month': isPreviousMonthDisabled\n }\"\n >\n <svg width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M19.7071 8.70711C20.0976 8.31658 20.0976 7.68342 19.7071 7.29289L13.3431 0.928933C12.9526 0.538409 12.3195 0.538409 11.9289 0.928933C11.5384 1.31946 11.5384 1.95262 11.9289 2.34315L17.5858 8L11.9289 13.6569C11.5384 14.0474 11.5384 14.6805 11.9289 15.0711C12.3195 15.4616 12.9526 15.4616 13.3431 15.0711L19.7071 8.70711ZM-8.74228e-08 9L19 9L19 7L8.74228e-08 7L-8.74228e-08 9Z\"\n fill=\"#181F33\"\n ></path>\n </svg>\n </div>\n <span> {{ currentMonth }} {{ currentYearNumber }} </span>\n <div\n class=\"datepicker-container__arrow__icon\"\n (click)=\"!isNextMonthDisabled && navigateMonth('NEXT')\"\n tabindex=\"0\"\n aria-label=\"Next Month\"\n (keyup.enter)=\"!isNextMonthDisabled && navigateMonth('NEXT')\"\n [ngClass]=\"{\n 'disabled-month': isNextMonthDisabled\n }\"\n >\n <svg width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M19.7071 8.70711C20.0976 8.31658 20.0976 7.68342 19.7071 7.29289L13.3431 0.928933C12.9526 0.538409 12.3195 0.538409 11.9289 0.928933C11.5384 1.31946 11.5384 1.95262 11.9289 2.34315L17.5858 8L11.9289 13.6569C11.5384 14.0474 11.5384 14.6805 11.9289 15.0711C12.3195 15.4616 12.9526 15.4616 13.3431 15.0711L19.7071 8.70711ZM-8.74228e-08 9L19 9L19 7L8.74228e-08 7L-8.74228e-08 9Z\"\n fill=\"#181F33\"\n ></path>\n </svg>\n </div>\n </div>\n <div class=\"datepicker-container__body\">\n <div class=\"datepicker-container__weekdays\">\n <div class=\"datepicker-container__weekday\" *ngFor=\"let weekDay of weekDays\">\n <span [ngClass]=\"{ 'current-day': weekDay.isCurrentDay }\">{{ weekDay.label }}</span>\n </div>\n </div>\n <div class=\"datepicker-container__days\">\n <div\n class=\"datepicker-container__day\"\n [ngClass]=\"{\n 'selected-day': !localSelectedDate ? day.isSelectedDay : day === localSelectedDate,\n 'disabled-day': day.isDisabledDay,\n 'is-valid-date': day.date > 0 && !day.isSelectedDay\n }\"\n *ngFor=\"let day of currentMonthDates\"\n (click)=\"selectDay(day)\"\n (keyup.enter)=\"selectDay(day)\"\n >\n <span\n *ngIf=\"day.date > 0\"\n [tabindex]=\"day.isDisabledDay ? -1 : 0\"\n [ngClass]=\"{\n 'current-day': day.isCurrentDay,\n 'selected-day': !localSelectedDate ? day.isSelectedDay : day === localSelectedDate,\n 'disabled-day': day.isDisabledDay\n }\"\n [attr.aria-label]=\"retractDayMonth(day.date, currentMonth, currentYearNumber)\"\n >\n {{ day.date }}\n </span>\n </div>\n </div>\n </div>\n <div class=\"datepicker-container__footer\" *ngIf=\"data.dpConfig.showApplyButton\">\n <button mis-button size=\"md\" type=\"'none'\" (click)=\"cancelDatePicker()\">Cancel</button>\n <button mis-button size=\"md\" type=\"primary\" (click)=\"applyDate()\" [disabled]=\"!(data.date || localSelectedDate)\">Apply</button>\n </div>\n</div>\n", styles: [".datepicker-container{background:#ffffff;border:1px solid #e0e0e0;box-shadow:0 12px 24px #0000001f,0 4px 8px #0000001f;border-radius:12px;display:flex;flex-direction:column;font-family:Lato;-webkit-user-select:none;user-select:none;box-sizing:border-box;width:290px}.datepicker-container .datepicker-container__header{display:flex;height:32px;margin:16px;justify-content:space-between;align-items:center;width:258px}.datepicker-container .datepicker-container__header span{font-size:16px;font-style:normal;font-weight:700;line-height:24px;letter-spacing:.2px;text-align:center}.datepicker-container .datepicker-container__header .datepicker-container__arrow__icon{height:20px;width:20px;display:flex;align-items:center;justify-content:center;border-radius:4px;padding:4px}.datepicker-container .datepicker-container__header .datepicker-container__arrow__icon.disabled-month{opacity:.5;cursor:not-allowed}.datepicker-container .datepicker-container__header .datepicker-container__arrow__icon:not(.disabled-month):hover{cursor:pointer;background-color:#cbddfb}.datepicker-container .datepicker-container__header .datepicker-container__arrow__icon:nth-child(1){transform:rotate(180deg)}.datepicker-container .datepicker-container__body{width:258px;height:100%;margin:0 16px 16px}.datepicker-container .datepicker-container__body .datepicker-container__weekdays{width:100%;display:flex;padding-bottom:10px}.datepicker-container .datepicker-container__body .datepicker-container__weekdays .datepicker-container__weekday{width:36px;height:18px;text-align:center}.datepicker-container .datepicker-container__body .datepicker-container__weekdays .datepicker-container__weekday span{font-size:12px;font-style:normal;font-weight:400;line-height:18px;letter-spacing:.2px;text-align:center;color:#c7c7c7}.datepicker-container .datepicker-container__body .datepicker-container__weekdays .datepicker-container__weekday span.current-day{font-weight:700;letter-spacing:.25px;color:#181f33}.datepicker-container .datepicker-container__body .datepicker-container__days{display:flex;flex-wrap:wrap;gap:2px}.datepicker-container .datepicker-container__body .datepicker-container__days .datepicker-container__day{width:34px;height:34px;display:flex;align-items:center;justify-content:center;border-radius:4px}.datepicker-container .datepicker-container__body .datepicker-container__days .datepicker-container__day.selected-day{background-color:#0937b2;cursor:pointer}.datepicker-container .datepicker-container__body .datepicker-container__days .datepicker-container__day.disabled-day{cursor:default}.datepicker-container .datepicker-container__body .datepicker-container__days .datepicker-container__day.disabled-day:hover{background-color:transparent}.datepicker-container .datepicker-container__body .datepicker-container__days .datepicker-container__day.is-valid-date:not(.disabled-day):not(.selected-day):hover{background-color:#cbddfb;cursor:pointer}.datepicker-container .datepicker-container__body .datepicker-container__days .datepicker-container__day.is-valid-date:not(.disabled-day):not(.selected-day):hover span.selected-day{color:#181f33!important}.datepicker-container .datepicker-container__body .datepicker-container__days .datepicker-container__day span{font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:.2px;text-align:center;color:#181f33}.datepicker-container .datepicker-container__body .datepicker-container__days .datepicker-container__day span.current-day{font-weight:700;letter-spacing:.25px}.datepicker-container .datepicker-container__body .datepicker-container__days .datepicker-container__day span.selected-day{color:#fff}.datepicker-container .datepicker-container__body .datepicker-container__days .datepicker-container__day span.disabled-day{color:#c7c7c7}.datepicker-container .datepicker-container__footer{display:flex;justify-content:flex-end;gap:8px;bottom:0;align-items:center;position:sticky;padding:16px;border-top:1px solid #e0e0e0}.remove-box-shadow{box-shadow:none!important;border:none!important;border-radius:0!important}\n"] }]
438
+ args: [{ selector: "mis-tz-dp", template: "<div class=\"datepicker-container\" [ngClass]=\"data.disableBoxShadow?'remove-box-shadow':''\" aria-label=\"date picker\" cdkTrapFocus [cdkTrapFocusAutoCapture]=\"true\">\n <div tabindex=\"-1\" cdkFocusInitial></div>\n <div class=\"datepicker-container__header\">\n <div\n class=\"datepicker-container__arrow__icon\"\n (click)=\"navigateView('PREVIOUS')\"\n tabindex=\"0\"\n aria-label=\"Previous Month\"\n (keyup.enter)=\"navigateView('PREVIOUS')\"\n [ngClass]=\"{\n 'disabled-month': isPreviousMonthDisabled || isSelectingMonth\n }\"\n >\n <svg width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M19.7071 8.70711C20.0976 8.31658 20.0976 7.68342 19.7071 7.29289L13.3431 0.928933C12.9526 0.538409 12.3195 0.538409 11.9289 0.928933C11.5384 1.31946 11.5384 1.95262 11.9289 2.34315L17.5858 8L11.9289 13.6569C11.5384 14.0474 11.5384 14.6805 11.9289 15.0711C12.3195 15.4616 12.9526 15.4616 13.3431 15.0711L19.7071 8.70711ZM-8.74228e-08 9L19 9L19 7L8.74228e-08 7L-8.74228e-08 9Z\"\n fill=\"#181F33\"\n ></path>\n </svg>\n </div>\n\n <div *ngIf=\"!isSelectingYear\" (click)=\"toggleMonthSelector()\" class=\"month-header\">\n {{ isYearSelectionFlow ? selectedYear : availableMonths[currentMonthNumber] }}\n </div>\n <div *ngIf=\"!isSelectingMonth\" (click)=\"toggleYearSelector()\" class=\"year-header\">\n {{ isSelectingYear ? yearRange : currentYearNumber }}\n </div>\n\n\n <div\n class=\"datepicker-container__arrow__icon\"\n (click)=\"navigateView('NEXT')\"\n tabindex=\"0\"\n aria-label=\"Next Month\"\n (keyup.enter)=\"navigateView('NEXT')\"\n [ngClass]=\"{\n 'disabled-month': isNextMonthDisabled || isSelectingMonth\n }\"\n >\n <svg width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M19.7071 8.70711C20.0976 8.31658 20.0976 7.68342 19.7071 7.29289L13.3431 0.928933C12.9526 0.538409 12.3195 0.538409 11.9289 0.928933C11.5384 1.31946 11.5384 1.95262 11.9289 2.34315L17.5858 8L11.9289 13.6569C11.5384 14.0474 11.5384 14.6805 11.9289 15.0711C12.3195 15.4616 12.9526 15.4616 13.3431 15.0711L19.7071 8.70711ZM-8.74228e-08 9L19 9L19 7L8.74228e-08 7L-8.74228e-08 9Z\"\n fill=\"#181F33\"\n ></path>\n </svg>\n </div>\n </div>\n <div class=\"datepicker-container__body\">\n\n <div *ngIf=\"isSelectingMonth && !isSelectingYear\" class=\"month-selector\">\n <div class=\"row\">\n <div *ngFor=\"let month of availableMonths; let i = index\" \n class=\"month\" \n (click)=\"!disabledMonths[i] && selectMonth(month)\" \n [ngClass]=\"{\n 'disable-month': disabledMonths[i],\n 'select-month': !disabledMonths[currentMonthNumber] && month === availableMonths[currentMonthNumber]\n }\">\n {{ month }}\n </div>\n </div>\n </div>\n \n <div *ngIf=\"isSelectingYear && !isSelectingMonth\" class=\"year-selector\">\n <div class=\"row\">\n <div *ngFor=\"let year of availableYears; let i = index\" \n class=\"year\" \n (click)=\"!disabledYears[i] && selectYear(year)\" \n [ngClass]=\"{\n 'disable-year': disabledYears[i],\n 'select-year': year === currentYearNumber\n }\">\n {{ year }}\n </div>\n </div>\n </div>\n\n <div *ngIf=\"!isSelectingMonth && !isSelectingYear\" class=\"datepicker-container__weekdays\">\n <div class=\"datepicker-container__weekday\" *ngFor=\"let weekDay of weekDays\">\n <span [ngClass]=\"{ 'current-day': weekDay.isCurrentDay }\">{{ weekDay.label }}</span>\n </div>\n </div>\n <div *ngIf=\"!isSelectingMonth && !isSelectingYear\" class=\"datepicker-container__days\">\n <div\n class=\"datepicker-container__day\"\n [ngClass]=\"{\n 'selected-day': !localSelectedDate ? day.isSelectedDay : day === localSelectedDate,\n 'disabled-day': day.isDisabledDay,\n 'is-valid-date': day.date > 0 && !day.isSelectedDay\n }\"\n *ngFor=\"let day of currentMonthDates\"\n (click)=\"selectDay(day)\"\n (keyup.enter)=\"selectDay(day)\"\n >\n <span\n *ngIf=\"day.date > 0\"\n [tabindex]=\"day.isDisabledDay ? -1 : 0\"\n [ngClass]=\"{\n 'current-day': day.isCurrentDay,\n 'selected-day': !localSelectedDate ? day.isSelectedDay : day === localSelectedDate,\n 'disabled-day': day.isDisabledDay\n }\"\n [attr.aria-label]=\"retractDayMonth(day.date, currentMonth, currentYearNumber)\"\n >\n {{ day.date }}\n </span>\n </div>\n </div>\n </div>\n <div class=\"datepicker-container__footer\" *ngIf=\"data.dpConfig.showApplyButton\">\n <button mis-button size=\"md\" type=\"'none'\" (click)=\"cancelDatePicker()\">Cancel</button>\n <button mis-button size=\"md\" type=\"primary\" (click)=\"applyDate()\" [disabled]=\"!(data.date || localSelectedDate.date)\">Apply</button>\n </div>\n</div>\n", styles: [".h1{font-size:40px;font-weight:400;letter-spacing:0px;line-height:48px}.h2{font-size:32px;font-weight:400;letter-spacing:0px;line-height:40px}.h3{font-size:28px;font-weight:400;letter-spacing:0px;line-height:36px}.h4{font-size:24px;font-weight:400;letter-spacing:0px;line-height:32px}.h5-b{font-size:20px;font-weight:700;letter-spacing:.25px;line-height:28px}.h5{font-size:20px;font-weight:400;letter-spacing:.15px;line-height:28px}.h6-b{font-size:16px;font-weight:700;letter-spacing:0px;line-height:24px}.h6{font-size:16px;font-weight:400;letter-spacing:0px;line-height:24px}.p{font-size:16px;font-weight:400;letter-spacing:0px;line-height:180%}.h7-b{font-size:14px;font-weight:700;letter-spacing:.25px;line-height:20px}.h7,.datepicker-container .datepicker-container__body .month,.datepicker-container .datepicker-container__body .year{font-size:14px;font-weight:400;letter-spacing:.2px;line-height:20px}.h8-b{font-size:12px;font-weight:700;letter-spacing:.25px;line-height:18px}.h8{font-size:12px;font-weight:400;letter-spacing:.2px;line-height:18px}.h9{font-size:10px;font-weight:400;letter-spacing:0px;line-height:15px}.btn-lg-b{font-size:16px;font-weight:700;letter-spacing:.5px;line-height:24px}.btn-lg{font-size:16px;font-weight:400;letter-spacing:.2px;line-height:24px}.btn-sm{font-size:14px;font-weight:400;letter-spacing:.25px;line-height:20px}.btn-link{font-size:16px;font-weight:400;letter-spacing:0px;line-height:24px}.display-1{font-size:48px;font-weight:400;letter-spacing:0px;line-height:56px}.display-2{font-size:14px;font-weight:400;letter-spacing:.5px;line-height:20px}:root{--pmry-200: #99BAF7;--pmry-100: #CBDDFB;--pmry-500: #0937B2;--pmry-400: #3C68D0;--pmry-600: #062A99;--pmry-700: #041F80;--pmry-300: #638FE7;--pmry-800: #021567;--pmry-900: #010F55;--sec-d-purple: #40447F;--sec-maroon: #6B034E;--sec-mud-red: #B23600;--sec-orange: #ED711C;--sec-purple: #815FD5;--sec-teal: #10ADAE;--sec-yellow: #D4900C;--sec-green: #547F40;--sec-bright-green: #27D22E;--sec-dark-teal: #035F6B;--sec-chocolate: #7C2F33;--sec-rube-pink: #C13D6D;--sec-cerulean: #0087B2;--sem-error: #B00020;--sem-info: #0091FF;--sem-warning: #FF9D00;--sem-success: #38AF49;--grey-bg-1: #FAFAFA;--grey-bg: #F5F5F5;--grey-seperators: #E0E0E0;--grey-disabled: #C8CDD3;--grey-hover: #F5F7FC;--grey-pressed: #E6EBF7;--grey-row: #F5F7FC;--dec-light-yellow: #F4E7C3;--dec-light-purple: #DACFF9;--dec-light-green: #E4F5E9;--dec-light-green2: #F1FFF3;--dec-light-pink: #FAE1EA;--dec-: #F4CBC1;--dec-lt-orange: #FAEFED;--dec-light-blue: #CFECF9;--dec-row-selection: #F1FDF8;--dec-row-selection2: #F2FBFF;--dec-row-lines: #D3E1E9;--text-white: #FFFFFF;--text-disabled: #929DAB;--text-muted: #6A737D;--text-black: #181F33;--MR-solid-blue2:#C8D5F6;--MR-solid-purple:#C9C3FB;--MR-solid-orange:#EEAC9F;--MR-solid-green:#ACDADA;--MR-solid-brown:#E8C8AF;--MR-solid-yellow:#FFEFC7;--MR-solid-blue:#BBE6FF;--MR-solid-pink:#FFC6F2;--tr-hover:#F0F3FA;--tr-pressed:#DAE1F3}.datepicker-container{background:#ffffff;border:1px solid #e0e0e0;box-shadow:0 12px 24px #0000001f,0 4px 8px #0000001f;border-radius:12px;display:flex;flex-direction:column;font-family:Lato;-webkit-user-select:none;user-select:none;box-sizing:border-box;width:290px}.datepicker-container .datepicker-container__header{display:flex;height:32px;margin:16px;justify-content:space-between;align-items:center;width:258px}.datepicker-container .datepicker-container__header span{font-size:16px;font-style:normal;font-weight:700;line-height:24px;letter-spacing:.2px;text-align:center}.datepicker-container .datepicker-container__header .month-header,.datepicker-container .datepicker-container__header .year-header{padding:8px;border-radius:10px}.datepicker-container .datepicker-container__header .month-header:hover,.datepicker-container .datepicker-container__header .year-header:hover{cursor:pointer;background-color:#e6ebf7}.datepicker-container .datepicker-container__header .datepicker-container__arrow__icon{height:20px;width:20px;display:flex;align-items:center;justify-content:center;border-radius:4px;padding:4px}.datepicker-container .datepicker-container__header .datepicker-container__arrow__icon.disabled-month{opacity:.5;cursor:not-allowed}.datepicker-container .datepicker-container__header .datepicker-container__arrow__icon:not(.disabled-month):hover{cursor:pointer;background-color:#cbddfb}.datepicker-container .datepicker-container__header .datepicker-container__arrow__icon:nth-child(1){transform:rotate(180deg)}.datepicker-container .datepicker-container__body{width:258px;height:100%;margin:0 16px 16px}.datepicker-container .datepicker-container__body .row{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:10px}.datepicker-container .datepicker-container__body .month,.datepicker-container .datepicker-container__body .year{padding:10px 6px;cursor:pointer;border-radius:5px;text-align:center;background-color:#fff}.datepicker-container .datepicker-container__body .month:hover,.datepicker-container .datepicker-container__body .year:hover{background-color:#cbddfb}.datepicker-container .datepicker-container__body .disable-month,.datepicker-container .datepicker-container__body .disable-year{cursor:default;color:#c8cdd3}.datepicker-container .datepicker-container__body .disable-month:hover,.datepicker-container .datepicker-container__body .disable-year:hover{background-color:transparent}.datepicker-container .datepicker-container__body .select-month,.datepicker-container .datepicker-container__body .select-year{background-color:#0937b2;color:#fff}.datepicker-container .datepicker-container__body .select-month:hover,.datepicker-container .datepicker-container__body .select-year:hover{cursor:pointer;background-color:#cbddfb}.datepicker-container .datepicker-container__body .datepicker-container__weekdays{width:100%;display:flex;padding-bottom:10px}.datepicker-container .datepicker-container__body .datepicker-container__weekdays .datepicker-container__weekday{width:36px;height:18px;text-align:center}.datepicker-container .datepicker-container__body .datepicker-container__weekdays .datepicker-container__weekday span{font-size:12px;font-style:normal;font-weight:400;line-height:18px;letter-spacing:.2px;text-align:center;color:#c7c7c7}.datepicker-container .datepicker-container__body .datepicker-container__weekdays .datepicker-container__weekday span.current-day{font-weight:700;letter-spacing:.25px;color:#181f33}.datepicker-container .datepicker-container__body .datepicker-container__days{display:flex;flex-wrap:wrap;gap:2px}.datepicker-container .datepicker-container__body .datepicker-container__days .datepicker-container__day{width:34px;height:34px;display:flex;align-items:center;justify-content:center;border-radius:4px}.datepicker-container .datepicker-container__body .datepicker-container__days .datepicker-container__day.selected-day{background-color:#0937b2;cursor:pointer}.datepicker-container .datepicker-container__body .datepicker-container__days .datepicker-container__day.disabled-day{cursor:default}.datepicker-container .datepicker-container__body .datepicker-container__days .datepicker-container__day.disabled-day:hover{background-color:transparent}.datepicker-container .datepicker-container__body .datepicker-container__days .datepicker-container__day.is-valid-date:not(.disabled-day):not(.selected-day):hover{background-color:#cbddfb;cursor:pointer}.datepicker-container .datepicker-container__body .datepicker-container__days .datepicker-container__day.is-valid-date:not(.disabled-day):not(.selected-day):hover span.selected-day{color:#181f33!important}.datepicker-container .datepicker-container__body .datepicker-container__days .datepicker-container__day span{font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:.2px;text-align:center;color:#181f33}.datepicker-container .datepicker-container__body .datepicker-container__days .datepicker-container__day span.current-day{font-weight:700;letter-spacing:.25px}.datepicker-container .datepicker-container__body .datepicker-container__days .datepicker-container__day span.selected-day{color:#fff}.datepicker-container .datepicker-container__body .datepicker-container__days .datepicker-container__day span.disabled-day{color:#c7c7c7}.datepicker-container .datepicker-container__footer{display:flex;justify-content:flex-end;gap:8px;bottom:0;align-items:center;position:sticky;padding:16px;border-top:1px solid #e0e0e0}.remove-box-shadow{box-shadow:none!important;border:none!important;border-radius:0!important}\n"] }]
253
439
  }], function () { return [{ type: undefined, decorators: [{
254
440
  type: Inject,
255
441
  args: [CONTAINER_DATA]
@@ -257,4 +443,4 @@ TzDpContainerComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TzDp
257
443
  type: HostListener,
258
444
  args: ["keydown.esc"]
259
445
  }] }); })();
260
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHotZHAtY29udGFpbmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21pcy1jb21wb25lbnRzL2RhdGVwaWNrZXJfdjIvdHotZHAtY29udGFpbmVyL3R6LWRwLWNvbnRhaW5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9taXMtY29tcG9uZW50cy9kYXRlcGlja2VyX3YyL3R6LWRwLWNvbnRhaW5lci90ei1kcC1jb250YWluZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFdEUsT0FBZSxFQUFFLFNBQVMsRUFBVSxFQUFFLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDOzs7Ozs7OztJQ3FDOUIsK0JBQTRFLGVBQUE7SUFDaEIsWUFBbUI7SUFBQSxpQkFBTyxFQUFBOzs7SUFBOUUsZUFBbUQ7SUFBbkQsNkVBQW1EO0lBQUMsZUFBbUI7SUFBbkIsc0NBQW1COzs7O0lBZTdFLGdDQVNDO0lBQ0MsWUFDRjtJQUFBLGlCQUFPOzs7O0lBVEwsd0RBQXVDLDBLQUFBO0lBTXZDLGdIQUE4RTtJQUU5RSxlQUNGO0lBREUsNENBQ0Y7Ozs7O0lBdEJGLCtCQVVDO0lBRkMsMk5BQVMsZUFBQSx3QkFBYyxDQUFBLElBQUMsME5BQ1QsZUFBQSx3QkFBYyxDQUFBLElBREw7SUFHeEIsaUZBV087SUFDVCxpQkFBTTs7OztJQXJCSiw0TUFJRTtJQU1DLGVBQWtCO0lBQWxCLHNDQUFrQjs7OztJQWMzQiwrQkFBZ0YsaUJBQUE7SUFDbkMsc0tBQVMsZUFBQSwwQkFBa0IsQ0FBQSxJQUFD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QUFDLElBSEw7UUFRdkQsbUJBQStGO1FBQS9GLDhCQUErRjtRQUM3RiwyQkFHUTtRQUNWLGlCQUFNLEVBQUEsRUFBQTtRQUdWLG9CQUF3QztRQUF4QywrQkFBd0MsY0FBQTtRQUVwQyx5RUFFTTtRQUNSLGlCQUFNO1FBQ04sZ0NBQXdDO1FBQ3RDLDBFQXVCTTtRQUNSLGlCQUFNLEVBQUE7UUFFUiwwRUFHTTtRQUNSLGlCQUFNOztRQTVFNEIsOEVBQXdELGlDQUFBO1FBU3BGLGVBRUU7UUFGRixpRkFFRTtRQVNHLGVBQTJDO1FBQTNDLDZFQUEyQztRQU9oRCxlQUVFO1FBRkYsOEVBRUU7UUFZNkQsZUFBVztRQUFYLHNDQUFXO1FBWXhELGVBQW9CO1FBQXBCLCtDQUFvQjtRQW1CQyxlQUFtQztRQUFuQyx3REFBbUM7O3VGRDVEbkUsc0JBQXNCO2NBTGxDLFNBQVM7MkJBQ0UsV0FBVzs7c0JBcUJSLE1BQU07dUJBQUMsY0FBYzttREFxSWxDLFVBQVU7a0JBRFQsWUFBWTttQkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0TGlzdGVuZXIsIEluamVjdCwgT25Jbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENPTlRBSU5FUl9EQVRBLCBEQVRFX0ZPUk1BVCB9IGZyb20gXCIuLi9kYXRlcGlja2VyLWNvbnN0YW50c1wiO1xuaW1wb3J0IHsgSUN1cnJlbnRNb250aCwgSUN1cnJlbnRNb250aERhdGVzLCBJRGF0ZVBpY2tlckRhdGEsIElXZWVrRGF5IH0gZnJvbSBcIi4uL21vZGVscy9kcC1jb25maWcubW9kZWxcIjtcbmltcG9ydCBtb21lbnQsIHsgcGFyc2Vab25lLCBNb21lbnQsIHR6IH0gZnJvbSBcIm1vbWVudC10aW1lem9uZVwiO1xuaW1wb3J0IHsgZ2V0TW9udGggfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gXCJtaXMtY3J5c3RhbC1kZXNpZ24tc3lzdGVtL3RvYXN0XCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJtaXMtdHotZHBcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi90ei1kcC1jb250YWluZXIuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL3R6LWRwLWNvbnRhaW5lci5jb21wb25lbnQuc2Nzc1wiXVxufSlcbmV4cG9ydCBjbGFzcyBUekRwQ29udGFpbmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgZGF0YTogSURhdGVQaWNrZXJEYXRhO1xuICBwcml2YXRlIHBhcnNlWm9uZUluc3RhbmNlID0gKC4uLmFyZ3MpID0+IHtcbiAgICByZXR1cm4gcGFyc2Vab25lKC4uLmFyZ3MpO1xuICB9O1xuICBwcml2YXRlIHJhd1dlZWtEYXlzOiBzdHJpbmdbXSA9IFtcIlNVTlwiLCBcIk1PTlwiLCBcIlRVRVwiLCBcIldFRFwiLCBcIlRIVVwiLCBcIkZSSVwiLCBcIlNBVFwiXTtcbiAgd2Vla0RheXM6IElXZWVrRGF5W10gPSBbXTtcbiAgY3VycmVudE1vbnRoTnVtYmVyOiBudW1iZXI7XG4gIGN1cnJlbnRNb250aDogSUN1cnJlbnRNb250aDtcbiAgY3VycmVudFllYXJOdW1iZXI6IG51bWJlcjtcbiAgY3VycmVudE1vbnRoRGF0ZXM6IElDdXJyZW50TW9udGhEYXRlc1tdID0gW107XG4gIGlzUHJldmlvdXNNb250aERpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzTmV4dE1vbnRoRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgbG9jYWxTZWxlY3RlZERhdGU6IElDdXJyZW50TW9udGhEYXRlcztcbiAgYWxsb3dCb29raW5nT25EaXNhYmxlZERheTogYm9vbGVhbiA9IGZhbHNlO1xuICBjdXJyZW50U2VsZWN0aW9uOiBhbnk7XG5cbiAgY29uc3RydWN0b3IoQEluamVjdChDT05UQUlORVJfREFUQSkgZGF0YTogSURhdGVQaWNrZXJEYXRhLCBwcml2YXRlIHRvYXN0OiBUb2FzdFNlcnZpY2UpIHtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIGlmICh0aGlzLmRhdGE/LmRwQ29uZmlnPy50aW1lem9uZSkge1xuICAgICAgdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIHJldHVybiB0eihhcmdzWzBdLCBhcmdzWzFdLCB0aGlzLmRhdGEuZHBDb25maWcudGltZXpvbmUpO1xuICAgICAgfTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50TW9udGhOdW1iZXIgPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKCkubW9udGgoKTtcbiAgICB0aGlzLmN1cnJlbnRNb250aCA9IGdldE1vbnRoKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyKTtcbiAgICB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLnllYXIoKTtcbiAgICB0aGlzLndlZWtEYXlzID0gdGhpcy5yYXdXZWVrRGF5cy5tYXAoKGRheSwgaW5kZXgpID0+ICh7XG4gICAgICBsYWJlbDogYCR7ZGF5WzBdfSR7ZGF5LnNsaWNlKDEpLnRvTG93ZXJDYXNlKCl9YCxcbiAgICAgIGlzQ3VycmVudERheTogdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLmRheSgpID09PSBpbmRleFxuICAgIH0pKTtcbiAgICBpZiAoIXRoaXMuZGF0YT8uZHBDb25maWc/LmZvcm1hdCkge1xuICAgICAgdGhpcy5kYXRhLmRwQ29uZmlnID0ge1xuICAgICAgICAuLi50aGlzLmRhdGEuZHBDb25maWcsXG4gICAgICAgIGZvcm1hdDogREFURV9GT1JNQVRcbiAgICAgIH07XG4gICAgfVxuICB9XG5cblxuICByZXRyYWN0RGF5TW9udGgoZGF5OiBhbnksIG1vbnRoOiBhbnksIHllYXI6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIGAke2RheX0gJHttb250aH0gJHt5ZWFyfWA7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnREYXRlSW5zdGFuY2UoKTtcbiAgICB0aGlzLmNhbGN1bGF0ZU1pbk1heERheXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgY3VycmVudERhdGVJbnN0YW5jZSgpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZERhdGUgPSBwYXJzZVpvbmUodGhpcy5kYXRhLmRhdGUsIHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpO1xuICAgIGlmIChzZWxlY3RlZERhdGUuaXNWYWxpZCgpKSB7XG4gICAgICB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyID0gc2VsZWN0ZWREYXRlLnllYXIoKTtcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoTnVtYmVyID0gc2VsZWN0ZWREYXRlLm1vbnRoKCk7XG4gICAgICB0aGlzLmN1cnJlbnRNb250aCA9IGdldE1vbnRoKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyKTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLmN1cnJlbnRNb250aE51bWJlciwgdGhpcy5jdXJyZW50WWVhck51bWJlcik7XG4gIH1cblxuICBwcml2YXRlIGNhbGN1bGF0ZU1pbk1heERheXMoKSB7XG4gICAgY29uc3QgY3VycmVudEluc3RhbmNlID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLnllYXIodGhpcy5jdXJyZW50WWVhck51bWJlcikubW9udGgodGhpcy5jdXJyZW50TW9udGhOdW1iZXIpO1xuICAgIGNvbnN0IG1pbkRhdGUgPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKHRoaXMuZGF0YS5kcENvbmZpZy5taW5EYXRlLCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KTtcbiAgICBpZiAobWluRGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgIHRoaXMuaXNQcmV2aW91c01vbnRoRGlzYWJsZWQgPSBtaW5EYXRlLmlzU2FtZU9yQWZ0ZXIoY3VycmVudEluc3RhbmNlLCBcIm1vbnRoXCIpO1xuICAgIH1cbiAgICBjb25zdCBtYXhEYXRlID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSh0aGlzLmRhdGEuZHBDb25maWcubWF4RGF0ZSwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCk7XG4gICAgaWYgKG1heERhdGUuaXNWYWxpZCgpKSB7XG4gICAgICB0aGlzLmlzTmV4dE1vbnRoRGlzYWJsZWQgPSBtYXhEYXRlLmlzU2FtZU9yQmVmb3JlKGN1cnJlbnRJbnN0YW5jZSwgXCJtb250aFwiKTtcbiAgICB9XG4gIH1cblxuICBuYXZpZ2F0ZU1vbnRoKGRpcmVjdGlvbjogXCJORVhUXCIgfCBcIlBSRVZJT1VTXCIpOiB2b2lkIHtcbiAgICBsZXQgdGhpc01vbnRoOiBNb21lbnQgPSBwYXJzZVpvbmUoKS55ZWFyKHRoaXMuY3VycmVudFllYXJOdW1iZXIpLm1vbnRoKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyKTtcbiAgICBpZiAoZGlyZWN0aW9uID09PSBcIk5FWFRcIikge1xuICAgICAgdGhpc01vbnRoID0gdGhpc01vbnRoLmFkZCgxLCBcIm1vbnRoXCIpO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSBcIlBSRVZJT1VTXCIpIHtcbiAgICAgIHRoaXNNb250aCA9IHRoaXNNb250aC5zdWJ0cmFjdCgxLCBcIm1vbnRoXCIpO1xuICAgIH1cbiAgICB0aGlzLmN1cnJlbnRNb250aE51bWJlciA9IHRoaXNNb250aC5tb250aCgpO1xuICAgIHRoaXMuY3VycmVudE1vbnRoID0gZ2V0TW9udGgodGhpcy5jdXJyZW50TW9udGhOdW1iZXIpO1xuICAgIHRoaXMuY3VycmVudFllYXJOdW1iZXIgPSB0aGlzTW9udGgueWVhcigpO1xuICAgIHRoaXMuY3VycmVudE1vbnRoRGF0ZXMgPSB0aGlzLmdlbmVyYXRlRGF0ZXModGhpcy5jdXJyZW50TW9udGhOdW1iZXIsIHRoaXMuY3VycmVudFllYXJOdW1iZXIpO1xuICAgIHRoaXMuY2FsY3VsYXRlTWluTWF4RGF5cygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZURhdGVzKG1vbnRoOiBudW1iZXIsIGN1cnJlbnRZZWFyTnVtYmVyOiBudW1iZXIpOiBJQ3VycmVudE1vbnRoRGF0ZXNbXSB7XG4gICAgbGV0IGRhdGVzOiBJQ3VycmVudE1vbnRoRGF0ZXNbXSA9IFtdO1xuICAgIGNvbnN0IGRheXNJbk1vbnRoID0gcGFyc2Vab25lKCkueWVhcihjdXJyZW50WWVhck51bWJlcikubW9udGgobW9udGgpLmRheXNJbk1vbnRoKCk7XG4gICAgZm9yIChsZXQgY3VycmVudERhdGUgPSAxOyBjdXJyZW50RGF0ZSA8PSBkYXlzSW5Nb250aDsgY3VycmVudERhdGUrKykge1xuICAgICAgY29uc3QgZGF0ZSA9IHRoaXMucGFyc2Vab25lSW5zdGFuY2UoKS55ZWFyKGN1cnJlbnRZZWFyTnVtYmVyKS5tb250aChtb250aCkuZGF0ZShjdXJyZW50RGF0ZSk7XG4gICAgICBjb25zdCBkYXRlU3RyaW5nID0gZGF0ZS5mb3JtYXQodGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCk7XG4gICAgICBsZXQgaXNEaXNhYmxlZERheSA9IHRoaXMuZGF0YS5kYXRlc0Rpc2FibGVkLnNvbWUoZCA9PiBkID09PSBkYXRlU3RyaW5nKTtcbiAgICAgIGNvbnN0IG1pbkRhdGUgPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKHRoaXMuZGF0YS5kcENvbmZpZy5taW5EYXRlLCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KTtcbiAgICAgIGlmICghaXNEaXNhYmxlZERheSAmJiBtaW5EYXRlLmlzVmFsaWQoKSkge1xuICAgICAgICBpc0Rpc2FibGVkRGF5ID0gbWluRGF0ZS5pc0FmdGVyKGRhdGUsIFwiZGF5XCIpO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF4RGF0ZSA9IHRoaXMucGFyc2Vab25lSW5zdGFuY2UodGhpcy5kYXRhLmRwQ29uZmlnLm1heERhdGUsIHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgaWYgKCFpc0Rpc2FibGVkRGF5ICYmIG1heERhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgIGlzRGlzYWJsZWREYXkgPSBtYXhEYXRlLmlzQmVmb3JlKGRhdGUsIFwiZGF5XCIpO1xuICAgICAgfVxuICAgICAgZGF0ZXMucHVzaCh7XG4gICAgICAgIGRhdGU6IGN1cnJlbnREYXRlLFxuICAgICAgICB3ZWVrRGF5OiBkYXRlLmRheSgpLFxuICAgICAgICBpc0N1cnJlbnREYXk6XG4gICAgICAgICAgdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLnllYXIoY3VycmVudFllYXJOdW1iZXIpLm1vbnRoKG1vbnRoKS5kYXRlKGN1cnJlbnREYXRlKS5mb3JtYXQodGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCkgPT09XG4gICAgICAgICAgdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KSxcbiAgICAgICAgaXNTZWxlY3RlZERheTogIWlzRGlzYWJsZWREYXkgJiYgZGF0ZS5mb3JtYXQodGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCkgPT09IHRoaXMuZGF0YS5kYXRlLFxuICAgICAgICB0b2FzdE1lc3NhZ2U6IHRoaXMuZGF0YS5tZXNzYWdlcy5maW5kKHEgPT4gZGF0ZS5mb3JtYXQodGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCkgPT09IHEuZGF0ZSk/Lm1lc3NhZ2UgfHwgXCJcIixcbiAgICAgICAgaXNEaXNhYmxlZERheVxuICAgICAgfSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSBkYXRlc1swXS53ZWVrRGF5OyBpID4gMDsgaS0tKSB7XG4gICAgICBkYXRlcy51bnNoaWZ0KHsgZGF0ZTogMCwgd2Vla0RheTogaSAtIDEgfSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRlcztcbiAgfVxuXG4gIHNlbGVjdERheShkYXk6IElDdXJyZW50TW9udGhEYXRlcykge1xuICB0aGlzLmN1cnJlbnRTZWxlY3Rpb24gPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKCkueWVhcih0aGlzLmN1cnJlbnRZZWFyTnVtYmVyKS5tb250aCh0aGlzLmN1cnJlbnRNb250aE51bWJlcikuZGF0ZShkYXkuZGF0ZSk7XG4gICBjb25zdCBtYXhEYXRlID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSh0aGlzLmRhdGEuZHBDb25maWcubWF4RGF0ZSkuZW5kT2YoXCJkYXlcIik7XG4gICBjb25zdCBtaW5EYXRlID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSh0aGlzLmRhdGEuZHBDb25maWcubWluRGF0ZSkuc3RhcnRPZihcImRheVwiKTtcbiAgIHRoaXMuYWxsb3dCb29raW5nT25EaXNhYmxlZERheSA9IHRoaXMuZGF0YS5hbGxvd0Jvb2tpbmdPbkRpc2FibGVkRGF5XG4gICBcbiAgICBpZiAoZGF5LmRhdGUgPD0gMCkgcmV0dXJuO1xuICAgIGlmICgodGhpcy5jdXJyZW50U2VsZWN0aW9uLmlzU2FtZU9yQWZ0ZXIobWluRGF0ZSkgJiYgdGhpcy5jdXJyZW50U2VsZWN0aW9uLmlzU2FtZU9yQmVmb3JlKG1heERhdGUpICYmIHRoaXMuYWxsb3dCb29raW5nT25EaXNhYmxlZERheSkgfHwgKCFkYXkuaXNEaXNhYmxlZERheSAmJiAhdGhpcy5hbGxvd0Jvb2tpbmdPbkRpc2FibGVkRGF5KSkge1xuICAgICAgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZSA9IGRheTtcbiAgICAgIGlmICghdGhpcy5kYXRhLmRwQ29uZmlnLnNob3dBcHBseUJ1dHRvbikge1xuICAgICAgICB0aGlzLmFwcGx5RGF0ZShkYXkpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGF5LnRvYXN0TWVzc2FnZSB8fCAodGhpcy5hbGxvd0Jvb2tpbmdPbkRpc2FibGVkRGF5ICYmIGRheS50b2FzdE1lc3NhZ2UpKSB7XG4gICAgICB0aGlzLnRvYXN0LmRpc3BsYXlNc2coZGF5LnRvYXN0TWVzc2FnZSwgNDAwMCk7XG4gICAgfVxuICB9XG5cbiAgYXBwbHlEYXRlKGRheT86IElDdXJyZW50TW9udGhEYXRlcykge1xuICAgIGlmIChkYXkgfHwgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZSkge1xuICAgICAgdGhpcy5kYXRhLmRhdGVDaGFuZ2UoXG4gICAgICAgIHBhcnNlWm9uZSgpXG4gICAgICAgICAgLnllYXIodGhpcy5jdXJyZW50WWVhck51bWJlcilcbiAgICAgICAgICAubW9udGgodGhpcy5jdXJyZW50TW9udGhOdW1iZXIpXG4gICAgICAgICAgLmRhdGUoZGF5ID8gZGF5LmRhdGUgOiB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlLmRhdGUpXG4gICAgICAgICAgLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jYW5jZWxEYXRlUGlja2VyKCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcihcImtleWRvd24uZXNjXCIpXG4gIGNsb3NlT25Fc2MoKSB7XG4gICAgdGhpcy5jYW5jZWxEYXRlUGlja2VyKCk7XG4gIH1cblxuICBjYW5jZWxEYXRlUGlja2VyKCkge1xuICAgIHRoaXMuZGF0YS5kYXRlQ2hhbmdlKFwiXCIpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZGF0ZXBpY2tlci1jb250YWluZXJcIiBbbmdDbGFzc109XCJkYXRhLmRpc2FibGVCb3hTaGFkb3c/J3JlbW92ZS1ib3gtc2hhZG93JzonJ1wiIGFyaWEtbGFiZWw9XCJkYXRlIHBpY2tlclwiIGNka1RyYXBGb2N1cyBbY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmVdPVwidHJ1ZVwiPlxuICA8ZGl2IHRhYmluZGV4PVwiLTFcIiBjZGtGb2N1c0luaXRpYWw+PC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJkYXRlcGlja2VyLWNvbnRhaW5lcl9faGVhZGVyXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJkYXRlcGlja2VyLWNvbnRhaW5lcl9fYXJyb3dfX2ljb25cIlxuICAgICAgKGNsaWNrKT1cIiFpc1ByZXZpb3VzTW9udGhEaXNhYmxlZCAmJiBuYXZpZ2F0ZU1vbnRoKCdQUkVWSU9VUycpXCJcbiAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICBhcmlhLWxhYmVsPVwiUHJldmlvdXMgTW9udGhcIlxuICAgICAgKGtleXVwLmVudGVyKT1cIiFpc1ByZXZpb3VzTW9udGhEaXNhYmxlZCAmJiBuYXZpZ2F0ZU1vbnRoKCdQUkVWSU9VUycpXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ2Rpc2FibGVkLW1vbnRoJzogaXNQcmV2aW91c01vbnRoRGlzYWJsZWRcbiAgICAgIH1cIlxuICAgID5cbiAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAyMCAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgIGQ9XCJNMTkuNzA3MSA4LjcwNzExQzIwLjA5NzYgOC4zMTY1OCAyMC4wOTc2IDcuNjgzNDIgMTkuNzA3MSA3LjI5Mjg5TDEzLjM0MzEgMC45Mjg5MzNDMTIuOTUyNiAwLjUzODQwOSAxMi4zMTk1IDAuNTM4NDA5IDExLjkyODkgMC45Mjg5MzNDMTEuNTM4NCAxLjMxOTQ2IDExLjUzODQgMS45NTI2MiAxMS45Mjg5IDIuMzQzMTVMMTcuNTg1OCA4TDExLjkyODkgMTMuNjU2OUMxMS41Mzg0IDE0LjA0NzQgMTEuNTM4NCAxNC42ODA1IDExLjkyODkgMTUuMDcxMUMxMi4zMTk1IDE1LjQ2MTYgMTIuOTUyNiAxNS40NjE2IDEzLjM0MzEgMTUuMDcxMUwxOS43MDcxIDguNzA3MTFaTS04Ljc0MjI4ZS0wOCA5TDE5IDlMMTkgN0w4Ljc0MjI4ZS0wOCA3TC04Ljc0MjI4ZS0wOCA5WlwiXG4gICAgICAgICAgZmlsbD1cIiMxODFGMzNcIlxuICAgICAgICA+PC9wYXRoPlxuICAgICAgPC9zdmc+XG4gICAgPC9kaXY+XG4gICAgPHNwYW4+IHt7IGN1cnJlbnRNb250aCB9fSB7eyBjdXJyZW50WWVhck51bWJlciB9fSA8L3NwYW4+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJkYXRlcGlja2VyLWNvbnRhaW5lcl9fYXJyb3dfX2ljb25cIlxuICAgICAgKGNsaWNrKT1cIiFpc05leHRNb250aERpc2FibGVkICYmIG5hdmlnYXRlTW9udGgoJ05FWFQnKVwiXG4gICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgYXJpYS1sYWJlbD1cIk5leHQgTW9udGhcIlxuICAgICAgKGtleXVwLmVudGVyKT1cIiFpc05leHRNb250aERpc2FibGVkICYmIG5hdmlnYXRlTW9udGgoJ05FWFQnKVwiXG4gICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICdkaXNhYmxlZC1tb250aCc6IGlzTmV4dE1vbnRoRGlzYWJsZWRcbiAgICAgIH1cIlxuICAgID5cbiAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAyMCAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgIGQ9XCJNMTkuNzA3MSA4LjcwNzExQzIwLjA5NzYgOC4zMTY1OCAyMC4wOTc2IDcuNjgzNDIgMTkuNzA3MSA3LjI5Mjg5TDEzLjM0MzEgMC45Mjg5MzNDMTIuOTUyNiAwLjUzODQwOSAxMi4zMTk1IDAuNTM4NDA5IDExLjkyODkgMC45Mjg5MzNDMTEuNTM4NCAxLjMxOTQ2IDExLjUzODQgMS45NTI2MiAxMS45Mjg5IDIuMzQzMTVMMTcuNTg1OCA4TDExLjkyODkgMTMuNjU2OUMxMS41Mzg0IDE0LjA0NzQgMTEuNTM4NCAxNC42ODA1IDExLjkyODkgMTUuMDcxMUMxMi4zMTk1IDE1LjQ2MTYgMTIuOTUyNiAxNS40NjE2IDEzLjM0MzEgMTUuMDcxMUwxOS43MDcxIDguNzA3MTFaTS04Ljc0MjI4ZS0wOCA5TDE5IDlMMTkgN0w4Ljc0MjI4ZS0wOCA3TC04Ljc0MjI4ZS0wOCA5WlwiXG4gICAgICAgICAgZmlsbD1cIiMxODFGMzNcIlxuICAgICAgICA+PC9wYXRoPlxuICAgICAgPC9zdmc+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZGF0ZXBpY2tlci1jb250YWluZXJfX2JvZHlcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZGF0ZXBpY2tlci1jb250YWluZXJfX3dlZWtkYXlzXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXBpY2tlci1jb250YWluZXJfX3dlZWtkYXlcIiAqbmdGb3I9XCJsZXQgd2Vla0RheSBvZiB3ZWVrRGF5c1wiPlxuICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJ7ICdjdXJyZW50LWRheSc6IHdlZWtEYXkuaXNDdXJyZW50RGF5IH1cIj57eyB3ZWVrRGF5LmxhYmVsIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImRhdGVwaWNrZXItY29udGFpbmVyX19kYXlzXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZGF0ZXBpY2tlci1jb250YWluZXJfX2RheVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAnc2VsZWN0ZWQtZGF5JzogIWxvY2FsU2VsZWN0ZWREYXRlID8gZGF5LmlzU2VsZWN0ZWREYXkgOiBkYXkgPT09IGxvY2FsU2VsZWN0ZWREYXRlLFxuICAgICAgICAgICdkaXNhYmxlZC1kYXknOiBkYXkuaXNEaXNhYmxlZERheSxcbiAgICAgICAgICAnaXMtdmFsaWQtZGF0ZSc6IGRheS5kYXRlID4gMCAmJiAhZGF5LmlzU2VsZWN0ZWREYXlcbiAgICAgICAgfVwiXG4gICAgICAgICpuZ0Zvcj1cImxldCBkYXkgb2YgY3VycmVudE1vbnRoRGF0ZXNcIlxuICAgICAgICAoY2xpY2spPVwic2VsZWN0RGF5KGRheSlcIlxuICAgICAgICAoa2V5dXAuZW50ZXIpPVwic2VsZWN0RGF5KGRheSlcIlxuICAgICAgPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICpuZ0lmPVwiZGF5LmRhdGUgPiAwXCJcbiAgICAgICAgICBbdGFiaW5kZXhdPVwiZGF5LmlzRGlzYWJsZWREYXkgPyAtMSA6IDBcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdjdXJyZW50LWRheSc6IGRheS5pc0N1cnJlbnREYXksXG4gICAgICAgICAgICAnc2VsZWN0ZWQtZGF5JzogIWxvY2FsU2VsZWN0ZWREYXRlID8gZGF5LmlzU2VsZWN0ZWREYXkgOiBkYXkgPT09IGxvY2FsU2VsZWN0ZWREYXRlLFxuICAgICAgICAgICAgJ2Rpc2FibGVkLWRheSc6IGRheS5pc0Rpc2FibGVkRGF5XG4gICAgICAgICAgfVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJyZXRyYWN0RGF5TW9udGgoZGF5LmRhdGUsIGN1cnJlbnRNb250aCwgY3VycmVudFllYXJOdW1iZXIpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGRheS5kYXRlIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImRhdGVwaWNrZXItY29udGFpbmVyX19mb290ZXJcIiAqbmdJZj1cImRhdGEuZHBDb25maWcuc2hvd0FwcGx5QnV0dG9uXCI+XG4gICAgPGJ1dHRvbiBtaXMtYnV0dG9uIHNpemU9XCJtZFwiIHR5cGU9XCInbm9uZSdcIiAoY2xpY2spPVwiY2FuY2VsRGF0ZVBpY2tlcigpXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtaXMtYnV0dG9uIHNpemU9XCJtZFwiIHR5cGU9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImFwcGx5RGF0ZSgpXCIgW2Rpc2FibGVkXT1cIiEoZGF0YS5kYXRlIHx8IGxvY2FsU2VsZWN0ZWREYXRlKVwiPkFwcGx5PC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
446
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHotZHAtY29udGFpbmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21pcy1jb21wb25lbnRzL2RhdGVwaWNrZXJfdjIvdHotZHAtY29udGFpbmVyL3R6LWRwLWNvbnRhaW5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9taXMtY29tcG9uZW50cy9kYXRlcGlja2VyX3YyL3R6LWRwLWNvbnRhaW5lci90ei1kcC1jb250YWluZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFdEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVwQyxPQUFPLEtBQUssRUFBRSxFQUFTLEVBQUUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUN6QyxPQUFPLFFBQVEsTUFBTSx1QkFBdUIsQ0FBQztBQUM3QyxPQUFPLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQztBQUNuQyxPQUFPLGFBQWEsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RCxPQUFPLGNBQWMsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RCxPQUFPLGlCQUFpQixNQUFNLGdDQUFnQyxDQUFBOzs7Ozs7Ozs7SUNXMUQsb0JBQW1GO0lBQW5GLCtCQUFtRjtJQUFyRCxnS0FBUyxlQUFBLDRCQUFxQixDQUFBLElBQUM7SUFDM0QsWUFDRjtJQUFBLGlCQUFNOzs7SUFESixlQUNGO0lBREUscUlBQ0Y7Ozs7O0lBQ0Esb0JBQWtGO0lBQWxGLCtCQUFrRjtJQUFuRCxpS0FBUyxlQUFBLDJCQUFvQixDQUFBLElBQUM7SUFDM0QsWUFDRjtJQUFBLGlCQUFNOzs7SUFESixlQUNGO0lBREUscUdBQ0Y7Ozs7O0lBeUJJLCtCQU1PO0lBSkgsd1FBQVMsaURBQXNCLDhCQUFrQixDQUFBLElBQUM7SUFLcEQsWUFDRjtJQUFBLGlCQUFNOzs7OztJQUxGLDZNQUdFO0lBQ0osZUFDRjtJQURFLDBDQUNGOzs7SUFWSiwrQkFBeUUsY0FBQTtJQUVyRSwrRUFRTTtJQUNSLGlCQUFNLEVBQUE7OztJQVRtQixlQUFvQjtJQUFwQixnREFBb0I7Ozs7O0lBYzNDLCtCQU1PO0lBSkgsdVFBQVMsZ0RBQXFCLDRCQUFnQixDQUFBLElBQUM7SUFLakQsWUFDRjtJQUFBLGlCQUFNOzs7OztJQUxGLDBIQUdFO0lBQ0osZUFDRjtJQURFLHlDQUNGOzs7SUFWSiwrQkFBd0UsY0FBQTtJQUVwRSwrRUFRTTtJQUNSLGlCQUFNLEVBQUE7OztJQVRrQixlQUFtQjtJQUFuQiwrQ0FBbUI7Ozs7SUFhM0MsK0JBQTRFLGVBQUE7SUFDaEIsWUFBbUI7SUFBQSxpQkFBTyxFQUFBOzs7SUFBOUUsZUFBbUQ7SUFBbkQsOEVBQW1EO0lBQUMsZUFBbUI7SUFBbkIsdUNBQW1COzs7SUFGakYsK0JBQTBGO0lBQ3hGLCtFQUVNO0lBQ1IsaUJBQU07OztJQUgyRCxlQUFXO0lBQVgseUNBQVc7Ozs7SUFnQnhFLGdDQVNDO0lBQ0MsWUFDRjtJQUFBLGlCQUFPOzs7O0lBVEwseURBQXVDLGdMQUFBO0lBTXZDLG9IQUE4RTtJQUU5RSxlQUNGO0lBREUsNkNBQ0Y7Ozs7O0lBdEJGLCtCQVVDO0lBRkMscU9BQVMsZUFBQSwwQkFBYyxDQUFBLElBQUMsb09BQ1QsZUFBQSwwQkFBYyxDQUFBLElBREw7SUFHeEIsdUZBV087SUFDVCxpQkFBTTs7OztJQXJCSixtTkFJRTtJQU1DLGVBQWtCO0lBQWxCLHVDQUFrQjs7O0lBYnpCLCtCQUFzRjtJQUNwRiwrRUF1Qk07SUFDUixpQkFBTTs7O0lBakJjLGVBQW9CO0lBQXBCLGtEQUFvQjs7OztJQW1CMUMsK0JBQWdGLGlCQUFBO0lBQ25DLHNLQUFTLGVBQUEsMEJBQWtCLENBQUEsSUFBQztJQUFDLHNCQUFNO0lBQUEsaUJBQVM7SUFDdkYsa0NBQXNIO0lBQTFFLHNLQUFTLGVBQUEsbUJBQVcsQ0FBQSxJQUFDO0lBQXFELHFCQUFLO0lBQUEsaUJBQVMsRUFBQTs7O0lBQWxFLGVBQW1EO0lBQW5ELCtFQUFtRDs7O0FEbkd6SCxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDdkIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ2hDLEtBQUssQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDNUIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQU83QixNQUFNLE9BQU8sc0JBQXNCO0lBMEJqQyxZQUFvQyxJQUFxQixFQUFVLEtBQW1CO1FBQW5CLFVBQUssR0FBTCxLQUFLLENBQWM7UUF4QjlFLHNCQUFpQixHQUFHLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRTtZQUN0QyxPQUFPLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ3hCLENBQUMsQ0FBQztRQUNNLGdCQUFXLEdBQWEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNsRixhQUFRLEdBQWUsRUFBRSxDQUFDO1FBSTFCLHNCQUFpQixHQUF5QixFQUFFLENBQUM7UUFDN0MsNEJBQXVCLEdBQVksS0FBSyxDQUFDO1FBQ3pDLHdCQUFtQixHQUFZLEtBQUssQ0FBQztRQUVyQyw4QkFBeUIsR0FBWSxLQUFLLENBQUM7UUFHM0MscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBQ2xDLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBQ2pDLG1CQUFjLEdBQWEsRUFBRSxDQUFDO1FBQzlCLG9CQUFlLEdBQWEsRUFBRSxDQUFDO1FBQy9CLG1CQUFjLEdBQWMsRUFBRSxDQUFDO1FBQy9CLGtCQUFhLEdBQWMsRUFBRSxDQUFDO1FBRTlCLHdCQUFtQixHQUFZLEtBQUssQ0FBQztRQUduQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtZQUNqQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFO2dCQUNqQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLFlBQVksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3RSxDQUFDLENBQUM7U0FDSDtRQUNELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMzRCxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDcEQsS0FBSyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDL0MsWUFBWSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLEtBQUs7U0FDdkQsQ0FBQyxDQUFDLENBQUM7UUFDSixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFO1lBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHO2dCQUNuQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtnQkFDckIsTUFBTSxFQUFFLFdBQVc7YUFDcEIsQ0FBQztTQUNIO1FBRUQsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzdGLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FDOUIsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQ2QsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FDakQsQ0FBQztJQUVKLENBQUM7SUFHRCxlQUFlLENBQUMsR0FBUSxFQUFFLEtBQVUsRUFBRSxJQUFTO1FBQzdDLE9BQU8sR0FBRyxHQUFHLElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEUsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2pFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDL0MsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7U0FDdkQ7UUFDRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDL0YsQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzdHLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoSixJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNyQixJQUFJLENBQUMsdUJBQXVCLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDaEY7UUFDRCxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEosSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDckIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQzdFO0lBQ0gsQ0FBQztJQUVELCtCQUErQjtRQUM3QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFOUYsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUM5RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoRixPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUMzRCxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3BELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyRCxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUN6RCxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3hCLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDaEcsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUM3RjtJQUVILENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLEVBQUUsQ0FBQztJQUMvRCxDQUFDO0lBR0QsWUFBWSxDQUFDLFNBQThCO1FBQ3pDLElBQUksQ0FBQyxTQUFTLEtBQUssTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzdFLENBQUMsU0FBUyxLQUFLLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFO1lBQ3pGLE9BQU87U0FDUjtRQUNELElBQUcsSUFBSSxDQUFDLGVBQWUsRUFBQztZQUN0QixJQUFJLENBQUMsWUFBWSxJQUFJLFNBQVMsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDckQsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUM5QixFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFDZCxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FDNUMsQ0FBQztTQUNIO2FBQ0c7WUFDRixJQUFJLFNBQVMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ3BGLFNBQVMsR0FBRyxTQUFTLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDOUYsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUN0RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDOUQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1NBQzlGO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVPLGFBQWEsQ0FBQyxLQUFhLEVBQUUsaUJBQXlCO1FBQzVELElBQUksS0FBSyxHQUF5QixFQUFFLENBQUM7UUFDckMsTUFBTSxXQUFXLEdBQUcsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQy9FLEtBQUssSUFBSSxXQUFXLEdBQUcsQ0FBQyxFQUFFLFdBQVcsSUFBSSxXQUFXLEVBQUUsV0FBVyxFQUFFLEVBQUU7WUFDbkUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM3RixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzFELElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQztZQUN4RSxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDaEosSUFBSSxDQUFDLGFBQWEsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ3ZDLGFBQWEsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQzthQUM5QztZQUNELE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNoSixJQUFJLENBQUMsYUFBYSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDdkMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQy9DO1lBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDVCxJQUFJLEVBQUUsV0FBVztnQkFDakIsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ25CLFlBQVksRUFDVixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7b0JBQ2pILElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7Z0JBQzVELGFBQWEsRUFBRSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSTtnQkFDMUYsWUFBWSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sSUFBSSxFQUFFO2dCQUM1RyxhQUFhO2FBQ2QsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN6QyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDNUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxTQUFTLENBQUMsR0FBdUI7UUFDakMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzSCxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbEksTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3BJLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFBO1FBRW5FLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDO1lBQUUsT0FBTztRQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEVBQUU7WUFDaE0sSUFBSSxDQUFDLGlCQUFpQixHQUFHLEdBQUcsQ0FBQztZQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFO2dCQUN2QyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3JCO1NBQ0Y7UUFDRCxJQUFJLEdBQUcsQ0FBQyxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMseUJBQXlCLElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQzVFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDL0M7SUFDSCxDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQXdCO1FBQ2hDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FDbEIsS0FBSyxFQUFFO2lCQUNKLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7aUJBQzVCLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUM7aUJBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7aUJBQ2xELE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FDckMsQ0FBQztTQUNIO2FBQU07WUFDTCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFHRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsSUFBRyxJQUFJLENBQUMsbUJBQW1CO1lBQUUsT0FBTztRQUNwQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDL0MsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDN0IsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUM3QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUMzQyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQzlCLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUNkLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUM1QyxDQUFDO1FBQ0YsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUM5QixJQUFJLENBQUMsK0JBQStCLEVBQUUsQ0FBQztJQUV6QyxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxpQkFBaUIsR0FBRztZQUN2QixJQUFJLEVBQUUsQ0FBQztZQUNQLE9BQU8sRUFBRSxDQUFDO1lBQ1YsWUFBWSxFQUFFLEtBQUs7WUFDbkIsYUFBYSxFQUFFLEtBQUs7WUFDcEIsYUFBYSxFQUFFLEtBQUs7WUFDcEIsWUFBWSxFQUFFLEVBQUU7U0FDakIsQ0FBQztRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWE7UUFDdkIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDOUIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztRQUNqQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDN0YsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFZO1FBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUNsRCxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUM3QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQzdCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7UUFDaEMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7SUFDekMsQ0FBQzs7NEZBclFVLHNCQUFzQix1QkEwQmIsY0FBYzt5RUExQnZCLHNCQUFzQjsrR0FBdEIsZ0JBQVk7O1FDdkJ6Qiw4QkFBa0s7UUFDaEsseUJBQXlDO1FBQ3pDLDhCQUEwQyxhQUFBO1FBR3RDLGdHQUFTLGlCQUFhLFVBQVUsQ0FBQyxJQUFDLCtGQUduQixpQkFBYSxVQUFVLENBQUMsSUFITDtRQVFsQyxtQkFBK0Y7UUFBL0YsOEJBQStGO1FBQzdGLDBCQUdRO1FBQ1YsaUJBQU0sRUFBQTtRQUdSLHVFQUVNO1FBQ04sdUVBRU07UUFHTixvQkFTQztRQVRELDhCQVNDO1FBUEMsZ0dBQVMsaUJBQWEsTUFBTSxDQUFDLElBQUMsK0ZBR2YsaUJBQWEsTUFBTSxDQUFDLElBSEw7UUFROUIsbUJBQStGO1FBQS9GLDhCQUErRjtRQUM3RiwyQkFHUTtRQUNWLGlCQUFNLEVBQUEsRUFBQTtRQUdWLG9CQUF3QztRQUF4QywrQkFBd0M7UUFFdEMsMEVBWU07UUFFTiwwRUFZTTtRQUVOLDBFQUlNO1FBQ04sMEVBeUJNO1FBQ1IsaUJBQU07UUFDTiwwRUFHTTtRQUNSLGlCQUFNOztRQWpINEIsOEVBQXdELGlDQUFBO1FBU3BGLGVBRUU7UUFGRiwwR0FFRTtRQVVFLGVBQXNCO1FBQXRCLDJDQUFzQjtRQUd0QixlQUF1QjtRQUF2Qiw0Q0FBdUI7UUFXM0IsZUFFRTtRQUZGLHNHQUVFO1FBWUUsZUFBMEM7UUFBMUMsbUVBQTBDO1FBYzFDLGVBQTBDO1FBQTFDLG1FQUEwQztRQWMxQyxlQUEyQztRQUEzQyxvRUFBMkM7UUFLM0MsZUFBMkM7UUFBM0Msb0VBQTJDO1FBMkJSLGVBQW1DO1FBQW5DLHdEQUFtQzs7dUZEdEZuRSxzQkFBc0I7Y0FMbEMsU0FBUzsyQkFDRSxXQUFXOztzQkE4QlIsTUFBTTt1QkFBQyxjQUFjO21EQW1MbEMsVUFBVTtrQkFEVCxZQUFZO21CQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBPbkluaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQ09OVEFJTkVSX0RBVEEsIERBVEVfRk9STUFUIH0gZnJvbSBcIi4uL2RhdGVwaWNrZXItY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBJQ3VycmVudE1vbnRoLCBJQ3VycmVudE1vbnRoRGF0ZXMsIElEYXRlUGlja2VyRGF0YSwgSVdlZWtEYXkgfSBmcm9tIFwiLi4vbW9kZWxzL2RwLWNvbmZpZy5tb2RlbFwiO1xuaW1wb3J0IHsgZ2V0TW9udGggfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gXCJtaXMtY3J5c3RhbC1kZXNpZ24tc3lzdGVtL3RvYXN0XCI7XG5pbXBvcnQgZGF5anMsIHsgRGF5anMsIHR6IH0gZnJvbSAnZGF5anMnO1xuaW1wb3J0IHRpbWV6b25lIGZyb20gJ2RheWpzL3BsdWdpbi90aW1lem9uZSc7XG5pbXBvcnQgdXRjIGZyb20gJ2RheWpzL3BsdWdpbi91dGMnO1xuaW1wb3J0IGlzU2FtZU9yQWZ0ZXIgZnJvbSAnZGF5anMvcGx1Z2luL2lzU2FtZU9yQWZ0ZXInO1xuaW1wb3J0IGlzU2FtZU9yQmVmb3JlIGZyb20gJ2RheWpzL3BsdWdpbi9pc1NhbWVPckJlZm9yZSc7XG5pbXBvcnQgY3VzdG9tUGFyc2VGb3JtYXQgZnJvbSAnZGF5anMvcGx1Z2luL2N1c3RvbVBhcnNlRm9ybWF0J1xuXG5kYXlqcy5leHRlbmQodXRjKTtcbmRheWpzLmV4dGVuZCh0aW1lem9uZSk7XG5kYXlqcy5leHRlbmQoY3VzdG9tUGFyc2VGb3JtYXQpO1xuZGF5anMuZXh0ZW5kKGlzU2FtZU9yQWZ0ZXIpO1xuZGF5anMuZXh0ZW5kKGlzU2FtZU9yQmVmb3JlKTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcIm1pcy10ei1kcFwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL3R6LWRwLWNvbnRhaW5lci5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vdHotZHAtY29udGFpbmVyLmNvbXBvbmVudC5zY3NzXCJdXG59KVxuZXhwb3J0IGNsYXNzIFR6RHBDb250YWluZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBkYXRhOiBJRGF0ZVBpY2tlckRhdGE7XG4gIHByaXZhdGUgcGFyc2Vab25lSW5zdGFuY2UgPSAoLi4uYXJncykgPT4ge1xuICAgIHJldHVybiBkYXlqcyguLi5hcmdzKTtcbiAgfTtcbiAgcHJpdmF0ZSByYXdXZWVrRGF5czogc3RyaW5nW10gPSBbXCJTVU5cIiwgXCJNT05cIiwgXCJUVUVcIiwgXCJXRURcIiwgXCJUSFVcIiwgXCJGUklcIiwgXCJTQVRcIl07XG4gIHdlZWtEYXlzOiBJV2Vla0RheVtdID0gW107XG4gIGN1cnJlbnRNb250aE51bWJlcjogbnVtYmVyO1xuICBjdXJyZW50TW9udGg6IElDdXJyZW50TW9udGg7XG4gIGN1cnJlbnRZZWFyTnVtYmVyOiBudW1iZXI7XG4gIGN1cnJlbnRNb250aERhdGVzOiBJQ3VycmVudE1vbnRoRGF0ZXNbXSA9IFtdO1xuICBpc1ByZXZpb3VzTW9udGhEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc05leHRNb250aERpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGxvY2FsU2VsZWN0ZWREYXRlOiBJQ3VycmVudE1vbnRoRGF0ZXM7XG4gIGFsbG93Qm9va2luZ09uRGlzYWJsZWREYXk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY3VycmVudFNlbGVjdGlvbjogYW55O1xuXG4gIGlzU2VsZWN0aW5nTW9udGg6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNTZWxlY3RpbmdZZWFyOiBib29sZWFuID0gZmFsc2U7XG4gIGF2YWlsYWJsZVllYXJzOiBudW1iZXJbXSA9IFtdO1xuICBhdmFpbGFibGVNb250aHM6IHN0cmluZ1tdID0gW107XG4gIGRpc2FibGVkTW9udGhzOiBib29sZWFuW10gPSBbXTtcbiAgZGlzYWJsZWRZZWFyczogYm9vbGVhbltdID0gW107XG4gIHNlbGVjdGVkWWVhcjogbnVtYmVyO1xuICBpc1llYXJTZWxlY3Rpb25GbG93OiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoQEluamVjdChDT05UQUlORVJfREFUQSkgZGF0YTogSURhdGVQaWNrZXJEYXRhLCBwcml2YXRlIHRvYXN0OiBUb2FzdFNlcnZpY2UpIHtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIGlmICh0aGlzLmRhdGE/LmRwQ29uZmlnPy50aW1lem9uZSkge1xuICAgICAgdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHR6KGFyZ3NbMF0sIGFyZ3NbMV0gfHwgJ0REL01NL1lZWVknLCB0aGlzLmRhdGEuZHBDb25maWcudGltZXpvbmUpO1xuICAgICAgfTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50TW9udGhOdW1iZXIgPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKCkubW9udGgoKTtcbiAgICB0aGlzLmN1cnJlbnRNb250aCA9IGdldE1vbnRoKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyKTtcbiAgICB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLnllYXIoKTtcbiAgICB0aGlzLndlZWtEYXlzID0gdGhpcy5yYXdXZWVrRGF5cy5tYXAoKGRheSwgaW5kZXgpID0+ICh7XG4gICAgICBsYWJlbDogYCR7ZGF5WzBdfSR7ZGF5LnNsaWNlKDEpLnRvTG93ZXJDYXNlKCl9YCxcbiAgICAgIGlzQ3VycmVudERheTogdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLmRheSgpID09PSBpbmRleFxuICAgIH0pKTtcbiAgICBpZiAoIXRoaXMuZGF0YT8uZHBDb25maWc/LmZvcm1hdCkge1xuICAgICAgdGhpcy5kYXRhLmRwQ29uZmlnID0ge1xuICAgICAgICAuLi50aGlzLmRhdGEuZHBDb25maWcsXG4gICAgICAgIGZvcm1hdDogREFURV9GT1JNQVRcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy5hdmFpbGFibGVNb250aHMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiAxMiB9LCAoXywgaSkgPT4gZGF5anMoKS5tb250aChpKS5mb3JtYXQoJ01NTU0nKSk7XG4gICAgdGhpcy5hdmFpbGFibGVZZWFycyA9IEFycmF5LmZyb20oXG4gICAgICB7IGxlbmd0aDogMTIgfSxcbiAgICAgIChfLCBpbmRleCkgPT4gdGhpcy5jdXJyZW50WWVhck51bWJlciAtIDYgKyBpbmRleFxuICAgICk7XG4gICAgXG4gIH1cblxuXG4gIHJldHJhY3REYXlNb250aChkYXk6IGFueSwgbW9udGg6IGFueSwgeWVhcjogYW55KTogYW55IHtcbiAgICByZXR1cm4gYCR7ZGF5fSAke21vbnRofSAke3llYXJ9YDtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudERhdGVJbnN0YW5jZSgpO1xuICAgIHRoaXMuY2FsY3VsYXRlTWluTWF4RGF5cygpO1xuICAgIHRoaXMuY2FsY3VsYXRlRGlzYWJsZWRNb250aHNBbmRZZWFycygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjdXJyZW50RGF0ZUluc3RhbmNlKCk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkRGF0ZSA9IGRheWpzKHRoaXMuZGF0YS5kYXRlLCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KTtcbiAgICBpZiAoc2VsZWN0ZWREYXRlLmlzVmFsaWQoKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFllYXIgPSB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyID0gc2VsZWN0ZWREYXRlLnllYXIoKTtcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoTnVtYmVyID0gc2VsZWN0ZWREYXRlLm1vbnRoKCk7XG4gICAgICB0aGlzLmN1cnJlbnRNb250aCA9IGdldE1vbnRoKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyKTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLmN1cnJlbnRNb250aE51bWJlciwgdGhpcy5jdXJyZW50WWVhck51bWJlcik7XG4gIH1cblxuICBwcml2YXRlIGNhbGN1bGF0ZU1pbk1heERheXMoKSB7XG4gICAgY29uc3QgY3VycmVudEluc3RhbmNlID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLnllYXIodGhpcy5jdXJyZW50WWVhck51bWJlcikubW9udGgodGhpcy5jdXJyZW50TW9udGhOdW1iZXIpO1xuICAgIGNvbnN0IG1pbkRhdGUgPSAhIXRoaXMuZGF0YS5kcENvbmZpZy5taW5EYXRlID8gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSh0aGlzLmRhdGEuZHBDb25maWcubWluRGF0ZSwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCkgOiBkYXlqcygnaW52YWxpZCcpO1xuICAgIGlmIChtaW5EYXRlLmlzVmFsaWQoKSkge1xuICAgICAgdGhpcy5pc1ByZXZpb3VzTW9udGhEaXNhYmxlZCA9IG1pbkRhdGUuaXNTYW1lT3JBZnRlcihjdXJyZW50SW5zdGFuY2UsIFwibW9udGhcIik7XG4gICAgfVxuICAgIGNvbnN0IG1heERhdGUgPSAhIXRoaXMuZGF0YS5kcENvbmZpZy5tYXhEYXRlID8gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSh0aGlzLmRhdGEuZHBDb25maWcubWF4RGF0ZSwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCkgOiBkYXlqcygnaW52YWxpZCcpO1xuICAgIGlmIChtYXhEYXRlLmlzVmFsaWQoKSkge1xuICAgICAgdGhpcy5pc05leHRNb250aERpc2FibGVkID0gbWF4RGF0ZS5pc1NhbWVPckJlZm9yZShjdXJyZW50SW5zdGFuY2UsIFwibW9udGhcIik7XG4gICAgfVxuICB9XG5cbiAgY2FsY3VsYXRlRGlzYWJsZWRNb250aHNBbmRZZWFycygpIHtcbiAgICBjb25zdCBtaW5EYXRlID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSh0aGlzLmRhdGEuZHBDb25maWcubWluRGF0ZSwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCk7XG4gICAgY29uc3QgbWF4RGF0ZSA9IHRoaXMucGFyc2Vab25lSW5zdGFuY2UodGhpcy5kYXRhLmRwQ29uZmlnLm1heERhdGUsIHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpO1xuICAgIFxuICAgIHRoaXMuZGlzYWJsZWRNb250aHMgPSB0aGlzLmF2YWlsYWJsZU1vbnRocy5tYXAoKG1vbnRoLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgbW9udGhEYXRlID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLnllYXIodGhpcy5zZWxlY3RlZFllYXIpLm1vbnRoKGluZGV4KTtcbiAgICAgIHJldHVybiAobWluRGF0ZS5pc1ZhbGlkKCkgJiYgbW9udGhEYXRlLmlzQmVmb3JlKG1pbkRhdGUsICdtb250aCcpKSB8fCBcbiAgICAgICAgICAgICAobWF4RGF0ZS5pc1ZhbGlkKCkgJiYgbW9udGhEYXRlLmlzQWZ0ZXIobWF4RGF0ZSwgJ21vbnRoJykpO1xuICAgIH0pO1xuICBcbiAgICB0aGlzLmRpc2FibGVkWWVhcnMgPSB0aGlzLmF2YWlsYWJsZVllYXJzLm1hcCgoeWVhcikgPT4ge1xuICAgICAgY29uc3QgeWVhckRhdGUgPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKCkueWVhcih5ZWFyKTtcbiAgICAgIHJldHVybiAobWluRGF0ZS5pc1ZhbGlkKCkgJiYgeWVhckRhdGUuaXNCZWZvcmUobWluRGF0ZSwgJ3llYXInKSkgfHwgXG4gICAgICAgICAgICAgKG1heERhdGUuaXNWYWxpZCgpICYmIHllYXJEYXRlLmlzQWZ0ZXIobWF4RGF0ZSwgJ3llYXInKSk7XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5pc1NlbGVjdGluZ1llYXIpIHtcbiAgICAgIHRoaXMuaXNQcmV2aW91c01vbnRoRGlzYWJsZWQgPSBtaW5EYXRlLmlzVmFsaWQoKSAmJiAoKHRoaXMuc2VsZWN0ZWRZZWFyIC0gNikgPD0gbWluRGF0ZS55ZWFyKCkpO1xuICAgICAgdGhpcy5pc05leHRNb250aERpc2FibGVkID0gbWF4RGF0ZS5pc1ZhbGlkKCkgJiYgKCh0aGlzLnNlbGVjdGVkWWVhciArIDUpID49IG1heERhdGUueWVhcigpKTtcbiAgICB9XG4gICAgXG4gIH1cblxuICBnZXQgeWVhclJhbmdlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuc2VsZWN0ZWRZZWFyIC0gNn0gLSAke3RoaXMuc2VsZWN0ZWRZZWFyICsgNX1gO1xuICB9XG4gIFxuXG4gIG5hdmlnYXRlVmlldyhkaXJlY3Rpb246IFwiTkVYVFwiIHwgXCJQUkVWSU9VU1wiKTogdm9pZCB7XG4gICAgaWYgKChkaXJlY3Rpb24gPT09ICdORVhUJyAmJiAodGhpcy5pc05leHRNb250aERpc2FibGVkIHx8IHRoaXMuaXNTZWxlY3RpbmdNb250aCkpIHx8XG4gICAgICAgIChkaXJlY3Rpb24gPT09ICdQUkVWSU9VUycgJiYgKHRoaXMuaXNQcmV2aW91c01vbnRoRGlzYWJsZWQgfHwgdGhpcy5pc1NlbGVjdGluZ01vbnRoKSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYodGhpcy5pc1NlbGVjdGluZ1llYXIpe1xuICAgICAgdGhpcy5zZWxlY3RlZFllYXIgKz0gZGlyZWN0aW9uID09PSBcIk5FWFRcIiA/IDEyIDogLTEyO1xuICAgICAgdGhpcy5hdmFpbGFibGVZZWFycyA9IEFycmF5LmZyb20oXG4gICAgICAgIHsgbGVuZ3RoOiAxMiB9LFxuICAgICAgICAoXywgaW5kZXgpID0+IHRoaXMuc2VsZWN0ZWRZZWFyIC0gNiArIGluZGV4XG4gICAgICApO1xuICAgIH1cbiAgICBlbHNle1xuICAgICAgbGV0IHRoaXNNb250aCA9IGRheWpzKCkueWVhcih0aGlzLmN1cnJlbnRZZWFyTnVtYmVyKS5tb250aCh0aGlzLmN1cnJlbnRNb250aE51bWJlcik7XG4gICAgICB0aGlzTW9udGggPSBkaXJlY3Rpb24gPT09IFwiTkVYVFwiID8gdGhpc01vbnRoLmFkZCgxLCBcIm1vbnRoXCIpIDogdGhpc01vbnRoLnN1YnRyYWN0KDEsIFwibW9udGhcIik7XG4gICAgICB0aGlzLmN1cnJlbnRNb250aE51bWJlciA9IHRoaXNNb250aC5tb250aCgpO1xuICAgICAgdGhpcy5jdXJyZW50TW9udGggPSBnZXRNb250aCh0aGlzLmN1cnJlbnRNb250aE51bWJlcik7XG4gICAgICB0aGlzLnNlbGVjdGVkWWVhciA9IHRoaXMuY3VycmVudFllYXJOdW1iZXIgPSB0aGlzTW9udGgueWVhcigpO1xuICAgICAgdGhpcy5jdXJyZW50TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLmN1cnJlbnRNb250aE51bWJlciwgdGhpcy5jdXJyZW50WWVhck51bWJlcik7XG4gICAgfVxuICAgIHRoaXMuY2FsY3VsYXRlTWluTWF4RGF5cygpO1xuICAgIHRoaXMuY2FsY3VsYXRlRGlzYWJsZWRNb250aHNBbmRZZWFycygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZURhdGVzKG1vbnRoOiBudW1iZXIsIGN1cnJlbnRZZWFyTnVtYmVyOiBudW1iZXIpOiBJQ3VycmVudE1vbnRoRGF0ZXNbXSB7XG4gICAgbGV0IGRhdGVzOiBJQ3VycmVudE1vbnRoRGF0ZXNbXSA9IFtdO1xuICAgIGNvbnN0IGRheXNJbk1vbnRoID0gZGF5anMoKS55ZWFyKGN1cnJlbnRZZWFyTnVtYmVyKS5tb250aChtb250aCkuZGF5c0luTW9udGgoKTtcbiAgICBmb3IgKGxldCBjdXJyZW50RGF0ZSA9IDE7IGN1cnJlbnREYXRlIDw9IGRheXNJbk1vbnRoOyBjdXJyZW50RGF0ZSsrKSB7XG4gICAgICBjb25zdCBkYXRlID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLnllYXIoY3VycmVudFllYXJOdW1iZXIpLm1vbnRoKG1vbnRoKS5kYXRlKGN1cnJlbnREYXRlKTtcbiAgICAgIGNvbnN0IGRhdGVTdHJpbmcgPSBkYXRlLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KTtcbiAgICAgIGxldCBpc0Rpc2FibGVkRGF5ID0gdGhpcy5kYXRhLmRhdGVzRGlzYWJsZWQuc29tZShkID0+IGQgPT09IGRhdGVTdHJpbmcpO1xuICAgICAgY29uc3QgbWluRGF0ZSA9ICEhdGhpcy5kYXRhLmRwQ29uZmlnLm1pbkRhdGUgPyB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKHRoaXMuZGF0YS5kcENvbmZpZy5taW5EYXRlLCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KSA6IGRheWpzKCdpbnZhbGlkJyk7XG4gICAgICBpZiAoIWlzRGlzYWJsZWREYXkgJiYgbWluRGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgaXNEaXNhYmxlZERheSA9IG1pbkRhdGUuaXNBZnRlcihkYXRlLCBcImRheVwiKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1heERhdGUgPSAhIXRoaXMuZGF0YS5kcENvbmZpZy5tYXhEYXRlID8gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSh0aGlzLmRhdGEuZHBDb25maWcubWF4RGF0ZSwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCkgOiBkYXlqcygnaW52YWxpZCcpO1xuICAgICAgaWYgKCFpc0Rpc2FibGVkRGF5ICYmIG1heERhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgIGlzRGlzYWJsZWREYXkgPSBtYXhEYXRlLmlzQmVmb3JlKGRhdGUsIFwiZGF5XCIpO1xuICAgICAgfVxuICAgICAgZGF0ZXMucHVzaCh7XG4gICAgICAgIGRhdGU6IGN1cnJlbnREYXRlLFxuICAgICAgICB3ZWVrRGF5OiBkYXRlLmRheSgpLFxuICAgICAgICBpc0N1cnJlbnREYXk6XG4gICAgICAgICAgdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLnllYXIoY3VycmVudFllYXJOdW1iZXIpLm1vbnRoKG1vbnRoKS5kYXRlKGN1cnJlbnREYXRlKS5mb3JtYXQodGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCkgPT09XG4gICAgICAgICAgdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KSxcbiAgICAgICAgaXNTZWxlY3RlZERheTogIWlzRGlzYWJsZWREYXkgJiYgZGF0ZS5mb3JtYXQodGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCkgPT09IHRoaXMuZGF0YS5kYXRlLFxuICAgICAgICB0b2FzdE1lc3NhZ2U6IHRoaXMuZGF0YS5tZXNzYWdlcy5maW5kKHEgPT4gZGF0ZS5mb3JtYXQodGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCkgPT09IHEuZGF0ZSk/Lm1lc3NhZ2UgfHwgXCJcIixcbiAgICAgICAgaXNEaXNhYmxlZERheVxuICAgICAgfSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSBkYXRlc1swXS53ZWVrRGF5OyBpID4gMDsgaS0tKSB7XG4gICAgICBkYXRlcy51bnNoaWZ0KHsgZGF0ZTogMCwgd2Vla0RheTogaSAtIDEgfSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRlcztcbiAgfVxuXG4gIHNlbGVjdERheShkYXk6IElDdXJyZW50TW9udGhEYXRlcykge1xuICB0aGlzLmN1cnJlbnRTZWxlY3Rpb24gPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKCkueWVhcih0aGlzLmN1cnJlbnRZZWFyTnVtYmVyKS5tb250aCh0aGlzLmN1cnJlbnRNb250aE51bWJlcikuZGF0ZShkYXkuZGF0ZSk7XG4gICBjb25zdCBtYXhEYXRlID0gISF0aGlzLmRhdGEuZHBDb25maWcubWF4RGF0ZSA/IHRoaXMucGFyc2Vab25lSW5zdGFuY2UodGhpcy5kYXRhLmRwQ29uZmlnLm1heERhdGUpLmVuZE9mKFwiZGF5XCIpIDogZGF5anMoJ2ludmFsaWQnKTtcbiAgIGNvbnN0IG1pbkRhdGUgPSAhIXRoaXMuZGF0YS5kcENvbmZpZy5tYXhEYXRlID8gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSh0aGlzLmRhdGEuZHBDb25maWcubWluRGF0ZSkuc3RhcnRPZihcImRheVwiKSA6IGRheWpzKCdpbnZhbGlkJyk7XG4gICB0aGlzLmFsbG93Qm9va2luZ09uRGlzYWJsZWREYXkgPSB0aGlzLmRhdGEuYWxsb3dCb29raW5nT25EaXNhYmxlZERheVxuICAgXG4gICAgaWYgKGRheS5kYXRlIDw9IDApIHJldHVybjtcbiAgICBpZiAoKHRoaXMuY3VycmVudFNlbGVjdGlvbi5pc1NhbWVPckFmdGVyKG1pbkRhdGUpICYmIHRoaXMuY3VycmVudFNlbGVjdGlvbi5pc1NhbWVPckJlZm9yZShtYXhEYXRlKSAmJiB0aGlzLmFsbG93Qm9va2luZ09uRGlzYWJsZWREYXkpIHx8ICghZGF5LmlzRGlzYWJsZWREYXkgJiYgIXRoaXMuYWxsb3dCb29raW5nT25EaXNhYmxlZERheSkpIHtcbiAgICAgIHRoaXMubG9jYWxTZWxlY3RlZERhdGUgPSBkYXk7XG4gICAgICBpZiAoIXRoaXMuZGF0YS5kcENvbmZpZy5zaG93QXBwbHlCdXR0b24pIHtcbiAgICAgICAgdGhpcy5hcHBseURhdGUoZGF5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRheS50b2FzdE1lc3NhZ2UgfHwgKHRoaXMuYWxsb3dCb29raW5nT25EaXNhYmxlZERheSAmJiBkYXkudG9hc3RNZXNzYWdlKSkge1xuICAgICAgdGhpcy50b2FzdC5kaXNwbGF5TXNnKGRheS50b2FzdE1lc3NhZ2UsIDQwMDApO1xuICAgIH1cbiAgfVxuXG4gIGFwcGx5RGF0ZShkYXk/OiBJQ3VycmVudE1vbnRoRGF0ZXMpIHtcbiAgICBpZiAoZGF5IHx8IHRoaXMubG9jYWxTZWxlY3RlZERhdGUpIHtcbiAgICAgIHRoaXMuZGF0YS5kYXRlQ2hhbmdlKFxuICAgICAgICBkYXlqcygpXG4gICAgICAgICAgLnllYXIodGhpcy5jdXJyZW50WWVhck51bWJlcilcbiAgICAgICAgICAubW9udGgodGhpcy5jdXJyZW50TW9udGhOdW1iZXIpXG4gICAgICAgICAgLmRhdGUoZGF5ID8gZGF5LmRhdGUgOiB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlLmRhdGUpXG4gICAgICAgICAgLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jYW5jZWxEYXRlUGlja2VyKCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcihcImtleWRvd24uZXNjXCIpXG4gIGNsb3NlT25Fc2MoKSB7XG4gICAgdGhpcy5jYW5jZWxEYXRlUGlja2VyKCk7XG4gIH1cblxuICBjYW5jZWxEYXRlUGlja2VyKCkge1xuICAgIHRoaXMuZGF0YS5kYXRlQ2hhbmdlKFwiXCIpO1xuICB9XG5cbiAgdG9nZ2xlTW9udGhTZWxlY3RvcigpIHtcbiAgICBpZih0aGlzLmlzWWVhclNlbGVjdGlvbkZsb3cpIHJldHVybjtcbiAgICB0aGlzLmlzU2VsZWN0aW5nTW9udGggPSAhdGhpcy5pc1NlbGVjdGluZ01vbnRoO1xuICAgIHRoaXMuaXNTZWxlY3RpbmdZZWFyID0gZmFsc2U7XG4gICAgdGhpcy5jYWxjdWxhdGVEaXNhYmxlZE1vbnRoc0FuZFllYXJzKCk7XG4gIH1cblxuICB0b2dnbGVZZWFyU2VsZWN0b3IoKSB7XG4gICAgdGhpcy5pc1NlbGVjdGluZ1llYXIgPSAhdGhpcy5pc1NlbGVjdGluZ1llYXI7XG4gICAgdGhpcy5zZWxlY3RlZFllYXIgPSB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyO1xuICAgIHRoaXMuYXZhaWxhYmxlWWVhcnMgPSBBcnJheS5mcm9tKFxuICAgICAgeyBsZW5ndGg6IDEyIH0sXG4gICAgICAoXywgaW5kZXgpID0+IHRoaXMuc2VsZWN0ZWRZZWFyIC0gNiArIGluZGV4XG4gICAgKTtcbiAgICB0aGlzLmlzU2VsZWN0aW5nTW9udGggPSBmYWxzZTtcbiAgICB0aGlzLmNhbGN1bGF0ZURpc2FibGVkTW9udGhzQW5kWWVhcnMoKTtcblxuICB9XG5cbiAgcmVzZXREYXRlU2VsZWN0aW9uKCkge1xuICAgIHRoaXMubG9jYWxTZWxlY3RlZERhdGUgPSB7XG4gICAgICBkYXRlOiAwLFxuICAgICAgd2Vla0RheTogMCxcbiAgICAgIGlzQ3VycmVudERheTogZmFsc2UsXG4gICAgICBpc1NlbGVjdGVkRGF5OiBmYWxzZSxcbiAgICAgIGlzRGlzYWJsZWREYXk6IGZhbHNlLFxuICAgICAgdG9hc3RNZXNzYWdlOiAnJ1xuICAgIH07XG4gICAgdGhpcy5kYXRhLmRhdGUgPSAnJztcbiAgfVxuXG4gIHNlbGVjdE1vbnRoKG1vbnRoOiBzdHJpbmcpIHtcbiAgICB0aGlzLmN1cnJlbnRNb250aE51bWJlciA9IHRoaXMuYXZhaWxhYmxlTW9udGhzLmluZGV4T2YobW9udGgpO1xuICAgIHRoaXMuY3VycmVudE1vbnRoID0gZ2V0TW9udGgodGhpcy5jdXJyZW50TW9udGhOdW1iZXIpO1xuICAgIHRoaXMuaXNTZWxlY3RpbmdNb250aCA9IGZhbHNlO1xuICAgIHRoaXMuaXNZZWFyU2VsZWN0aW9uRmxvdyA9IGZhbHNlO1xuICAgIHRoaXMucmVzZXREYXRlU2VsZWN0aW9uKCk7XG4gICAgdGhpcy5jdXJyZW50TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLmN1cnJlbnRNb250aE51bWJlciwgdGhpcy5jdXJyZW50WWVhck51bWJlcik7XG4gICAgdGhpcy5jYWxjdWxhdGVNaW5NYXhEYXlzKCk7XG4gIH1cblxuICBzZWxlY3RZZWFyKHllYXI6IG51bWJlcikge1xuICAgIHRoaXMuc2VsZWN0ZWRZZWFyID0gdGhpcy5jdXJyZW50WWVhck51bWJlciA9IHllYXI7XG4gICAgdGhpcy5pc1NlbGVjdGluZ1llYXIgPSBmYWxzZTtcbiAgICB0aGlzLmlzU2VsZWN0aW5nTW9udGggPSB0cnVlO1xuICAgIHRoaXMuaXNZZWFyU2VsZWN0aW9uRmxvdyA9IHRydWU7XG4gICAgdGhpcy5yZXNldERhdGVTZWxlY3Rpb24oKTtcbiAgICB0aGlzLmNhbGN1bGF0ZURpc2FibGVkTW9udGhzQW5kWWVhcnMoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImRhdGVwaWNrZXItY29udGFpbmVyXCIgW25nQ2xhc3NdPVwiZGF0YS5kaXNhYmxlQm94U2hhZG93PydyZW1vdmUtYm94LXNoYWRvdyc6JydcIiBhcmlhLWxhYmVsPVwiZGF0ZSBwaWNrZXJcIiBjZGtUcmFwRm9jdXMgW2Nka1RyYXBGb2N1c0F1dG9DYXB0dXJlXT1cInRydWVcIj5cbiAgPGRpdiB0YWJpbmRleD1cIi0xXCIgY2RrRm9jdXNJbml0aWFsPjwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZGF0ZXBpY2tlci1jb250YWluZXJfX2hlYWRlclwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZGF0ZXBpY2tlci1jb250YWluZXJfX2Fycm93X19pY29uXCJcbiAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVZpZXcoJ1BSRVZJT1VTJylcIlxuICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgIGFyaWEtbGFiZWw9XCJQcmV2aW91cyBNb250aFwiXG4gICAgICAoa2V5dXAuZW50ZXIpPVwibmF2aWdhdGVWaWV3KCdQUkVWSU9VUycpXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ2Rpc2FibGVkLW1vbnRoJzogaXNQcmV2aW91c01vbnRoRGlzYWJsZWQgfHwgaXNTZWxlY3RpbmdNb250aFxuICAgICAgfVwiXG4gICAgPlxuICAgICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDIwIDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgZD1cIk0xOS43MDcxIDguNzA3MTFDMjAuMDk3NiA4LjMxNjU4IDIwLjA5NzYgNy42ODM0MiAxOS43MDcxIDcuMjkyODlMMTMuMzQzMSAwLjkyODkzM0MxMi45NTI2IDAuNTM4NDA5IDEyLjMxOTUgMC41Mzg0MDkgMTEuOTI4OSAwLjkyODkzM0MxMS41Mzg0IDEuMzE5NDYgMTEuNTM4NCAxLjk1MjYyIDExLjkyODkgMi4zNDMxNUwxNy41ODU4IDhMMTEuOTI4OSAxMy42NTY5QzExLjUzODQgMTQuMDQ3NCAxMS41Mzg0IDE0LjY4MDUgMTEuOTI4OSAxNS4wNzExQzEyLjMxOTUgMTUuNDYxNiAxMi45NTI2IDE1LjQ2MTYgMTMuMzQzMSAxNS4wNzExTDE5LjcwNzEgOC43MDcxMVpNLTguNzQyMjhlLTA4IDlMMTkgOUwxOSA3TDguNzQyMjhlLTA4IDdMLTguNzQyMjhlLTA4IDlaXCJcbiAgICAgICAgICBmaWxsPVwiIzE4MUYzM1wiXG4gICAgICAgID48L3BhdGg+XG4gICAgICA8L3N2Zz5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCIhaXNTZWxlY3RpbmdZZWFyXCIgKGNsaWNrKT1cInRvZ2dsZU1vbnRoU2VsZWN0b3IoKVwiIGNsYXNzPVwibW9udGgtaGVhZGVyXCI+XG4gICAgICB7eyBpc1llYXJTZWxlY3Rpb25GbG93ID8gc2VsZWN0ZWRZZWFyIDogYXZhaWxhYmxlTW9udGhzW2N1cnJlbnRNb250aE51bWJlcl0gfX1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiIWlzU2VsZWN0aW5nTW9udGhcIiAoY2xpY2spPVwidG9nZ2xlWWVhclNlbGVjdG9yKClcIiBjbGFzcz1cInllYXItaGVhZGVyXCI+XG4gICAgICB7eyBpc1NlbGVjdGluZ1llYXIgPyB5ZWFyUmFuZ2UgOiBjdXJyZW50WWVhck51bWJlciB9fVxuICAgIDwvZGl2PlxuXG5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImRhdGVwaWNrZXItY29udGFpbmVyX19hcnJvd19faWNvblwiXG4gICAgICAoY2xpY2spPVwibmF2aWdhdGVWaWV3KCdORVhUJylcIlxuICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgIGFyaWEtbGFiZWw9XCJOZXh0IE1vbnRoXCJcbiAgICAgIChrZXl1cC5lbnRlcik9XCJuYXZpZ2F0ZVZpZXcoJ05FWFQnKVwiXG4gICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICdkaXNhYmxlZC1tb250aCc6IGlzTmV4dE1vbnRoRGlzYWJsZWQgfHwgaXNTZWxlY3RpbmdNb250aFxuICAgICAgfVwiXG4gICAgPlxuICAgICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDIwIDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgZD1cIk0xOS43MDcxIDguNzA3MTFDMjAuMDk3NiA4LjMxNjU4IDIwLjA5NzYgNy42ODM0MiAxOS43MDcxIDcuMjkyODlMMTMuMzQzMSAwLjkyODkzM0MxMi45NTI2IDAuNTM4NDA5IDEyLjMxOTUgMC41Mzg0MDkgMTEuOTI4OSAwLjkyODkzM0MxMS41Mzg0IDEuMzE5NDYgMTEuNTM4NCAxLjk1MjYyIDExLjkyODkgMi4zNDMxNUwxNy41ODU4IDhMMTEuOTI4OSAxMy42NTY5QzExLjUzODQgMTQuMDQ3NCAxMS41Mzg0IDE0LjY4MDUgMTEuOTI4OSAxNS4wNzExQzEyLjMxOTUgMTUuNDYxNiAxMi45NTI2IDE1LjQ2MTYgMTMuMzQzMSAxNS4wNzExTDE5LjcwNzEgOC43MDcxMVpNLTguNzQyMjhlLTA4IDlMMTkgOUwxOSA3TDguNzQyMjhlLTA4IDdMLTguNzQyMjhlLTA4IDlaXCJcbiAgICAgICAgICBmaWxsPVwiIzE4MUYzM1wiXG4gICAgICAgID48L3BhdGg+XG4gICAgICA8L3N2Zz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJkYXRlcGlja2VyLWNvbnRhaW5lcl9fYm9keVwiPlxuXG4gICAgPGRpdiAqbmdJZj1cImlzU2VsZWN0aW5nTW9udGggJiYgIWlzU2VsZWN0aW5nWWVhclwiIGNsYXNzPVwibW9udGgtc2VsZWN0b3JcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgbW9udGggb2YgYXZhaWxhYmxlTW9udGhzOyBsZXQgaSA9IGluZGV4XCIgXG4gICAgICAgICAgICBjbGFzcz1cIm1vbnRoXCIgXG4gICAgICAgICAgICAoY2xpY2spPVwiIWRpc2FibGVkTW9udGhzW2ldICYmIHNlbGVjdE1vbnRoKG1vbnRoKVwiIFxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnZGlzYWJsZS1tb250aCc6IGRpc2FibGVkTW9udGhzW2ldLFxuICAgICAgICAgICAgICAnc2VsZWN0LW1vbnRoJzogIWRpc2FibGVkTW9udGhzW2N1cnJlbnRNb250aE51bWJlcl0gJiYgbW9udGggPT09IGF2YWlsYWJsZU1vbnRoc1tjdXJyZW50TW9udGhOdW1iZXJdXG4gICAgICAgICAgICB9XCI+XG4gICAgICAgICAge3sgbW9udGggfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgXG4gICAgPGRpdiAqbmdJZj1cImlzU2VsZWN0aW5nWWVhciAmJiAhaXNTZWxlY3RpbmdNb250aFwiIGNsYXNzPVwieWVhci1zZWxlY3RvclwiPlxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCB5ZWFyIG9mIGF2YWlsYWJsZVllYXJzOyBsZXQgaSA9IGluZGV4XCIgXG4gICAgICAgICAgICBjbGFzcz1cInllYXJcIiBcbiAgICAgICAgICAgIChjbGljayk9XCIhZGlzYWJsZWRZZWFyc1tpXSAmJiBzZWxlY3RZZWFyKHllYXIpXCIgXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdkaXNhYmxlLXllYXInOiBkaXNhYmxlZFllYXJzW2ldLFxuICAgICAgICAgICAgICAnc2VsZWN0LXllYXInOiB5ZWFyID09PSBjdXJyZW50WWVhck51bWJlclxuICAgICAgICAgICAgfVwiPlxuICAgICAgICAgIHt7IHllYXIgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCIhaXNTZWxlY3RpbmdNb250aCAmJiAhaXNTZWxlY3RpbmdZZWFyXCIgY2xhc3M9XCJkYXRlcGlja2VyLWNvbnRhaW5lcl9fd2Vla2RheXNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRlcGlja2VyLWNvbnRhaW5lcl9fd2Vla2RheVwiICpuZ0Zvcj1cImxldCB3ZWVrRGF5IG9mIHdlZWtEYXlzXCI+XG4gICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cInsgJ2N1cnJlbnQtZGF5Jzogd2Vla0RheS5pc0N1cnJlbnREYXkgfVwiPnt7IHdlZWtEYXkubGFiZWwgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiIWlzU2VsZWN0aW5nTW9udGggJiYgIWlzU2VsZWN0aW5nWWVhclwiIGNsYXNzPVwiZGF0ZXBpY2tlci1jb250YWluZXJfX2RheXNcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJkYXRlcGlja2VyLWNvbnRhaW5lcl9fZGF5XCJcbiAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICdzZWxlY3RlZC1kYXknOiAhbG9jYWxTZWxlY3RlZERhdGUgPyBkYXkuaXNTZWxlY3RlZERheSA6IGRheSA9PT0gbG9jYWxTZWxlY3RlZERhdGUsXG4gICAgICAgICAgJ2Rpc2FibGVkLWRheSc6IGRheS5pc0Rpc2FibGVkRGF5LFxuICAgICAgICAgICdpcy12YWxpZC1kYXRlJzogZGF5LmRhdGUgPiAwICYmICFkYXkuaXNTZWxlY3RlZERheVxuICAgICAgICB9XCJcbiAgICAgICAgKm5nRm9yPVwibGV0IGRheSBvZiBjdXJyZW50TW9udGhEYXRlc1wiXG4gICAgICAgIChjbGljayk9XCJzZWxlY3REYXkoZGF5KVwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJzZWxlY3REYXkoZGF5KVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgKm5nSWY9XCJkYXkuZGF0ZSA+IDBcIlxuICAgICAgICAgIFt0YWJpbmRleF09XCJkYXkuaXNEaXNhYmxlZERheSA/IC0xIDogMFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ2N1cnJlbnQtZGF5JzogZGF5LmlzQ3VycmVudERheSxcbiAgICAgICAgICAgICdzZWxlY3RlZC1kYXknOiAhbG9jYWxTZWxlY3RlZERhdGUgPyBkYXkuaXNTZWxlY3RlZERheSA6IGRheSA9PT0gbG9jYWxTZWxlY3RlZERhdGUsXG4gICAgICAgICAgICAnZGlzYWJsZWQtZGF5JzogZGF5LmlzRGlzYWJsZWREYXlcbiAgICAgICAgICB9XCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInJldHJhY3REYXlNb250aChkYXkuZGF0ZSwgY3VycmVudE1vbnRoLCBjdXJyZW50WWVhck51bWJlcilcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgZGF5LmRhdGUgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZGF0ZXBpY2tlci1jb250YWluZXJfX2Zvb3RlclwiICpuZ0lmPVwiZGF0YS5kcENvbmZpZy5zaG93QXBwbHlCdXR0b25cIj5cbiAgICA8YnV0dG9uIG1pcy1idXR0b24gc2l6ZT1cIm1kXCIgdHlwZT1cIidub25lJ1wiIChjbGljayk9XCJjYW5jZWxEYXRlUGlja2VyKClcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1pcy1idXR0b24gc2l6ZT1cIm1kXCIgdHlwZT1cInByaW1hcnlcIiAoY2xpY2spPVwiYXBwbHlEYXRlKClcIiBbZGlzYWJsZWRdPVwiIShkYXRhLmRhdGUgfHwgbG9jYWxTZWxlY3RlZERhdGUuZGF0ZSlcIj5BcHBseTwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19