@microsoft/windows-admin-center-sdk 2.128.0 → 2.165.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/angular/assets/strings/cs-CZ/strings.json +1 -1
  2. package/angular/assets/strings/de-DE/strings.json +1 -1
  3. package/angular/assets/strings/es-ES/strings.json +1 -1
  4. package/angular/assets/strings/fr-FR/strings.json +1 -1
  5. package/angular/assets/strings/hu-HU/strings.json +1 -1
  6. package/angular/assets/strings/it-IT/strings.json +1 -1
  7. package/angular/assets/strings/ja-JP/strings.json +1 -1
  8. package/angular/assets/strings/ko-KR/strings.json +1 -1
  9. package/angular/assets/strings/nl-NL/strings.json +1 -1
  10. package/angular/assets/strings/pl-PL/strings.json +1 -1
  11. package/angular/assets/strings/pt-BR/strings.json +1 -1
  12. package/angular/assets/strings/pt-PT/strings.json +1 -1
  13. package/angular/assets/strings/ru-RU/strings.json +1 -1
  14. package/angular/assets/strings/sv-SE/strings.json +1 -1
  15. package/angular/assets/strings/tr-TR/strings.json +1 -1
  16. package/angular/assets/strings/zh-CN/strings.json +1 -1
  17. package/angular/assets/strings/zh-TW/strings.json +1 -1
  18. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js +706 -507
  19. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js.map +1 -1
  20. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js +1 -1
  21. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js.map +1 -1
  22. package/angular/esm2015/src/controls/accordion/index.js +5 -0
  23. package/angular/esm2015/src/controls/data-table/data-table.component.js +135 -129
  24. package/angular/esm2015/src/controls/dialog/dialog.component.js +11 -5
  25. package/angular/esm2015/src/controls/dialog/dialog.service.js +6 -13
  26. package/angular/esm2015/src/controls/dropdown/dropdown.service.js +3 -2
  27. package/angular/esm2015/src/controls/form/form-field/array/array-form-field.component.js +29 -22
  28. package/angular/esm2015/src/controls/form/form-field/datetime-range/datetime-range-form-field.component.js +4 -3
  29. package/angular/esm2015/src/controls/form/form-field/list/list-form-field.component.js +1 -1
  30. package/angular/esm2015/src/controls/form/validation-alert/validation-alert.component.js +3 -2
  31. package/angular/esm2015/src/controls/index.js +2 -1
  32. package/angular/esm2015/src/controls/pivot/pivot.component.js +21 -9
  33. package/angular/esm2015/src/controls/settings/common-settings/common-settings.component.js +38 -34
  34. package/angular/esm2015/src/controls/settings/settings-content.component.js +3 -2
  35. package/angular/esm2015/src/controls/settings/settings.component.js +45 -13
  36. package/angular/esm2015/src/controls/settings/settings.module.js +5 -1
  37. package/angular/esm2015/src/controls/tooltip/tooltip-zone.directive.js +2 -2
  38. package/angular/esm2015/src/controls/wizard/models/index.js +1 -1
  39. package/angular/esm2015/src/controls/wizard/models/wizard-builder-interface.js +2 -0
  40. package/angular/esm2015/src/controls/wizard/models/wizard-navigation-interface.js +2 -0
  41. package/angular/esm2015/src/controls/wizard/wizard-builder.js +70 -1
  42. package/angular/esm2015/src/controls/wizard/wizard-navigation-information.js +56 -2
  43. package/angular/esm2015/src/controls/wizard/wizard.component.js +8 -2
  44. package/angular/esm2015/src/service/connectivity-enforcer.js +5 -2
  45. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js +656 -462
  46. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js.map +1 -1
  47. package/angular/src/controls/accordion/index.d.ts +4 -0
  48. package/angular/src/controls/form/form-field/array/array-form-field.component.d.ts +2 -1
  49. package/angular/src/controls/index.d.ts +1 -0
  50. package/angular/src/controls/pivot/pivot.component.d.ts +2 -2
  51. package/angular/src/controls/settings/settings.component.d.ts +3 -0
  52. package/angular/src/controls/settings/settings.module.d.ts +3 -2
  53. package/angular/src/controls/wizard/models/index.d.ts +2 -0
  54. package/angular/src/controls/wizard/models/wizard-builder-interface.d.ts +8 -0
  55. package/angular/src/controls/wizard/models/wizard-navigation-interface.d.ts +4 -0
  56. package/angular/src/controls/wizard/wizard-builder.d.ts +36 -1
  57. package/angular/src/controls/wizard/wizard-navigation-information.d.ts +48 -5
  58. package/angular/src/controls/wizard/wizard.component.d.ts +2 -1
  59. package/core/azure/azure-constants.d.ts +8 -0
  60. package/core/azure/azure-constants.js +8 -0
  61. package/core/azure/azure-constants.js.map +1 -1
  62. package/core/azure/azure-manager.d.ts +1 -0
  63. package/core/azure/azure-manager.js +7 -1
  64. package/core/azure/azure-manager.js.map +1 -1
  65. package/core/base/environment.d.ts +3 -0
  66. package/core/base/environment.js.map +1 -1
  67. package/core/base/msft-sme.mock.js +3 -0
  68. package/core/base/msft-sme.mock.js.map +1 -1
  69. package/core/base/utilities.d.ts +0 -3
  70. package/core/base/utilities.js +0 -34
  71. package/core/base/utilities.js.map +1 -1
  72. package/core/data/resource-cache.d.ts +1 -1
  73. package/core/data/resource-cache.js +1 -1
  74. package/core/data/resource-cache.js.map +1 -1
  75. package/core/data/settings-manager.d.ts +3 -0
  76. package/core/data/settings-manager.js +14 -1
  77. package/core/data/settings-manager.js.map +1 -1
  78. package/core/dom/dom.d.ts +5 -0
  79. package/core/dom/dom.js +20 -0
  80. package/core/dom/dom.js.map +1 -1
  81. package/core/manifest/environment-modules.js +3 -0
  82. package/core/manifest/environment-modules.js.map +1 -1
  83. package/core/notification/client-notification-instance.d.ts +5 -2
  84. package/core/notification/client-notification-instance.js +9 -5
  85. package/core/notification/client-notification-instance.js.map +1 -1
  86. package/core/notification/client-notification.d.ts +4 -0
  87. package/core/notification/client-notification.js.map +1 -1
  88. package/core/notification/notification.d.ts +6 -1
  89. package/core/notification/notification.js +3 -1
  90. package/core/notification/notification.js.map +1 -1
  91. package/core/rpc/credssp/rpc-credssp-model.d.ts +4 -0
  92. package/core/rpc/credssp/rpc-credssp-model.js.map +1 -1
  93. package/core/rpc/dialog/rpc-dialog-client.js +11 -5
  94. package/core/rpc/dialog/rpc-dialog-client.js.map +1 -1
  95. package/core/rpc/rpc.d.ts +6 -6
  96. package/core/rpc/rpc.js +7 -7
  97. package/core/rpc/rpc.js.map +1 -1
  98. package/core/security/authorization-manager.js +1 -1
  99. package/core/security/authorization-manager.js.map +1 -1
  100. package/core/security/credssp-manager.d.ts +13 -6
  101. package/core/security/credssp-manager.js +37 -21
  102. package/core/security/credssp-manager.js.map +1 -1
  103. package/core/shared/cluster-inventory/cluster-inventory-cache.js +2 -1
  104. package/core/shared/cluster-inventory/cluster-inventory-cache.js.map +1 -1
  105. package/e2e/assets/strings/cs-CZ/strings.json +1 -1
  106. package/e2e/assets/strings/de-DE/strings.json +1 -1
  107. package/e2e/assets/strings/es-ES/strings.json +1 -1
  108. package/e2e/assets/strings/fr-FR/strings.json +1 -1
  109. package/e2e/assets/strings/hu-HU/strings.json +1 -1
  110. package/e2e/assets/strings/it-IT/strings.json +1 -1
  111. package/e2e/assets/strings/ja-JP/strings.json +1 -1
  112. package/e2e/assets/strings/ko-KR/strings.json +1 -1
  113. package/e2e/assets/strings/nl-NL/strings.json +1 -1
  114. package/e2e/assets/strings/pl-PL/strings.json +1 -1
  115. package/e2e/assets/strings/pt-BR/strings.json +1 -1
  116. package/e2e/assets/strings/pt-PT/strings.json +1 -1
  117. package/e2e/assets/strings/ru-RU/strings.json +1 -1
  118. package/e2e/assets/strings/strings.json +1 -1
  119. package/e2e/assets/strings/sv-SE/strings.json +1 -1
  120. package/e2e/assets/strings/tr-TR/strings.json +1 -1
  121. package/e2e/assets/strings/zh-CN/strings.json +1 -1
  122. package/e2e/assets/strings/zh-TW/strings.json +1 -1
  123. package/package.json +11 -4
  124. package/styles/css/main.css +1 -1
  125. package/tools/gulp-ps-cim/index.js +1 -1
  126. package/tools/gulp-ps-cim/index.js.map +1 -1
  127. package/angular/assets/strings/en-US/strings.json +0 -1
  128. package/core/assets/strings/en-US/strings.json +0 -1
  129. package/e2e/assets/strings/en-US/strings.json +0 -1
@@ -1,5 +1,5 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
- import { Component, ContentChild, ElementRef, EventEmitter, HostBinding, Injector, Input, Output, ViewChild } from '@angular/core';
2
+ import { Component, ContentChild, ElementRef, EventEmitter, HostBinding, Injector, Input, Output, TemplateRef, ViewChild } from '@angular/core';
3
3
  import { SmeSchemaProperty } from '../../../schema/schema-decorator';
4
4
  import { ArrayPropertySchemaFieldLoaderComponent } from '../../../schema/schema-field-host.component';
5
5
  import { SchemaPrimitiveType } from '../../../schema/schema-models';
@@ -17,8 +17,8 @@ import * as i7 from "../../../accordion/accordion.component";
17
17
  import * as i8 from "@angular/common";
18
18
  import * as i9 from "../../validation-alert/validation-alert.component";
19
19
  import * as i10 from "../../../accordion/accordion-panel/accordion-panel.component";
20
- import * as i11 from "../../fieldset/fieldset.directive";
21
- import * as i12 from "../../../../directives/template-outlet/template-outlet.directive";
20
+ import * as i11 from "../../../../directives/template-outlet/template-outlet.directive";
21
+ import * as i12 from "../../fieldset/fieldset.directive";
22
22
  import * as i13 from "../../../tooltip/tooltip.directive";
23
23
  import * as i14 from "../../../../directives/disabled/disabled.directive";
24
24
  const _c0 = ["field"];
@@ -31,10 +31,10 @@ function ArrayFormFieldLoaderComponent_ng_template_2_Template(rf, ctx) { if (rf
31
31
  } }
32
32
  const _c1 = ["addButton"];
33
33
  const _c2 = ["type", "array"];
34
- function ArrayFormFieldComponent_sme_accordion_panel_3_button_2_Template(rf, ctx) { if (rf & 1) {
34
+ function ArrayFormFieldComponent_sme_accordion_panel_3_button_3_Template(rf, ctx) { if (rf & 1) {
35
35
  const _r9 = i0.ɵɵgetCurrentView();
36
36
  i0.ɵɵelementStart(0, "button", 13);
37
- i0.ɵɵlistener("click", function ArrayFormFieldComponent_sme_accordion_panel_3_button_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r9); const item_r2 = i0.ɵɵnextContext().$implicit; const ctx_r7 = i0.ɵɵnextContext(); return ctx_r7.moveUp(item_r2); });
37
+ i0.ɵɵlistener("click", function ArrayFormFieldComponent_sme_accordion_panel_3_button_3_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r9); const item_r2 = i0.ɵɵnextContext().$implicit; const ctx_r7 = i0.ɵɵnextContext(); return ctx_r7.moveUp(item_r2); });
38
38
  i0.ɵɵelement(1, "span", 14);
39
39
  i0.ɵɵelementEnd();
40
40
  } if (rf & 2) {
@@ -42,10 +42,10 @@ function ArrayFormFieldComponent_sme_accordion_panel_3_button_2_Template(rf, ctx
42
42
  i0.ɵɵproperty("title", ctx_r4.strings.MsftSmeShell.Angular.Form.Array.promoteButtonTooltip)("smeDisabled", ctx_r4.loadingOrDisabled);
43
43
  i0.ɵɵattribute("aria-label", ctx_r4.strings.MsftSmeShell.Angular.Form.Array.promoteButtonAriaLabel);
44
44
  } }
45
- function ArrayFormFieldComponent_sme_accordion_panel_3_button_3_Template(rf, ctx) { if (rf & 1) {
45
+ function ArrayFormFieldComponent_sme_accordion_panel_3_button_4_Template(rf, ctx) { if (rf & 1) {
46
46
  const _r12 = i0.ɵɵgetCurrentView();
47
47
  i0.ɵɵelementStart(0, "button", 13);
48
- i0.ɵɵlistener("click", function ArrayFormFieldComponent_sme_accordion_panel_3_button_3_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r12); const item_r2 = i0.ɵɵnextContext().$implicit; const ctx_r10 = i0.ɵɵnextContext(); return ctx_r10.moveDown(item_r2); });
48
+ i0.ɵɵlistener("click", function ArrayFormFieldComponent_sme_accordion_panel_3_button_4_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r12); const item_r2 = i0.ɵɵnextContext().$implicit; const ctx_r10 = i0.ɵɵnextContext(); return ctx_r10.moveDown(item_r2); });
49
49
  i0.ɵɵelement(1, "span", 15);
50
50
  i0.ɵɵelementEnd();
51
51
  } if (rf & 2) {
@@ -53,10 +53,10 @@ function ArrayFormFieldComponent_sme_accordion_panel_3_button_3_Template(rf, ctx
53
53
  i0.ɵɵproperty("title", ctx_r5.strings.MsftSmeShell.Angular.Form.Array.demoteButtonTooltip)("smeDisabled", ctx_r5.loadingOrDisabled);
54
54
  i0.ɵɵattribute("aria-label", ctx_r5.strings.MsftSmeShell.Angular.Form.Array.demoteButtonAriaLabel);
55
55
  } }
56
- function ArrayFormFieldComponent_sme_accordion_panel_3_button_4_Template(rf, ctx) { if (rf & 1) {
56
+ function ArrayFormFieldComponent_sme_accordion_panel_3_button_5_Template(rf, ctx) { if (rf & 1) {
57
57
  const _r15 = i0.ɵɵgetCurrentView();
58
58
  i0.ɵɵelementStart(0, "button", 13);
59
- i0.ɵɵlistener("click", function ArrayFormFieldComponent_sme_accordion_panel_3_button_4_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r15); const item_r2 = i0.ɵɵnextContext().$implicit; const ctx_r13 = i0.ɵɵnextContext(); return ctx_r13.delete(item_r2); });
59
+ i0.ɵɵlistener("click", function ArrayFormFieldComponent_sme_accordion_panel_3_button_5_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r15); const item_r2 = i0.ɵɵnextContext().$implicit; const ctx_r13 = i0.ɵɵnextContext(); return ctx_r13.delete(item_r2); });
60
60
  i0.ɵɵelement(1, "span", 16);
61
61
  i0.ɵɵelementEnd();
62
62
  } if (rf & 2) {
@@ -68,16 +68,17 @@ const _c3 = function (a0, a1) { return { index: a0, ariaLabelId: a1 }; };
68
68
  function ArrayFormFieldComponent_sme_accordion_panel_3_Template(rf, ctx) { if (rf & 1) {
69
69
  i0.ɵɵelementStart(0, "sme-accordion-panel", 7);
70
70
  i0.ɵɵelementStart(1, "sme-panel-control");
71
- i0.ɵɵtemplate(2, ArrayFormFieldComponent_sme_accordion_panel_3_button_2_Template, 2, 3, "button", 8);
72
- i0.ɵɵtemplate(3, ArrayFormFieldComponent_sme_accordion_panel_3_button_3_Template, 2, 3, "button", 8);
73
- i0.ɵɵtemplate(4, ArrayFormFieldComponent_sme_accordion_panel_3_button_4_Template, 2, 3, "button", 8);
71
+ i0.ɵɵelementContainer(2, 8);
72
+ i0.ɵɵtemplate(3, ArrayFormFieldComponent_sme_accordion_panel_3_button_3_Template, 2, 3, "button", 9);
73
+ i0.ɵɵtemplate(4, ArrayFormFieldComponent_sme_accordion_panel_3_button_4_Template, 2, 3, "button", 9);
74
+ i0.ɵɵtemplate(5, ArrayFormFieldComponent_sme_accordion_panel_3_button_5_Template, 2, 3, "button", 9);
74
75
  i0.ɵɵelementEnd();
75
- i0.ɵɵelementStart(5, "span", 9);
76
- i0.ɵɵtext(6);
76
+ i0.ɵɵelementStart(6, "span", 10);
77
+ i0.ɵɵtext(7);
77
78
  i0.ɵɵelementEnd();
78
- i0.ɵɵelementStart(7, "fieldset", 10);
79
- i0.ɵɵelementStart(8, "div", 11);
80
- i0.ɵɵelementContainer(9, 12);
79
+ i0.ɵɵelementStart(8, "fieldset", 11);
80
+ i0.ɵɵelementStart(9, "div", 12);
81
+ i0.ɵɵelementContainer(10, 8);
81
82
  i0.ɵɵelementEnd();
82
83
  i0.ɵɵelementEnd();
83
84
  i0.ɵɵelementEnd();
@@ -87,6 +88,8 @@ function ArrayFormFieldComponent_sme_accordion_panel_3_Template(rf, ctx) { if (r
87
88
  const ctx_r0 = i0.ɵɵnextContext();
88
89
  i0.ɵɵproperty("header", ctx_r0.getItemTitle(item_r2, i_r3))("isExpandable", false);
89
90
  i0.ɵɵadvance(2);
91
+ i0.ɵɵproperty("template", ctx_r0.headerTemplate)("data", item_r2)("hostData", i0.ɵɵpureFunction2(17, _c3, i_r3, ctx_r0.getItemAriaId(i_r3, "itemHeader")));
92
+ i0.ɵɵadvance(1);
90
93
  i0.ɵɵproperty("ngIf", ctx_r0.showMove);
91
94
  i0.ɵɵadvance(1);
92
95
  i0.ɵɵproperty("ngIf", ctx_r0.showMove);
@@ -102,7 +105,7 @@ function ArrayFormFieldComponent_sme_accordion_panel_3_Template(rf, ctx) { if (r
102
105
  i0.ɵɵadvance(1);
103
106
  i0.ɵɵproperty("id", ctx_r0.getItemAriaId(i_r3, "itemContainer"));
104
107
  i0.ɵɵadvance(1);
105
- i0.ɵɵproperty("template", ctx_r0.itemTemplate)("data", item_r2)("hostData", i0.ɵɵpureFunction2(14, _c3, i_r3, ctx_r0.getItemAriaId(i_r3, "item")));
108
+ i0.ɵɵproperty("template", ctx_r0.itemTemplate)("data", item_r2)("hostData", i0.ɵɵpureFunction2(20, _c3, i_r3, ctx_r0.getItemAriaId(i_r3, "item")));
106
109
  } }
107
110
  function ArrayFormFieldComponent_button_4_Template(rf, ctx) { if (rf & 1) {
108
111
  const _r18 = i0.ɵɵgetCurrentView();
@@ -345,6 +348,8 @@ let ArrayFormFieldComponent = class ArrayFormFieldComponent extends SmeInternalF
345
348
  switch (idName) {
346
349
  case 'item':
347
350
  return `${this.idBag['item']}-${index}`;
351
+ case 'itemHeader':
352
+ return `${this.idBag['item']}-header-${index}`;
348
353
  case 'itemContainer':
349
354
  return `${this.idBag['item']}-container-${index}`;
350
355
  default: return null;
@@ -416,11 +421,11 @@ let ArrayFormFieldComponent = class ArrayFormFieldComponent extends SmeInternalF
416
421
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.addButton = _t.first);
417
422
  } }, hostVars: 1, hostBindings: function ArrayFormFieldComponent_HostBindings(rf, ctx) { if (rf & 2) {
418
423
  i0.ɵɵattribute("aria-label", ctx.ariaLabel);
419
- } }, inputs: { adjustControlButtonLocation: "adjustControlButtonLocation", newItem: "newItem", showAdd: "showAdd", showRemove: "showRemove", showMove: "showMove", canCloseAll: "canCloseAll", canCloseAny: "canCloseAny", canOpenMultiple: "canOpenMultiple", maxItems: "maxItems", addButtonText: "addButtonText", itemTitle: "itemTitle" }, outputs: { askForNewItem: "askForNewItem", askForItemHeader: "askForItemHeader", askForRemoveEvaluator: "askForRemoveEvaluator" }, features: [i0.ɵɵInheritDefinitionFeature], attrs: _c2, decls: 8, vars: 8, consts: [[3, "formField"], [1, "sme-array"], [3, "canCloseAny", "canCloseAll", "canOpenMultiple"], [3, "header", "isExpandable", 4, "ngFor", "ngForOf"], ["type", "button", "class", "sme-button-trigger sme-button-auto-width sme-icon sme-icon-add sme-margin-bottom-xs", 3, "smeDisabled", "title", "click", 4, "ngIf"], [3, "alert"], ["aria-live", "assertive", "aria-relevant", "all", 1, "sme-screen-reader"], [3, "header", "isExpandable"], ["type", "button", "class", "sme-button-trigger sme-button-auto-width sme-form-field-height sme-padding-horizontal-xs", 3, "title", "smeDisabled", "click", 4, "ngIf"], [1, "sme-screen-reader", 3, "id"], [1, "sme-arrange-stack-h", "sme-margin-bottom-lg", "sme-array-item"], [1, "sme-position-flex-auto", "sme-padding-inset-md", 3, "id"], ["smeTemplateOutlet", "", "hostDataName", "context", 3, "template", "data", "hostData"], ["type", "button", 1, "sme-button-trigger", "sme-button-auto-width", "sme-form-field-height", "sme-padding-horizontal-xs", 3, "title", "smeDisabled", "click"], [1, "sme-icon", "sme-icon-up"], [1, "sme-icon", "sme-icon-down"], [1, "sme-icon", "sme-icon-delete", "sme-color-red"], ["type", "button", 1, "sme-button-trigger", "sme-button-auto-width", "sme-icon", "sme-icon-add", "sme-margin-bottom-xs", 3, "smeDisabled", "title", "click"], ["addButton", ""]], template: function ArrayFormFieldComponent_Template(rf, ctx) { if (rf & 1) {
424
+ } }, inputs: { adjustControlButtonLocation: "adjustControlButtonLocation", newItem: "newItem", showAdd: "showAdd", showRemove: "showRemove", showMove: "showMove", canCloseAll: "canCloseAll", canCloseAny: "canCloseAny", canOpenMultiple: "canOpenMultiple", maxItems: "maxItems", addButtonText: "addButtonText", headerTemplate: "headerTemplate", itemTitle: "itemTitle" }, outputs: { askForNewItem: "askForNewItem", askForItemHeader: "askForItemHeader", askForRemoveEvaluator: "askForRemoveEvaluator" }, features: [i0.ɵɵInheritDefinitionFeature], attrs: _c2, decls: 8, vars: 8, consts: [[3, "formField"], [1, "sme-array"], [3, "canCloseAny", "canCloseAll", "canOpenMultiple"], [3, "header", "isExpandable", 4, "ngFor", "ngForOf"], ["type", "button", "class", "sme-button-trigger sme-button-auto-width sme-icon sme-icon-add sme-margin-bottom-xs", 3, "smeDisabled", "title", "click", 4, "ngIf"], [3, "alert"], ["aria-live", "assertive", "aria-relevant", "all", 1, "sme-screen-reader"], [3, "header", "isExpandable"], ["smeTemplateOutlet", "", "hostDataName", "context", 3, "template", "data", "hostData"], ["type", "button", "class", "sme-button-trigger sme-button-auto-width sme-form-field-height sme-padding-horizontal-xs", 3, "title", "smeDisabled", "click", 4, "ngIf"], [1, "sme-screen-reader", 3, "id"], [1, "sme-arrange-stack-h", "sme-margin-bottom-lg", "sme-array-item"], [1, "sme-position-flex-auto", "sme-padding-inset-md", 3, "id"], ["type", "button", 1, "sme-button-trigger", "sme-button-auto-width", "sme-form-field-height", "sme-padding-horizontal-xs", 3, "title", "smeDisabled", "click"], [1, "sme-icon", "sme-icon-up"], [1, "sme-icon", "sme-icon-down"], [1, "sme-icon", "sme-icon-delete", "sme-color-red"], ["type", "button", 1, "sme-button-trigger", "sme-button-auto-width", "sme-icon", "sme-icon-add", "sme-margin-bottom-xs", 3, "smeDisabled", "title", "click"], ["addButton", ""]], template: function ArrayFormFieldComponent_Template(rf, ctx) { if (rf & 1) {
420
425
  i0.ɵɵelementStart(0, "sme-form-field-layout", 0);
421
426
  i0.ɵɵelementStart(1, "div", 1);
422
427
  i0.ɵɵelementStart(2, "sme-accordion", 2);
423
- i0.ɵɵtemplate(3, ArrayFormFieldComponent_sme_accordion_panel_3_Template, 10, 17, "sme-accordion-panel", 3);
428
+ i0.ɵɵtemplate(3, ArrayFormFieldComponent_sme_accordion_panel_3_Template, 11, 23, "sme-accordion-panel", 3);
424
429
  i0.ɵɵelementEnd();
425
430
  i0.ɵɵtemplate(4, ArrayFormFieldComponent_button_4_Template, 3, 4, "button", 4);
426
431
  i0.ɵɵelementEnd();
@@ -441,7 +446,7 @@ let ArrayFormFieldComponent = class ArrayFormFieldComponent extends SmeInternalF
441
446
  i0.ɵɵproperty("alert", ctx.alert);
442
447
  i0.ɵɵadvance(2);
443
448
  i0.ɵɵtextInterpolate(ctx.screenReaderEvent);
444
- } }, directives: [i6.FormFieldLayoutComponent, i7.AccordionComponent, i8.NgForOf, i8.NgIf, i9.ValidationAlertComponent, i10.AccordionPanelComponent, i10.PanelControlComponent, i11.FieldsetDirective, i12.TemplateOutletDirective, i13.TooltipDirective, i14.DisabledDirective], encapsulation: 2 });
449
+ } }, directives: [i6.FormFieldLayoutComponent, i7.AccordionComponent, i8.NgForOf, i8.NgIf, i9.ValidationAlertComponent, i10.AccordionPanelComponent, i10.PanelControlComponent, i11.TemplateOutletDirective, i12.FieldsetDirective, i13.TooltipDirective, i14.DisabledDirective], encapsulation: 2 });
445
450
  ArrayFormFieldComponent = __decorate([
446
451
  SmeSchemaProperty({
447
452
  type: SchemaPrimitiveType.Array,
@@ -488,6 +493,8 @@ export { ArrayFormFieldComponent };
488
493
  type: Input
489
494
  }], addButtonText: [{
490
495
  type: Input
496
+ }], headerTemplate: [{
497
+ type: Input
491
498
  }], itemTitle: [{
492
499
  type: Input
493
500
  }], ariaLabel: [{
@@ -497,4 +504,4 @@ export { ArrayFormFieldComponent };
497
504
  type: ViewChild,
498
505
  args: ['addButton']
499
506
  }] }); })();
500
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXktZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvYXJyYXkvYXJyYXktZm9ybS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvYXJyYXkvYXJyYXktZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsUUFBUSxFQUNSLEtBQUssRUFFTCxNQUFNLEVBRU4sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSx1Q0FBdUMsRUFBNEIsTUFBTSw2Q0FBNkMsQ0FBQztBQUNoSSxPQUFPLEVBQXdCLG1CQUFtQixFQUFrQixNQUFNLCtCQUErQixDQUFDO0FBQzFHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsMEJBQTBCLEVBQWMsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBMkI1RSwyQ0FDK0Q7Ozs7SUFEeEMsMkRBQXNDLDJCQUFBLGtCQUFBOzs7Ozs7SUMxQy9ELGtDQUlvQztJQURxQyxxUUFBc0I7SUFFN0YsMkJBQTBDO0lBQzVDLGlCQUFTOzs7SUFIUCwyRkFBc0UseUNBQUE7SUFEdEUsbUdBQWtGOzs7O0lBS3BGLGtDQUlvQztJQURvQywwUUFBd0I7SUFFOUYsMkJBQTRDO0lBQzlDLGlCQUFTOzs7SUFIUCwwRkFBcUUseUNBQUE7SUFEckUsa0dBQWlGOzs7O0lBS25GLGtDQUlvQztJQURvQyx3UUFBc0I7SUFFNUYsMkJBQTREO0lBQzlELGlCQUFTOzs7SUFIUCwwRkFBcUUseUNBQUE7SUFEckUsa0dBQWlGOzs7O0lBbEJ2Riw4Q0FBdUg7SUFDckgseUNBQW1CO0lBQ2pCLG9HQU1TO0lBQ1Qsb0dBTVM7SUFDVCxvR0FNUztJQUNYLGlCQUFvQjtJQUVwQiwrQkFBZ0U7SUFBQSxZQUFhO0lBQUEsaUJBQU87SUFDcEYsb0NBRStEO0lBRTdELCtCQUFrRztJQUNoRyw0QkFDZ0Y7SUFDbEYsaUJBQU07SUFDUixpQkFBVztJQUViLGlCQUFzQjs7Ozs7SUFwQ3lDLDJEQUFnQyx1QkFBQTtJQUVsRixlQUFjO0lBQWQsc0NBQWM7SUFPZCxlQUFjO0lBQWQsc0NBQWM7SUFPZCxlQUE0QjtJQUE1QiwwREFBNEI7SUFTUCxlQUErQjtJQUEvQix1REFBK0I7SUFBQyxlQUFhO0lBQWIsc0NBQWE7SUFHM0UsZUFBNEQ7SUFBNUQsOEVBQTREO0lBRnBELHFFQUFpRDtJQUlBLGVBQXdDO0lBQXhDLGdFQUF3QztJQUMvRCxlQUF5QjtJQUF6Qiw4Q0FBeUIsaUJBQUEsbUZBQUE7Ozs7SUFRakUsc0NBSXFGO0lBQWhCLDBMQUFlO0lBQUMsWUFBaUI7SUFBQSxpQkFBUzs7O0lBSDdHLDBIQUFrRiwwRUFBQTtJQUVsRiwrRkFBOEU7SUFDSyxlQUFpQjtJQUFqQiwwQ0FBaUI7O0FEWjFHLGlDQUFpQztBQW1CakMsZ0NBQWdDO0FBQ2hDLE1BQU0sT0FBTyw2QkFBOEIsU0FBUSx1Q0FBdUM7SUFJL0UsYUFBYSxDQUFDLE1BQU07UUFDdkIsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLGlDQUFpQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekYsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDdkIsQ0FBQztJQUVNLGlDQUFpQztRQUNwQyxNQUFNLGtCQUFrQixHQUF5QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQztRQUMxRSxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDeEYsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQztZQUNwQixJQUFJLGtCQUFrQixDQUFDLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFO2dCQUN0RSxXQUFXLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQzthQUN4RDtZQUNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLElBQUksQ0FBQyxHQUFHLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzlFLElBQUksa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFO29CQUN4RixNQUFNLEdBQUcsSUFBSSxDQUFDO29CQUNkLE1BQU07aUJBQ1Q7YUFDSjtTQUNKO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQzs7bUtBekJRLDZCQUE2QjtxRkFBN0IsNkJBQTZCOzs7Ozs7UUFqQnRDLDRDQVFLO1FBUitCLDZKQUFrQiwySEFDeUQseUJBQXFCLElBRDlFLDZIQUdoQyx3REFBZ0QsUUFBUSxJQUh4QixtTEFJYSxxRUFBNkQsUUFBUSxJQUpsRjtRQVNsRCwyRkFHYztRQUNsQixpQkFBaUI7O1FBYm1CLGtDQUFrQixpQ0FBQSxpREFBQSx5Q0FBQSw2REFBQSx3RUFBQSxxSUFBQSw0RUFBQSxrSUFBQTswR0EyRDdDLHVCQUF1QjswRkExQ3ZCLDZCQUE2Qjt1RkFBN0IsNkJBQTZCO2NBbkJ6QyxTQUFTO2VBQUM7Z0JBQ1AsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7S0FlVDthQUNKO2dCQUlXLHVCQUF1QjtrQkFEOUIsU0FBUzttQkFBQyxPQUFPOztBQTJCdEI7O0dBRUc7SUFZVSx1QkFBdUIsU0FBdkIsdUJBQXdCLFNBQVEsNkJBQW9DO0lBa0g3RTs7T0FFRztJQUNILFlBQ0ksUUFBa0I7UUFFbEIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBN0ZwQjs7V0FFRztRQUVJLGtCQUFhLEdBQXlDLElBQUksWUFBWSxFQUEwQixDQUFDO1FBRXhHLDhFQUE4RTtRQUV2RSxxQkFBZ0IsR0FBdUMsSUFBSSxZQUFZLEVBQXdCLENBQUM7UUFFdkcsMkdBQTJHO1FBRXBHLDBCQUFxQixHQUEyQyxJQUFJLFlBQVksRUFBNEIsQ0FBQztRQUVwSDs7V0FFRztRQUVJLGdDQUEyQixHQUFHLEtBQUssQ0FBQztRQTRFdkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUM1QixJQUFJLENBQUMsYUFBYSxHQUFhLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBUSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztRQUNqRyxJQUFJLENBQUMsVUFBVSxHQUFhLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBUSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDeEcsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBaElEOztPQUVHO0lBQ0gsSUFBYyxhQUFhO1FBQ3ZCLE9BQU8seUJBQXlCLENBQUM7SUFDckMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxZQUFZO1FBQ25CLElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsRUFBRTtZQUNqRSxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQztTQUNqRDtRQUNELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUNoQyxDQUFDO0lBdUVELElBQ1csU0FBUyxDQUFDLEtBQWE7UUFDOUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLEtBQUssTUFBTSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxJQUFXLFNBQVM7UUFDaEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQ1csU0FBUztRQUNoQixPQUFPLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUE2QkQ7O09BRUc7SUFDSSxRQUFRO1FBQ1gsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3ZCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNuQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQWtCLEVBQUUsRUFBRTtnQkFDakUsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFO29CQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztpQkFDeEM7Z0JBRUQsSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFO29CQUNkLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO2lCQUN0QztnQkFFRCxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUU7b0JBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO2lCQUN4QztnQkFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQ2xELENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDWDtJQUNMLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLHVCQUF1QixDQUFDLEtBQWE7UUFDekMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssS0FBSyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDbEcsQ0FBQztJQUVEOztPQUVHO0lBQ0ksR0FBRztRQUNOLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMvQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUUxQixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLENBQUM7WUFDMUQsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUV0RCxNQUFNLFVBQVUsR0FBZ0IsYUFBYSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUVyRSxJQUFJLFVBQVUsRUFBRTtnQkFDWixVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDdEI7WUFFRCxhQUFhLENBQUMsY0FBYyxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUMxRSxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxJQUFTO1FBQ25CLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXZDLG9EQUFvRDtRQUNwRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDbEUsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUUxRCxJQUFJLGFBQWEsRUFBRTtZQUNmLGFBQWEsQ0FBQyxjQUFjLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1NBQ3pFO1FBRUQsaUZBQWlGO1FBQ2pGLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRXJDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNqRyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsSUFBUztRQUNuQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7WUFDWCxNQUFNLElBQUkscUJBQVEsSUFBSSxDQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMscUJBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUUsQ0FBQztZQUNqRCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDN0IsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7U0FDakc7YUFBTTtZQUNILElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1NBQzFHO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ksUUFBUSxDQUFDLElBQVM7UUFDckIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQy9CLE1BQU0sSUFBSSxxQkFBUSxJQUFJLENBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxxQkFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBRSxDQUFDO1lBQ2pELElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUM3QixJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztTQUNoRzthQUFNO1lBQ0gsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7U0FDekc7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxrQkFBa0I7UUFDckIsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFTSxhQUFhLENBQUMsS0FBYSxFQUFFLE1BQWM7UUFDOUMsUUFBUSxNQUFNLEVBQUU7WUFDWixLQUFLLE1BQU07Z0JBQ1AsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUM7WUFDNUMsS0FBSyxlQUFlO2dCQUNoQixPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsY0FBYyxLQUFLLEVBQUUsQ0FBQztZQUN0RCxPQUFPLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQztTQUN4QjtJQUNMLENBQUM7SUFFTSxZQUFZLENBQUMsSUFBUyxFQUFFLEtBQWE7UUFDeEMsTUFBTSxLQUFLLEdBQXlCLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQzdELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbEMsT0FBTyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkcsQ0FBQztJQUVNLGFBQWEsQ0FBQyxJQUFTLEVBQUUsS0FBYTtRQUN6QyxNQUFNLEtBQUssR0FBNkIsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDakUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV2QyxPQUFPLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3RGLENBQUM7SUFFRDs7O09BR0c7SUFDTyxRQUFRLENBQUMsQ0FBYztRQUU3QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixJQUFJLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3ZDLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7YUFDN0I7WUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7Z0JBQ3BCLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7YUFDN0I7U0FDSjtRQUVELElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRTtZQUN6RCxPQUFPO2dCQUNILGVBQWUsRUFBRTtvQkFDYixNQUFNLEVBQUUsSUFBSTtpQkFDZjthQUNKLENBQUM7U0FDTDtRQUVELE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQ7OztPQUdHO0lBQ08sV0FBVztRQUNqQix1Q0FDUSxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQ3ZCLFdBQVcsRUFBRSxFQUFFLEVBQ2YsSUFBSSxFQUFFLEVBQUUsSUFDVjtJQUNOLENBQUM7SUFFRDs7T0FFRztJQUNLLFVBQVU7UUFDZCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDZCxPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3pDO2FBQU07WUFDSCxNQUFNLEtBQUssR0FBMkIsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDckQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0IsT0FBTyxLQUFLLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztTQUMzQjtJQUNMLENBQUM7Q0FDSixDQUFBO2lIQXRVWSx1QkFBdUI7K0VBQXZCLHVCQUF1QjtvQ0F3QmxCLDBCQUEwQjs7Ozs7Ozs7Ozs7O1FDekg1QyxnREFBMEM7UUFFeEMsOEJBQXVCO1FBQ3JCLHdDQUEyRztRQUN6RywwR0FvQ3NCO1FBQ3hCLGlCQUFnQjtRQUVoQiw4RUFJK0c7UUFDakgsaUJBQU07UUFFTiwwQ0FBNkQ7UUFDN0QsOEJBQXlFO1FBQUEsWUFBcUI7UUFBQSxpQkFBTTtRQUN0RyxpQkFBd0I7O1FBcERELCtCQUFrQjtRQUd0QixlQUEyQjtRQUEzQiw2Q0FBMkIsZ0NBQUEsd0NBQUE7UUFDRixlQUFVO1FBQVYsbUNBQVU7UUF1QzlCLGVBQWE7UUFBYixrQ0FBYTtRQU9iLGVBQWU7UUFBZixpQ0FBZTtRQUNvQyxlQUFxQjtRQUFyQiwyQ0FBcUI7O0FEOENuRix1QkFBdUI7SUFYbkMsaUJBQWlCLENBQUM7UUFDZixJQUFJLEVBQUUsbUJBQW1CLENBQUMsS0FBSztRQUMvQixNQUFNLEVBQUUsYUFBYTtRQUNyQixlQUFlLEVBQUUsSUFBSTtRQUNyQixXQUFXLEVBQUUsNkNBQTZDO1FBQzFELGVBQWUsRUFBRSw2QkFBNkI7S0FDakQsQ0FBQztxQ0EySGdCLFFBQVE7R0F0SGIsdUJBQXVCLENBc1VuQztTQXRVWSx1QkFBdUI7dUZBQXZCLHVCQUF1QjtjQUpuQyxTQUFTO2VBQUM7Z0JBQ1AsUUFBUSxFQUFFLDhCQUE4QjtnQkFDeEMsV0FBVyxFQUFFLG1DQUFtQzthQUNuRDsyREEwQlUsZ0JBQWdCO2tCQUR0QixZQUFZO21CQUFDLDBCQUEwQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtZQU9uRCxhQUFhO2tCQURuQixNQUFNO1lBS0EsZ0JBQWdCO2tCQUR0QixNQUFNO1lBS0EscUJBQXFCO2tCQUQzQixNQUFNO1lBT0EsMkJBQTJCO2tCQURqQyxLQUFLO1lBT0MsT0FBTztrQkFEYixLQUFLO1lBT0MsT0FBTztrQkFEYixLQUFLO1lBT0MsVUFBVTtrQkFEaEIsS0FBSztZQU9DLFFBQVE7a0JBRGQsS0FBSztZQUlDLFdBQVc7a0JBRGpCLEtBQUs7WUFJQyxXQUFXO2tCQURqQixLQUFLO1lBSUMsZUFBZTtrQkFEckIsS0FBSztZQU9DLFFBQVE7a0JBRGQsS0FBSztZQUlDLGFBQWE7a0JBRG5CLEtBQUs7WUFJSyxTQUFTO2tCQURuQixLQUFLO1lBYUssU0FBUztrQkFEbkIsV0FBVzttQkFBQyxpQkFBaUI7WUFXdEIsU0FBUztrQkFEaEIsU0FBUzttQkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENvbXBvbmVudCxcclxuICAgIENvbnRlbnRDaGlsZCxcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBIb3N0QmluZGluZyxcclxuICAgIEluamVjdG9yLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkluaXQsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBUZW1wbGF0ZVJlZixcclxuICAgIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgU3RyaW5ncyB9IGZyb20gJy4uLy4uLy4uLy4uL2dlbmVyYXRlZC9zdHJpbmdzJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvbkFsZXJ0cyB9IGZyb20gJy4uLy4uLy4uL2Zvcm0vdmFsaWRhdGlvbi1hbGVydC92YWxpZGF0aW9uLWFsZXJ0JztcclxuaW1wb3J0IHsgU21lU2NoZW1hUHJvcGVydHkgfSBmcm9tICcuLi8uLi8uLi9zY2hlbWEvc2NoZW1hLWRlY29yYXRvcic7XHJcbmltcG9ydCB7IEFycmF5UHJvcGVydHlTY2hlbWFGaWVsZExvYWRlckNvbXBvbmVudCwgU2NoZW1hRmllbGRIb3N0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vc2NoZW1hL3NjaGVtYS1maWVsZC1ob3N0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNjaGVtYU9iamVjdFByb3BlcnR5LCBTY2hlbWFQcmltaXRpdmVUeXBlLCBTY2hlbWFQcm9wZXJ0eSB9IGZyb20gJy4uLy4uLy4uL3NjaGVtYS9zY2hlbWEtbW9kZWxzJztcclxuaW1wb3J0IHsgU2NoZW1hVXRpbGl0aWVzIH0gZnJvbSAnLi4vLi4vLi4vc2NoZW1hL3NjaGVtYS11dGlsaXRpZXMnO1xyXG5pbXBvcnQgeyBTbWVJbnRlcm5hbEZvcm1GaWVsZENvbXBvbmVudCB9IGZyb20gJy4uL2Zvcm0tZmllbGQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRm9ybUZpZWxkSXNvbGF0b3JDb21wb25lbnQsIEZvcm1TdGF0dXMgfSBmcm9tICcuLi9pc29sYXRvci9pc29sYXRvci5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBc2tGb3JOZXdJdGVtRXZlbnRBcmdzIHtcclxuICAgIGl0ZW06IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBc2tGb3JJdGVtSGVhZGVyQXJncyB7XHJcbiAgICBoZWFkZXJFdmFsRnVuYzogTXNmdFNtZS5GdW5jMjxhbnksIG51bWJlciwgc3RyaW5nPjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBc2tGb3JSZW1vdmVFdmFsRnVuY0FyZ3Mge1xyXG4gICAgcmVtb3ZlRXZhbEZ1bmM6IE1zZnRTbWUuRnVuYzI8YW55LCBudW1iZXIsIGJvb2xlYW4+O1xyXG59XHJcblxyXG4vLyB0c2xpbnQ6ZGlzYWJsZTptYXgtbGluZS1sZW5ndGhcclxuQENvbXBvbmVudCh7XHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgPHNtZS1mb3JtLWZpZWxkICNmaWVsZCB0eXBlPVwiYXJyYXlcIiBbKG5nTW9kZWwpXT1cImRhdGFcIiBbbmFtZV09XCJwcm9wZXJ0eVNjaGVtYS5uYW1lXCIgW2xhYmVsXT1cImxvY2FsaXplKHByb3BlcnR5U2NoZW1hLmxhYmVsKVwiXHJcbiAgICAgICAgW3JlcXVpcmVkXT1cInByb3BlcnR5U2NoZW1hLnJlcXVpcmVkXCIgW2Rlc2NyaXB0aW9uXT1cImxvY2FsaXplKHByb3BlcnR5U2NoZW1hLmRlc2NyaXB0aW9uKVwiIChhc2tGb3JOZXdJdGVtKT1cImFza0Zvck5ld0l0ZW0oJGV2ZW50KVwiXHJcbiAgICAgICAgW2FkanVzdENvbnRyb2xCdXR0b25Mb2NhdGlvbl09XCJzaG91bGRBZGp1c3RDb250cm9sQnV0dG9uTG9jYXRpb24oKVwiXHJcbiAgICAgICAgKGN1c3RvbVZhbGlkYXRlKT1cInJlc29sdmVGdW5jdGlvbihwcm9wZXJ0eVNjaGVtYS5jdXN0b21WYWxpZGF0aW9uKSgkZXZlbnQpXCJcclxuICAgICAgICAoY3VzdG9tQXN5bmNWYWxpZGF0ZSk9XCJwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24gJiYgcmVzb2x2ZUZ1bmN0aW9uKHByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbi5oYW5kbGVyKSgkZXZlbnQpXCJcclxuICAgICAgICBbcGVuZGluZ01lc3NhZ2VdPVwicHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uICYmIGxvY2FsaXplKHByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbi5wZW5kaW5nTWVzc2FnZSlcIlxyXG4gICAgICAgIFtjdXN0b21Bc3luY1ZhbGlkYXRlRGlzYWJsZWRdPVwic2hvdWxkQ3VzdG9tQXN5bmNWYWxpZGF0aW9uQmVEaXNhYmxlZCgpXCJcclxuICAgICAgICBbY3VzdG9tQXN5bmNWYWxpZGF0ZURlYm91bmNlVGltZV09XCJwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24gJiYgK3Byb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbi5oYW5kbGVyXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1tb2RlbD5cclxuICAgICAgICAgICAgPHNtZS1zY2hlbWEtZmllbGQtaG9zdCBbcHJvcGVydHlTY2hlbWFdPVwicHJvcGVydHlTY2hlbWEuaXRlbVwiXHJcbiAgICAgICAgICAgICAgICBbY29udGV4dF09XCJjb250ZXh0XCIgW2RhdGFdPVwibW9kZWxcIj48L3NtZS1zY2hlbWEtZmllbGQtaG9zdD5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9zbWUtZm9ybS1maWVsZD5cclxuICAgIGBcclxufSlcclxuLy8gdHNsaW50OmVuYWJsZTptYXgtbGluZS1sZW5ndGhcclxuZXhwb3J0IGNsYXNzIEFycmF5Rm9ybUZpZWxkTG9hZGVyQ29tcG9uZW50IGV4dGVuZHMgQXJyYXlQcm9wZXJ0eVNjaGVtYUZpZWxkTG9hZGVyQ29tcG9uZW50IHtcclxuICAgIEBWaWV3Q2hpbGQoJ2ZpZWxkJylcclxuICAgIHByaXZhdGUgYXJyYXlGb3JtRmllbGRDb21wb25lbnQ6IEFycmF5Rm9ybUZpZWxkQ29tcG9uZW50O1xyXG5cclxuICAgIHB1YmxpYyBhc2tGb3JOZXdJdGVtKCRldmVudCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSBTY2hlbWFVdGlsaXRpZXMuZ2VuZXJhdGVEYXRhQmFzZWRPblNjaGVtYVByb3BlcnR5KHRoaXMucHJvcGVydHlTY2hlbWEuaXRlbSk7XHJcbiAgICAgICAgJGV2ZW50Lml0ZW0gPSBpdGVtO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG91bGRBZGp1c3RDb250cm9sQnV0dG9uTG9jYXRpb24oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgaXRlbVByb3BlcnR5U2NoZW1hID0gPFNjaGVtYU9iamVjdFByb3BlcnR5PnRoaXMucHJvcGVydHlTY2hlbWEuaXRlbTtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gISEodGhpcy5wcm9wZXJ0eVNjaGVtYS5pdGVtLmxhYmVsIHx8IHRoaXMucHJvcGVydHlTY2hlbWEuaXRlbS5kZXNjcmlwdGlvbik7XHJcbiAgICAgICAgaWYgKCFyZXN1bHQpIHtcclxuICAgICAgICAgICAgbGV0IGNvbHVtbkNvdW50ID0gMTtcclxuICAgICAgICAgICAgaWYgKGl0ZW1Qcm9wZXJ0eVNjaGVtYS5vcHRpb25zICYmIGl0ZW1Qcm9wZXJ0eVNjaGVtYS5vcHRpb25zLmNvbHVtbkNvdW50KSB7XHJcbiAgICAgICAgICAgICAgICBjb2x1bW5Db3VudCA9IGl0ZW1Qcm9wZXJ0eVNjaGVtYS5vcHRpb25zLmNvbHVtbkNvdW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1uQ291bnQgJiYgaSA8IGl0ZW1Qcm9wZXJ0eVNjaGVtYS5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbVByb3BlcnR5U2NoZW1hLnByb3BlcnRpZXNbaV0ubGFiZWwgfHwgaXRlbVByb3BlcnR5U2NoZW1hLnByb3BlcnRpZXNbaV0uZGVzY3JpcHRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBY2Nlc3NpYmxlIEltcGxlbWVudGF0aW9uIG9mIGEgZm9ybSBmaWVsZCBmb3IgLnNtZS1hcnJheVxyXG4gKi9cclxuQFNtZVNjaGVtYVByb3BlcnR5KHtcclxuICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuQXJyYXksXHJcbiAgICBmb3JtYXQ6ICdzaW1wbGUtbGlzdCcsXHJcbiAgICBpc0RlZmF1bHRGb3JtYXQ6IHRydWUsXHJcbiAgICBkZXNjcmlwdGlvbjogYEEgZm9ybSBmaWVsZCBjb250cm9sIGJpbmRpbmcgdG8gYXJyYXkgZGF0YS5gLFxyXG4gICAgbG9hZGVyQ29tcG9uZW50OiBBcnJheUZvcm1GaWVsZExvYWRlckNvbXBvbmVudFxyXG59KVxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnc21lLWZvcm0tZmllbGRbdHlwZT1cImFycmF5XCJdJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9hcnJheS1mb3JtLWZpZWxkLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXJyYXlGb3JtRmllbGRDb21wb25lbnQgZXh0ZW5kcyBTbWVJbnRlcm5hbEZvcm1GaWVsZENvbXBvbmVudDxhbnlbXT4gaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgcHJpdmF0ZSBfaXRlbVRpdGxlOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc291cmNlIG5hbWUgdG8gdXNlIGZvciBsb2dnaW5nXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXQgbG9nU291cmNlTmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gJ0FycmF5Rm9ybUZpZWxkQ29tcG9uZW50JztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGl0ZW0gdGVtcGxhdGUgZnJvbSBlaXRoZXIgdGhlIHN1YkZvcm1UZW1wbGF0ZSBvciBzdWJGaWVsZElzb2xhdG9yIGlmIHByb3ZpZGVkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGl0ZW1UZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcclxuICAgICAgICBpZiAodGhpcy5zdWJGaWVsZElzb2xhdG9yICYmIHRoaXMuc3ViRmllbGRJc29sYXRvci5zdWJGaWVsZFRlbXBsYXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN1YkZpZWxkSXNvbGF0b3Iuc3ViRmllbGRUZW1wbGF0ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3ViRm9ybVRlbXBsYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgcHJvdmlkZWQsIHRoZSBzdWIgZmllbGQgaXNvbGF0b3IgcHJldmVudHMgY2hpbGQgbmdtb2RlbHMgZnJvbSByZWdpc3RlcmluZyB3aXRoIHRoZSBmb3JtLlxyXG4gICAgICogSW5zdGVhZCwgd2Ugd2lsbCB1c2UgaXQgdG8gbWFuYWdlIG91ciBvd24gdmFsaWRpdHlcclxuICAgICAqL1xyXG4gICAgQENvbnRlbnRDaGlsZChGb3JtRmllbGRJc29sYXRvckNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcclxuICAgIHB1YmxpYyBzdWJGaWVsZElzb2xhdG9yOiBGb3JtRmllbGRJc29sYXRvckNvbXBvbmVudDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZW4gbm8gXCJuZXdJdGVtXCIgaXMgcHJvdmlkZWQuIFRoaXMgb3V0cHV0IHdpbGwgYmUgY2FsbGVkIGFueXRpbWUgYSBuZXcgaXRlbSBpcyByZXF1aXJlZC5cclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgYXNrRm9yTmV3SXRlbTogRXZlbnRFbWl0dGVyPEFza0Zvck5ld0l0ZW1FdmVudEFyZ3M+ID0gbmV3IEV2ZW50RW1pdHRlcjxBc2tGb3JOZXdJdGVtRXZlbnRBcmdzPigpO1xyXG5cclxuICAgIC8vIEV2ZW50IHVzZWQgdG8gcHJvdmlkZSBhIGN1c3RvbSBmdW5jdGlvbiB0aGF0IGJ1aWxkcyBpbmRpdmlkdWFsIGl0ZW0gaGVhZGVyc1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgYXNrRm9ySXRlbUhlYWRlcjogRXZlbnRFbWl0dGVyPEFza0Zvckl0ZW1IZWFkZXJBcmdzPiA9IG5ldyBFdmVudEVtaXR0ZXI8QXNrRm9ySXRlbUhlYWRlckFyZ3M+KCk7XHJcblxyXG4gICAgLy8gRXZlbnQgdXNlZCB0byBwcm92aWRlIGEgY3VzdG9tIGZ1bmN0aW9uIHRoYXQgZXZhbHVhdGVzIHdoZXRoZXIgdG8gc2hvdyBvciBoaWRlIGluZGl2aWR1YWwgcmVtb3ZlIGJ1dHRvbnNcclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIGFza0ZvclJlbW92ZUV2YWx1YXRvcjogRXZlbnRFbWl0dGVyPEFza0ZvclJlbW92ZUV2YWxGdW5jQXJncz4gPSBuZXcgRXZlbnRFbWl0dGVyPEFza0ZvclJlbW92ZUV2YWxGdW5jQXJncz4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB0aGF0IHRoZSBhcnJheSBpdGVtIGJ1dHRvbiBsb2NhdGlvbnMgc2hvdWxkIGJlIGFkanVzdGVkIHRvIGFjY291bnQgZm9yIG5vIGl0ZW0gbGFiZWwuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgYWRqdXN0Q29udHJvbEJ1dHRvbkxvY2F0aW9uID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnB1dCBmb3IgZ2VuZXJhdGluZyBhIG5ldyBpdGVtIGZyb20gYW4gZXhpc3Rpbmcgb2JqZWN0XHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbmV3SXRlbTogYW55O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBhZGQgYW5kIHJlbW92ZSBhY3Rpb25zIHNob3VsZCBiZSBzaG93blxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNob3dBZGQ6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHJlbW92ZSBhY3Rpb25zIHNob3VsZCBiZSBzaG93biBmb3IgYWxsIGl0ZW1zXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2hvd1JlbW92ZTogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgbW92ZSBhY3Rpb25zIHNob3VsZCBiZSBzaG93blxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNob3dNb3ZlOiBib29sZWFuO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgY2FuQ2xvc2VBbGw6IGJvb2xlYW47XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBjYW5DbG9zZUFueTogYm9vbGVhbjtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGNhbk9wZW5NdWx0aXBsZTogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBhcnJheVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIG1heEl0ZW1zOiBudW1iZXI7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBhZGRCdXR0b25UZXh0OiBzdHJpbmc7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgaXRlbVRpdGxlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9pdGVtVGl0bGUgPSBgJHt2YWx1ZX0gezB9YDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGl0ZW1UaXRsZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtVGl0bGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYXJpYSBsYWJlbCBmb3IgdGhpcyBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGFiZWwnKVxyXG4gICAgcHVibGljIGdldCBhcmlhTGFiZWwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRNZXJnZWREZXNjcmlwdGlvbkxhYmVsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGVuIHVwZGF0ZWQsIHRoZSBzY3JlZW4gcmVhZGVyIHdpbGwgYW5ub3VuY2UgdGhpcyBzdHJpbmdcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNjcmVlblJlYWRlckV2ZW50OiBzdHJpbmc7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnYWRkQnV0dG9uJylcclxuICAgIHByaXZhdGUgYWRkQnV0dG9uOiBFbGVtZW50UmVmO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIEpzb25Gb3JtRmllbGRDb21wb25lbnRcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihpbmplY3Rvcik7XHJcbiAgICAgICAgdGhpcy5zaG93QWRkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNob3dSZW1vdmUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubWF4SXRlbXMgPSAtMTtcclxuICAgICAgICB0aGlzLnNob3dNb3ZlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNhbkNsb3NlQWxsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNhbkNsb3NlQW55ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jYW5PcGVuTXVsdGlwbGUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuYWRkQnV0dG9uVGV4dCA9ICg8U3RyaW5ncz5Nc2Z0U21lLnNlbGYoKS5SZXNvdXJjZXMuc3RyaW5ncykuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLmFkZDtcclxuICAgICAgICB0aGlzLl9pdGVtVGl0bGUgPSAoPFN0cmluZ3M+TXNmdFNtZS5zZWxmKCkuUmVzb3VyY2VzLnN0cmluZ3MpLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uQXJyYXkuaXRlbVRpdGxlO1xyXG4gICAgICAgIHRoaXMuc2NyZWVuUmVhZGVyRXZlbnQgPSAnJztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXRob2QgY2FsbGVkIGFmdGVyIHRoZSBjb21wb25lbnQgaXMgaW5pdGlhbGl6ZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2dyb3VwJyk7XHJcbiAgICAgICAgaWYgKHRoaXMuc3ViRmllbGRJc29sYXRvcikge1xyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICAgIHRoaXMuc3ViRmllbGRJc29sYXRvci5zdGF0dXNDaGFuZ2VkLnN1YnNjcmliZSgoc3RhdHVzOiBGb3JtU3RhdHVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5wZW5kaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmdNb2RlbC5jb250cm9sLm1hcmtBc1BlbmRpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuZGlydHkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ01vZGVsLmNvbnRyb2wubWFya0FzRGlydHkoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMudG91Y2hlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5nTW9kZWwuY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5nTW9kZWwuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyBhIGhpZGRlbiBhcmlhLWxpdmUgcmVnaW9uIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgY2hhbmdlcyB0byB0aGUgcGFnZTsgaWYgdGhlIHNhbWUgZXZlbnQgaXMgYmVpbmcgcmVwZWF0ZWQsIHRoZSBldmVudCBzdHJpbmdcclxuICAgICAqIGlzIHNldCBpbiBsb3dlcmNhc2UsIHNvIHRoZSBzY3JlZW4gcmVhZGVyIHRoaW5rcyBpdCdzIGEgbmV3IHN0cmluZy4gQ2xlYXJpbmcgYW5kIHJlLXNldHRpbmcgdGhlIGZpZWxkIGRvZXMgbm90IHByb21wdCB0aGUgc2NyZWVuXHJcbiAgICAgKiByZWFkZXIgdG8gcmVhZCB0aGUgYXJpYS1saXZlIHJlZ2lvbi5cclxuICAgICAqIEBwYXJhbSBldmVudCB0aGUgc3RyaW5nIHRvIGJlIGFubm91bmNlZFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHVwZGF0ZVNjcmVlblJlYWRlckV2ZW50KGV2ZW50OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNjcmVlblJlYWRlckV2ZW50ID0gZXZlbnQgPT09IHRoaXMuc2NyZWVuUmVhZGVyRXZlbnQgPyBldmVudC50b0xvY2FsZUxvd2VyQ2FzZSgpIDogZXZlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGFuIGl0ZW0gdG8gdGhlIGFycmF5XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhZGQoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0TmV3SXRlbSgpO1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgdGhpcy52YWx1ZS5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIHRoaXMudHJpZ2dlclZhbHVlQ2hhbmdlKCk7XHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtSWQgPSB0aGlzLmdldEl0ZW1BcmlhSWQoaW5kZXgsICdpdGVtQ29udGFpbmVyJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1Db250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpdGVtSWQpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZmlyc3RJbnB1dCA9IDxIVE1MRWxlbWVudD5pdGVtQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZmlyc3RJbnB1dCkge1xyXG4gICAgICAgICAgICAgICAgZmlyc3RJbnB1dC5mb2N1cygpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpdGVtQ29udGFpbmVyLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ2NlbnRlcicgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWxldGVzIGFuIGl0ZW0gZnJvbSB0aGUgYXJyYXlcclxuICAgICAqL1xyXG4gICAgcHVibGljIGRlbGV0ZShpdGVtOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMudmFsdWUuaW5kZXhPZihpdGVtKTtcclxuXHJcbiAgICAgICAgLy8gcmV0dXJuIHRoZSB2aWV3IHRvIHRoZSBwcmV2aW91cyBpdGVtIGluIHRoZSBsaXN0LlxyXG4gICAgICAgIGNvbnN0IHByZXZJdGVtSWQgPSB0aGlzLmdldEl0ZW1BcmlhSWQoaW5kZXggLSAxLCAnaXRlbUNvbnRhaW5lcicpO1xyXG4gICAgICAgIGNvbnN0IHByZXZDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcmV2SXRlbUlkKTtcclxuXHJcbiAgICAgICAgaWYgKHByZXZDb250YWluZXIpIHtcclxuICAgICAgICAgICAgcHJldkNvbnRhaW5lci5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdjZW50ZXInIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gZm9jdXMgb24gdGhlIGFkZCBidXR0b24sIG90aGVyd2lzZSBmb2N1cyBpcyByZXNldCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYWdlXHJcbiAgICAgICAgdGhpcy5hZGRCdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG5cclxuICAgICAgICB0aGlzLnZhbHVlLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgdGhpcy50cmlnZ2VyVmFsdWVDaGFuZ2UoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNjcmVlblJlYWRlckV2ZW50KHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkFycmF5LnJlbW92ZUJ1dHRvbkV2ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERlY3JlYXNlcyB0aGUgaW5kZXggb2YgYW4gaXRlbSBieSAxXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBtb3ZlVXAoaXRlbTogYW55KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnZhbHVlLmluZGV4T2YoaXRlbSk7XHJcbiAgICAgICAgaWYgKGluZGV4ID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wID0geyAuLi5pdGVtIH07XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVbaW5kZXhdID0geyAuLi50aGlzLnZhbHVlW2luZGV4IC0gMV0gfTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZVtpbmRleCAtIDFdID0gdGVtcDtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVTY3JlZW5SZWFkZXJFdmVudCh0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5BcnJheS5wcm9tb3RlQnV0dG9uRXZlbnQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2NyZWVuUmVhZGVyRXZlbnQodGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uQXJyYXkucHJvbW90ZUJ1dHRvblByZXZlbnRlZEV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmNyZWFzZXMgdGhlIGluZGV4IG9mIGFuIGl0ZW0gYnkgMVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbW92ZURvd24oaXRlbTogYW55KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnZhbHVlLmluZGV4T2YoaXRlbSk7XHJcbiAgICAgICAgaWYgKGluZGV4IDwgdGhpcy52YWx1ZS5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSB7IC4uLml0ZW0gfTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZVtpbmRleF0gPSB7IC4uLnRoaXMudmFsdWVbaW5kZXggKyAxXSB9O1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlW2luZGV4ICsgMV0gPSB0ZW1wO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNjcmVlblJlYWRlckV2ZW50KHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkFycmF5LmRlbW90ZUJ1dHRvbkV2ZW50KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNjcmVlblJlYWRlckV2ZW50KHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkFycmF5LmRlbW90ZUJ1dHRvblByZXZlbnRlZEV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWV0aG9kIGNhbGxlZCB3aGVuIGEgPHNlbGVjdD4gZWxlbWVudCdzIHZhbHVlIGNoYW5nZXMuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB0cmlnZ2VyVmFsdWVDaGFuZ2UoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFsuLi50aGlzLnZhbHVlXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0SXRlbUFyaWFJZChpbmRleDogbnVtYmVyLCBpZE5hbWU6IHN0cmluZyk6IGFueSB7XHJcbiAgICAgICAgc3dpdGNoIChpZE5hbWUpIHtcclxuICAgICAgICAgICAgY2FzZSAnaXRlbSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5pZEJhZ1snaXRlbSddfS0ke2luZGV4fWA7XHJcbiAgICAgICAgICAgIGNhc2UgJ2l0ZW1Db250YWluZXInOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMuaWRCYWdbJ2l0ZW0nXX0tY29udGFpbmVyLSR7aW5kZXh9YDtcclxuICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRJdGVtVGl0bGUoaXRlbTogYW55LCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBldmVudDogQXNrRm9ySXRlbUhlYWRlckFyZ3MgPSB7IGhlYWRlckV2YWxGdW5jOiBudWxsIH07XHJcbiAgICAgICAgdGhpcy5hc2tGb3JJdGVtSGVhZGVyLmVtaXQoZXZlbnQpO1xyXG5cclxuICAgICAgICByZXR1cm4gZXZlbnQuaGVhZGVyRXZhbEZ1bmMgPyBldmVudC5oZWFkZXJFdmFsRnVuYyhpdGVtLCBpbmRleCkgOiB0aGlzLml0ZW1UaXRsZS5mb3JtYXQoaW5kZXgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTaG93UmVtb3ZlKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IGV2ZW50OiBBc2tGb3JSZW1vdmVFdmFsRnVuY0FyZ3MgPSB7IHJlbW92ZUV2YWxGdW5jOiBudWxsIH07XHJcbiAgICAgICAgdGhpcy5hc2tGb3JSZW1vdmVFdmFsdWF0b3IuZW1pdChldmVudCk7XHJcblxyXG4gICAgICAgIHJldHVybiBldmVudC5yZW1vdmVFdmFsRnVuYyA/IGV2ZW50LnJlbW92ZUV2YWxGdW5jKGl0ZW0sIGluZGV4KSA6IHRoaXMuc2hvd1JlbW92ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBlcmZvcm1zIHZhbGlkYXRpb24gdGhhdCBpcyBpbnRlcm5hbCB0byB0aGlzIGNvbnRyb2xcclxuICAgICAqIEBwYXJhbSBjIFRoZSBmb3JtIGNvbnRyb2wgYXR0YWNoZWQgdG8gdGhpcyBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgdmFsaWRhdGUoYzogRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uQWxlcnRzIHtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgaWYgKE1zZnRTbWUuaXNOdWxsT3JVbmRlZmluZWQodGhpcy52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHJlcXVpcmVkOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy52YWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHJlcXVpcmVkOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnN1YkZpZWxkSXNvbGF0b3IgJiYgIXRoaXMuc3ViRmllbGRJc29sYXRvci5pc1ZhbGlkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBpbnZhbGlkU3ViRmllbGQ6IHtcclxuICAgICAgICAgICAgICAgICAgICBoaWRkZW46IHRydWVcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdXBlci52YWxpZGF0ZShjKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgdGhlIGlkQmFnIHVzZWQgYnkgdGhpcyBjb21wb25lbnQgdG8gc3RvcmUgdW5pcXVlIGVsZW1lbnQgaWRzLlxyXG4gICAgICogaWQgdmFsdWVzIHdpbGwgYmUgYXNzaWduZWQgYmUgdGhlIEBzZWUgQmFzZUNvbXBvbmVudCBzdXBlciBjbGFzcy5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUlkQmFnKCk6IE1zZnRTbWUuU3RyaW5nTWFwPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLiBzdXBlci5jcmVhdGVJZEJhZygpLFxyXG4gICAgICAgICAgICBkZXRhaWxzU3BhbjogJycsXHJcbiAgICAgICAgICAgIGl0ZW06ICcnXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlcyBhIG5ldyBpdGVtIHRvIGJlIGFkZGVkIHRvIHRoZSBhcnJheVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldE5ld0l0ZW0oKTogYW55IHtcclxuICAgICAgICBpZiAodGhpcy5uZXdJdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBNc2Z0U21lLmRlZXBDb3B5KHRoaXMubmV3SXRlbSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgZXZlbnQ6IEFza0Zvck5ld0l0ZW1FdmVudEFyZ3MgPSB7IGl0ZW06IG51bGwgfTtcclxuICAgICAgICAgICAgdGhpcy5hc2tGb3JOZXdJdGVtLmVtaXQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm4gZXZlbnQuaXRlbSB8fCB7fTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiPHNtZS1mb3JtLWZpZWxkLWxheW91dCBbZm9ybUZpZWxkXT1cInRoaXNcIj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cInNtZS1hcnJheVwiPlxyXG4gICAgPHNtZS1hY2NvcmRpb24gW2NhbkNsb3NlQW55XT1cImNhbkNsb3NlQW55XCIgW2NhbkNsb3NlQWxsXT1cImNhbkNsb3NlQWxsXCIgW2Nhbk9wZW5NdWx0aXBsZV09XCJjYW5PcGVuTXVsdGlwbGVcIj5cclxuICAgICAgPHNtZS1hY2NvcmRpb24tcGFuZWwgKm5nRm9yPVwibGV0IGl0ZW0gb2YgdmFsdWU7IGxldCBpID0gaW5kZXhcIiBbaGVhZGVyXT1cImdldEl0ZW1UaXRsZShpdGVtLCBpKVwiIFtpc0V4cGFuZGFibGVdPVwiZmFsc2VcIj5cclxuICAgICAgICA8c21lLXBhbmVsLWNvbnRyb2w+XHJcbiAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2hvd01vdmVcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJzbWUtYnV0dG9uLXRyaWdnZXIgc21lLWJ1dHRvbi1hdXRvLXdpZHRoIHNtZS1mb3JtLWZpZWxkLWhlaWdodCBzbWUtcGFkZGluZy1ob3Jpem9udGFsLXhzXCJcclxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uQXJyYXkucHJvbW90ZUJ1dHRvbkFyaWFMYWJlbFwiXHJcbiAgICAgICAgICAgIFt0aXRsZV09XCJzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uQXJyYXkucHJvbW90ZUJ1dHRvblRvb2x0aXBcIiAoY2xpY2spPVwibW92ZVVwKGl0ZW0pXCJcclxuICAgICAgICAgICAgW3NtZURpc2FibGVkXT1cImxvYWRpbmdPckRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic21lLWljb24gc21lLWljb24tdXBcIj48L3NwYW4+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJzaG93TW92ZVwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBjbGFzcz1cInNtZS1idXR0b24tdHJpZ2dlciBzbWUtYnV0dG9uLWF1dG8td2lkdGggc21lLWZvcm0tZmllbGQtaGVpZ2h0IHNtZS1wYWRkaW5nLWhvcml6b250YWwteHNcIlxyXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5BcnJheS5kZW1vdGVCdXR0b25BcmlhTGFiZWxcIlxyXG4gICAgICAgICAgICBbdGl0bGVdPVwic3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkFycmF5LmRlbW90ZUJ1dHRvblRvb2x0aXBcIiAoY2xpY2spPVwibW92ZURvd24oaXRlbSlcIlxyXG4gICAgICAgICAgICBbc21lRGlzYWJsZWRdPVwibG9hZGluZ09yRGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtaWNvbiBzbWUtaWNvbi1kb3duXCI+PC9zcGFuPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiZ2V0U2hvd1JlbW92ZShpdGVtLCBpKVwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBjbGFzcz1cInNtZS1idXR0b24tdHJpZ2dlciBzbWUtYnV0dG9uLWF1dG8td2lkdGggc21lLWZvcm0tZmllbGQtaGVpZ2h0IHNtZS1wYWRkaW5nLWhvcml6b250YWwteHNcIlxyXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5BcnJheS5yZW1vdmVCdXR0b25BcmlhTGFiZWxcIlxyXG4gICAgICAgICAgICBbdGl0bGVdPVwic3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkFycmF5LnJlbW92ZUJ1dHRvblRvb2x0aXBcIiAoY2xpY2spPVwiZGVsZXRlKGl0ZW0pXCJcclxuICAgICAgICAgICAgW3NtZURpc2FibGVkXT1cImxvYWRpbmdPckRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic21lLWljb24gc21lLWljb24tZGVsZXRlIHNtZS1jb2xvci1yZWRcIj48L3NwYW4+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L3NtZS1wYW5lbC1jb250cm9sPlxyXG5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInNtZS1zY3JlZW4tcmVhZGVyXCIgW2lkXT1cImdldEl0ZW1BcmlhSWQoaSwgJ2l0ZW0nKVwiPnt7aXRlbVRpdGxlfX08L3NwYW4+XHJcbiAgICAgICAgPGZpZWxkc2V0IFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJnZXRJdGVtQXJpYUlkKGksICdpdGVtJylcIlxyXG4gICAgICAgICAgY2xhc3M9XCJzbWUtYXJyYW5nZS1zdGFjay1oIHNtZS1tYXJnaW4tYm90dG9tLWxnIHNtZS1hcnJheS1pdGVtXCJcclxuICAgICAgICAgIFtjbGFzcy5zbWUtc3ViZm9ybS1pbmRlbnQtbm9uZV09XCJvcmllbnRhdGlvbj09PSdob3Jpem9udGFsJ1wiPlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1hdXRvIHNtZS1wYWRkaW5nLWluc2V0LW1kXCIgW2lkXT1cImdldEl0ZW1BcmlhSWQoaSwgJ2l0ZW1Db250YWluZXInKVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyIHNtZVRlbXBsYXRlT3V0bGV0IFt0ZW1wbGF0ZV09XCJpdGVtVGVtcGxhdGVcIiBbZGF0YV09XCJpdGVtXCIgaG9zdERhdGFOYW1lPVwiY29udGV4dFwiXHJcbiAgICAgICAgICAgICAgW2hvc3REYXRhXT1cIntpbmRleDogaSwgYXJpYUxhYmVsSWQ6IGdldEl0ZW1BcmlhSWQoaSwgJ2l0ZW0nKX1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZmllbGRzZXQ+XHJcblxyXG4gICAgICA8L3NtZS1hY2NvcmRpb24tcGFuZWw+XHJcbiAgICA8L3NtZS1hY2NvcmRpb24+XHJcblxyXG4gICAgPGJ1dHRvbiAjYWRkQnV0dG9uICpuZ0lmPVwic2hvd0FkZFwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBbc21lRGlzYWJsZWRdPVwibG9hZGluZ09yRGlzYWJsZWQgfHwgKG1heEl0ZW1zICE9PSAtMSAmJiB2YWx1ZS5sZW5ndGggPj0gbWF4SXRlbXMpXCJcclxuICAgICAgY2xhc3M9XCJzbWUtYnV0dG9uLXRyaWdnZXIgc21lLWJ1dHRvbi1hdXRvLXdpZHRoIHNtZS1pY29uIHNtZS1pY29uLWFkZCBzbWUtbWFyZ2luLWJvdHRvbS14c1wiXHJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwic3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkFycmF5LmFkZEJ1dHRvbkFyaWFMYWJlbFwiXHJcbiAgICAgIFt0aXRsZV09XCJzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uQXJyYXkuYWRkQnV0dG9uVG9vbHRpcFwiIChjbGljayk9XCJhZGQoKVwiPnt7YWRkQnV0dG9uVGV4dH19PC9idXR0b24+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxzbWUtdmFsaWRhdGlvbi1hbGVydCBbYWxlcnRdPVwiYWxlcnRcIj48L3NtZS12YWxpZGF0aW9uLWFsZXJ0PlxyXG4gIDxkaXYgY2xhc3M9XCJzbWUtc2NyZWVuLXJlYWRlclwiIGFyaWEtbGl2ZT1cImFzc2VydGl2ZVwiIGFyaWEtcmVsZXZhbnQ9XCJhbGxcIj57e3NjcmVlblJlYWRlckV2ZW50fX08L2Rpdj5cclxuPC9zbWUtZm9ybS1maWVsZC1sYXlvdXQ+XHJcbiJdfQ==
507
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXktZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvYXJyYXkvYXJyYXktZm9ybS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvYXJyYXkvYXJyYXktZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsUUFBUSxFQUNSLEtBQUssRUFFTCxNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUl2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsdUNBQXVDLEVBQTRCLE1BQU0sNkNBQTZDLENBQUM7QUFDaEksT0FBTyxFQUF3QixtQkFBbUIsRUFBa0IsTUFBTSwrQkFBK0IsQ0FBQztBQUMxRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEUsT0FBTyxFQUFFLDBCQUEwQixFQUFjLE1BQU0sZ0NBQWdDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQTJCNUUsMkNBQytEOzs7O0lBRHhDLDJEQUFzQywyQkFBQSxrQkFBQTs7Ozs7O0lDeEMvRCxrQ0FJb0M7SUFEcUMscVFBQXNCO0lBRTdGLDJCQUEwQztJQUM1QyxpQkFBUzs7O0lBSFAsMkZBQXNFLHlDQUFBO0lBRHRFLG1HQUFrRjs7OztJQUtwRixrQ0FJb0M7SUFEb0MsMFFBQXdCO0lBRTlG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SztZQU9DLE9BQU87a0JBRGIsS0FBSztZQU9DLE9BQU87a0JBRGIsS0FBSztZQU9DLFVBQVU7a0JBRGhCLEtBQUs7WUFPQyxRQUFRO2tCQURkLEtBQUs7WUFJQyxXQUFXO2tCQURqQixLQUFLO1lBSUMsV0FBVztrQkFEakIsS0FBSztZQUlDLGVBQWU7a0JBRHJCLEtBQUs7WUFPQyxRQUFRO2tCQURkLEtBQUs7WUFJQyxhQUFhO2tCQURuQixLQUFLO1lBSUMsY0FBYztrQkFEcEIsS0FBSztZQUlLLFNBQVM7a0JBRG5CLEtBQUs7WUFhSyxTQUFTO2tCQURuQixXQUFXO21CQUFDLGlCQUFpQjtZQVd0QixTQUFTO2tCQURoQixTQUFTO21CQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgQ29udGVudENoaWxkLFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIEhvc3RCaW5kaW5nLFxyXG4gICAgSW5qZWN0b3IsXHJcbiAgICBJbnB1dCxcclxuICAgIE9uSW5pdCxcclxuICAgIE91dHB1dCxcclxuICAgIFRlbXBsYXRlUmVmLFxyXG4gICAgVmlld0NoaWxkXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTdHJpbmdzIH0gZnJvbSAnLi4vLi4vLi4vLi4vZ2VuZXJhdGVkL3N0cmluZ3MnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uQWxlcnRzIH0gZnJvbSAnLi4vLi4vLi4vZm9ybS92YWxpZGF0aW9uLWFsZXJ0L3ZhbGlkYXRpb24tYWxlcnQnO1xyXG5pbXBvcnQgeyBTbWVTY2hlbWFQcm9wZXJ0eSB9IGZyb20gJy4uLy4uLy4uL3NjaGVtYS9zY2hlbWEtZGVjb3JhdG9yJztcclxuaW1wb3J0IHsgQXJyYXlQcm9wZXJ0eVNjaGVtYUZpZWxkTG9hZGVyQ29tcG9uZW50LCBTY2hlbWFGaWVsZEhvc3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9zY2hlbWEvc2NoZW1hLWZpZWxkLWhvc3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2NoZW1hT2JqZWN0UHJvcGVydHksIFNjaGVtYVByaW1pdGl2ZVR5cGUsIFNjaGVtYVByb3BlcnR5IH0gZnJvbSAnLi4vLi4vLi4vc2NoZW1hL3NjaGVtYS1tb2RlbHMnO1xyXG5pbXBvcnQgeyBTY2hlbWFVdGlsaXRpZXMgfSBmcm9tICcuLi8uLi8uLi9zY2hlbWEvc2NoZW1hLXV0aWxpdGllcyc7XHJcbmltcG9ydCB7IFNtZUludGVybmFsRm9ybUZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vZm9ybS1maWVsZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGb3JtRmllbGRJc29sYXRvckNvbXBvbmVudCwgRm9ybVN0YXR1cyB9IGZyb20gJy4uL2lzb2xhdG9yL2lzb2xhdG9yLmNvbXBvbmVudCc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFza0Zvck5ld0l0ZW1FdmVudEFyZ3Mge1xyXG4gICAgaXRlbTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFza0Zvckl0ZW1IZWFkZXJBcmdzIHtcclxuICAgIGhlYWRlckV2YWxGdW5jOiBNc2Z0U21lLkZ1bmMyPGFueSwgbnVtYmVyLCBzdHJpbmc+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFza0ZvclJlbW92ZUV2YWxGdW5jQXJncyB7XHJcbiAgICByZW1vdmVFdmFsRnVuYzogTXNmdFNtZS5GdW5jMjxhbnksIG51bWJlciwgYm9vbGVhbj47XHJcbn1cclxuXHJcbi8vIHRzbGludDpkaXNhYmxlOm1heC1saW5lLWxlbmd0aFxyXG5AQ29tcG9uZW50KHtcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICA8c21lLWZvcm0tZmllbGQgI2ZpZWxkIHR5cGU9XCJhcnJheVwiIFsobmdNb2RlbCldPVwiZGF0YVwiIFtuYW1lXT1cInByb3BlcnR5U2NoZW1hLm5hbWVcIiBbbGFiZWxdPVwibG9jYWxpemUocHJvcGVydHlTY2hlbWEubGFiZWwpXCJcclxuICAgICAgICBbcmVxdWlyZWRdPVwicHJvcGVydHlTY2hlbWEucmVxdWlyZWRcIiBbZGVzY3JpcHRpb25dPVwibG9jYWxpemUocHJvcGVydHlTY2hlbWEuZGVzY3JpcHRpb24pXCIgKGFza0Zvck5ld0l0ZW0pPVwiYXNrRm9yTmV3SXRlbSgkZXZlbnQpXCJcclxuICAgICAgICBbYWRqdXN0Q29udHJvbEJ1dHRvbkxvY2F0aW9uXT1cInNob3VsZEFkanVzdENvbnRyb2xCdXR0b25Mb2NhdGlvbigpXCJcclxuICAgICAgICAoY3VzdG9tVmFsaWRhdGUpPVwicmVzb2x2ZUZ1bmN0aW9uKHByb3BlcnR5U2NoZW1hLmN1c3RvbVZhbGlkYXRpb24pKCRldmVudClcIlxyXG4gICAgICAgIChjdXN0b21Bc3luY1ZhbGlkYXRlKT1cInByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbiAmJiByZXNvbHZlRnVuY3Rpb24ocHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uLmhhbmRsZXIpKCRldmVudClcIlxyXG4gICAgICAgIFtwZW5kaW5nTWVzc2FnZV09XCJwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24gJiYgbG9jYWxpemUocHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uLnBlbmRpbmdNZXNzYWdlKVwiXHJcbiAgICAgICAgW2N1c3RvbUFzeW5jVmFsaWRhdGVEaXNhYmxlZF09XCJzaG91bGRDdXN0b21Bc3luY1ZhbGlkYXRpb25CZURpc2FibGVkKClcIlxyXG4gICAgICAgIFtjdXN0b21Bc3luY1ZhbGlkYXRlRGVib3VuY2VUaW1lXT1cInByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbiAmJiArcHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uLmhhbmRsZXJcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LW1vZGVsPlxyXG4gICAgICAgICAgICA8c21lLXNjaGVtYS1maWVsZC1ob3N0IFtwcm9wZXJ0eVNjaGVtYV09XCJwcm9wZXJ0eVNjaGVtYS5pdGVtXCJcclxuICAgICAgICAgICAgICAgIFtjb250ZXh0XT1cImNvbnRleHRcIiBbZGF0YV09XCJtb2RlbFwiPjwvc21lLXNjaGVtYS1maWVsZC1ob3N0PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L3NtZS1mb3JtLWZpZWxkPlxyXG4gICAgYFxyXG59KVxyXG4vLyB0c2xpbnQ6ZW5hYmxlOm1heC1saW5lLWxlbmd0aFxyXG5leHBvcnQgY2xhc3MgQXJyYXlGb3JtRmllbGRMb2FkZXJDb21wb25lbnQgZXh0ZW5kcyBBcnJheVByb3BlcnR5U2NoZW1hRmllbGRMb2FkZXJDb21wb25lbnQge1xyXG4gICAgQFZpZXdDaGlsZCgnZmllbGQnKVxyXG4gICAgcHJpdmF0ZSBhcnJheUZvcm1GaWVsZENvbXBvbmVudDogQXJyYXlGb3JtRmllbGRDb21wb25lbnQ7XHJcblxyXG4gICAgcHVibGljIGFza0Zvck5ld0l0ZW0oJGV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IFNjaGVtYVV0aWxpdGllcy5nZW5lcmF0ZURhdGFCYXNlZE9uU2NoZW1hUHJvcGVydHkodGhpcy5wcm9wZXJ0eVNjaGVtYS5pdGVtKTtcclxuICAgICAgICAkZXZlbnQuaXRlbSA9IGl0ZW07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3VsZEFkanVzdENvbnRyb2xCdXR0b25Mb2NhdGlvbigpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBpdGVtUHJvcGVydHlTY2hlbWEgPSA8U2NoZW1hT2JqZWN0UHJvcGVydHk+dGhpcy5wcm9wZXJ0eVNjaGVtYS5pdGVtO1xyXG4gICAgICAgIGxldCByZXN1bHQgPSAhISh0aGlzLnByb3BlcnR5U2NoZW1hLml0ZW0ubGFiZWwgfHwgdGhpcy5wcm9wZXJ0eVNjaGVtYS5pdGVtLmRlc2NyaXB0aW9uKTtcclxuICAgICAgICBpZiAoIXJlc3VsdCkge1xyXG4gICAgICAgICAgICBsZXQgY29sdW1uQ291bnQgPSAxO1xyXG4gICAgICAgICAgICBpZiAoaXRlbVByb3BlcnR5U2NoZW1hLm9wdGlvbnMgJiYgaXRlbVByb3BlcnR5U2NoZW1hLm9wdGlvbnMuY29sdW1uQ291bnQpIHtcclxuICAgICAgICAgICAgICAgIGNvbHVtbkNvdW50ID0gaXRlbVByb3BlcnR5U2NoZW1hLm9wdGlvbnMuY29sdW1uQ291bnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2x1bW5Db3VudCAmJiBpIDwgaXRlbVByb3BlcnR5U2NoZW1hLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtUHJvcGVydHlTY2hlbWEucHJvcGVydGllc1tpXS5sYWJlbCB8fCBpdGVtUHJvcGVydHlTY2hlbWEucHJvcGVydGllc1tpXS5kZXNjcmlwdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEFjY2Vzc2libGUgSW1wbGVtZW50YXRpb24gb2YgYSBmb3JtIGZpZWxkIGZvciAuc21lLWFycmF5XHJcbiAqL1xyXG5AU21lU2NoZW1hUHJvcGVydHkoe1xyXG4gICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5BcnJheSxcclxuICAgIGZvcm1hdDogJ3NpbXBsZS1saXN0JyxcclxuICAgIGlzRGVmYXVsdEZvcm1hdDogdHJ1ZSxcclxuICAgIGRlc2NyaXB0aW9uOiBgQSBmb3JtIGZpZWxkIGNvbnRyb2wgYmluZGluZyB0byBhcnJheSBkYXRhLmAsXHJcbiAgICBsb2FkZXJDb21wb25lbnQ6IEFycmF5Rm9ybUZpZWxkTG9hZGVyQ29tcG9uZW50XHJcbn0pXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzbWUtZm9ybS1maWVsZFt0eXBlPVwiYXJyYXlcIl0nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FycmF5LWZvcm0tZmllbGQuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBcnJheUZvcm1GaWVsZENvbXBvbmVudCBleHRlbmRzIFNtZUludGVybmFsRm9ybUZpZWxkQ29tcG9uZW50PGFueVtdPiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBwcml2YXRlIF9pdGVtVGl0bGU6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzb3VyY2UgbmFtZSB0byB1c2UgZm9yIGxvZ2dpbmdcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGdldCBsb2dTb3VyY2VOYW1lKCkge1xyXG4gICAgICAgIHJldHVybiAnQXJyYXlGb3JtRmllbGRDb21wb25lbnQnO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgaXRlbSB0ZW1wbGF0ZSBmcm9tIGVpdGhlciB0aGUgc3ViRm9ybVRlbXBsYXRlIG9yIHN1YkZpZWxkSXNvbGF0b3IgaWYgcHJvdmlkZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgaXRlbVRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnN1YkZpZWxkSXNvbGF0b3IgJiYgdGhpcy5zdWJGaWVsZElzb2xhdG9yLnN1YkZpZWxkVGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3ViRmllbGRJc29sYXRvci5zdWJGaWVsZFRlbXBsYXRlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5zdWJGb3JtVGVtcGxhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBwcm92aWRlZCwgdGhlIHN1YiBmaWVsZCBpc29sYXRvciBwcmV2ZW50cyBjaGlsZCBuZ21vZGVscyBmcm9tIHJlZ2lzdGVyaW5nIHdpdGggdGhlIGZvcm0uXHJcbiAgICAgKiBJbnN0ZWFkLCB3ZSB3aWxsIHVzZSBpdCB0byBtYW5hZ2Ugb3VyIG93biB2YWxpZGl0eVxyXG4gICAgICovXHJcbiAgICBAQ29udGVudENoaWxkKEZvcm1GaWVsZElzb2xhdG9yQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gICAgcHVibGljIHN1YkZpZWxkSXNvbGF0b3I6IEZvcm1GaWVsZElzb2xhdG9yQ29tcG9uZW50O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hlbiBubyBcIm5ld0l0ZW1cIiBpcyBwcm92aWRlZC4gVGhpcyBvdXRwdXQgd2lsbCBiZSBjYWxsZWQgYW55dGltZSBhIG5ldyBpdGVtIGlzIHJlcXVpcmVkLlxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBhc2tGb3JOZXdJdGVtOiBFdmVudEVtaXR0ZXI8QXNrRm9yTmV3SXRlbUV2ZW50QXJncz4gPSBuZXcgRXZlbnRFbWl0dGVyPEFza0Zvck5ld0l0ZW1FdmVudEFyZ3M+KCk7XHJcblxyXG4gICAgLy8gRXZlbnQgdXNlZCB0byBwcm92aWRlIGEgY3VzdG9tIGZ1bmN0aW9uIHRoYXQgYnVpbGRzIGluZGl2aWR1YWwgaXRlbSBoZWFkZXJzXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBhc2tGb3JJdGVtSGVhZGVyOiBFdmVudEVtaXR0ZXI8QXNrRm9ySXRlbUhlYWRlckFyZ3M+ID0gbmV3IEV2ZW50RW1pdHRlcjxBc2tGb3JJdGVtSGVhZGVyQXJncz4oKTtcclxuXHJcbiAgICAvLyBFdmVudCB1c2VkIHRvIHByb3ZpZGUgYSBjdXN0b20gZnVuY3Rpb24gdGhhdCBldmFsdWF0ZXMgd2hldGhlciB0byBzaG93IG9yIGhpZGUgaW5kaXZpZHVhbCByZW1vdmUgYnV0dG9uc1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgYXNrRm9yUmVtb3ZlRXZhbHVhdG9yOiBFdmVudEVtaXR0ZXI8QXNrRm9yUmVtb3ZlRXZhbEZ1bmNBcmdzPiA9IG5ldyBFdmVudEVtaXR0ZXI8QXNrRm9yUmVtb3ZlRXZhbEZ1bmNBcmdzPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIGFycmF5IGl0ZW0gYnV0dG9uIGxvY2F0aW9ucyBzaG91bGQgYmUgYWRqdXN0ZWQgdG8gYWNjb3VudCBmb3Igbm8gaXRlbSBsYWJlbC5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBhZGp1c3RDb250cm9sQnV0dG9uTG9jYXRpb24gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIElucHV0IGZvciBnZW5lcmF0aW5nIGEgbmV3IGl0ZW0gZnJvbSBhbiBleGlzdGluZyBvYmplY3RcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBuZXdJdGVtOiBhbnk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGFkZCBhbmQgcmVtb3ZlIGFjdGlvbnMgc2hvdWxkIGJlIHNob3duXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2hvd0FkZDogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgcmVtb3ZlIGFjdGlvbnMgc2hvdWxkIGJlIHNob3duIGZvciBhbGwgaXRlbXNcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzaG93UmVtb3ZlOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBtb3ZlIGFjdGlvbnMgc2hvdWxkIGJlIHNob3duXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2hvd01vdmU6IGJvb2xlYW47XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBjYW5DbG9zZUFsbDogYm9vbGVhbjtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGNhbkNsb3NlQW55OiBib29sZWFuO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgY2FuT3Blbk11bHRpcGxlOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWF4aW11bSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIGFycmF5XHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbWF4SXRlbXM6IG51bWJlcjtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGFkZEJ1dHRvblRleHQ6IHN0cmluZztcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGhlYWRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2V0IGl0ZW1UaXRsZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5faXRlbVRpdGxlID0gYCR7dmFsdWV9IHswfWA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBpdGVtVGl0bGUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faXRlbVRpdGxlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGFyaWEgbGFiZWwgZm9yIHRoaXMgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWxhYmVsJylcclxuICAgIHB1YmxpYyBnZXQgYXJpYUxhYmVsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWVyZ2VkRGVzY3JpcHRpb25MYWJlbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hlbiB1cGRhdGVkLCB0aGUgc2NyZWVuIHJlYWRlciB3aWxsIGFubm91bmNlIHRoaXMgc3RyaW5nXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzY3JlZW5SZWFkZXJFdmVudDogc3RyaW5nO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2FkZEJ1dHRvbicpXHJcbiAgICBwcml2YXRlIGFkZEJ1dHRvbjogRWxlbWVudFJlZjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBKc29uRm9ybUZpZWxkQ29tcG9uZW50XHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvclxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xyXG4gICAgICAgIHRoaXMuc2hvd0FkZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zaG93UmVtb3ZlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm1heEl0ZW1zID0gLTE7XHJcbiAgICAgICAgdGhpcy5zaG93TW92ZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jYW5DbG9zZUFsbCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jYW5DbG9zZUFueSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY2FuT3Blbk11bHRpcGxlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmFkZEJ1dHRvblRleHQgPSAoPFN0cmluZ3M+TXNmdFNtZS5zZWxmKCkuUmVzb3VyY2VzLnN0cmluZ3MpLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5hZGQ7XHJcbiAgICAgICAgdGhpcy5faXRlbVRpdGxlID0gKDxTdHJpbmdzPk1zZnRTbWUuc2VsZigpLlJlc291cmNlcy5zdHJpbmdzKS5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkFycmF5Lml0ZW1UaXRsZTtcclxuICAgICAgICB0aGlzLnNjcmVlblJlYWRlckV2ZW50ID0gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWV0aG9kIGNhbGxlZCBhZnRlciB0aGUgY29tcG9uZW50IGlzIGluaXRpYWxpemVkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgncm9sZScsICdncm91cCcpO1xyXG4gICAgICAgIGlmICh0aGlzLnN1YkZpZWxkSXNvbGF0b3IpIHtcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN1YkZpZWxkSXNvbGF0b3Iuc3RhdHVzQ2hhbmdlZC5zdWJzY3JpYmUoKHN0YXR1czogRm9ybVN0YXR1cykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMucGVuZGluZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5nTW9kZWwuY29udHJvbC5tYXJrQXNQZW5kaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLmRpcnR5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmdNb2RlbC5jb250cm9sLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLnRvdWNoZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ01vZGVsLmNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ01vZGVsLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgYSBoaWRkZW4gYXJpYS1saXZlIHJlZ2lvbiB3aXRoIGluZm9ybWF0aW9uIGFib3V0IGNoYW5nZXMgdG8gdGhlIHBhZ2U7IGlmIHRoZSBzYW1lIGV2ZW50IGlzIGJlaW5nIHJlcGVhdGVkLCB0aGUgZXZlbnQgc3RyaW5nXHJcbiAgICAgKiBpcyBzZXQgaW4gbG93ZXJjYXNlLCBzbyB0aGUgc2NyZWVuIHJlYWRlciB0aGlua3MgaXQncyBhIG5ldyBzdHJpbmcuIENsZWFyaW5nIGFuZCByZS1zZXR0aW5nIHRoZSBmaWVsZCBkb2VzIG5vdCBwcm9tcHQgdGhlIHNjcmVlblxyXG4gICAgICogcmVhZGVyIHRvIHJlYWQgdGhlIGFyaWEtbGl2ZSByZWdpb24uXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgdGhlIHN0cmluZyB0byBiZSBhbm5vdW5jZWRcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSB1cGRhdGVTY3JlZW5SZWFkZXJFdmVudChldmVudDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zY3JlZW5SZWFkZXJFdmVudCA9IGV2ZW50ID09PSB0aGlzLnNjcmVlblJlYWRlckV2ZW50ID8gZXZlbnQudG9Mb2NhbGVMb3dlckNhc2UoKSA6IGV2ZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhbiBpdGVtIHRvIHRoZSBhcnJheVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYWRkKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldE5ld0l0ZW0oKTtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMudmFsdWUubGVuZ3RoO1xyXG4gICAgICAgIHRoaXMudmFsdWUucHVzaChpdGVtKTtcclxuICAgICAgICB0aGlzLnRyaWdnZXJWYWx1ZUNoYW5nZSgpO1xyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbUlkID0gdGhpcy5nZXRJdGVtQXJpYUlkKGluZGV4LCAnaXRlbUNvbnRhaW5lcicpO1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaXRlbUlkKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0SW5wdXQgPSA8SFRNTEVsZW1lbnQ+aXRlbUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGZpcnN0SW5wdXQpIHtcclxuICAgICAgICAgICAgICAgIGZpcnN0SW5wdXQuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaXRlbUNvbnRhaW5lci5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdjZW50ZXInIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVsZXRlcyBhbiBpdGVtIGZyb20gdGhlIGFycmF5XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBkZWxldGUoaXRlbTogYW55KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnZhbHVlLmluZGV4T2YoaXRlbSk7XHJcblxyXG4gICAgICAgIC8vIHJldHVybiB0aGUgdmlldyB0byB0aGUgcHJldmlvdXMgaXRlbSBpbiB0aGUgbGlzdC5cclxuICAgICAgICBjb25zdCBwcmV2SXRlbUlkID0gdGhpcy5nZXRJdGVtQXJpYUlkKGluZGV4IC0gMSwgJ2l0ZW1Db250YWluZXInKTtcclxuICAgICAgICBjb25zdCBwcmV2Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJldkl0ZW1JZCk7XHJcblxyXG4gICAgICAgIGlmIChwcmV2Q29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgIHByZXZDb250YWluZXIuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnY2VudGVyJyB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGZvY3VzIG9uIHRoZSBhZGQgYnV0dG9uLCBvdGhlcndpc2UgZm9jdXMgaXMgcmVzZXQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgcGFnZVxyXG4gICAgICAgIHRoaXMuYWRkQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuXHJcbiAgICAgICAgdGhpcy52YWx1ZS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIHRoaXMudHJpZ2dlclZhbHVlQ2hhbmdlKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTY3JlZW5SZWFkZXJFdmVudCh0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5BcnJheS5yZW1vdmVCdXR0b25FdmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNyZWFzZXMgdGhlIGluZGV4IG9mIGFuIGl0ZW0gYnkgMVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbW92ZVVwKGl0ZW06IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy52YWx1ZS5pbmRleE9mKGl0ZW0pO1xyXG4gICAgICAgIGlmIChpbmRleCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgdGVtcCA9IHsgLi4uaXRlbSB9O1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlW2luZGV4XSA9IHsgLi4udGhpcy52YWx1ZVtpbmRleCAtIDFdIH07XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVbaW5kZXggLSAxXSA9IHRlbXA7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2NyZWVuUmVhZGVyRXZlbnQodGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uQXJyYXkucHJvbW90ZUJ1dHRvbkV2ZW50KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNjcmVlblJlYWRlckV2ZW50KHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkFycmF5LnByb21vdGVCdXR0b25QcmV2ZW50ZWRFdmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5jcmVhc2VzIHRoZSBpbmRleCBvZiBhbiBpdGVtIGJ5IDFcclxuICAgICAqL1xyXG4gICAgcHVibGljIG1vdmVEb3duKGl0ZW06IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy52YWx1ZS5pbmRleE9mKGl0ZW0pO1xyXG4gICAgICAgIGlmIChpbmRleCA8IHRoaXMudmFsdWUubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wID0geyAuLi5pdGVtIH07XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVbaW5kZXhdID0geyAuLi50aGlzLnZhbHVlW2luZGV4ICsgMV0gfTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZVtpbmRleCArIDFdID0gdGVtcDtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVTY3JlZW5SZWFkZXJFdmVudCh0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5BcnJheS5kZW1vdGVCdXR0b25FdmVudCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVTY3JlZW5SZWFkZXJFdmVudCh0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5BcnJheS5kZW1vdGVCdXR0b25QcmV2ZW50ZWRFdmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1ldGhvZCBjYWxsZWQgd2hlbiBhIDxzZWxlY3Q+IGVsZW1lbnQncyB2YWx1ZSBjaGFuZ2VzLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdHJpZ2dlclZhbHVlQ2hhbmdlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbLi4udGhpcy52YWx1ZV07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEl0ZW1BcmlhSWQoaW5kZXg6IG51bWJlciwgaWROYW1lOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgICAgIHN3aXRjaCAoaWROYW1lKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ2l0ZW0nOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMuaWRCYWdbJ2l0ZW0nXX0tJHtpbmRleH1gO1xyXG4gICAgICAgICAgICBjYXNlICdpdGVtSGVhZGVyJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLmlkQmFnWydpdGVtJ119LWhlYWRlci0ke2luZGV4fWA7XHJcbiAgICAgICAgICAgIGNhc2UgJ2l0ZW1Db250YWluZXInOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMuaWRCYWdbJ2l0ZW0nXX0tY29udGFpbmVyLSR7aW5kZXh9YDtcclxuICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRJdGVtVGl0bGUoaXRlbTogYW55LCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBldmVudDogQXNrRm9ySXRlbUhlYWRlckFyZ3MgPSB7IGhlYWRlckV2YWxGdW5jOiBudWxsIH07XHJcbiAgICAgICAgdGhpcy5hc2tGb3JJdGVtSGVhZGVyLmVtaXQoZXZlbnQpO1xyXG5cclxuICAgICAgICByZXR1cm4gZXZlbnQuaGVhZGVyRXZhbEZ1bmMgPyBldmVudC5oZWFkZXJFdmFsRnVuYyhpdGVtLCBpbmRleCkgOiB0aGlzLml0ZW1UaXRsZS5mb3JtYXQoaW5kZXgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTaG93UmVtb3ZlKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IGV2ZW50OiBBc2tGb3JSZW1vdmVFdmFsRnVuY0FyZ3MgPSB7IHJlbW92ZUV2YWxGdW5jOiBudWxsIH07XHJcbiAgICAgICAgdGhpcy5hc2tGb3JSZW1vdmVFdmFsdWF0b3IuZW1pdChldmVudCk7XHJcblxyXG4gICAgICAgIHJldHVybiBldmVudC5yZW1vdmVFdmFsRnVuYyA/IGV2ZW50LnJlbW92ZUV2YWxGdW5jKGl0ZW0sIGluZGV4KSA6IHRoaXMuc2hvd1JlbW92ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBlcmZvcm1zIHZhbGlkYXRpb24gdGhhdCBpcyBpbnRlcm5hbCB0byB0aGlzIGNvbnRyb2xcclxuICAgICAqIEBwYXJhbSBjIFRoZSBmb3JtIGNvbnRyb2wgYXR0YWNoZWQgdG8gdGhpcyBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgdmFsaWRhdGUoYzogRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uQWxlcnRzIHtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgaWYgKE1zZnRTbWUuaXNOdWxsT3JVbmRlZmluZWQodGhpcy52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHJlcXVpcmVkOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy52YWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHJlcXVpcmVkOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnN1YkZpZWxkSXNvbGF0b3IgJiYgIXRoaXMuc3ViRmllbGRJc29sYXRvci5pc1ZhbGlkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBpbnZhbGlkU3ViRmllbGQ6IHtcclxuICAgICAgICAgICAgICAgICAgICBoaWRkZW46IHRydWVcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdXBlci52YWxpZGF0ZShjKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgdGhlIGlkQmFnIHVzZWQgYnkgdGhpcyBjb21wb25lbnQgdG8gc3RvcmUgdW5pcXVlIGVsZW1lbnQgaWRzLlxyXG4gICAgICogaWQgdmFsdWVzIHdpbGwgYmUgYXNzaWduZWQgYmUgdGhlIEBzZWUgQmFzZUNvbXBvbmVudCBzdXBlciBjbGFzcy5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUlkQmFnKCk6IE1zZnRTbWUuU3RyaW5nTWFwPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLiBzdXBlci5jcmVhdGVJZEJhZygpLFxyXG4gICAgICAgICAgICBkZXRhaWxzU3BhbjogJycsXHJcbiAgICAgICAgICAgIGl0ZW06ICcnXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlcyBhIG5ldyBpdGVtIHRvIGJlIGFkZGVkIHRvIHRoZSBhcnJheVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldE5ld0l0ZW0oKTogYW55IHtcclxuICAgICAgICBpZiAodGhpcy5uZXdJdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBNc2Z0U21lLmRlZXBDb3B5KHRoaXMubmV3SXRlbSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgZXZlbnQ6IEFza0Zvck5ld0l0ZW1FdmVudEFyZ3MgPSB7IGl0ZW06IG51bGwgfTtcclxuICAgICAgICAgICAgdGhpcy5hc2tGb3JOZXdJdGVtLmVtaXQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm4gZXZlbnQuaXRlbSB8fCB7fTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiPHNtZS1mb3JtLWZpZWxkLWxheW91dCBbZm9ybUZpZWxkXT1cInRoaXNcIj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cInNtZS1hcnJheVwiPlxyXG4gICAgPHNtZS1hY2NvcmRpb24gW2NhbkNsb3NlQW55XT1cImNhbkNsb3NlQW55XCIgW2NhbkNsb3NlQWxsXT1cImNhbkNsb3NlQWxsXCIgW2Nhbk9wZW5NdWx0aXBsZV09XCJjYW5PcGVuTXVsdGlwbGVcIj5cclxuICAgICAgPHNtZS1hY2NvcmRpb24tcGFuZWwgKm5nRm9yPVwibGV0IGl0ZW0gb2YgdmFsdWU7IGxldCBpID0gaW5kZXhcIiBbaGVhZGVyXT1cImdldEl0ZW1UaXRsZShpdGVtLCBpKVwiIFtpc0V4cGFuZGFibGVdPVwiZmFsc2VcIj5cclxuICAgICAgICA8c21lLXBhbmVsLWNvbnRyb2w+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyIHNtZVRlbXBsYXRlT3V0bGV0IFt0ZW1wbGF0ZV09XCJoZWFkZXJUZW1wbGF0ZVwiIFtkYXRhXT1cIml0ZW1cIiBob3N0RGF0YU5hbWU9XCJjb250ZXh0XCJcclxuICAgICAgICAgICAgW2hvc3REYXRhXT1cIntpbmRleDogaSwgYXJpYUxhYmVsSWQ6IGdldEl0ZW1BcmlhSWQoaSwgJ2l0ZW1IZWFkZXInKX1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJzaG93TW92ZVwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBjbGFzcz1cInNtZS1idXR0b24tdHJpZ2dlciBzbWUtYnV0dG9uLWF1dG8td2lkdGggc21lLWZvcm0tZmllbGQtaGVpZ2h0IHNtZS1wYWRkaW5nLWhvcml6b250YWwteHNcIlxyXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5BcnJheS5wcm9tb3RlQnV0dG9uQXJpYUxhYmVsXCJcclxuICAgICAgICAgICAgW3RpdGxlXT1cInN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5BcnJheS5wcm9tb3RlQnV0dG9uVG9vbHRpcFwiIChjbGljayk9XCJtb3ZlVXAoaXRlbSlcIlxyXG4gICAgICAgICAgICBbc21lRGlzYWJsZWRdPVwibG9hZGluZ09yRGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtaWNvbiBzbWUtaWNvbi11cFwiPjwvc3Bhbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNob3dNb3ZlXCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwic21lLWJ1dHRvbi10cmlnZ2VyIHNtZS1idXR0b24tYXV0by13aWR0aCBzbWUtZm9ybS1maWVsZC1oZWlnaHQgc21lLXBhZGRpbmctaG9yaXpvbnRhbC14c1wiXHJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwic3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkFycmF5LmRlbW90ZUJ1dHRvbkFyaWFMYWJlbFwiXHJcbiAgICAgICAgICAgIFt0aXRsZV09XCJzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uQXJyYXkuZGVtb3RlQnV0dG9uVG9vbHRpcFwiIChjbGljayk9XCJtb3ZlRG93bihpdGVtKVwiXHJcbiAgICAgICAgICAgIFtzbWVEaXNhYmxlZF09XCJsb2FkaW5nT3JEaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNtZS1pY29uIHNtZS1pY29uLWRvd25cIj48L3NwYW4+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJnZXRTaG93UmVtb3ZlKGl0ZW0sIGkpXCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwic21lLWJ1dHRvbi10cmlnZ2VyIHNtZS1idXR0b24tYXV0by13aWR0aCBzbWUtZm9ybS1maWVsZC1oZWlnaHQgc21lLXBhZGRpbmctaG9yaXpvbnRhbC14c1wiXHJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwic3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkFycmF5LnJlbW92ZUJ1dHRvbkFyaWFMYWJlbFwiXHJcbiAgICAgICAgICAgIFt0aXRsZV09XCJzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uQXJyYXkucmVtb3ZlQnV0dG9uVG9vbHRpcFwiIChjbGljayk9XCJkZWxldGUoaXRlbSlcIlxyXG4gICAgICAgICAgICBbc21lRGlzYWJsZWRdPVwibG9hZGluZ09yRGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtaWNvbiBzbWUtaWNvbi1kZWxldGUgc21lLWNvbG9yLXJlZFwiPjwvc3Bhbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvc21lLXBhbmVsLWNvbnRyb2w+XHJcblxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic21lLXNjcmVlbi1yZWFkZXJcIiBbaWRdPVwiZ2V0SXRlbUFyaWFJZChpLCAnaXRlbScpXCI+e3tpdGVtVGl0bGV9fTwvc3Bhbj5cclxuICAgICAgICA8ZmllbGRzZXQgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImdldEl0ZW1BcmlhSWQoaSwgJ2l0ZW0nKVwiXHJcbiAgICAgICAgICBjbGFzcz1cInNtZS1hcnJhbmdlLXN0YWNrLWggc21lLW1hcmdpbi1ib3R0b20tbGcgc21lLWFycmF5LWl0ZW1cIlxyXG4gICAgICAgICAgW2NsYXNzLnNtZS1zdWJmb3JtLWluZGVudC1ub25lXT1cIm9yaWVudGF0aW9uPT09J2hvcml6b250YWwnXCI+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNtZS1wb3NpdGlvbi1mbGV4LWF1dG8gc21lLXBhZGRpbmctaW5zZXQtbWRcIiBbaWRdPVwiZ2V0SXRlbUFyaWFJZChpLCAnaXRlbUNvbnRhaW5lcicpXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgc21lVGVtcGxhdGVPdXRsZXQgW3RlbXBsYXRlXT1cIml0ZW1UZW1wbGF0ZVwiIFtkYXRhXT1cIml0ZW1cIiBob3N0RGF0YU5hbWU9XCJjb250ZXh0XCJcclxuICAgICAgICAgICAgICBbaG9zdERhdGFdPVwie2luZGV4OiBpLCBhcmlhTGFiZWxJZDogZ2V0SXRlbUFyaWFJZChpLCAnaXRlbScpfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9maWVsZHNldD5cclxuXHJcbiAgICAgIDwvc21lLWFjY29yZGlvbi1wYW5lbD5cclxuICAgIDwvc21lLWFjY29yZGlvbj5cclxuXHJcbiAgICA8YnV0dG9uICNhZGRCdXR0b24gKm5nSWY9XCJzaG93QWRkXCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIFtzbWVEaXNhYmxlZF09XCJsb2FkaW5nT3JEaXNhYmxlZCB8fCAobWF4SXRlbXMgIT09IC0xICYmIHZhbHVlLmxlbmd0aCA+PSBtYXhJdGVtcylcIlxyXG4gICAgICBjbGFzcz1cInNtZS1idXR0b24tdHJpZ2dlciBzbWUtYnV0dG9uLWF1dG8td2lkdGggc21lLWljb24gc21lLWljb24tYWRkIHNtZS1tYXJnaW4tYm90dG9tLXhzXCJcclxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uQXJyYXkuYWRkQnV0dG9uQXJpYUxhYmVsXCJcclxuICAgICAgW3RpdGxlXT1cInN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5BcnJheS5hZGRCdXR0b25Ub29sdGlwXCIgKGNsaWNrKT1cImFkZCgpXCI+e3thZGRCdXR0b25UZXh0fX08L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPHNtZS12YWxpZGF0aW9uLWFsZXJ0IFthbGVydF09XCJhbGVydFwiPjwvc21lLXZhbGlkYXRpb24tYWxlcnQ+XHJcbiAgPGRpdiBjbGFzcz1cInNtZS1zY3JlZW4tcmVhZGVyXCIgYXJpYS1saXZlPVwiYXNzZXJ0aXZlXCIgYXJpYS1yZWxldmFudD1cImFsbFwiPnt7c2NyZWVuUmVhZGVyRXZlbnR9fTwvZGl2PlxyXG48L3NtZS1mb3JtLWZpZWxkLWxheW91dD5cclxuIl19
@@ -312,7 +312,8 @@ export class DateTimeRangeFormFieldComponent extends SmeInternalFormFieldCompone
312
312
  alerts['invalidDateRange'] = alert;
313
313
  }
314
314
  else {
315
- if (!this.endFormField.ngModel.valid && this.startFormField.ngModel.control.errors) {
315
+ if ((this.endFormField && !this.endFormField.ngModel.valid) &&
316
+ (this.startFormField && this.startFormField.ngModel.control.errors)) {
316
317
  this.endFormField.ngModel.control.setErrors(null);
317
318
  }
318
319
  }
@@ -323,7 +324,7 @@ export class DateTimeRangeFormFieldComponent extends SmeInternalFormFieldCompone
323
324
  alerts['invalidDateRange'] = alert;
324
325
  }
325
326
  else {
326
- if (!this.startFormField.ngModel.valid && this.startFormField.ngModel.control.errors) {
327
+ if (this.startFormField && !this.startFormField.ngModel.valid && this.startFormField.ngModel.control.errors) {
327
328
  this.startFormField.ngModel.control.setErrors(null);
328
329
  }
329
330
  }
@@ -555,4 +556,4 @@ __decorate([
555
556
  }], customLabelEmitter: [{
556
557
  type: Output
557
558
  }], dropdownService: [], updateDropdownPosition: [] }); })();
558
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUtcmFuZ2UtZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvZGF0ZXRpbWUtcmFuZ2UvZGF0ZXRpbWUtcmFuZ2UtZm9ybS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvZGF0ZXRpbWUtcmFuZ2UvZGF0ZXRpbWUtcmFuZ2UtZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixRQUFRLEVBQ1IsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUMxRixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMEVBQTBFLENBQUM7QUFDakcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBQzlGLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN2RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saURBQWlELENBQUM7QUFDNUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3JFLE9BQU8sRUFBcUMsdUJBQXVCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNySCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUV2RixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDQXpFLDZCQUFzRTtJQUNwRSwrQkFBdUI7SUFDckIsNkJBQU87SUFDTCxpQ0FJZ0Q7SUFITCxvUkFBdUMsaVBBQUE7SUFEbEYsaUJBSWdEO0lBQ2hELGdDQUF5QjtJQUFBLFlBQWdCO0lBQUEsaUJBQU87SUFDbEQsaUJBQVE7SUFDVixpQkFBTTtJQUNSLDBCQUFlOzs7O0lBUFAsZUFBd0M7SUFBeEMsZ0VBQXdDLGdDQUFBLHNDQUFBO0lBRHRCLDZDQUFnQyxnQ0FBQSx3REFBQSxrQ0FBQTtJQUszQixlQUFnQjtJQUFoQixxQ0FBZ0I7OztJQVRqRCw2QkFBZ0Q7SUFDOUMsbUhBV2U7SUFDakIsMEJBQWU7OztJQVpvQixlQUFZO0lBQVosd0NBQVk7Ozs7SUFjL0MsK0JBQWtIO0lBQ2hILDZCQUFPO0lBQ0wsaUNBR2dEO0lBRDlDLDhOQUFzQyx3TkFBQTtJQUZ4QyxpQkFHZ0Q7SUFDaEQsZ0NBQXlCO0lBQUEsWUFBbUI7SUFBQSxpQkFBTztJQUNyRCxpQkFBUTtJQUNWLGlCQUFNOzs7SUFMOEIsZUFBd0I7SUFBeEIsNkNBQXdCLHNEQUFBLHNDQUFBO0lBRHBDLCtDQUE4QiwyREFBQSxnQ0FBQSxrQ0FBQTtJQUl6QixlQUFtQjtJQUFuQix1Q0FBbUI7Ozs7O0lBTTlDLDhDQUl3RztJQUR0RyxxUUFBMEMsT0FBTyxhQUFVLDBQQUNoQixPQUFPLEtBRFMsK09BQ2lDLE9BQU8sS0FEeEM7SUFFN0QsaUJBQWlCOzs7SUFKMEMsNkNBQXVCLDhDQUFBLHlDQUFBLG9DQUFBOzs7O0lBS2xGLDhDQUlvRztJQURsRyxxUUFBMEMsS0FBSyxhQUFVLDBQQUNkLEtBQUssS0FEUywrT0FDaUMsS0FBSyxLQUR0QztJQUUzRCxpQkFBaUI7OztJQUowQywyQ0FBcUIsOENBQUEsdUNBQUEsa0NBQUE7OztJQVRsRixvQ0FDb0c7SUFDbEcsbUhBS2lCO0lBQ2pCLG1IQUtpQjtJQUNuQixpQkFBVzs7O0lBYlQseUZBQWtFO0lBQUMsbURBQThCO0lBQ2hFLGVBQThDO0lBQTlDLDZFQUE4QztJQU1oRCxlQUE0QztJQUE1QywyRUFBNEM7Ozs7QURyQm5GLE1BQU0sT0FBTywrQkFBZ0MsU0FBUSw2QkFBd0M7SUEySXpGLFlBQ0ksUUFBa0I7UUFFbEIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBdkliLGVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQy9FLGtCQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztRQUNyRixnQkFBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDaEYseUJBQW9CLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUM5Rix1QkFBa0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBdUMzRiwwQkFBcUIsR0FBRyxJQUFJLENBQUM7UUFhN0IsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUsvQyx3QkFBd0I7UUFDeEIsMERBQTBEO1FBQzFELCtCQUErQjtRQUN2QixtQkFBYyxHQUE4QixFQUFFLENBQUM7UUF3RW5ELElBQUksQ0FBQyxpQ0FBaUMsR0FBRyxJQUFJLENBQUM7UUFDOUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUM3QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsc0JBQXNCO0lBQzdGLENBQUM7SUF2SUQ7O09BRUc7SUFDSCxJQUFjLGFBQWE7UUFDdkIsT0FBTyxpQ0FBaUMsQ0FBQztJQUM3QyxDQUFDO0lBb0NELDZEQUE2RDtJQUM3RCxJQUFXLG9CQUFvQjtRQUMzQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxJQUFXLGtCQUFrQjtRQUN6QixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFZTyxjQUFjLENBQUMsS0FBVztRQUM5QixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDYixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ2hELElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ3pDLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7UUFDTCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVOLElBQUksT0FBTyxFQUFFO1lBQ1QsR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7U0FDdkI7UUFFRCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFDTyxjQUFjLENBQUMsR0FBUyxFQUFFLEtBQWE7UUFDM0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNoRCxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUN2QyxPQUFPLElBQUksQ0FBQzthQUNmO1FBQ0wsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDTixJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1YsSUFBSSxJQUFJLENBQUMsY0FBYzttQkFDaEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLElBQUksK0JBQStCLENBQUMsb0JBQW9CLEVBQUU7Z0JBQ3ZGLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDakM7WUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQztnQkFDckIsR0FBRyxFQUFFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Z0JBQzdCLEtBQUssRUFBRSxLQUFLO2FBQ2YsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDO0lBQ0QsMERBQTBEO0lBQ2xELGlCQUFpQixDQUFDLEtBQVc7UUFDakMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxJQUFJLEdBQUcsRUFBRTtZQUNMLE9BQU8sR0FBRyxDQUFDO1NBQ2Q7UUFDRCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN0QyxNQUFNLEtBQUssR0FBRyxRQUFRLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQywrQkFBK0IsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDMUcsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQy9CLE1BQU0sR0FBRyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLCtCQUErQixDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNsRyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakMsTUFBTSxJQUFJLEdBQUcsT0FBTyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsK0JBQStCLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ3RHLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNyQyxNQUFNLE1BQU0sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQywrQkFBK0IsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDOUcsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sTUFBTSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLCtCQUErQixDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUM5RyxHQUFHLEdBQUcsK0JBQStCLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQVcsWUFBWTtRQUNuQixJQUFJLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUMvRixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7U0FDMUI7UUFDRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDdEYsSUFBSSxjQUFjLEVBQUU7WUFDaEIsT0FBTyxjQUFjLENBQUMsS0FBSyxDQUFDO1NBQy9CO2FBQU0sSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFDbkMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQzFCO1FBRUQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQVlNLFVBQVUsQ0FBQyxTQUFvQjtRQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO1lBQ3ZDLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFDRCxJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsS0FBSyxJQUFJLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDL0MsT0FBTyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMxQzthQUFNO1lBQ0gsT0FBTyxLQUFLLENBQUM7U0FDaEI7SUFFTCxDQUFDO0lBRU0sV0FBVyxDQUFDLEtBQWdCO1FBQy9CLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFTSxrQkFBa0I7UUFDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3pELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUMzQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7YUFDckM7UUFDTCxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ0osSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDM0IsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1NBQ3JDO0lBQ0wsQ0FBQztJQUVNLHdCQUF3QixDQUFDLFNBQWlCLEVBQUUsS0FBYTtRQUM1RCxRQUFRLFNBQVMsRUFBRTtZQUNmLEtBQUssK0JBQStCLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM3QyxNQUFNO2FBQ1Q7WUFDRCxLQUFLLCtCQUErQixDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUM5QyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDM0MsTUFBTTthQUNUO1NBQ0o7UUFDRCx5Q0FBeUM7UUFDekMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQ3RDLENBQUM7SUFHTyxzQkFBc0I7UUFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFUyxjQUFjLENBQUMsS0FBZ0I7UUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDZixPQUFPO1NBQ1Y7UUFDRCxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUMxRSxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7U0FDeEM7UUFDRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQzlDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLGNBQWMsRUFBRTtZQUNoQixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN0RDthQUFNO1lBQ0gsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDakQ7UUFDRCxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7O09BR0c7SUFDTyxXQUFXO1FBQ2pCLE9BQU87WUFDSCxXQUFXLEVBQUUsRUFBRTtZQUNmLFNBQVMsRUFBRSxFQUFFO1lBQ2IsZUFBZSxFQUFFLEVBQUU7WUFDbkIsY0FBYyxFQUFFLEVBQUU7WUFDbEIsWUFBWSxFQUFFLEVBQUU7U0FDbkIsQ0FBQztJQUNOLENBQUM7SUFFRDs7O09BR0c7SUFDTyxRQUFRLENBQUMsQ0FBYztRQUM3QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixJQUFJLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3ZDLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7YUFDN0I7U0FDSjtRQUVELElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3BDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3JDLElBQUksS0FBSyxFQUFFO2dCQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsQ0FBQzthQUFFO1lBRWxELEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDL0IsSUFBSSxLQUFLLEVBQUU7Z0JBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxDQUFDO2FBQUU7U0FDckQ7UUFFRCxPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVNLGdCQUFnQixDQUFDLEtBQStCLEVBQUUsSUFBWSxFQUFFLEtBQWdCO1FBQ25GLE1BQU0sTUFBTSxHQUFxQixFQUFFLENBQUM7UUFDcEMsSUFBSSxJQUFJLEtBQUssK0JBQStCLENBQUMsYUFBYSxFQUFFO1lBQ3hELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDeEUsSUFBSSxLQUFLLEVBQUU7Z0JBQ1AsTUFBTSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsS0FBSyxDQUFDO2FBQ3RDO2lCQUFNO2dCQUNILElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtvQkFDaEYsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDckQ7YUFDSjtTQUNKO2FBQU0sSUFBSSxJQUFJLEtBQUssK0JBQStCLENBQUMsV0FBVyxFQUFFO1lBQzdELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3RFLElBQUksS0FBSyxFQUFFO2dCQUNQLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEtBQUssQ0FBQzthQUN0QztpQkFBTTtnQkFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7b0JBQ2xGLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ3ZEO2FBQ0o7U0FDSjtRQUVELE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRU8saUJBQWlCLENBQUMsU0FBZ0I7UUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDNUQsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ2pDLElBQUksU0FBUyxFQUFFO1lBQ1gsU0FBUyxHQUFHLFNBQVMsQ0FBQztTQUN6QjtRQUNELElBQUksU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUMvRSxPQUFPO2dCQUNILEtBQUssRUFBRSxLQUFLO2dCQUNaLE9BQU8sRUFBRSxJQUFJLENBQUMsb0JBQW9CO2dCQUNsQyxRQUFRLEVBQUUsdUJBQXVCLENBQUMsS0FBSzthQUMxQyxDQUFDO1NBQ0w7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU8sZUFBZSxDQUFDLE9BQWM7UUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDMUQsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO1FBQzdCLElBQUksT0FBTyxFQUFFO1lBQ1QsT0FBTyxHQUFHLE9BQU8sQ0FBQztTQUNyQjtRQUNELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUMvRSxPQUFPO2dCQUNILEtBQUssRUFBRSxLQUFLO2dCQUNaLE9BQU8sRUFBRSxJQUFJLENBQUMsa0JBQWtCO2dCQUNoQyxRQUFRLEVBQUUsdUJBQXVCLENBQUMsS0FBSzthQUMxQyxDQUFDO1NBQ0w7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsZ0JBQWdCO0lBQ1QsZUFBZSxDQUFDLEtBQW9CO1FBQ3ZDLFFBQVEsS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUNuQixLQUFLLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDbkIsS0FBSyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDekMsTUFBTTthQUNUO1lBQ0QsS0FBSyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3BCLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRTtvQkFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7aUJBQzVDO2dCQUNELE9BQU87YUFDVjtZQUNELE9BQU8sQ0FBQyxDQUFDO2dCQUNMLE9BQU87YUFDVjtTQUNKO1FBRUQsa0JBQWtCO1FBQ2xCLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ2pDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVNLHlCQUF5QixDQUFDLEtBQW9CO1FBQ2pELFFBQVEsS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUNuQiw2QkFBNkI7WUFDN0IsS0FBSyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2QsdURBQXVEO2dCQUN2RCxJQUFJLENBQUMsSUFBSSxDQUFDLDhCQUE4QixFQUFFLEVBQUU7b0JBQ3hDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztpQkFDMUI7Z0JBQ0QsS0FBSyxDQUFDLHdCQUF3QixFQUFFLENBQUM7Z0JBQ2pDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDeEIsTUFBTTthQUNUO1lBQ0QsT0FBTyxDQUFDLENBQUM7Z0JBQ0wsT0FBTzthQUNWO1NBQ0o7SUFFTCxDQUFDO0lBRU0sbUJBQW1CLENBQUMsS0FBb0IsRUFBRSxLQUFhO1FBQzFELGlJQUFpSTtRQUNqSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzNGLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUU7Z0JBQzVFLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRTtvQkFDL0MsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUM1RixJQUFJLFdBQVcsRUFBRTt3QkFDYixXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7cUJBQ3ZCO2lCQUNKO2dCQUNELElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQzthQUM1QztTQUNKO1FBQ0QsNkVBQTZFO1FBQzdFLElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsR0FBRyxFQUFFO1lBQ2xGLE9BQU87U0FDVjthQUFNO1lBQ0gsdURBQXVEO1lBQ3ZELElBQUksSUFBSSxDQUFDLHVDQUF1QyxFQUFFLEVBQUU7Z0JBQ2hELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUMxQjtZQUNELEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1NBQ3BDO0lBQ0wsQ0FBQztJQUVPLHVDQUF1QztRQUMzQyxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDaEIsTUFBTSxZQUFZLEdBQWdCLFFBQVEsQ0FBQyxhQUFhLENBQUM7UUFDekQsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLDZCQUE2QixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3BFLDBFQUEwRTtRQUMxRSxJQUFJLFlBQVksS0FBSyxXQUFXLEVBQUU7WUFDOUIsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFTyw4QkFBOEI7UUFDbEMsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDMUMsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7O0FBN1lhLDhDQUFjLEdBQUcseUJBQXlCLENBQUM7QUFDM0MsK0NBQWUsR0FBRyxNQUFNLENBQUM7QUFDekIsb0RBQW9CLEdBQUcsR0FBRyxDQUFDO0FBQzNCLDZDQUFhLEdBQUcsT0FBTyxDQUFDO0FBQ3hCLDJDQUFXLEdBQUcsS0FBSyxDQUFDO2lJQUx6QiwrQkFBK0I7dUZBQS9CLCtCQUErQjtvQ0FrQ3ZCLDRCQUE0Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7UUN0RWpELGdEQUEwQztRQUN4QywwQ0FDMEU7UUFDeEUsaUNBQXlHO1FBQXBDLG1IQUFXLDJCQUF1QixJQUFDO1FBQ3RHLG1DQU93RTtRQURwQyx3S0FBUywwQkFBK0IsSUFBSSxDQUFDLElBQUM7UUFObEYsaUJBT3dFO1FBQ3hFLGlDQUVrRztRQUEvQyx5S0FBUywwQkFBK0IsSUFBSSxDQUFDLElBQUM7UUFDL0YsMEJBQW1EO1FBQ3JELGlCQUFTO1FBQ1gsaUJBQU07UUFJTixrQ0FFK0I7UUFDN0IscUdBYWU7UUFFZixtRkFRTTtRQUVOLDZGQWNXO1FBQ2IsaUJBQU07UUFDUixpQkFBZTtRQUNmLDRDQUE2RDtRQUMvRCxpQkFBd0I7Ozs7UUFuRUQsK0JBQWtCO1FBQ2YsZUFBb0I7UUFBcEIsa0NBQW9CLG1DQUFBLDRFQUFBO1FBR00sZUFBc0I7UUFBdEIsd0NBQXNCLGdDQUFBO1FBQ2xFLDBEQUE0Qyx5QkFBQSwrQkFBQSxpREFBQSx3Q0FBQSw2QkFBQSw2QkFBQTtRQVFhLGVBQXFDO1FBQXJDLHlDQUFxQztRQUQxRSwrREFBaUQsNEJBQUE7UUFVdkUsZUFBMk07UUFBM00sc05BQTJNLGlDQUFBO1FBRTVMLGVBQStCO1FBQS9CLHdEQUErQjtRQWVXLGVBQXVEO1FBQXZELG9GQUF1RDtRQVVyRyxlQUFxRTtRQUFyRSxzR0FBcUU7UUFpQjlELGVBQWU7UUFBZixpQ0FBZTs7QURvQ25DO0lBREMsU0FBUyxDQUFDLGVBQWUsQ0FBQzs4QkFDRixlQUFlO3dFQUFDO0FBK0h6QztJQURDLEtBQUssRUFBRTs7Ozs2RUFHUDt1RkFuTVEsK0JBQStCO2NBSjNDLFNBQVM7ZUFBQztnQkFDUCxRQUFRLEVBQUUsc0NBQXNDO2dCQUNoRCxXQUFXLEVBQUUsNENBQTRDO2FBQzVEOzJEQXFCVSxjQUFjO2tCQURwQixTQUFTO21CQUFDLFNBQVM7WUFJYixRQUFRO2tCQURkLFNBQVM7bUJBQUMsVUFBVTtZQUlkLGNBQWM7a0JBRHBCLFNBQVM7bUJBQUMsZ0JBQWdCO1lBSXBCLFlBQVk7a0JBRGxCLFNBQVM7bUJBQUMsY0FBYztZQU9sQixPQUFPO2tCQURiLGVBQWU7bUJBQUMsNEJBQTRCO1lBT3RDLGlDQUFpQztrQkFEdkMsS0FBSztZQUlDLGdCQUFnQjtrQkFEdEIsS0FBSztZQUlDLGVBQWU7a0JBRHJCLEtBQUs7WUFJQyxxQkFBcUI7a0JBRDNCLEtBQUs7WUFjQyxrQkFBa0I7a0JBRHhCLE1BQU07WUFJQyxlQUFlLE1BK0hmLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBBZnRlckNvbnRlbnRJbml0LFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgQ29udGVudENoaWxkcmVuLFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIEluamVjdG9yLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBRdWVyeUxpc3QsXHJcbiAgICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IERhdGVMaWtlIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9iYXNlL2RhdGUvZGF0ZS1saWtlJztcclxuaW1wb3J0IHsgRGF0ZVJhbmdlIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9iYXNlL2RhdGUvZGF0ZS1yYW5nZSc7XHJcbmltcG9ydCB7IFlpZWxkIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9iYXNlL2RlY29yYXRvcnMveWllbGQuZGVjb3JhdG9yJztcclxuaW1wb3J0IHsgS2V5Q29kZSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZGF0YS9hY2Nlc3NpYmlsaXR5LW1hbmFnZXInO1xyXG5pbXBvcnQgeyBEb20gfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2RvbS9kb20nO1xyXG5pbXBvcnQgeyBTbWVJbmplY3QgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vZGVjb3JhdG9ycy9pbmplY3Rpb24uZGVjb3JhdG9ycyc7XHJcbmltcG9ydCB7IERyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgRHJvcGRvd25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vZHJvcGRvd24vZHJvcGRvd24uc2VydmljZSc7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25BbGVydCwgVmFsaWRhdGlvbkFsZXJ0cywgVmFsaWRhdGlvbkFsZXJ0U2V2ZXJpdHkgfSBmcm9tICcuLi8uLi92YWxpZGF0aW9uLWFsZXJ0L3ZhbGlkYXRpb24tYWxlcnQnO1xyXG5pbXBvcnQgeyBEYXRlVGltZUZvcm1GaWVsZENvbXBvbmVudCB9IGZyb20gJy4uL2RhdGV0aW1lL2RhdGV0aW1lLWZvcm0tZmllbGQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2hlY2tWYWxpZGF0aW9uRXZlbnRBcmdzIH0gZnJvbSAnLi4vZm9ybS1maWVsZC12YWxpZGF0b3IuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgU21lSW50ZXJuYWxGb3JtRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi9mb3JtLWZpZWxkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERhdGVUaW1lUmFuZ2VPcHRpb25Db21wb25lbnQgfSBmcm9tICcuL2RhdGV0aW1lLXJhbmdlLW9wdGlvbi5jb21wb25lbnQnO1xyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVGltZUlTT0hpc3RvcnlEYXRhIHtcclxuICAgIGtleTogc3RyaW5nO1xyXG4gICAgdmFsdWU6IHN0cmluZztcclxufVxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnc21lLWZvcm0tZmllbGRbdHlwZT1cImRhdGV0aW1lcmFuZ2VcIl0nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RhdGV0aW1lLXJhbmdlLWZvcm0tZmllbGQuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXRlVGltZVJhbmdlRm9ybUZpZWxkQ29tcG9uZW50IGV4dGVuZHMgU21lSW50ZXJuYWxGb3JtRmllbGRDb21wb25lbnQ8RGF0ZVJhbmdlPiBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQge1xyXG4gICAgcHVibGljIHN0YXRpYyB0aW1lSVNPUGF0dGVybiA9IGB7MH0tezF9LXsyfVR7M306ezR9Ons1fWA7XHJcbiAgICBwdWJsaWMgc3RhdGljIHR3b0RpZ2l0UGF0dGVybiA9IGAwezB9YDtcclxuICAgIHB1YmxpYyBzdGF0aWMgdGltZUlTT0hpc3RvcnlMZW5ndGggPSAxMDA7XHJcbiAgICBwdWJsaWMgc3RhdGljIHN0YXJ0UHJvcGVydHkgPSAnc3RhcnQnO1xyXG4gICAgcHVibGljIHN0YXRpYyBlbmRQcm9wZXJ0eSA9ICdlbmQnO1xyXG5cclxuICAgIHB1YmxpYyBjdXN0b21UZXh0ID0gdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uRGF0ZVRpbWVSYW5nZS5DdXN0b20ubGFiZWw7XHJcbiAgICBwdWJsaWMgc3RhcnRUaW1lVGV4dCA9IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkRhdGVUaW1lUmFuZ2UuU3RhcnRUaW1lLmxhYmVsO1xyXG4gICAgcHVibGljIGVuZFRpbWVUZXh0ID0gdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uRGF0ZVRpbWVSYW5nZS5FbmRUaW1lLmxhYmVsO1xyXG4gICAgcHJpdmF0ZSBpbnZhbGlkU3RhcnRUaW1lVGV4dCA9IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkRhdGVUaW1lUmFuZ2UuSW52YWxpZC5TdGFydFRpbWU7XHJcbiAgICBwcml2YXRlIGludmFsaWRFbmRUaW1lVGV4dCA9IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkRhdGVUaW1lUmFuZ2UuSW52YWxpZC5FbmRUaW1lO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc291cmNlIG5hbWUgdG8gdXNlIGZvciBsb2dnaW5nXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXQgbG9nU291cmNlTmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gJ0RhdGVUaW1lUmFuZ2VGb3JtRmllbGRDb21wb25lbnQnO1xyXG4gICAgfVxyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2xpc3Rib3gnKVxyXG4gICAgcHVibGljIGxpc3Rib3hFbGVtZW50OiBFbGVtZW50UmVmO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2Ryb3BEb3duJylcclxuICAgIHB1YmxpYyBkcm9wRG93bjogRHJvcGRvd25Db21wb25lbnQ7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnc3RhcnRGb3JtRmllbGQnKVxyXG4gICAgcHVibGljIHN0YXJ0Rm9ybUZpZWxkOiBEYXRlVGltZUZvcm1GaWVsZENvbXBvbmVudDtcclxuXHJcbiAgICBAVmlld0NoaWxkKCdlbmRGb3JtRmllbGQnKVxyXG4gICAgcHVibGljIGVuZEZvcm1GaWVsZDogRGF0ZVRpbWVGb3JtRmllbGRDb21wb25lbnQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgb3B0aW9ucyBmb3IgdGhpcyBjb250cm9sLlxyXG4gICAgICovXHJcbiAgICBAQ29udGVudENoaWxkcmVuKERhdGVUaW1lUmFuZ2VPcHRpb25Db21wb25lbnQpXHJcbiAgICBwdWJsaWMgb3B0aW9uczogUXVlcnlMaXN0PERhdGVUaW1lUmFuZ2VPcHRpb25Db21wb25lbnQ+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGV0ZXJtaW5lIGlmIHRoZSBkcm9wZG93biB3aWxsIHVzZSB0aGUgc21lLWZvcm0tZmllbGQgdG8gbGltaXQgaXRzIG1heC13aWR0aFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGRyb3Bkb3duQXBwbHlGb3JtRmllbGRPZmZzZXRXaWR0aDogYm9vbGVhbjtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNob3dDdXN0b21PcHRpb246IGJvb2xlYW47XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBjdXN0b21EYXRlUmFuZ2U6IERhdGVSYW5nZTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNob3dDdXN0b21EaXNwbGF5VGV4dCA9IHRydWU7XHJcblxyXG5cclxuICAgIC8vIFRPRE86IG5lZWQgdG8gdXBkYXRlIHRoZSBkYXRlIHBpY2tlciB0byBkZWFsIHdpdGggdGltZXpvbmVcclxuICAgIHB1YmxpYyBnZXQgY3VzdG9tRGF0ZVJhbmdlU3RhcnQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50aW1lSVNPVHJhbnNsYXRvcih0aGlzLmN1c3RvbURhdGVSYW5nZS5zdGFydCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBjdXN0b21EYXRlUmFuZ2VFbmQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50aW1lSVNPVHJhbnNsYXRvcih0aGlzLmN1c3RvbURhdGVSYW5nZS5lbmQpO1xyXG4gICAgfVxyXG5cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIGN1c3RvbUxhYmVsRW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgICBAU21lSW5qZWN0KERyb3Bkb3duU2VydmljZSlcclxuICAgIHByaXZhdGUgZHJvcGRvd25TZXJ2aWNlOiBEcm9wZG93blNlcnZpY2U7XHJcblxyXG4gICAgLy8gRGVhbCB3aXRoIHNjYWxhYmlsaXR5XHJcbiAgICAvLyBEbyBub3QgbmVlZCB0byBjYWxsIGR1cGxpY2F0ZWQgZnVuY3Rpb24gYWdhaW4gYW5kIGFnYWluXHJcbiAgICAvLyBQb29sIHNpemUgZm9yIG5vdyBzZXQgYXQgMTAwXHJcbiAgICBwcml2YXRlIHRpbWVJU09IaXN0b3J5OiBBcnJheTxUaW1lSVNPSGlzdG9yeURhdGE+ID0gW107XHJcbiAgICBwcml2YXRlIGdldFRpbWVIaXN0b3J5KGlucHV0OiBEYXRlKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgcmVzID0gJyc7XHJcbiAgICAgICAgY29uc3QgaGlzdG9yeSA9IHRoaXMudGltZUlTT0hpc3RvcnkuZmlsdGVyKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtLmtleSA9PT0gaW5wdXQuZ2V0VGltZSgpLnRvU3RyaW5nKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlbMF07XHJcblxyXG4gICAgICAgIGlmIChoaXN0b3J5KSB7XHJcbiAgICAgICAgICAgIHJlcyA9IGhpc3RvcnkudmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzZXRUaW1lSGlzdG9yeShrZXk6IERhdGUsIHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBoaXN0b3J5ID0gdGhpcy50aW1lSVNPSGlzdG9yeS5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0ua2V5ID09PSBrZXkuZ2V0VGltZSgpLnRvU3RyaW5nKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlbMF07XHJcbiAgICAgICAgaWYgKCFoaXN0b3J5KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRpbWVJU09IaXN0b3J5XHJcbiAgICAgICAgICAgICAgICAmJiB0aGlzLnRpbWVJU09IaXN0b3J5Lmxlbmd0aCA+PSBEYXRlVGltZVJhbmdlRm9ybUZpZWxkQ29tcG9uZW50LnRpbWVJU09IaXN0b3J5TGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRpbWVJU09IaXN0b3J5LnVuc2hpZnQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnRpbWVJU09IaXN0b3J5LnB1c2goe1xyXG4gICAgICAgICAgICAgICAga2V5OiBrZXkuZ2V0VGltZSgpLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gVE9ETzogbmVlZCBzdXBwb3J0IGZvciAyNCBob3VycyB2cyAxMiBob3VycyB3aXRoIGFtL3BtLlxyXG4gICAgcHJpdmF0ZSB0aW1lSVNPVHJhbnNsYXRvcihpbnB1dDogRGF0ZSkge1xyXG4gICAgICAgIGxldCByZXMgPSB0aGlzLmdldFRpbWVIaXN0b3J5KGlucHV0KTtcclxuICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJhd1llYXIgPSBpbnB1dC5nZXRGdWxsWWVhcigpO1xyXG4gICAgICAgIGNvbnN0IHJhd01vbnRoID0gaW5wdXQuZ2V0TW9udGgoKSArIDE7XHJcbiAgICAgICAgY29uc3QgbW9udGggPSByYXdNb250aCA8IDEwID8gRGF0ZVRpbWVSYW5nZUZvcm1GaWVsZENvbXBvbmVudC50d29EaWdpdFBhdHRlcm4uZm9ybWF0KHJhd01vbnRoKSA6IHJhd01vbnRoO1xyXG4gICAgICAgIGNvbnN0IHJhd0RheSA9IGlucHV0LmdldERhdGUoKTtcclxuICAgICAgICBjb25zdCBkYXkgPSByYXdEYXkgPCAxMCA/IERhdGVUaW1lUmFuZ2VGb3JtRmllbGRDb21wb25lbnQudHdvRGlnaXRQYXR0ZXJuLmZvcm1hdChyYXdEYXkpIDogcmF3RGF5O1xyXG4gICAgICAgIGNvbnN0IHJhd0hvdXIgPSBpbnB1dC5nZXRIb3VycygpO1xyXG4gICAgICAgIGNvbnN0IGhvdXIgPSByYXdIb3VyIDwgMTAgPyBEYXRlVGltZVJhbmdlRm9ybUZpZWxkQ29tcG9uZW50LnR3b0RpZ2l0UGF0dGVybi5mb3JtYXQocmF3SG91cikgOiByYXdIb3VyO1xyXG4gICAgICAgIGNvbnN0IHJhd01pbnV0ZSA9IGlucHV0LmdldE1pbnV0ZXMoKTtcclxuICAgICAgICBjb25zdCBtaW51dGUgPSByYXdNaW51dGUgPCAxMCA/IERhdGVUaW1lUmFuZ2VGb3JtRmllbGRDb21wb25lbnQudHdvRGlnaXRQYXR0ZXJuLmZvcm1hdChyYXdNaW51dGUpIDogcmF3TWludXRlO1xyXG4gICAgICAgIGNvbnN0IHJhd1NlY29uZCA9IGlucHV0LmdldFNlY29uZHMoKTtcclxuICAgICAgICBjb25zdCBzZWNvbmQgPSByYXdTZWNvbmQgPCAxMCA/IERhdGVUaW1lUmFuZ2VGb3JtRmllbGRDb21wb25lbnQudHdvRGlnaXRQYXR0ZXJuLmZvcm1hdChyYXdTZWNvbmQpIDogcmF3U2Vjb25kO1xyXG4gICAgICAgIHJlcyA9IERhdGVUaW1lUmFuZ2VGb3JtRmllbGRDb21wb25lbnQudGltZUlTT1BhdHRlcm4uZm9ybWF0KHJhd1llYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKTtcclxuICAgICAgICB0aGlzLnNldFRpbWVIaXN0b3J5KGlucHV0LCByZXMpO1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBkaXNwbGF5VmFsdWUoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5zaG93Q3VzdG9tRGlzcGxheVRleHQgJiYgKHRoaXMuaXNTZWxlY3RlZCh0aGlzLmN1c3RvbURhdGVSYW5nZSkgfHwgIXRoaXMub3B0aW9ucy5sZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1c3RvbVRleHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gdGhpcy5vcHRpb25zLmZpbmQob3B0aW9uID0+IHRoaXMuaXNTZWxlY3RlZChvcHRpb24uZGF0ZVJhbmdlKSk7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkT3B0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZE9wdGlvbi5sYWJlbDtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2hvd0N1c3RvbURpc3BsYXlUZXh0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1c3RvbVRleHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSA/IHRoaXMudmFsdWUudG9TdHJpbmcoKSA6ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcclxuICAgICAgICB0aGlzLmRyb3Bkb3duQXBwbHlGb3JtRmllbGRPZmZzZXRXaWR0aCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zaG93Q3VzdG9tT3B0aW9uID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgIHRoaXMuY3VzdG9tRGF0ZVJhbmdlID0gbmV3IERhdGVSYW5nZShub3csIG5vdyArICg2MCAqIDYwICogMTAwMCkpOyAvLyBub3cgdG8gbm93ICsgMSBob3VyXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzU2VsZWN0ZWQoZGF0ZVJhbmdlOiBEYXRlUmFuZ2UpIHtcclxuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucyB8fCAhdGhpcy5vcHRpb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGRhdGVSYW5nZSAmJiBkYXRlUmFuZ2Uuc3RhcnQgJiYgZGF0ZVJhbmdlLmVuZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0ZVJhbmdlLmlzRXF1YWxUbyh0aGlzLnZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlVmFsdWUodmFsdWU6IERhdGVSYW5nZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURyb3Bkb3duUG9zaXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCkge1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMub3B0aW9ucy5jaGFuZ2VzLnN1YnNjcmliZSh2YWwgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY3VzdG9tRGF0ZVJhbmdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmN1c3RvbURhdGVSYW5nZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uQ3VzdG9tRGF0ZVJhbmdlQ2hhbmdlZChmaWVsZE5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHN3aXRjaCAoZmllbGROYW1lKSB7XHJcbiAgICAgICAgICAgIGNhc2UgRGF0ZVRpbWVSYW5nZUZvcm1GaWVsZENvbXBvbmVudC5zdGFydFByb3BlcnR5OiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbURhdGVSYW5nZS5zdGFydCA9IG5ldyBEYXRlKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgRGF0ZVRpbWVSYW5nZUZvcm1GaWVsZENvbXBvbmVudC5lbmRQcm9wZXJ0eToge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXN0b21EYXRlUmFuZ2UuZW5kID0gbmV3IERhdGUodmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gQWx3YXlzIG5vdGlmeSB0aGUgY2hhbmdlIHRvIHRoZSBwYXJlbnRcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5jdXN0b21EYXRlUmFuZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgQFlpZWxkKClcclxuICAgIHByaXZhdGUgdXBkYXRlRHJvcGRvd25Qb3NpdGlvbigpIHtcclxuICAgICAgICB0aGlzLmRyb3Bkb3duU2VydmljZS51cGRhdGVQb3NpdGlvbih0aGlzLmRyb3BEb3duKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgb25WYWx1ZUNoYW5nZWQodmFsdWU6IERhdGVSYW5nZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbHVlICYmICF0aGlzLm9wdGlvbnMuc29tZShvcHRpb24gPT4gb3B0aW9uLmRhdGVSYW5nZS5pc0VxdWFsVG8odmFsdWUpKSkge1xyXG4gICAgICAgICAgICB0aGlzLmN1c3RvbURhdGVSYW5nZS5zdGFydCA9IHZhbHVlLnN0YXJ0O1xyXG4gICAgICAgICAgICB0aGlzLmN1c3RvbURhdGVSYW5nZS5lbmQgPSB2YWx1ZS5lbmQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gdGhpcy5vcHRpb25zLmZpbmQoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZGF0ZVJhbmdlLmlzRXF1YWxUbyh2YWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkT3B0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tTGFiZWxFbWl0dGVyLmVtaXQoc2VsZWN0ZWRPcHRpb24ubGFiZWwpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tTGFiZWxFbWl0dGVyLmVtaXQodGhpcy5jdXN0b21UZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3VwZXIub25WYWx1ZUNoYW5nZWQodmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyB0aGUgaWRCYWcgdXNlZCBieSB0aGlzIGNvbXBvbmVudCB0byBzdG9yZSB1bmlxdWUgZWxlbWVudCBpZHMuXHJcbiAgICAgKiBpZCB2YWx1ZXMgd2lsbCBiZSBhc3NpZ25lZCBiZSB0aGUgQHNlZSBCYXNlQ29tcG9uZW50IHN1cGVyIGNsYXNzLlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlSWRCYWcoKTogTXNmdFNtZS5TdHJpbmdNYXA8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZGV0YWlsc1NwYW46ICcnLFxyXG4gICAgICAgICAgICBncm91cE5hbWU6ICcnLFxyXG4gICAgICAgICAgICBkcm9wRG93bkNvbnRlbnQ6ICcnLFxyXG4gICAgICAgICAgICBzdGFydFRpbWVJbnB1dDogJycsXHJcbiAgICAgICAgICAgIGVuZFRpbWVJbnB1dDogJydcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGVyZm9ybXMgdmFsaWRhdGlvbiB0aGF0IGlzIGludGVybmFsIHRvIHRoaXMgY29udHJvbFxyXG4gICAgICogQHBhcmFtIGMgVGhlIGZvcm0gY29udHJvbCBhdHRhY2hlZCB0byB0aGlzIGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCB2YWxpZGF0ZShjOiBGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25BbGVydHMge1xyXG4gICAgICAgIGlmICh0aGlzLnJlcXVpcmVkKSB7XHJcbiAgICAgICAgICAgIGlmIChNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMudmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyByZXF1aXJlZDogdHJ1ZSB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy52YWx1ZSAmJiB0aGlzLnZhbHVlLmlzVmFsaWQoKSkge1xyXG4gICAgICAgICAgICBsZXQgYWxlcnQgPSB0aGlzLnZhbGlkYXRlU3RhcnREYXRlKCk7XHJcbiAgICAgICAgICAgIGlmIChhbGVydCkgeyByZXR1cm4geyBpbnZhbGlkVGltZXJhbmdlOiBhbGVydCB9OyB9XHJcblxyXG4gICAgICAgICAgICBhbGVydCA9IHRoaXMudmFsaWRhdGVFbmREYXRlKCk7XHJcbiAgICAgICAgICAgIGlmIChhbGVydCkgeyByZXR1cm4geyBpbnZhbGlkVGltZXJhbmdlOiBhbGVydCB9OyB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc3VwZXIudmFsaWRhdGUoYyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uQ3VzdG9tVmFsaWRhdGUoZXZlbnQ6IENoZWNrVmFsaWRhdGlvbkV2ZW50QXJncywgbmFtZTogc3RyaW5nLCB2YWx1ZT86IERhdGVMaWtlKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgYWxlcnRzOiBWYWxpZGF0aW9uQWxlcnRzID0ge307XHJcbiAgICAgICAgaWYgKG5hbWUgPT09IERhdGVUaW1lUmFuZ2VGb3JtRmllbGRDb21wb25lbnQuc3RhcnRQcm9wZXJ0eSkge1xyXG4gICAgICAgICAgICBjb25zdCBhbGVydCA9IHRoaXMudmFsaWRhdGVTdGFydERhdGUobmV3IERhdGUoZXZlbnQuZm9ybUNvbnRyb2wudmFsdWUpKTtcclxuICAgICAgICAgICAgaWYgKGFsZXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydHNbJ2ludmFsaWREYXRlUmFuZ2UnXSA9IGFsZXJ0O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmVuZEZvcm1GaWVsZC5uZ01vZGVsLnZhbGlkICYmIHRoaXMuc3RhcnRGb3JtRmllbGQubmdNb2RlbC5jb250cm9sLmVycm9ycykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kRm9ybUZpZWxkLm5nTW9kZWwuY29udHJvbC5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09IERhdGVUaW1lUmFuZ2VGb3JtRmllbGRDb21wb25lbnQuZW5kUHJvcGVydHkpIHtcclxuICAgICAgICAgICAgY29uc3QgYWxlcnQgPSB0aGlzLnZhbGlkYXRlRW5kRGF0ZShuZXcgRGF0ZShldmVudC5mb3JtQ29udHJvbC52YWx1ZSkpO1xyXG4gICAgICAgICAgICBpZiAoYWxlcnQpIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0c1snaW52YWxpZERhdGVSYW5nZSddID0gYWxlcnQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc3RhcnRGb3JtRmllbGQubmdNb2RlbC52YWxpZCAmJiB0aGlzLnN0YXJ0Rm9ybUZpZWxkLm5nTW9kZWwuY29udHJvbC5lcnJvcnMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0Rm9ybUZpZWxkLm5nTW9kZWwuY29udHJvbC5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIE1zZnRTbWUuZGVlcEFzc2lnbihldmVudC5hbGVydHMsIGFsZXJ0cyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZVN0YXJ0RGF0ZShzdGFydERhdGU/OiBEYXRlKTogVmFsaWRhdGlvbkFsZXJ0IHwgbnVsbCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlIHx8IE1zZnRTbWUuaXNOdWxsT3JVbmRlZmluZWQodGhpcy52YWx1ZS5zdGFydCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBzdGFydFRpbWUgPSB0aGlzLnZhbHVlLnN0YXJ0O1xyXG4gICAgICAgIGlmIChzdGFydERhdGUpIHtcclxuICAgICAgICAgICAgc3RhcnRUaW1lID0gc3RhcnREYXRlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc3RhcnRUaW1lICYmIHRoaXMudmFsdWUuZW5kICYmIHN0YXJ0VGltZS52YWx1ZU9mKCkgPiB0aGlzLnZhbHVlLmVuZC52YWx1ZU9mKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMuaW52YWxpZFN0YXJ0VGltZVRleHQsXHJcbiAgICAgICAgICAgICAgICBzZXZlcml0eTogVmFsaWRhdGlvbkFsZXJ0U2V2ZXJpdHkuRXJyb3JcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZUVuZERhdGUoZW5kRGF0ZT86IERhdGUpOiBWYWxpZGF0aW9uQWxlcnQgfCBudWxsIHtcclxuICAgICAgICBpZiAoIXRoaXMudmFsdWUgfHwgTXNmdFNtZS5pc051bGxPclVuZGVmaW5lZCh0aGlzLnZhbHVlLmVuZCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBlbmRUaW1lID0gdGhpcy52YWx1ZS5lbmQ7XHJcbiAgICAgICAgaWYgKGVuZERhdGUpIHtcclxuICAgICAgICAgICAgZW5kVGltZSA9IGVuZERhdGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlLnN0YXJ0ICYmIGVuZFRpbWUgJiYgdGhpcy52YWx1ZS5zdGFydC52YWx1ZU9mKCkgPiBlbmRUaW1lLnZhbHVlT2YoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5pbnZhbGlkRW5kVGltZVRleHQsXHJcbiAgICAgICAgICAgICAgICBzZXZlcml0eTogVmFsaWRhdGlvbkFsZXJ0U2V2ZXJpdHkuRXJyb3JcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gYWNjZXNzaWJpbGl0eVxyXG4gICAgcHVibGljIG9uVG9nZ2xlS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5Q29kZSkge1xyXG4gICAgICAgICAgICBjYXNlIEtleUNvZGUuRW50ZXI6XHJcbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5TcGFjZToge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcm9wRG93bi5vblRvZ2dsZUNsaWNrKGV2ZW50LCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5Eb3duQXJyb3c6IHtcclxuICAgICAgICAgICAgICAgIGlmIChldmVudC5hbHRLZXkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyb3BEb3duLm9uVG9nZ2xlQ2xpY2soZXZlbnQsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gaGFuZGxlIGFsbCBrZXlzXHJcbiAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25SYWRpb0dyb3VwT3B0aW9uS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5Q29kZSkge1xyXG4gICAgICAgICAgICAvLyBvdmVycmlkZXMgdGhlIHRhYiBmdW5jdGlvblxyXG4gICAgICAgICAgICBjYXNlIEtleUNvZGUuVGFiOiB7XHJcbiAgICAgICAgICAgICAgICAvLyBwcmV2ZW50IGZvY3VzIG9uIHRoZSBuZXh0IGVsZW1lbnQgaW4gdGhlIHBhcmVudCB0cmFwXHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2FuRm9jdXNPblN0YXJ0VGltZVJhbmdlUGlja2VyKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uRGF0ZVBpY2tlcktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGlucHV0OiBzdHJpbmcpIHtcclxuICAgICAgICAvLyBhbGxvdyBlc2NhcGUgYW5kIGFsdCBhcnJvdyB1cCB0byByZXRyYWN0IHRoZSBkYXRldGltZSByYW5nZSBmaWVsZHMgYXMgd2VsbC4gT25seSByZW1vdmUgaWYgdGhlIGRhdGV0aW1lIGNvbnRyb2xzIGFyZSBub3Qgb3Blbi5cclxuICAgICAgICBpZiAoKGV2ZW50LmtleUNvZGUgPT09IEtleUNvZGUuRXNjYXBlKSB8fCAoZXZlbnQua2V5Q29kZSA9PT0gS2V5Q29kZS5VcEFycm93ICYmIGV2ZW50LmFsdEtleSkpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0Rm9ybUZpZWxkLmRyb3BEb3duLmlzT3BlbiAmJiAhdGhpcy5lbmRGb3JtRmllbGQuZHJvcERvd24uaXNPcGVuKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kcm9wRG93biAmJiB0aGlzLmRyb3BEb3duLmNvbnRlbnRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dEVsZW1lbnQgPSBEb20uZ2V0TmV4dEZvY3VzYWJsZUVsZW1lbnQodGhpcy5kcm9wRG93bi5jb250ZW50RWxlbWVudC5uYXRpdmVFbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRyb3BEb3duLm9uVG9nZ2xlQ2xpY2soZXZlbnQsIHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGFsbG93IHNoaWZ0K3RhYiB0byB0YWtlIGZvY3VzIGJhY2sgdG8gc3RhcnRGb3JtRmllbGQgd2hpbGUgYXQgZW5kRm9ybUZpZWxkXHJcbiAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleUNvZGUgPT09IEtleUNvZGUuVGFiIHx8IGV2ZW50LmtleUNvZGUgIT09IEtleUNvZGUuVGFiKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBwcmV2ZW50IGZvY3VzIG9uIHRoZSBuZXh0IGVsZW1lbnQgaW4gdGhlIHBhcmVudCB0cmFwXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrSXNMYXN0RWxlbWVudEluRGF0YVJhbmdlUGlja2VyVHJhcCgpKSB7XHJcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNoZWNrSXNMYXN0RWxlbWVudEluRGF0YVJhbmdlUGlja2VyVHJhcCgpIHtcclxuICAgICAgICBjb25zdCBkb20gPSBEb207XHJcbiAgICAgICAgY29uc3QgY3VycmVudEZvY3VzID0gPEhUTUxFbGVtZW50PmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgbmV4dEVsZW1lbnQgPSBkb20uZ2V0TmV4dEZvY3VzYWJsZUVsZW1lbnRJblRyYXAoY3VycmVudEZvY3VzKTtcclxuICAgICAgICAvLyBUaGUgbGFzdCBpdGVtIGluc2lkZSBvZiB0aGUgZHJvcGRvd24sIGV4cGVjdGVkIHRvIHN0YXkgYXQgdGhlIGxhc3QgaXRlbVxyXG4gICAgICAgIGlmIChjdXJyZW50Rm9jdXMgPT09IG5leHRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjYW5Gb2N1c09uU3RhcnRUaW1lUmFuZ2VQaWNrZXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhcnRGb3JtRmllbGQgJiYgdGhpcy5lbmRGb3JtRmllbGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxufVxyXG4iLCI8c21lLWZvcm0tZmllbGQtbGF5b3V0IFtmb3JtRmllbGRdPVwidGhpc1wiPlxyXG4gIDxzbWUtZHJvcGRvd24gI2Ryb3BEb3duIFthdXRvVG9nZ2xlXT1cImZhbHNlXCIgY2xhc3M9XCJzbWUtY29tYm9ib3ggc21lLWZvY3VzLXpvbmVcIiBbZGlzYWJsZWRdPVwibG9hZGluZ09yRGlzYWJsZWRcIlxyXG4gICAgW2Ryb3Bkb3duQXBwbHlGb3JtRmllbGRPZmZzZXRXaWR0aF09XCJkcm9wZG93bkFwcGx5Rm9ybUZpZWxkT2Zmc2V0V2lkdGhcIj5cclxuICAgIDxkaXYgI2Ryb3Bkb3duSGVhZGVyIGNsYXNzPVwic21lLWNvbWJvYm94LWhlYWRlciBzbWUtZHJvcGRvd24tdG9nZ2xlXCIgKGtleWRvd24pPVwib25Ub2dnbGVLZXlkb3duKCRldmVudClcIj5cclxuICAgICAgPGlucHV0ICN0ZXh0SW5wdXQgdHlwZT1cInRleHRcIiByb2xlPVwiY29tYm9ib3hcIiBbdmFsdWVdPVwiZGlzcGxheVZhbHVlXCIgcmVhZG9ubHlcclxuICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cImlkQmFnLmRyb3BEb3duQ29udGVudFwiXHJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJsYWJlbFwiXHJcbiAgICAgICAgW2F0dHIuYXJpYS1yZXF1aXJlZF09J3JlcXVpcmVkJ1xyXG4gICAgICAgIFthdHRyLmRpc2FibGVkXT1cImxvYWRpbmdPckRpc2FibGVkID8gdHJ1ZSA6IG51bGxcIiBcclxuICAgICAgICBbYXR0ci5hcmlhLW93bnNdPVwiaWRCYWcuZHJvcERvd25Db250ZW50XCIgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJkcm9wRG93bi5pc09wZW5cIlxyXG4gICAgICAgIFthdHRyLmFyaWEtYXV0b2NvbXBsZXRlXT1cIidub25lJ1wiIChjbGljayk9XCJkcm9wRG93bi5vblRvZ2dsZUNsaWNrKCRldmVudCwgdHJ1ZSlcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgIGF1dG9jYXBpdGFsaXplPVwib2ZmXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCIgLz5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgW2F0dHIuZGlzYWJsZWRdPVwibG9hZGluZ09yRGlzYWJsZWQgPyB0cnVlIDogbnVsbFwiIHRhYmluZGV4PVwiLTFcIiByb2xlPVwicHJlc2VudGF0aW9uXCJcclxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIiBbYXR0ci5hcmlhLXByZXNzZWRdPVwiZHJvcERvd24uaXNPcGVuXCIgW2NsYXNzLnNtZS10b2dnbGVkXT1cImRyb3BEb3duLmlzT3BlblwiXHJcbiAgICAgICAgY2xhc3M9XCJzbWUtYnV0dG9uLXRyaWdnZXIgc21lLWJ1dHRvbi1hdXRvLXdpZHRoXCIgKGNsaWNrKT1cImRyb3BEb3duLm9uVG9nZ2xlQ2xpY2soJGV2ZW50LCB0cnVlKVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic21lLWljb24gc21lLWljb24tY2hldnJvbkRvd25cIj48L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tIFRoZSBtaW5pbXVtIG9mIHdpZHRoIHRoYXQgYSBkcm9wZG93biBjYW4gYmUgaXMgc2V0IGF0IDIyMHB4IC0tPlxyXG4gICAgPCEtLSBHdWFyYW50ZWUgZHJvcGRvd24gY29udGVudCB3aWR0aCBjYW4gbm90IGdvIGJlbG93IHRoaXMgdmFsdWUgbm8gbWF0dGVyIGhvdyBzbWFsbCB0aGUgd2luZG93IGlzIHNldCBhdCAtLT5cclxuICAgIDwhLS0gT3RoZXJ3aXNlIHdpbGwgZGlzcGxheSBncmF5IG1hcmdpbiB0byB0aGUgcmlnaHQgb2YgdGhlIGRyb3Bkb3duIGNvbnRlbnQgb24gc21hbGwgd2luZG93IC0tPlxyXG4gICAgPGRpdiAjbGlzdGJveCByb2xlPVwibGlzdGJveFwiIGNsYXNzPVwic21lLWRyb3Bkb3duLWNvbnRlbnQgc21lLWRyb3Bkb3duLWludGVyYWN0aW9uLWVuYWJsZWQgc21lLXBhZGRpbmctc3F1aXNoLXYtc21cIlxyXG4gICAgICBbbmdTdHlsZV09XCJkcm9wZG93bkFwcGx5Rm9ybUZpZWxkT2Zmc2V0V2lkdGggJiYgeyAnbWF4LXdpZHRoLnB4JzogZHJvcGRvd25IZWFkZXIub2Zmc2V0V2lkdGggPiAyMjAgPyBkcm9wZG93bkhlYWRlci5vZmZzZXRXaWR0aCA6IDIyMH0gfHwgIWRyb3Bkb3duQXBwbHlGb3JtRmllbGRPZmZzZXRXaWR0aCAmJiB7ICdtYXgtd2lkdGgnOiAnaW5pdGlhbCcgfVwiXHJcbiAgICAgIFtpZF09XCJpZEJhZy5kcm9wRG93bkNvbnRlbnRcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvbnMgJiYgb3B0aW9ucy5sZW5ndGhcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygb3B0aW9uczsgbGV0IG9wdGlvbkluZGV4ID0gaW5kZXhcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbWUtcmFkaW9cIj5cclxuICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBbYXR0ci5hcmlhLWxhYmVsXT1cIm9wdGlvbi5sYWJlbFwiIFthdHRyLm5hbWVdPVwiaWRCYWcuZ3JvdXBOYW1lXCJcclxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzU2VsZWN0ZWQob3B0aW9uLmRhdGVSYW5nZSlcIiAoY2xpY2spPVwidXBkYXRlVmFsdWUob3B0aW9uLmRhdGVSYW5nZSlcIlxyXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jaGVja2VkXT1cImlzU2VsZWN0ZWQob3B0aW9uLmRhdGVSYW5nZSlcIiBbbmFtZV09XCJpZEJhZy5ncm91cE5hbWVcIlxyXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJyZXF1aXJlZFwiIFtkaXNhYmxlZF09XCJsb2FkaW5nT3JEaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvblJhZGlvR3JvdXBPcHRpb25LZXlkb3duKCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj57e29wdGlvbi5sYWJlbH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInNtZS1yYWRpbyBzbWUtZHJvcGRvd24taW50ZXJhY3Rpb24tZW5hYmxlZFwiICpuZ0lmPVwic2hvd0N1c3RvbU9wdGlvbiAmJiBvcHRpb25zICYmIG9wdGlvbnMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBbYXR0ci5hcmlhLWxhYmVsXT1cImN1c3RvbVRleHRcIiBbYXR0ci5hcmlhLWNoZWNrZWRdPVwiaXNTZWxlY3RlZChjdXN0b21EYXRlUmFuZ2UpXCJcclxuICAgICAgICAgICAgW2F0dHIubmFtZV09XCJpZEJhZy5ncm91cE5hbWVcIiBbbmFtZV09XCJpZEJhZy5ncm91cE5hbWVcIiBbY2hlY2tlZF09XCJpc1NlbGVjdGVkKGN1c3RvbURhdGVSYW5nZSlcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwidXBkYXRlVmFsdWUoY3VzdG9tRGF0ZVJhbmdlKVwiIFthdHRyLmFyaWEtcmVxdWlyZWRdPVwicmVxdWlyZWRcIiBbZGlzYWJsZWRdPVwibG9hZGluZ09yRGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJvblJhZGlvR3JvdXBPcHRpb25LZXlkb3duKCRldmVudClcIj5cclxuICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPnt7dGhpcy5jdXN0b21UZXh0fX08L3NwYW4+XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZmllbGRzZXQgKm5nSWY9XCJpc1NlbGVjdGVkKGN1c3RvbURhdGVSYW5nZSkgfHwgIW9wdGlvbnMgfHwgb3B0aW9ucy5sZW5ndGggPT09IDBcIiBjbGFzcz1cInNtZS1mb2N1cy10cmFwXCJcclxuICAgICAgICBbY2xhc3Muc21lLXN1YmZvcm0taW5kZW50LW5vbmVdPVwiIW9wdGlvbnMgfHwgb3B0aW9ucy5sZW5ndGggPT09IDBcIiBbZGlzYWJsZWRdPVwibG9hZGluZ09yRGlzYWJsZWRcIj5cclxuICAgICAgICA8c21lLWZvcm0tZmllbGQgI3N0YXJ0Rm9ybUZpZWxkICpuZ0lmPVwiY3VzdG9tRGF0ZVJhbmdlICYmIGN1c3RvbURhdGVSYW5nZS5zdGFydFwiXHJcbiAgICAgICAgICBjbGFzcz1cInNtZS1kcm9wZG93bi1pbnRlcmFjdGlvbi1lbmFibGVkXCIgdHlwZT1cImRhdGV0aW1lXCIgW2xhYmVsXT1cInN0YXJ0VGltZVRleHRcIlxyXG4gICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiIFtuZ01vZGVsXT1cImN1c3RvbURhdGVSYW5nZVN0YXJ0XCJcclxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ3VzdG9tRGF0ZVJhbmdlQ2hhbmdlZCgnc3RhcnQnLCAkZXZlbnQpXCIgW2lkXT1cImlkQmFnLnN0YXJ0VGltZUlucHV0XCJcclxuICAgICAgICAgIChjdXN0b21WYWxpZGF0ZSk9XCJvbkN1c3RvbVZhbGlkYXRlKCRldmVudCwgJ3N0YXJ0JylcIiAoa2V5ZG93bik9XCJvbkRhdGVQaWNrZXJLZXlkb3duKCRldmVudCwgJ3N0YXJ0JylcIj5cclxuICAgICAgICA8L3NtZS1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDxzbWUtZm9ybS1maWVsZCAjZW5kRm9ybUZpZWxkICpuZ0lmPVwiY3VzdG9tRGF0ZVJhbmdlICYmIGN1c3RvbURhdGVSYW5nZS5lbmRcIlxyXG4gICAgICAgICAgY2xhc3M9XCJzbWUtZHJvcGRvd24taW50ZXJhY3Rpb24tZW5hYmxlZFwiIHR5cGU9XCJkYXRldGltZVwiIFtsYWJlbF09XCJlbmRUaW1lVGV4dFwiXHJcbiAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCIgW25nTW9kZWxdPVwiY3VzdG9tRGF0ZVJhbmdlRW5kXCJcclxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ3VzdG9tRGF0ZVJhbmdlQ2hhbmdlZCgnZW5kJywgJGV2ZW50KVwiIFtpZF09XCJpZEJhZy5lbmRUaW1lSW5wdXRcIlxyXG4gICAgICAgICAgKGN1c3RvbVZhbGlkYXRlKT1cIm9uQ3VzdG9tVmFsaWRhdGUoJGV2ZW50LCAnZW5kJylcIiAoa2V5ZG93bik9XCJvbkRhdGVQaWNrZXJLZXlkb3duKCRldmVudCwgJ2VuZCcpXCI+XHJcbiAgICAgICAgPC9zbWUtZm9ybS1maWVsZD5cclxuICAgICAgPC9maWVsZHNldD5cclxuICAgIDwvZGl2PlxyXG4gIDwvc21lLWRyb3Bkb3duPlxyXG4gIDxzbWUtdmFsaWRhdGlvbi1hbGVydCBbYWxlcnRdPVwiYWxlcnRcIj48L3NtZS12YWxpZGF0aW9uLWFsZXJ0PlxyXG48L3NtZS1mb3JtLWZpZWxkLWxheW91dD5cclxuIl19
559
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUtcmFuZ2UtZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvZGF0ZXRpbWUtcmFuZ2UvZGF0ZXRpbWUtcmFuZ2UtZm9ybS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvZGF0ZXRpbWUtcmFuZ2UvZGF0ZXRpbWUtcmFuZ2UtZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixRQUFRLEVBQ1IsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUMxRixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMEVBQTBFLENBQUM7QUFDakcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBQzlGLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN2RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saURBQWlELENBQUM7QUFDNUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3JFLE9BQU8sRUFBcUMsdUJBQXVCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNySCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUV2RixPQUFPLEVBQUUsNkJBQTZCLEVB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TztrQkFEYixlQUFlO21CQUFDLDRCQUE0QjtZQU90QyxpQ0FBaUM7a0JBRHZDLEtBQUs7WUFJQyxnQkFBZ0I7a0JBRHRCLEtBQUs7WUFJQyxlQUFlO2tCQURyQixLQUFLO1lBSUMscUJBQXFCO2tCQUQzQixLQUFLO1lBY0Msa0JBQWtCO2tCQUR4QixNQUFNO1lBSUMsZUFBZSxNQStIZixzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcclxuICAgIENvbXBvbmVudCxcclxuICAgIENvbnRlbnRDaGlsZHJlbixcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBJbmplY3RvcixcclxuICAgIElucHV0LFxyXG4gICAgT3V0cHV0LFxyXG4gICAgUXVlcnlMaXN0LFxyXG4gICAgVmlld0NoaWxkXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBEYXRlTGlrZSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvYmFzZS9kYXRlL2RhdGUtbGlrZSc7XHJcbmltcG9ydCB7IERhdGVSYW5nZSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvYmFzZS9kYXRlL2RhdGUtcmFuZ2UnO1xyXG5pbXBvcnQgeyBZaWVsZCB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvYmFzZS9kZWNvcmF0b3JzL3lpZWxkLmRlY29yYXRvcic7XHJcbmltcG9ydCB7IEtleUNvZGUgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2RhdGEvYWNjZXNzaWJpbGl0eS1tYW5hZ2VyJztcclxuaW1wb3J0IHsgRG9tIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kb20vZG9tJztcclxuaW1wb3J0IHsgU21lSW5qZWN0IH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2RlY29yYXRvcnMvaW5qZWN0aW9uLmRlY29yYXRvcnMnO1xyXG5pbXBvcnQgeyBEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERyb3Bkb3duU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2Ryb3Bkb3duL2Ryb3Bkb3duLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uQWxlcnQsIFZhbGlkYXRpb25BbGVydHMsIFZhbGlkYXRpb25BbGVydFNldmVyaXR5IH0gZnJvbSAnLi4vLi4vdmFsaWRhdGlvbi1hbGVydC92YWxpZGF0aW9uLWFsZXJ0JztcclxuaW1wb3J0IHsgRGF0ZVRpbWVGb3JtRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi9kYXRldGltZS9kYXRldGltZS1mb3JtLWZpZWxkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENoZWNrVmFsaWRhdGlvbkV2ZW50QXJncyB9IGZyb20gJy4uL2Zvcm0tZmllbGQtdmFsaWRhdG9yLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFNtZUludGVybmFsRm9ybUZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vZm9ybS1maWVsZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEYXRlVGltZVJhbmdlT3B0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRldGltZS1yYW5nZS1vcHRpb24uY29tcG9uZW50JztcclxuXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVJU09IaXN0b3J5RGF0YSB7XHJcbiAgICBrZXk6IHN0cmluZztcclxuICAgIHZhbHVlOiBzdHJpbmc7XHJcbn1cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3NtZS1mb3JtLWZpZWxkW3R5cGU9XCJkYXRldGltZXJhbmdlXCJdJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9kYXRldGltZS1yYW5nZS1mb3JtLWZpZWxkLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRGF0ZVRpbWVSYW5nZUZvcm1GaWVsZENvbXBvbmVudCBleHRlbmRzIFNtZUludGVybmFsRm9ybUZpZWxkQ29tcG9uZW50PERhdGVSYW5nZT4gaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0IHtcclxuICAgIHB1YmxpYyBzdGF0aWMgdGltZUlTT1BhdHRlcm4gPSBgezB9LXsxfS17Mn1UezN9Ons0fTp7NX1gO1xyXG4gICAgcHVibGljIHN0YXRpYyB0d29EaWdpdFBhdHRlcm4gPSBgMHswfWA7XHJcbiAgICBwdWJsaWMgc3RhdGljIHRpbWVJU09IaXN0b3J5TGVuZ3RoID0gMTAwO1xyXG4gICAgcHVibGljIHN0YXRpYyBzdGFydFByb3BlcnR5ID0gJ3N0YXJ0JztcclxuICAgIHB1YmxpYyBzdGF0aWMgZW5kUHJvcGVydHkgPSAnZW5kJztcclxuXHJcbiAgICBwdWJsaWMgY3VzdG9tVGV4dCA9IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkRhdGVUaW1lUmFuZ2UuQ3VzdG9tLmxhYmVsO1xyXG4gICAgcHVibGljIHN0YXJ0VGltZVRleHQgPSB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5EYXRlVGltZVJhbmdlLlN0YXJ0VGltZS5sYWJlbDtcclxuICAgIHB1YmxpYyBlbmRUaW1lVGV4dCA9IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkRhdGVUaW1lUmFuZ2UuRW5kVGltZS5sYWJlbDtcclxuICAgIHByaXZhdGUgaW52YWxpZFN0YXJ0VGltZVRleHQgPSB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5EYXRlVGltZVJhbmdlLkludmFsaWQuU3RhcnRUaW1lO1xyXG4gICAgcHJpdmF0ZSBpbnZhbGlkRW5kVGltZVRleHQgPSB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5EYXRlVGltZVJhbmdlLkludmFsaWQuRW5kVGltZTtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHNvdXJjZSBuYW1lIHRvIHVzZSBmb3IgbG9nZ2luZ1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGxvZ1NvdXJjZU5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuICdEYXRlVGltZVJhbmdlRm9ybUZpZWxkQ29tcG9uZW50JztcclxuICAgIH1cclxuXHJcbiAgICBAVmlld0NoaWxkKCdsaXN0Ym94JylcclxuICAgIHB1YmxpYyBsaXN0Ym94RWxlbWVudDogRWxlbWVudFJlZjtcclxuXHJcbiAgICBAVmlld0NoaWxkKCdkcm9wRG93bicpXHJcbiAgICBwdWJsaWMgZHJvcERvd246IERyb3Bkb3duQ29tcG9uZW50O1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ3N0YXJ0Rm9ybUZpZWxkJylcclxuICAgIHB1YmxpYyBzdGFydEZvcm1GaWVsZDogRGF0ZVRpbWVGb3JtRmllbGRDb21wb25lbnQ7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnZW5kRm9ybUZpZWxkJylcclxuICAgIHB1YmxpYyBlbmRGb3JtRmllbGQ6IERhdGVUaW1lRm9ybUZpZWxkQ29tcG9uZW50O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG9wdGlvbnMgZm9yIHRoaXMgY29udHJvbC5cclxuICAgICAqL1xyXG4gICAgQENvbnRlbnRDaGlsZHJlbihEYXRlVGltZVJhbmdlT3B0aW9uQ29tcG9uZW50KVxyXG4gICAgcHVibGljIG9wdGlvbnM6IFF1ZXJ5TGlzdDxEYXRlVGltZVJhbmdlT3B0aW9uQ29tcG9uZW50PjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIERldGVybWluZSBpZiB0aGUgZHJvcGRvd24gd2lsbCB1c2UgdGhlIHNtZS1mb3JtLWZpZWxkIHRvIGxpbWl0IGl0cyBtYXgtd2lkdGhcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBkcm9wZG93bkFwcGx5Rm9ybUZpZWxkT2Zmc2V0V2lkdGg6IGJvb2xlYW47XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzaG93Q3VzdG9tT3B0aW9uOiBib29sZWFuO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgY3VzdG9tRGF0ZVJhbmdlOiBEYXRlUmFuZ2U7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzaG93Q3VzdG9tRGlzcGxheVRleHQgPSB0cnVlO1xyXG5cclxuXHJcbiAgICAvLyBUT0RPOiBuZWVkIHRvIHVwZGF0ZSB0aGUgZGF0ZSBwaWNrZXIgdG8gZGVhbCB3aXRoIHRpbWV6b25lXHJcbiAgICBwdWJsaWMgZ2V0IGN1c3RvbURhdGVSYW5nZVN0YXJ0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGltZUlTT1RyYW5zbGF0b3IodGhpcy5jdXN0b21EYXRlUmFuZ2Uuc3RhcnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgY3VzdG9tRGF0ZVJhbmdlRW5kKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGltZUlTT1RyYW5zbGF0b3IodGhpcy5jdXN0b21EYXRlUmFuZ2UuZW5kKTtcclxuICAgIH1cclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBjdXN0b21MYWJlbEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gICAgQFNtZUluamVjdChEcm9wZG93blNlcnZpY2UpXHJcbiAgICBwcml2YXRlIGRyb3Bkb3duU2VydmljZTogRHJvcGRvd25TZXJ2aWNlO1xyXG5cclxuICAgIC8vIERlYWwgd2l0aCBzY2FsYWJpbGl0eVxyXG4gICAgLy8gRG8gbm90IG5lZWQgdG8gY2FsbCBkdXBsaWNhdGVkIGZ1bmN0aW9uIGFnYWluIGFuZCBhZ2FpblxyXG4gICAgLy8gUG9vbCBzaXplIGZvciBub3cgc2V0IGF0IDEwMFxyXG4gICAgcHJpdmF0ZSB0aW1lSVNPSGlzdG9yeTogQXJyYXk8VGltZUlTT0hpc3RvcnlEYXRhPiA9IFtdO1xyXG4gICAgcHJpdmF0ZSBnZXRUaW1lSGlzdG9yeShpbnB1dDogRGF0ZSk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IHJlcyA9ICcnO1xyXG4gICAgICAgIGNvbnN0IGhpc3RvcnkgPSB0aGlzLnRpbWVJU09IaXN0b3J5LmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXRlbS5rZXkgPT09IGlucHV0LmdldFRpbWUoKS50b1N0cmluZygpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pWzBdO1xyXG5cclxuICAgICAgICBpZiAoaGlzdG9yeSkge1xyXG4gICAgICAgICAgICByZXMgPSBoaXN0b3J5LnZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuICAgIHByaXZhdGUgc2V0VGltZUhpc3Rvcnkoa2V5OiBEYXRlLCB2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgaGlzdG9yeSA9IHRoaXMudGltZUlTT0hpc3RvcnkuZmlsdGVyKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtLmtleSA9PT0ga2V5LmdldFRpbWUoKS50b1N0cmluZygpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pWzBdO1xyXG4gICAgICAgIGlmICghaGlzdG9yeSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy50aW1lSVNPSGlzdG9yeVxyXG4gICAgICAgICAgICAgICAgJiYgdGhpcy50aW1lSVNPSGlzdG9yeS5sZW5ndGggPj0gRGF0ZVRpbWVSYW5nZUZvcm1GaWVsZENvbXBvbmVudC50aW1lSVNPSGlzdG9yeUxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50aW1lSVNPSGlzdG9yeS51bnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy50aW1lSVNPSGlzdG9yeS5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGtleToga2V5LmdldFRpbWUoKS50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIFRPRE86IG5lZWQgc3VwcG9ydCBmb3IgMjQgaG91cnMgdnMgMTIgaG91cnMgd2l0aCBhbS9wbS5cclxuICAgIHByaXZhdGUgdGltZUlTT1RyYW5zbGF0b3IoaW5wdXQ6IERhdGUpIHtcclxuICAgICAgICBsZXQgcmVzID0gdGhpcy5nZXRUaW1lSGlzdG9yeShpbnB1dCk7XHJcbiAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByYXdZZWFyID0gaW5wdXQuZ2V0RnVsbFllYXIoKTtcclxuICAgICAgICBjb25zdCByYXdNb250aCA9IGlucHV0LmdldE1vbnRoKCkgKyAxO1xyXG4gICAgICAgIGNvbnN0IG1vbnRoID0gcmF3TW9udGggPCAxMCA/IERhdGVUaW1lUmFuZ2VGb3JtRmllbGRDb21wb25lbnQudHdvRGlnaXRQYXR0ZXJuLmZvcm1hdChyYXdNb250aCkgOiByYXdNb250aDtcclxuICAgICAgICBjb25zdCByYXdEYXkgPSBpbnB1dC5nZXREYXRlKCk7XHJcbiAgICAgICAgY29uc3QgZGF5ID0gcmF3RGF5IDwgMTAgPyBEYXRlVGltZVJhbmdlRm9ybUZpZWxkQ29tcG9uZW50LnR3b0RpZ2l0UGF0dGVybi5mb3JtYXQocmF3RGF5KSA6IHJhd0RheTtcclxuICAgICAgICBjb25zdCByYXdIb3VyID0gaW5wdXQuZ2V0SG91cnMoKTtcclxuICAgICAgICBjb25zdCBob3VyID0gcmF3SG91ciA8IDEwID8gRGF0ZVRpbWVSYW5nZUZvcm1GaWVsZENvbXBvbmVudC50d29EaWdpdFBhdHRlcm4uZm9ybWF0KHJhd0hvdXIpIDogcmF3SG91cjtcclxuICAgICAgICBjb25zdCByYXdNaW51dGUgPSBpbnB1dC5nZXRNaW51dGVzKCk7XHJcbiAgICAgICAgY29uc3QgbWludXRlID0gcmF3TWludXRlIDwgMTAgPyBEYXRlVGltZVJhbmdlRm9ybUZpZWxkQ29tcG9uZW50LnR3b0RpZ2l0UGF0dGVybi5mb3JtYXQocmF3TWludXRlKSA6IHJhd01pbnV0ZTtcclxuICAgICAgICBjb25zdCByYXdTZWNvbmQgPSBpbnB1dC5nZXRTZWNvbmRzKCk7XHJcbiAgICAgICAgY29uc3Qgc2Vjb25kID0gcmF3U2Vjb25kIDwgMTAgPyBEYXRlVGltZVJhbmdlRm9ybUZpZWxkQ29tcG9uZW50LnR3b0RpZ2l0UGF0dGVybi5mb3JtYXQocmF3U2Vjb25kKSA6IHJhd1NlY29uZDtcclxuICAgICAgICByZXMgPSBEYXRlVGltZVJhbmdlRm9ybUZpZWxkQ29tcG9uZW50LnRpbWVJU09QYXR0ZXJuLmZvcm1hdChyYXdZZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCk7XHJcbiAgICAgICAgdGhpcy5zZXRUaW1lSGlzdG9yeShpbnB1dCwgcmVzKTtcclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgZGlzcGxheVZhbHVlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2hvd0N1c3RvbURpc3BsYXlUZXh0ICYmICh0aGlzLmlzU2VsZWN0ZWQodGhpcy5jdXN0b21EYXRlUmFuZ2UpIHx8ICF0aGlzLm9wdGlvbnMubGVuZ3RoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21UZXh0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzZWxlY3RlZE9wdGlvbiA9IHRoaXMub3B0aW9ucy5maW5kKG9wdGlvbiA9PiB0aGlzLmlzU2VsZWN0ZWQob3B0aW9uLmRhdGVSYW5nZSkpO1xyXG4gICAgICAgIGlmIChzZWxlY3RlZE9wdGlvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRPcHRpb24ubGFiZWw7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNob3dDdXN0b21EaXNwbGF5VGV4dCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21UZXh0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgPyB0aGlzLnZhbHVlLnRvU3RyaW5nKCkgOiAnJztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihpbmplY3Rvcik7XHJcbiAgICAgICAgdGhpcy5kcm9wZG93bkFwcGx5Rm9ybUZpZWxkT2Zmc2V0V2lkdGggPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2hvd0N1c3RvbU9wdGlvbiA9IHRydWU7XHJcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcclxuICAgICAgICB0aGlzLmN1c3RvbURhdGVSYW5nZSA9IG5ldyBEYXRlUmFuZ2Uobm93LCBub3cgKyAoNjAgKiA2MCAqIDEwMDApKTsgLy8gbm93IHRvIG5vdyArIDEgaG91clxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1NlbGVjdGVkKGRhdGVSYW5nZTogRGF0ZVJhbmdlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMgfHwgIXRoaXMub3B0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkYXRlUmFuZ2UgJiYgZGF0ZVJhbmdlLnN0YXJ0ICYmIGRhdGVSYW5nZS5lbmQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRhdGVSYW5nZS5pc0VxdWFsVG8odGhpcy52YWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZVZhbHVlKHZhbHVlOiBEYXRlUmFuZ2UpIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEcm9wZG93blBvc2l0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLm9wdGlvbnMuY2hhbmdlcy5zdWJzY3JpYmUodmFsID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmN1c3RvbURhdGVSYW5nZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pKTtcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5jdXN0b21EYXRlUmFuZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkN1c3RvbURhdGVSYW5nZUNoYW5nZWQoZmllbGROYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBzd2l0Y2ggKGZpZWxkTmFtZSkge1xyXG4gICAgICAgICAgICBjYXNlIERhdGVUaW1lUmFuZ2VGb3JtRmllbGRDb21wb25lbnQuc3RhcnRQcm9wZXJ0eToge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXN0b21EYXRlUmFuZ2Uuc3RhcnQgPSBuZXcgRGF0ZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIERhdGVUaW1lUmFuZ2VGb3JtRmllbGRDb21wb25lbnQuZW5kUHJvcGVydHk6IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tRGF0ZVJhbmdlLmVuZCA9IG5ldyBEYXRlKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEFsd2F5cyBub3RpZnkgdGhlIGNoYW5nZSB0byB0aGUgcGFyZW50XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY3VzdG9tRGF0ZVJhbmdlO1xyXG4gICAgfVxyXG5cclxuICAgIEBZaWVsZCgpXHJcbiAgICBwcml2YXRlIHVwZGF0ZURyb3Bkb3duUG9zaXRpb24oKSB7XHJcbiAgICAgICAgdGhpcy5kcm9wZG93blNlcnZpY2UudXBkYXRlUG9zaXRpb24odGhpcy5kcm9wRG93bik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIG9uVmFsdWVDaGFuZ2VkKHZhbHVlOiBEYXRlUmFuZ2UpIHtcclxuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2YWx1ZSAmJiAhdGhpcy5vcHRpb25zLnNvbWUob3B0aW9uID0+IG9wdGlvbi5kYXRlUmFuZ2UuaXNFcXVhbFRvKHZhbHVlKSkpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXN0b21EYXRlUmFuZ2Uuc3RhcnQgPSB2YWx1ZS5zdGFydDtcclxuICAgICAgICAgICAgdGhpcy5jdXN0b21EYXRlUmFuZ2UuZW5kID0gdmFsdWUuZW5kO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzZWxlY3RlZE9wdGlvbiA9IHRoaXMub3B0aW9ucy5maW5kKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtLmRhdGVSYW5nZS5pc0VxdWFsVG8odmFsdWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChzZWxlY3RlZE9wdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLmN1c3RvbUxhYmVsRW1pdHRlci5lbWl0KHNlbGVjdGVkT3B0aW9uLmxhYmVsKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmN1c3RvbUxhYmVsRW1pdHRlci5lbWl0KHRoaXMuY3VzdG9tVGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN1cGVyLm9uVmFsdWVDaGFuZ2VkKHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgdGhlIGlkQmFnIHVzZWQgYnkgdGhpcyBjb21wb25lbnQgdG8gc3RvcmUgdW5pcXVlIGVsZW1lbnQgaWRzLlxyXG4gICAgICogaWQgdmFsdWVzIHdpbGwgYmUgYXNzaWduZWQgYmUgdGhlIEBzZWUgQmFzZUNvbXBvbmVudCBzdXBlciBjbGFzcy5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUlkQmFnKCk6IE1zZnRTbWUuU3RyaW5nTWFwPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGRldGFpbHNTcGFuOiAnJyxcclxuICAgICAgICAgICAgZ3JvdXBOYW1lOiAnJyxcclxuICAgICAgICAgICAgZHJvcERvd25Db250ZW50OiAnJyxcclxuICAgICAgICAgICAgc3RhcnRUaW1lSW5wdXQ6ICcnLFxyXG4gICAgICAgICAgICBlbmRUaW1lSW5wdXQ6ICcnXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBlcmZvcm1zIHZhbGlkYXRpb24gdGhhdCBpcyBpbnRlcm5hbCB0byB0aGlzIGNvbnRyb2xcclxuICAgICAqIEBwYXJhbSBjIFRoZSBmb3JtIGNvbnRyb2wgYXR0YWNoZWQgdG8gdGhpcyBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgdmFsaWRhdGUoYzogRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uQWxlcnRzIHtcclxuICAgICAgICBpZiAodGhpcy5yZXF1aXJlZCkge1xyXG4gICAgICAgICAgICBpZiAoTXNmdFNtZS5pc051bGxPclVuZGVmaW5lZCh0aGlzLnZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcmVxdWlyZWQ6IHRydWUgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZS5pc1ZhbGlkKCkpIHtcclxuICAgICAgICAgICAgbGV0IGFsZXJ0ID0gdGhpcy52YWxpZGF0ZVN0YXJ0RGF0ZSgpO1xyXG4gICAgICAgICAgICBpZiAoYWxlcnQpIHsgcmV0dXJuIHsgaW52YWxpZFRpbWVyYW5nZTogYWxlcnQgfTsgfVxyXG5cclxuICAgICAgICAgICAgYWxlcnQgPSB0aGlzLnZhbGlkYXRlRW5kRGF0ZSgpO1xyXG4gICAgICAgICAgICBpZiAoYWxlcnQpIHsgcmV0dXJuIHsgaW52YWxpZFRpbWVyYW5nZTogYWxlcnQgfTsgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLnZhbGlkYXRlKGMpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkN1c3RvbVZhbGlkYXRlKGV2ZW50OiBDaGVja1ZhbGlkYXRpb25FdmVudEFyZ3MsIG5hbWU6IHN0cmluZywgdmFsdWU/OiBEYXRlTGlrZSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGFsZXJ0czogVmFsaWRhdGlvbkFsZXJ0cyA9IHt9O1xyXG4gICAgICAgIGlmIChuYW1lID09PSBEYXRlVGltZVJhbmdlRm9ybUZpZWxkQ29tcG9uZW50LnN0YXJ0UHJvcGVydHkpIHtcclxuICAgICAgICAgICAgY29uc3QgYWxlcnQgPSB0aGlzLnZhbGlkYXRlU3RhcnREYXRlKG5ldyBEYXRlKGV2ZW50LmZvcm1Db250cm9sLnZhbHVlKSk7XHJcbiAgICAgICAgICAgIGlmIChhbGVydCkge1xyXG4gICAgICAgICAgICAgICAgYWxlcnRzWydpbnZhbGlkRGF0ZVJhbmdlJ10gPSBhbGVydDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoKHRoaXMuZW5kRm9ybUZpZWxkICYmICF0aGlzLmVuZEZvcm1GaWVsZC5uZ01vZGVsLnZhbGlkKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLnN0YXJ0Rm9ybUZpZWxkICYmIHRoaXMuc3RhcnRGb3JtRmllbGQubmdNb2RlbC5jb250cm9sLmVycm9ycykpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZEZvcm1GaWVsZC5uZ01vZGVsLmNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSBEYXRlVGltZVJhbmdlRm9ybUZpZWxkQ29tcG9uZW50LmVuZFByb3BlcnR5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFsZXJ0ID0gdGhpcy52YWxpZGF0ZUVuZERhdGUobmV3IERhdGUoZXZlbnQuZm9ybUNvbnRyb2wudmFsdWUpKTtcclxuICAgICAgICAgICAgaWYgKGFsZXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydHNbJ2ludmFsaWREYXRlUmFuZ2UnXSA9IGFsZXJ0O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhcnRGb3JtRmllbGQgJiYgIXRoaXMuc3RhcnRGb3JtRmllbGQubmdNb2RlbC52YWxpZCAmJiB0aGlzLnN0YXJ0Rm9ybUZpZWxkLm5nTW9kZWwuY29udHJvbC5lcnJvcnMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0Rm9ybUZpZWxkLm5nTW9kZWwuY29udHJvbC5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIE1zZnRTbWUuZGVlcEFzc2lnbihldmVudC5hbGVydHMsIGFsZXJ0cyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZVN0YXJ0RGF0ZShzdGFydERhdGU/OiBEYXRlKTogVmFsaWRhdGlvbkFsZXJ0IHwgbnVsbCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlIHx8IE1zZnRTbWUuaXNOdWxsT3JVbmRlZmluZWQodGhpcy52YWx1ZS5zdGFydCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBzdGFydFRpbWUgPSB0aGlzLnZhbHVlLnN0YXJ0O1xyXG4gICAgICAgIGlmIChzdGFydERhdGUpIHtcclxuICAgICAgICAgICAgc3RhcnRUaW1lID0gc3RhcnREYXRlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc3RhcnRUaW1lICYmIHRoaXMudmFsdWUuZW5kICYmIHN0YXJ0VGltZS52YWx1ZU9mKCkgPiB0aGlzLnZhbHVlLmVuZC52YWx1ZU9mKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMuaW52YWxpZFN0YXJ0VGltZVRleHQsXHJcbiAgICAgICAgICAgICAgICBzZXZlcml0eTogVmFsaWRhdGlvbkFsZXJ0U2V2ZXJpdHkuRXJyb3JcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZUVuZERhdGUoZW5kRGF0ZT86IERhdGUpOiBWYWxpZGF0aW9uQWxlcnQgfCBudWxsIHtcclxuICAgICAgICBpZiAoIXRoaXMudmFsdWUgfHwgTXNmdFNtZS5pc051bGxPclVuZGVmaW5lZCh0aGlzLnZhbHVlLmVuZCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBlbmRUaW1lID0gdGhpcy52YWx1ZS5lbmQ7XHJcbiAgICAgICAgaWYgKGVuZERhdGUpIHtcclxuICAgICAgICAgICAgZW5kVGltZSA9IGVuZERhdGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlLnN0YXJ0ICYmIGVuZFRpbWUgJiYgdGhpcy52YWx1ZS5zdGFydC52YWx1ZU9mKCkgPiBlbmRUaW1lLnZhbHVlT2YoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5pbnZhbGlkRW5kVGltZVRleHQsXHJcbiAgICAgICAgICAgICAgICBzZXZlcml0eTogVmFsaWRhdGlvbkFsZXJ0U2V2ZXJpdHkuRXJyb3JcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gYWNjZXNzaWJpbGl0eVxyXG4gICAgcHVibGljIG9uVG9nZ2xlS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5Q29kZSkge1xyXG4gICAgICAgICAgICBjYXNlIEtleUNvZGUuRW50ZXI6XHJcbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5TcGFjZToge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcm9wRG93bi5vblRvZ2dsZUNsaWNrKGV2ZW50LCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5Eb3duQXJyb3c6IHtcclxuICAgICAgICAgICAgICAgIGlmIChldmVudC5hbHRLZXkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyb3BEb3duLm9uVG9nZ2xlQ2xpY2soZXZlbnQsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gaGFuZGxlIGFsbCBrZXlzXHJcbiAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25SYWRpb0dyb3VwT3B0aW9uS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5Q29kZSkge1xyXG4gICAgICAgICAgICAvLyBvdmVycmlkZXMgdGhlIHRhYiBmdW5jdGlvblxyXG4gICAgICAgICAgICBjYXNlIEtleUNvZGUuVGFiOiB7XHJcbiAgICAgICAgICAgICAgICAvLyBwcmV2ZW50IGZvY3VzIG9uIHRoZSBuZXh0IGVsZW1lbnQgaW4gdGhlIHBhcmVudCB0cmFwXHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2FuRm9jdXNPblN0YXJ0VGltZVJhbmdlUGlja2VyKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uRGF0ZVBpY2tlcktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGlucHV0OiBzdHJpbmcpIHtcclxuICAgICAgICAvLyBhbGxvdyBlc2NhcGUgYW5kIGFsdCBhcnJvdyB1cCB0byByZXRyYWN0IHRoZSBkYXRldGltZSByYW5nZSBmaWVsZHMgYXMgd2VsbC4gT25seSByZW1vdmUgaWYgdGhlIGRhdGV0aW1lIGNvbnRyb2xzIGFyZSBub3Qgb3Blbi5cclxuICAgICAgICBpZiAoKGV2ZW50LmtleUNvZGUgPT09IEtleUNvZGUuRXNjYXBlKSB8fCAoZXZlbnQua2V5Q29kZSA9PT0gS2V5Q29kZS5VcEFycm93ICYmIGV2ZW50LmFsdEtleSkpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0Rm9ybUZpZWxkLmRyb3BEb3duLmlzT3BlbiAmJiAhdGhpcy5lbmRGb3JtRmllbGQuZHJvcERvd24uaXNPcGVuKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kcm9wRG93biAmJiB0aGlzLmRyb3BEb3duLmNvbnRlbnRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dEVsZW1lbnQgPSBEb20uZ2V0TmV4dEZvY3VzYWJsZUVsZW1lbnQodGhpcy5kcm9wRG93bi5jb250ZW50RWxlbWVudC5uYXRpdmVFbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRyb3BEb3duLm9uVG9nZ2xlQ2xpY2soZXZlbnQsIHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGFsbG93IHNoaWZ0K3RhYiB0byB0YWtlIGZvY3VzIGJhY2sgdG8gc3RhcnRGb3JtRmllbGQgd2hpbGUgYXQgZW5kRm9ybUZpZWxkXHJcbiAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleUNvZGUgPT09IEtleUNvZGUuVGFiIHx8IGV2ZW50LmtleUNvZGUgIT09IEtleUNvZGUuVGFiKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBwcmV2ZW50IGZvY3VzIG9uIHRoZSBuZXh0IGVsZW1lbnQgaW4gdGhlIHBhcmVudCB0cmFwXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrSXNMYXN0RWxlbWVudEluRGF0YVJhbmdlUGlja2VyVHJhcCgpKSB7XHJcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNoZWNrSXNMYXN0RWxlbWVudEluRGF0YVJhbmdlUGlja2VyVHJhcCgpIHtcclxuICAgICAgICBjb25zdCBkb20gPSBEb207XHJcbiAgICAgICAgY29uc3QgY3VycmVudEZvY3VzID0gPEhUTUxFbGVtZW50PmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgbmV4dEVsZW1lbnQgPSBkb20uZ2V0TmV4dEZvY3VzYWJsZUVsZW1lbnRJblRyYXAoY3VycmVudEZvY3VzKTtcclxuICAgICAgICAvLyBUaGUgbGFzdCBpdGVtIGluc2lkZSBvZiB0aGUgZHJvcGRvd24sIGV4cGVjdGVkIHRvIHN0YXkgYXQgdGhlIGxhc3QgaXRlbVxyXG4gICAgICAgIGlmIChjdXJyZW50Rm9jdXMgPT09IG5leHRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjYW5Gb2N1c09uU3RhcnRUaW1lUmFuZ2VQaWNrZXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhcnRGb3JtRmllbGQgJiYgdGhpcy5lbmRGb3JtRmllbGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxufVxyXG4iLCI8c21lLWZvcm0tZmllbGQtbGF5b3V0IFtmb3JtRmllbGRdPVwidGhpc1wiPlxyXG4gIDxzbWUtZHJvcGRvd24gI2Ryb3BEb3duIFthdXRvVG9nZ2xlXT1cImZhbHNlXCIgY2xhc3M9XCJzbWUtY29tYm9ib3ggc21lLWZvY3VzLXpvbmVcIiBbZGlzYWJsZWRdPVwibG9hZGluZ09yRGlzYWJsZWRcIlxyXG4gICAgW2Ryb3Bkb3duQXBwbHlGb3JtRmllbGRPZmZzZXRXaWR0aF09XCJkcm9wZG93bkFwcGx5Rm9ybUZpZWxkT2Zmc2V0V2lkdGhcIj5cclxuICAgIDxkaXYgI2Ryb3Bkb3duSGVhZGVyIGNsYXNzPVwic21lLWNvbWJvYm94LWhlYWRlciBzbWUtZHJvcGRvd24tdG9nZ2xlXCIgKGtleWRvd24pPVwib25Ub2dnbGVLZXlkb3duKCRldmVudClcIj5cclxuICAgICAgPGlucHV0ICN0ZXh0SW5wdXQgdHlwZT1cInRleHRcIiByb2xlPVwiY29tYm9ib3hcIiBbdmFsdWVdPVwiZGlzcGxheVZhbHVlXCIgcmVhZG9ubHlcclxuICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cImlkQmFnLmRyb3BEb3duQ29udGVudFwiXHJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJsYWJlbFwiXHJcbiAgICAgICAgW2F0dHIuYXJpYS1yZXF1aXJlZF09J3JlcXVpcmVkJ1xyXG4gICAgICAgIFthdHRyLmRpc2FibGVkXT1cImxvYWRpbmdPckRpc2FibGVkID8gdHJ1ZSA6IG51bGxcIiBcclxuICAgICAgICBbYXR0ci5hcmlhLW93bnNdPVwiaWRCYWcuZHJvcERvd25Db250ZW50XCIgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJkcm9wRG93bi5pc09wZW5cIlxyXG4gICAgICAgIFthdHRyLmFyaWEtYXV0b2NvbXBsZXRlXT1cIidub25lJ1wiIChjbGljayk9XCJkcm9wRG93bi5vblRvZ2dsZUNsaWNrKCRldmVudCwgdHJ1ZSlcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIlxyXG4gICAgICAgIGF1dG9jYXBpdGFsaXplPVwib2ZmXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCIgLz5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgW2F0dHIuZGlzYWJsZWRdPVwibG9hZGluZ09yRGlzYWJsZWQgPyB0cnVlIDogbnVsbFwiIHRhYmluZGV4PVwiLTFcIiByb2xlPVwicHJlc2VudGF0aW9uXCJcclxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIiBbYXR0ci5hcmlhLXByZXNzZWRdPVwiZHJvcERvd24uaXNPcGVuXCIgW2NsYXNzLnNtZS10b2dnbGVkXT1cImRyb3BEb3duLmlzT3BlblwiXHJcbiAgICAgICAgY2xhc3M9XCJzbWUtYnV0dG9uLXRyaWdnZXIgc21lLWJ1dHRvbi1hdXRvLXdpZHRoXCIgKGNsaWNrKT1cImRyb3BEb3duLm9uVG9nZ2xlQ2xpY2soJGV2ZW50LCB0cnVlKVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic21lLWljb24gc21lLWljb24tY2hldnJvbkRvd25cIj48L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tIFRoZSBtaW5pbXVtIG9mIHdpZHRoIHRoYXQgYSBkcm9wZG93biBjYW4gYmUgaXMgc2V0IGF0IDIyMHB4IC0tPlxyXG4gICAgPCEtLSBHdWFyYW50ZWUgZHJvcGRvd24gY29udGVudCB3aWR0aCBjYW4gbm90IGdvIGJlbG93IHRoaXMgdmFsdWUgbm8gbWF0dGVyIGhvdyBzbWFsbCB0aGUgd2luZG93IGlzIHNldCBhdCAtLT5cclxuICAgIDwhLS0gT3RoZXJ3aXNlIHdpbGwgZGlzcGxheSBncmF5IG1hcmdpbiB0byB0aGUgcmlnaHQgb2YgdGhlIGRyb3Bkb3duIGNvbnRlbnQgb24gc21hbGwgd2luZG93IC0tPlxyXG4gICAgPGRpdiAjbGlzdGJveCByb2xlPVwibGlzdGJveFwiIGNsYXNzPVwic21lLWRyb3Bkb3duLWNvbnRlbnQgc21lLWRyb3Bkb3duLWludGVyYWN0aW9uLWVuYWJsZWQgc21lLXBhZGRpbmctc3F1aXNoLXYtc21cIlxyXG4gICAgICBbbmdTdHlsZV09XCJkcm9wZG93bkFwcGx5Rm9ybUZpZWxkT2Zmc2V0V2lkdGggJiYgeyAnbWF4LXdpZHRoLnB4JzogZHJvcGRvd25IZWFkZXIub2Zmc2V0V2lkdGggPiAyMjAgPyBkcm9wZG93bkhlYWRlci5vZmZzZXRXaWR0aCA6IDIyMH0gfHwgIWRyb3Bkb3duQXBwbHlGb3JtRmllbGRPZmZzZXRXaWR0aCAmJiB7ICdtYXgtd2lkdGgnOiAnaW5pdGlhbCcgfVwiXHJcbiAgICAgIFtpZF09XCJpZEJhZy5kcm9wRG93bkNvbnRlbnRcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvbnMgJiYgb3B0aW9ucy5sZW5ndGhcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygb3B0aW9uczsgbGV0IG9wdGlvbkluZGV4ID0gaW5kZXhcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbWUtcmFkaW9cIj5cclxuICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBbYXR0ci5hcmlhLWxhYmVsXT1cIm9wdGlvbi5sYWJlbFwiIFthdHRyLm5hbWVdPVwiaWRCYWcuZ3JvdXBOYW1lXCJcclxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzU2VsZWN0ZWQob3B0aW9uLmRhdGVSYW5nZSlcIiAoY2xpY2spPVwidXBkYXRlVmFsdWUob3B0aW9uLmRhdGVSYW5nZSlcIlxyXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jaGVja2VkXT1cImlzU2VsZWN0ZWQob3B0aW9uLmRhdGVSYW5nZSlcIiBbbmFtZV09XCJpZEJhZy5ncm91cE5hbWVcIlxyXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJyZXF1aXJlZFwiIFtkaXNhYmxlZF09XCJsb2FkaW5nT3JEaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvblJhZGlvR3JvdXBPcHRpb25LZXlkb3duKCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj57e29wdGlvbi5sYWJlbH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInNtZS1yYWRpbyBzbWUtZHJvcGRvd24taW50ZXJhY3Rpb24tZW5hYmxlZFwiICpuZ0lmPVwic2hvd0N1c3RvbU9wdGlvbiAmJiBvcHRpb25zICYmIG9wdGlvbnMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBbYXR0ci5hcmlhLWxhYmVsXT1cImN1c3RvbVRleHRcIiBbYXR0ci5hcmlhLWNoZWNrZWRdPVwiaXNTZWxlY3RlZChjdXN0b21EYXRlUmFuZ2UpXCJcclxuICAgICAgICAgICAgW2F0dHIubmFtZV09XCJpZEJhZy5ncm91cE5hbWVcIiBbbmFtZV09XCJpZEJhZy5ncm91cE5hbWVcIiBbY2hlY2tlZF09XCJpc1NlbGVjdGVkKGN1c3RvbURhdGVSYW5nZSlcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwidXBkYXRlVmFsdWUoY3VzdG9tRGF0ZVJhbmdlKVwiIFthdHRyLmFyaWEtcmVxdWlyZWRdPVwicmVxdWlyZWRcIiBbZGlzYWJsZWRdPVwibG9hZGluZ09yRGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJvblJhZGlvR3JvdXBPcHRpb25LZXlkb3duKCRldmVudClcIj5cclxuICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPnt7dGhpcy5jdXN0b21UZXh0fX08L3NwYW4+XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZmllbGRzZXQgKm5nSWY9XCJpc1NlbGVjdGVkKGN1c3RvbURhdGVSYW5nZSkgfHwgIW9wdGlvbnMgfHwgb3B0aW9ucy5sZW5ndGggPT09IDBcIiBjbGFzcz1cInNtZS1mb2N1cy10cmFwXCJcclxuICAgICAgICBbY2xhc3Muc21lLXN1YmZvcm0taW5kZW50LW5vbmVdPVwiIW9wdGlvbnMgfHwgb3B0aW9ucy5sZW5ndGggPT09IDBcIiBbZGlzYWJsZWRdPVwibG9hZGluZ09yRGlzYWJsZWRcIj5cclxuICAgICAgICA8c21lLWZvcm0tZmllbGQgI3N0YXJ0Rm9ybUZpZWxkICpuZ0lmPVwiY3VzdG9tRGF0ZVJhbmdlICYmIGN1c3RvbURhdGVSYW5nZS5zdGFydFwiXHJcbiAgICAgICAgICBjbGFzcz1cInNtZS1kcm9wZG93bi1pbnRlcmFjdGlvbi1lbmFibGVkXCIgdHlwZT1cImRhdGV0aW1lXCIgW2xhYmVsXT1cInN0YXJ0VGltZVRleHRcIlxyXG4gICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiIFtuZ01vZGVsXT1cImN1c3RvbURhdGVSYW5nZVN0YXJ0XCJcclxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ3VzdG9tRGF0ZVJhbmdlQ2hhbmdlZCgnc3RhcnQnLCAkZXZlbnQpXCIgW2lkXT1cImlkQmFnLnN0YXJ0VGltZUlucHV0XCJcclxuICAgICAgICAgIChjdXN0b21WYWxpZGF0ZSk9XCJvbkN1c3RvbVZhbGlkYXRlKCRldmVudCwgJ3N0YXJ0JylcIiAoa2V5ZG93bik9XCJvbkRhdGVQaWNrZXJLZXlkb3duKCRldmVudCwgJ3N0YXJ0JylcIj5cclxuICAgICAgICA8L3NtZS1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDxzbWUtZm9ybS1maWVsZCAjZW5kRm9ybUZpZWxkICpuZ0lmPVwiY3VzdG9tRGF0ZVJhbmdlICYmIGN1c3RvbURhdGVSYW5nZS5lbmRcIlxyXG4gICAgICAgICAgY2xhc3M9XCJzbWUtZHJvcGRvd24taW50ZXJhY3Rpb24tZW5hYmxlZFwiIHR5cGU9XCJkYXRldGltZVwiIFtsYWJlbF09XCJlbmRUaW1lVGV4dFwiXHJcbiAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCIgW25nTW9kZWxdPVwiY3VzdG9tRGF0ZVJhbmdlRW5kXCJcclxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ3VzdG9tRGF0ZVJhbmdlQ2hhbmdlZCgnZW5kJywgJGV2ZW50KVwiIFtpZF09XCJpZEJhZy5lbmRUaW1lSW5wdXRcIlxyXG4gICAgICAgICAgKGN1c3RvbVZhbGlkYXRlKT1cIm9uQ3VzdG9tVmFsaWRhdGUoJGV2ZW50LCAnZW5kJylcIiAoa2V5ZG93bik9XCJvbkRhdGVQaWNrZXJLZXlkb3duKCRldmVudCwgJ2VuZCcpXCI+XHJcbiAgICAgICAgPC9zbWUtZm9ybS1maWVsZD5cclxuICAgICAgPC9maWVsZHNldD5cclxuICAgIDwvZGl2PlxyXG4gIDwvc21lLWRyb3Bkb3duPlxyXG4gIDxzbWUtdmFsaWRhdGlvbi1hbGVydCBbYWxlcnRdPVwiYWxlcnRcIj48L3NtZS12YWxpZGF0aW9uLWFsZXJ0PlxyXG48L3NtZS1mb3JtLWZpZWxkLWxheW91dD5cclxuIl19