mis-crystal-design-system 14.0.55-test-v2 → 14.0.55-test-v3

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 (36) hide show
  1. package/daterangepicker_v2/tz-drp-container/tz-drp-container.component.d.ts +1 -1
  2. package/dynamic-form/dynamic-form.component.d.ts +0 -1
  3. package/esm2020/datepicker_v2/tz-dp-container/tz-dp-container.component.mjs +24 -14
  4. package/esm2020/daterangepicker_v2/models/drp-config.model.mjs +1 -1
  5. package/esm2020/daterangepicker_v2/tz-drp-container/tz-drp-container.component.mjs +43 -35
  6. package/esm2020/dynamic-form/dynamic-form.component.mjs +11 -6
  7. package/esm2020/specificdatepicker/tz-sdp-container/tz-sdp-container.component.mjs +55 -41
  8. package/esm2020/timepicker/timepicker.component.mjs +54 -48
  9. package/esm2020/timerangepicker/timerangepicker.component.mjs +46 -42
  10. package/fesm2015/mis-crystal-design-system-datepicker_v2.mjs +23 -13
  11. package/fesm2015/mis-crystal-design-system-datepicker_v2.mjs.map +1 -1
  12. package/fesm2015/mis-crystal-design-system-daterangepicker_v2.mjs +43 -34
  13. package/fesm2015/mis-crystal-design-system-daterangepicker_v2.mjs.map +1 -1
  14. package/fesm2015/mis-crystal-design-system-dynamic-form.mjs +10 -4
  15. package/fesm2015/mis-crystal-design-system-dynamic-form.mjs.map +1 -1
  16. package/fesm2015/mis-crystal-design-system-specificdatepicker.mjs +54 -40
  17. package/fesm2015/mis-crystal-design-system-specificdatepicker.mjs.map +1 -1
  18. package/fesm2015/mis-crystal-design-system-timepicker.mjs +53 -47
  19. package/fesm2015/mis-crystal-design-system-timepicker.mjs.map +1 -1
  20. package/fesm2015/mis-crystal-design-system-timerangepicker.mjs +45 -41
  21. package/fesm2015/mis-crystal-design-system-timerangepicker.mjs.map +1 -1
  22. package/fesm2020/mis-crystal-design-system-datepicker_v2.mjs +23 -13
  23. package/fesm2020/mis-crystal-design-system-datepicker_v2.mjs.map +1 -1
  24. package/fesm2020/mis-crystal-design-system-daterangepicker_v2.mjs +42 -33
  25. package/fesm2020/mis-crystal-design-system-daterangepicker_v2.mjs.map +1 -1
  26. package/fesm2020/mis-crystal-design-system-dynamic-form.mjs +10 -4
  27. package/fesm2020/mis-crystal-design-system-dynamic-form.mjs.map +1 -1
  28. package/fesm2020/mis-crystal-design-system-specificdatepicker.mjs +54 -40
  29. package/fesm2020/mis-crystal-design-system-specificdatepicker.mjs.map +1 -1
  30. package/fesm2020/mis-crystal-design-system-timepicker.mjs +53 -47
  31. package/fesm2020/mis-crystal-design-system-timepicker.mjs.map +1 -1
  32. package/fesm2020/mis-crystal-design-system-timerangepicker.mjs +45 -41
  33. package/fesm2020/mis-crystal-design-system-timerangepicker.mjs.map +1 -1
  34. package/package.json +1 -1
  35. package/specificdatepicker/tz-sdp-container/tz-sdp-container.component.d.ts +1 -1
  36. package/timepicker/timepicker.component.d.ts +2 -2
@@ -1,8 +1,12 @@
1
1
  import { Component, HostListener, Inject } from "@angular/core";
2
2
  import { CONTAINER_DATA, DATE_FORMAT } from "../daterangepicker-constants";
3
- import { parseZone, tz } from "moment-timezone";
4
3
  import { getMonth } from "../utils";
5
- import moment from "moment-timezone";
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';
6
10
  import * as i0 from "@angular/core";
7
11
  import * as i1 from "mis-crystal-design-system/toast";
8
12
  import * as i2 from "@angular/common";
@@ -76,11 +80,16 @@ function TzDrpContainerComponent_div_31_Template(rf, ctx) { if (rf & 1) {
76
80
  i0.ɵɵproperty("ngIf", day_r12.date > 0);
77
81
  } }
78
82
  const _c1 = function (a0) { return { "disabled-month": a0 }; };
83
+ dayjs.extend(utc);
84
+ dayjs.extend(timezone);
85
+ dayjs.extend(customParseFormat);
86
+ dayjs.extend(isSameOrAfter);
87
+ dayjs.extend(isSameOrBefore);
79
88
  export class TzDrpContainerComponent {
80
89
  constructor(data, toast) {
81
90
  this.toast = toast;
82
- this.parseZoneInstance = (...args) => {
83
- return tz(args[0], args[1], this.data.dpConfig.timezone);
91
+ this.dayjsInstance = (...args) => {
92
+ return tz(args[0], args[1] || 'DD/MM/YYYY', this.data.dpConfig.timezone || 'Asia/Kolkata');
84
93
  };
85
94
  this.rawWeekDays = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"];
86
95
  this.weekDays = [];
@@ -97,19 +106,19 @@ export class TzDrpContainerComponent {
97
106
  this.isDatesValid = true;
98
107
  }
99
108
  if (this.data?.dpConfig?.timezone) {
100
- this.parseZoneInstance = (...args) => {
109
+ this.dayjsInstance = (...args) => {
101
110
  return tz(args[0], args[1], this.data.dpConfig.timezone);
102
111
  };
103
112
  }
104
- this.currentMonthNumber = this.parseZoneInstance().month();
105
- this.nextMonthNumber = this.parseZoneInstance().add(1, "month").month();
113
+ this.currentMonthNumber = this.dayjsInstance().month();
114
+ this.nextMonthNumber = this.dayjsInstance().add(1, "month").month();
106
115
  this.currentMonth = getMonth(this.currentMonthNumber);
107
116
  this.nextMonth = getMonth(this.nextMonthNumber);
108
- this.currentYearNumber = this.parseZoneInstance().year();
109
- this.nextYearNumber = this.parseZoneInstance().add(1, "month").year();
117
+ this.currentYearNumber = this.dayjsInstance().year();
118
+ this.nextYearNumber = this.dayjsInstance().add(1, "month").year();
110
119
  this.weekDays = this.rawWeekDays.map((day, index) => ({
111
120
  label: `${day[0]}${day.slice(1).toLowerCase()}`,
112
- isCurrentDay: this.parseZoneInstance().day() === index
121
+ isCurrentDay: this.dayjsInstance().day() === index
113
122
  }));
114
123
  if (!this.data?.dpConfig?.format) {
115
124
  this.data.dpConfig = {
@@ -134,12 +143,12 @@ export class TzDrpContainerComponent {
134
143
  this.nextMonthDates = this.generateDates(this.nextMonthNumber, this.nextYearNumber);
135
144
  return;
136
145
  }
137
- const selectedStartDate = this.parseZoneInstance(this.localSelectedDates?.startDate, this.data.dpConfig.format);
146
+ const selectedStartDate = !!this.localSelectedDates?.startDate ? this.dayjsInstance(this.localSelectedDates?.startDate, this.data.dpConfig.format) : dayjs('invalid');
138
147
  if (selectedStartDate.isValid()) {
139
148
  this.currentYearNumber = selectedStartDate.year();
140
149
  this.nextYearNumber = selectedStartDate.add(1, "month").year();
141
- this.currentMonthNumber = selectedStartDate.get("month") - 1;
142
- this.nextMonthNumber = selectedStartDate.add(1, "month").month() - 1;
150
+ this.currentMonthNumber = selectedStartDate.get("month");
151
+ this.nextMonthNumber = selectedStartDate.add(1, "month").month();
143
152
  if (this.currentMonthNumber === -1) {
144
153
  this.currentMonthNumber = 11;
145
154
  }
@@ -153,18 +162,18 @@ export class TzDrpContainerComponent {
153
162
  this.nextMonthDates = this.generateDates(this.nextMonthNumber, this.nextYearNumber);
154
163
  }
155
164
  calculateMinMaxDays() {
156
- const currentInstance = this.parseZoneInstance().year(this.currentYearNumber).month(this.currentMonthNumber);
157
- const minDate = this.parseZoneInstance(this.data.dpConfig.minDate, this.data.dpConfig.format);
165
+ const currentInstance = this.dayjsInstance().year(this.currentYearNumber).month(this.currentMonthNumber);
166
+ const minDate = !!this.data.dpConfig.minDate ? this.dayjsInstance(this.data.dpConfig.minDate, this.data.dpConfig.format) : dayjs('invalid');
158
167
  if (minDate.isValid()) {
159
168
  this.isPreviousMonthDisabled = minDate.isSameOrAfter(currentInstance, "month");
160
169
  }
161
- const maxDate = this.parseZoneInstance(this.data.dpConfig.maxDate, this.data.dpConfig.format);
170
+ const maxDate = !!this.data.dpConfig.maxDate ? this.dayjsInstance(this.data.dpConfig.maxDate, this.data.dpConfig.format) : dayjs('invalid');
162
171
  if (maxDate.isValid()) {
163
172
  this.isNextMonthDisabled = maxDate.isSameOrBefore(currentInstance, "month");
164
173
  }
165
174
  }
166
175
  navigateMonth(direction) {
167
- let thisMonth = parseZone().year(this.currentYearNumber).month(this.currentMonthNumber);
176
+ let thisMonth = dayjs().year(this.currentYearNumber).month(this.currentMonthNumber);
168
177
  if (direction === "NEXT") {
169
178
  thisMonth = thisMonth.add(1, "month");
170
179
  }
@@ -196,27 +205,27 @@ export class TzDrpContainerComponent {
196
205
  }
197
206
  generateDates(month, currentYearNumber) {
198
207
  let dates = [];
199
- const daysInMonth = parseZone().year(currentYearNumber).month(month).daysInMonth();
208
+ const daysInMonth = dayjs().year(currentYearNumber).month(month).daysInMonth();
200
209
  for (let currentDate = 1; currentDate <= daysInMonth; currentDate++) {
201
- const date = moment().year(currentYearNumber).month(month).date(currentDate);
210
+ const date = dayjs().year(currentYearNumber).month(month).date(currentDate);
202
211
  const dateString = date.format(this.data.dpConfig.format);
203
212
  let isDisabledDay = this.data.datesDisabled.some(d => d === dateString);
204
- const minDate = this.parseZoneInstance(this.data.dpConfig.minDate, this.data.dpConfig.format);
213
+ const minDate = !!this.data.dpConfig.minDate ? this.dayjsInstance(this.data.dpConfig.minDate, this.data.dpConfig.format) : dayjs('invalid');
205
214
  if (!isDisabledDay && minDate.isValid()) {
206
- let Date = this.parseZoneInstance().year(currentYearNumber).month(month).date(currentDate);
207
- isDisabledDay = minDate.isAfter(Date, "day");
215
+ let Date = this.dayjsInstance().year(currentYearNumber).month(month).date(currentDate);
216
+ isDisabledDay = minDate.isAfter(dayjs(Date, this.data.dpConfig.format), "day");
208
217
  }
209
- const maxDate = this.parseZoneInstance(this.data.dpConfig.maxDate, this.data.dpConfig.format);
218
+ const maxDate = !!this.data.dpConfig.maxDate ? this.dayjsInstance(this.data.dpConfig.maxDate, this.data.dpConfig.format) : dayjs('invalid');
210
219
  if (!isDisabledDay && maxDate.isValid()) {
211
- isDisabledDay = maxDate.isBefore(date, "day");
220
+ isDisabledDay = maxDate.isBefore(dayjs(date, this.data.dpConfig.format), "day");
212
221
  }
213
- const isCurrentDay = this.parseZoneInstance().year(currentYearNumber).month(month).date(currentDate).format(this.data.dpConfig.format) ===
214
- this.parseZoneInstance().format(this.data.dpConfig.format);
222
+ const isCurrentDay = this.dayjsInstance().year(currentYearNumber).month(month).date(currentDate).format(this.data.dpConfig.format) ===
223
+ this.dayjsInstance().format(this.data.dpConfig.format);
215
224
  const isSelectedStartDay = !isDisabledDay &&
216
225
  (this.localSelectedDates?.startDate ?? false) &&
217
226
  date.format(this.data.dpConfig.format) === this.localSelectedDates?.startDate;
218
- const isAfterSelectedStartDate = moment(date, this.data?.dpConfig?.format).startOf('day').isAfter(moment(this.localSelectedDates.startDate, this.data?.dpConfig?.format).startOf('day'), 'day');
219
- const isBeforeSelectedEndDate = moment(date, this.data?.dpConfig?.format).startOf('day').isBefore(moment(this.localSelectedDates.endDate, this.data?.dpConfig?.format).startOf('day'), 'day');
227
+ const isAfterSelectedStartDate = dayjs(date, this.data?.dpConfig?.format).startOf('day').isAfter(dayjs(this.localSelectedDates.startDate, this.data?.dpConfig?.format).startOf('day'), 'day');
228
+ const isBeforeSelectedEndDate = dayjs(date, this.data?.dpConfig?.format).startOf('day').isBefore(dayjs(this.localSelectedDates.endDate, this.data?.dpConfig?.format).startOf('day'), 'day');
220
229
  const inRangeDay = (this.localSelectedDates.startDate ?? false) &&
221
230
  (this.localSelectedDates.endDate ?? false) &&
222
231
  isAfterSelectedStartDate &&
@@ -245,14 +254,13 @@ export class TzDrpContainerComponent {
245
254
  return;
246
255
  if (!day.isDisabledDay) {
247
256
  if (this.selectionStarted) {
248
- const momentDay = parseZone()
257
+ const dayjsDay = dayjs()
249
258
  .year(from === "LEFT" ? this.currentYearNumber : this.nextYearNumber)
250
259
  .month(from === "LEFT" ? this.currentMonthNumber : this.nextMonthNumber)
251
260
  .date(day.date);
252
- const startDate = parseZone(this.localSelectedDates.startDate, this.data.dpConfig.format);
253
- if (momentDay.isBefore(startDate, "day")) {
261
+ if (dayjsDay.isBefore(dayjs(this.localSelectedDates.startDate, this.data.dpConfig.format), 'day')) {
254
262
  this.localSelectedDates = {
255
- startDate: momentDay.format(this.data.dpConfig.format),
263
+ startDate: dayjsDay.format(this.data.dpConfig.format),
256
264
  endDate: null
257
265
  };
258
266
  this.currentMonthDates = this.generateDates(this.currentMonthNumber, this.currentYearNumber);
@@ -262,13 +270,13 @@ export class TzDrpContainerComponent {
262
270
  this.selectionStarted = false;
263
271
  this.localSelectedDates = {
264
272
  ...this.localSelectedDates,
265
- endDate: momentDay.format(this.data.dpConfig.format)
273
+ endDate: dayjsDay.format(this.data.dpConfig.format)
266
274
  };
267
275
  }
268
276
  else {
269
277
  this.selectionStarted = true;
270
278
  this.localSelectedDates = {
271
- startDate: parseZone()
279
+ startDate: dayjs()
272
280
  .year(from === "LEFT" ? this.currentYearNumber : this.nextYearNumber)
273
281
  .month(from === "LEFT" ? this.currentMonthNumber : this.nextMonthNumber)
274
282
  .date(day.date)
@@ -383,4 +391,4 @@ TzDrpContainerComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TzD
383
391
  type: HostListener,
384
392
  args: ["keydown.esc"]
385
393
  }] }); })();
386
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHotZHJwLWNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9taXMtY29tcG9uZW50cy9kYXRlcmFuZ2VwaWNrZXJfdjIvdHotZHJwLWNvbnRhaW5lci90ei1kcnAtY29udGFpbmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21pcy1jb21wb25lbnRzL2RhdGVyYW5nZXBpY2tlcl92Mi90ei1kcnAtY29udGFpbmVyL3R6LWRycC1jb250YWluZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFM0UsT0FBTyxFQUFFLFNBQVMsRUFBVSxFQUFFLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXBDLE9BQU8sTUFBTSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7O0lDdUMzQiwrQkFBaUYsV0FBQTtJQUN6RSxZQUFtQjtJQUFBLGlCQUFPLEVBQUE7OztJQUExQixlQUFtQjtJQUFuQixzQ0FBbUI7OztJQWtCekIsZ0NBRWlGO0lBQy9FLFlBQ0Y7SUFBQSxpQkFBTzs7OztJQUhMLHdEQUF1QztJQUN2QyxnSEFBOEU7SUFDOUUsZUFDRjtJQURFLDRDQUNGOzs7OztJQWxCRiwrQkFhQztJQUZDLDROQUFTLGVBQUEsaUJBQVUsTUFBTSxTQUFNLENBQUEsSUFBQyw0TkFDakIsZUFBQSxrQkFBVSxNQUFNLFNBQU0sQ0FBQSxJQURMO0lBR2hDLGtGQUlPO0lBQ1QsaUJBQU07OztJQWpCSixtUkFPRTtJQUtLLGVBQWtCO0lBQWxCLHNDQUFrQjs7O0lBZ0MzQiwrQkFBaUYs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LEVBQUEsRUFBQTtRQUlaLGdDQUFxQyxrQkFBQTtRQUNtQixxR0FBUyxzQkFBa0IsSUFBQztRQUFDLHVCQUFNO1FBQUEsaUJBQVM7UUFDbEcsbUNBQTJHO1FBQWxELHFHQUFTLGdCQUFZLElBQUM7UUFBNEIsc0JBQUs7UUFBQSxpQkFBUyxFQUFBLEVBQUE7O1FBL0gxQyw4Q0FBZ0M7UUFXekcsZUFFRTtRQUZGLGtGQUVFO1FBU0csZUFBMkM7UUFBM0MsNkVBQTJDO1FBU2hELGVBRUU7UUFGRiw4RUFFRTtRQVlrRSxlQUFXO1FBQVgsc0NBQVc7UUFlN0QsZUFBb0I7UUFBcEIsK0NBQW9CO1FBZ0JqQyxlQUFxQztRQUFyQyx1RUFBcUM7UUFNMUMsZUFFRTtRQUZGLDhFQUVFO1FBWWtFLGVBQVc7UUFBWCxzQ0FBVztRQWU3RCxlQUFpQjtRQUFqQiw0Q0FBaUI7UUFnQnVDLGVBQTBCO1FBQTFCLDRDQUEwQjs7dUZEbEhqRyx1QkFBdUI7Y0FMbkMsU0FBUzsyQkFDRSxZQUFZOztzQkF3QlQsTUFBTTt1QkFBQyxjQUFjO21EQXdDbEMsVUFBVTtrQkFEVCxZQUFZO21CQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBPbkluaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQ09OVEFJTkVSX0RBVEEsIERBVEVfRk9STUFUIH0gZnJvbSBcIi4uL2RhdGVyYW5nZXBpY2tlci1jb25zdGFudHNcIjtcbmltcG9ydCB7IElDdXJyZW50TW9udGgsIElDdXJyZW50TW9udGhEYXRlcywgSURhdGVQaWNrZXJEYXRhLCBJV2Vla0RheSwgSVNlbGVjdGVkRGF0ZXNDb25maWcgfSBmcm9tIFwiLi4vbW9kZWxzL2RycC1jb25maWcubW9kZWxcIjtcbmltcG9ydCB7IHBhcnNlWm9uZSwgTW9tZW50LCB0eiB9IGZyb20gXCJtb21lbnQtdGltZXpvbmVcIjtcbmltcG9ydCB7IGdldE1vbnRoIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tIFwibWlzLWNyeXN0YWwtZGVzaWduLXN5c3RlbS90b2FzdFwiO1xuaW1wb3J0IG1vbWVudCBmcm9tIFwibW9tZW50LXRpbWV6b25lXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJtaXMtdHotZHJwXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vdHotZHJwLWNvbnRhaW5lci5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vdHotZHJwLWNvbnRhaW5lci5jb21wb25lbnQuc2Nzc1wiXVxufSlcbmV4cG9ydCBjbGFzcyBUekRycENvbnRhaW5lckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGRhdGE6IElEYXRlUGlja2VyRGF0YTtcbiAgcHJpdmF0ZSBwYXJzZVpvbmVJbnN0YW5jZSA9ICguLi5hcmdzKSA9PiB7XG4gICAgcmV0dXJuIHR6KGFyZ3NbMF0sIGFyZ3NbMV0sIHRoaXMuZGF0YS5kcENvbmZpZy50aW1lem9uZSk7XG4gIH07XG4gIHByaXZhdGUgcmF3V2Vla0RheXM6IHN0cmluZ1tdID0gW1wiU1VOXCIsIFwiTU9OXCIsIFwiVFVFXCIsIFwiV0VEXCIsIFwiVEhVXCIsIFwiRlJJXCIsIFwiU0FUXCJdO1xuICB3ZWVrRGF5czogSVdlZWtEYXlbXSA9IFtdO1xuICBjdXJyZW50TW9udGhOdW1iZXI6IG51bWJlcjtcbiAgY3VycmVudE1vbnRoOiBJQ3VycmVudE1vbnRoO1xuICBjdXJyZW50WWVhck51bWJlcjogbnVtYmVyO1xuICBjdXJyZW50TW9udGhEYXRlczogSUN1cnJlbnRNb250aERhdGVzW10gPSBbXTtcbiAgbmV4dE1vbnRoTnVtYmVyOiBudW1iZXI7XG4gIG5leHRNb250aDogSUN1cnJlbnRNb250aDtcbiAgbmV4dFllYXJOdW1iZXI6IG51bWJlcjtcbiAgbmV4dE1vbnRoRGF0ZXM6IElDdXJyZW50TW9udGhEYXRlc1tdID0gW107XG4gIGlzUHJldmlvdXNNb250aERpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzTmV4dE1vbnRoRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2VsZWN0aW9uU3RhcnRlZCA9IGZhbHNlO1xuICBsb2NhbFNlbGVjdGVkRGF0ZXM6IElTZWxlY3RlZERhdGVzQ29uZmlnO1xuICBpc0RhdGVzVmFsaWQgPSBmYWxzZTtcbiAgY29uc3RydWN0b3IoQEluamVjdChDT05UQUlORVJfREFUQSkgZGF0YTogSURhdGVQaWNrZXJEYXRhLCBwcml2YXRlIHRvYXN0OiBUb2FzdFNlcnZpY2UpIHtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIHRoaXMubG9jYWxTZWxlY3RlZERhdGVzID0gdGhpcy5kYXRhLmRhdGVzO1xuICAgIHRoaXMuaXNEYXRlc1ZhbGlkID0gZmFsc2U7XG4gICAgaWYgKHRoaXMubG9jYWxTZWxlY3RlZERhdGVzLnN0YXJ0RGF0ZSAmJiB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcy5lbmREYXRlKSB7XG4gICAgICB0aGlzLmlzRGF0ZXNWYWxpZCA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGE/LmRwQ29uZmlnPy50aW1lem9uZSkge1xuICAgICAgdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIHJldHVybiB0eihhcmdzWzBdLCBhcmdzWzFdLCB0aGlzLmRhdGEuZHBDb25maWcudGltZXpvbmUpO1xuICAgICAgfTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50TW9udGhOdW1iZXIgPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKCkubW9udGgoKTtcbiAgICB0aGlzLm5leHRNb250aE51bWJlciA9IHRoaXMucGFyc2Vab25lSW5zdGFuY2UoKS5hZGQoMSwgXCJtb250aFwiKS5tb250aCgpO1xuICAgIHRoaXMuY3VycmVudE1vbnRoID0gZ2V0TW9udGgodGhpcy5jdXJyZW50TW9udGhOdW1iZXIpO1xuICAgIHRoaXMubmV4dE1vbnRoID0gZ2V0TW9udGgodGhpcy5uZXh0TW9udGhOdW1iZXIpO1xuICAgIHRoaXMuY3VycmVudFllYXJOdW1iZXIgPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKCkueWVhcigpO1xuICAgIHRoaXMubmV4dFllYXJOdW1iZXIgPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKCkuYWRkKDEsIFwibW9udGhcIikueWVhcigpO1xuICAgIHRoaXMud2Vla0RheXMgPSB0aGlzLnJhd1dlZWtEYXlzLm1hcCgoZGF5LCBpbmRleCkgPT4gKHtcbiAgICAgIGxhYmVsOiBgJHtkYXlbMF19JHtkYXkuc2xpY2UoMSkudG9Mb3dlckNhc2UoKX1gLFxuICAgICAgaXNDdXJyZW50RGF5OiB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKCkuZGF5KCkgPT09IGluZGV4XG4gICAgfSkpO1xuICAgIGlmICghdGhpcy5kYXRhPy5kcENvbmZpZz8uZm9ybWF0KSB7XG4gICAgICB0aGlzLmRhdGEuZHBDb25maWcgPSB7XG4gICAgICAgIC4uLnRoaXMuZGF0YS5kcENvbmZpZyxcbiAgICAgICAgZm9ybWF0OiBEQVRFX0ZPUk1BVFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnREYXRlSW5zdGFuY2UoKTtcbiAgICB0aGlzLmNhbGN1bGF0ZU1pbk1heERheXMoKTtcbiAgfVxuXG4gIHJldHJhY3REYXlNb250aChkYXk6IGFueSwgbW9udGg6IGFueSwgeWVhcjogYW55KTogYW55IHtcbiAgICByZXR1cm4gYCR7ZGF5fSAke21vbnRofSAke3llYXJ9YDtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoXCJrZXlkb3duLmVzY1wiKVxuICBjbG9zZU9uRXNjKCkge1xuICAgIHRoaXMuY2FuY2VsRGF0ZVBpY2tlcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBjdXJyZW50RGF0ZUluc3RhbmNlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXM/LnN0YXJ0RGF0ZSkge1xuICAgICAgdGhpcy5jdXJyZW50TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLmN1cnJlbnRNb250aE51bWJlciwgdGhpcy5jdXJyZW50WWVhck51bWJlcik7XG4gICAgICB0aGlzLm5leHRNb250aERhdGVzID0gdGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMubmV4dE1vbnRoTnVtYmVyLCB0aGlzLm5leHRZZWFyTnVtYmVyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2VsZWN0ZWRTdGFydERhdGUgPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKHRoaXMubG9jYWxTZWxlY3RlZERhdGVzPy5zdGFydERhdGUsIHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpO1xuICAgIGlmIChzZWxlY3RlZFN0YXJ0RGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgIHRoaXMuY3VycmVudFllYXJOdW1iZXIgPSBzZWxlY3RlZFN0YXJ0RGF0ZS55ZWFyKCk7XG4gICAgICB0aGlzLm5leHRZZWFyTnVtYmVyID0gc2VsZWN0ZWRTdGFydERhdGUuYWRkKDEsIFwibW9udGhcIikueWVhcigpO1xuICAgICAgdGhpcy5jdXJyZW50TW9udGhOdW1iZXIgPSBzZWxlY3RlZFN0YXJ0RGF0ZS5nZXQoXCJtb250aFwiKSAtIDE7XG4gICAgICB0aGlzLm5leHRNb250aE51bWJlciA9IHNlbGVjdGVkU3RhcnREYXRlLmFkZCgxLCBcIm1vbnRoXCIpLm1vbnRoKCkgLSAxO1xuICAgICAgaWYodGhpcy5jdXJyZW50TW9udGhOdW1iZXIgPT09IC0xKXtcbiAgICAgICAgdGhpcy5jdXJyZW50TW9udGhOdW1iZXIgPSAxMVxuICAgICAgfVxuICAgICAgaWYodGhpcy5uZXh0TW9udGhOdW1iZXIgPT09IC0xKXtcbiAgICAgICAgdGhpcy5uZXh0TW9udGhOdW1iZXIgPSAxMVxuICAgICAgfVxuICAgICAgdGhpcy5jdXJyZW50TW9udGggPSBnZXRNb250aCh0aGlzLmN1cnJlbnRNb250aE51bWJlcik7XG4gICAgICB0aGlzLm5leHRNb250aCA9IGdldE1vbnRoKHRoaXMubmV4dE1vbnRoTnVtYmVyKTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLmN1cnJlbnRNb250aE51bWJlciwgdGhpcy5jdXJyZW50WWVhck51bWJlcik7XG4gICAgdGhpcy5uZXh0TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLm5leHRNb250aE51bWJlciwgdGhpcy5uZXh0WWVhck51bWJlcik7XG4gIH1cblxuICBwcml2YXRlIGNhbGN1bGF0ZU1pbk1heERheXMoKSB7XG4gICAgY29uc3QgY3VycmVudEluc3RhbmNlID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLnllYXIodGhpcy5jdXJyZW50WWVhck51bWJlcikubW9udGgodGhpcy5jdXJyZW50TW9udGhOdW1iZXIpO1xuICAgIGNvbnN0IG1pbkRhdGUgPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKHRoaXMuZGF0YS5kcENvbmZpZy5taW5EYXRlLCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KTtcbiAgICBpZiAobWluRGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgIHRoaXMuaXNQcmV2aW91c01vbnRoRGlzYWJsZWQgPSBtaW5EYXRlLmlzU2FtZU9yQWZ0ZXIoY3VycmVudEluc3RhbmNlLCBcIm1vbnRoXCIpO1xuICAgIH1cbiAgICBjb25zdCBtYXhEYXRlID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSh0aGlzLmRhdGEuZHBDb25maWcubWF4RGF0ZSwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCk7XG4gICAgaWYgKG1heERhdGUuaXNWYWxpZCgpKSB7XG4gICAgICB0aGlzLmlzTmV4dE1vbnRoRGlzYWJsZWQgPSBtYXhEYXRlLmlzU2FtZU9yQmVmb3JlKGN1cnJlbnRJbnN0YW5jZSwgXCJtb250aFwiKTtcbiAgICB9XG4gIH1cblxuICBuYXZpZ2F0ZU1vbnRoKGRpcmVjdGlvbjogXCJORVhUXCIgfCBcIlBSRVZJT1VTXCIpOiB2b2lkIHtcbiAgICBsZXQgdGhpc01vbnRoOiBNb21lbnQgPSBwYXJzZVpvbmUoKS55ZWFyKHRoaXMuY3VycmVudFllYXJOdW1iZXIpLm1vbnRoKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyKTtcbiAgICBpZiAoZGlyZWN0aW9uID09PSBcIk5FWFRcIikge1xuICAgICB0aGlzTW9udGggPSB0aGlzTW9udGguYWRkKDEsIFwibW9udGhcIik7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IFwiUFJFVklPVVNcIikge1xuICAgICB0aGlzTW9udGggPSB0aGlzTW9udGguc3VidHJhY3QoMSwgXCJtb250aFwiKTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50TW9udGhOdW1iZXIgPSB0aGlzTW9udGgubW9udGgoKTtcbiAgICB0aGlzLm5leHRNb250aE51bWJlciA9IHRoaXNNb250aC5jbG9uZSgpLmFkZCgxLCBcIm1vbnRoXCIpLm1vbnRoKCk7XG4gICAgdGhpcy5jdXJyZW50TW9udGggPSBnZXRNb250aCh0aGlzLmN1cnJlbnRNb250aE51bWJlcik7XG4gICAgdGhpcy5uZXh0TW9udGggPSBnZXRNb250aCh0aGlzLm5leHRNb250aE51bWJlcik7XG4gICAgaWYgKHRoaXMubmV4dE1vbnRoTnVtYmVyID09PSAwICYmIGRpcmVjdGlvbiA9PT0gXCJQUkVWSU9VU1wiKSB7XG4gICAgIHRoaXMuY3VycmVudFllYXJOdW1iZXItLTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyID09PSAxMSAmJiBkaXJlY3Rpb24gPT09IFwiTkVYVFwiKSB7XG4gICAgIHRoaXMubmV4dFllYXJOdW1iZXIrKztcbiAgICB9ZWxzZSBpZiAodGhpcy5jdXJyZW50TW9udGhOdW1iZXIgPT09IDAgJiYgZGlyZWN0aW9uID09PSBcIk5FWFRcIikge1xuICAgICB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyKys7XG4gICAgfSBlbHNlIGlmICh0aGlzLm5leHRNb250aE51bWJlciA9PT0gMTEgJiYgZGlyZWN0aW9uID09PSBcIlBSRVZJT1VTXCIpIHtcbiAgICAgdGhpcy5uZXh0WWVhck51bWJlci0tO1xuICAgIH1lbHNle1xuICAgICB0aGlzLm5leHRZZWFyTnVtYmVyID0gdGhpcy5jdXJyZW50WWVhck51bWJlcjtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLmN1cnJlbnRNb250aE51bWJlciwgdGhpcy5jdXJyZW50WWVhck51bWJlcik7XG4gICAgdGhpcy5uZXh0TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLm5leHRNb250aE51bWJlciwgdGhpcy5uZXh0WWVhck51bWJlcik7XG4gICAgdGhpcy5jYWxjdWxhdGVNaW5NYXhEYXlzKCk7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlRGF0ZXMobW9udGg6IG51bWJlciwgY3VycmVudFllYXJOdW1iZXI6IG51bWJlcik6IElDdXJyZW50TW9udGhEYXRlc1tdIHtcbiAgICBsZXQgZGF0ZXM6IElDdXJyZW50TW9udGhEYXRlc1tdID0gW107XG4gICAgY29uc3QgZGF5c0luTW9udGggPSBwYXJzZVpvbmUoKS55ZWFyKGN1cnJlbnRZZWFyTnVtYmVyKS5tb250aChtb250aCkuZGF5c0luTW9udGgoKTtcbiAgICBmb3IgKGxldCBjdXJyZW50RGF0ZSA9IDE7IGN1cnJlbnREYXRlIDw9IGRheXNJbk1vbnRoOyBjdXJyZW50RGF0ZSsrKSB7XG4gICAgICBjb25zdCBkYXRlID0gbW9tZW50KCkueWVhcihjdXJyZW50WWVhck51bWJlcikubW9udGgobW9udGgpLmRhdGUoY3VycmVudERhdGUpO1xuICAgICAgY29uc3QgZGF0ZVN0cmluZyA9IGRhdGUuZm9ybWF0KHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgbGV0IGlzRGlzYWJsZWREYXkgPSB0aGlzLmRhdGEuZGF0ZXNEaXNhYmxlZC5zb21lKGQgPT4gZCA9PT0gZGF0ZVN0cmluZyk7XG4gICAgICBjb25zdCBtaW5EYXRlID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSh0aGlzLmRhdGEuZHBDb25maWcubWluRGF0ZSwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCk7XG4gICAgICBpZiAoIWlzRGlzYWJsZWREYXkgJiYgbWluRGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgbGV0IERhdGUgPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKCkueWVhcihjdXJyZW50WWVhck51bWJlcikubW9udGgobW9udGgpLmRhdGUoY3VycmVudERhdGUpO1xuICAgICAgICBpc0Rpc2FibGVkRGF5ID0gbWluRGF0ZS5pc0FmdGVyKERhdGUsIFwiZGF5XCIpO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF4RGF0ZSA9IHRoaXMucGFyc2Vab25lSW5zdGFuY2UodGhpcy5kYXRhLmRwQ29uZmlnLm1heERhdGUsIHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgaWYgKCFpc0Rpc2FibGVkRGF5ICYmIG1heERhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgIGlzRGlzYWJsZWREYXkgPSBtYXhEYXRlLmlzQmVmb3JlKGRhdGUsIFwiZGF5XCIpO1xuICAgICAgfVxuICAgICAgY29uc3QgaXNDdXJyZW50RGF5ID1cbiAgICAgICAgdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLnllYXIoY3VycmVudFllYXJOdW1iZXIpLm1vbnRoKG1vbnRoKS5kYXRlKGN1cnJlbnREYXRlKS5mb3JtYXQodGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCkgPT09XG4gICAgICAgIHRoaXMucGFyc2Vab25lSW5zdGFuY2UoKS5mb3JtYXQodGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCk7XG4gICAgICBjb25zdCBpc1NlbGVjdGVkU3RhcnREYXkgPVxuICAgICAgICAhaXNEaXNhYmxlZERheSAmJlxuICAgICAgICAodGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXM/LnN0YXJ0RGF0ZSA/PyBmYWxzZSkgJiZcbiAgICAgICAgZGF0ZS5mb3JtYXQodGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCkgPT09IHRoaXMubG9jYWxTZWxlY3RlZERhdGVzPy5zdGFydERhdGU7XG4gICAgICBjb25zdCBpc0FmdGVyU2VsZWN0ZWRTdGFydERhdGUgPSAgbW9tZW50KGRhdGUsdGhpcy5kYXRhPy5kcENvbmZpZz8uZm9ybWF0KS5zdGFydE9mKCdkYXknKS5pc0FmdGVyKG1vbWVudCh0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcy5zdGFydERhdGUsdGhpcy5kYXRhPy5kcENvbmZpZz8uZm9ybWF0KS5zdGFydE9mKCdkYXknKSwgJ2RheScpO1xuXG4gICAgICBjb25zdCBpc0JlZm9yZVNlbGVjdGVkRW5kRGF0ZSA9IG1vbWVudChkYXRlLHRoaXMuZGF0YT8uZHBDb25maWc/LmZvcm1hdCkuc3RhcnRPZignZGF5JykuaXNCZWZvcmUobW9tZW50KHRoaXMubG9jYWxTZWxlY3RlZERhdGVzLmVuZERhdGUsdGhpcy5kYXRhPy5kcENvbmZpZz8uZm9ybWF0KS5zdGFydE9mKCdkYXknKSwgJ2RheScpO1xuICAgICAgY29uc3QgaW5SYW5nZURheSA9XG4gICAgICAgICh0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcy5zdGFydERhdGUgPz8gZmFsc2UpICYmXG4gICAgICAgICh0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcy5lbmREYXRlID8/IGZhbHNlKSAmJlxuICAgICAgICBpc0FmdGVyU2VsZWN0ZWRTdGFydERhdGUgJiZcbiAgICAgICAgaXNCZWZvcmVTZWxlY3RlZEVuZERhdGU7XG4gICAgICBjb25zdCBpc1NlbGVjdGVkRW5kRGF5ID1cbiAgICAgICAgIWlzRGlzYWJsZWREYXkgJiZcbiAgICAgICAgKCh0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcz8uc3RhcnREYXRlICYmIHRoaXMubG9jYWxTZWxlY3RlZERhdGVzPy5lbmREYXRlKSA/PyBmYWxzZSkgJiZcbiAgICAgICAgZGF0ZS5mb3JtYXQodGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCkgPT09IHRoaXMubG9jYWxTZWxlY3RlZERhdGVzPy5lbmREYXRlO1xuICAgICAgZGF0ZXMucHVzaCh7XG4gICAgICAgIGRhdGU6IGN1cnJlbnREYXRlLFxuICAgICAgICB3ZWVrRGF5OiBkYXRlLmRheSgpLFxuICAgICAgICBpc0N1cnJlbnREYXksXG4gICAgICAgIGlzU2VsZWN0ZWRTdGFydERheSxcbiAgICAgICAgaXNTZWxlY3RlZEVuZERheSxcbiAgICAgICAgaW5SYW5nZURheSxcbiAgICAgICAgdG9hc3RNZXNzYWdlOiB0aGlzLmRhdGEubWVzc2FnZXMuZmluZChxID0+IGRhdGUuZm9ybWF0KHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpID09PSBxLmRhdGUpPy5tZXNzYWdlIHx8IFwiXCIsXG4gICAgICAgIGlzRGlzYWJsZWREYXlcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gZGF0ZXNbMF0ud2Vla0RheTsgaSA+IDA7IGktLSkge1xuICAgICAgZGF0ZXMudW5zaGlmdCh7IGRhdGU6IDAsIHdlZWtEYXk6IGkgLSAxIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZGF0ZXM7XG4gIH1cblxuICBzZWxlY3REYXkoZnJvbTogXCJMRUZUXCIgfCBcIlJJR0hUXCIsIGRheTogSUN1cnJlbnRNb250aERhdGVzKSB7XG4gICAgaWYgKGRheS5kYXRlIDw9IDApIHJldHVybjtcbiAgICBpZiAoIWRheS5pc0Rpc2FibGVkRGF5KSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3Rpb25TdGFydGVkKSB7XG4gICAgICAgXG4gICAgICAgIGNvbnN0IG1vbWVudERheSA9IHBhcnNlWm9uZSgpXG4gICAgICAgICAgLnllYXIoZnJvbSA9PT0gXCJMRUZUXCIgPyB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyIDogdGhpcy5uZXh0WWVhck51bWJlcilcbiAgICAgICAgICAubW9udGgoZnJvbSA9PT0gXCJMRUZUXCIgPyB0aGlzLmN1cnJlbnRNb250aE51bWJlciA6IHRoaXMubmV4dE1vbnRoTnVtYmVyKVxuICAgICAgICAgIC5kYXRlKGRheS5kYXRlKTtcbiAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gcGFyc2Vab25lKHRoaXMubG9jYWxTZWxlY3RlZERhdGVzLnN0YXJ0RGF0ZSwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCk7ICAgIFxuICAgICAgICBpZiAobW9tZW50RGF5LmlzQmVmb3JlKHN0YXJ0RGF0ZSwgXCJkYXlcIikpIHtcbiAgICAgICAgICB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcyA9IHtcbiAgICAgICAgICAgIHN0YXJ0RGF0ZTogbW9tZW50RGF5LmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KSxcbiAgICAgICAgICAgIGVuZERhdGU6IG51bGxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgdGhpcy5jdXJyZW50TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLmN1cnJlbnRNb250aE51bWJlciwgdGhpcy5jdXJyZW50WWVhck51bWJlcik7XG4gICAgICAgICAgdGhpcy5uZXh0TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLm5leHRNb250aE51bWJlciwgdGhpcy5uZXh0WWVhck51bWJlcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcyA9IHtcbiAgICAgICAgICAuLi50aGlzLmxvY2FsU2VsZWN0ZWREYXRlcyxcbiAgICAgICAgICBlbmREYXRlOiBtb21lbnREYXkuZm9ybWF0KHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcyA9IHtcbiAgICAgICAgICBzdGFydERhdGU6IHBhcnNlWm9uZSgpXG4gICAgICAgICAgICAueWVhcihmcm9tID09PSBcIkxFRlRcIiA/IHRoaXMuY3VycmVudFllYXJOdW1iZXIgOiB0aGlzLm5leHRZZWFyTnVtYmVyKVxuICAgICAgICAgICAgLm1vbnRoKGZyb20gPT09IFwiTEVGVFwiID8gdGhpcy5jdXJyZW50TW9udGhOdW1iZXIgOiB0aGlzLm5leHRNb250aE51bWJlcilcbiAgICAgICAgICAgIC5kYXRlKGRheS5kYXRlKVxuICAgICAgICAgICAgLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KSxcbiAgICAgICAgICBlbmREYXRlOiBudWxsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB0aGlzLmN1cnJlbnRNb250aERhdGVzID0gdGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyLCB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyKTtcbiAgICAgIHRoaXMubmV4dE1vbnRoRGF0ZXMgPSB0aGlzLmdlbmVyYXRlRGF0ZXModGhpcy5uZXh0TW9udGhOdW1iZXIsIHRoaXMubmV4dFllYXJOdW1iZXIpO1xuICAgICAgdGhpcy5pc0RhdGVzVmFsaWQgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcy5zdGFydERhdGUgJiYgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMuZW5kRGF0ZSkge1xuICAgICAgICB0aGlzLmlzRGF0ZXNWYWxpZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkYXkudG9hc3RNZXNzYWdlKSB7XG4gICAgICB0aGlzLnRvYXN0LmRpc3BsYXlNc2coZGF5LnRvYXN0TWVzc2FnZSwgNDAwMCk7XG4gICAgfVxuICB9XG4gIGFwcGx5RGF0ZXMoKSB7XG4gICAgdGhpcy5kYXRhLmRhdGVDaGFuZ2UodGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMpO1xuICB9XG4gIGNhbmNlbERhdGVQaWNrZXIoKSB7XG4gICAgdGhpcy5kYXRhLmNsb3NlKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyXCIgYXJpYS1sYWJlbD1cImRhdGUgcmFuZ2UgcGlja2VyXCIgY2RrVHJhcEZvY3VzIFtjZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZV09XCJ0cnVlXCI+XG4gIDxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX192aWV3XCI+XG4gICAgPGRpdiB0YWJpbmRleD1cIi0xXCIgY2RrRm9jdXNJbml0aWFsPjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJkYXRlcGlja2VyX19sZWZ0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9faGVhZGVyX19wcmFidVwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX19hcnJvd19faWNvblwiXG4gICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAoY2xpY2spPVwiIWlzUHJldmlvdXNNb250aERpc2FibGVkICYmIG5hdmlnYXRlTW9udGgoJ1BSRVZJT1VTJylcIlxuICAgICAgICAgIChrZXl1cC5lbnRlcik9XCIhaXNQcmV2aW91c01vbnRoRGlzYWJsZWQgJiYgbmF2aWdhdGVNb250aCgnUFJFVklPVVMnKVwiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIlByZXZpb3VzIE1vbnRoXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnZGlzYWJsZWQtbW9udGgnOiBpc1ByZXZpb3VzTW9udGhEaXNhYmxlZFxuICAgICAgICAgIH1cIlxuICAgICAgICA+XG4gICAgICAgICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDIwIDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICBkPVwiTTE5LjcwNzEgOC43MDcxMUMyMC4wOTc2IDguMzE2NTggMjAuMDk3NiA3LjY4MzQyIDE5LjcwNzEgNy4yOTI4OUwxMy4zNDMxIDAuOTI4OTMzQzEyLjk1MjYgMC41Mzg0MDkgMTIuMzE5NSAwLjUzODQwOSAxMS45Mjg5IDAuOTI4OTMzQzExLjUzODQgMS4zMTk0NiAxMS41Mzg0IDEuOTUyNjIgMTEuOTI4OSAyLjM0MzE1TDE3LjU4NTggOEwxMS45Mjg5IDEzLjY1NjlDMTEuNTM4NCAxNC4wNDc0IDExLjUzODQgMTQuNjgwNSAxMS45Mjg5IDE1LjA3MTFDMTIuMzE5NSAxNS40NjE2IDEyLjk1MjYgMTUuNDYxNiAxMy4zNDMxIDE1LjA3MTFMMTkuNzA3MSA4LjcwNzExWk0tOC43NDIyOGUtMDggOUwxOSA5TDE5IDdMOC43NDIyOGUtMDggN0wtOC43NDIyOGUtMDggOVpcIlxuICAgICAgICAgICAgICBmaWxsPVwiIzE4MUYzM1wiXG4gICAgICAgICAgICA+PC9wYXRoPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNwYW4+IHt7IGN1cnJlbnRNb250aCB9fSB7eyBjdXJyZW50WWVhck51bWJlciB9fSA8L3NwYW4+XG4gICAgICAgIDxkaXY+PC9kaXY+XG4gICAgICAgIDwhLS0gQnV0dG9uIHZpc2libGUgaW4gbW9iaWxlIHZpZXcgLS0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX2Fycm93X19pY29uIG1vYmlsZV92aWV3XCJcbiAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgIChjbGljayk9XCIhaXNOZXh0TW9udGhEaXNhYmxlZCAmJiBuYXZpZ2F0ZU1vbnRoKCdORVhUJylcIlxuICAgICAgICAgIChrZXl1cC5lbnRlcik9XCIhaXNOZXh0TW9udGhEaXNhYmxlZCAmJiBuYXZpZ2F0ZU1vbnRoKCdORVhUJylcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJOZXh0IE1vbnRoXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnZGlzYWJsZWQtbW9udGgnOiBpc05leHRNb250aERpc2FibGVkXG4gICAgICAgICAgfVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMjAgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGQ9XCJNMTkuNzA3MSA4LjcwNzExQzIwLjA5NzYgOC4zMTY1OCAyMC4wOTc2IDcuNjgzNDIgMTkuNzA3MSA3LjI5Mjg5TDEzLjM0MzEgMC45Mjg5MzNDMTIuOTUyNiAwLjUzODQwOSAxMi4zMTk1IDAuNTM4NDA5IDExLjkyODkgMC45Mjg5MzNDMTEuNTM4NCAxLjMxOTQ2IDExLjUzODQgMS45NTI2MiAxMS45Mjg5IDIuMzQzMTVMMTcuNTg1OCA4TDExLjkyODkgMTMuNjU2OUMxMS41Mzg0IDE0LjA0NzQgMTEuNTM4NCAxNC42ODA1IDExLjkyODkgMTUuMDcxMUMxMi4zMTk1IDE1LjQ2MTYgMTIuOTUyNiAxNS40NjE2IDEzLjM0MzEgMTUuMDcxMUwxOS43MDcxIDguNzA3MTFaTS04Ljc0MjI4ZS0wOCA5TDE5IDlMMTkgN0w4Ljc0MjI4ZS0wOCA3TC04Ljc0MjI4ZS0wOCA5WlwiXG4gICAgICAgICAgICAgIGZpbGw9XCIjMTgxRjMzXCJcbiAgICAgICAgICAgID48L3BhdGg+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fYm9keVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fd2Vla2RheXNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fd2Vla2RheVwiICpuZ0Zvcj1cImxldCB3ZWVrRGF5IG9mIHdlZWtEYXlzXCI+XG4gICAgICAgICAgICA8c3Bhbj57eyB3ZWVrRGF5LmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX2RheXNcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX2RheVwiIFxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnc2VsZWN0ZWQtc2FtZS1kYXknOiBkYXkuaXNTZWxlY3RlZFN0YXJ0RGF5ICYmIGRheS5pc1NlbGVjdGVkRW5kRGF5LFxuICAgICAgICAgICAgICAnc2VsZWN0ZWQtc3RhcnQtZGF5JzogZGF5LmlzU2VsZWN0ZWRTdGFydERheSxcbiAgICAgICAgICAgICAgJ3NlbGVjdGVkLWVuZC1kYXknOiBkYXkuaXNTZWxlY3RlZEVuZERheSxcbiAgICAgICAgICAgICAgJ2Rpc2FibGVkLWRheSc6IGRheS5pc0Rpc2FibGVkRGF5LFxuICAgICAgICAgICAgICAnaW4tcmFuZ2UtZGF5JzogZGF5LmluUmFuZ2VEYXksXG4gICAgICAgICAgICAgICdpcy12YWxpZC1kYXRlJzogZGF5LmRhdGUgPiAwICYmICEoZGF5LmlzU2VsZWN0ZWRTdGFydERheSAmJiBkYXkuaXNTZWxlY3RlZEVuZERheSlcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGRheSBvZiBjdXJyZW50TW9udGhEYXRlc1wiXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0RGF5KCdMRUZUJywgZGF5KVwiXG4gICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwic2VsZWN0RGF5KCdMRUZUJywgZGF5KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJkYXkuZGF0ZSA+IDBcIlxuICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwiZGF5LmlzRGlzYWJsZWREYXkgPyAtMSA6IDBcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInJldHJhY3REYXlNb250aChkYXkuZGF0ZSwgY3VycmVudE1vbnRoLCBjdXJyZW50WWVhck51bWJlcilcIj5cbiAgICAgICAgICAgICAge3sgZGF5LmRhdGUgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZGF0ZXBpY2tlcl9fcmlnaHRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX19oZWFkZXJfX3ByYWJ1XCI+XG4gICAgICAgIDxkaXY+PC9kaXY+XG4gICAgICAgIDxzcGFuPiB7eyBuZXh0TW9udGggfX0ge3sgbmV4dFllYXJOdW1iZXIgfX0gPC9zcGFuPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX19hcnJvd19faWNvbiBwY192aWV3XCJcbiAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgIChjbGljayk9XCIhaXNOZXh0TW9udGhEaXNhYmxlZCAmJiBuYXZpZ2F0ZU1vbnRoKCdORVhUJylcIlxuICAgICAgICAgIChrZXl1cC5lbnRlcik9XCIhaXNOZXh0TW9udGhEaXNhYmxlZCAmJiBuYXZpZ2F0ZU1vbnRoKCdORVhUJylcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdkaXNhYmxlZC1tb250aCc6IGlzTmV4dE1vbnRoRGlzYWJsZWRcbiAgICAgICAgICB9XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAyMCAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgZD1cIk0xOS43MDcxIDguNzA3MTFDMjAuMDk3NiA4LjMxNjU4IDIwLjA5NzYgNy42ODM0MiAxOS43MDcxIDcuMjkyODlMMTMuMzQzMSAwLjkyODkzM0MxMi45NTI2IDAuNTM4NDA5IDEyLjMxOTUgMC41Mzg0MDkgMTEuOTI4OSAwLjkyODkzM0MxMS41Mzg0IDEuMzE5NDYgMTEuNTM4NCAxLjk1MjYyIDExLjkyODkgMi4zNDMxNUwxNy41ODU4IDhMMTEuOTI4OSAxMy42NTY5QzExLjUzODQgMTQuMDQ3NCAxMS41Mzg0IDE0LjY4MDUgMTEuOTI4OSAxNS4wNzExQzEyLjMxOTUgMTUuNDYxNiAxMi45NTI2IDE1LjQ2MTYgMTMuMzQzMSAxNS4wNzExTDE5LjcwNzEgOC43MDcxMVpNLTguNzQyMjhlLTA4IDlMMTkgOUwxOSA3TDguNzQyMjhlLTA4IDdMLTguNzQyMjhlLTA4IDlaXCJcbiAgICAgICAgICAgICAgZmlsbD1cIiMxODFGMzNcIlxuICAgICAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX19ib2R5XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX193ZWVrZGF5c1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX193ZWVrZGF5XCIgKm5nRm9yPVwibGV0IHdlZWtEYXkgb2Ygd2Vla0RheXNcIj5cbiAgICAgICAgICAgIDxzcGFuPnt7IHdlZWtEYXkubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fZGF5c1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fZGF5XCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ3NlbGVjdGVkLXNhbWUtZGF5JzogZGF5LmlzU2VsZWN0ZWRTdGFydERheSAmJiBkYXkuaXNTZWxlY3RlZEVuZERheSxcbiAgICAgICAgICAgICAgJ3NlbGVjdGVkLXN0YXJ0LWRheSc6IGRheS5pc1NlbGVjdGVkU3RhcnREYXksXG4gICAgICAgICAgICAgICdzZWxlY3RlZC1lbmQtZGF5JzogZGF5LmlzU2VsZWN0ZWRFbmREYXksXG4gICAgICAgICAgICAgICdkaXNhYmxlZC1kYXknOiBkYXkuaXNEaXNhYmxlZERheSxcbiAgICAgICAgICAgICAgJ2luLXJhbmdlLWRheSc6IGRheS5pblJhbmdlRGF5LFxuICAgICAgICAgICAgICAnaXMtdmFsaWQtZGF0ZSc6IGRheS5kYXRlID4gMCAmJiAhKGRheS5pc1NlbGVjdGVkU3RhcnREYXkgJiYgZGF5LmlzU2VsZWN0ZWRFbmREYXkpXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBkYXkgb2YgbmV4dE1vbnRoRGF0ZXNcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdERheSgnUklHSFQnLCBkYXkpXCJcbiAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJzZWxlY3REYXkoJ1JJR0hUJywgZGF5KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJkYXkuZGF0ZSA+IDBcIlxuICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwiZGF5LmlzRGlzYWJsZWREYXkgPyAtMSA6IDBcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInJldHJhY3REYXlNb250aChkYXkuZGF0ZSwgbmV4dE1vbnRoLCBuZXh0WWVhck51bWJlcilcIj5cbiAgICAgICAgICAgICAge3sgZGF5LmRhdGUgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXJfX2Zvb3RlclwiPlxuICAgIDxidXR0b24gbWlzLWJ1dHRvbiB0eXBlPVwibm9uZVwiIGlkPSdtb2JpbGUtZm9vdGVyLWJ0bicgKGNsaWNrKT1cImNhbmNlbERhdGVQaWNrZXIoKVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWlzLWJ1dHRvbiB0eXBlPVwicHJpbWFyeVwiIGlkPVwibW9iaWxlLWZvb3Rlci1idG5cIiAoY2xpY2spPVwiYXBwbHlEYXRlcygpXCIgW2Rpc2FibGVkXT1cIiFpc0RhdGVzVmFsaWRcIj5BcHBseTwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==
394
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHotZHJwLWNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9taXMtY29tcG9uZW50cy9kYXRlcmFuZ2VwaWNrZXJfdjIvdHotZHJwLWNvbnRhaW5lci90ei1kcnAtY29udGFpbmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21pcy1jb21wb25lbnRzL2RhdGVyYW5nZXBpY2tlcl92Mi90ei1kcnAtY29udGFpbmVyL3R6LWRycC1jb250YWluZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFM0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUdwQyxPQUFPLEtBQUssRUFBRSxFQUFTLEVBQUUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUN6QyxPQUFPLFFBQVEsTUFBTSx1QkFBdUIsQ0FBQztBQUM3QyxPQUFPLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQztBQUNuQyxPQUFPLGFBQWEsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RCxPQUFPLGNBQWMsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RCxPQUFPLGlCQUFpQixNQUFNLGdDQUFnQyxDQUFBOzs7Ozs7O0lDa0NwRCwrQkFBaUYsV0FBQTtJQUN6RSxZQUFtQjtJQUFBLGlCQUFPLEVBQUE7OztJQUExQixlQUFtQjtJQUFuQixzQ0FBbUI7OztJQWtCekIsZ0NBRWlGO0lBQy9FLFlBQ0Y7SUFBQSxpQkFBTzs7OztJQUhMLHdEQUF1QztJQUN2QyxnSEFBOEU7SUFDOUUsZUFDRjtJQURFLDRDQUNGOzs7OztJQWxCRiwrQkFhQztJQUZDLDROQUFTLGVBQUEsaUJBQVUsTUFB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SUFBSSxLQUFLLEdBQXlCLEVBQUUsQ0FBQztRQUNyQyxNQUFNLFdBQVcsR0FBRyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDL0UsS0FBSyxJQUFJLFdBQVcsR0FBRyxDQUFDLEVBQUUsV0FBVyxJQUFJLFdBQVcsRUFBRSxXQUFXLEVBQUUsRUFBRTtZQUNuRSxNQUFNLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzVFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUQsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxDQUFDO1lBQ3hFLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDNUksSUFBSSxDQUFDLGFBQWEsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ3ZDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFD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LElBQUM7UUFBQyx1QkFBTTtRQUFBLGlCQUFTO1FBQ2xHLG1DQUEyRztRQUFsRCxxR0FBUyxnQkFBWSxJQUFDO1FBQTRCLHNCQUFLO1FBQUEsaUJBQVMsRUFBQSxFQUFBOztRQS9IMUMsOENBQWdDO1FBV3pHLGVBRUU7UUFGRixrRkFFRTtRQVNHLGVBQTJDO1FBQTNDLDZFQUEyQztRQVNoRCxlQUVFO1FBRkYsOEVBRUU7UUFZa0UsZUFBVztRQUFYLHNDQUFXO1FBZTdELGVBQW9CO1FBQXBCLCtDQUFvQjtRQWdCakMsZUFBcUM7UUFBckMsdUVBQXFDO1FBTTFDLGVBRUU7UUFGRiw4RUFFRTtRQVlrRSxlQUFXO1FBQVgsc0NBQVc7UUFlN0QsZUFBaUI7UUFBakIsNENBQWlCO1FBZ0J1QyxlQUEwQjtRQUExQiw0Q0FBMEI7O3VGRHZHakcsdUJBQXVCO2NBTG5DLFNBQVM7MkJBQ0UsWUFBWTs7c0JBd0JULE1BQU07dUJBQUMsY0FBYzttREF3Q2xDLFVBQVU7a0JBRFQsWUFBWTttQkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0TGlzdGVuZXIsIEluamVjdCwgT25Jbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENPTlRBSU5FUl9EQVRBLCBEQVRFX0ZPUk1BVCB9IGZyb20gXCIuLi9kYXRlcmFuZ2VwaWNrZXItY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBJQ3VycmVudE1vbnRoLCBJQ3VycmVudE1vbnRoRGF0ZXMsIElEYXRlUGlja2VyRGF0YSwgSVdlZWtEYXksIElTZWxlY3RlZERhdGVzQ29uZmlnIH0gZnJvbSBcIi4uL21vZGVscy9kcnAtY29uZmlnLm1vZGVsXCI7XG5pbXBvcnQgeyBnZXRNb250aCB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSBcIm1pcy1jcnlzdGFsLWRlc2lnbi1zeXN0ZW0vdG9hc3RcIjtcblxuaW1wb3J0IGRheWpzLCB7IERheWpzLCB0eiB9IGZyb20gJ2RheWpzJztcbmltcG9ydCB0aW1lem9uZSBmcm9tICdkYXlqcy9wbHVnaW4vdGltZXpvbmUnO1xuaW1wb3J0IHV0YyBmcm9tICdkYXlqcy9wbHVnaW4vdXRjJztcbmltcG9ydCBpc1NhbWVPckFmdGVyIGZyb20gJ2RheWpzL3BsdWdpbi9pc1NhbWVPckFmdGVyJztcbmltcG9ydCBpc1NhbWVPckJlZm9yZSBmcm9tICdkYXlqcy9wbHVnaW4vaXNTYW1lT3JCZWZvcmUnO1xuaW1wb3J0IGN1c3RvbVBhcnNlRm9ybWF0IGZyb20gJ2RheWpzL3BsdWdpbi9jdXN0b21QYXJzZUZvcm1hdCdcblxuZGF5anMuZXh0ZW5kKHV0Yyk7XG5kYXlqcy5leHRlbmQodGltZXpvbmUpO1xuZGF5anMuZXh0ZW5kKGN1c3RvbVBhcnNlRm9ybWF0KTtcbmRheWpzLmV4dGVuZChpc1NhbWVPckFmdGVyKTtcbmRheWpzLmV4dGVuZChpc1NhbWVPckJlZm9yZSk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJtaXMtdHotZHJwXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vdHotZHJwLWNvbnRhaW5lci5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vdHotZHJwLWNvbnRhaW5lci5jb21wb25lbnQuc2Nzc1wiXVxufSlcbmV4cG9ydCBjbGFzcyBUekRycENvbnRhaW5lckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGRhdGE6IElEYXRlUGlja2VyRGF0YTtcbiAgcHJpdmF0ZSBkYXlqc0luc3RhbmNlID0gKC4uLmFyZ3MpID0+IHtcbiAgICByZXR1cm4gdHooYXJnc1swXSwgYXJnc1sxXSB8fCAnREQvTU0vWVlZWScsIHRoaXMuZGF0YS5kcENvbmZpZy50aW1lem9uZSB8fCAnQXNpYS9Lb2xrYXRhJyk7XG4gIH07XG4gIHByaXZhdGUgcmF3V2Vla0RheXM6IHN0cmluZ1tdID0gW1wiU1VOXCIsIFwiTU9OXCIsIFwiVFVFXCIsIFwiV0VEXCIsIFwiVEhVXCIsIFwiRlJJXCIsIFwiU0FUXCJdO1xuICB3ZWVrRGF5czogSVdlZWtEYXlbXSA9IFtdO1xuICBjdXJyZW50TW9udGhOdW1iZXI6IG51bWJlcjtcbiAgY3VycmVudE1vbnRoOiBJQ3VycmVudE1vbnRoO1xuICBjdXJyZW50WWVhck51bWJlcjogbnVtYmVyO1xuICBjdXJyZW50TW9udGhEYXRlczogSUN1cnJlbnRNb250aERhdGVzW10gPSBbXTtcbiAgbmV4dE1vbnRoTnVtYmVyOiBudW1iZXI7XG4gIG5leHRNb250aDogSUN1cnJlbnRNb250aDtcbiAgbmV4dFllYXJOdW1iZXI6IG51bWJlcjtcbiAgbmV4dE1vbnRoRGF0ZXM6IElDdXJyZW50TW9udGhEYXRlc1tdID0gW107XG4gIGlzUHJldmlvdXNNb250aERpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzTmV4dE1vbnRoRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2VsZWN0aW9uU3RhcnRlZCA9IGZhbHNlO1xuICBsb2NhbFNlbGVjdGVkRGF0ZXM6IElTZWxlY3RlZERhdGVzQ29uZmlnO1xuICBpc0RhdGVzVmFsaWQgPSBmYWxzZTtcbiAgY29uc3RydWN0b3IoQEluamVjdChDT05UQUlORVJfREFUQSkgZGF0YTogSURhdGVQaWNrZXJEYXRhLCBwcml2YXRlIHRvYXN0OiBUb2FzdFNlcnZpY2UpIHtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIHRoaXMubG9jYWxTZWxlY3RlZERhdGVzID0gdGhpcy5kYXRhLmRhdGVzO1xuICAgIHRoaXMuaXNEYXRlc1ZhbGlkID0gZmFsc2U7XG4gICAgaWYgKHRoaXMubG9jYWxTZWxlY3RlZERhdGVzLnN0YXJ0RGF0ZSAmJiB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcy5lbmREYXRlKSB7XG4gICAgICB0aGlzLmlzRGF0ZXNWYWxpZCA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGE/LmRwQ29uZmlnPy50aW1lem9uZSkge1xuICAgICAgdGhpcy5kYXlqc0luc3RhbmNlID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgcmV0dXJuIHR6KGFyZ3NbMF0sIGFyZ3NbMV0sIHRoaXMuZGF0YS5kcENvbmZpZy50aW1lem9uZSk7XG4gICAgICB9O1xuICAgIH1cbiAgICB0aGlzLmN1cnJlbnRNb250aE51bWJlciA9IHRoaXMuZGF5anNJbnN0YW5jZSgpLm1vbnRoKCk7XG4gICAgdGhpcy5uZXh0TW9udGhOdW1iZXIgPSB0aGlzLmRheWpzSW5zdGFuY2UoKS5hZGQoMSwgXCJtb250aFwiKS5tb250aCgpO1xuICAgIHRoaXMuY3VycmVudE1vbnRoID0gZ2V0TW9udGgodGhpcy5jdXJyZW50TW9udGhOdW1iZXIpO1xuICAgIHRoaXMubmV4dE1vbnRoID0gZ2V0TW9udGgodGhpcy5uZXh0TW9udGhOdW1iZXIpO1xuICAgIHRoaXMuY3VycmVudFllYXJOdW1iZXIgPSB0aGlzLmRheWpzSW5zdGFuY2UoKS55ZWFyKCk7XG4gICAgdGhpcy5uZXh0WWVhck51bWJlciA9IHRoaXMuZGF5anNJbnN0YW5jZSgpLmFkZCgxLCBcIm1vbnRoXCIpLnllYXIoKTtcbiAgICB0aGlzLndlZWtEYXlzID0gdGhpcy5yYXdXZWVrRGF5cy5tYXAoKGRheSwgaW5kZXgpID0+ICh7XG4gICAgICBsYWJlbDogYCR7ZGF5WzBdfSR7ZGF5LnNsaWNlKDEpLnRvTG93ZXJDYXNlKCl9YCxcbiAgICAgIGlzQ3VycmVudERheTogdGhpcy5kYXlqc0luc3RhbmNlKCkuZGF5KCkgPT09IGluZGV4XG4gICAgfSkpO1xuICAgIGlmICghdGhpcy5kYXRhPy5kcENvbmZpZz8uZm9ybWF0KSB7XG4gICAgICB0aGlzLmRhdGEuZHBDb25maWcgPSB7XG4gICAgICAgIC4uLnRoaXMuZGF0YS5kcENvbmZpZyxcbiAgICAgICAgZm9ybWF0OiBEQVRFX0ZPUk1BVFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnREYXRlSW5zdGFuY2UoKTtcbiAgICB0aGlzLmNhbGN1bGF0ZU1pbk1heERheXMoKTtcbiAgfVxuXG4gIHJldHJhY3REYXlNb250aChkYXk6IGFueSwgbW9udGg6IGFueSwgeWVhcjogYW55KTogYW55IHtcbiAgICByZXR1cm4gYCR7ZGF5fSAke21vbnRofSAke3llYXJ9YDtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoXCJrZXlkb3duLmVzY1wiKVxuICBjbG9zZU9uRXNjKCkge1xuICAgIHRoaXMuY2FuY2VsRGF0ZVBpY2tlcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBjdXJyZW50RGF0ZUluc3RhbmNlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXM/LnN0YXJ0RGF0ZSkge1xuICAgICAgdGhpcy5jdXJyZW50TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLmN1cnJlbnRNb250aE51bWJlciwgdGhpcy5jdXJyZW50WWVhck51bWJlcik7XG4gICAgICB0aGlzLm5leHRNb250aERhdGVzID0gdGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMubmV4dE1vbnRoTnVtYmVyLCB0aGlzLm5leHRZZWFyTnVtYmVyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2VsZWN0ZWRTdGFydERhdGUgPSAhIXRoaXMubG9jYWxTZWxlY3RlZERhdGVzPy5zdGFydERhdGUgPyB0aGlzLmRheWpzSW5zdGFuY2UodGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXM/LnN0YXJ0RGF0ZSwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCkgOiBkYXlqcygnaW52YWxpZCcpO1xuICAgIGlmIChzZWxlY3RlZFN0YXJ0RGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgIHRoaXMuY3VycmVudFllYXJOdW1iZXIgPSBzZWxlY3RlZFN0YXJ0RGF0ZS55ZWFyKCk7XG4gICAgICB0aGlzLm5leHRZZWFyTnVtYmVyID0gc2VsZWN0ZWRTdGFydERhdGUuYWRkKDEsIFwibW9udGhcIikueWVhcigpO1xuICAgICAgdGhpcy5jdXJyZW50TW9udGhOdW1iZXIgPSBzZWxlY3RlZFN0YXJ0RGF0ZS5nZXQoXCJtb250aFwiKTtcbiAgICAgIHRoaXMubmV4dE1vbnRoTnVtYmVyID0gc2VsZWN0ZWRTdGFydERhdGUuYWRkKDEsIFwibW9udGhcIikubW9udGgoKTtcbiAgICAgIGlmKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyID09PSAtMSl7XG4gICAgICAgIHRoaXMuY3VycmVudE1vbnRoTnVtYmVyID0gMTFcbiAgICAgIH1cbiAgICAgIGlmKHRoaXMubmV4dE1vbnRoTnVtYmVyID09PSAtMSl7XG4gICAgICAgIHRoaXMubmV4dE1vbnRoTnVtYmVyID0gMTFcbiAgICAgIH1cbiAgICAgIHRoaXMuY3VycmVudE1vbnRoID0gZ2V0TW9udGgodGhpcy5jdXJyZW50TW9udGhOdW1iZXIpO1xuICAgICAgdGhpcy5uZXh0TW9udGggPSBnZXRNb250aCh0aGlzLm5leHRNb250aE51bWJlcik7XG4gICAgfVxuICAgIHRoaXMuY3VycmVudE1vbnRoRGF0ZXMgPSB0aGlzLmdlbmVyYXRlRGF0ZXModGhpcy5jdXJyZW50TW9udGhOdW1iZXIsIHRoaXMuY3VycmVudFllYXJOdW1iZXIpO1xuICAgIHRoaXMubmV4dE1vbnRoRGF0ZXMgPSB0aGlzLmdlbmVyYXRlRGF0ZXModGhpcy5uZXh0TW9udGhOdW1iZXIsIHRoaXMubmV4dFllYXJOdW1iZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGVNaW5NYXhEYXlzKCkge1xuICAgIGNvbnN0IGN1cnJlbnRJbnN0YW5jZSA9IHRoaXMuZGF5anNJbnN0YW5jZSgpLnllYXIodGhpcy5jdXJyZW50WWVhck51bWJlcikubW9udGgodGhpcy5jdXJyZW50TW9udGhOdW1iZXIpO1xuICAgIGNvbnN0IG1pbkRhdGUgPSAhIXRoaXMuZGF0YS5kcENvbmZpZy5taW5EYXRlID8gdGhpcy5kYXlqc0luc3RhbmNlKHRoaXMuZGF0YS5kcENvbmZpZy5taW5EYXRlLCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KSA6IGRheWpzKCdpbnZhbGlkJyk7XG4gICAgaWYgKG1pbkRhdGUuaXNWYWxpZCgpKSB7XG4gICAgICB0aGlzLmlzUHJldmlvdXNNb250aERpc2FibGVkID0gbWluRGF0ZS5pc1NhbWVPckFmdGVyKGN1cnJlbnRJbnN0YW5jZSwgXCJtb250aFwiKTtcbiAgICB9XG4gICAgY29uc3QgbWF4RGF0ZSA9ICEhdGhpcy5kYXRhLmRwQ29uZmlnLm1heERhdGUgPyB0aGlzLmRheWpzSW5zdGFuY2UodGhpcy5kYXRhLmRwQ29uZmlnLm1heERhdGUsIHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpIDogZGF5anMoJ2ludmFsaWQnKTtcbiAgICBpZiAobWF4RGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgIHRoaXMuaXNOZXh0TW9udGhEaXNhYmxlZCA9IG1heERhdGUuaXNTYW1lT3JCZWZvcmUoY3VycmVudEluc3RhbmNlLCBcIm1vbnRoXCIpO1xuICAgIH1cbiAgfVxuXG4gIG5hdmlnYXRlTW9udGgoZGlyZWN0aW9uOiBcIk5FWFRcIiB8IFwiUFJFVklPVVNcIik6IHZvaWQge1xuICAgIGxldCB0aGlzTW9udGg6IERheWpzID0gZGF5anMoKS55ZWFyKHRoaXMuY3VycmVudFllYXJOdW1iZXIpLm1vbnRoKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyKTtcbiAgICBpZiAoZGlyZWN0aW9uID09PSBcIk5FWFRcIikge1xuICAgICB0aGlzTW9udGggPSB0aGlzTW9udGguYWRkKDEsIFwibW9udGhcIik7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IFwiUFJFVklPVVNcIikge1xuICAgICB0aGlzTW9udGggPSB0aGlzTW9udGguc3VidHJhY3QoMSwgXCJtb250aFwiKTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50TW9udGhOdW1iZXIgPSB0aGlzTW9udGgubW9udGgoKTtcbiAgICB0aGlzLm5leHRNb250aE51bWJlciA9IHRoaXNNb250aC5jbG9uZSgpLmFkZCgxLCBcIm1vbnRoXCIpLm1vbnRoKCk7XG4gICAgdGhpcy5jdXJyZW50TW9udGggPSBnZXRNb250aCh0aGlzLmN1cnJlbnRNb250aE51bWJlcik7XG4gICAgdGhpcy5uZXh0TW9udGggPSBnZXRNb250aCh0aGlzLm5leHRNb250aE51bWJlcik7XG4gICAgaWYgKHRoaXMubmV4dE1vbnRoTnVtYmVyID09PSAwICYmIGRpcmVjdGlvbiA9PT0gXCJQUkVWSU9VU1wiKSB7XG4gICAgIHRoaXMuY3VycmVudFllYXJOdW1iZXItLTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyID09PSAxMSAmJiBkaXJlY3Rpb24gPT09IFwiTkVYVFwiKSB7XG4gICAgIHRoaXMubmV4dFllYXJOdW1iZXIrKztcbiAgICB9ZWxzZSBpZiAodGhpcy5jdXJyZW50TW9udGhOdW1iZXIgPT09IDAgJiYgZGlyZWN0aW9uID09PSBcIk5FWFRcIikge1xuICAgICB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyKys7XG4gICAgfSBlbHNlIGlmICh0aGlzLm5leHRNb250aE51bWJlciA9PT0gMTEgJiYgZGlyZWN0aW9uID09PSBcIlBSRVZJT1VTXCIpIHtcbiAgICAgdGhpcy5uZXh0WWVhck51bWJlci0tO1xuICAgIH1lbHNle1xuICAgICB0aGlzLm5leHRZZWFyTnVtYmVyID0gdGhpcy5jdXJyZW50WWVhck51bWJlcjtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLmN1cnJlbnRNb250aE51bWJlciwgdGhpcy5jdXJyZW50WWVhck51bWJlcik7XG4gICAgdGhpcy5uZXh0TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLm5leHRNb250aE51bWJlciwgdGhpcy5uZXh0WWVhck51bWJlcik7XG4gICAgdGhpcy5jYWxjdWxhdGVNaW5NYXhEYXlzKCk7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlRGF0ZXMobW9udGg6IG51bWJlciwgY3VycmVudFllYXJOdW1iZXI6IG51bWJlcik6IElDdXJyZW50TW9udGhEYXRlc1tdIHtcbiAgICBsZXQgZGF0ZXM6IElDdXJyZW50TW9udGhEYXRlc1tdID0gW107XG4gICAgY29uc3QgZGF5c0luTW9udGggPSBkYXlqcygpLnllYXIoY3VycmVudFllYXJOdW1iZXIpLm1vbnRoKG1vbnRoKS5kYXlzSW5Nb250aCgpO1xuICAgIGZvciAobGV0IGN1cnJlbnREYXRlID0gMTsgY3VycmVudERhdGUgPD0gZGF5c0luTW9udGg7IGN1cnJlbnREYXRlKyspIHtcbiAgICAgIGNvbnN0IGRhdGUgPSBkYXlqcygpLnllYXIoY3VycmVudFllYXJOdW1iZXIpLm1vbnRoKG1vbnRoKS5kYXRlKGN1cnJlbnREYXRlKTtcbiAgICAgIGNvbnN0IGRhdGVTdHJpbmcgPSBkYXRlLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KTtcbiAgICAgIGxldCBpc0Rpc2FibGVkRGF5ID0gdGhpcy5kYXRhLmRhdGVzRGlzYWJsZWQuc29tZShkID0+IGQgPT09IGRhdGVTdHJpbmcpO1xuICAgICAgY29uc3QgbWluRGF0ZSA9ICEhdGhpcy5kYXRhLmRwQ29uZmlnLm1pbkRhdGUgPyB0aGlzLmRheWpzSW5zdGFuY2UodGhpcy5kYXRhLmRwQ29uZmlnLm1pbkRhdGUsIHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpIDogZGF5anMoJ2ludmFsaWQnKTtcbiAgICAgIGlmICghaXNEaXNhYmxlZERheSAmJiBtaW5EYXRlLmlzVmFsaWQoKSkge1xuICAgICAgICBsZXQgRGF0ZSA9IHRoaXMuZGF5anNJbnN0YW5jZSgpLnllYXIoY3VycmVudFllYXJOdW1iZXIpLm1vbnRoKG1vbnRoKS5kYXRlKGN1cnJlbnREYXRlKTtcbiAgICAgICAgaXNEaXNhYmxlZERheSA9IG1pbkRhdGUuaXNBZnRlcihkYXlqcyhEYXRlLCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KSwgXCJkYXlcIik7XG4gICAgICB9XG4gICAgICBjb25zdCBtYXhEYXRlID0gISF0aGlzLmRhdGEuZHBDb25maWcubWF4RGF0ZSA/IHRoaXMuZGF5anNJbnN0YW5jZSh0aGlzLmRhdGEuZHBDb25maWcubWF4RGF0ZSwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCkgOiBkYXlqcygnaW52YWxpZCcpO1xuICAgICAgaWYgKCFpc0Rpc2FibGVkRGF5ICYmIG1heERhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgIGlzRGlzYWJsZWREYXkgPSBtYXhEYXRlLmlzQmVmb3JlKGRheWpzKGRhdGUsIHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpLCBcImRheVwiKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlzQ3VycmVudERheSA9XG4gICAgICAgIHRoaXMuZGF5anNJbnN0YW5jZSgpLnllYXIoY3VycmVudFllYXJOdW1iZXIpLm1vbnRoKG1vbnRoKS5kYXRlKGN1cnJlbnREYXRlKS5mb3JtYXQodGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCkgPT09XG4gICAgICAgIHRoaXMuZGF5anNJbnN0YW5jZSgpLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KTtcbiAgICAgIGNvbnN0IGlzU2VsZWN0ZWRTdGFydERheSA9XG4gICAgICAgICFpc0Rpc2FibGVkRGF5ICYmXG4gICAgICAgICh0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcz8uc3RhcnREYXRlID8/IGZhbHNlKSAmJlxuICAgICAgICBkYXRlLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KSA9PT0gdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXM/LnN0YXJ0RGF0ZTtcbiAgICAgIGNvbnN0IGlzQWZ0ZXJTZWxlY3RlZFN0YXJ0RGF0ZSA9ICBkYXlqcyhkYXRlLHRoaXMuZGF0YT8uZHBDb25maWc/LmZvcm1hdCkuc3RhcnRPZignZGF5JykuaXNBZnRlcihkYXlqcyh0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcy5zdGFydERhdGUsdGhpcy5kYXRhPy5kcENvbmZpZz8uZm9ybWF0KS5zdGFydE9mKCdkYXknKSwgJ2RheScpO1xuXG4gICAgICBjb25zdCBpc0JlZm9yZVNlbGVjdGVkRW5kRGF0ZSA9IGRheWpzKGRhdGUsdGhpcy5kYXRhPy5kcENvbmZpZz8uZm9ybWF0KS5zdGFydE9mKCdkYXknKS5pc0JlZm9yZShkYXlqcyh0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcy5lbmREYXRlLHRoaXMuZGF0YT8uZHBDb25maWc/LmZvcm1hdCkuc3RhcnRPZignZGF5JyksICdkYXknKTtcbiAgICAgIGNvbnN0IGluUmFuZ2VEYXkgPVxuICAgICAgICAodGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMuc3RhcnREYXRlID8/IGZhbHNlKSAmJlxuICAgICAgICAodGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMuZW5kRGF0ZSA/PyBmYWxzZSkgJiZcbiAgICAgICAgaXNBZnRlclNlbGVjdGVkU3RhcnREYXRlICYmXG4gICAgICAgIGlzQmVmb3JlU2VsZWN0ZWRFbmREYXRlO1xuICAgICAgY29uc3QgaXNTZWxlY3RlZEVuZERheSA9XG4gICAgICAgICFpc0Rpc2FibGVkRGF5ICYmXG4gICAgICAgICgodGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXM/LnN0YXJ0RGF0ZSAmJiB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcz8uZW5kRGF0ZSkgPz8gZmFsc2UpICYmXG4gICAgICAgIGRhdGUuZm9ybWF0KHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpID09PSB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcz8uZW5kRGF0ZTtcbiAgICAgIGRhdGVzLnB1c2goe1xuICAgICAgICBkYXRlOiBjdXJyZW50RGF0ZSxcbiAgICAgICAgd2Vla0RheTogZGF0ZS5kYXkoKSxcbiAgICAgICAgaXNDdXJyZW50RGF5LFxuICAgICAgICBpc1NlbGVjdGVkU3RhcnREYXksXG4gICAgICAgIGlzU2VsZWN0ZWRFbmREYXksXG4gICAgICAgIGluUmFuZ2VEYXksXG4gICAgICAgIHRvYXN0TWVzc2FnZTogdGhpcy5kYXRhLm1lc3NhZ2VzLmZpbmQocSA9PiBkYXRlLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KSA9PT0gcS5kYXRlKT8ubWVzc2FnZSB8fCBcIlwiLFxuICAgICAgICBpc0Rpc2FibGVkRGF5XG4gICAgICB9KTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IGRhdGVzWzBdLndlZWtEYXk7IGkgPiAwOyBpLS0pIHtcbiAgICAgIGRhdGVzLnVuc2hpZnQoeyBkYXRlOiAwLCB3ZWVrRGF5OiBpIC0gMSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGVzO1xuICB9XG5cbiAgc2VsZWN0RGF5KGZyb206IFwiTEVGVFwiIHwgXCJSSUdIVFwiLCBkYXk6IElDdXJyZW50TW9udGhEYXRlcykge1xuICAgIGlmIChkYXkuZGF0ZSA8PSAwKSByZXR1cm47XG4gICAgaWYgKCFkYXkuaXNEaXNhYmxlZERheSkge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uU3RhcnRlZCkge1xuICAgICAgICBjb25zdCBkYXlqc0RheSA9IGRheWpzKClcbiAgICAgICAgICAueWVhcihmcm9tID09PSBcIkxFRlRcIiA/IHRoaXMuY3VycmVudFllYXJOdW1iZXIgOiB0aGlzLm5leHRZZWFyTnVtYmVyKVxuICAgICAgICAgIC5tb250aChmcm9tID09PSBcIkxFRlRcIiA/IHRoaXMuY3VycmVudE1vbnRoTnVtYmVyIDogdGhpcy5uZXh0TW9udGhOdW1iZXIpXG4gICAgICAgICAgLmRhdGUoZGF5LmRhdGUpO1xuICAgICAgICBpZiAoZGF5anNEYXkuaXNCZWZvcmUoZGF5anModGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMuc3RhcnREYXRlLCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KSwgJ2RheScpKSB7XG4gICAgICAgICAgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMgPSB7XG4gICAgICAgICAgICBzdGFydERhdGU6IGRheWpzRGF5LmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KSxcbiAgICAgICAgICAgIGVuZERhdGU6IG51bGxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuY3VycmVudE1vbnRoRGF0ZXMgPSB0aGlzLmdlbmVyYXRlRGF0ZXModGhpcy5jdXJyZW50TW9udGhOdW1iZXIsIHRoaXMuY3VycmVudFllYXJOdW1iZXIpO1xuICAgICAgICAgIHRoaXMubmV4dE1vbnRoRGF0ZXMgPSB0aGlzLmdlbmVyYXRlRGF0ZXModGhpcy5uZXh0TW9udGhOdW1iZXIsIHRoaXMubmV4dFllYXJOdW1iZXIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMgPSB7XG4gICAgICAgICAgLi4udGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMsXG4gICAgICAgICAgZW5kRGF0ZTogZGF5anNEYXkuZm9ybWF0KHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcyA9IHtcbiAgICAgICAgICBzdGFydERhdGU6IGRheWpzKClcbiAgICAgICAgICAgIC55ZWFyKGZyb20gPT09IFwiTEVGVFwiID8gdGhpcy5jdXJyZW50WWVhck51bWJlciA6IHRoaXMubmV4dFllYXJOdW1iZXIpXG4gICAgICAgICAgICAubW9udGgoZnJvbSA9PT0gXCJMRUZUXCIgPyB0aGlzLmN1cnJlbnRNb250aE51bWJlciA6IHRoaXMubmV4dE1vbnRoTnVtYmVyKVxuICAgICAgICAgICAgLmRhdGUoZGF5LmRhdGUpXG4gICAgICAgICAgICAuZm9ybWF0KHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpLFxuICAgICAgICAgIGVuZERhdGU6IG51bGxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY3VycmVudE1vbnRoRGF0ZXMgPSB0aGlzLmdlbmVyYXRlRGF0ZXModGhpcy5jdXJyZW50TW9udGhOdW1iZXIsIHRoaXMuY3VycmVudFllYXJOdW1iZXIpO1xuICAgICAgdGhpcy5uZXh0TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLm5leHRNb250aE51bWJlciwgdGhpcy5uZXh0WWVhck51bWJlcik7XG4gICAgICB0aGlzLmlzRGF0ZXNWYWxpZCA9IGZhbHNlO1xuICAgICAgaWYgKHRoaXMubG9jYWxTZWxlY3RlZERhdGVzLnN0YXJ0RGF0ZSAmJiB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcy5lbmREYXRlKSB7XG4gICAgICAgIHRoaXMuaXNEYXRlc1ZhbGlkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRheS50b2FzdE1lc3NhZ2UpIHtcbiAgICAgIHRoaXMudG9hc3QuZGlzcGxheU1zZyhkYXkudG9hc3RNZXNzYWdlLCA0MDAwKTtcbiAgICB9XG4gIH1cbiAgYXBwbHlEYXRlcygpIHtcbiAgICB0aGlzLmRhdGEuZGF0ZUNoYW5nZSh0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcyk7XG4gIH1cbiAgY2FuY2VsRGF0ZVBpY2tlcigpIHtcbiAgICB0aGlzLmRhdGEuY2xvc2UoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJcIiBhcmlhLWxhYmVsPVwiZGF0ZSByYW5nZSBwaWNrZXJcIiBjZGtUcmFwRm9jdXMgW2Nka1RyYXBGb2N1c0F1dG9DYXB0dXJlXT1cInRydWVcIj5cbiAgPGRpdiBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX3ZpZXdcIj5cbiAgICA8ZGl2IHRhYmluZGV4PVwiLTFcIiBjZGtGb2N1c0luaXRpYWw+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImRhdGVwaWNrZXJfX2xlZnRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX19oZWFkZXJfX3ByYWJ1XCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX2Fycm93X19pY29uXCJcbiAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgIChjbGljayk9XCIhaXNQcmV2aW91c01vbnRoRGlzYWJsZWQgJiYgbmF2aWdhdGVNb250aCgnUFJFVklPVVMnKVwiXG4gICAgICAgICAgKGtleXVwLmVudGVyKT1cIiFpc1ByZXZpb3VzTW9udGhEaXNhYmxlZCAmJiBuYXZpZ2F0ZU1vbnRoKCdQUkVWSU9VUycpXCJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiUHJldmlvdXMgTW9udGhcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdkaXNhYmxlZC1tb250aCc6IGlzUHJldmlvdXNNb250aERpc2FibGVkXG4gICAgICAgICAgfVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMjAgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGQ9XCJNMTkuNzA3MSA4LjcwNzExQzIwLjA5NzYgOC4zMTY1OCAyMC4wOTc2IDcuNjgzNDIgMTkuNzA3MSA3LjI5Mjg5TDEzLjM0MzEgMC45Mjg5MzNDMTIuOTUyNiAwLjUzODQwOSAxMi4zMTk1IDAuNTM4NDA5IDExLjkyODkgMC45Mjg5MzNDMTEuNTM4NCAxLjMxOTQ2IDExLjUzODQgMS45NTI2MiAxMS45Mjg5IDIuMzQzMTVMMTcuNTg1OCA4TDExLjkyODkgMTMuNjU2OUMxMS41Mzg0IDE0LjA0NzQgMTEuNTM4NCAxNC42ODA1IDExLjkyODkgMTUuMDcxMUMxMi4zMTk1IDE1LjQ2MTYgMTIuOTUyNiAxNS40NjE2IDEzLjM0MzEgMTUuMDcxMUwxOS43MDcxIDguNzA3MTFaTS04Ljc0MjI4ZS0wOCA5TDE5IDlMMTkgN0w4Ljc0MjI4ZS0wOCA3TC04Ljc0MjI4ZS0wOCA5WlwiXG4gICAgICAgICAgICAgIGZpbGw9XCIjMTgxRjMzXCJcbiAgICAgICAgICAgID48L3BhdGg+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3Bhbj4ge3sgY3VycmVudE1vbnRoIH19IHt7IGN1cnJlbnRZZWFyTnVtYmVyIH19IDwvc3Bhbj5cbiAgICAgICAgPGRpdj48L2Rpdj5cbiAgICAgICAgPCEtLSBCdXR0b24gdmlzaWJsZSBpbiBtb2JpbGUgdmlldyAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fYXJyb3dfX2ljb24gbW9iaWxlX3ZpZXdcIlxuICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgKGNsaWNrKT1cIiFpc05leHRNb250aERpc2FibGVkICYmIG5hdmlnYXRlTW9udGgoJ05FWFQnKVwiXG4gICAgICAgICAgKGtleXVwLmVudGVyKT1cIiFpc05leHRNb250aERpc2FibGVkICYmIG5hdmlnYXRlTW9udGgoJ05FWFQnKVwiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIk5leHQgTW9udGhcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdkaXNhYmxlZC1tb250aCc6IGlzTmV4dE1vbnRoRGlzYWJsZWRcbiAgICAgICAgICB9XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAyMCAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgZD1cIk0xOS43MDcxIDguNzA3MTFDMjAuMDk3NiA4LjMxNjU4IDIwLjA5NzYgNy42ODM0MiAxOS43MDcxIDcuMjkyODlMMTMuMzQzMSAwLjkyODkzM0MxMi45NTI2IDAuNTM4NDA5IDEyLjMxOTUgMC41Mzg0MDkgMTEuOTI4OSAwLjkyODkzM0MxMS41Mzg0IDEuMzE5NDYgMTEuNTM4NCAxLjk1MjYyIDExLjkyODkgMi4zNDMxNUwxNy41ODU4IDhMMTEuOTI4OSAxMy42NTY5QzExLjUzODQgMTQuMDQ3NCAxMS41Mzg0IDE0LjY4MDUgMTEuOTI4OSAxNS4wNzExQzEyLjMxOTUgMTUuNDYxNiAxMi45NTI2IDE1LjQ2MTYgMTMuMzQzMSAxNS4wNzExTDE5LjcwNzEgOC43MDcxMVpNLTguNzQyMjhlLTA4IDlMMTkgOUwxOSA3TDguNzQyMjhlLTA4IDdMLTguNzQyMjhlLTA4IDlaXCJcbiAgICAgICAgICAgICAgZmlsbD1cIiMxODFGMzNcIlxuICAgICAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX19ib2R5XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX193ZWVrZGF5c1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX193ZWVrZGF5XCIgKm5nRm9yPVwibGV0IHdlZWtEYXkgb2Ygd2Vla0RheXNcIj5cbiAgICAgICAgICAgIDxzcGFuPnt7IHdlZWtEYXkubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fZGF5c1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fZGF5XCIgXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdzZWxlY3RlZC1zYW1lLWRheSc6IGRheS5pc1NlbGVjdGVkU3RhcnREYXkgJiYgZGF5LmlzU2VsZWN0ZWRFbmREYXksXG4gICAgICAgICAgICAgICdzZWxlY3RlZC1zdGFydC1kYXknOiBkYXkuaXNTZWxlY3RlZFN0YXJ0RGF5LFxuICAgICAgICAgICAgICAnc2VsZWN0ZWQtZW5kLWRheSc6IGRheS5pc1NlbGVjdGVkRW5kRGF5LFxuICAgICAgICAgICAgICAnZGlzYWJsZWQtZGF5JzogZGF5LmlzRGlzYWJsZWREYXksXG4gICAgICAgICAgICAgICdpbi1yYW5nZS1kYXknOiBkYXkuaW5SYW5nZURheSxcbiAgICAgICAgICAgICAgJ2lzLXZhbGlkLWRhdGUnOiBkYXkuZGF0ZSA+IDAgJiYgIShkYXkuaXNTZWxlY3RlZFN0YXJ0RGF5ICYmIGRheS5pc1NlbGVjdGVkRW5kRGF5KVxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF5IG9mIGN1cnJlbnRNb250aERhdGVzXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3REYXkoJ0xFRlQnLCBkYXkpXCJcbiAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJzZWxlY3REYXkoJ0xFRlQnLCBkYXkpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRheS5kYXRlID4gMFwiXG4gICAgICAgICAgICAgIFt0YWJpbmRleF09XCJkYXkuaXNEaXNhYmxlZERheSA/IC0xIDogMFwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicmV0cmFjdERheU1vbnRoKGRheS5kYXRlLCBjdXJyZW50TW9udGgsIGN1cnJlbnRZZWFyTnVtYmVyKVwiPlxuICAgICAgICAgICAgICB7eyBkYXkuZGF0ZSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJkYXRlcGlja2VyX19yaWdodFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX2hlYWRlcl9fcHJhYnVcIj5cbiAgICAgICAgPGRpdj48L2Rpdj5cbiAgICAgICAgPHNwYW4+IHt7IG5leHRNb250aCB9fSB7eyBuZXh0WWVhck51bWJlciB9fSA8L3NwYW4+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX2Fycm93X19pY29uIHBjX3ZpZXdcIlxuICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgKGNsaWNrKT1cIiFpc05leHRNb250aERpc2FibGVkICYmIG5hdmlnYXRlTW9udGgoJ05FWFQnKVwiXG4gICAgICAgICAgKGtleXVwLmVudGVyKT1cIiFpc05leHRNb250aERpc2FibGVkICYmIG5hdmlnYXRlTW9udGgoJ05FWFQnKVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ2Rpc2FibGVkLW1vbnRoJzogaXNOZXh0TW9udGhEaXNhYmxlZFxuICAgICAgICAgIH1cIlxuICAgICAgICA+XG4gICAgICAgICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDIwIDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICBkPVwiTTE5LjcwNzEgOC43MDcxMUMyMC4wOTc2IDguMzE2NTggMjAuMDk3NiA3LjY4MzQyIDE5LjcwNzEgNy4yOTI4OUwxMy4zNDMxIDAuOTI4OTMzQzEyLjk1MjYgMC41Mzg0MDkgMTIuMzE5NSAwLjUzODQwOSAxMS45Mjg5IDAuOTI4OTMzQzExLjUzODQgMS4zMTk0NiAxMS41Mzg0IDEuOTUyNjIgMTEuOTI4OSAyLjM0MzE1TDE3LjU4NTggOEwxMS45Mjg5IDEzLjY1NjlDMTEuNTM4NCAxNC4wNDc0IDExLjUzODQgMTQuNjgwNSAxMS45Mjg5IDE1LjA3MTFDMTIuMzE5NSAxNS40NjE2IDEyLjk1MjYgMTUuNDYxNiAxMy4zNDMxIDE1LjA3MTFMMTkuNzA3MSA4LjcwNzExWk0tOC43NDIyOGUtMDggOUwxOSA5TDE5IDdMOC43NDIyOGUtMDggN0wtOC43NDIyOGUtMDggOVpcIlxuICAgICAgICAgICAgICBmaWxsPVwiIzE4MUYzM1wiXG4gICAgICAgICAgICA+PC9wYXRoPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX2JvZHlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX3dlZWtkYXlzXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX3dlZWtkYXlcIiAqbmdGb3I9XCJsZXQgd2Vla0RheSBvZiB3ZWVrRGF5c1wiPlxuICAgICAgICAgICAgPHNwYW4+e3sgd2Vla0RheS5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX19kYXlzXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX19kYXlcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnc2VsZWN0ZWQtc2FtZS1kYXknOiBkYXkuaXNTZWxlY3RlZFN0YXJ0RGF5ICYmIGRheS5pc1NlbGVjdGVkRW5kRGF5LFxuICAgICAgICAgICAgICAnc2VsZWN0ZWQtc3RhcnQtZGF5JzogZGF5LmlzU2VsZWN0ZWRTdGFydERheSxcbiAgICAgICAgICAgICAgJ3NlbGVjdGVkLWVuZC1kYXknOiBkYXkuaXNTZWxlY3RlZEVuZERheSxcbiAgICAgICAgICAgICAgJ2Rpc2FibGVkLWRheSc6IGRheS5pc0Rpc2FibGVkRGF5LFxuICAgICAgICAgICAgICAnaW4tcmFuZ2UtZGF5JzogZGF5LmluUmFuZ2VEYXksXG4gICAgICAgICAgICAgICdpcy12YWxpZC1kYXRlJzogZGF5LmRhdGUgPiAwICYmICEoZGF5LmlzU2VsZWN0ZWRTdGFydERheSAmJiBkYXkuaXNTZWxlY3RlZEVuZERheSlcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGRheSBvZiBuZXh0TW9udGhEYXRlc1wiXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0RGF5KCdSSUdIVCcsIGRheSlcIlxuICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInNlbGVjdERheSgnUklHSFQnLCBkYXkpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRheS5kYXRlID4gMFwiXG4gICAgICAgICAgICAgIFt0YWJpbmRleF09XCJkYXkuaXNEaXNhYmxlZERheSA/IC0xIDogMFwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicmV0cmFjdERheU1vbnRoKGRheS5kYXRlLCBuZXh0TW9udGgsIG5leHRZZWFyTnVtYmVyKVwiPlxuICAgICAgICAgICAgICB7eyBkYXkuZGF0ZSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImRhdGVyYW5nZXBpY2tlcl9fZm9vdGVyXCI+XG4gICAgPGJ1dHRvbiBtaXMtYnV0dG9uIHR5cGU9XCJub25lXCIgaWQ9J21vYmlsZS1mb290ZXItYnRuJyAoY2xpY2spPVwiY2FuY2VsRGF0ZVBpY2tlcigpXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtaXMtYnV0dG9uIHR5cGU9XCJwcmltYXJ5XCIgaWQ9XCJtb2JpbGUtZm9vdGVyLWJ0blwiIChjbGljayk9XCJhcHBseURhdGVzKClcIiBbZGlzYWJsZWRdPVwiIWlzRGF0ZXNWYWxpZFwiPkFwcGx5PC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+Il19