@hmcts/ccd-case-ui-toolkit 7.2.13-2895-rc1 → 7.2.13-close-query

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 (44) hide show
  1. package/esm2022/lib/app.config.mjs +1 -2
  2. package/esm2022/lib/components/form/date-input/date-input.component.mjs +3 -3
  3. package/esm2022/lib/shared/components/palette/document/write-document-field.component.mjs +47 -51
  4. package/esm2022/lib/shared/components/palette/number/write-number-field.component.mjs +4 -4
  5. package/esm2022/lib/shared/components/palette/palette.module.mjs +7 -3
  6. package/esm2022/lib/shared/components/palette/query-management/components/close-query/close-query.component.mjs +53 -0
  7. package/esm2022/lib/shared/components/palette/query-management/components/index.mjs +2 -1
  8. package/esm2022/lib/shared/components/palette/query-management/components/query-check-your-answers/query-check-your-answers.component.mjs +48 -20
  9. package/esm2022/lib/shared/components/palette/query-management/components/query-details/query-details.component.mjs +15 -9
  10. package/esm2022/lib/shared/components/palette/query-management/components/query-write/query-write-respond-to-query/query-write-respond-to-query.component.mjs +25 -8
  11. package/esm2022/lib/shared/components/palette/query-management/enums/query-item-response-status.enum.mjs +2 -1
  12. package/esm2022/lib/shared/components/palette/query-management/models/case-queries-collection.model.mjs +1 -1
  13. package/esm2022/lib/shared/components/palette/query-management/models/query-list/query-list-item/query-list-item.model.mjs +11 -2
  14. package/esm2022/lib/shared/components/palette/query-management/read-query-management-field.component.mjs +27 -6
  15. package/esm2022/lib/shared/components/palette/query-management/utils/query-management.utils.mjs +4 -2
  16. package/esm2022/lib/shared/components/workbasket-filters/workbasket-filters.component.mjs +76 -91
  17. package/esm2022/lib/shared/services/document-management/document-management.service.mjs +14 -38
  18. package/fesm2022/hmcts-ccd-case-ui-toolkit.mjs +353 -256
  19. package/fesm2022/hmcts-ccd-case-ui-toolkit.mjs.map +1 -1
  20. package/lib/app.config.d.ts +0 -2
  21. package/lib/app.config.d.ts.map +1 -1
  22. package/lib/shared/components/palette/document/write-document-field.component.d.ts +1 -2
  23. package/lib/shared/components/palette/document/write-document-field.component.d.ts.map +1 -1
  24. package/lib/shared/components/palette/palette.module.d.ts +33 -32
  25. package/lib/shared/components/palette/palette.module.d.ts.map +1 -1
  26. package/lib/shared/components/palette/query-management/components/close-query/close-query.component.d.ts +9 -0
  27. package/lib/shared/components/palette/query-management/components/close-query/close-query.component.d.ts.map +1 -0
  28. package/lib/shared/components/palette/query-management/components/index.d.ts +1 -0
  29. package/lib/shared/components/palette/query-management/components/index.d.ts.map +1 -1
  30. package/lib/shared/components/palette/query-management/components/query-details/query-details.component.d.ts.map +1 -1
  31. package/lib/shared/components/palette/query-management/enums/query-item-response-status.enum.d.ts +2 -1
  32. package/lib/shared/components/palette/query-management/enums/query-item-response-status.enum.d.ts.map +1 -1
  33. package/lib/shared/components/palette/query-management/models/case-queries-collection.model.d.ts +1 -0
  34. package/lib/shared/components/palette/query-management/models/case-queries-collection.model.d.ts.map +1 -1
  35. package/lib/shared/components/palette/query-management/models/query-list/query-list-item/query-list-item.model.d.ts +1 -0
  36. package/lib/shared/components/palette/query-management/models/query-list/query-list-item/query-list-item.model.d.ts.map +1 -1
  37. package/lib/shared/components/palette/query-management/read-query-management-field.component.d.ts +1 -0
  38. package/lib/shared/components/palette/query-management/read-query-management-field.component.d.ts.map +1 -1
  39. package/lib/shared/components/palette/query-management/utils/query-management.utils.d.ts.map +1 -1
  40. package/lib/shared/components/workbasket-filters/workbasket-filters.component.d.ts +0 -1
  41. package/lib/shared/components/workbasket-filters/workbasket-filters.component.d.ts.map +1 -1
  42. package/lib/shared/services/document-management/document-management.service.d.ts +1 -4
  43. package/lib/shared/services/document-management/document-management.service.d.ts.map +1 -1
  44. package/package.json +1 -1
@@ -15,8 +15,8 @@ import * as i3 from "../../services/order/order.service";
15
15
  import * as i4 from "../../services/jurisdiction/jurisdiction.service";
16
16
  import * as i5 from "../../services/alert/alert.service";
17
17
  import * as i6 from "../../services/window/window.service";
18
- function WorkbasketFiltersComponent_option_21_Template(rf, ctx) { if (rf & 1) {
19
- i0.ɵɵelementStart(0, "option", 14);
18
+ function WorkbasketFiltersComponent_option_9_Template(rf, ctx) { if (rf & 1) {
19
+ i0.ɵɵelementStart(0, "option", 11);
20
20
  i0.ɵɵtext(1);
21
21
  i0.ɵɵpipe(2, "rpxTranslate");
22
22
  i0.ɵɵelementEnd();
@@ -25,8 +25,8 @@ function WorkbasketFiltersComponent_option_21_Template(rf, ctx) { if (rf & 1) {
25
25
  i0.ɵɵadvance();
26
26
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(2, 2, "Select a value"));
27
27
  } }
28
- function WorkbasketFiltersComponent_option_22_Template(rf, ctx) { if (rf & 1) {
29
- i0.ɵɵelementStart(0, "option", 14);
28
+ function WorkbasketFiltersComponent_option_10_Template(rf, ctx) { if (rf & 1) {
29
+ i0.ɵɵelementStart(0, "option", 11);
30
30
  i0.ɵɵtext(1);
31
31
  i0.ɵɵpipe(2, "rpxTranslate");
32
32
  i0.ɵɵelementEnd();
@@ -36,8 +36,8 @@ function WorkbasketFiltersComponent_option_22_Template(rf, ctx) { if (rf & 1) {
36
36
  i0.ɵɵadvance();
37
37
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(2, 2, j_r1.name));
38
38
  } }
39
- function WorkbasketFiltersComponent_option_28_Template(rf, ctx) { if (rf & 1) {
40
- i0.ɵɵelementStart(0, "option", 14);
39
+ function WorkbasketFiltersComponent_option_16_Template(rf, ctx) { if (rf & 1) {
40
+ i0.ɵɵelementStart(0, "option", 11);
41
41
  i0.ɵɵtext(1);
42
42
  i0.ɵɵpipe(2, "rpxTranslate");
43
43
  i0.ɵɵelementEnd();
@@ -46,8 +46,8 @@ function WorkbasketFiltersComponent_option_28_Template(rf, ctx) { if (rf & 1) {
46
46
  i0.ɵɵadvance();
47
47
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(2, 2, "Select a value"));
48
48
  } }
49
- function WorkbasketFiltersComponent_option_29_Template(rf, ctx) { if (rf & 1) {
50
- i0.ɵɵelementStart(0, "option", 14);
49
+ function WorkbasketFiltersComponent_option_17_Template(rf, ctx) { if (rf & 1) {
50
+ i0.ɵɵelementStart(0, "option", 11);
51
51
  i0.ɵɵtext(1);
52
52
  i0.ɵɵpipe(2, "rpxTranslate");
53
53
  i0.ɵɵelementEnd();
@@ -57,8 +57,8 @@ function WorkbasketFiltersComponent_option_29_Template(rf, ctx) { if (rf & 1) {
57
57
  i0.ɵɵadvance();
58
58
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(2, 2, ct_r2.name));
59
59
  } }
60
- function WorkbasketFiltersComponent_option_38_Template(rf, ctx) { if (rf & 1) {
61
- i0.ɵɵelementStart(0, "option", 14);
60
+ function WorkbasketFiltersComponent_option_26_Template(rf, ctx) { if (rf & 1) {
61
+ i0.ɵɵelementStart(0, "option", 11);
62
62
  i0.ɵɵtext(1);
63
63
  i0.ɵɵpipe(2, "rpxTranslate");
64
64
  i0.ɵɵelementEnd();
@@ -68,10 +68,10 @@ function WorkbasketFiltersComponent_option_38_Template(rf, ctx) { if (rf & 1) {
68
68
  i0.ɵɵadvance();
69
69
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(2, 2, cs_r3.name));
70
70
  } }
71
- function WorkbasketFiltersComponent_ng_container_39_div_2_Template(rf, ctx) { if (rf & 1) {
71
+ function WorkbasketFiltersComponent_ng_container_27_div_2_Template(rf, ctx) { if (rf & 1) {
72
72
  const _r4 = i0.ɵɵgetCurrentView();
73
- i0.ɵɵelementStart(0, "div", 5)(1, "ccd-field-write", 20);
74
- i0.ɵɵlistener("keyup.enter", function WorkbasketFiltersComponent_ng_container_39_div_2_Template_ccd_field_write_keyup_enter_1_listener() { i0.ɵɵrestoreView(_r4); const ctx_r4 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r4.apply(null)); });
73
+ i0.ɵɵelementStart(0, "div", 2)(1, "ccd-field-write", 18);
74
+ i0.ɵɵlistener("keyup.enter", function WorkbasketFiltersComponent_ng_container_27_div_2_Template_ccd_field_write_keyup_enter_1_listener() { i0.ɵɵrestoreView(_r4); const ctx_r4 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r4.apply(null)); });
75
75
  i0.ɵɵelementEnd()();
76
76
  } if (rf & 2) {
77
77
  const workbasketInput_r6 = ctx.$implicit;
@@ -79,10 +79,10 @@ function WorkbasketFiltersComponent_ng_container_39_div_2_Template(rf, ctx) { if
79
79
  i0.ɵɵadvance();
80
80
  i0.ɵɵproperty("caseField", workbasketInput_r6.field)("formGroup", ctx_r4.formGroup)("isExpanded", true)("isInSearchBlock", true);
81
81
  } }
82
- function WorkbasketFiltersComponent_ng_container_39_Template(rf, ctx) { if (rf & 1) {
83
- i0.ɵɵelementContainerStart(0, 17);
84
- i0.ɵɵelementStart(1, "div", 18);
85
- i0.ɵɵtemplate(2, WorkbasketFiltersComponent_ng_container_39_div_2_Template, 2, 4, "div", 19);
82
+ function WorkbasketFiltersComponent_ng_container_27_Template(rf, ctx) { if (rf & 1) {
83
+ i0.ɵɵelementContainerStart(0, 15);
84
+ i0.ɵɵelementStart(1, "div", 16);
85
+ i0.ɵɵtemplate(2, WorkbasketFiltersComponent_ng_container_27_div_2_Template, 2, 4, "div", 17);
86
86
  i0.ɵɵelementEnd();
87
87
  i0.ɵɵelementContainerEnd();
88
88
  } if (rf & 2) {
@@ -125,9 +125,6 @@ export class WorkbasketFiltersComponent {
125
125
  this.alertService = alertService;
126
126
  this.windowService = windowService;
127
127
  }
128
- scrollToTop() {
129
- window.scrollTo({ top: 0, behavior: 'smooth' });
130
- }
131
128
  getDefaultJurisdiction() {
132
129
  if (!this.jurisdictions || this.jurisdictions.length === 0) {
133
130
  return null;
@@ -419,79 +416,62 @@ export class WorkbasketFiltersComponent {
419
416
  }
420
417
  }
421
418
  static ɵfac = function WorkbasketFiltersComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || WorkbasketFiltersComponent)(i0.ɵɵdirectiveInject(i1.ActivatedRoute), i0.ɵɵdirectiveInject(i2.WorkbasketInputFilterService), i0.ɵɵdirectiveInject(i3.OrderService), i0.ɵɵdirectiveInject(i4.JurisdictionService), i0.ɵɵdirectiveInject(i5.AlertService), i0.ɵɵdirectiveInject(i6.WindowService)); };
422
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: WorkbasketFiltersComponent, selectors: [["ccd-workbasket-filters"]], inputs: { jurisdictions: "jurisdictions", defaults: "defaults" }, outputs: { onApply: "onApply", onReset: "onReset" }, decls: 45, vars: 55, consts: [["id", "filters", 1, "global-display"], [1, "form-group", "flex"], ["aria-label", "Filters", 1, "heading-h2"], ["type", "button", 1, "button", "workbasket-filters-apply", 3, "click", "disabled", "title"], ["type", "button", 1, "button", "button-secondary", 3, "click", "title"], [1, "form-group"], ["for", "wb-jurisdiction", 1, "form-label"], ["id", "wb-jurisdiction", "name", "jurisdiction", "aria-controls", "search-result", 1, "form-control", "form-control-3-4", "ccd-dropdown", 3, "ngModelChange", "change", "ngModel"], [3, "ngValue", 4, "ngIf"], [3, "ngValue", 4, "ngFor", "ngForOf"], ["for", "wb-case-type", 1, "form-label"], ["id", "wb-case-type", "name", "case-type", "aria-controls", "search-result", 1, "form-control", "form-control-3-4", "ccd-dropdown", 3, "ngModelChange", "change", "ngModel", "disabled"], ["for", "wb-case-state", 1, "form-label"], ["id", "wb-case-state", "name", "state", "aria-controls", "search-result", 1, "form-control", "form-control-3-4", "ccd-dropdown", 3, "ngModelChange", "ngModel", "disabled"], [3, "ngValue"], ["ccdConditionalShowForm", "", 3, "formGroup", "contextFields", 4, "ngIf"], ["type", "button", 1, "button", 3, "click", "title"], ["ccdConditionalShowForm", "", 3, "formGroup", "contextFields"], ["id", "dynamicFilters"], ["class", "form-group", 4, "ngFor", "ngForOf"], [3, "keyup.enter", "caseField", "formGroup", "isExpanded", "isInSearchBlock"]], template: function WorkbasketFiltersComponent_Template(rf, ctx) { if (rf & 1) {
423
- i0.ɵɵelementStart(0, "form", 0)(1, "div", 1)(2, "fieldset", 2);
424
- i0.ɵɵtext(3);
425
- i0.ɵɵpipe(4, "rpxTranslate");
419
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: WorkbasketFiltersComponent, selectors: [["ccd-workbasket-filters"]], inputs: { jurisdictions: "jurisdictions", defaults: "defaults" }, outputs: { onApply: "onApply", onReset: "onReset" }, decls: 39, vars: 46, consts: [["aria-label", "Filters", 1, "heading-h2"], [1, "global-display"], [1, "form-group"], ["for", "wb-jurisdiction", 1, "form-label"], ["id", "wb-jurisdiction", "name", "jurisdiction", "aria-controls", "search-result", 1, "form-control", "form-control-3-4", "ccd-dropdown", 3, "ngModelChange", "change", "ngModel"], [3, "ngValue", 4, "ngIf"], [3, "ngValue", 4, "ngFor", "ngForOf"], ["for", "wb-case-type", 1, "form-label"], ["id", "wb-case-type", "name", "case-type", "aria-controls", "search-result", 1, "form-control", "form-control-3-4", "ccd-dropdown", 3, "ngModelChange", "change", "ngModel", "disabled"], ["for", "wb-case-state", 1, "form-label"], ["id", "wb-case-state", "name", "state", "aria-controls", "search-result", 1, "form-control", "form-control-3-4", "ccd-dropdown", 3, "ngModelChange", "ngModel", "disabled"], [3, "ngValue"], ["ccdConditionalShowForm", "", 3, "formGroup", "contextFields", 4, "ngIf"], ["type", "button", 1, "button", "workbasket-filters-apply", 3, "click", "disabled", "title"], ["type", "button", 1, "button", "button-secondary", 3, "click", "title"], ["ccdConditionalShowForm", "", 3, "formGroup", "contextFields"], ["id", "dynamicFilters"], ["class", "form-group", 4, "ngFor", "ngForOf"], [3, "keyup.enter", "caseField", "formGroup", "isExpanded", "isInSearchBlock"]], template: function WorkbasketFiltersComponent_Template(rf, ctx) { if (rf & 1) {
420
+ i0.ɵɵelementStart(0, "h2", 0);
421
+ i0.ɵɵtext(1);
422
+ i0.ɵɵpipe(2, "rpxTranslate");
426
423
  i0.ɵɵelementEnd();
427
- i0.ɵɵelementStart(5, "button", 3);
428
- i0.ɵɵpipe(6, "rpxTranslate");
424
+ i0.ɵɵelementStart(3, "form", 1)(4, "div", 2)(5, "label", 3);
425
+ i0.ɵɵtext(6);
429
426
  i0.ɵɵpipe(7, "rpxTranslate");
430
- i0.ɵɵlistener("click", function WorkbasketFiltersComponent_Template_button_click_5_listener() { return ctx.apply(true); });
431
- i0.ɵɵtext(8);
432
- i0.ɵɵpipe(9, "rpxTranslate");
433
- i0.ɵɵelementEnd();
434
- i0.ɵɵtext(10, "\u00A0\u00A0\u00A0 ");
435
- i0.ɵɵelementStart(11, "button", 4);
436
- i0.ɵɵpipe(12, "rpxTranslate");
437
- i0.ɵɵpipe(13, "rpxTranslate");
438
- i0.ɵɵlistener("click", function WorkbasketFiltersComponent_Template_button_click_11_listener() { return ctx.reset(); });
439
- i0.ɵɵtext(14);
440
- i0.ɵɵpipe(15, "rpxTranslate");
441
- i0.ɵɵelementEnd()();
442
- i0.ɵɵelementStart(16, "div", 5)(17, "label", 6);
443
- i0.ɵɵtext(18);
444
- i0.ɵɵpipe(19, "rpxTranslate");
445
427
  i0.ɵɵelementEnd();
446
- i0.ɵɵelementStart(20, "select", 7);
447
- i0.ɵɵtwoWayListener("ngModelChange", function WorkbasketFiltersComponent_Template_select_ngModelChange_20_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.selected.jurisdiction, $event) || (ctx.selected.jurisdiction = $event); return $event; });
448
- i0.ɵɵlistener("change", function WorkbasketFiltersComponent_Template_select_change_20_listener() { return ctx.onJurisdictionIdChange(); });
449
- i0.ɵɵtemplate(21, WorkbasketFiltersComponent_option_21_Template, 3, 4, "option", 8)(22, WorkbasketFiltersComponent_option_22_Template, 3, 4, "option", 9);
428
+ i0.ɵɵelementStart(8, "select", 4);
429
+ i0.ɵɵtwoWayListener("ngModelChange", function WorkbasketFiltersComponent_Template_select_ngModelChange_8_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.selected.jurisdiction, $event) || (ctx.selected.jurisdiction = $event); return $event; });
430
+ i0.ɵɵlistener("change", function WorkbasketFiltersComponent_Template_select_change_8_listener() { return ctx.onJurisdictionIdChange(); });
431
+ i0.ɵɵtemplate(9, WorkbasketFiltersComponent_option_9_Template, 3, 4, "option", 5)(10, WorkbasketFiltersComponent_option_10_Template, 3, 4, "option", 6);
450
432
  i0.ɵɵelementEnd()();
451
- i0.ɵɵelementStart(23, "div", 5)(24, "label", 10);
452
- i0.ɵɵtext(25);
453
- i0.ɵɵpipe(26, "rpxTranslate");
433
+ i0.ɵɵelementStart(11, "div", 2)(12, "label", 7);
434
+ i0.ɵɵtext(13);
435
+ i0.ɵɵpipe(14, "rpxTranslate");
454
436
  i0.ɵɵelementEnd();
455
- i0.ɵɵelementStart(27, "select", 11);
456
- i0.ɵɵtwoWayListener("ngModelChange", function WorkbasketFiltersComponent_Template_select_ngModelChange_27_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.selected.caseType, $event) || (ctx.selected.caseType = $event); return $event; });
457
- i0.ɵɵlistener("change", function WorkbasketFiltersComponent_Template_select_change_27_listener() { return ctx.onCaseTypeIdChange(); });
458
- i0.ɵɵtemplate(28, WorkbasketFiltersComponent_option_28_Template, 3, 4, "option", 8)(29, WorkbasketFiltersComponent_option_29_Template, 3, 4, "option", 9);
437
+ i0.ɵɵelementStart(15, "select", 8);
438
+ i0.ɵɵtwoWayListener("ngModelChange", function WorkbasketFiltersComponent_Template_select_ngModelChange_15_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.selected.caseType, $event) || (ctx.selected.caseType = $event); return $event; });
439
+ i0.ɵɵlistener("change", function WorkbasketFiltersComponent_Template_select_change_15_listener() { return ctx.onCaseTypeIdChange(); });
440
+ i0.ɵɵtemplate(16, WorkbasketFiltersComponent_option_16_Template, 3, 4, "option", 5)(17, WorkbasketFiltersComponent_option_17_Template, 3, 4, "option", 6);
459
441
  i0.ɵɵelementEnd()();
460
- i0.ɵɵelementStart(30, "div", 5)(31, "label", 12);
461
- i0.ɵɵtext(32);
462
- i0.ɵɵpipe(33, "rpxTranslate");
442
+ i0.ɵɵelementStart(18, "div", 2)(19, "label", 9);
443
+ i0.ɵɵtext(20);
444
+ i0.ɵɵpipe(21, "rpxTranslate");
463
445
  i0.ɵɵelementEnd();
464
- i0.ɵɵelementStart(34, "select", 13);
465
- i0.ɵɵtwoWayListener("ngModelChange", function WorkbasketFiltersComponent_Template_select_ngModelChange_34_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.selected.caseState, $event) || (ctx.selected.caseState = $event); return $event; });
466
- i0.ɵɵelementStart(35, "option", 14);
467
- i0.ɵɵtext(36);
468
- i0.ɵɵpipe(37, "rpxTranslate");
446
+ i0.ɵɵelementStart(22, "select", 10);
447
+ i0.ɵɵtwoWayListener("ngModelChange", function WorkbasketFiltersComponent_Template_select_ngModelChange_22_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.selected.caseState, $event) || (ctx.selected.caseState = $event); return $event; });
448
+ i0.ɵɵelementStart(23, "option", 11);
449
+ i0.ɵɵtext(24);
450
+ i0.ɵɵpipe(25, "rpxTranslate");
469
451
  i0.ɵɵelementEnd();
470
- i0.ɵɵtemplate(38, WorkbasketFiltersComponent_option_38_Template, 3, 4, "option", 9);
452
+ i0.ɵɵtemplate(26, WorkbasketFiltersComponent_option_26_Template, 3, 4, "option", 6);
471
453
  i0.ɵɵelementEnd()();
472
- i0.ɵɵtemplate(39, WorkbasketFiltersComponent_ng_container_39_Template, 3, 3, "ng-container", 15);
473
- i0.ɵɵelementStart(40, "button", 16);
474
- i0.ɵɵpipe(41, "rpxTranslate");
475
- i0.ɵɵpipe(42, "rpxTranslate");
476
- i0.ɵɵlistener("click", function WorkbasketFiltersComponent_Template_button_click_40_listener() { return ctx.scrollToTop(); });
477
- i0.ɵɵtext(43);
478
- i0.ɵɵpipe(44, "rpxTranslate");
454
+ i0.ɵɵtemplate(27, WorkbasketFiltersComponent_ng_container_27_Template, 3, 3, "ng-container", 12);
455
+ i0.ɵɵelementStart(28, "button", 13);
456
+ i0.ɵɵpipe(29, "rpxTranslate");
457
+ i0.ɵɵpipe(30, "rpxTranslate");
458
+ i0.ɵɵlistener("click", function WorkbasketFiltersComponent_Template_button_click_28_listener() { return ctx.apply(true); });
459
+ i0.ɵɵtext(31);
460
+ i0.ɵɵpipe(32, "rpxTranslate");
461
+ i0.ɵɵelementEnd();
462
+ i0.ɵɵtext(33, " \u00A0\u00A0\u00A0 ");
463
+ i0.ɵɵelementStart(34, "button", 14);
464
+ i0.ɵɵpipe(35, "rpxTranslate");
465
+ i0.ɵɵpipe(36, "rpxTranslate");
466
+ i0.ɵɵlistener("click", function WorkbasketFiltersComponent_Template_button_click_34_listener() { return ctx.reset(); });
467
+ i0.ɵɵtext(37);
468
+ i0.ɵɵpipe(38, "rpxTranslate");
479
469
  i0.ɵɵelementEnd()();
480
470
  } if (rf & 2) {
481
- i0.ɵɵadvance(3);
482
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(4, 27, "Filters"));
483
- i0.ɵɵadvance(2);
484
- i0.ɵɵproperty("disabled", ctx.isApplyButtonDisabled())("title", i0.ɵɵpipeBind1(6, 29, "Apply filter"));
485
- i0.ɵɵattribute("aria-label", i0.ɵɵpipeBind1(7, 31, "Apply filter"));
486
- i0.ɵɵadvance(3);
487
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(9, 33, "Apply"), " ");
488
- i0.ɵɵadvance(3);
489
- i0.ɵɵproperty("title", i0.ɵɵpipeBind1(12, 35, "Reset filter"));
490
- i0.ɵɵattribute("aria-label", i0.ɵɵpipeBind1(13, 37, "Reset filter"));
491
- i0.ɵɵadvance(3);
492
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(15, 39, "Reset"), " ");
493
- i0.ɵɵadvance(4);
494
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(19, 41, "Jurisdiction"));
471
+ i0.ɵɵadvance();
472
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(2, 24, "Filters"));
473
+ i0.ɵɵadvance(5);
474
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(7, 26, "Jurisdiction"));
495
475
  i0.ɵɵadvance(2);
496
476
  i0.ɵɵtwoWayProperty("ngModel", ctx.selected.jurisdiction);
497
477
  i0.ɵɵadvance();
@@ -499,7 +479,7 @@ export class WorkbasketFiltersComponent {
499
479
  i0.ɵɵadvance();
500
480
  i0.ɵɵproperty("ngForOf", ctx.jurisdictions);
501
481
  i0.ɵɵadvance(3);
502
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(26, 43, "Case type"));
482
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(14, 28, "Case type"));
503
483
  i0.ɵɵadvance(2);
504
484
  i0.ɵɵtwoWayProperty("ngModel", ctx.selected.caseType);
505
485
  i0.ɵɵproperty("disabled", ctx.isCaseTypesDropdownDisabled());
@@ -508,28 +488,33 @@ export class WorkbasketFiltersComponent {
508
488
  i0.ɵɵadvance();
509
489
  i0.ɵɵproperty("ngForOf", ctx.selectedJurisdictionCaseTypes);
510
490
  i0.ɵɵadvance(3);
511
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(33, 45, "State"));
491
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(21, 30, "State"));
512
492
  i0.ɵɵadvance(2);
513
493
  i0.ɵɵtwoWayProperty("ngModel", ctx.selected.caseState);
514
494
  i0.ɵɵproperty("disabled", ctx.isCaseStatesDropdownDisabled());
515
495
  i0.ɵɵadvance();
516
496
  i0.ɵɵproperty("ngValue", null);
517
497
  i0.ɵɵadvance();
518
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(37, 47, "Any"));
498
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(25, 32, "Any"));
519
499
  i0.ɵɵadvance(2);
520
500
  i0.ɵɵproperty("ngForOf", ctx.selectedCaseTypeStates);
521
501
  i0.ɵɵadvance();
522
502
  i0.ɵɵproperty("ngIf", ctx.isSearchableAndWorkbasketInputsReady());
523
503
  i0.ɵɵadvance();
524
- i0.ɵɵproperty("title", i0.ɵɵpipeBind1(41, 49, "Back to top"));
525
- i0.ɵɵattribute("aria-label", i0.ɵɵpipeBind1(42, 51, "Back to top"));
504
+ i0.ɵɵproperty("disabled", ctx.isApplyButtonDisabled())("title", i0.ɵɵpipeBind1(29, 34, "Apply filter"));
505
+ i0.ɵɵattribute("aria-label", i0.ɵɵpipeBind1(30, 36, "Apply filter"));
506
+ i0.ɵɵadvance(3);
507
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(32, 38, "Apply"), " ");
508
+ i0.ɵɵadvance(3);
509
+ i0.ɵɵproperty("title", i0.ɵɵpipeBind1(35, 40, "Reset filter"));
510
+ i0.ɵɵattribute("aria-label", i0.ɵɵpipeBind1(36, 42, "Reset filter"));
526
511
  i0.ɵɵadvance(3);
527
- i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind1(44, 53, "Back to top"), " ");
528
- } }, styles: ["div[_ngcontent-%COMP%] select[_ngcontent-%COMP%]{font-family:nta,Arial,sans-serif;font-weight:400;text-transform:none;font-size:11pt;line-height:1.2727272727}@media (min-width: 641px){div[_ngcontent-%COMP%] select[_ngcontent-%COMP%]{font-size:12pt;line-height:1.3333333333}}.form-group[_ngcontent-%COMP%]{margin-bottom:7px}.form-group.flex[_ngcontent-%COMP%]{display:flex}.form-group.flex[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{margin:1rem .25rem .25rem;height:2rem}.ccd-dropdown[_ngcontent-%COMP%]{width:100%}span.heading-medium[_ngcontent-%COMP%]{margin-top:0}"] });
512
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(38, 44, "Reset"), " ");
513
+ } }, styles: ["div[_ngcontent-%COMP%] select[_ngcontent-%COMP%]{font-family:nta,Arial,sans-serif;font-weight:400;text-transform:none;font-size:11pt;line-height:1.2727272727}@media (min-width: 641px){div[_ngcontent-%COMP%] select[_ngcontent-%COMP%]{font-size:12pt;line-height:1.3333333333}}.form-group[_ngcontent-%COMP%]{margin-bottom:7px}.ccd-dropdown[_ngcontent-%COMP%]{width:100%}span.heading-medium[_ngcontent-%COMP%]{margin-top:0}"] });
529
514
  }
530
515
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(WorkbasketFiltersComponent, [{
531
516
  type: Component,
532
- args: [{ selector: 'ccd-workbasket-filters', template: "<form id=\"filters\" class=\"global-display\">\n <div class=\"form-group flex\">\n <fieldset class=\"heading-h2\" aria-label=\"Filters\">{{'Filters' | rpxTranslate }}</fieldset>\n <button type=\"button\" class=\"button workbasket-filters-apply\" (click)=\"apply(true)\" [disabled]=\"isApplyButtonDisabled()\"\n [title]=\"'Apply filter' | rpxTranslate\" [attr.aria-label]=\"'Apply filter' | rpxTranslate\">\n {{'Apply' | rpxTranslate}}\n </button>&nbsp;&nbsp;&nbsp;\n <button type=\"button\" (click)=\"reset()\" class=\"button button-secondary\"\n [title]=\"'Reset filter' | rpxTranslate\" [attr.aria-label]=\"'Reset filter' | rpxTranslate\">\n {{'Reset' | rpxTranslate}}\n </button>\n </div>\n\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"wb-jurisdiction\">{{'Jurisdiction' | rpxTranslate}}</label>\n <select class=\"form-control form-control-3-4 ccd-dropdown\" id=\"wb-jurisdiction\"\n name=\"jurisdiction\" [(ngModel)]=\"selected.jurisdiction\" aria-controls=\"search-result\"\n (change)=\"onJurisdictionIdChange()\">\n <option *ngIf=\"!workbasketDefaults\" [ngValue]=\"null\">{{'Select a value' | rpxTranslate}}</option>\n <option *ngFor=\"let j of jurisdictions\" [ngValue]=\"j\">{{j.name | rpxTranslate}}</option>\n </select>\n </div>\n\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"wb-case-type\">{{'Case type' | rpxTranslate}}</label>\n <select class=\"form-control form-control-3-4 ccd-dropdown\" id=\"wb-case-type\"\n name=\"case-type\" [(ngModel)]=\"selected.caseType\" [disabled]=\"isCaseTypesDropdownDisabled()\"\n (change)=\"onCaseTypeIdChange()\" aria-controls=\"search-result\">\n <option *ngIf=\"!workbasketDefaults\" [ngValue]=\"null\">{{'Select a value' | rpxTranslate}}</option>\n <option *ngFor=\"let ct of selectedJurisdictionCaseTypes\" [ngValue]=\"ct\">{{ct.name | rpxTranslate}}</option>\n </select>\n </div>\n\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"wb-case-state\">{{'State' | rpxTranslate}}</label>\n <select class=\"form-control form-control-3-4 ccd-dropdown\" id=\"wb-case-state\"\n name=\"state\" [(ngModel)]=\"selected.caseState\" [disabled]=\"isCaseStatesDropdownDisabled()\"\n aria-controls=\"search-result\">\n <option [ngValue]=\"null\">{{'Any' | rpxTranslate}}</option>\n <option *ngFor=\"let cs of selectedCaseTypeStates\" [ngValue]=\"cs\">{{cs.name | rpxTranslate}}</option>\n </select>\n </div>\n\n <ng-container ccdConditionalShowForm *ngIf=\"isSearchableAndWorkbasketInputsReady()\" [formGroup]=\"formGroup\" [contextFields]=\"caseFields\">\n <div id=\"dynamicFilters\">\n <div class=\"form-group\" *ngFor=\"let workbasketInput of workbasketInputs\">\n <ccd-field-write [caseField]=\"workbasketInput.field\" [formGroup]=\"formGroup\" [isExpanded]=\"true\" [isInSearchBlock]=\"true\" (keyup.enter)=\"apply(null)\">\n </ccd-field-write>\n </div>\n </div>\n </ng-container>\n\n <button type=\"button\" class=\"button\" (click)=\"scrollToTop()\"\n [title]=\"'Back to top' | rpxTranslate\" [attr.aria-label]=\"'Back to top' | rpxTranslate\">{{'Back to top' | rpxTranslate}}\n </button>\n</form>\n", styles: ["div select{font-family:nta,Arial,sans-serif;font-weight:400;text-transform:none;font-size:11pt;line-height:1.2727272727}@media (min-width: 641px){div select{font-size:12pt;line-height:1.3333333333}}.form-group{margin-bottom:7px}.form-group.flex{display:flex}.form-group.flex button{margin:1rem .25rem .25rem;height:2rem}.ccd-dropdown{width:100%}span.heading-medium{margin-top:0}\n"] }]
517
+ args: [{ selector: 'ccd-workbasket-filters', template: "<h2 class=\"heading-h2\" aria-label=\"Filters\">{{'Filters' | rpxTranslate }}</h2>\n\n<form class=\"global-display\">\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"wb-jurisdiction\">{{'Jurisdiction' | rpxTranslate}}</label>\n <select class=\"form-control form-control-3-4 ccd-dropdown\" id=\"wb-jurisdiction\"\n name=\"jurisdiction\" [(ngModel)]=\"selected.jurisdiction\" aria-controls=\"search-result\"\n (change)=\"onJurisdictionIdChange()\">\n <option *ngIf=\"!workbasketDefaults\" [ngValue]=\"null\">{{'Select a value' | rpxTranslate}}</option>\n <option *ngFor=\"let j of jurisdictions\" [ngValue]=\"j\">{{j.name | rpxTranslate}}</option>\n </select>\n </div>\n\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"wb-case-type\">{{'Case type' | rpxTranslate}}</label>\n <select class=\"form-control form-control-3-4 ccd-dropdown\" id=\"wb-case-type\"\n name=\"case-type\" [(ngModel)]=\"selected.caseType\" [disabled]=\"isCaseTypesDropdownDisabled()\"\n (change)=\"onCaseTypeIdChange()\" aria-controls=\"search-result\">\n <option *ngIf=\"!workbasketDefaults\" [ngValue]=\"null\">{{'Select a value' | rpxTranslate}}</option>\n <option *ngFor=\"let ct of selectedJurisdictionCaseTypes\" [ngValue]=\"ct\">{{ct.name | rpxTranslate}}</option>\n </select>\n </div>\n\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"wb-case-state\">{{'State' | rpxTranslate}}</label>\n <select class=\"form-control form-control-3-4 ccd-dropdown\" id=\"wb-case-state\"\n name=\"state\" [(ngModel)]=\"selected.caseState\" [disabled]=\"isCaseStatesDropdownDisabled()\"\n aria-controls=\"search-result\">\n <option [ngValue]=\"null\">{{'Any' | rpxTranslate}}</option>\n <option *ngFor=\"let cs of selectedCaseTypeStates\" [ngValue]=\"cs\">{{cs.name | rpxTranslate}}</option>\n </select>\n </div>\n\n <ng-container ccdConditionalShowForm *ngIf=\"isSearchableAndWorkbasketInputsReady()\" [formGroup]=\"formGroup\" [contextFields]=\"caseFields\">\n <div id=\"dynamicFilters\">\n <div class=\"form-group\" *ngFor=\"let workbasketInput of workbasketInputs\">\n <ccd-field-write [caseField]=\"workbasketInput.field\" [formGroup]=\"formGroup\" [isExpanded]=\"true\" [isInSearchBlock]=\"true\" (keyup.enter)=\"apply(null)\">\n </ccd-field-write>\n </div>\n </div>\n </ng-container>\n\n <button type=\"button\" class=\"button workbasket-filters-apply\" (click)=\"apply(true)\" [disabled]=\"isApplyButtonDisabled()\"\n [title]=\"'Apply filter' | rpxTranslate\" [attr.aria-label]=\"'Apply filter' | rpxTranslate\">\n {{'Apply' | rpxTranslate}}\n </button> &nbsp;&nbsp;&nbsp;\n <button type=\"button\" (click)=\"reset()\" class=\"button button-secondary\"\n [title]=\"'Reset filter' | rpxTranslate\" [attr.aria-label]=\"'Reset filter' | rpxTranslate\">\n {{'Reset' | rpxTranslate}}\n </button>\n</form>\n", styles: ["div select{font-family:nta,Arial,sans-serif;font-weight:400;text-transform:none;font-size:11pt;line-height:1.2727272727}@media (min-width: 641px){div select{font-size:12pt;line-height:1.3333333333}}.form-group{margin-bottom:7px}.ccd-dropdown{width:100%}span.heading-medium{margin-top:0}\n"] }]
533
518
  }], () => [{ type: i1.ActivatedRoute }, { type: i2.WorkbasketInputFilterService }, { type: i3.OrderService }, { type: i4.JurisdictionService }, { type: i5.AlertService }, { type: i6.WindowService }], { jurisdictions: [{
534
519
  type: Input
535
520
  }], defaults: [{
@@ -540,4 +525,4 @@ export class WorkbasketFiltersComponent {
540
525
  type: Output
541
526
  }] }); })();
542
527
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(WorkbasketFiltersComponent, { className: "WorkbasketFiltersComponent", filePath: "lib/shared/components/workbasket-filters/workbasket-filters.component.ts", lineNumber: 26 }); })();
543
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Jhc2tldC1maWx0ZXJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy93b3JrYmFza2V0LWZpbHRlcnMvd29ya2Jhc2tldC1maWx0ZXJzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy93b3JrYmFza2V0LWZpbHRlcnMvd29ya2Jhc2tldC1maWx0ZXJzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQTBCLE1BQU0saUJBQWlCLENBQUM7QUFDekUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBTXRDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDakUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDdkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwyREFBMkQsQ0FBQzs7Ozs7Ozs7O0lDSW5HLGtDQUFxRDtJQUFBLFlBQW1DOztJQUFBLGlCQUFTOztJQUE3RCw4QkFBZ0I7SUFBQyxjQUFtQztJQUFu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QUVwRCxjQUF5QjtZQUF6Qiw4Q0FBeUI7WUFDWixjQUFnQjtZQUFoQiwyQ0FBZ0I7WUFLSyxlQUE4QjtZQUE5Qix5REFBOEI7WUFFbEQsZUFBK0I7WUFBL0IscURBQStCO1lBQUMsNERBQTBDO1lBRXhGLGNBQXlCO1lBQXpCLDhDQUF5QjtZQUNYLGNBQWdDO1lBQWhDLDJEQUFnQztZQUtYLGVBQTBCO1lBQTFCLHFEQUEwQjtZQUVuRCxlQUFnQztZQUFoQyxzREFBZ0M7WUFBQyw2REFBMkM7WUFFdkYsY0FBZ0I7WUFBaEIsOEJBQWdCO1lBQUMsY0FBd0I7WUFBeEIsbURBQXdCO1lBQzFCLGVBQXlCO1lBQXpCLG9EQUF5QjtZQUlkLGNBQTRDO1lBQTVDLGlFQUE0QztZQVUxRSxjQUFzQztZQUF0Qyw2REFBc0M7O1lBQWtELGVBQzlGO1lBRDhGLHFFQUM5Rjs7O2lGRDdCUywwQkFBMEI7Y0FMdEMsU0FBUzsyQkFDRSx3QkFBd0I7OE1BVzNCLGFBQWE7a0JBRG5CLEtBQUs7WUFJQyxRQUFRO2tCQURkLEtBQUs7WUFJQyxPQUFPO2tCQURiLE1BQU07WUFJQSxPQUFPO2tCQURiLE1BQU07O2tGQWZJLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDYXNlRmllbGQgfSBmcm9tICcuLi8uLi9kb21haW4vZGVmaW5pdGlvbi9jYXNlLWZpZWxkLm1vZGVsJztcbmltcG9ydCB7IENhc2VTdGF0ZSB9IGZyb20gJy4uLy4uL2RvbWFpbi9kZWZpbml0aW9uL2Nhc2Utc3RhdGUubW9kZWwnO1xuaW1wb3J0IHsgQ2FzZVR5cGVMaXRlIH0gZnJvbSAnLi4vLi4vZG9tYWluL2RlZmluaXRpb24vY2FzZS10eXBlLWxpdGUubW9kZWwnO1xuaW1wb3J0IHsgSnVyaXNkaWN0aW9uIH0gZnJvbSAnLi4vLi4vZG9tYWluL2RlZmluaXRpb24vanVyaXNkaWN0aW9uLm1vZGVsJztcbmltcG9ydCB7IFdvcmtiYXNrZXRJbnB1dE1vZGVsIH0gZnJvbSAnLi4vLi4vZG9tYWluL3dvcmtiYXNrZXQvd29ya2Jhc2tldC1pbnB1dC5tb2RlbCc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hbGVydC9hbGVydC5zZXJ2aWNlJztcbmltcG9ydCB7IEZpZWxkc1V0aWxzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmllbGRzL2ZpZWxkcy51dGlscyc7XG5pbXBvcnQgeyBKdXJpc2RpY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvanVyaXNkaWN0aW9uL2p1cmlzZGljdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IE9yZGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL29yZGVyL29yZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgV2luZG93U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3dpbmRvdy93aW5kb3cuc2VydmljZSc7XG5pbXBvcnQgeyBXb3JrYmFza2V0SW5wdXRGaWx0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvd29ya2Jhc2tldC93b3JrYmFza2V0LWlucHV0LWZpbHRlci5zZXJ2aWNlJztcblxuY29uc3QgRk9STV9HUk9VUF9WQUxfTE9DX1NUT1JBR0UgPSAnd29ya2Jhc2tldC1maWx0ZXItZm9ybS1ncm91cC12YWx1ZSc7XG5jb25zdCBTQVZFRF9RVUVSWV9QQVJBTV9MT0NfU1RPUkFHRSA9ICdzYXZlZFF1ZXJ5UGFyYW1zJztcbmNvbnN0IFJFR0lPTl9MSVNUX0FORF9GUkNfRklMVEVSID0gJ3JlZ2lvbkxpc3QnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY2Qtd29ya2Jhc2tldC1maWx0ZXJzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3dvcmtiYXNrZXQtZmlsdGVycy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3dvcmtiYXNrZXQtZmlsdGVycy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFdvcmtiYXNrZXRGaWx0ZXJzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQQVJBTV9KVVJJU0RJQ1RJT04gPSAnanVyaXNkaWN0aW9uJztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQQVJBTV9DQVNFX1RZUEUgPSAnY2FzZS10eXBlJztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQQVJBTV9DQVNFX1NUQVRFID0gJ2Nhc2Utc3RhdGUnO1xuICBwdWJsaWMgY2FzZUZpZWxkczogQ2FzZUZpZWxkW107XG5cbiAgQElucHV0KClcbiAgcHVibGljIGp1cmlzZGljdGlvbnM6IEp1cmlzZGljdGlvbltdO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBkZWZhdWx0cztcblxuICBAT3V0cHV0KClcbiAgcHVibGljIG9uQXBwbHk6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgb25SZXNldDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHVibGljIHdvcmtiYXNrZXRJbnB1dHM6IFdvcmtiYXNrZXRJbnB1dE1vZGVsW107XG4gIHB1YmxpYyB3b3JrYmFza2V0SW5wdXRzUmVhZHk6IGJvb2xlYW47XG5cbiAgcHVibGljIHdvcmtiYXNrZXREZWZhdWx0czogYm9vbGVhbjtcblxuICBwdWJsaWMgc2VsZWN0ZWQ6IHtcbiAgICBpbml0PzogYm9vbGVhbixcbiAgICBqdXJpc2RpY3Rpb24/OiBKdXJpc2RpY3Rpb24sXG4gICAgY2FzZVR5cGU/OiBDYXNlVHlwZUxpdGUsXG4gICAgY2FzZVN0YXRlPzogQ2FzZVN0YXRlLFxuICAgIGZvcm1Hcm91cD86IEZvcm1Hcm91cCxcbiAgICBwYWdlPzogbnVtYmVyLFxuICAgIG1ldGFkYXRhRmllbGRzPzogc3RyaW5nW11cbiAgLy8gRVhVSS0zMTYyIC0gc2VsZWN0ZWQgaXMgbmV2ZXIgdW5kZWZpbmVkXG4gIH0gPSB7fTtcblxuICBwdWJsaWMgZm9ybUdyb3VwOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcblxuICBwdWJsaWMgc2VsZWN0ZWRKdXJpc2RpY3Rpb25DYXNlVHlwZXM/OiBDYXNlVHlwZUxpdGVbXTtcbiAgcHVibGljIHNlbGVjdGVkQ2FzZVR5cGVTdGF0ZXM/OiBDYXNlU3RhdGVbXTtcblxuICBwdWJsaWMgaW5pdGlhbGlzZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHdvcmtiYXNrZXRJbnB1dEZpbHRlclNlcnZpY2U6IFdvcmtiYXNrZXRJbnB1dEZpbHRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBvcmRlclNlcnZpY2U6IE9yZGVyU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGp1cmlzZGljdGlvblNlcnZpY2U6IEp1cmlzZGljdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHdpbmRvd1NlcnZpY2U6IFdpbmRvd1NlcnZpY2UpIHtcbiAgfVxuXG4gIHB1YmxpYyBzY3JvbGxUb1RvcCgpOiB2b2lkIHtcbiAgICB3aW5kb3cuc2Nyb2xsVG8oeyB0b3A6IDAsIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVmYXVsdEp1cmlzZGljdGlvbigpOiBKdXJpc2RpY3Rpb24ge1xuICAgIGlmICghdGhpcy5qdXJpc2RpY3Rpb25zIHx8IHRoaXMuanVyaXNkaWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0cy5qdXJpc2RpY3Rpb25faWRcbiAgICAgID8gdGhpcy5qdXJpc2RpY3Rpb25zLmZpbmQoaiA9PiB0aGlzLmRlZmF1bHRzLmp1cmlzZGljdGlvbl9pZCA9PT0gai5pZClcbiAgICAgIDogdGhpcy5qdXJpc2RpY3Rpb25zWzBdO1xuICB9XG4gIHByaXZhdGUgZ2V0RGVmYXVsdENhc2VUeXBlKCk6IENhc2VUeXBlTGl0ZSB7XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdHMuY2FzZV90eXBlX2lkXG4gICAgICA/IHRoaXMuZ2V0RGVmYXVsdEp1cmlzZGljdGlvbigpPy5jYXNlVHlwZXMuZmluZChjdCA9PiB0aGlzLmRlZmF1bHRzLmNhc2VfdHlwZV9pZCA9PT0gY3QuaWQpXG4gICAgICA6IHRoaXMuZ2V0RGVmYXVsdEp1cmlzZGljdGlvbigpPy5jYXNlVHlwZXNbMF07XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZCA9IHtcbiAgICAgIGp1cmlzZGljdGlvbjogbnVsbCxcbiAgICAgIGNhc2VUeXBlOiBudWxsLFxuICAgICAgZm9ybUdyb3VwOiBudWxsLFxuICAgICAgY2FzZVN0YXRlOiB1bmRlZmluZWQsXG4gICAgICBwYWdlOiAxLFxuICAgICAgbWV0YWRhdGFGaWVsZHM6IFtdXG4gICAgfTtcbiAgICAvLyBFWFVJLTMxNjIgLSBkbyBub3QgdXNlIGRlZmF1bHRzIHVubGVzcyBwcmVzZW50XG4gICAgaWYgKHRoaXMuZGVmYXVsdHMpIHtcbiAgICAgIGNvbnN0IGogPSB0aGlzLmdldERlZmF1bHRKdXJpc2RpY3Rpb24oKTtcbiAgICAgIGNvbnN0IGN0ID0gdGhpcy5nZXREZWZhdWx0Q2FzZVR5cGUoKTtcbiAgICAgIGouY3VycmVudENhc2VUeXBlID0gY3Q7XG4gICAgICB0aGlzLnNlbGVjdGVkLmp1cmlzZGljdGlvbiA9IGogPyBqIDogbnVsbDtcbiAgICAgIHRoaXMuc2VsZWN0ZWQuY2FzZVR5cGUgPSBjdCA/IGN0IDogbnVsbDtcbiAgICB9XG4gICAgdGhpcy5qdXJpc2RpY3Rpb25TZXJ2aWNlLmFubm91bmNlU2VsZWN0ZWRKdXJpc2RpY3Rpb24odGhpcy5zZWxlY3RlZC5qdXJpc2RpY3Rpb24pO1xuICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XG4gICAgICBpZiAoIXRoaXMuaW5pdGlhbGlzZWQgfHwgIXBhcmFtcyB8fCAhT2JqZWN0LmtleXMocGFyYW1zKS5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5pbml0RmlsdGVycyhmYWxzZSk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGlzZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFwcGx5KGluaXQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAvLyBTYXZlIGZpbHRlcnMgYXMgcXVlcnkgcGFyYW1ldGVycyBmb3IgY3VycmVudCByb3V0ZVxuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0ge307XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWQuanVyaXNkaWN0aW9uKSB7XG4gICAgICBxdWVyeVBhcmFtc1tXb3JrYmFza2V0RmlsdGVyc0NvbXBvbmVudC5QQVJBTV9KVVJJU0RJQ1RJT05dID0gdGhpcy5zZWxlY3RlZC5qdXJpc2RpY3Rpb24uaWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLnNlbGVjdGVkLmNhc2VUeXBlKSB7XG4gICAgICBxdWVyeVBhcmFtc1tXb3JrYmFza2V0RmlsdGVyc0NvbXBvbmVudC5QQVJBTV9DQVNFX1RZUEVdID0gdGhpcy5zZWxlY3RlZC5jYXNlVHlwZS5pZDtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWQuY2FzZVN0YXRlKSB7XG4gICAgICBxdWVyeVBhcmFtc1tXb3JrYmFza2V0RmlsdGVyc0NvbXBvbmVudC5QQVJBTV9DQVNFX1NUQVRFXSA9IHRoaXMuc2VsZWN0ZWQuY2FzZVN0YXRlLmlkO1xuICAgIH1cbiAgICAvLyB3aXRob3V0IGV4cGxpY2l0bHkgcHJlc2VydmluZyBhbGVydHMgYW55IG1lc3NhZ2Ugb24gdGhlIHBhZ2VcbiAgICAvLyB3b3VsZCBiZSBjbGVhcmVkIG91dCBiZWNhdXNlIG9mIHRoaXMgaW5pdGlhbCBuYXZpZ2F0aW9uLlxuICAgIC8vIFRoZSBhYm92ZSBpcyBvbmx5IHRydWUgaWYgbm8gYWxlcnRzIHdlcmUgc2V0IHByaW9yIHRvIGxvYWRpbmcgY2FzZSBsaXN0IHBhZ2UuXG4gICAgaWYgKCF0aGlzLmFsZXJ0U2VydmljZS5pc1ByZXNlcnZlQWxlcnRzKCkpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNldFByZXNlcnZlQWxlcnRzKCF0aGlzLmluaXRpYWxpc2VkKTtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWQuZm9ybUdyb3VwID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShGT1JNX0dST1VQX1ZBTF9MT0NfU1RPUkFHRSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVcGRhdGUgZm9ybSBncm91cCBmaWx0ZXJzXG4gICAgICB0aGlzLnVwZGF0ZUZvcm1Hcm91cEZpbHRlcnMoKTtcblxuICAgICAgdGhpcy5zZWxlY3RlZC5mb3JtR3JvdXAgPSB0aGlzLmZvcm1Hcm91cDtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZC5pbml0ID0gaW5pdDtcbiAgICB0aGlzLnNlbGVjdGVkLnBhZ2UgPSAxO1xuICAgIHRoaXMuc2VsZWN0ZWQubWV0YWRhdGFGaWVsZHMgPSB0aGlzLmdldE1ldGFkYXRhRmllbGRzKCk7XG4gICAgaWYgKGluaXQpIHtcbiAgICAgIHRoaXMud2luZG93U2VydmljZS5zZXRMb2NhbFN0b3JhZ2UoU0FWRURfUVVFUllfUEFSQU1fTE9DX1NUT1JBR0UsIEpTT04uc3RyaW5naWZ5KHF1ZXJ5UGFyYW1zKSk7XG4gICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5mb3JtR3JvdXAuY29udHJvbHMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gRmluZCBhbGwgXCJzcGVjaWFsIGNhc2VcIiBKdWRpY2lhbFVzZXIgRm9ybUNvbnRyb2wga2V5cyBhbmQgcmVtb3ZlIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcyBmcm9tIHRoZVxuICAgICAgICAvLyBGb3JtR3JvdXAgdmFsdWUgYmVjYXVzZSB0aGVzZSB2YWx1ZXMgYXJlIG5vdCBpbnRlbmRlZCB0byBiZSBzdG9yZWQgYW5kIHN1YnNlcXVlbnRseSBwYXNzZWQgYXMgcXVlcnkgc3RyaW5nXG4gICAgICAgIC8vIHBhcmFtZXRlcnMgd2hlbiBjYWxsaW5nIHNlYXJjaENhc2VzIEFQSSBlbmRwb2ludFxuICAgICAgICBjb25zdCBqdWRpY2lhbFVzZXJDb250cm9sVmFsdWVzVG9SZW1vdmUgPVxuICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzKS5maWx0ZXIoKGtleSkgPT4ga2V5LmVuZHNXaXRoKCdfanVkaWNpYWxVc2VyQ29udHJvbCcpKTtcbiAgICAgICAganVkaWNpYWxVc2VyQ29udHJvbFZhbHVlc1RvUmVtb3ZlLmZvckVhY2goKGNvbnRyb2xLZXkpID0+IGRlbGV0ZSB0aGlzLmZvcm1Hcm91cC52YWx1ZVtjb250cm9sS2V5XSk7XG4gICAgICAgIHRoaXMud2luZG93U2VydmljZS5zZXRMb2NhbFN0b3JhZ2UoRk9STV9HUk9VUF9WQUxfTE9DX1NUT1JBR0UsIEpTT04uc3RyaW5naWZ5KHRoaXMuZm9ybUdyb3VwLnZhbHVlKSk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEFubm91bmNlIHNlbGVjdGVkIGp1cmlzZGljdGlvbiB2aWEgSnVyaXNkaWN0aW9uU2VydmljZVxuICAgIGlmICh0aGlzLnNlbGVjdGVkLmp1cmlzZGljdGlvbikge1xuICAgICAgLy8gU2V0IHRoZSBzZWxlY3RlZCBjYXNlIHR5cGUgYXMgdGhlIGN1cnJlbnQgY2FzZSB0eXBlIG9mIHRoZSBzZWxlY3RlZCBqdXJpc2RpY3Rpb25cbiAgICAgIHRoaXMuc2VsZWN0ZWQuanVyaXNkaWN0aW9uLmN1cnJlbnRDYXNlVHlwZSA9IHRoaXMuc2VsZWN0ZWQuY2FzZVR5cGU7XG4gICAgICB0aGlzLmp1cmlzZGljdGlvblNlcnZpY2UuYW5ub3VuY2VTZWxlY3RlZEp1cmlzZGljdGlvbih0aGlzLnNlbGVjdGVkLmp1cmlzZGljdGlvbik7XG4gICAgfVxuICAgIC8vIEFwcGx5IGZpbHRlcnNcbiAgICB0aGlzLm9uQXBwbHkuZW1pdCh7IHNlbGVjdGVkOiB0aGlzLnNlbGVjdGVkLCBxdWVyeVBhcmFtcyB9KTtcbiAgICB0aGlzLnNldEZvY3VzVG9Ub3AoKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLndpbmRvd1NlcnZpY2UucmVtb3ZlTG9jYWxTdG9yYWdlKEZPUk1fR1JPVVBfVkFMX0xPQ19TVE9SQUdFKTtcbiAgICB0aGlzLndpbmRvd1NlcnZpY2UucmVtb3ZlTG9jYWxTdG9yYWdlKFNBVkVEX1FVRVJZX1BBUkFNX0xPQ19TVE9SQUdFKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucmVzZXRGaWVsZHNXaGVuTm9EZWZhdWx0cygpO1xuICAgICAgdGhpcy5vblJlc2V0LmVtaXQodHJ1ZSk7XG4gICAgfSwgNTAwKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNZXRhZGF0YUZpZWxkcygpOiBzdHJpbmdbXSB7XG4gICAgaWYgKHRoaXMud29ya2Jhc2tldElucHV0cykge1xuICAgICAgcmV0dXJuIHRoaXMud29ya2Jhc2tldElucHV0c1xuICAgICAgICAuZmlsdGVyKHdvcmtiYXNrZXRJbnB1dCA9PiB3b3JrYmFza2V0SW5wdXQuZmllbGQubWV0YWRhdGEgPT09IHRydWUpXG4gICAgICAgIC5tYXAod29ya2Jhc2tldElucHV0ID0+IHdvcmtiYXNrZXRJbnB1dC5maWVsZC5pZCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uSnVyaXNkaWN0aW9uSWRDaGFuZ2UoKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWQuanVyaXNkaWN0aW9uKSB7XG4gICAgICB0aGlzLmp1cmlzZGljdGlvblNlcnZpY2UuYW5ub3VuY2VTZWxlY3RlZEp1cmlzZGljdGlvbih0aGlzLnNlbGVjdGVkLmp1cmlzZGljdGlvbik7XG4gICAgICB0aGlzLnNlbGVjdGVkSnVyaXNkaWN0aW9uQ2FzZVR5cGVzID0gdGhpcy5zZWxlY3RlZC5qdXJpc2RpY3Rpb24uY2FzZVR5cGVzLmxlbmd0aCA+IDBcbiAgICAgICAgPyB0aGlzLnNlbGVjdGVkLmp1cmlzZGljdGlvbi5jYXNlVHlwZXMgOiBudWxsO1xuICAgICAgLy8gTGluZSB3YXMgdG9vIGxvbmcgZm9yIGxpbnRpbmcgc28gcmVmYWN0b3JlZCBpdC5cbiAgICAgIGlmICh0aGlzLndvcmtiYXNrZXREZWZhdWx0cyAmJiB0aGlzLnNlbGVjdGVkSnVyaXNkaWN0aW9uQ2FzZVR5cGVzKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuY2FzZVR5cGUgPSB0aGlzLnNlbGVjdGVkSnVyaXNkaWN0aW9uQ2FzZVR5cGVzWzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5jYXNlVHlwZSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2VsZWN0ZWQuY2FzZVN0YXRlID0gbnVsbDtcbiAgICAgIHRoaXMuY2xlYXJXb3JrYmFza2V0SW5wdXRzKCk7XG5cbiAgICAgIGlmICghdGhpcy5pc0FwcGx5QnV0dG9uRGlzYWJsZWQoKSkge1xuICAgICAgICB0aGlzLm9uQ2FzZVR5cGVJZENoYW5nZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlc2V0Q2FzZVR5cGUoKTtcbiAgICAgIHRoaXMucmVzZXRDYXNlU3RhdGUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25DYXNlVHlwZUlkQ2hhbmdlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkLmNhc2VUeXBlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkQ2FzZVR5cGVTdGF0ZXMgPSB0aGlzLnNvcnRTdGF0ZXModGhpcy5zZWxlY3RlZC5jYXNlVHlwZS5zdGF0ZXMpO1xuICAgICAgdGhpcy5zZWxlY3RlZC5jYXNlU3RhdGUgPSBudWxsO1xuICAgICAgdGhpcy5mb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgICAgIHRoaXMuY2xlYXJXb3JrYmFza2V0SW5wdXRzKCk7XG4gICAgICBpZiAoIXRoaXMuaXNBcHBseUJ1dHRvbkRpc2FibGVkKCkpIHtcbiAgICAgICAgdGhpcy53b3JrYmFza2V0SW5wdXRGaWx0ZXJTZXJ2aWNlLmdldFdvcmtiYXNrZXRJbnB1dHModGhpcy5zZWxlY3RlZC5qdXJpc2RpY3Rpb24uaWQsIHRoaXMuc2VsZWN0ZWQuY2FzZVR5cGUuaWQpLnBpcGUoXG4gICAgICAgICAgdGFrZSgxKVxuICAgICAgICApLnN1YnNjcmliZSh3b3JrYmFza2V0SW5wdXRzID0+IHtcbiAgICAgICAgICB0aGlzLndvcmtiYXNrZXRJbnB1dHNSZWFkeSA9IHRydWU7XG4gICAgICAgICAgdGhpcy53b3JrYmFza2V0SW5wdXRzID0gd29ya2Jhc2tldElucHV0c1xuICAgICAgICAgICAgLnNvcnQodGhpcy5vcmRlclNlcnZpY2Uuc29ydEFzYyk7XG4gICAgICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy53aW5kb3dTZXJ2aWNlLmdldExvY2FsU3RvcmFnZShGT1JNX0dST1VQX1ZBTF9MT0NfU1RPUkFHRSk7XG5cbiAgICAgICAgICB3b3JrYmFza2V0SW5wdXRzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbS5maWVsZC5lbGVtZW50UGF0aCkge1xuICAgICAgICAgICAgICBpdGVtLmZpZWxkLmlkID0gYCR7aXRlbS5maWVsZC5pZH0uJHtpdGVtLmZpZWxkLmVsZW1lbnRQYXRofWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVtLmZpZWxkLmxhYmVsID0gaXRlbS5sYWJlbDtcbiAgICAgICAgICAgIGlmIChmb3JtVmFsdWUpIHtcbiAgICAgICAgICAgICAgY29uc3Qgc2VhcmNoRm9ybVZhbHVlT2JqZWN0ID0gSlNPTi5wYXJzZShmb3JtVmFsdWUpO1xuICAgICAgICAgICAgICBpdGVtLmZpZWxkLnZhbHVlID0gc2VhcmNoRm9ybVZhbHVlT2JqZWN0W2l0ZW0uZmllbGQuaWRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuZ2V0Q2FzZUZpZWxkcygpO1xuICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1dvcmtiYXNrZXQgaW5wdXQgZmllbGRzIHJlcXVlc3Qgd2lsbCBiZSBkaXNjYXJkZWQgcmVhc29uOiAnLCBlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVzZXRDYXNlU3RhdGUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNDYXNlVHlwZXNEcm9wZG93bkRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5zZWxlY3RlZEp1cmlzZGljdGlvbkNhc2VUeXBlcztcbiAgfVxuXG4gIHB1YmxpYyBpc0Nhc2VTdGF0ZXNEcm9wZG93bkRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5zZWxlY3RlZC5jYXNlVHlwZSB8fCAhKHRoaXMuc2VsZWN0ZWQuY2FzZVR5cGUuc3RhdGVzICYmIHRoaXMuc2VsZWN0ZWQuY2FzZVR5cGUuc3RhdGVzLmxlbmd0aCA+IDApO1xuICB9XG5cbiAgcHVibGljIGlzQXBwbHlCdXR0b25EaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISh0aGlzLnNlbGVjdGVkLmp1cmlzZGljdGlvbiAmJiB0aGlzLnNlbGVjdGVkLmNhc2VUeXBlKTtcbiAgfVxuXG4gIHB1YmxpYyBpc1NlYXJjaGFibGVBbmRXb3JrYmFza2V0SW5wdXRzUmVhZHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQuanVyaXNkaWN0aW9uICYmIHRoaXMuc2VsZWN0ZWQuY2FzZVR5cGUgJiYgdGhpcy53b3JrYmFza2V0SW5wdXRzUmVhZHk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBjbGVhciB0aGUgcHJldmlvdXNseSB1c2VkXG4gICAqIGZvcm0gZ3JvdXAgY29udHJvbCBmaWx0ZXIgdmFsdWVzIHRvIG1ha2Ugc3VyZSBvbmx5IHRoZVxuICAgKiBjdXJyZW50bHkgc2VsZWN0ZWQgZm9ybSBncm91cCBjb250cm9sIGZpbHRlciB2YWx1ZXMgYXJlIHByZXNlbnQuXG4gICAqXG4gICAqIEhhcyBiZWVuIGltcGxlbWVudGVkIGZvciAnUmVnaW9uIGFuZCBGUkMgZmlsdGVycycgYW5kIGNhbiBiZSBleHRlbmRlZFxuICAgKiBpbiBmdXR1cmUgdG8gaW5jb3Jwb3JhdGUgb3RoZXIgZHluYW1pYyBmaWx0ZXJzLlxuICAgKi9cbiAgcHVibGljIHVwZGF0ZUZvcm1Hcm91cEZpbHRlcnMoKTogdm9pZCB7XG4gICAgLy8gUmVhZCB0aGUgZm9ybSBncm91cCBsb2NhbCBzdG9yYWdlXG4gICAgY29uc3QgZm9ybUdyb3VwTFMgPSBKU09OLnBhcnNlKHRoaXMud2luZG93U2VydmljZS5nZXRMb2NhbFN0b3JhZ2UoRk9STV9HUk9VUF9WQUxfTE9DX1NUT1JBR0UpKTtcblxuICAgIC8vIEZvcm0gZ3JvdXAgbG9jYWwgc3RvcmFnZSBpcyBhdmFpbGFibGUgYW5kIGNvbnRhaW5zIHJlZ2lvbkxpc3QgcHJvcGVydHlcbiAgICBpZiAoISFmb3JtR3JvdXBMUyAmJiBmb3JtR3JvdXBMUy5oYXNPd25Qcm9wZXJ0eShSRUdJT05fTElTVF9BTkRfRlJDX0ZJTFRFUikpIHtcbiAgICAgIGlmICh0aGlzLmZvcm1Hcm91cC5nZXQoUkVHSU9OX0xJU1RfQU5EX0ZSQ19GSUxURVIpKSB7XG4gICAgICAgIC8vIElmIHJlZ2lvbkxpc3QgdmFsdWUgZG9lcyBub3QgbWF0Y2ggYmV0d2VlbiBsb2NhbCBzdG9yYWdlIGFuZCBmb3JtIGdyb3VwXG4gICAgICAgIC8vIHRoZW4gdGhlIGZpbHRlciB2YWx1ZSBoYXMgYmVlbiBjaGFuZ2VkIGFuZCB3ZSBuZWVkIHRvIGNsZWFyIHRoZSBvbGQgZmlsdGVyIHZhbHVlc1xuICAgICAgICBpZiAoZm9ybUdyb3VwTFNbUkVHSU9OX0xJU1RfQU5EX0ZSQ19GSUxURVJdICE9PSB0aGlzLmZvcm1Hcm91cC5nZXQoUkVHSU9OX0xJU1RfQU5EX0ZSQ19GSUxURVIpLnZhbHVlKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZm9ybUdyb3VwTFMpIHtcbiAgICAgICAgICAgIGlmIChmb3JtR3JvdXBMUy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZm9ybUdyb3VwTFNba2V5XTtcbiAgICAgICAgICAgICAgLy8gQ2xlYXIgdGhlIGZpbHRlciBmb3JtIGdyb3VwIGNvbnRyb2wgdmFsdWVzIGlmIGl0IGhhcyBhIHZhbHVlIGluIGxvY2FsIHN0b3JhZ2VcbiAgICAgICAgICAgICAgLy8gVGhlIHJlZ2lvbkxpc3QgZm9ybSBncm91cCBjb250cm9sIHZhbHVlIHNob3VsZCBiZSBpZ25vcmVkIGFzIGl0IGFsd2F5cyBjb250YWluIHRoZSBsYXRlc3QgdmFsdWVcbiAgICAgICAgICAgICAgaWYgKGtleSAhPT0gUkVHSU9OX0xJU1RfQU5EX0ZSQ19GSUxURVIgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoa2V5KS5zZXRWYWx1ZShudWxsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc29ydFN0YXRlcyhzdGF0ZXM6IENhc2VTdGF0ZVtdKSB7XG4gICAgcmV0dXJuIHN0YXRlcy5zb3J0KHRoaXMub3JkZXJTZXJ2aWNlLnNvcnRBc2MpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyeSB0byBpbml0aWFsaXNlIGZpbHRlcnMgYmFzZWQgb24gcXVlcnkgcGFyYW1ldGVycyBvciB3b3JrYmFza2V0IGRlZmF1bHRzLlxuICAgKiBRdWVyeSBwYXJhbWV0ZXJzLCB3aGVuIGF2YWlsYWJsZSwgdGFrZSBwcmVjZWRlbmNlIG92ZXIgd29ya2Jhc2tldCBkZWZhdWx0cy5cbiAgICovXG4gIHByaXZhdGUgaW5pdEZpbHRlcnMoaW5pdDogYm9vbGVhbikge1xuICAgIGNvbnN0IHNhdmVkUXVlcnlQYXJhbXMgPSB0aGlzLndpbmRvd1NlcnZpY2UuZ2V0TG9jYWxTdG9yYWdlKFNBVkVEX1FVRVJZX1BBUkFNX0xPQ19TVE9SQUdFKTtcbiAgICBjb25zdCByb3V0ZVNuYXBzaG90OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90ID0gdGhpcy5yb3V0ZS5zbmFwc2hvdDtcbiAgICBpZiAoc2F2ZWRRdWVyeVBhcmFtcykge1xuICAgICAgcm91dGVTbmFwc2hvdC5xdWVyeVBhcmFtcyA9IEpTT04ucGFyc2Uoc2F2ZWRRdWVyeVBhcmFtcyk7XG4gICAgfVxuICAgIGNvbnN0IHNlbGVjdGVkSnVyaXNkaWN0aW9uSWQgPSByb3V0ZVNuYXBzaG90LnF1ZXJ5UGFyYW1zW1dvcmtiYXNrZXRGaWx0ZXJzQ29tcG9uZW50LlBBUkFNX0pVUklTRElDVElPTl0gfHxcbiAgICAgICh0aGlzLmRlZmF1bHRzICYmIHRoaXMuZGVmYXVsdHMuanVyaXNkaWN0aW9uX2lkKTtcbiAgICBpZiAoc2VsZWN0ZWRKdXJpc2RpY3Rpb25JZCkge1xuICAgICAgdGhpcy5zZWxlY3RlZC5qdXJpc2RpY3Rpb24gPSB0aGlzLmp1cmlzZGljdGlvbnMuZmluZChqID0+IHNlbGVjdGVkSnVyaXNkaWN0aW9uSWQgPT09IGouaWQpO1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQuanVyaXNkaWN0aW9uICYmIHRoaXMuc2VsZWN0ZWQuanVyaXNkaWN0aW9uLmNhc2VUeXBlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRKdXJpc2RpY3Rpb25DYXNlVHlwZXMgPSB0aGlzLnNlbGVjdGVkLmp1cmlzZGljdGlvbi5jYXNlVHlwZXM7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuY2FzZVR5cGUgPSB0aGlzLnNlbGVjdENhc2VUeXBlKHRoaXMuc2VsZWN0ZWQsIHRoaXMuc2VsZWN0ZWRKdXJpc2RpY3Rpb25DYXNlVHlwZXMsIHJvdXRlU25hcHNob3QpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZC5jYXNlVHlwZSkge1xuICAgICAgICAgIHRoaXMub25DYXNlVHlwZUlkQ2hhbmdlKCk7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZC5jYXNlU3RhdGUgPSB0aGlzLnNlbGVjdENhc2VTdGF0ZSh0aGlzLnNlbGVjdGVkLmNhc2VUeXBlLCByb3V0ZVNuYXBzaG90KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLndvcmtiYXNrZXREZWZhdWx0cyA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWQuanVyaXNkaWN0aW9uID0gbnVsbDtcbiAgICAgIHRoaXMuc2VsZWN0ZWQuY2FzZVR5cGUgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLmFwcGx5KGluaXQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RDYXNlU3RhdGUoY2FzZVR5cGU6IENhc2VUeXBlTGl0ZSwgcm91dGVTbmFwc2hvdDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCk6IENhc2VTdGF0ZSB7XG4gICAgbGV0IGNhc2VTdGF0ZTtcbiAgICBpZiAoY2FzZVR5cGUpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkQ2FzZVN0YXRlSWQgPSB0aGlzLnNlbGVjdENhc2VTdGF0ZUlkRnJvbVF1ZXJ5T3JEZWZhdWx0cyhyb3V0ZVNuYXBzaG90LCAodGhpcy5kZWZhdWx0cyAmJiB0aGlzLmRlZmF1bHRzLnN0YXRlX2lkKSk7XG4gICAgICBjYXNlU3RhdGUgPSBjYXNlVHlwZS5zdGF0ZXMuZmluZChjdCA9PiBzZWxlY3RlZENhc2VTdGF0ZUlkID09PSBjdC5pZCk7XG4gICAgfVxuICAgIHJldHVybiBjYXNlU3RhdGUgPyBjYXNlU3RhdGUgOiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RDYXNlU3RhdGVJZEZyb21RdWVyeU9yRGVmYXVsdHMocm91dGVTbmFwc2hvdDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgZGVmYXVsdENhc2VTdGF0ZUlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiByb3V0ZVNuYXBzaG90LnF1ZXJ5UGFyYW1zW1dvcmtiYXNrZXRGaWx0ZXJzQ29tcG9uZW50LlBBUkFNX0NBU0VfU1RBVEVdIHx8IGRlZmF1bHRDYXNlU3RhdGVJZDtcbiAgfVxuXG4gIHByaXZhdGUgc2VsZWN0Q2FzZVR5cGUoc2VsZWN0ZWQ6IGFueSwgY2FzZVR5cGVzOiBDYXNlVHlwZUxpdGVbXSwgcm91dGVTbmFwc2hvdDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCk6IENhc2VUeXBlTGl0ZSB7XG4gICAgbGV0IGNhc2VUeXBlO1xuICAgIGlmIChzZWxlY3RlZC5qdXJpc2RpY3Rpb24pIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkQ2FzZVR5cGVJZCA9IHRoaXMuc2VsZWN0Q2FzZVR5cGVJZEZyb21RdWVyeU9yRGVmYXVsdHMocm91dGVTbmFwc2hvdCwgKHRoaXMuZGVmYXVsdHMgJiYgdGhpcy5kZWZhdWx0cy5jYXNlX3R5cGVfaWQpKTtcbiAgICAgIGNhc2VUeXBlID0gY2FzZVR5cGVzLmZpbmQoY3QgPT4gc2VsZWN0ZWRDYXNlVHlwZUlkID09PSBjdC5pZCk7XG4gICAgfVxuICAgIHJldHVybiBjYXNlVHlwZSA/IGNhc2VUeXBlIDogY2FzZVR5cGVzWzBdO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RDYXNlVHlwZUlkRnJvbVF1ZXJ5T3JEZWZhdWx0cyhyb3V0ZVNuYXBzaG90OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBkZWZhdWx0Q2FzZVR5cGVJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcm91dGVTbmFwc2hvdC5xdWVyeVBhcmFtc1tXb3JrYmFza2V0RmlsdGVyc0NvbXBvbmVudC5QQVJBTV9DQVNFX1RZUEVdIHx8IGRlZmF1bHRDYXNlVHlwZUlkO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldEZpZWxkc1doZW5Ob0RlZmF1bHRzKCkge1xuICAgIHRoaXMucmVzZXRDYXNlU3RhdGUoKTtcbiAgICB0aGlzLnJlc2V0Q2FzZVR5cGUoKTtcbiAgICB0aGlzLmNsZWFyV29ya2Jhc2tldElucHV0cygpO1xuICAgIHRoaXMud29ya2Jhc2tldERlZmF1bHRzID0gZmFsc2U7XG4gICAgdGhpcy5zZWxlY3RlZC5qdXJpc2RpY3Rpb24gPSBudWxsO1xuICAgIHRoaXMuaW5pdGlhbGlzZWQgPSBmYWxzZTtcbiAgICB0aGlzLmluaXRGaWx0ZXJzKHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhcldvcmtiYXNrZXRJbnB1dHMoKSB7XG4gICAgdGhpcy53b3JrYmFza2V0SW5wdXRzUmVhZHkgPSBmYWxzZTtcbiAgICB0aGlzLndvcmtiYXNrZXRJbnB1dHMgPSBbXTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRDYXNlU3RhdGUoKSB7XG4gICAgdGhpcy5kZWZhdWx0cy5zdGF0ZV9pZCA9IG51bGw7XG4gICAgdGhpcy5zZWxlY3RlZC5jYXNlU3RhdGUgPSBudWxsO1xuICAgIHRoaXMuc2VsZWN0ZWRDYXNlVHlwZVN0YXRlcyA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0Q2FzZVR5cGUoKSB7XG4gICAgdGhpcy5zZWxlY3RlZC5jYXNlVHlwZSA9IHVuZGVmaW5lZDsgLy8gb3B0aW9uIHNob3VsZCBiZSBibGFuayByYXRoZXIgdGhhbiBcIlNlbGVjdCBhIHZhbHVlXCIgaW4gY2FzZSBvZiByZXNldC5cbiAgICB0aGlzLnNlbGVjdGVkSnVyaXNkaWN0aW9uQ2FzZVR5cGVzID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Rm9jdXNUb1RvcCgpIHtcbiAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG5cbiAgICBjb25zdCB0b3BDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VhcmNoLXJlc3VsdC1oZWFkaW5nX190ZXh0Jyk7XG4gICAgaWYgKHRvcENvbnRhaW5lcikge1xuICAgICAgdG9wQ29udGFpbmVyLmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRDYXNlRmllbGRzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLndvcmtiYXNrZXRJbnB1dHMpIHtcbiAgICAgIHRoaXMuY2FzZUZpZWxkcyA9IHRoaXMud29ya2Jhc2tldElucHV0cy5tYXAoaXRlbSA9PiBGaWVsZHNVdGlscy5jb252ZXJ0VG9DYXNlRmllbGQoaXRlbS5maWVsZCkpO1xuICAgIH1cbiAgfVxufVxuIiwiPGZvcm0gaWQ9XCJmaWx0ZXJzXCIgY2xhc3M9XCJnbG9iYWwtZGlzcGxheVwiPlxuICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBmbGV4XCI+XG4gICAgPGZpZWxkc2V0IGNsYXNzPVwiaGVhZGluZy1oMlwiIGFyaWEtbGFiZWw9XCJGaWx0ZXJzXCI+e3snRmlsdGVycycgfCBycHhUcmFuc2xhdGUgfX08L2ZpZWxkc2V0PlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnV0dG9uIHdvcmtiYXNrZXQtZmlsdGVycy1hcHBseVwiIChjbGljayk9XCJhcHBseSh0cnVlKVwiIFtkaXNhYmxlZF09XCJpc0FwcGx5QnV0dG9uRGlzYWJsZWQoKVwiXG4gICAgICAgIFt0aXRsZV09XCInQXBwbHkgZmlsdGVyJyB8IHJweFRyYW5zbGF0ZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0FwcGx5IGZpbHRlcicgfCBycHhUcmFuc2xhdGVcIj5cbiAgICAgIHt7J0FwcGx5JyB8IHJweFRyYW5zbGF0ZX19XG4gICAgPC9idXR0b24+Jm5ic3A7Jm5ic3A7Jm5ic3A7XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInJlc2V0KClcIiBjbGFzcz1cImJ1dHRvbiBidXR0b24tc2Vjb25kYXJ5XCJcbiAgICAgICAgW3RpdGxlXT1cIidSZXNldCBmaWx0ZXInIHwgcnB4VHJhbnNsYXRlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInUmVzZXQgZmlsdGVyJyB8IHJweFRyYW5zbGF0ZVwiPlxuICAgICAge3snUmVzZXQnIHwgcnB4VHJhbnNsYXRlfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCIgZm9yPVwid2ItanVyaXNkaWN0aW9uXCI+e3snSnVyaXNkaWN0aW9uJyB8IHJweFRyYW5zbGF0ZX19PC9sYWJlbD5cbiAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC0zLTQgY2NkLWRyb3Bkb3duXCIgaWQ9XCJ3Yi1qdXJpc2RpY3Rpb25cIlxuICAgICAgICAgICAgbmFtZT1cImp1cmlzZGljdGlvblwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWQuanVyaXNkaWN0aW9uXCIgYXJpYS1jb250cm9scz1cInNlYXJjaC1yZXN1bHRcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkp1cmlzZGljdGlvbklkQ2hhbmdlKClcIj5cbiAgICAgIDxvcHRpb24gKm5nSWY9XCIhd29ya2Jhc2tldERlZmF1bHRzXCIgW25nVmFsdWVdPVwibnVsbFwiPnt7J1NlbGVjdCBhIHZhbHVlJyB8IHJweFRyYW5zbGF0ZX19PC9vcHRpb24+XG4gICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBqIG9mIGp1cmlzZGljdGlvbnNcIiBbbmdWYWx1ZV09XCJqXCI+e3tqLm5hbWUgfCBycHhUcmFuc2xhdGV9fTwvb3B0aW9uPlxuICAgIDwvc2VsZWN0PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIiBmb3I9XCJ3Yi1jYXNlLXR5cGVcIj57eydDYXNlIHR5cGUnIHwgcnB4VHJhbnNsYXRlfX08L2xhYmVsPlxuICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLTMtNCBjY2QtZHJvcGRvd25cIiBpZD1cIndiLWNhc2UtdHlwZVwiXG4gICAgICAgICAgICBuYW1lPVwiY2FzZS10eXBlXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZC5jYXNlVHlwZVwiIFtkaXNhYmxlZF09XCJpc0Nhc2VUeXBlc0Ryb3Bkb3duRGlzYWJsZWQoKVwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2FzZVR5cGVJZENoYW5nZSgpXCIgYXJpYS1jb250cm9scz1cInNlYXJjaC1yZXN1bHRcIj5cbiAgICAgIDxvcHRpb24gKm5nSWY9XCIhd29ya2Jhc2tldERlZmF1bHRzXCIgW25nVmFsdWVdPVwibnVsbFwiPnt7J1NlbGVjdCBhIHZhbHVlJyB8IHJweFRyYW5zbGF0ZX19PC9vcHRpb24+XG4gICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjdCBvZiBzZWxlY3RlZEp1cmlzZGljdGlvbkNhc2VUeXBlc1wiIFtuZ1ZhbHVlXT1cImN0XCI+e3tjdC5uYW1lIHwgcnB4VHJhbnNsYXRlfX08L29wdGlvbj5cbiAgICA8L3NlbGVjdD5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCIgZm9yPVwid2ItY2FzZS1zdGF0ZVwiPnt7J1N0YXRlJyB8IHJweFRyYW5zbGF0ZX19PC9sYWJlbD5cbiAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC0zLTQgY2NkLWRyb3Bkb3duXCIgaWQ9XCJ3Yi1jYXNlLXN0YXRlXCJcbiAgICAgICAgICAgIG5hbWU9XCJzdGF0ZVwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWQuY2FzZVN0YXRlXCIgW2Rpc2FibGVkXT1cImlzQ2FzZVN0YXRlc0Ryb3Bkb3duRGlzYWJsZWQoKVwiXG4gICAgICAgICAgICBhcmlhLWNvbnRyb2xzPVwic2VhcmNoLXJlc3VsdFwiPlxuICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJudWxsXCI+e3snQW55JyB8IHJweFRyYW5zbGF0ZX19PC9vcHRpb24+XG4gICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjcyBvZiBzZWxlY3RlZENhc2VUeXBlU3RhdGVzXCIgW25nVmFsdWVdPVwiY3NcIj57e2NzLm5hbWUgfCBycHhUcmFuc2xhdGV9fTwvb3B0aW9uPlxuICAgIDwvc2VsZWN0PlxuICA8L2Rpdj5cblxuICA8bmctY29udGFpbmVyIGNjZENvbmRpdGlvbmFsU2hvd0Zvcm0gKm5nSWY9XCJpc1NlYXJjaGFibGVBbmRXb3JrYmFza2V0SW5wdXRzUmVhZHkoKVwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCIgW2NvbnRleHRGaWVsZHNdPVwiY2FzZUZpZWxkc1wiPlxuICAgIDxkaXYgaWQ9XCJkeW5hbWljRmlsdGVyc1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiAqbmdGb3I9XCJsZXQgd29ya2Jhc2tldElucHV0IG9mIHdvcmtiYXNrZXRJbnB1dHNcIj5cbiAgICAgICAgPGNjZC1maWVsZC13cml0ZSBbY2FzZUZpZWxkXT1cIndvcmtiYXNrZXRJbnB1dC5maWVsZFwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCIgW2lzRXhwYW5kZWRdPVwidHJ1ZVwiIFtpc0luU2VhcmNoQmxvY2tdPVwidHJ1ZVwiIChrZXl1cC5lbnRlcik9XCJhcHBseShudWxsKVwiPlxuICAgICAgICA8L2NjZC1maWVsZC13cml0ZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnV0dG9uXCIgKGNsaWNrKT1cInNjcm9sbFRvVG9wKClcIlxuICAgICAgICAgIFt0aXRsZV09XCInQmFjayB0byB0b3AnIHwgcnB4VHJhbnNsYXRlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInQmFjayB0byB0b3AnIHwgcnB4VHJhbnNsYXRlXCI+e3snQmFjayB0byB0b3AnIHwgcnB4VHJhbnNsYXRlfX1cbiAgICA8L2J1dHRvbj5cbjwvZm9ybT5cbiJdfQ==
528
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Jhc2tldC1maWx0ZXJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy93b3JrYmFza2V0LWZpbHRlcnMvd29ya2Jhc2tldC1maWx0ZXJzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy93b3JrYmFza2V0LWZpbHRlcnMvd29ya2Jhc2tldC1maWx0ZXJzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQTBCLE1BQU0saUJBQWlCLENBQUM7QUFDekUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBTXRDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDakUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDdkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwyREFBMkQsQ0FBQzs7Ozs7Ozs7O0lDTm5HLGtDQUFxRDtJQUFBLFlBQW1DOztJQUFBLGlCQUFTOztJQUE3RCw4QkFBZ0I7SUFBQyxjQUFtQztJQUFu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WUFJZCxjQUE0QztZQUE1QyxpRUFBNEM7WUFTRSxjQUFvQztZQUNoSCxBQUQ0RSxzREFBb0MsaURBQ3pFOztZQUM3QyxlQUNGO1lBREUsZ0VBQ0Y7WUFFUSxlQUF1QztZQUF2Qyw4REFBdUM7O1lBQzdDLGVBQ0Y7WUFERSxnRUFDRjs7O2lGRHhCVywwQkFBMEI7Y0FMdEMsU0FBUzsyQkFDRSx3QkFBd0I7OE1BVzNCLGFBQWE7a0JBRG5CLEtBQUs7WUFJQyxRQUFRO2tCQURkLEtBQUs7WUFJQyxPQUFPO2tCQURiLE1BQU07WUFJQSxPQUFPO2tCQURiLE1BQU07O2tGQWZJLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDYXNlRmllbGQgfSBmcm9tICcuLi8uLi9kb21haW4vZGVmaW5pdGlvbi9jYXNlLWZpZWxkLm1vZGVsJztcbmltcG9ydCB7IENhc2VTdGF0ZSB9IGZyb20gJy4uLy4uL2RvbWFpbi9kZWZpbml0aW9uL2Nhc2Utc3RhdGUubW9kZWwnO1xuaW1wb3J0IHsgQ2FzZVR5cGVMaXRlIH0gZnJvbSAnLi4vLi4vZG9tYWluL2RlZmluaXRpb24vY2FzZS10eXBlLWxpdGUubW9kZWwnO1xuaW1wb3J0IHsgSnVyaXNkaWN0aW9uIH0gZnJvbSAnLi4vLi4vZG9tYWluL2RlZmluaXRpb24vanVyaXNkaWN0aW9uLm1vZGVsJztcbmltcG9ydCB7IFdvcmtiYXNrZXRJbnB1dE1vZGVsIH0gZnJvbSAnLi4vLi4vZG9tYWluL3dvcmtiYXNrZXQvd29ya2Jhc2tldC1pbnB1dC5tb2RlbCc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hbGVydC9hbGVydC5zZXJ2aWNlJztcbmltcG9ydCB7IEZpZWxkc1V0aWxzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmllbGRzL2ZpZWxkcy51dGlscyc7XG5pbXBvcnQgeyBKdXJpc2RpY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvanVyaXNkaWN0aW9uL2p1cmlzZGljdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IE9yZGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL29yZGVyL29yZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgV2luZG93U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3dpbmRvdy93aW5kb3cuc2VydmljZSc7XG5pbXBvcnQgeyBXb3JrYmFza2V0SW5wdXRGaWx0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvd29ya2Jhc2tldC93b3JrYmFza2V0LWlucHV0LWZpbHRlci5zZXJ2aWNlJztcblxuY29uc3QgRk9STV9HUk9VUF9WQUxfTE9DX1NUT1JBR0UgPSAnd29ya2Jhc2tldC1maWx0ZXItZm9ybS1ncm91cC12YWx1ZSc7XG5jb25zdCBTQVZFRF9RVUVSWV9QQVJBTV9MT0NfU1RPUkFHRSA9ICdzYXZlZFF1ZXJ5UGFyYW1zJztcbmNvbnN0IFJFR0lPTl9MSVNUX0FORF9GUkNfRklMVEVSID0gJ3JlZ2lvbkxpc3QnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY2Qtd29ya2Jhc2tldC1maWx0ZXJzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3dvcmtiYXNrZXQtZmlsdGVycy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3dvcmtiYXNrZXQtZmlsdGVycy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFdvcmtiYXNrZXRGaWx0ZXJzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQQVJBTV9KVVJJU0RJQ1RJT04gPSAnanVyaXNkaWN0aW9uJztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQQVJBTV9DQVNFX1RZUEUgPSAnY2FzZS10eXBlJztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQQVJBTV9DQVNFX1NUQVRFID0gJ2Nhc2Utc3RhdGUnO1xuICBwdWJsaWMgY2FzZUZpZWxkczogQ2FzZUZpZWxkW107XG5cbiAgQElucHV0KClcbiAgcHVibGljIGp1cmlzZGljdGlvbnM6IEp1cmlzZGljdGlvbltdO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBkZWZhdWx0cztcblxuICBAT3V0cHV0KClcbiAgcHVibGljIG9uQXBwbHk6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgb25SZXNldDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHVibGljIHdvcmtiYXNrZXRJbnB1dHM6IFdvcmtiYXNrZXRJbnB1dE1vZGVsW107XG4gIHB1YmxpYyB3b3JrYmFza2V0SW5wdXRzUmVhZHk6IGJvb2xlYW47XG5cbiAgcHVibGljIHdvcmtiYXNrZXREZWZhdWx0czogYm9vbGVhbjtcblxuICBwdWJsaWMgc2VsZWN0ZWQ6IHtcbiAgICBpbml0PzogYm9vbGVhbixcbiAgICBqdXJpc2RpY3Rpb24/OiBKdXJpc2RpY3Rpb24sXG4gICAgY2FzZVR5cGU/OiBDYXNlVHlwZUxpdGUsXG4gICAgY2FzZVN0YXRlPzogQ2FzZVN0YXRlLFxuICAgIGZvcm1Hcm91cD86IEZvcm1Hcm91cCxcbiAgICBwYWdlPzogbnVtYmVyLFxuICAgIG1ldGFkYXRhRmllbGRzPzogc3RyaW5nW11cbiAgLy8gRVhVSS0zMTYyIC0gc2VsZWN0ZWQgaXMgbmV2ZXIgdW5kZWZpbmVkXG4gIH0gPSB7fTtcblxuICBwdWJsaWMgZm9ybUdyb3VwOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcblxuICBwdWJsaWMgc2VsZWN0ZWRKdXJpc2RpY3Rpb25DYXNlVHlwZXM/OiBDYXNlVHlwZUxpdGVbXTtcbiAgcHVibGljIHNlbGVjdGVkQ2FzZVR5cGVTdGF0ZXM/OiBDYXNlU3RhdGVbXTtcblxuICBwdWJsaWMgaW5pdGlhbGlzZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHdvcmtiYXNrZXRJbnB1dEZpbHRlclNlcnZpY2U6IFdvcmtiYXNrZXRJbnB1dEZpbHRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBvcmRlclNlcnZpY2U6IE9yZGVyU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGp1cmlzZGljdGlvblNlcnZpY2U6IEp1cmlzZGljdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHdpbmRvd1NlcnZpY2U6IFdpbmRvd1NlcnZpY2UpIHtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVmYXVsdEp1cmlzZGljdGlvbigpOiBKdXJpc2RpY3Rpb24ge1xuICAgIGlmICghdGhpcy5qdXJpc2RpY3Rpb25zIHx8IHRoaXMuanVyaXNkaWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0cy5qdXJpc2RpY3Rpb25faWRcbiAgICAgID8gdGhpcy5qdXJpc2RpY3Rpb25zLmZpbmQoaiA9PiB0aGlzLmRlZmF1bHRzLmp1cmlzZGljdGlvbl9pZCA9PT0gai5pZClcbiAgICAgIDogdGhpcy5qdXJpc2RpY3Rpb25zWzBdO1xuICB9XG4gIHByaXZhdGUgZ2V0RGVmYXVsdENhc2VUeXBlKCk6IENhc2VUeXBlTGl0ZSB7XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdHMuY2FzZV90eXBlX2lkXG4gICAgICA/IHRoaXMuZ2V0RGVmYXVsdEp1cmlzZGljdGlvbigpPy5jYXNlVHlwZXMuZmluZChjdCA9PiB0aGlzLmRlZmF1bHRzLmNhc2VfdHlwZV9pZCA9PT0gY3QuaWQpXG4gICAgICA6IHRoaXMuZ2V0RGVmYXVsdEp1cmlzZGljdGlvbigpPy5jYXNlVHlwZXNbMF07XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZCA9IHtcbiAgICAgIGp1cmlzZGljdGlvbjogbnVsbCxcbiAgICAgIGNhc2VUeXBlOiBudWxsLFxuICAgICAgZm9ybUdyb3VwOiBudWxsLFxuICAgICAgY2FzZVN0YXRlOiB1bmRlZmluZWQsXG4gICAgICBwYWdlOiAxLFxuICAgICAgbWV0YWRhdGFGaWVsZHM6IFtdXG4gICAgfTtcbiAgICAvLyBFWFVJLTMxNjIgLSBkbyBub3QgdXNlIGRlZmF1bHRzIHVubGVzcyBwcmVzZW50XG4gICAgaWYgKHRoaXMuZGVmYXVsdHMpIHtcbiAgICAgIGNvbnN0IGogPSB0aGlzLmdldERlZmF1bHRKdXJpc2RpY3Rpb24oKTtcbiAgICAgIGNvbnN0IGN0ID0gdGhpcy5nZXREZWZhdWx0Q2FzZVR5cGUoKTtcbiAgICAgIGouY3VycmVudENhc2VUeXBlID0gY3Q7XG4gICAgICB0aGlzLnNlbGVjdGVkLmp1cmlzZGljdGlvbiA9IGogPyBqIDogbnVsbDtcbiAgICAgIHRoaXMuc2VsZWN0ZWQuY2FzZVR5cGUgPSBjdCA/IGN0IDogbnVsbDtcbiAgICB9XG4gICAgdGhpcy5qdXJpc2RpY3Rpb25TZXJ2aWNlLmFubm91bmNlU2VsZWN0ZWRKdXJpc2RpY3Rpb24odGhpcy5zZWxlY3RlZC5qdXJpc2RpY3Rpb24pO1xuICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XG4gICAgICBpZiAoIXRoaXMuaW5pdGlhbGlzZWQgfHwgIXBhcmFtcyB8fCAhT2JqZWN0LmtleXMocGFyYW1zKS5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5pbml0RmlsdGVycyhmYWxzZSk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGlzZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFwcGx5KGluaXQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAvLyBTYXZlIGZpbHRlcnMgYXMgcXVlcnkgcGFyYW1ldGVycyBmb3IgY3VycmVudCByb3V0ZVxuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0ge307XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWQuanVyaXNkaWN0aW9uKSB7XG4gICAgICBxdWVyeVBhcmFtc1tXb3JrYmFza2V0RmlsdGVyc0NvbXBvbmVudC5QQVJBTV9KVVJJU0RJQ1RJT05dID0gdGhpcy5zZWxlY3RlZC5qdXJpc2RpY3Rpb24uaWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLnNlbGVjdGVkLmNhc2VUeXBlKSB7XG4gICAgICBxdWVyeVBhcmFtc1tXb3JrYmFza2V0RmlsdGVyc0NvbXBvbmVudC5QQVJBTV9DQVNFX1RZUEVdID0gdGhpcy5zZWxlY3RlZC5jYXNlVHlwZS5pZDtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWQuY2FzZVN0YXRlKSB7XG4gICAgICBxdWVyeVBhcmFtc1tXb3JrYmFza2V0RmlsdGVyc0NvbXBvbmVudC5QQVJBTV9DQVNFX1NUQVRFXSA9IHRoaXMuc2VsZWN0ZWQuY2FzZVN0YXRlLmlkO1xuICAgIH1cbiAgICAvLyB3aXRob3V0IGV4cGxpY2l0bHkgcHJlc2VydmluZyBhbGVydHMgYW55IG1lc3NhZ2Ugb24gdGhlIHBhZ2VcbiAgICAvLyB3b3VsZCBiZSBjbGVhcmVkIG91dCBiZWNhdXNlIG9mIHRoaXMgaW5pdGlhbCBuYXZpZ2F0aW9uLlxuICAgIC8vIFRoZSBhYm92ZSBpcyBvbmx5IHRydWUgaWYgbm8gYWxlcnRzIHdlcmUgc2V0IHByaW9yIHRvIGxvYWRpbmcgY2FzZSBsaXN0IHBhZ2UuXG4gICAgaWYgKCF0aGlzLmFsZXJ0U2VydmljZS5pc1ByZXNlcnZlQWxlcnRzKCkpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNldFByZXNlcnZlQWxlcnRzKCF0aGlzLmluaXRpYWxpc2VkKTtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWQuZm9ybUdyb3VwID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShGT1JNX0dST1VQX1ZBTF9MT0NfU1RPUkFHRSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVcGRhdGUgZm9ybSBncm91cCBmaWx0ZXJzXG4gICAgICB0aGlzLnVwZGF0ZUZvcm1Hcm91cEZpbHRlcnMoKTtcblxuICAgICAgdGhpcy5zZWxlY3RlZC5mb3JtR3JvdXAgPSB0aGlzLmZvcm1Hcm91cDtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZC5pbml0ID0gaW5pdDtcbiAgICB0aGlzLnNlbGVjdGVkLnBhZ2UgPSAxO1xuICAgIHRoaXMuc2VsZWN0ZWQubWV0YWRhdGFGaWVsZHMgPSB0aGlzLmdldE1ldGFkYXRhRmllbGRzKCk7XG4gICAgaWYgKGluaXQpIHtcbiAgICAgIHRoaXMud2luZG93U2VydmljZS5zZXRMb2NhbFN0b3JhZ2UoU0FWRURfUVVFUllfUEFSQU1fTE9DX1NUT1JBR0UsIEpTT04uc3RyaW5naWZ5KHF1ZXJ5UGFyYW1zKSk7XG4gICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5mb3JtR3JvdXAuY29udHJvbHMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gRmluZCBhbGwgXCJzcGVjaWFsIGNhc2VcIiBKdWRpY2lhbFVzZXIgRm9ybUNvbnRyb2wga2V5cyBhbmQgcmVtb3ZlIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcyBmcm9tIHRoZVxuICAgICAgICAvLyBGb3JtR3JvdXAgdmFsdWUgYmVjYXVzZSB0aGVzZSB2YWx1ZXMgYXJlIG5vdCBpbnRlbmRlZCB0byBiZSBzdG9yZWQgYW5kIHN1YnNlcXVlbnRseSBwYXNzZWQgYXMgcXVlcnkgc3RyaW5nXG4gICAgICAgIC8vIHBhcmFtZXRlcnMgd2hlbiBjYWxsaW5nIHNlYXJjaENhc2VzIEFQSSBlbmRwb2ludFxuICAgICAgICBjb25zdCBqdWRpY2lhbFVzZXJDb250cm9sVmFsdWVzVG9SZW1vdmUgPVxuICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzKS5maWx0ZXIoKGtleSkgPT4ga2V5LmVuZHNXaXRoKCdfanVkaWNpYWxVc2VyQ29udHJvbCcpKTtcbiAgICAgICAganVkaWNpYWxVc2VyQ29udHJvbFZhbHVlc1RvUmVtb3ZlLmZvckVhY2goKGNvbnRyb2xLZXkpID0+IGRlbGV0ZSB0aGlzLmZvcm1Hcm91cC52YWx1ZVtjb250cm9sS2V5XSk7XG4gICAgICAgIHRoaXMud2luZG93U2VydmljZS5zZXRMb2NhbFN0b3JhZ2UoRk9STV9HUk9VUF9WQUxfTE9DX1NUT1JBR0UsIEpTT04uc3RyaW5naWZ5KHRoaXMuZm9ybUdyb3VwLnZhbHVlKSk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEFubm91bmNlIHNlbGVjdGVkIGp1cmlzZGljdGlvbiB2aWEgSnVyaXNkaWN0aW9uU2VydmljZVxuICAgIGlmICh0aGlzLnNlbGVjdGVkLmp1cmlzZGljdGlvbikge1xuICAgICAgLy8gU2V0IHRoZSBzZWxlY3RlZCBjYXNlIHR5cGUgYXMgdGhlIGN1cnJlbnQgY2FzZSB0eXBlIG9mIHRoZSBzZWxlY3RlZCBqdXJpc2RpY3Rpb25cbiAgICAgIHRoaXMuc2VsZWN0ZWQuanVyaXNkaWN0aW9uLmN1cnJlbnRDYXNlVHlwZSA9IHRoaXMuc2VsZWN0ZWQuY2FzZVR5cGU7XG4gICAgICB0aGlzLmp1cmlzZGljdGlvblNlcnZpY2UuYW5ub3VuY2VTZWxlY3RlZEp1cmlzZGljdGlvbih0aGlzLnNlbGVjdGVkLmp1cmlzZGljdGlvbik7XG4gICAgfVxuICAgIC8vIEFwcGx5IGZpbHRlcnNcbiAgICB0aGlzLm9uQXBwbHkuZW1pdCh7IHNlbGVjdGVkOiB0aGlzLnNlbGVjdGVkLCBxdWVyeVBhcmFtcyB9KTtcbiAgICB0aGlzLnNldEZvY3VzVG9Ub3AoKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLndpbmRvd1NlcnZpY2UucmVtb3ZlTG9jYWxTdG9yYWdlKEZPUk1fR1JPVVBfVkFMX0xPQ19TVE9SQUdFKTtcbiAgICB0aGlzLndpbmRvd1NlcnZpY2UucmVtb3ZlTG9jYWxTdG9yYWdlKFNBVkVEX1FVRVJZX1BBUkFNX0xPQ19TVE9SQUdFKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucmVzZXRGaWVsZHNXaGVuTm9EZWZhdWx0cygpO1xuICAgICAgdGhpcy5vblJlc2V0LmVtaXQodHJ1ZSk7XG4gICAgfSwgNTAwKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNZXRhZGF0YUZpZWxkcygpOiBzdHJpbmdbXSB7XG4gICAgaWYgKHRoaXMud29ya2Jhc2tldElucHV0cykge1xuICAgICAgcmV0dXJuIHRoaXMud29ya2Jhc2tldElucHV0c1xuICAgICAgICAuZmlsdGVyKHdvcmtiYXNrZXRJbnB1dCA9PiB3b3JrYmFza2V0SW5wdXQuZmllbGQubWV0YWRhdGEgPT09IHRydWUpXG4gICAgICAgIC5tYXAod29ya2Jhc2tldElucHV0ID0+IHdvcmtiYXNrZXRJbnB1dC5maWVsZC5pZCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uSnVyaXNkaWN0aW9uSWRDaGFuZ2UoKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWQuanVyaXNkaWN0aW9uKSB7XG4gICAgICB0aGlzLmp1cmlzZGljdGlvblNlcnZpY2UuYW5ub3VuY2VTZWxlY3RlZEp1cmlzZGljdGlvbih0aGlzLnNlbGVjdGVkLmp1cmlzZGljdGlvbik7XG4gICAgICB0aGlzLnNlbGVjdGVkSnVyaXNkaWN0aW9uQ2FzZVR5cGVzID0gdGhpcy5zZWxlY3RlZC5qdXJpc2RpY3Rpb24uY2FzZVR5cGVzLmxlbmd0aCA+IDBcbiAgICAgICAgPyB0aGlzLnNlbGVjdGVkLmp1cmlzZGljdGlvbi5jYXNlVHlwZXMgOiBudWxsO1xuICAgICAgLy8gTGluZSB3YXMgdG9vIGxvbmcgZm9yIGxpbnRpbmcgc28gcmVmYWN0b3JlZCBpdC5cbiAgICAgIGlmICh0aGlzLndvcmtiYXNrZXREZWZhdWx0cyAmJiB0aGlzLnNlbGVjdGVkSnVyaXNkaWN0aW9uQ2FzZVR5cGVzKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuY2FzZVR5cGUgPSB0aGlzLnNlbGVjdGVkSnVyaXNkaWN0aW9uQ2FzZVR5cGVzWzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5jYXNlVHlwZSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2VsZWN0ZWQuY2FzZVN0YXRlID0gbnVsbDtcbiAgICAgIHRoaXMuY2xlYXJXb3JrYmFza2V0SW5wdXRzKCk7XG5cbiAgICAgIGlmICghdGhpcy5pc0FwcGx5QnV0dG9uRGlzYWJsZWQoKSkge1xuICAgICAgICB0aGlzLm9uQ2FzZVR5cGVJZENoYW5nZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlc2V0Q2FzZVR5cGUoKTtcbiAgICAgIHRoaXMucmVzZXRDYXNlU3RhdGUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25DYXNlVHlwZUlkQ2hhbmdlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkLmNhc2VUeXBlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkQ2FzZVR5cGVTdGF0ZXMgPSB0aGlzLnNvcnRTdGF0ZXModGhpcy5zZWxlY3RlZC5jYXNlVHlwZS5zdGF0ZXMpO1xuICAgICAgdGhpcy5zZWxlY3RlZC5jYXNlU3RhdGUgPSBudWxsO1xuICAgICAgdGhpcy5mb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgICAgIHRoaXMuY2xlYXJXb3JrYmFza2V0SW5wdXRzKCk7XG4gICAgICBpZiAoIXRoaXMuaXNBcHBseUJ1dHRvbkRpc2FibGVkKCkpIHtcbiAgICAgICAgdGhpcy53b3JrYmFza2V0SW5wdXRGaWx0ZXJTZXJ2aWNlLmdldFdvcmtiYXNrZXRJbnB1dHModGhpcy5zZWxlY3RlZC5qdXJpc2RpY3Rpb24uaWQsIHRoaXMuc2VsZWN0ZWQuY2FzZVR5cGUuaWQpLnBpcGUoXG4gICAgICAgICAgdGFrZSgxKVxuICAgICAgICApLnN1YnNjcmliZSh3b3JrYmFza2V0SW5wdXRzID0+IHtcbiAgICAgICAgICB0aGlzLndvcmtiYXNrZXRJbnB1dHNSZWFkeSA9IHRydWU7XG4gICAgICAgICAgdGhpcy53b3JrYmFza2V0SW5wdXRzID0gd29ya2Jhc2tldElucHV0c1xuICAgICAgICAgICAgLnNvcnQodGhpcy5vcmRlclNlcnZpY2Uuc29ydEFzYyk7XG4gICAgICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy53aW5kb3dTZXJ2aWNlLmdldExvY2FsU3RvcmFnZShGT1JNX0dST1VQX1ZBTF9MT0NfU1RPUkFHRSk7XG5cbiAgICAgICAgICB3b3JrYmFza2V0SW5wdXRzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbS5maWVsZC5lbGVtZW50UGF0aCkge1xuICAgICAgICAgICAgICBpdGVtLmZpZWxkLmlkID0gYCR7aXRlbS5maWVsZC5pZH0uJHtpdGVtLmZpZWxkLmVsZW1lbnRQYXRofWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVtLmZpZWxkLmxhYmVsID0gaXRlbS5sYWJlbDtcbiAgICAgICAgICAgIGlmIChmb3JtVmFsdWUpIHtcbiAgICAgICAgICAgICAgY29uc3Qgc2VhcmNoRm9ybVZhbHVlT2JqZWN0ID0gSlNPTi5wYXJzZShmb3JtVmFsdWUpO1xuICAgICAgICAgICAgICBpdGVtLmZpZWxkLnZhbHVlID0gc2VhcmNoRm9ybVZhbHVlT2JqZWN0W2l0ZW0uZmllbGQuaWRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuZ2V0Q2FzZUZpZWxkcygpO1xuICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1dvcmtiYXNrZXQgaW5wdXQgZmllbGRzIHJlcXVlc3Qgd2lsbCBiZSBkaXNjYXJkZWQgcmVhc29uOiAnLCBlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVzZXRDYXNlU3RhdGUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNDYXNlVHlwZXNEcm9wZG93bkRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5zZWxlY3RlZEp1cmlzZGljdGlvbkNhc2VUeXBlcztcbiAgfVxuXG4gIHB1YmxpYyBpc0Nhc2VTdGF0ZXNEcm9wZG93bkRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5zZWxlY3RlZC5jYXNlVHlwZSB8fCAhKHRoaXMuc2VsZWN0ZWQuY2FzZVR5cGUuc3RhdGVzICYmIHRoaXMuc2VsZWN0ZWQuY2FzZVR5cGUuc3RhdGVzLmxlbmd0aCA+IDApO1xuICB9XG5cbiAgcHVibGljIGlzQXBwbHlCdXR0b25EaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISh0aGlzLnNlbGVjdGVkLmp1cmlzZGljdGlvbiAmJiB0aGlzLnNlbGVjdGVkLmNhc2VUeXBlKTtcbiAgfVxuXG4gIHB1YmxpYyBpc1NlYXJjaGFibGVBbmRXb3JrYmFza2V0SW5wdXRzUmVhZHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQuanVyaXNkaWN0aW9uICYmIHRoaXMuc2VsZWN0ZWQuY2FzZVR5cGUgJiYgdGhpcy53b3JrYmFza2V0SW5wdXRzUmVhZHk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBjbGVhciB0aGUgcHJldmlvdXNseSB1c2VkXG4gICAqIGZvcm0gZ3JvdXAgY29udHJvbCBmaWx0ZXIgdmFsdWVzIHRvIG1ha2Ugc3VyZSBvbmx5IHRoZVxuICAgKiBjdXJyZW50bHkgc2VsZWN0ZWQgZm9ybSBncm91cCBjb250cm9sIGZpbHRlciB2YWx1ZXMgYXJlIHByZXNlbnQuXG4gICAqXG4gICAqIEhhcyBiZWVuIGltcGxlbWVudGVkIGZvciAnUmVnaW9uIGFuZCBGUkMgZmlsdGVycycgYW5kIGNhbiBiZSBleHRlbmRlZFxuICAgKiBpbiBmdXR1cmUgdG8gaW5jb3Jwb3JhdGUgb3RoZXIgZHluYW1pYyBmaWx0ZXJzLlxuICAgKi9cbiAgcHVibGljIHVwZGF0ZUZvcm1Hcm91cEZpbHRlcnMoKTogdm9pZCB7XG4gICAgLy8gUmVhZCB0aGUgZm9ybSBncm91cCBsb2NhbCBzdG9yYWdlXG4gICAgY29uc3QgZm9ybUdyb3VwTFMgPSBKU09OLnBhcnNlKHRoaXMud2luZG93U2VydmljZS5nZXRMb2NhbFN0b3JhZ2UoRk9STV9HUk9VUF9WQUxfTE9DX1NUT1JBR0UpKTtcblxuICAgIC8vIEZvcm0gZ3JvdXAgbG9jYWwgc3RvcmFnZSBpcyBhdmFpbGFibGUgYW5kIGNvbnRhaW5zIHJlZ2lvbkxpc3QgcHJvcGVydHlcbiAgICBpZiAoISFmb3JtR3JvdXBMUyAmJiBmb3JtR3JvdXBMUy5oYXNPd25Qcm9wZXJ0eShSRUdJT05fTElTVF9BTkRfRlJDX0ZJTFRFUikpIHtcbiAgICAgIGlmICh0aGlzLmZvcm1Hcm91cC5nZXQoUkVHSU9OX0xJU1RfQU5EX0ZSQ19GSUxURVIpKSB7XG4gICAgICAgIC8vIElmIHJlZ2lvbkxpc3QgdmFsdWUgZG9lcyBub3QgbWF0Y2ggYmV0d2VlbiBsb2NhbCBzdG9yYWdlIGFuZCBmb3JtIGdyb3VwXG4gICAgICAgIC8vIHRoZW4gdGhlIGZpbHRlciB2YWx1ZSBoYXMgYmVlbiBjaGFuZ2VkIGFuZCB3ZSBuZWVkIHRvIGNsZWFyIHRoZSBvbGQgZmlsdGVyIHZhbHVlc1xuICAgICAgICBpZiAoZm9ybUdyb3VwTFNbUkVHSU9OX0xJU1RfQU5EX0ZSQ19GSUxURVJdICE9PSB0aGlzLmZvcm1Hcm91cC5nZXQoUkVHSU9OX0xJU1RfQU5EX0ZSQ19GSUxURVIpLnZhbHVlKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZm9ybUdyb3VwTFMpIHtcbiAgICAgICAgICAgIGlmIChmb3JtR3JvdXBMUy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZm9ybUdyb3VwTFNba2V5XTtcbiAgICAgICAgICAgICAgLy8gQ2xlYXIgdGhlIGZpbHRlciBmb3JtIGdyb3VwIGNvbnRyb2wgdmFsdWVzIGlmIGl0IGhhcyBhIHZhbHVlIGluIGxvY2FsIHN0b3JhZ2VcbiAgICAgICAgICAgICAgLy8gVGhlIHJlZ2lvbkxpc3QgZm9ybSBncm91cCBjb250cm9sIHZhbHVlIHNob3VsZCBiZSBpZ25vcmVkIGFzIGl0IGFsd2F5cyBjb250YWluIHRoZSBsYXRlc3QgdmFsdWVcbiAgICAgICAgICAgICAgaWYgKGtleSAhPT0gUkVHSU9OX0xJU1RfQU5EX0ZSQ19GSUxURVIgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoa2V5KS5zZXRWYWx1ZShudWxsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc29ydFN0YXRlcyhzdGF0ZXM6IENhc2VTdGF0ZVtdKSB7XG4gICAgcmV0dXJuIHN0YXRlcy5zb3J0KHRoaXMub3JkZXJTZXJ2aWNlLnNvcnRBc2MpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyeSB0byBpbml0aWFsaXNlIGZpbHRlcnMgYmFzZWQgb24gcXVlcnkgcGFyYW1ldGVycyBvciB3b3JrYmFza2V0IGRlZmF1bHRzLlxuICAgKiBRdWVyeSBwYXJhbWV0ZXJzLCB3aGVuIGF2YWlsYWJsZSwgdGFrZSBwcmVjZWRlbmNlIG92ZXIgd29ya2Jhc2tldCBkZWZhdWx0cy5cbiAgICovXG4gIHByaXZhdGUgaW5pdEZpbHRlcnMoaW5pdDogYm9vbGVhbikge1xuICAgIGNvbnN0IHNhdmVkUXVlcnlQYXJhbXMgPSB0aGlzLndpbmRvd1NlcnZpY2UuZ2V0TG9jYWxTdG9yYWdlKFNBVkVEX1FVRVJZX1BBUkFNX0xPQ19TVE9SQUdFKTtcbiAgICBjb25zdCByb3V0ZVNuYXBzaG90OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90ID0gdGhpcy5yb3V0ZS5zbmFwc2hvdDtcbiAgICBpZiAoc2F2ZWRRdWVyeVBhcmFtcykge1xuICAgICAgcm91dGVTbmFwc2hvdC5xdWVyeVBhcmFtcyA9IEpTT04ucGFyc2Uoc2F2ZWRRdWVyeVBhcmFtcyk7XG4gICAgfVxuICAgIGNvbnN0IHNlbGVjdGVkSnVyaXNkaWN0aW9uSWQgPSByb3V0ZVNuYXBzaG90LnF1ZXJ5UGFyYW1zW1dvcmtiYXNrZXRGaWx0ZXJzQ29tcG9uZW50LlBBUkFNX0pVUklTRElDVElPTl0gfHxcbiAgICAgICh0aGlzLmRlZmF1bHRzICYmIHRoaXMuZGVmYXVsdHMuanVyaXNkaWN0aW9uX2lkKTtcbiAgICBpZiAoc2VsZWN0ZWRKdXJpc2RpY3Rpb25JZCkge1xuICAgICAgdGhpcy5zZWxlY3RlZC5qdXJpc2RpY3Rpb24gPSB0aGlzLmp1cmlzZGljdGlvbnMuZmluZChqID0+IHNlbGVjdGVkSnVyaXNkaWN0aW9uSWQgPT09IGouaWQpO1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQuanVyaXNkaWN0aW9uICYmIHRoaXMuc2VsZWN0ZWQuanVyaXNkaWN0aW9uLmNhc2VUeXBlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRKdXJpc2RpY3Rpb25DYXNlVHlwZXMgPSB0aGlzLnNlbGVjdGVkLmp1cmlzZGljdGlvbi5jYXNlVHlwZXM7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuY2FzZVR5cGUgPSB0aGlzLnNlbGVjdENhc2VUeXBlKHRoaXMuc2VsZWN0ZWQsIHRoaXMuc2VsZWN0ZWRKdXJpc2RpY3Rpb25DYXNlVHlwZXMsIHJvdXRlU25hcHNob3QpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZC5jYXNlVHlwZSkge1xuICAgICAgICAgIHRoaXMub25DYXNlVHlwZUlkQ2hhbmdlKCk7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZC5jYXNlU3RhdGUgPSB0aGlzLnNlbGVjdENhc2VTdGF0ZSh0aGlzLnNlbGVjdGVkLmNhc2VUeXBlLCByb3V0ZVNuYXBzaG90KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLndvcmtiYXNrZXREZWZhdWx0cyA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWQuanVyaXNkaWN0aW9uID0gbnVsbDtcbiAgICAgIHRoaXMuc2VsZWN0ZWQuY2FzZVR5cGUgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLmFwcGx5KGluaXQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RDYXNlU3RhdGUoY2FzZVR5cGU6IENhc2VUeXBlTGl0ZSwgcm91dGVTbmFwc2hvdDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCk6IENhc2VTdGF0ZSB7XG4gICAgbGV0IGNhc2VTdGF0ZTtcbiAgICBpZiAoY2FzZVR5cGUpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkQ2FzZVN0YXRlSWQgPSB0aGlzLnNlbGVjdENhc2VTdGF0ZUlkRnJvbVF1ZXJ5T3JEZWZhdWx0cyhyb3V0ZVNuYXBzaG90LCAodGhpcy5kZWZhdWx0cyAmJiB0aGlzLmRlZmF1bHRzLnN0YXRlX2lkKSk7XG4gICAgICBjYXNlU3RhdGUgPSBjYXNlVHlwZS5zdGF0ZXMuZmluZChjdCA9PiBzZWxlY3RlZENhc2VTdGF0ZUlkID09PSBjdC5pZCk7XG4gICAgfVxuICAgIHJldHVybiBjYXNlU3RhdGUgPyBjYXNlU3RhdGUgOiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RDYXNlU3RhdGVJZEZyb21RdWVyeU9yRGVmYXVsdHMocm91dGVTbmFwc2hvdDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgZGVmYXVsdENhc2VTdGF0ZUlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiByb3V0ZVNuYXBzaG90LnF1ZXJ5UGFyYW1zW1dvcmtiYXNrZXRGaWx0ZXJzQ29tcG9uZW50LlBBUkFNX0NBU0VfU1RBVEVdIHx8IGRlZmF1bHRDYXNlU3RhdGVJZDtcbiAgfVxuXG4gIHByaXZhdGUgc2VsZWN0Q2FzZVR5cGUoc2VsZWN0ZWQ6IGFueSwgY2FzZVR5cGVzOiBDYXNlVHlwZUxpdGVbXSwgcm91dGVTbmFwc2hvdDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCk6IENhc2VUeXBlTGl0ZSB7XG4gICAgbGV0IGNhc2VUeXBlO1xuICAgIGlmIChzZWxlY3RlZC5qdXJpc2RpY3Rpb24pIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkQ2FzZVR5cGVJZCA9IHRoaXMuc2VsZWN0Q2FzZVR5cGVJZEZyb21RdWVyeU9yRGVmYXVsdHMocm91dGVTbmFwc2hvdCwgKHRoaXMuZGVmYXVsdHMgJiYgdGhpcy5kZWZhdWx0cy5jYXNlX3R5cGVfaWQpKTtcbiAgICAgIGNhc2VUeXBlID0gY2FzZVR5cGVzLmZpbmQoY3QgPT4gc2VsZWN0ZWRDYXNlVHlwZUlkID09PSBjdC5pZCk7XG4gICAgfVxuICAgIHJldHVybiBjYXNlVHlwZSA/IGNhc2VUeXBlIDogY2FzZVR5cGVzWzBdO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RDYXNlVHlwZUlkRnJvbVF1ZXJ5T3JEZWZhdWx0cyhyb3V0ZVNuYXBzaG90OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBkZWZhdWx0Q2FzZVR5cGVJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcm91dGVTbmFwc2hvdC5xdWVyeVBhcmFtc1tXb3JrYmFza2V0RmlsdGVyc0NvbXBvbmVudC5QQVJBTV9DQVNFX1RZUEVdIHx8IGRlZmF1bHRDYXNlVHlwZUlkO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldEZpZWxkc1doZW5Ob0RlZmF1bHRzKCkge1xuICAgIHRoaXMucmVzZXRDYXNlU3RhdGUoKTtcbiAgICB0aGlzLnJlc2V0Q2FzZVR5cGUoKTtcbiAgICB0aGlzLmNsZWFyV29ya2Jhc2tldElucHV0cygpO1xuICAgIHRoaXMud29ya2Jhc2tldERlZmF1bHRzID0gZmFsc2U7XG4gICAgdGhpcy5zZWxlY3RlZC5qdXJpc2RpY3Rpb24gPSBudWxsO1xuICAgIHRoaXMuaW5pdGlhbGlzZWQgPSBmYWxzZTtcbiAgICB0aGlzLmluaXRGaWx0ZXJzKHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhcldvcmtiYXNrZXRJbnB1dHMoKSB7XG4gICAgdGhpcy53b3JrYmFza2V0SW5wdXRzUmVhZHkgPSBmYWxzZTtcbiAgICB0aGlzLndvcmtiYXNrZXRJbnB1dHMgPSBbXTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRDYXNlU3RhdGUoKSB7XG4gICAgdGhpcy5kZWZhdWx0cy5zdGF0ZV9pZCA9IG51bGw7XG4gICAgdGhpcy5zZWxlY3RlZC5jYXNlU3RhdGUgPSBudWxsO1xuICAgIHRoaXMuc2VsZWN0ZWRDYXNlVHlwZVN0YXRlcyA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0Q2FzZVR5cGUoKSB7XG4gICAgdGhpcy5zZWxlY3RlZC5jYXNlVHlwZSA9IHVuZGVmaW5lZDsgLy8gb3B0aW9uIHNob3VsZCBiZSBibGFuayByYXRoZXIgdGhhbiBcIlNlbGVjdCBhIHZhbHVlXCIgaW4gY2FzZSBvZiByZXNldC5cbiAgICB0aGlzLnNlbGVjdGVkSnVyaXNkaWN0aW9uQ2FzZVR5cGVzID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Rm9jdXNUb1RvcCgpIHtcbiAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG5cbiAgICBjb25zdCB0b3BDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VhcmNoLXJlc3VsdC1oZWFkaW5nX190ZXh0Jyk7XG4gICAgaWYgKHRvcENvbnRhaW5lcikge1xuICAgICAgdG9wQ29udGFpbmVyLmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRDYXNlRmllbGRzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLndvcmtiYXNrZXRJbnB1dHMpIHtcbiAgICAgIHRoaXMuY2FzZUZpZWxkcyA9IHRoaXMud29ya2Jhc2tldElucHV0cy5tYXAoaXRlbSA9PiBGaWVsZHNVdGlscy5jb252ZXJ0VG9DYXNlRmllbGQoaXRlbS5maWVsZCkpO1xuICAgIH1cbiAgfVxufVxuIiwiPGgyIGNsYXNzPVwiaGVhZGluZy1oMlwiIGFyaWEtbGFiZWw9XCJGaWx0ZXJzXCI+e3snRmlsdGVycycgfCBycHhUcmFuc2xhdGUgfX08L2gyPlxuXG48Zm9ybSBjbGFzcz1cImdsb2JhbC1kaXNwbGF5XCI+XG4gIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiIGZvcj1cIndiLWp1cmlzZGljdGlvblwiPnt7J0p1cmlzZGljdGlvbicgfCBycHhUcmFuc2xhdGV9fTwvbGFiZWw+XG4gICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtMy00IGNjZC1kcm9wZG93blwiIGlkPVwid2ItanVyaXNkaWN0aW9uXCJcbiAgICAgICAgICAgIG5hbWU9XCJqdXJpc2RpY3Rpb25cIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkLmp1cmlzZGljdGlvblwiIGFyaWEtY29udHJvbHM9XCJzZWFyY2gtcmVzdWx0XCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwib25KdXJpc2RpY3Rpb25JZENoYW5nZSgpXCI+XG4gICAgICA8b3B0aW9uICpuZ0lmPVwiIXdvcmtiYXNrZXREZWZhdWx0c1wiIFtuZ1ZhbHVlXT1cIm51bGxcIj57eydTZWxlY3QgYSB2YWx1ZScgfCBycHhUcmFuc2xhdGV9fTwvb3B0aW9uPlxuICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgaiBvZiBqdXJpc2RpY3Rpb25zXCIgW25nVmFsdWVdPVwialwiPnt7ai5uYW1lIHwgcnB4VHJhbnNsYXRlfX08L29wdGlvbj5cbiAgICA8L3NlbGVjdD5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCIgZm9yPVwid2ItY2FzZS10eXBlXCI+e3snQ2FzZSB0eXBlJyB8IHJweFRyYW5zbGF0ZX19PC9sYWJlbD5cbiAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC0zLTQgY2NkLWRyb3Bkb3duXCIgaWQ9XCJ3Yi1jYXNlLXR5cGVcIlxuICAgICAgICAgICAgbmFtZT1cImNhc2UtdHlwZVwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWQuY2FzZVR5cGVcIiBbZGlzYWJsZWRdPVwiaXNDYXNlVHlwZXNEcm9wZG93bkRpc2FibGVkKClcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkNhc2VUeXBlSWRDaGFuZ2UoKVwiIGFyaWEtY29udHJvbHM9XCJzZWFyY2gtcmVzdWx0XCI+XG4gICAgICA8b3B0aW9uICpuZ0lmPVwiIXdvcmtiYXNrZXREZWZhdWx0c1wiIFtuZ1ZhbHVlXT1cIm51bGxcIj57eydTZWxlY3QgYSB2YWx1ZScgfCBycHhUcmFuc2xhdGV9fTwvb3B0aW9uPlxuICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgY3Qgb2Ygc2VsZWN0ZWRKdXJpc2RpY3Rpb25DYXNlVHlwZXNcIiBbbmdWYWx1ZV09XCJjdFwiPnt7Y3QubmFtZSB8IHJweFRyYW5zbGF0ZX19PC9vcHRpb24+XG4gICAgPC9zZWxlY3Q+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiIGZvcj1cIndiLWNhc2Utc3RhdGVcIj57eydTdGF0ZScgfCBycHhUcmFuc2xhdGV9fTwvbGFiZWw+XG4gICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtMy00IGNjZC1kcm9wZG93blwiIGlkPVwid2ItY2FzZS1zdGF0ZVwiXG4gICAgICAgICAgICBuYW1lPVwic3RhdGVcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkLmNhc2VTdGF0ZVwiIFtkaXNhYmxlZF09XCJpc0Nhc2VTdGF0ZXNEcm9wZG93bkRpc2FibGVkKClcIlxuICAgICAgICAgICAgYXJpYS1jb250cm9scz1cInNlYXJjaC1yZXN1bHRcIj5cbiAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwibnVsbFwiPnt7J0FueScgfCBycHhUcmFuc2xhdGV9fTwvb3B0aW9uPlxuICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgY3Mgb2Ygc2VsZWN0ZWRDYXNlVHlwZVN0YXRlc1wiIFtuZ1ZhbHVlXT1cImNzXCI+e3tjcy5uYW1lIHwgcnB4VHJhbnNsYXRlfX08L29wdGlvbj5cbiAgICA8L3NlbGVjdD5cbiAgPC9kaXY+XG5cbiAgPG5nLWNvbnRhaW5lciBjY2RDb25kaXRpb25hbFNob3dGb3JtICpuZ0lmPVwiaXNTZWFyY2hhYmxlQW5kV29ya2Jhc2tldElucHV0c1JlYWR5KClcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiIFtjb250ZXh0RmllbGRzXT1cImNhc2VGaWVsZHNcIj5cbiAgICA8ZGl2IGlkPVwiZHluYW1pY0ZpbHRlcnNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgKm5nRm9yPVwibGV0IHdvcmtiYXNrZXRJbnB1dCBvZiB3b3JrYmFza2V0SW5wdXRzXCI+XG4gICAgICAgIDxjY2QtZmllbGQtd3JpdGUgW2Nhc2VGaWVsZF09XCJ3b3JrYmFza2V0SW5wdXQuZmllbGRcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiIFtpc0V4cGFuZGVkXT1cInRydWVcIiBbaXNJblNlYXJjaEJsb2NrXT1cInRydWVcIiAoa2V5dXAuZW50ZXIpPVwiYXBwbHkobnVsbClcIj5cbiAgICAgICAgPC9jY2QtZmllbGQtd3JpdGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidXR0b24gd29ya2Jhc2tldC1maWx0ZXJzLWFwcGx5XCIgKGNsaWNrKT1cImFwcGx5KHRydWUpXCIgW2Rpc2FibGVkXT1cImlzQXBwbHlCdXR0b25EaXNhYmxlZCgpXCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ0FwcGx5IGZpbHRlcicgfCBycHhUcmFuc2xhdGVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidBcHBseSBmaWx0ZXInIHwgcnB4VHJhbnNsYXRlXCI+XG4gICAge3snQXBwbHknIHwgcnB4VHJhbnNsYXRlfX1cbiAgPC9idXR0b24+ICZuYnNwOyZuYnNwOyZuYnNwO1xuICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwicmVzZXQoKVwiIGNsYXNzPVwiYnV0dG9uIGJ1dHRvbi1zZWNvbmRhcnlcIlxuICAgICAgICAgIFt0aXRsZV09XCInUmVzZXQgZmlsdGVyJyB8IHJweFRyYW5zbGF0ZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1Jlc2V0IGZpbHRlcicgfCBycHhUcmFuc2xhdGVcIj5cbiAgICB7eydSZXNldCcgfCBycHhUcmFuc2xhdGV9fVxuICA8L2J1dHRvbj5cbjwvZm9ybT5cbiJdfQ==