@po-ui/ng-templates 6.9.0 → 6.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -85,6 +85,11 @@ const PAGE_SIZE_DEFAULT = 10;
85
85
  * <file name="sample-po-page-dynamic-table-basic/sample-po-page-dynamic-table-basic.component.ts"> </file>
86
86
  * </example>
87
87
  *
88
+ * <example name="po-page-dynamic-table-people" title="PO Page Dynamic Table - People">
89
+ * <file name="sample-po-page-dynamic-table-people/sample-po-page-dynamic-table-people.component.html"> </file>
90
+ * <file name="sample-po-page-dynamic-table-people/sample-po-page-dynamic-table-people.component.ts"> </file>
91
+ * </example>
92
+ *
88
93
  * <example name="po-page-dynamic-table-users" title="PO Page Dynamic Table - Users">
89
94
  * <file name="sample-po-page-dynamic-table-users/sample-po-page-dynamic-table-users.component.html"> </file>
90
95
  * <file name="sample-po-page-dynamic-table-users/sample-po-page-dynamic-table-users.component.ts"> </file>
@@ -144,6 +149,20 @@ export class PoPageDynamicTableComponent extends PoPageDynamicListBaseComponent
144
149
  * @default `false`
145
150
  */
146
151
  this.concatFilters = false;
152
+ /**
153
+ * @optional
154
+ *
155
+ * @description
156
+ *
157
+ * Se verdadeiro, ativa a funcionalidade de scroll infinito para a tabela e o botão "Carregar Mais" deixará de ser exibido. Ao chegar no fim da tabela
158
+ * executará a função `p-show-more`.
159
+ *
160
+ * **Regras de utilização:**
161
+ * - O scroll infinito só funciona para tabelas que utilizam a propriedade `p-height` e que possuem o scroll já na carga inicial dos dados.
162
+ *
163
+ * @default `false`
164
+ */
165
+ this.infiniteScroll = false;
147
166
  this.hasNext = false;
148
167
  this.items = [];
149
168
  this.pageActions = [];
@@ -264,6 +283,19 @@ export class PoPageDynamicTableComponent extends PoPageDynamicListBaseComponent
264
283
  get quickSearchWidth() {
265
284
  return this._quickSearchWidth;
266
285
  }
286
+ /**
287
+ * @optional
288
+ *
289
+ * @description
290
+ *
291
+ * Define a altura da tabela em *pixels* e fixa o cabeçalho.
292
+ */
293
+ set height(value) {
294
+ this._height = util.convertToInt(value);
295
+ }
296
+ get height() {
297
+ return this._height;
298
+ }
267
299
  ngOnInit() {
268
300
  this.loadDataFromAPI();
269
301
  }
@@ -837,7 +869,7 @@ export class PoPageDynamicTableComponent extends PoPageDynamicListBaseComponent
837
869
  }
838
870
  }
839
871
  PoPageDynamicTableComponent.ɵfac = function PoPageDynamicTableComponent_Factory(t) { return new (t || PoPageDynamicTableComponent)(i0.ɵɵdirectiveInject(i1.Router), i0.ɵɵdirectiveInject(i1.ActivatedRoute), i0.ɵɵdirectiveInject(i2.PoDialogService), i0.ɵɵdirectiveInject(i2.PoNotificationService), i0.ɵɵdirectiveInject(i3.PoPageDynamicService), i0.ɵɵdirectiveInject(i4.PoPageCustomizationService), i0.ɵɵdirectiveInject(i5.PoPageDynamicTableActionsService), i0.ɵɵdirectiveInject(i2.PoLanguageService)); };
840
- PoPageDynamicTableComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PoPageDynamicTableComponent, selectors: [["po-page-dynamic-table"]], inputs: { onLoad: ["p-load", "onLoad"], keepFilters: ["p-keep-filters", "keepFilters"], actionRight: ["p-actions-right", "actionRight"], concatFilters: ["p-concat-filters", "concatFilters"], actions: ["p-actions", "actions"], pageCustomActions: ["p-page-custom-actions", "pageCustomActions"], tableCustomActions: ["p-table-custom-actions", "tableCustomActions"], quickSearchWidth: ["p-quick-search-width", "quickSearchWidth"] }, features: [i0.ɵɵProvidersFeature([PoPageDynamicService]), i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 14, consts: [[3, "p-actions", "p-breadcrumb", "p-filters", "p-keep-filters", "p-concat-filters", "p-quick-search-width", "p-title", "p-advanced-search", "p-change-disclaimers", "p-quick-search"], [3, "p-sort", "p-actions", "p-actions-right", "p-selectable", "p-columns", "p-items", "p-show-more-disabled", "p-show-more", "p-sort-by"]], template: function PoPageDynamicTableComponent_Template(rf, ctx) { if (rf & 1) {
872
+ PoPageDynamicTableComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PoPageDynamicTableComponent, selectors: [["po-page-dynamic-table"]], inputs: { onLoad: ["p-load", "onLoad"], keepFilters: ["p-keep-filters", "keepFilters"], actionRight: ["p-actions-right", "actionRight"], concatFilters: ["p-concat-filters", "concatFilters"], infiniteScroll: ["p-infinite-scroll", "infiniteScroll"], actions: ["p-actions", "actions"], pageCustomActions: ["p-page-custom-actions", "pageCustomActions"], tableCustomActions: ["p-table-custom-actions", "tableCustomActions"], quickSearchWidth: ["p-quick-search-width", "quickSearchWidth"], height: ["p-height", "height"] }, features: [i0.ɵɵProvidersFeature([PoPageDynamicService]), i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 16, consts: [[3, "p-actions", "p-breadcrumb", "p-filters", "p-keep-filters", "p-concat-filters", "p-quick-search-width", "p-title", "p-advanced-search", "p-change-disclaimers", "p-quick-search"], [3, "p-sort", "p-actions", "p-actions-right", "p-selectable", "p-columns", "p-items", "p-height", "p-infinite-scroll", "p-show-more-disabled", "p-show-more", "p-sort-by"]], template: function PoPageDynamicTableComponent_Template(rf, ctx) { if (rf & 1) {
841
873
  i0.ɵɵelementStart(0, "po-page-dynamic-search", 0);
842
874
  i0.ɵɵlistener("p-advanced-search", function PoPageDynamicTableComponent_Template_po_page_dynamic_search_p_advanced_search_0_listener($event) { return ctx.onAdvancedSearch($event); })("p-change-disclaimers", function PoPageDynamicTableComponent_Template_po_page_dynamic_search_p_change_disclaimers_0_listener($event) { return ctx.onChangeDisclaimers($event); })("p-quick-search", function PoPageDynamicTableComponent_Template_po_page_dynamic_search_p_quick_search_0_listener($event) { return ctx.onQuickSearch($event); });
843
875
  i0.ɵɵelementStart(1, "po-table", 1);
@@ -846,7 +878,7 @@ PoPageDynamicTableComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
846
878
  } if (rf & 2) {
847
879
  i0.ɵɵproperty("p-actions", ctx.pageActions)("p-breadcrumb", ctx.breadcrumb)("p-filters", ctx.filters)("p-keep-filters", ctx.keepFilters)("p-concat-filters", ctx.concatFilters)("p-quick-search-width", ctx.quickSearchWidth)("p-title", ctx.title);
848
880
  i0.ɵɵadvance(1);
849
- i0.ɵɵproperty("p-sort", true)("p-actions", ctx.tableActions)("p-actions-right", ctx.actionRight)("p-selectable", ctx.enableSelectionTable)("p-columns", ctx.columns)("p-items", ctx.items)("p-show-more-disabled", !ctx.hasNext);
881
+ i0.ɵɵproperty("p-sort", true)("p-actions", ctx.tableActions)("p-actions-right", ctx.actionRight)("p-selectable", ctx.enableSelectionTable)("p-columns", ctx.columns)("p-items", ctx.items)("p-height", ctx.height)("p-infinite-scroll", ctx.infiniteScroll)("p-show-more-disabled", !ctx.hasNext);
850
882
  } }, directives: [i6.PoPageDynamicSearchComponent, i2.PoTableComponent], encapsulation: 2 });
851
883
  __decorate([
852
884
  InputBoolean()
@@ -857,9 +889,12 @@ __decorate([
857
889
  __decorate([
858
890
  InputBoolean()
859
891
  ], PoPageDynamicTableComponent.prototype, "concatFilters", void 0);
892
+ __decorate([
893
+ InputBoolean()
894
+ ], PoPageDynamicTableComponent.prototype, "infiniteScroll", void 0);
860
895
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoPageDynamicTableComponent, [{
861
896
  type: Component,
862
- args: [{ selector: 'po-page-dynamic-table', providers: [PoPageDynamicService], template: "<po-page-dynamic-search\n [p-actions]=\"pageActions\"\n [p-breadcrumb]=\"breadcrumb\"\n [p-filters]=\"filters\"\n [p-keep-filters]=\"keepFilters\"\n [p-concat-filters]=\"concatFilters\"\n [p-quick-search-width]=\"quickSearchWidth\"\n [p-title]=\"title\"\n (p-advanced-search)=\"onAdvancedSearch($event)\"\n (p-change-disclaimers)=\"onChangeDisclaimers($event)\"\n (p-quick-search)=\"onQuickSearch($event)\"\n>\n <po-table\n [p-sort]=\"true\"\n [p-actions]=\"tableActions\"\n [p-actions-right]=\"actionRight\"\n [p-selectable]=\"enableSelectionTable\"\n [p-columns]=\"columns\"\n [p-items]=\"items\"\n [p-show-more-disabled]=\"!hasNext\"\n (p-show-more)=\"showMore()\"\n (p-sort-by)=\"onSort($event)\"\n >\n </po-table>\n</po-page-dynamic-search>\n" }]
897
+ args: [{ selector: 'po-page-dynamic-table', providers: [PoPageDynamicService], template: "<po-page-dynamic-search\n [p-actions]=\"pageActions\"\n [p-breadcrumb]=\"breadcrumb\"\n [p-filters]=\"filters\"\n [p-keep-filters]=\"keepFilters\"\n [p-concat-filters]=\"concatFilters\"\n [p-quick-search-width]=\"quickSearchWidth\"\n [p-title]=\"title\"\n (p-advanced-search)=\"onAdvancedSearch($event)\"\n (p-change-disclaimers)=\"onChangeDisclaimers($event)\"\n (p-quick-search)=\"onQuickSearch($event)\"\n>\n <po-table\n [p-sort]=\"true\"\n [p-actions]=\"tableActions\"\n [p-actions-right]=\"actionRight\"\n [p-selectable]=\"enableSelectionTable\"\n [p-columns]=\"columns\"\n [p-items]=\"items\"\n [p-height]=\"height\"\n [p-infinite-scroll]=\"infiniteScroll\"\n [p-show-more-disabled]=\"!hasNext\"\n (p-show-more)=\"showMore()\"\n (p-sort-by)=\"onSort($event)\"\n >\n </po-table>\n</po-page-dynamic-search>\n" }]
863
898
  }], function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.PoDialogService }, { type: i2.PoNotificationService }, { type: i3.PoPageDynamicService }, { type: i4.PoPageCustomizationService }, { type: i5.PoPageDynamicTableActionsService }, { type: i2.PoLanguageService }]; }, { onLoad: [{
864
899
  type: Input,
865
900
  args: ['p-load']
@@ -872,6 +907,9 @@ __decorate([
872
907
  }], concatFilters: [{
873
908
  type: Input,
874
909
  args: ['p-concat-filters']
910
+ }], infiniteScroll: [{
911
+ type: Input,
912
+ args: ['p-infinite-scroll']
875
913
  }], actions: [{
876
914
  type: Input,
877
915
  args: ['p-actions']
@@ -884,5 +922,8 @@ __decorate([
884
922
  }], quickSearchWidth: [{
885
923
  type: Input,
886
924
  args: ['p-quick-search-width']
925
+ }], height: [{
926
+ type: Input,
927
+ args: ['p-height']
887
928
  }] }); })();
888
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tcGFnZS1keW5hbWljLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RlbXBsYXRlcy9zcmMvbGliL2NvbXBvbmVudHMvcG8tcGFnZS1keW5hbWljLXRhYmxlL3BvLXBhZ2UtZHluYW1pYy10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90ZW1wbGF0ZXMvc3JjL2xpYi9jb21wb25lbnRzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS9wby1wYWdlLWR5bmFtaWMtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUVwRSxPQUFPLEVBQUUsWUFBWSxFQUFjLEtBQUssRUFBVSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbkUsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckQsT0FBTyxFQUNMLFlBQVksRUFRWixxQkFBcUIsRUFDckIsZUFBZSxFQUNoQixNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sS0FBSyxJQUFJLE1BQU0sa0JBQWtCLENBQUM7QUFFekMsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFFMUcsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDdkYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFlOUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7OztBQUUxRixNQUFNLGlCQUFpQixHQUFHLEVB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QUFXO2tCQURWLEtBQUs7bUJBQUMsaUJBQWlCO1lBMkJ4QixhQUFhO2tCQURaLEtBQUs7bUJBQUMsa0JBQWtCO1lBdURELE9BQU87a0JBQTlCLEtBQUs7bUJBQUMsV0FBVztZQThCa0IsaUJBQWlCO2tCQUFwRCxLQUFLO21CQUFDLHVCQUF1QjtZQTRCTyxrQkFBa0I7a0JBQXRELEtBQUs7bUJBQUMsd0JBQXdCO1lBbUJJLGdCQUFnQjtrQkFBbEQsS0FBSzttQkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIE9ic2VydmFibGUsIEVNUFRZLCBjb25jYXQsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YXAsIHN3aXRjaE1hcCwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1xuICBJbnB1dEJvb2xlYW4sXG4gIFBvRGlhbG9nQ29uZmlybU9wdGlvbnMsXG4gIFBvRGlhbG9nU2VydmljZSxcbiAgUG9MYW5ndWFnZVNlcnZpY2UsXG4gIFBvTm90aWZpY2F0aW9uU2VydmljZSxcbiAgUG9QYWdlQWN0aW9uLFxuICBQb1RhYmxlQWN0aW9uLFxuICBQb1RhYmxlQ29sdW1uU29ydCxcbiAgUG9UYWJsZUNvbHVtblNvcnRUeXBlLFxuICBwb0xvY2FsZURlZmF1bHRcbn0gZnJvbSAnQHBvLXVpL25nLWNvbXBvbmVudHMnO1xuXG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uLy4uL3V0aWxzL3V0aWwnO1xuXG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljRGV0YWlsQ29tcG9uZW50IH0gZnJvbSAnLi4vcG8tcGFnZS1keW5hbWljLWRldGFpbC9wby1wYWdlLWR5bmFtaWMtZGV0YWlsLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IHBvUGFnZUR5bmFtaWNUYWJsZUxpdGVyYWxzRGVmYXVsdCB9IGZyb20gJy4vcG8tcGFnZS1keW5hbWljLXRhYmxlLWxpdGVyYWxzJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNMaXN0QmFzZUNvbXBvbmVudCB9IGZyb20gJy4vcG8tcGFnZS1keW5hbWljLWxpc3QtYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wby1wYWdlLWR5bmFtaWMvcG8tcGFnZS1keW5hbWljLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9ucyB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWR5bmFtaWMtdGFibGUtYWN0aW9ucy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1RhYmxlT3B0aW9ucyB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWR5bmFtaWMtdGFibGUtb3B0aW9ucy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9QYWdlQ3VzdG9taXphdGlvblNlcnZpY2UgfSBmcm9tICcuLy4uLy4uL3NlcnZpY2VzL3BvLXBhZ2UtY3VzdG9taXphdGlvbi9wby1wYWdlLWN1c3RvbWl6YXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljT3B0aW9uc1NjaGVtYSB9IGZyb20gJy4vLi4vLi4vc2VydmljZXMvcG8tcGFnZS1jdXN0b21pemF0aW9uL3BvLXBhZ2UtZHluYW1pYy1vcHRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljVGFibGVNZXRhRGF0YSB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWR5bmFtaWMtdGFibGUtbWV0YWRhdGEuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi9wby1wYWdlLWR5bmFtaWMtdGFibGUtYWN0aW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZUVkaXQgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLXRhYmxlLWJlZm9yZS1lZGl0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVOZXcgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLXRhYmxlLWJlZm9yZS1uZXcuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZVJlbW92ZSB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWR5bmFtaWMtdGFibGUtYmVmb3JlLXJlbW92ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1RhYmxlQmVmb3JlRGV0YWlsIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS1iZWZvcmUtZGV0YWlsLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVEdXBsaWNhdGUgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLXRhYmxlLWJlZm9yZS1kdXBsaWNhdGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZVJlbW92ZUFsbCB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWR5bmFtaWMtdGFibGUtYmVmb3JlLXJlbW92ZS1hbGwuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbUFjdGlvbiB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWR5bmFtaWMtdGFibGUtY3VzdG9tLWFjdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1RhYmxlQ3VzdG9tVGFibGVBY3Rpb24gfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLXRhYmxlLWN1c3RvbS10YWJsZS1hY3Rpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IGlzRXh0ZXJuYWxMaW5rLCBvcGVuRXh0ZXJuYWxMaW5rLCByZW1vdmVEdXBsaWNhdGVJdGVtcyB9IGZyb20gJy4uLy4uL3V0aWxzL3V0aWwnO1xuXG5jb25zdCBQQUdFX1NJWkVfREVGQVVMVCA9IDEwO1xuXG50eXBlIFVybE9yUG9DdXN0b21pemF0aW9uRnVuY3Rpb24gPSBzdHJpbmcgfCAoKCkgPT4gUG9QYWdlRHluYW1pY1RhYmxlT3B0aW9ucyk7XG5cbi8qKlxuICogQGRvY3NFeHRlbmRzIFBvUGFnZUR5bmFtaWNMaXN0QmFzZUNvbXBvbmVudFxuICpcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIE8gYHBvLXBhZ2UtZHluYW1pYy10YWJsZWAgw6kgdW1hIHDDoWdpbmEgcXVlIGV4aWJlIHVtYSBsaXN0YSBkZSByZWdpc3Ryb3MgZW0gdW1hIHRhYmVsYSBiYXNlYWRvIGVtIHVtYSBsaXN0YSBkZSBmaWVsZHMsXG4gKiBvIG1lc21vIHRhbWLDqW0gc3Vwb3J0YSBtZXRhZGFkb3MgY29uZm9ybWUgZXNwZWNpZmljYWRvIG5hIGRvY3VtZW50YcOnw6NvLlxuICpcbiAqICMjIyBVdGlsaXphw6fDo28gdmlhIHJvdGFcbiAqXG4gKiBBbyB1dGlsaXphciBhcyByb3RhcyBwYXJhIGNhcnJlZ2FyIG8gdGVtcGxhdGUsIG8gYHBhZ2UtZHluYW1pYy10YWJsZWAgZGlzcG9uaWJpbGl6YSBwcm9wcmllZGFkZXMgcGFyYVxuICogcG9kZXIgZXNwZWNpZmljYXIgbyBlbmRwb2ludCBkb3MgZGFkb3MgZSBkb3MgbWV0YWRhZG9zLiBFeGVtcGxvIGRlIHV0aWxpemHDp8OjbzpcbiAqXG4gKiBPIGNvbXBvbmVudGUgcHJpbWVpcm8gaXLDoSBjYXJyZWdhciBvIG1ldGFkYWRvIGRhIHJvdGEgZGVmaW5pZGEgbmEgcHJvcHJpZWRhZGUgc2VydmljZU1ldGFkYXRhQXBpXG4gKiBlIGRlcG9pcyBpcsOhIGJ1c2NhciBkYSByb3RhIGRlZmluaWRhIG5hIHByb3ByaWVkYWRlIHNlcnZpY2VMb2FkQXBpXG4gKlxuICogPiBDYXNvIG8gc2Vydmlkb3IgcmV0b3JuYXIgdW0gZXJybyBhbyByZWN1cGVyYXIgbyBtZXRhZGFkb3MsIHNlcsOhIHJlcGFzc2FkbyBvIG1ldGFkYWRvcyBzYWx2byBlbSBjYWNoZSxcbiAqIHNlIG8gY2FjaGUgbsOjbyBleGlzdGUgc2Vyw6EgZGlzcGFyYWRvIHVtYSBub3RpZmljYcOnw6NvLlxuICpcbiAqIGBgYFxuICoge1xuICogICBwYXRoOiAncGVvcGxlJyxcbiAqICAgY29tcG9uZW50OiBQb1BhZ2VEeW5hbWljVGFibGVDb21wb25lbnQsXG4gKiAgIGRhdGE6IHtcbiAqICAgICBzZXJ2aWNlQXBpOiAnaHR0cDovL2xvY2FsaG9zdDozMDAwL3YxL3Blb3BsZScsIC8vIGVuZHBvaW50IGRvcyBkYWRvc1xuICogICAgIHNlcnZpY2VNZXRhZGF0YUFwaTogJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMC92MS9tZXRhZGF0YScsIC8vIGVuZHBvaW50IGRvcyBtZXRhZGFkb3MgdXRpbGl6YW5kbyBvIG3DqXRvZG8gSFRUUCBHZXRcbiAqICAgICBzZXJ2aWNlTG9hZEFwaTogJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9sb2FkLW1ldGFkYXRhJyAvLyBlbmRwb2ludCBkZSBjdXN0b21pemHDp8O1ZXMgZG9zIG1ldGFkYWRvcyB1dGlsaXphbmRvIG8gbcOpdG9kbyBIVFRQIFBvc3RcbiAqICAgfVxuICogfVxuICpcbiAqIGBgYFxuICpcbiAqIEEgcmVxdWlzacOnw6NvIGRvcyBtZXRhZGFkb3Mgw6kgZmVpdGEgbmEgaW5pY2lhbGl6YcOnw6NvIGRvIHRlbXBsYXRlIHBhcmEgYnVzY2FyIG9zIG1ldGFkYWRvcyBkYSBww6FnaW5hIHBhc3NhbmRvIG9cbiAqIHRpcG8gZG8gbWV0YWRhZG8gZXNwZXJhZG8gZSBhIHZlcnPDo28gY2FjaGVhZGEgcGVsbyBicm93c2VyLlxuICpcbiAqIE8gZm9ybWF0byBlc3BlcmFkbyBuYSByZXNwb3N0YSBkYSByZXF1aXNpw6fDo28gZXN0w6EgZXNwZWNpZmljYWRvIG5hIGludGVyZmFjZVxuICogW1BvUGFnZUR5bmFtaWNUYWJsZU1ldGFkYXRhXSgvZG9jdW1lbnRhdGlvbi9wby1wYWdlLWR5bmFtaWMtdGFibGUjcG8tcGFnZS1keW5hbWljLXRhYmxlLW1ldGFkYXRhKS4gUG9yIGV4ZW1wbG86XG4gKlxuICogYGBgXG4gKiAge1xuICogICB2ZXJzaW9uOiAxLFxuICogICB0aXRsZTogJ1BlcnNvbiBUYWJsZScsXG4gKiAgIGZpZWxkczogW1xuICogICAgIHsgcHJvcGVydHk6ICdpZCcsIGtleTogdHJ1ZSwgZGlzYWJsZWQ6IHRydWUgfSxcbiAqICAgICB7IHByb3BlcnR5OiAnc3RhdHVzJyB9LFxuICogICAgIHsgcHJvcGVydHk6ICduYW1lJyB9LFxuICogICAgIHsgcHJvcGVydHk6ICduaWNrbmFtZScgfSxcbiAqICAgICB7IHByb3BlcnR5OiAnYmlydGhkYXRlJywgbGFiZWw6ICdCaXJ0aCBkYXRlJyB9LFxuICogICAgIHsgcHJvcGVydHk6ICdnZW5yZScgfSxcbiAqICAgICB7IHByb3BlcnR5OiAnY2l0eScgfSxcbiAqICAgICB7IHByb3BlcnR5OiAnY291bnRyeScgfVxuICogICBdLFxuICogICBrZWVwRmlsdGVyczogdHJ1ZVxuICogfVxuICogYGBgXG4gKlxuICogPiBDYXNvIG8gZW5kcG9pbnQgZG9zIG1ldGFkYWRvcyBuw6NvIHNlamEgZXNwZWNpZmljYWRvLCBzZXLDoSBmZWl0byB1bWEgcmVxdWlzacOnw6NvIHV0aWxpemFuZG8gbyBgc2VydmljZUFwaWAgZGEgc2VndWludGUgZm9ybWE6XG4gKiBgYGBcbiAqIEdFVCB7ZW5kLXBvaW50fS9tZXRhZGF0YT90eXBlPWxpc3QmdmVyc2lvbj17dmVyc2lvbn1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLXBhZ2UtZHluYW1pYy10YWJsZS1iYXNpY1wiIHRpdGxlPVwiUE8gUGFnZSBEeW5hbWljIFRhYmxlIEJhc2ljXCI+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtYmFzaWMvc2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS1iYXNpYy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtYmFzaWMvc2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS1iYXNpYy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1wYWdlLWR5bmFtaWMtdGFibGUtdXNlcnNcIiB0aXRsZT1cIlBPIFBhZ2UgRHluYW1pYyBUYWJsZSAtIFVzZXJzXCI+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtdXNlcnMvc2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS11c2Vycy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtdXNlcnMvc2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS11c2Vycy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLXVzZXJzL3NhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtdXNlcnMuc2VydmljZS50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BvLXBhZ2UtZHluYW1pYy10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9wby1wYWdlLWR5bmFtaWMtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtQb1BhZ2VEeW5hbWljU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgUG9QYWdlRHluYW1pY1RhYmxlQ29tcG9uZW50IGV4dGVuZHMgUG9QYWdlRHluYW1pY0xpc3RCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogRnVuw6fDo28gb3Ugc2VydmnDp28gcXVlIHNlcsOhIGV4ZWN1dGFkbyBuYSBpbmljaWFsaXphw6fDo28gZG8gY29tcG9uZW50ZS5cbiAgICpcbiAgICogQSBwcm9wcmllZGFkZSBhY2VpdGEgb3Mgc2VndWludGVzIHRpcG9zOlxuICAgKiAtIGBzdHJpbmdgOiAqRW5kcG9pbnQqIHVzYWRvIHBlbG8gY29tcG9uZW50ZSBwYXJhIHJlcXVpc2nDp8OjbyB2aWEgYFBPU1RgLlxuICAgKiAtIGBmdW5jdGlvbmA6IE3DqXRvZG8gcXVlIHNlcsOhIGV4ZWN1dGFkby5cbiAgICpcbiAgICogTyByZXRvcm5vIGRlc3RhIGZ1bsOnw6NvIGRldmUgc2VyIGRvIHRpcG8gYFBvUGFnZUR5bmFtaWNUYWJsZU9wdGlvbnNgLFxuICAgKiBvbmRlIG8gdXN1w6FyaW8gcG9kZXLDoSBjdXN0b21pemFyIG5vdm9zIGNhbXBvcywgYnJlYWRjcnVtYiwgdGl0bGUgZSBhY3Rpb25zXG4gICAqXG4gICAqIFBvciBleGVtcGxvOlxuICAgKlxuICAgKiBgYGBcbiAgICogZ2V0UGFnZU9wdGlvbnMoKTogUG9QYWdlRHluYW1pY1RhYmxlT3B0aW9ucyB7XG4gICAqIHJldHVybiB7XG4gICAqICAgYWN0aW9uczpcbiAgICogICAgIHsgbmV3OiAnbmV3JywgZWRpdDogJ2VkaXQvOmlkJywgcmVtb3ZlOiB0cnVlIH0sXG4gICAqICAgZmllbGRzOiBbXG4gICAqICAgICB7IHByb3BlcnR5OiAnaWRDYXJkJywgZ3JpZENvbHVtbnM6IDYgfVxuICAgKiAgIF1cbiAgICogfTtcbiAgICogfVxuICAgKlxuICAgKiBgYGBcbiAgICogUGFyYSByZWZlcmVuY2lhciBhIHN1YSBmdW7Dp8OjbyB1dGlsaXplIGEgcHJvcHJpZWRhZGUgYGJpbmRgLCBwb3IgZXhlbXBsbzpcbiAgICogYGBgXG4gICAqICBbcC1sb2FkXT1cIm9uTG9hZE9wdGlvbnMuYmluZCh0aGlzKVwiXG4gICAqIGBgYFxuICAgKi9cbiAgQElucHV0KCdwLWxvYWQnKSBvbkxvYWQ6IHN0cmluZyB8ICgoKSA9PiBQb1BhZ2VEeW5hbWljVGFibGVPcHRpb25zKTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBNYW50w6ltIG5hIG1vZGFsIGRlIGBCdXNjYSBBdmFuw6dhZGFgIG9zIHZhbG9yZXMgcHJlZW5jaGlkb3MgZG8gw7psdGltbyBmaWx0cm8gcmVhbGl6YWRvIHBlbG8gdXN1w6FyaW8uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dEJvb2xlYW4oKVxuICBASW5wdXQoJ3Ata2VlcC1maWx0ZXJzJylcbiAga2VlcEZpbHRlcnM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgcXVlIGEgY29sdW5hIGRlIGHDp8O1ZXMgZmljYXLDoSBubyBsYWRvIGRpcmVpdG8gZGEgdGFiZWxhLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXRCb29sZWFuKClcbiAgQElucHV0KCdwLWFjdGlvbnMtcmlnaHQnKVxuICBhY3Rpb25SaWdodD86IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBQZXJtaXRlIGEgdXRpbGl6YcOnw6NvIGRhIHBlc3F1aXNhIHLDoXBpZGEganVudG8gY29tIGEgcGVzcXVpc2EgYXZhbsOnYWRhLlxuICAgKlxuICAgKiBEZXN0YSBmb3JtYSwgYW8gdGVyIHVtYSBwZXNxdWlzYSBhdmFuw6dhZGEgZXN0YWJlbGVjaWRhIGUgc2VyXG4gICAqIHByZWVuY2hpZG8gYSBwZXNxdWlzYSByw6FwaWRhLCBvIGZpbHRybyBzZXLDoSBjb25jYXRlbmFkbyBhZGljaW9uYW5kbyBhIHBlc3F1aXNhXG4gICAqIHLDoXBpZGEgdGFtYsOpbSBuYSBsaXN0YSBkZSBgZGlzY2xhaW1lcnNgIGEgYXBsaWNhbmRvIHVtYSBub3ZhIGJ1c2NhIGNvbSBhIGNvbmNhdGVuYcOnw6NvLlxuICAgKlxuICAgKiBQb3IgZXhlbXBsbywgY29tIG9zIHNlZ3VpbnRlcyBmaWx0cm9zIGFwbGljYWRvczpcbiAgICogICAtIGZpbHRybyBhdmFuw6dhZG86IGB7IG5hbWU6ICdNaWtlJywgYWdlOiAnMTInIH1gXG4gICAqICAgLSBmaWx0cm8gcsOhcGlkbzogYHsgc2VhcmNoOiAncGFwZXInIH1gXG4gICAqXG4gICAqIEEgcmVxdWlzacOnw6NvIGRvcyBkYWRvcyBuYSBBUEkgZmljYXLDoSBjb20gb3MgcGFyw6JtZXRyb3M6XG4gICAqIGBgYFxuICAgKiBwYWdlPTEmcGFnZVNpemU9MTAmbmFtZT1NaWtlJmFnZT0xMiZzZWFyY2g9cGFwZXJcbiAgICogYGBgXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dEJvb2xlYW4oKVxuICBASW5wdXQoJ3AtY29uY2F0LWZpbHRlcnMnKVxuICBjb25jYXRGaWx0ZXJzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgaGFzTmV4dCA9IGZhbHNlO1xuICBpdGVtcyA9IFtdO1xuICBsaXRlcmFscztcbiAgcGFnZUFjdGlvbnM6IEFycmF5PFBvUGFnZUFjdGlvbj4gPSBbXTtcbiAgdGFibGVBY3Rpb25zOiBBcnJheTxQb1RhYmxlQWN0aW9uPiA9IFtdO1xuXG4gIHByaXZhdGUgX2FjdGlvbnM6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnMgPSB7fTtcbiAgcHJpdmF0ZSBfcGFnZUN1c3RvbUFjdGlvbnM6IEFycmF5PFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbUFjdGlvbj4gPSBbXTtcbiAgcHJpdmF0ZSBfcXVpY2tTZWFyY2hXaWR0aDogbnVtYmVyO1xuICBwcml2YXRlIF90YWJsZUN1c3RvbUFjdGlvbnM6IEFycmF5PFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbVRhYmxlQWN0aW9uPiA9IFtdO1xuXG4gIHByaXZhdGUgcGFnZTogbnVtYmVyID0gMTtcbiAgcHJpdmF0ZSBjdXJyZW50UGFnZTogbnVtYmVyID0gMTtcbiAgcHJpdmF0ZSBpdGVtU2VsZWN0ZWRBY3Rpb247XG4gIHByaXZhdGUgcGFyYW1zID0ge307XG4gIHByaXZhdGUgc29ydGVkQ29sdW1uOiBQb1RhYmxlQ29sdW1uU29ydDtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIGhhc0N1c3RvbUFjdGlvbldpdGhTZWxlY3RhYmxlID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfY3VzdG9tUGFnZUxpc3RBY3Rpb25zOiBBcnJheTxQb1BhZ2VBY3Rpb24+ID0gW107XG4gIHByaXZhdGUgX2N1c3RvbVRhYmxlQWN0aW9uczogQXJyYXk8UG9UYWJsZUFjdGlvbj4gPSBbXTtcbiAgcHJpdmF0ZSBfZGVmYXVsdFBhZ2VBY3Rpb25zOiBBcnJheTxQb1BhZ2VBY3Rpb24+ID0gW107XG4gIHByaXZhdGUgX2RlZmF1bHRUYWJsZUFjdGlvbnM6IEFycmF5PFBvVGFibGVBY3Rpb24+ID0gW107XG5cbiAgcHJpdmF0ZSBzZXQgZGVmYXVsdFBhZ2VBY3Rpb25zKHZhbHVlOiBBcnJheTxQb1BhZ2VBY3Rpb24+KSB7XG4gICAgdGhpcy5fZGVmYXVsdFBhZ2VBY3Rpb25zID0gdmFsdWU7XG4gICAgdGhpcy51cGRhdGVQYWdlQWN0aW9ucygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXQgZGVmYXVsdFRhYmxlQWN0aW9ucyh2YWx1ZTogQXJyYXk8UG9UYWJsZUFjdGlvbj4pIHtcbiAgICB0aGlzLl9kZWZhdWx0VGFibGVBY3Rpb25zID0gdmFsdWU7XG4gICAgdGhpcy51cGRhdGVUYWJsZUFjdGlvbnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0IGN1c3RvbVBhZ2VMaXN0QWN0aW9ucyh2YWx1ZTogQXJyYXk8UG9QYWdlQWN0aW9uPikge1xuICAgIHRoaXMuX2N1c3RvbVBhZ2VMaXN0QWN0aW9ucyA9IHZhbHVlO1xuICAgIHRoaXMudXBkYXRlUGFnZUFjdGlvbnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0IGN1c3RvbVRhYmxlQWN0aW9ucyh2YWx1ZTogQXJyYXk8UG9UYWJsZUFjdGlvbj4pIHtcbiAgICB0aGlzLl9jdXN0b21UYWJsZUFjdGlvbnMgPSB2YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZVRhYmxlQWN0aW9ucygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogQcOnw7VlcyBkYSBww6FnaW5hIGUgZGEgdGFiZWxhLlxuICAgKiA+IENhc28gdXRpbGl6YXIgYSBhw6fDo28gcGFkcsOjbyBkZSBleGNsdWlyLCBhIG1lc21hIHNlcsOhIGV4aWJpZGEgcG9yIMO6bHRpbW8gbmEgdGFiZWxhLlxuICAgKi9cbiAgQElucHV0KCdwLWFjdGlvbnMnKSBzZXQgYWN0aW9ucyh2YWx1ZTogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9ucykge1xuICAgIHRoaXMuX2FjdGlvbnMgPSB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPiAwID8gdmFsdWUgOiB7fTtcblxuICAgIHRoaXMuc2V0UGFnZUFjdGlvbnModGhpcy5hY3Rpb25zKTtcbiAgICB0aGlzLnNldFJlbW92ZUFsbEFjdGlvbigpO1xuICAgIHRoaXMuc2V0VGFibGVBY3Rpb25zKHRoaXMuYWN0aW9ucyk7XG4gIH1cblxuICBnZXQgYWN0aW9ucygpOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIExpc3RhIGRlIGHDp8O1ZXMgY3VzdG9taXphZGFzIGRhIHDDoWdpbmEgcXVlIHNlcsOjbyBpbmNvcnBvcmFkYXMgw6BzIGHDp8O1ZXNcbiAgICogaW5mb3JtYWRhcyBhdHJhdsOpcyBkYSBwcm9wcmllZGFkZSBgcC1hY3Rpb25zYC5cbiAgICpcbiAgICogRXNzYXMgYcOnw7VlcyBmaWNhbSBsb2NhbGl6YWRhcyBuYSBwYXJ0ZSBzdXBlcmlvciBkYSBww6FnaW5hIGVtIGJvdMO1ZXMgY29tIGHDp8O1ZXMuXG4gICAqXG4gICAqIEV4ZW1wbG8gZGUgdXRpbGl6YcOnw6NvOlxuICAgKiBgYGBcbiAgICogW1xuICAgKiAgeyBsYWJlbDogJ0V4cG9ydCcsIGFjdGlvbjogdGhpcy5leHBvcnQuYmluZCh0aGlzKSB9LFxuICAgKiAgeyBsYWJlbDogJ1ByaW50JywgYWN0aW9uOiB0aGlzLnByaW50LmJpbmQodGhpcykgfVxuICAgKiBdO1xuICAgKiBgYGBcbiAgICovXG4gIEBJbnB1dCgncC1wYWdlLWN1c3RvbS1hY3Rpb25zJykgc2V0IHBhZ2VDdXN0b21BY3Rpb25zKHZhbHVlOiBBcnJheTxQb1BhZ2VEeW5hbWljVGFibGVDdXN0b21BY3Rpb24+KSB7XG4gICAgdGhpcy5fcGFnZUN1c3RvbUFjdGlvbnMgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW107XG5cbiAgICB0aGlzLmN1c3RvbVBhZ2VMaXN0QWN0aW9ucyA9IHRoaXMudHJhbnNmb3JtQ3VzdG9tQWN0aW9uc1RvUGFnZUxpc3RBY3Rpb24odGhpcy5wYWdlQ3VzdG9tQWN0aW9ucyk7XG4gICAgdGhpcy5oYXNDdXN0b21BY3Rpb25XaXRoU2VsZWN0YWJsZSA9IHRoaXMucGFnZUN1c3RvbUFjdGlvbnMuc29tZShjdXN0b21BY3Rpb24gPT4gY3VzdG9tQWN0aW9uLnNlbGVjdGFibGUpO1xuICB9XG5cbiAgZ2V0IHBhZ2VDdXN0b21BY3Rpb25zKCk6IEFycmF5PFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbUFjdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLl9wYWdlQ3VzdG9tQWN0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIExpc3RhIGRlIGHDp8O1ZXMgY3VzdG9taXphZGFzIG5hIHRhYmVsYSBkYSBww6FnaW5hIHF1ZSBzZXLDo28gaW5jb3Jwb3JhZGFzIMOgcyBhw6fDtWVzXG4gICAqIGluZm9ybWFkYXMgYXRyYXbDqXMgZGEgcHJvcHJpZWRhZGUgYHAtYWN0aW9uc2AuXG4gICAqXG4gICAqIEV4ZW1wbG8gZGUgdXRpbGl6YcOnw6NvOlxuICAgKiBgYGBcbiAgICogW1xuICAgKiAgeyBsYWJlbDogJ0FwcGx5IGRpc2NvdW50JywgYWN0aW9uOiB0aGlzLmFwcGx5RGlzY291bnQuYmluZCh0aGlzKSB9LFxuICAgKiAgeyBsYWJlbDogJ0RldGFpbHMnLCBhY3Rpb246IHRoaXMuZGV0YWlscy5iaW5kKHRoaXMpIH1cbiAgICogXTtcbiAgICogYGBgXG4gICAqID4gQ2FzbyB1dGlsaXphciBhIGHDp8OjbyBwYWRyw6NvIGRlIGV4Y2x1aXIsIGEgbWVzbWEgc2Vyw6EgZXhpYmlkYSBwb3Igw7psdGltbyBuYSB0YWJlbGEuXG4gICAqL1xuICBASW5wdXQoJ3AtdGFibGUtY3VzdG9tLWFjdGlvbnMnKSBzZXQgdGFibGVDdXN0b21BY3Rpb25zKHZhbHVlOiBBcnJheTxQb1BhZ2VEeW5hbWljVGFibGVDdXN0b21UYWJsZUFjdGlvbj4pIHtcbiAgICB0aGlzLl90YWJsZUN1c3RvbUFjdGlvbnMgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW107XG5cbiAgICB0aGlzLmN1c3RvbVRhYmxlQWN0aW9ucyA9IHRoaXMudHJhbnNmb3JtVGFibGVDdXN0b21BY3Rpb25zVG9UYWJsZUFjdGlvbnModGhpcy50YWJsZUN1c3RvbUFjdGlvbnMpO1xuICB9XG5cbiAgZ2V0IHRhYmxlQ3VzdG9tQWN0aW9ucygpOiBBcnJheTxQb1BhZ2VEeW5hbWljVGFibGVDdXN0b21UYWJsZUFjdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLl90YWJsZUN1c3RvbUFjdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBMYXJndXJhIGRvIGNhbXBvIGRlIGJ1c2NhLCB1dGlsaXphbmRvIG8gKkdyaWQgU3lzdGVtKixcbiAgICogZSBsaW1pdGFkbyBhbyBtw6F4aW1vIGRlIDYgY29sdW5hcy4gTyB0YW1hbmhvIG3DrW5pbW8gw6kgY29udHJvbGFkb1xuICAgKiBjb25mb3JtZSByZXNvbHXDp8OjbyBkZSB0ZWxhIHBhcmEgbWFudGVyIGEgY29uc2lzdMOqbmNpYSBkbyBsYXlvdXQuXG4gICAqL1xuICBASW5wdXQoJ3AtcXVpY2stc2VhcmNoLXdpZHRoJykgc2V0IHF1aWNrU2VhcmNoV2lkdGgodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX3F1aWNrU2VhcmNoV2lkdGggPSB1dGlsLmNvbnZlcnRUb0ludCh2YWx1ZSk7XG4gIH1cblxuICBnZXQgcXVpY2tTZWFyY2hXaWR0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9xdWlja1NlYXJjaFdpZHRoO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHBvRGlhbG9nU2VydmljZTogUG9EaWFsb2dTZXJ2aWNlLFxuICAgIHByaXZhdGUgcG9Ob3RpZmljYXRpb246IFBvTm90aWZpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHBvUGFnZUR5bmFtaWNTZXJ2aWNlOiBQb1BhZ2VEeW5hbWljU2VydmljZSxcbiAgICBwcml2YXRlIHBvUGFnZUN1c3RvbWl6YXRpb25TZXJ2aWNlOiBQb1BhZ2VDdXN0b21pemF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNTZXJ2aWNlOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zU2VydmljZSxcbiAgICBsYW5ndWFnZVNlcnZpY2U6IFBvTGFuZ3VhZ2VTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBjb25zdCBsYW5ndWFnZSA9IGxhbmd1YWdlU2VydmljZS5nZXRTaG9ydExhbmd1YWdlKCk7XG5cbiAgICB0aGlzLmxpdGVyYWxzID0ge1xuICAgICAgLi4ucG9QYWdlRHluYW1pY1RhYmxlTGl0ZXJhbHNEZWZhdWx0W3BvTG9jYWxlRGVmYXVsdF0sXG4gICAgICAuLi5wb1BhZ2VEeW5hbWljVGFibGVMaXRlcmFsc0RlZmF1bHRbbGFuZ3VhZ2VdXG4gICAgfTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubG9hZERhdGFGcm9tQVBJKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG9uQWR2YW5jZWRTZWFyY2goZmlsdGVyKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmxvYWREYXRhKHsgcGFnZTogMSwgLi4uZmlsdGVyIH0pLnN1YnNjcmliZSgpKTtcbiAgICB0aGlzLnBhcmFtcyA9IGZpbHRlcjtcblxuICAgIGlmICh0aGlzLmtlZXBGaWx0ZXJzKSB7XG4gICAgICB0aGlzLnVwZGF0ZUZpbHRlclZhbHVlKGZpbHRlcik7XG4gICAgfVxuICB9XG5cbiAgb25DaGFuZ2VEaXNjbGFpbWVycyhkaXNjbGFpbWVycykge1xuICAgIGNvbnN0IGZpbHRlciA9IHt9O1xuXG4gICAgZGlzY2xhaW1lcnMuZm9yRWFjaChkaXNjbGFpbWVyID0+IHtcbiAgICAgIGZpbHRlcltkaXNjbGFpbWVyLnByb3BlcnR5XSA9IGRpc2NsYWltZXIudmFsdWU7XG4gICAgfSk7XG5cbiAgICB0aGlzLm9uQWR2YW5jZWRTZWFyY2goZmlsdGVyKTtcbiAgfVxuXG4gIG9uUXVpY2tTZWFyY2godGVybVR5cGVkSW5RdWlja1NlYXJjaCkge1xuICAgIGNvbnN0IHF1aWNrU2VhcmNoUGFyYW0gPSB0ZXJtVHlwZWRJblF1aWNrU2VhcmNoID8geyBzZWFyY2g6IHRlcm1UeXBlZEluUXVpY2tTZWFyY2ggfSA6IHt9O1xuICAgIHRoaXMucGFyYW1zID0gdGhpcy5jb25jYXRGaWx0ZXJzID8geyAuLi50aGlzLnBhcmFtcywgLi4ucXVpY2tTZWFyY2hQYXJhbSB9IDogeyAuLi5xdWlja1NlYXJjaFBhcmFtIH07XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMubG9hZERhdGEodGVybVR5cGVkSW5RdWlja1NlYXJjaCA/IHsgcGFnZTogMSwgLi4udGhpcy5wYXJhbXMgfSA6IHVuZGVmaW5lZCkuc3Vic2NyaWJlKCkpO1xuICB9XG5cbiAgb25Tb3J0KHNvcnRlZENvbHVtbjogUG9UYWJsZUNvbHVtblNvcnQpIHtcbiAgICB0aGlzLnNvcnRlZENvbHVtbiA9IHNvcnRlZENvbHVtbjtcbiAgfVxuXG4gIHNob3dNb3JlKCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5sb2FkRGF0YSh7IHBhZ2U6ICsrdGhpcy5wYWdlLCAuLi50aGlzLnBhcmFtcyB9KS5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICBnZXQgZW5hYmxlU2VsZWN0aW9uVGFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQWN0aW9uUmVtb3ZlQWxsIHx8IHRoaXMuaGFzQ3VzdG9tQWN0aW9uV2l0aFNlbGVjdGFibGU7XG4gIH1cblxuICBnZXQgaGFzQWN0aW9uUmVtb3ZlQWxsKCkge1xuICAgIHJldHVybiAhIXRoaXMuYWN0aW9ucy5yZW1vdmVBbGw7XG4gIH1cblxuICAvKipcbiAgICogRnVuw6fDo28gcXVlIHJlYWxpemEgYSBhdHVhbGl6YcOnw6NvIGRvcyBkYWRvcyBkYSB0YWJlbGEuXG4gICAqXG4gICAqIFBhcmEgdXRpbGl6w6EtbGEgw6kgbmVjZXNzw6FyaW8gY2FwdHVyYXIgYSBpbnN0w6JuY2lhIGRvIGBwYWdlIGR5bmFtaWMgdGFibGVgLCBjb21vIHBvciBleGVtcGxvOlxuICAgKlxuICAgKiBgYGAgaHRtbFxuICAgKiA8cG8tcGFnZS1keW5hbWljLXRhYmxlICNkeW5hbWljVGFibGUgW3Atc2VydmljZS1hcGldPVwic2VydmljZUFwaVwiPjwvcG8tcGFnZS1keW5hbWljLXRhYmxlPlxuICAgKiBgYGBcbiAgICpcbiAgICogYGBgIGphdmFzY3JpcHRcbiAgICogaW1wb3J0IHsgUG9QYWdlRHluYW1pY1RhYmxlQ29tcG9uZW50LCBQb0R5bmFtaWNGb3JtRmllbGQgfSBmcm9tICdAcG8tdWkvbmctY29tcG9uZW50cyc7XG4gICAqXG4gICAqIC4uLlxuICAgKlxuICAgKiBAVmlld0NoaWxkKCdkeW5hbWljVGFibGUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBkeW5hbWljVGFibGU6IFBvUGFnZUR5bmFtaWNUYWJsZUNvbXBvbmVudDtcbiAgICpcbiAgICogcGFnZUN1c3RvbUFjdGlvbnM6IEFycmF5PFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbUFjdGlvbj4gPSBbXG4gICAqIHtcbiAgICogICBsYWJlbDogJ1VwZGF0ZScsXG4gICAqICAgYWN0aW9uOiB0aGlzLnVwZGF0ZVRhYmxlLmJpbmQodGhpcyksXG4gICAqICAgaWNvbjogJ3BvLWljb24tcmVmcmVzaCdcbiAgICogfV1cbiAgICpcbiAgICogdXBkYXRlVGFibGUoKSB7XG4gICAqICAgdGhpcy5keW5hbWljVGFibGUudXBkYXRlRGF0YVRhYmxlKCk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqXG4gICAqXG4gICAqIEBwYXJhbSB7e3BhZ2U6IG51bWJlciwga2V5OiB2YWx1ZSB9fSBmaWx0ZXIgUHJvcHJpZWRhZGUgcGFyYSBlbnZpbyBkZSB1bSBmaWx0cm8gY3VzdG9taXphZG8uXG4gICAqIEV4ZW1wbG8gZGUgZW52aW86XG4gICAqXG4gICAqYGBgXG4gICAqIHRoaXMuZHluYW1pY1RhYmxlLnVwZGF0ZURhdGFUYWJsZSh7cGFnZTogMywgc2VhcmNoOiAnQnJhc2lsJ30pO1xuICAgKiBgYGBcbiAgICogQ2FzbyBuw6NvIHNlamEgcGFzc2FkbyB1bSBmaWx0cm8gY3VzdG9taXphZG8gcGFyYSBvIG3DqXRvZG8gYHVwZGF0ZURhdGFUYWJsZWAgYSB0YWJlbGEgc2Vyw6EgYXR1YWxpemFkYSBjb25mb3JtZSBhIHDDoWdpbmEgZG8gdWx0aW1vIGl0ZW0gbW9kaWZpY2Fkby5cbiAgICovXG4gIHB1YmxpYyB1cGRhdGVEYXRhVGFibGUoZmlsdGVyPzogYW55KSB7XG4gICAgY29uc3QgaW5kZXhJdGVtU2VsZWN0ZWQgPSB0aGlzLml0ZW1zLmZpbmRJbmRleChpdGVtID0+IGl0ZW0gPT09IHRoaXMuaXRlbVNlbGVjdGVkQWN0aW9uKTtcbiAgICBjb25zdCBwYWdlTnVtYmVyID0gTWF0aC5mbG9vcihpbmRleEl0ZW1TZWxlY3RlZCAvIFBBR0VfU0laRV9ERUZBVUxUKTtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZU51bWJlciA8IDAgPyB0aGlzLmN1cnJlbnRQYWdlIDogcGFnZU51bWJlciArIDE7XG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlcikge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmxvYWREYXRhKGZpbHRlcikuc3Vic2NyaWJlKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMubG9hZERhdGEoeyBwYWdlOiB0aGlzLmN1cnJlbnRQYWdlLCAuLi50aGlzLnBhcmFtcyB9KS5zdWJzY3JpYmUoKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb25maXJtUmVtb3ZlKFxuICAgIGFjdGlvblJlbW92ZTogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1sncmVtb3ZlJ10sXG4gICAgYWN0aW9uQmVmb3JlUmVtb3ZlOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWydiZWZvcmVSZW1vdmUnXSxcbiAgICBpdGVtXG4gICkge1xuICAgIGNvbnN0IGNvbmZpcm1PcHRpb25zOiBQb0RpYWxvZ0NvbmZpcm1PcHRpb25zID0ge1xuICAgICAgdGl0bGU6IHRoaXMubGl0ZXJhbHMuY29uZmlybVJlbW92ZVRpdGxlLFxuICAgICAgbWVzc2FnZTogdGhpcy5saXRlcmFscy5jb25maXJtUmVtb3ZlTWVzc2FnZSxcbiAgICAgIGNvbmZpcm06IHRoaXMucmVtb3ZlLmJpbmQodGhpcywgaXRlbSwgYWN0aW9uUmVtb3ZlLCBhY3Rpb25CZWZvcmVSZW1vdmUpXG4gICAgfTtcblxuICAgIHRoaXMucG9EaWFsb2dTZXJ2aWNlLmNvbmZpcm0oY29uZmlybU9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25maXJtUmVtb3ZlQWxsKFxuICAgIGFjdGlvblJlbW92ZUFsbDogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1sncmVtb3ZlJ10sXG4gICAgYWN0aW9uQmVmb3JlUmVtb3ZlQWxsOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWydiZWZvcmVSZW1vdmUnXVxuICApIHtcbiAgICBjb25zdCBjb25maXJtT3B0aW9uczogUG9EaWFsb2dDb25maXJtT3B0aW9ucyA9IHtcbiAgICAgIHRpdGxlOiB0aGlzLmxpdGVyYWxzLmNvbmZpcm1SZW1vdmVBbGxUaXRsZSxcbiAgICAgIG1lc3NhZ2U6IHRoaXMubGl0ZXJhbHMuY29uZmlybVJlbW92ZUFsbE1lc3NhZ2UsXG4gICAgICBjb25maXJtOiB0aGlzLnJlbW92ZUFsbC5iaW5kKHRoaXMsIGFjdGlvblJlbW92ZUFsbCwgYWN0aW9uQmVmb3JlUmVtb3ZlQWxsKVxuICAgIH07XG5cbiAgICB0aGlzLnBvRGlhbG9nU2VydmljZS5jb25maXJtKGNvbmZpcm1PcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0VW5pcXVlS2V5KGl0ZW0pIHtcbiAgICBjb25zdCBrZXlzID0gdXRpbC5tYXBPYmplY3RCeVByb3BlcnRpZXMoaXRlbSwgdGhpcy5rZXlzKTtcblxuICAgIHJldHVybiB1dGlsLnZhbHVlc0Zyb21PYmplY3Qoa2V5cykuam9pbignfCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcmRlclBhcmFtKHNvcnRlZENvbHVtbjogUG9UYWJsZUNvbHVtblNvcnQgPSB7IHR5cGU6IHVuZGVmaW5lZCB9KSB7XG4gICAgY29uc3QgeyBjb2x1bW4sIHR5cGUgfSA9IHNvcnRlZENvbHVtbjtcblxuICAgIGlmICghY29sdW1uKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09IFBvVGFibGVDb2x1bW5Tb3J0VHlwZS5EZXNjZW5kaW5nKSB7XG4gICAgICByZXR1cm4geyBvcmRlcjogYC0ke2NvbHVtbi5wcm9wZXJ0eX1gIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgb3JkZXI6IGAke2NvbHVtbi5wcm9wZXJ0eX1gIH07XG4gIH1cblxuICBwcml2YXRlIGxvYWREYXRhKHBhcmFtczogeyBwYWdlPzogbnVtYmVyOyBzZWFyY2g/OiBzdHJpbmcgfSA9IHt9KSB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5rZXlzID8gdGhpcy5rZXlzWzBdIDogJ2lkJztcbiAgICBpZiAoIXRoaXMuc2VydmljZUFwaSkge1xuICAgICAgdGhpcy5wb05vdGlmaWNhdGlvbi5lcnJvcih0aGlzLmxpdGVyYWxzLmxvYWREYXRhRXJyb3JOb3RpZmljYXRpb24pO1xuICAgICAgcmV0dXJuIEVNUFRZO1xuICAgIH1cblxuICAgIGNvbnN0IG9yZGVyUGFyYW0gPSB0aGlzLmdldE9yZGVyUGFyYW0odGhpcy5zb3J0ZWRDb2x1bW4pO1xuICAgIGNvbnN0IGRlZmF1bHRQYXJhbXM6IGFueSA9IHsgcGFnZTogMSwgcGFnZVNpemU6IFBBR0VfU0laRV9ERUZBVUxUIH07XG4gICAgY29uc3QgZnVsbFBhcmFtczogYW55ID0geyAuLi5kZWZhdWx0UGFyYW1zLCAuLi5wYXJhbXMsIC4uLm9yZGVyUGFyYW0gfTtcblxuICAgIHJldHVybiB0aGlzLnBvUGFnZUR5bmFtaWNTZXJ2aWNlLmdldFJlc291cmNlcyhmdWxsUGFyYW1zKS5waXBlKFxuICAgICAgdGFwKHJlc3BvbnNlID0+IHtcbiAgICAgICAgcmVtb3ZlRHVwbGljYXRlSXRlbXMocmVzcG9uc2UuaXRlbXMsIHRoaXMuaXRlbXMsIGtleSk7XG4gICAgICAgIHRoaXMuaXRlbXMgPSBmdWxsUGFyYW1zLnBhZ2UgPT09IDEgPyByZXNwb25zZS5pdGVtcyA6IFsuLi50aGlzLml0ZW1zLCAuLi5yZXNwb25zZS5pdGVtc107XG4gICAgICAgIHRoaXMucGFnZSA9IGZ1bGxQYXJhbXMucGFnZTtcbiAgICAgICAgdGhpcy5oYXNOZXh0ID0gcmVzcG9uc2UuaGFzTmV4dDtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWV0YWRhdGEoXG4gICAgc2VydmljZUFwaUZyb21Sb3V0ZTogc3RyaW5nLFxuICAgIG9uTG9hZDogVXJsT3JQb0N1c3RvbWl6YXRpb25GdW5jdGlvblxuICApOiBPYnNlcnZhYmxlPFBvUGFnZUR5bmFtaWNUYWJsZU1ldGFEYXRhPiB7XG4gICAgaWYgKHNlcnZpY2VBcGlGcm9tUm91dGUpIHtcbiAgICAgIHJldHVybiB0aGlzLnBvUGFnZUR5bmFtaWNTZXJ2aWNlLmdldE1ldGFkYXRhPFBvUGFnZUR5bmFtaWNUYWJsZU1ldGFEYXRhPigpLnBpcGUoXG4gICAgICAgIHRhcChyZXNwb25zZSA9PiB7XG4gICAgICAgICAgdGhpcy5hdXRvUm91dGVyID0gcmVzcG9uc2UuYXV0b1JvdXRlciB8fCB0aGlzLmF1dG9Sb3V0ZXI7XG4gICAgICAgICAgdGhpcy5hY3Rpb25zID0gcmVzcG9uc2UuYWN0aW9ucyB8fCB0aGlzLmFjdGlvbnM7XG4gICAgICAgICAgdGhpcy5icmVhZGNydW1iID0gcmVzcG9uc2UuYnJlYWRjcnVtYiB8fCB0aGlzLmJyZWFkY3J1bWI7XG4gICAgICAgICAgdGhpcy5maWVsZHMgPSByZXNwb25zZS5maWVsZHMgfHwgdGhpcy5maWVsZHM7XG4gICAgICAgICAgdGhpcy50aXRsZSA9IHJlc3BvbnNlLnRpdGxlIHx8IHRoaXMudGl0bGU7XG4gICAgICAgICAgdGhpcy5wYWdlQ3VzdG9tQWN0aW9ucyA9IHJlc3BvbnNlLnBhZ2VDdXN0b21BY3Rpb25zIHx8IHRoaXMucGFnZUN1c3RvbUFjdGlvbnM7XG4gICAgICAgICAgdGhpcy50YWJsZUN1c3RvbUFjdGlvbnMgPSByZXNwb25zZS50YWJsZUN1c3RvbUFjdGlvbnMgfHwgdGhpcy50YWJsZUN1c3RvbUFjdGlvbnM7XG4gICAgICAgICAgdGhpcy5rZWVwRmlsdGVycyA9IHJlc3BvbnNlLmtlZXBGaWx0ZXJzIHx8IHRoaXMua2VlcEZpbHRlcnM7XG4gICAgICAgICAgdGhpcy5jb25jYXRGaWx0ZXJzID0gcmVzcG9uc2UuY29uY2F0RmlsdGVycyB8fCB0aGlzLmNvbmNhdEZpbHRlcnM7XG4gICAgICAgICAgdGhpcy5xdWlja1NlYXJjaFdpZHRoID0gcmVzcG9uc2UucXVpY2tTZWFyY2hXaWR0aCB8fCB0aGlzLnF1aWNrU2VhcmNoV2lkdGg7XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5sb2FkT3B0aW9uc09uSW5pdGlhbGl6ZShvbkxvYWQpKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5sb2FkT3B0aW9uc09uSW5pdGlhbGl6ZShvbkxvYWQpO1xuICB9XG5cbiAgLy8gQHRvZG8gVmFsaWRhciByb3RhcyBuYSBtw6NvIHBvaXMgc2UgZXhpc3RpciB1bWEgcm90YSAnKionIG8gY2F0Y2ggZG8gbmF2aWdhdGlvbiBuw6NvIGZ1bmNpb25hLlxuICBwcml2YXRlIG5hdmlnYXRlVG8oXG4gICAgcm91dGU6IHsgcGF0aDogc3RyaW5nOyBjb21wb25lbnQ/OyB1cmw/OiBzdHJpbmc7IHBhcmFtcz86IGFueSB9LFxuICAgIGZvcmNlU3RvcEF1dG9Sb3V0ZXI6IGJvb2xlYW4gPSBmYWxzZVxuICApIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbcm91dGUudXJsIHx8IHJvdXRlLnBhdGhdLCB7IHF1ZXJ5UGFyYW1zOiByb3V0ZS5wYXJhbXMgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgaWYgKGZvcmNlU3RvcEF1dG9Sb3V0ZXIgfHwgIXRoaXMuYXV0b1JvdXRlcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMucm91dGVyLmNvbmZpZy51bnNoaWZ0KDxSb3V0ZT57XG4gICAgICAgIHBhdGg6IHJvdXRlLnBhdGgsXG4gICAgICAgIGNvbXBvbmVudDogcm91dGUuY29tcG9uZW50LFxuICAgICAgICBkYXRhOiB7IHNlcnZpY2VBcGk6IHRoaXMuc2VydmljZUFwaSwgYXV0b1JvdXRlcjogdHJ1ZSB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5uYXZpZ2F0ZVRvKHJvdXRlLCB0cnVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ29uY2F0ZW5hdGVkVXJsKGNvbmNhdEtleXM6IGJvb2xlYW4sIHVybDogc3RyaW5nLCBzZWxlY3RlZEl0ZW0pOiBzdHJpbmcge1xuICAgIGNvbnN0IGtleXMgPSB0aGlzLmtleXMubWFwKGtleSA9PiBlbmNvZGVVUklDb21wb25lbnQoc2VsZWN0ZWRJdGVtW2tleV0pKS5qb2luKCk7XG4gICAgcmV0dXJuIGNvbmNhdEtleXMgPyBgJHt1cmx9LyR7a2V5c31gIDogdXJsO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuRGV0YWlsKGFjdGlvbjogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1snZGV0YWlsJ10sIGl0ZW0pIHtcbiAgICBjb25zdCBpZCA9IHRoaXMuZm9ybWF0VW5pcXVlS2V5KGl0ZW0pO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNTZXJ2aWNlXG4gICAgICAgIC5iZWZvcmVEZXRhaWwodGhpcy5hY3Rpb25zLmJlZm9yZURldGFpbCwgaWQsIGl0ZW0pXG4gICAgICAgIC5zdWJzY3JpYmUoKGJlZm9yZURldGFpbFJlc3VsdDogUG9QYWdlRHluYW1pY1RhYmxlQmVmb3JlRGV0YWlsKSA9PlxuICAgICAgICAgIHRoaXMuZXhlY3V0ZURldGFpbChhY3Rpb24sIGJlZm9yZURldGFpbFJlc3VsdCwgaWQsIGl0ZW0pXG4gICAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlRGV0YWlsKFxuICAgIGFjdGlvbjogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1snZGV0YWlsJ10sXG4gICAgYmVmb3JlRGV0YWlsUmVzdWx0PzogUG9QYWdlRHluYW1pY1RhYmxlQmVmb3JlTmV3LFxuICAgIGlkPzogc3RyaW5nLFxuICAgIGl0ZW0/OiBhbnlcbiAgKSB7XG4gICAgY29uc3QgYmVmb3JlID0gYmVmb3JlRGV0YWlsUmVzdWx0ID8/IHt9O1xuICAgIGNvbnN0IGFsbG93QWN0aW9uID0gdHlwZW9mIGJlZm9yZS5hbGxvd0FjdGlvbiA9PT0gJ2Jvb2xlYW4nID8gYmVmb3JlLmFsbG93QWN0aW9uIDogdHJ1ZTtcbiAgICBjb25zdCB7IG5ld1VybCB9ID0gYmVmb3JlO1xuXG4gICAgaWYgKGFsbG93QWN0aW9uICYmIGFjdGlvbikge1xuICAgICAgaWYgKG5ld1VybCkge1xuICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5nZXRQYXRoRnJvbU5ld1VybChuZXdVcmwsIGlkKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGVUbyh7IHBhdGggfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLnJlc29sdmVVcmwoaXRlbSwgYWN0aW9uKTtcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvKHsgcGF0aDogYWN0aW9uLCB1cmwsIGNvbXBvbmVudDogUG9QYWdlRHluYW1pY0RldGFpbENvbXBvbmVudCB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjdGlvbihpZCwgaXRlbSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRQYXRoRnJvbU5ld1VybChuZXdVcmw6IHN0cmluZywgaWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKG5ld1VybC5pbmNsdWRlcygnOmlkJykpIHtcbiAgICAgIHJldHVybiBuZXdVcmwucmVwbGFjZSgvOmlkL2csIGlkKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld1VybDtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkR1cGxpY2F0ZShhY3Rpb25EdXBsaWNhdGU6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ2R1cGxpY2F0ZSddLCBpdGVtOiBhbnkpIHtcbiAgICBjb25zdCBpZCA9IHRoaXMuZm9ybWF0VW5pcXVlS2V5KGl0ZW0pO1xuICAgIGNvbnN0IGR1cGxpY2F0ZXMgPSB1dGlsLnJlbW92ZUtleXNQcm9wZXJ0aWVzKHRoaXMua2V5cywgdXRpbC5tYXBPYmplY3RCeVByb3BlcnRpZXMoaXRlbSwgdGhpcy5kdXBsaWNhdGVzKSk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5wb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zU2VydmljZVxuICAgICAgICAuYmVmb3JlRHVwbGljYXRlKHRoaXMuYWN0aW9ucy5iZWZvcmVEdXBsaWNhdGUsIGlkLCBkdXBsaWNhdGVzKVxuICAgICAgICAuc3Vic2NyaWJlKChiZWZvcmVEdXBsaWNhdGVSZXN1bHQ6IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZUR1cGxpY2F0ZSkgPT5cbiAgICAgICAgICB0aGlzLmV4ZWN1dGVEdXBsaWNhdGUoYWN0aW9uRHVwbGljYXRlLCBiZWZvcmVEdXBsaWNhdGVSZXN1bHQsIGR1cGxpY2F0ZXMpXG4gICAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlRHVwbGljYXRlKFxuICAgIGFjdGlvbkR1cGxpY2F0ZTogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1snZHVwbGljYXRlJ10sXG4gICAgYmVmb3JlRHVwbGljYXRlUmVzdWx0OiBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVEdXBsaWNhdGUsXG4gICAgZHVwbGljYXRlczogYW55XG4gICkge1xuICAgIGNvbnN0IGJlZm9yZSA9IGJlZm9yZUR1cGxpY2F0ZVJlc3VsdCA/PyB7fTtcbiAgICBjb25zdCBhbGxvd0FjdGlvbiA9IHR5cGVvZiBiZWZvcmUuYWxsb3dBY3Rpb24gPT09ICdib29sZWFuJyA/IGJlZm9yZS5hbGxvd0FjdGlvbiA6IHRydWU7XG4gICAgY29uc3QgYmVmb3JlRHVwbGljYXRlUmVzb3VyY2UgPSBiZWZvcmUucmVzb3VyY2U7XG4gICAgY29uc3QgbmV3QWN0aW9uID0gYmVmb3JlLm5ld1VybCA/PyBhY3Rpb25EdXBsaWNhdGU7XG5cbiAgICBpZiAoYWxsb3dBY3Rpb24gJiYgYWN0aW9uRHVwbGljYXRlKSB7XG4gICAgICBpZiAodHlwZW9mIGJlZm9yZUR1cGxpY2F0ZVJlc291cmNlID09PSAnb2JqZWN0JyAmJiBiZWZvcmVEdXBsaWNhdGVSZXNvdXJjZSAhPT0gbnVsbCkge1xuICAgICAgICBkdXBsaWNhdGVzID0gdXRpbC5yZW1vdmVLZXlzUHJvcGVydGllcyh0aGlzLmtleXMsIGJlZm9yZUR1cGxpY2F0ZVJlc291cmNlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBuZXdBY3Rpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlVG8oeyBwYXRoOiBuZXdBY3Rpb24sIHBhcmFtczogeyBkdXBsaWNhdGU6IEpTT04uc3RyaW5naWZ5KGR1cGxpY2F0ZXMpIH0gfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXdBY3Rpb24oZHVwbGljYXRlcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvcGVuRWRpdChhY3Rpb25FZGl0OiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWydlZGl0J10sIGl0ZW0pIHtcbiAgICBjb25zdCBpZCA9IHRoaXMuZm9ybWF0VW5pcXVlS2V5KGl0ZW0pO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMucG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1NlcnZpY2VcbiAgICAgICAgLmJlZm9yZUVkaXQodGhpcy5hY3Rpb25zLmJlZm9yZUVkaXQsIGlkLCBpdGVtKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoKGJlZm9yZUVkaXRSZXN1bHQ6IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZUVkaXQpID0+XG4gICAgICAgICAgICB0aGlzLmV4ZWN1dGVFZGl0QWN0aW9uKGFjdGlvbkVkaXQsIGJlZm9yZUVkaXRSZXN1bHQsIGl0ZW0sIGlkKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlRWRpdEFjdGlvbihcbiAgICBhY3Rpb246IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ2VkaXQnXSxcbiAgICBiZWZvcmVFZGl0UmVzdWx0OiBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVFZGl0LFxuICAgIGl0ZW06IGFueSxcbiAgICBpZDogc3RyaW5nXG4gICkge1xuICAgIGNvbnN0IG5ld0VkaXRBY3Rpb24gPSBiZWZvcmVFZGl0UmVzdWx0Py5uZXdVcmwgPz8gYWN0aW9uO1xuICAgIGNvbnN0IGFsbG93QWN0aW9uID0gYmVmb3JlRWRpdFJlc3VsdD8uYWxsb3dBY3Rpb24gPz8gdHJ1ZTtcblxuICAgIGlmICghYWxsb3dBY3Rpb24pIHtcbiAgICAgIHJldHVybiBFTVBUWTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5ld0VkaXRBY3Rpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLm9wZW5FZGl0VXJsKG5ld0VkaXRBY3Rpb24sIGl0ZW0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB1cGRhdGVkSXRlbSA9IG5ld0VkaXRBY3Rpb24oaWQsIGl0ZW0pO1xuICAgICAgaWYgKHR5cGVvZiB1cGRhdGVkSXRlbSA9PT0gJ29iamVjdCcgJiYgdXBkYXRlZEl0ZW0gIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5tb2RpZnlVSVRhYmxlSXRlbShpdGVtLCB1dGlsLnJlbW92ZUtleXNQcm9wZXJ0aWVzKHRoaXMua2V5cywgdXBkYXRlZEl0ZW0pKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gRU1QVFk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5FZGl0VXJsKHBhdGg6IHN0cmluZywgaXRlbSkge1xuICAgIGNvbnN0IHVybCA9IHRoaXMucmVzb2x2ZVVybChpdGVtLCBwYXRoKTtcblxuICAgIHRoaXMubmF2aWdhdGVUbyh7IHBhdGgsIHVybCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbW9kaWZ5VUlUYWJsZUl0ZW0oY3VycmVudEl0ZW0sIG5ld0l0ZW1WYWx1ZSkge1xuICAgIGNvbnN0IHRhYmxlSXRlbSA9IHRoaXMuaXRlbXMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbSA9PT0gY3VycmVudEl0ZW0pO1xuICAgIHRoaXMuaXRlbXNbdGFibGVJdGVtXSA9IHsgLi4uY3VycmVudEl0ZW0sIC4uLm5ld0l0ZW1WYWx1ZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuTmV3KGFjdGlvbk5ldzogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1snbmV3J10pIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5wb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zU2VydmljZVxuICAgICAgICAuYmVmb3JlTmV3KHRoaXMuYWN0aW9ucy5iZWZvcmVOZXcpXG4gICAgICAgIC5zdWJzY3JpYmUoKGJlZm9yZU5ld1Jlc3VsdDogUG9QYWdlRHluYW1pY1RhYmxlQmVmb3JlTmV3KSA9PiB0aGlzLmV4ZWN1dGVOZXcoYWN0aW9uTmV3LCBiZWZvcmVOZXdSZXN1bHQpKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVOZXcoYWN0aW9uTmV3OiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWyduZXcnXSwgYmVmb3JlTmV3UmVzdWx0PzogUG9QYWdlRHluYW1pY1RhYmxlQmVmb3JlTmV3KSB7XG4gICAgY29uc3QgYmVmb3JlID0gYmVmb3JlTmV3UmVzdWx0ID8/IHt9O1xuICAgIGNvbnN0IGFsbG93QWN0aW9uID0gdHlwZW9mIGJlZm9yZS5hbGxvd0FjdGlvbiA9PT0gJ2Jvb2xlYW4nID8gYmVmb3JlLmFsbG93QWN0aW9uIDogdHJ1ZTtcbiAgICBjb25zdCB7IG5ld1VybCB9ID0gYmVmb3JlO1xuXG4gICAgaWYgKGFsbG93QWN0aW9uICYmIGFjdGlvbk5ldykge1xuICAgICAgaWYgKG5ld1VybCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZVRvKHsgcGF0aDogbmV3VXJsIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGFjdGlvbk5ldyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGVUbyh7IHBhdGg6IGFjdGlvbk5ldyB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjdGlvbk5ldygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYXNvIGV4aXN0YSBtYWlzIGRlIHVtIGlkZW50aWZpY2Fkb3IsIHNlcsOhIGNvbmNhdGVuYWRvIGNvbSAnfCcuXG4gICAqXG4gICAqIEV4OiB7IGlkOiAxLCBjb21wYW55OiAncG8nIH1cbiAgICpcbiAgICogUGFyYSBvIGVuZHBvaW50IC9yZXNvdXJjZXMvOmlkIHNlcsOhIGV4ZWN1dGFkYSBhIHVybCAvcmVzb3VyY2VzLzF8cG9cbiAgICovXG4gIHByaXZhdGUgcmVtb3ZlKFxuICAgIGl0ZW0sXG4gICAgYWN0aW9uUmVtb3ZlOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWydyZW1vdmUnXSxcbiAgICBhY3Rpb25CZWZvcmVSZW1vdmU6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ2JlZm9yZVJlbW92ZSddXG4gICkge1xuICAgIGNvbnN0IHVuaXF1ZUtleSA9IHRoaXMuZm9ybWF0VW5pcXVlS2V5KGl0ZW0pO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMucG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1NlcnZpY2VcbiAgICAgICAgLmJlZm9yZVJlbW92ZShhY3Rpb25CZWZvcmVSZW1vdmUsIHVuaXF1ZUtleSwgaXRlbSlcbiAgICAgICAgLnBpcGUoc3dpdGNoTWFwKGJlZm9yZVJlbW92ZSA9PiB0aGlzLmRlbGV0ZUFjdGlvbihpdGVtLCBhY3Rpb25SZW1vdmUsIGJlZm9yZVJlbW92ZSkpKVxuICAgICAgICAuc3Vic2NyaWJlKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVBY3Rpb24oXG4gICAgaXRlbSxcbiAgICBhY3Rpb25SZW1vdmU6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ3JlbW92ZSddLFxuICAgIGJlZm9yZVJlbW92ZTogUG9QYWdlRHluYW1pY1RhYmxlQmVmb3JlUmVtb3ZlXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgeyBhbGxvd0FjdGlvbiwgbmV3VXJsIH0gPSBiZWZvcmVSZW1vdmUgfHwge307XG4gICAgY29uc3QgYWxsb3cgPSBhbGxvd0FjdGlvbiA/PyB0cnVlO1xuXG4gICAgaWYgKGFsbG93KSB7XG4gICAgICBsZXQgdW5pcXVlS2V5ID0gdGhpcy5mb3JtYXRVbmlxdWVLZXkoaXRlbSk7XG4gICAgICBjb25zdCByZXNvdXJjZVRvUmVtb3ZlS2V5ID0gdGhpcy5yZXR1cm5SZXNvdXJjZXNLZXlzKFtpdGVtXSk7XG5cbiAgICAgIGlmICh0eXBlb2YgYWN0aW9uUmVtb3ZlID09PSAnYm9vbGVhbicgfHwgbmV3VXJsKSB7XG4gICAgICAgIHVuaXF1ZUtleSA9IG5ld1VybCA/IHVuZGVmaW5lZCA6IHVuaXF1ZUtleTtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9QYWdlRHluYW1pY1NlcnZpY2VcbiAgICAgICAgICAuZGVsZXRlUmVzb3VyY2UodW5pcXVlS2V5LCBuZXdVcmwpXG4gICAgICAgICAgLnBpcGUobWFwKCgpID0+IHRoaXMucmVtb3ZlRnJvbVVJKHJlc291cmNlVG9SZW1vdmVLZXksIHRoaXMubGl0ZXJhbHMucmVtb3ZlU3VjY2Vzc05vdGlmaWNhdGlvbikpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9mKGFjdGlvblJlbW92ZSh1bmlxdWVLZXksIGl0ZW0pKS5waXBlKFxuICAgICAgICB0YXAocmVtb3ZlID0+IHtcbiAgICAgICAgICBjb25zdCByZW1vdmVJdGVtID0gcmVtb3ZlID8/IGZhbHNlO1xuICAgICAgICAgIHRoaXMucmVtb3ZlRnJvbVVJKHJlc291cmNlVG9SZW1vdmVLZXksIHRoaXMubGl0ZXJhbHMucmVtb3ZlU3VjY2Vzc05vdGlmaWNhdGlvbiwgcmVtb3ZlSXRlbSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBvZih7fSk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUZyb21VSShpdGVtczogQXJyYXk8YW55PiwgbWVzc2FnZTogc3RyaW5nLCByZW1vdmUgPSB0cnVlKSB7XG4gICAgaWYgKHJlbW92ZSA9PT0gdHJ1ZSAmJiBpdGVtcz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLnJlbW92ZUxvY2FsSXRlbXMoaXRlbXMpO1xuICAgICAgdGhpcy5wb05vdGlmaWNhdGlvbi5zdWNjZXNzKG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlQWxsKFxuICAgIGFjdGlvblJlbW92ZUFsbDogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1sncmVtb3ZlQWxsJ10sXG4gICAgYWN0aW9uQmVmb3JlUmVtb3ZlQWxsOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWydiZWZvcmVSZW1vdmVBbGwnXVxuICApIHtcbiAgICBjb25zdCBvcmlnaW5hbFJlc291cmNlc0tleXMgPSB0aGlzLmdldFNlbGVjdGVkSXRlbXNLZXlzKCk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMucG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1NlcnZpY2VcbiAgICAgICAgLmJlZm9yZVJlbW92ZUFsbChhY3Rpb25CZWZvcmVSZW1vdmVBbGwsIG9yaWdpbmFsUmVzb3VyY2VzS2V5cylcbiAgICAgICAgLnBpcGUoc3dpdGNoTWFwKGJlZm9yZVJlbW92ZSA9PiB0aGlzLmRlbGV0ZUFsbEFjdGlvbihhY3Rpb25SZW1vdmVBbGwsIGJlZm9yZVJlbW92ZSwgb3JpZ2luYWxSZXNvdXJjZXNLZXlzKSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldFNlbGVjdGVkSXRlbXNLZXlzKCkge1xuICAgIGNvbnN0IHJlc291cmNlcyA9IHRoaXMuaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS4kc2VsZWN0ZWQpO1xuXG4gICAgaWYgKHJlc291cmNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmV0dXJuUmVzb3VyY2VzS2V5cyhyZXNvdXJjZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXR1cm5SZXNvdXJjZXNLZXlzKHJlc291cmNlcykge1xuICAgIHJldHVybiB1dGlsLm1hcEFycmF5QnlQcm9wZXJ0aWVzKHJlc291cmNlcywgdGhpcy5rZXlzKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlQWxsQWN0aW9uKFxuICAgIGFjdGlvblJlbW92ZUFsbDogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1sncmVtb3ZlQWxsJ10sXG4gICAgYmVmb3JlUmVtb3ZlQWxsOiBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVSZW1vdmVBbGwsXG4gICAgb3JpZ2luYWxSZXNvdXJjZXM6IEFycmF5PGFueT5cbiAgKSB7XG4gICAgY29uc3QgeyBhbGxvd0FjdGlvbiwgbmV3VXJsLCByZXNvdXJjZXMgfSA9IGJlZm9yZVJlbW92ZUFsbCA/PyB7fTtcbiAgICBjb25zdCBhbGxvdyA9IGFsbG93QWN0aW9uID8/IHRydWU7XG4gICAgY29uc3QgcmVzb3VyY2VzdG9EZWxldGUgPSByZXNvdXJjZXMgPz8gb3JpZ2luYWxSZXNvdXJjZXM7XG5cbiAgICBpZiAoYWxsb3cgJiYgQXJyYXkuaXNBcnJheShyZXNvdXJjZXN0b0RlbGV0ZSkpIHtcbiAgICAgIGlmICh0eXBlb2YgYWN0aW9uUmVtb3ZlQWxsID09PSAnYm9vbGVhbicgfHwgbmV3VXJsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBvUGFnZUR5bmFtaWNTZXJ2aWNlLmRlbGV0ZVJlc291cmNlcyhyZXNvdXJjZXN0b0RlbGV0ZSwgbmV3VXJsKS5waXBlKFxuICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUZyb21VSShyZXNvdXJjZXN0b0RlbGV0ZSwgdGhpcy5saXRlcmFscy5yZW1vdmVBbGxTdWNjZXNzTm90aWZpY2F0aW9uKTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9mKGFjdGlvblJlbW92ZUFsbChyZXNvdXJjZXN0b0RlbGV0ZSkpLnBpcGUoXG4gICAgICAgIHRhcChyZW1vdmVJdGVtcyA9PiB0aGlzLnJlbW92ZUZyb21VSShyZW1vdmVJdGVtcywgdGhpcy5saXRlcmFscy5yZW1vdmVTdWNjZXNzTm90aWZpY2F0aW9uKSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9mKHt9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlTG9jYWxJdGVtcyhpdGVtc0tleXNUb1JlbW92ZSA9IFtdKSB7XG4gICAgaWYgKGl0ZW1zS2V5c1RvUmVtb3ZlLmxlbmd0aCkge1xuICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuaXRlbXMuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBpdGVtS2V5ID0gdGhpcy5mb3JtYXRVbmlxdWVLZXkoaXRlbSk7XG4gICAgICAgIHJldHVybiAhaXRlbXNLZXlzVG9SZW1vdmUuZmluZChpdGVtS2V5VG9SZW1vdmUgPT4gdXRpbC52YWx1ZXNGcm9tT2JqZWN0KGl0ZW1LZXlUb1JlbW92ZSkuam9pbignfCcpID09PSBpdGVtS2V5KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVVybChpdGVtOiBhbnksIHBhdGg6IHN0cmluZykge1xuICAgIGNvbnN0IHVuaXF1ZUtleSA9IHRoaXMuZm9ybWF0VW5pcXVlS2V5KGl0ZW0pO1xuXG4gICAgcmV0dXJuIHBhdGgucmVwbGFjZSgvOmlkL2csIHVuaXF1ZUtleSk7XG4gIH1cblxuICBwcml2YXRlIHNldFBhZ2VBY3Rpb25zKGFjdGlvbnM6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnMpIHtcbiAgICBpZiAoYWN0aW9ucz8ubmV3KSB7XG4gICAgICB0aGlzLmRlZmF1bHRQYWdlQWN0aW9ucyA9IFt7IGxhYmVsOiB0aGlzLmxpdGVyYWxzLnBhZ2VBY3Rpb24sIGFjdGlvbjogdGhpcy5vcGVuTmV3LmJpbmQodGhpcywgYWN0aW9ucy5uZXcpIH1dO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtQ3VzdG9tQWN0aW9uc1RvUGFnZUxpc3RBY3Rpb24oXG4gICAgY3VzdG9tQWN0aW9uczogQXJyYXk8UG9QYWdlRHluYW1pY1RhYmxlQ3VzdG9tQWN0aW9uPlxuICApOiBBcnJheTxQb1BhZ2VBY3Rpb24+IHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiBjdXN0b21BY3Rpb25zLm1hcChjdXN0b21BY3Rpb24gPT4gKHtcbiAgICAgIGxhYmVsOiBjdXN0b21BY3Rpb24ubGFiZWwsXG4gICAgICBhY3Rpb246IHRoaXMuY2FsbFBhZ2VDdXN0b21BY3Rpb24uYmluZCh0aGlzLCBjdXN0b21BY3Rpb24pLFxuICAgICAgZGlzYWJsZWQ6IHRoaXMuaXNEaXNhYmxlUGFnZUN1c3RvbUFjdGlvbi5iaW5kKHRoaXMsIGN1c3RvbUFjdGlvbiksXG4gICAgICAuLi4oY3VzdG9tQWN0aW9uLmljb24gJiYgeyBpY29uOiBjdXN0b21BY3Rpb24uaWNvbiB9KSxcbiAgICAgIHZpc2libGU6IGN1c3RvbUFjdGlvbi52aXNpYmxlXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmFuc2Zvcm1UYWJsZUN1c3RvbUFjdGlvbnNUb1RhYmxlQWN0aW9ucyhcbiAgICB0YWJsZUN1c3RvbUFjdGlvbnM6IEFycmF5PFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbVRhYmxlQWN0aW9uPlxuICApOiBBcnJheTxQb1RhYmxlQWN0aW9uPiB7XG4gICAgcmV0dXJuIHRhYmxlQ3VzdG9tQWN0aW9ucy5tYXAodGFibGVDdXN0b21BY3Rpb24gPT4gKHtcbiAgICAgIGxhYmVsOiB0YWJsZUN1c3RvbUFjdGlvbi5sYWJlbCxcbiAgICAgIGljb246IHRhYmxlQ3VzdG9tQWN0aW9uLmljb24sXG4gICAgICBhY3Rpb246IHRoaXMuY2FsbFRhYmxlQ3VzdG9tQWN0aW9uLmJpbmQodGhpcywgdGFibGVDdXN0b21BY3Rpb24pLFxuICAgICAgZGlzYWJsZWQ6IHRhYmxlQ3VzdG9tQWN0aW9uLmRpc2FibGVkLFxuICAgICAgdmlzaWJsZTogdGFibGVDdXN0b21BY3Rpb24udmlzaWJsZVxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNEaXNhYmxlUGFnZUN1c3RvbUFjdGlvbihjdXN0b21BY3Rpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gY3VzdG9tQWN0aW9uLnNlbGVjdGFibGUgJiYgIXRoaXMuZ2V0U2VsZWN0ZWRJdGVtc0tleXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FsbFBhZ2VDdXN0b21BY3Rpb24oY3VzdG9tQWN0aW9uOiBQb1BhZ2VEeW5hbWljVGFibGVDdXN0b21BY3Rpb24pIHtcbiAgICBpZiAoY3VzdG9tQWN0aW9uLmFjdGlvbikge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IGN1c3RvbUFjdGlvbi5zZWxlY3RhYmxlID8gdGhpcy5nZXRTZWxlY3RlZEl0ZW1zS2V5cygpIDogdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCBzZW5kQ3VzdG9tQWN0aW9uU3Vic2NyaXB0aW9uID0gdGhpcy5wb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zU2VydmljZVxuICAgICAgICAuY3VzdG9tQWN0aW9uKGN1c3RvbUFjdGlvbi5hY3Rpb24sIHNlbGVjdGVkSXRlbXMpXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChzZW5kQ3VzdG9tQWN0aW9uU3Vic2NyaXB0aW9uKTtcbiAgICB9IGVsc2UgaWYgKGN1c3RvbUFjdGlvbi51cmwpIHtcbiAgICAgIHRoaXMubmF2aWdhdGVUbyh7IHBhdGg6IGN1c3RvbUFjdGlvbi51cmwgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjYWxsVGFibGVDdXN0b21BY3Rpb24oY3VzdG9tQWN0aW9uOiBQb1BhZ2VEeW5hbWljVGFibGVDdXN0b21UYWJsZUFjdGlvbiwgc2VsZWN0ZWRJdGVtKSB7XG4gICAgdGhpcy5pdGVtU2VsZWN0ZWRBY3Rpb24gPSBzZWxlY3RlZEl0ZW07XG4gICAgaWYgKGN1c3RvbUFjdGlvbi5hY3Rpb24pIHtcbiAgICAgIGNvbnN0IHNlbmRDdXN0b21BY3Rpb25TdWJzY3JpcHRpb24gPSB0aGlzLnBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNTZXJ2aWNlXG4gICAgICAgIC5jdXN0b21BY3Rpb24oY3VzdG9tQWN0aW9uLmFjdGlvbiwgc2VsZWN0ZWRJdGVtKVxuICAgICAgICAuc3Vic2NyaWJlKHVwZGF0ZWRJdGVtID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIHVwZGF0ZWRJdGVtID09PSAnb2JqZWN0JyAmJiB1cGRhdGVkSXRlbSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5tb2RpZnlVSVRhYmxlSXRlbShzZWxlY3RlZEl0ZW0sIHV0aWwucmVtb3ZlS2V5c1Byb3BlcnRpZXModGhpcy5rZXlzLCB1cGRhdGVkSXRlbSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoc2VuZEN1c3RvbUFjdGlvblN1YnNjcmlwdGlvbik7XG4gICAgfSBlbHNlIGlmIChjdXN0b21BY3Rpb24udXJsKSB7XG4gICAgICBpZiAoaXNFeHRlcm5hbExpbmsoY3VzdG9tQWN0aW9uLnVybCkpIHtcbiAgICAgICAgb3BlbkV4dGVybmFsTGluayh0aGlzLmNyZWF0ZUNvbmNhdGVuYXRlZFVybChjdXN0b21BY3Rpb24uY29uY2F0S2V5cywgY3VzdG9tQWN0aW9uLnVybCwgc2VsZWN0ZWRJdGVtKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm5hdmlnYXRlVG8oe1xuICAgICAgICAgIHBhdGg6IHRoaXMuY3JlYXRlQ29uY2F0ZW5hdGVkVXJsKGN1c3RvbUFjdGlvbi5jb25jYXRLZXlzLCBjdXN0b21BY3Rpb24udXJsLCBzZWxlY3RlZEl0ZW0pXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0UmVtb3ZlQWxsQWN0aW9uKCkge1xuICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuX2FjdGlvbnM7XG4gICAgaWYgKHRoaXMuc2hvd1JlbW92ZShhY3Rpb24ucmVtb3ZlQWxsKSkge1xuICAgICAgdGhpcy5kZWZhdWx0UGFnZUFjdGlvbnMgPSBbXG4gICAgICAgIC4uLnRoaXMuX2RlZmF1bHRQYWdlQWN0aW9ucyxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiB0aGlzLmxpdGVyYWxzLnBhZ2VBY3Rpb25SZW1vdmVBbGwsXG4gICAgICAgICAgYWN0aW9uOiB0aGlzLmNvbmZpcm1SZW1vdmVBbGwuYmluZCh0aGlzLCBhY3Rpb24ucmVtb3ZlQWxsLCBhY3Rpb24uYmVmb3JlUmVtb3ZlQWxsKSxcbiAgICAgICAgICBkaXNhYmxlZDogdGhpcy5kaXNhYmxlUmVtb3ZlQWxsLmJpbmQodGhpcylcbiAgICAgICAgfVxuICAgICAgXTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRpc2FibGVSZW1vdmVBbGwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmdldFNlbGVjdGVkSXRlbXNLZXlzKCk7XG4gIH1cblxuICBwcml2YXRlIHNldFRhYmxlQWN0aW9ucyhhY3Rpb25zOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zKSB7XG4gICAgaWYgKGFjdGlvbnMpIHtcbiAgICAgIGNvbnN0IHZpc2libGVSZW1vdmUgPSB0aGlzLnNob3dSZW1vdmUoYWN0aW9ucy5yZW1vdmUpO1xuICAgICAgdGhpcy5kZWZhdWx0VGFibGVBY3Rpb25zID0gW1xuICAgICAgICB7XG4gICAgICAgICAgYWN0aW9uOiB0aGlzLm9wZW5EZXRhaWwuYmluZCh0aGlzLCBhY3Rpb25zLmRldGFpbCksXG4gICAgICAgICAgbGFiZWw6IHRoaXMubGl0ZXJhbHMudGFibGVBY3Rpb25WaWV3LFxuICAgICAgICAgIHZpc2libGU6ICEhdGhpcy5fYWN0aW9ucy5kZXRhaWxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGFjdGlvbjogdGhpcy5vcGVuRWRpdC5iaW5kKHRoaXMsIGFjdGlvbnMuZWRpdCksXG4gICAgICAgICAgbGFiZWw6IHRoaXMubGl0ZXJhbHMudGFibGVBY3Rpb25FZGl0LFxuICAgICAgICAgIHZpc2libGU6ICEhdGhpcy5fYWN0aW9ucy5lZGl0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBhY3Rpb246IHRoaXMub3BlbkR1cGxpY2F0ZS5iaW5kKHRoaXMsIGFjdGlvbnMuZHVwbGljYXRlKSxcbiAgICAgICAgICBsYWJlbDogdGhpcy5saXRlcmFscy50YWJsZUFjdGlvbkR1cGxpY2F0ZSxcbiAgICAgICAgICB2aXNpYmxlOiAhIXRoaXMuX2FjdGlvbnMuZHVwbGljYXRlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBhY3Rpb246IHRoaXMuY29uZmlybVJlbW92ZS5iaW5kKHRoaXMsIGFjdGlvbnMucmVtb3ZlLCBhY3Rpb25zLmJlZm9yZVJlbW92ZSksXG4gICAgICAgICAgbGFiZWw6IHRoaXMubGl0ZXJhbHMudGFibGVBY3Rpb25EZWxldGUsXG4gICAgICAgICAgc2VwYXJhdG9yOiB0cnVlLFxuICAgICAgICAgIHR5cGU6ICdkYW5nZXInLFxuICAgICAgICAgIHZpc2libGU6IHZpc2libGVSZW1vdmVcbiAgICAgICAgfVxuICAgICAgXTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvYWREYXRhRnJvbUFQSSgpIHtcbiAgICBjb25zdCB7IHNlcnZpY2VBcGk6IHNlcnZpY2VBcGlGcm9tUm91dGUsIHNlcnZpY2VNZXRhZGF0YUFwaSwgc2VydmljZUxvYWRBcGkgfSA9IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QuZGF0YTtcblxuICAgIGNvbnN0IG9uTG9hZCA9IHNlcnZpY2VMb2FkQXBpIHx8IHRoaXMub25Mb2FkO1xuICAgIHRoaXMuc2VydmljZUFwaSA9IHNlcnZpY2VBcGlGcm9tUm91dGUgfHwgdGhpcy5zZXJ2aWNlQXBpO1xuXG4gICAgdGhpcy5wb1BhZ2VEeW5hbWljU2VydmljZS5jb25maWdTZXJ2aWNlQXBpKHsgZW5kcG9pbnQ6IHRoaXMuc2VydmljZUFwaSwgbWV0YWRhdGE6IHNlcnZpY2VNZXRhZGF0YUFwaSB9KTtcblxuICAgIGNvbnN0IG1ldGFkYXRhJCA9IHRoaXMuZ2V0TWV0YWRhdGEoc2VydmljZUFwaUZyb21Sb3V0ZSwgb25Mb2FkKTtcbiAgICBjb25zdCBkYXRhJCA9IHRoaXMubG9hZERhdGEoKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICBtZXRhZGF0YSRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluaXRpYWxGaWx0ZXJzID0gdGhpcy5nZXRJbml0aWFsVmFsdWVzRnJvbUZpbHRlcigpO1xuXG4gICAgICAgICAgICBpZiAoIU9iamVjdC5rZXlzKGluaXRpYWxGaWx0ZXJzKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGRhdGEkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbml0aWFsVmFsdWVzRnJvbUZpbHRlcigpIHtcbiAgICBjb25zdCBpbml0aWFsRmlsdGVycyA9IHRoaXMuZmlsdGVycy5yZWR1Y2UoXG4gICAgICAocmVzdWx0LCBpdGVtKSA9PiBPYmplY3QuYXNzaWduKHJlc3VsdCwgeyBbaXRlbS5wcm9wZXJ0eV06IGl0ZW0uaW5pdFZhbHVlIH0pLFxuICAgICAge31cbiAgICApO1xuXG4gICAgT2JqZWN0LmtleXMoaW5pdGlhbEZpbHRlcnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmICghaW5pdGlhbEZpbHRlcnNba2V5XSkge1xuICAgICAgICBkZWxldGUgaW5pdGlhbEZpbHRlcnNba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBpbml0aWFsRmlsdGVycztcbiAgfVxuXG4gIHByaXZhdGUgbG9hZE9wdGlvbnNPbkluaXRpYWxpemUob25Mb2FkOiBVcmxPclBvQ3VzdG9taXphdGlvbkZ1bmN0aW9uKSB7XG4gICAgaWYgKG9uTG9hZCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UG9EeW5hbWljUGFnZU9wdGlvbnMob25Mb2FkKS5waXBlKFxuICAgICAgICB0YXAocmVzcG9uc2VQb09wdGlvbiA9PlxuICAgICAgICAgIHRoaXMucG9QYWdlQ3VzdG9taXphdGlvblNlcnZpY2UuY2hhbmdlT3JpZ2luYWxPcHRpb25zVG9OZXdPcHRpb25zKHRoaXMsIHJlc3BvbnNlUG9PcHRpb24pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9mKG51bGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQb0R5bmFtaWNQYWdlT3B0aW9ucyhvbkxvYWQ6IFVybE9yUG9DdXN0b21pemF0aW9uRnVuY3Rpb24pOiBPYnNlcnZhYmxlPFBvUGFnZUR5bmFtaWNUYWJsZU9wdGlvbnM+IHtcbiAgICBjb25zdCBvcmlnaW5hbE9wdGlvbjogUG9QYWdlRHluYW1pY1RhYmxlT3B0aW9ucyA9IHtcbiAgICAgIGZpZWxkczogdGhpcy5maWVsZHMsXG4gICAgICBhY3Rpb25zOiB0aGlzLmFjdGlvbnMsXG4gICAgICBicmVhZGNydW1iOiB0aGlzLmJyZWFkY3J1bWIsXG4gICAgICB0aXRsZTogdGhpcy50aXRsZSxcbiAgICAgIGtlZXBGaWx0ZXJzOiB0aGlzLmtlZXBGaWx0ZXJzLFxuICAgICAgY29uY2F0RmlsdGVyczogdGhpcy5jb25jYXRGaWx0ZXJzLFxuICAgICAgcGFnZUN1c3RvbUFjdGlvbnM6IHRoaXMucGFnZUN1c3RvbUFjdGlvbnMsXG4gICAgICB0YWJsZUN1c3RvbUFjdGlvbnM6IHRoaXMudGFibGVDdXN0b21BY3Rpb25zLFxuICAgICAgcXVpY2tTZWFyY2hXaWR0aDogdGhpcy5xdWlja1NlYXJjaFdpZHRoXG4gICAgfTtcblxuICAgIGNvbnN0IHBhZ2VPcHRpb25TY2hlbWE6IFBvUGFnZUR5bmFtaWNPcHRpb25zU2NoZW1hPFBvUGFnZUR5bmFtaWNUYWJsZU9wdGlvbnM+ID0ge1xuICAgICAgc2NoZW1hOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lUHJvcDogJ2ZpZWxkcycsXG4gICAgICAgICAgbWVyZ2U6IHRydWUsXG4gICAgICAgICAga2V5Rm9yTWVyZ2U6ICdwcm9wZXJ0eSdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWVQcm9wOiAnYWN0aW9ucycsXG4gICAgICAgICAgbWVyZ2U6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWVQcm9wOiAnYnJlYWRjcnVtYidcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWVQcm9wOiAndGl0bGUnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lUHJvcDogJ2tlZXBGaWx0ZXJzJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZVByb3A6ICdxdWlja1NlYXJjaFdpZHRoJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZVByb3A6ICdjb25jYXRGaWx0ZXJzJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZVByb3A6ICdwYWdlQ3VzdG9tQWN0aW9ucycsXG4gICAgICAgICAgbWVyZ2U6IHRydWUsXG4gICAgICAgICAga2V5Rm9yTWVyZ2U6ICdsYWJlbCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWVQcm9wOiAndGFibGVDdXN0b21BY3Rpb25zJyxcbiAgICAgICAgICBtZXJnZTogdHJ1ZSxcbiAgICAgICAgICBrZXlGb3JNZXJnZTogJ2xhYmVsJ1xuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLnBvUGFnZUN1c3RvbWl6YXRpb25TZXJ2aWNlLmdldEN1c3RvbU9wdGlvbnMob25Mb2FkLCBvcmlnaW5hbE9wdGlvbiwgcGFnZU9wdGlvblNjaGVtYSk7XG4gIH1cblxuICBwcml2YXRlIHNob3dSZW1vdmU8VD4oYWN0aW9uUmVtb3ZlOiBUKTogYm9vbGVhbiB7XG4gICAgY29uc3QgYWN0aW9uID0gYWN0aW9uUmVtb3ZlID8/IGZhbHNlO1xuICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiBhY3Rpb247XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGaWx0ZXJWYWx1ZShmaWx0ZXIpIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZHMubWFwKGl0ZW0gPT4ge1xuICAgICAgaWYgKGZpbHRlci5oYXNPd25Qcm9wZXJ0eShpdGVtLnByb3BlcnR5KSkge1xuICAgICAgICBpdGVtLmluaXRWYWx1ZSA9IGZpbHRlcltpdGVtLnByb3BlcnR5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUGFnZUFjdGlvbnMoKSB7XG4gICAgdGhpcy5wYWdlQWN0aW9ucyA9IFsuLi50aGlzLl9kZWZhdWx0UGFnZUFjdGlvbnMsIC4uLnRoaXMuX2N1c3RvbVBhZ2VMaXN0QWN0aW9uc107XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVRhYmxlQWN0aW9ucygpIHtcbiAgICBjb25zdCBkZWZhdWx0VGFibGVBY3Rpb25zV2l0aG91dEFjdGlvbkRlbGV0ZSA9IHRoaXMuX2RlZmF1bHRUYWJsZUFjdGlvbnMuZmlsdGVyKFxuICAgICAgdGFibGVBY3Rpb24gPT4gdGFibGVBY3Rpb24ubGFiZWwgIT09IHRoaXMubGl0ZXJhbHMudGFibGVBY3Rpb25EZWxldGVcbiAgICApO1xuXG4gICAgY29uc3QgdGFibGVBY3Rpb25EZWxldGUgPSB0aGlzLl9kZWZhdWx0VGFibGVBY3Rpb25zLmZpbmQoXG4gICAgICB0YWJsZUFjdGlvbiA9PiB0YWJsZUFjdGlvbi5sYWJlbCA9PT0gdGhpcy5saXRlcmFscy50YWJsZUFjdGlvbkRlbGV0ZVxuICAgICk7XG5cbiAgICBjb25zdCBuZXdUYWJsZUFjdGlvbnMgPSBbLi4uZGVmYXVsdFRhYmxlQWN0aW9uc1dpdGhvdXRBY3Rpb25EZWxldGUsIC4uLnRoaXMuX2N1c3RvbVRhYmxlQWN0aW9uc107XG5cbiAgICBpZiAodGFibGVBY3Rpb25EZWxldGUpIHtcbiAgICAgIG5ld1RhYmxlQWN0aW9ucy5wdXNoKHRhYmxlQWN0aW9uRGVsZXRlKTtcbiAgICB9XG5cbiAgICB0aGlzLnRhYmxlQWN0aW9ucyA9IG5ld1RhYmxlQWN0aW9ucztcbiAgfVxufVxuIiwiPHBvLXBhZ2UtZHluYW1pYy1zZWFyY2hcbiAgW3AtYWN0aW9uc109XCJwYWdlQWN0aW9uc1wiXG4gIFtwLWJyZWFkY3J1bWJdPVwiYnJlYWRjcnVtYlwiXG4gIFtwLWZpbHRlcnNdPVwiZmlsdGVyc1wiXG4gIFtwLWtlZXAtZmlsdGVyc109XCJrZWVwRmlsdGVyc1wiXG4gIFtwLWNvbmNhdC1maWx0ZXJzXT1cImNvbmNhdEZpbHRlcnNcIlxuICBbcC1xdWljay1zZWFyY2gtd2lkdGhdPVwicXVpY2tTZWFyY2hXaWR0aFwiXG4gIFtwLXRpdGxlXT1cInRpdGxlXCJcbiAgKHAtYWR2YW5jZWQtc2VhcmNoKT1cIm9uQWR2YW5jZWRTZWFyY2goJGV2ZW50KVwiXG4gIChwLWNoYW5nZS1kaXNjbGFpbWVycyk9XCJvbkNoYW5nZURpc2NsYWltZXJzKCRldmVudClcIlxuICAocC1xdWljay1zZWFyY2gpPVwib25RdWlja1NlYXJjaCgkZXZlbnQpXCJcbj5cbiAgPHBvLXRhYmxlXG4gICAgW3Atc29ydF09XCJ0cnVlXCJcbiAgICBbcC1hY3Rpb25zXT1cInRhYmxlQWN0aW9uc1wiXG4gICAgW3AtYWN0aW9ucy1yaWdodF09XCJhY3Rpb25SaWdodFwiXG4gICAgW3Atc2VsZWN0YWJsZV09XCJlbmFibGVTZWxlY3Rpb25UYWJsZVwiXG4gICAgW3AtY29sdW1uc109XCJjb2x1bW5zXCJcbiAgICBbcC1pdGVtc109XCJpdGVtc1wiXG4gICAgW3Atc2hvdy1tb3JlLWRpc2FibGVkXT1cIiFoYXNOZXh0XCJcbiAgICAocC1zaG93LW1vcmUpPVwic2hvd01vcmUoKVwiXG4gICAgKHAtc29ydC1ieSk9XCJvblNvcnQoJGV2ZW50KVwiXG4gID5cbiAgPC9wby10YWJsZT5cbjwvcG8tcGFnZS1keW5hbWljLXNlYXJjaD5cbiJdfQ==
929
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tcGFnZS1keW5hbWljLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RlbXBsYXRlcy9zcmMvbGliL2NvbXBvbmVudHMvcG8tcGFnZS1keW5hbWljLXRhYmxlL3BvLXBhZ2UtZHluYW1pYy10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90ZW1wbGF0ZXMvc3JjL2xpYi9jb21wb25lbnRzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS9wby1wYWdlLWR5bmFtaWMtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUVwRSxPQUFPLEVBQUUsWUFBWSxFQUFjLEtBQUssRUFBVSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbkUsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckQsT0FBTyxFQUNMLFlBQVksRUFRWixxQkFBcUIsRUFDckIsZUFBZSxFQUNoQixNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sS0FBSyxJQUFJLE1BQU0sa0JBQWtCLENBQUM7QUFFekMsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFFMUcsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDdkYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFlOUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7OztBQUUxRixNQUFNLGlCQUFpQixHQUFHLEVB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Q0FBQSxzQ0FBQTs7QURnS2pCO0lBRkMsWUFBWSxFQUFFO2dFQUVjO0FBYTdCO0lBRkMsWUFBWSxFQUFFO2dFQUVlO0FBMEI5QjtJQUZDLFlBQVksRUFBRTtrRUFFZ0I7QUFpQi9CO0lBRkMsWUFBWSxFQUFFO21FQUVrQjt1RkFuR3RCLDJCQUEyQjtjQUx2QyxTQUFTOzJCQUNFLHVCQUF1QixhQUV0QixDQUFDLG9CQUFvQixDQUFDO21UQWdDaEIsTUFBTTtrQkFBdEIsS0FBSzttQkFBQyxRQUFRO1lBYWYsV0FBVztrQkFEVixLQUFLO21CQUFDLGdCQUFnQjtZQWN2QixXQUFXO2tCQURWLEtBQUs7bUJBQUMsaUJBQWlCO1lBMkJ4QixhQUFhO2tCQURaLEtBQUs7bUJBQUMsa0JBQWtCO1lBa0J6QixjQUFjO2tCQURiLEtBQUs7bUJBQUMsbUJBQW1CO1lBd0RGLE9BQU87a0JBQTlCLEtBQUs7bUJBQUMsV0FBVztZQThCa0IsaUJBQWlCO2tCQUFwRCxLQUFLO21CQUFDLHVCQUF1QjtZQTRCTyxrQkFBa0I7a0JBQXRELEtBQUs7bUJBQUMsd0JBQXdCO1lBbUJJLGdCQUFnQjtrQkFBbEQsS0FBSzttQkFBQyxzQkFBc0I7WUFlTixNQUFNO2tCQUE1QixLQUFLO21CQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIE9ic2VydmFibGUsIEVNUFRZLCBjb25jYXQsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YXAsIHN3aXRjaE1hcCwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1xuICBJbnB1dEJvb2xlYW4sXG4gIFBvRGlhbG9nQ29uZmlybU9wdGlvbnMsXG4gIFBvRGlhbG9nU2VydmljZSxcbiAgUG9MYW5ndWFnZVNlcnZpY2UsXG4gIFBvTm90aWZpY2F0aW9uU2VydmljZSxcbiAgUG9QYWdlQWN0aW9uLFxuICBQb1RhYmxlQWN0aW9uLFxuICBQb1RhYmxlQ29sdW1uU29ydCxcbiAgUG9UYWJsZUNvbHVtblNvcnRUeXBlLFxuICBwb0xvY2FsZURlZmF1bHRcbn0gZnJvbSAnQHBvLXVpL25nLWNvbXBvbmVudHMnO1xuXG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uLy4uL3V0aWxzL3V0aWwnO1xuXG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljRGV0YWlsQ29tcG9uZW50IH0gZnJvbSAnLi4vcG8tcGFnZS1keW5hbWljLWRldGFpbC9wby1wYWdlLWR5bmFtaWMtZGV0YWlsLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IHBvUGFnZUR5bmFtaWNUYWJsZUxpdGVyYWxzRGVmYXVsdCB9IGZyb20gJy4vcG8tcGFnZS1keW5hbWljLXRhYmxlLWxpdGVyYWxzJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNMaXN0QmFzZUNvbXBvbmVudCB9IGZyb20gJy4vcG8tcGFnZS1keW5hbWljLWxpc3QtYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wby1wYWdlLWR5bmFtaWMvcG8tcGFnZS1keW5hbWljLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9ucyB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWR5bmFtaWMtdGFibGUtYWN0aW9ucy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1RhYmxlT3B0aW9ucyB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWR5bmFtaWMtdGFibGUtb3B0aW9ucy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9QYWdlQ3VzdG9taXphdGlvblNlcnZpY2UgfSBmcm9tICcuLy4uLy4uL3NlcnZpY2VzL3BvLXBhZ2UtY3VzdG9taXphdGlvbi9wby1wYWdlLWN1c3RvbWl6YXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljT3B0aW9uc1NjaGVtYSB9IGZyb20gJy4vLi4vLi4vc2VydmljZXMvcG8tcGFnZS1jdXN0b21pemF0aW9uL3BvLXBhZ2UtZHluYW1pYy1vcHRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljVGFibGVNZXRhRGF0YSB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWR5bmFtaWMtdGFibGUtbWV0YWRhdGEuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi9wby1wYWdlLWR5bmFtaWMtdGFibGUtYWN0aW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZUVkaXQgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLXRhYmxlLWJlZm9yZS1lZGl0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVOZXcgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLXRhYmxlLWJlZm9yZS1uZXcuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZVJlbW92ZSB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWR5bmFtaWMtdGFibGUtYmVmb3JlLXJlbW92ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1RhYmxlQmVmb3JlRGV0YWlsIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS1iZWZvcmUtZGV0YWlsLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVEdXBsaWNhdGUgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLXRhYmxlLWJlZm9yZS1kdXBsaWNhdGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZVJlbW92ZUFsbCB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWR5bmFtaWMtdGFibGUtYmVmb3JlLXJlbW92ZS1hbGwuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbUFjdGlvbiB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWR5bmFtaWMtdGFibGUtY3VzdG9tLWFjdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1RhYmxlQ3VzdG9tVGFibGVBY3Rpb24gfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLXRhYmxlLWN1c3RvbS10YWJsZS1hY3Rpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IGlzRXh0ZXJuYWxMaW5rLCBvcGVuRXh0ZXJuYWxMaW5rLCByZW1vdmVEdXBsaWNhdGVJdGVtcyB9IGZyb20gJy4uLy4uL3V0aWxzL3V0aWwnO1xuXG5jb25zdCBQQUdFX1NJWkVfREVGQVVMVCA9IDEwO1xuXG50eXBlIFVybE9yUG9DdXN0b21pemF0aW9uRnVuY3Rpb24gPSBzdHJpbmcgfCAoKCkgPT4gUG9QYWdlRHluYW1pY1RhYmxlT3B0aW9ucyk7XG5cbi8qKlxuICogQGRvY3NFeHRlbmRzIFBvUGFnZUR5bmFtaWNMaXN0QmFzZUNvbXBvbmVudFxuICpcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIE8gYHBvLXBhZ2UtZHluYW1pYy10YWJsZWAgw6kgdW1hIHDDoWdpbmEgcXVlIGV4aWJlIHVtYSBsaXN0YSBkZSByZWdpc3Ryb3MgZW0gdW1hIHRhYmVsYSBiYXNlYWRvIGVtIHVtYSBsaXN0YSBkZSBmaWVsZHMsXG4gKiBvIG1lc21vIHRhbWLDqW0gc3Vwb3J0YSBtZXRhZGFkb3MgY29uZm9ybWUgZXNwZWNpZmljYWRvIG5hIGRvY3VtZW50YcOnw6NvLlxuICpcbiAqICMjIyBVdGlsaXphw6fDo28gdmlhIHJvdGFcbiAqXG4gKiBBbyB1dGlsaXphciBhcyByb3RhcyBwYXJhIGNhcnJlZ2FyIG8gdGVtcGxhdGUsIG8gYHBhZ2UtZHluYW1pYy10YWJsZWAgZGlzcG9uaWJpbGl6YSBwcm9wcmllZGFkZXMgcGFyYVxuICogcG9kZXIgZXNwZWNpZmljYXIgbyBlbmRwb2ludCBkb3MgZGFkb3MgZSBkb3MgbWV0YWRhZG9zLiBFeGVtcGxvIGRlIHV0aWxpemHDp8OjbzpcbiAqXG4gKiBPIGNvbXBvbmVudGUgcHJpbWVpcm8gaXLDoSBjYXJyZWdhciBvIG1ldGFkYWRvIGRhIHJvdGEgZGVmaW5pZGEgbmEgcHJvcHJpZWRhZGUgc2VydmljZU1ldGFkYXRhQXBpXG4gKiBlIGRlcG9pcyBpcsOhIGJ1c2NhciBkYSByb3RhIGRlZmluaWRhIG5hIHByb3ByaWVkYWRlIHNlcnZpY2VMb2FkQXBpXG4gKlxuICogPiBDYXNvIG8gc2Vydmlkb3IgcmV0b3JuYXIgdW0gZXJybyBhbyByZWN1cGVyYXIgbyBtZXRhZGFkb3MsIHNlcsOhIHJlcGFzc2FkbyBvIG1ldGFkYWRvcyBzYWx2byBlbSBjYWNoZSxcbiAqIHNlIG8gY2FjaGUgbsOjbyBleGlzdGUgc2Vyw6EgZGlzcGFyYWRvIHVtYSBub3RpZmljYcOnw6NvLlxuICpcbiAqIGBgYFxuICoge1xuICogICBwYXRoOiAncGVvcGxlJyxcbiAqICAgY29tcG9uZW50OiBQb1BhZ2VEeW5hbWljVGFibGVDb21wb25lbnQsXG4gKiAgIGRhdGE6IHtcbiAqICAgICBzZXJ2aWNlQXBpOiAnaHR0cDovL2xvY2FsaG9zdDozMDAwL3YxL3Blb3BsZScsIC8vIGVuZHBvaW50IGRvcyBkYWRvc1xuICogICAgIHNlcnZpY2VNZXRhZGF0YUFwaTogJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMC92MS9tZXRhZGF0YScsIC8vIGVuZHBvaW50IGRvcyBtZXRhZGFkb3MgdXRpbGl6YW5kbyBvIG3DqXRvZG8gSFRUUCBHZXRcbiAqICAgICBzZXJ2aWNlTG9hZEFwaTogJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9sb2FkLW1ldGFkYXRhJyAvLyBlbmRwb2ludCBkZSBjdXN0b21pemHDp8O1ZXMgZG9zIG1ldGFkYWRvcyB1dGlsaXphbmRvIG8gbcOpdG9kbyBIVFRQIFBvc3RcbiAqICAgfVxuICogfVxuICpcbiAqIGBgYFxuICpcbiAqIEEgcmVxdWlzacOnw6NvIGRvcyBtZXRhZGFkb3Mgw6kgZmVpdGEgbmEgaW5pY2lhbGl6YcOnw6NvIGRvIHRlbXBsYXRlIHBhcmEgYnVzY2FyIG9zIG1ldGFkYWRvcyBkYSBww6FnaW5hIHBhc3NhbmRvIG9cbiAqIHRpcG8gZG8gbWV0YWRhZG8gZXNwZXJhZG8gZSBhIHZlcnPDo28gY2FjaGVhZGEgcGVsbyBicm93c2VyLlxuICpcbiAqIE8gZm9ybWF0byBlc3BlcmFkbyBuYSByZXNwb3N0YSBkYSByZXF1aXNpw6fDo28gZXN0w6EgZXNwZWNpZmljYWRvIG5hIGludGVyZmFjZVxuICogW1BvUGFnZUR5bmFtaWNUYWJsZU1ldGFkYXRhXSgvZG9jdW1lbnRhdGlvbi9wby1wYWdlLWR5bmFtaWMtdGFibGUjcG8tcGFnZS1keW5hbWljLXRhYmxlLW1ldGFkYXRhKS4gUG9yIGV4ZW1wbG86XG4gKlxuICogYGBgXG4gKiAge1xuICogICB2ZXJzaW9uOiAxLFxuICogICB0aXRsZTogJ1BlcnNvbiBUYWJsZScsXG4gKiAgIGZpZWxkczogW1xuICogICAgIHsgcHJvcGVydHk6ICdpZCcsIGtleTogdHJ1ZSwgZGlzYWJsZWQ6IHRydWUgfSxcbiAqICAgICB7IHByb3BlcnR5OiAnc3RhdHVzJyB9LFxuICogICAgIHsgcHJvcGVydHk6ICduYW1lJyB9LFxuICogICAgIHsgcHJvcGVydHk6ICduaWNrbmFtZScgfSxcbiAqICAgICB7IHByb3BlcnR5OiAnYmlydGhkYXRlJywgbGFiZWw6ICdCaXJ0aCBkYXRlJyB9LFxuICogICAgIHsgcHJvcGVydHk6ICdnZW5yZScgfSxcbiAqICAgICB7IHByb3BlcnR5OiAnY2l0eScgfSxcbiAqICAgICB7IHByb3BlcnR5OiAnY291bnRyeScgfVxuICogICBdLFxuICogICBrZWVwRmlsdGVyczogdHJ1ZVxuICogfVxuICogYGBgXG4gKlxuICogPiBDYXNvIG8gZW5kcG9pbnQgZG9zIG1ldGFkYWRvcyBuw6NvIHNlamEgZXNwZWNpZmljYWRvLCBzZXLDoSBmZWl0byB1bWEgcmVxdWlzacOnw6NvIHV0aWxpemFuZG8gbyBgc2VydmljZUFwaWAgZGEgc2VndWludGUgZm9ybWE6XG4gKiBgYGBcbiAqIEdFVCB7ZW5kLXBvaW50fS9tZXRhZGF0YT90eXBlPWxpc3QmdmVyc2lvbj17dmVyc2lvbn1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLXBhZ2UtZHluYW1pYy10YWJsZS1iYXNpY1wiIHRpdGxlPVwiUE8gUGFnZSBEeW5hbWljIFRhYmxlIEJhc2ljXCI+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtYmFzaWMvc2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS1iYXNpYy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtYmFzaWMvc2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS1iYXNpYy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1wYWdlLWR5bmFtaWMtdGFibGUtcGVvcGxlXCIgdGl0bGU9XCJQTyBQYWdlIER5bmFtaWMgVGFibGUgLSBQZW9wbGVcIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS1wZW9wbGUvc2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS1wZW9wbGUuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLXBlb3BsZS9zYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLXBlb3BsZS5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1wYWdlLWR5bmFtaWMtdGFibGUtdXNlcnNcIiB0aXRsZT1cIlBPIFBhZ2UgRHluYW1pYyBUYWJsZSAtIFVzZXJzXCI+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtdXNlcnMvc2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS11c2Vycy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtdXNlcnMvc2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS11c2Vycy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLXVzZXJzL3NhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtdXNlcnMuc2VydmljZS50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BvLXBhZ2UtZHluYW1pYy10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9wby1wYWdlLWR5bmFtaWMtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtQb1BhZ2VEeW5hbWljU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgUG9QYWdlRHluYW1pY1RhYmxlQ29tcG9uZW50IGV4dGVuZHMgUG9QYWdlRHluYW1pY0xpc3RCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogRnVuw6fDo28gb3Ugc2VydmnDp28gcXVlIHNlcsOhIGV4ZWN1dGFkbyBuYSBpbmljaWFsaXphw6fDo28gZG8gY29tcG9uZW50ZS5cbiAgICpcbiAgICogQSBwcm9wcmllZGFkZSBhY2VpdGEgb3Mgc2VndWludGVzIHRpcG9zOlxuICAgKiAtIGBzdHJpbmdgOiAqRW5kcG9pbnQqIHVzYWRvIHBlbG8gY29tcG9uZW50ZSBwYXJhIHJlcXVpc2nDp8OjbyB2aWEgYFBPU1RgLlxuICAgKiAtIGBmdW5jdGlvbmA6IE3DqXRvZG8gcXVlIHNlcsOhIGV4ZWN1dGFkby5cbiAgICpcbiAgICogTyByZXRvcm5vIGRlc3RhIGZ1bsOnw6NvIGRldmUgc2VyIGRvIHRpcG8gYFBvUGFnZUR5bmFtaWNUYWJsZU9wdGlvbnNgLFxuICAgKiBvbmRlIG8gdXN1w6FyaW8gcG9kZXLDoSBjdXN0b21pemFyIG5vdm9zIGNhbXBvcywgYnJlYWRjcnVtYiwgdGl0bGUgZSBhY3Rpb25zXG4gICAqXG4gICAqIFBvciBleGVtcGxvOlxuICAgKlxuICAgKiBgYGBcbiAgICogZ2V0UGFnZU9wdGlvbnMoKTogUG9QYWdlRHluYW1pY1RhYmxlT3B0aW9ucyB7XG4gICAqIHJldHVybiB7XG4gICAqICAgYWN0aW9uczpcbiAgICogICAgIHsgbmV3OiAnbmV3JywgZWRpdDogJ2VkaXQvOmlkJywgcmVtb3ZlOiB0cnVlIH0sXG4gICAqICAgZmllbGRzOiBbXG4gICAqICAgICB7IHByb3BlcnR5OiAnaWRDYXJkJywgZ3JpZENvbHVtbnM6IDYgfVxuICAgKiAgIF1cbiAgICogfTtcbiAgICogfVxuICAgKlxuICAgKiBgYGBcbiAgICogUGFyYSByZWZlcmVuY2lhciBhIHN1YSBmdW7Dp8OjbyB1dGlsaXplIGEgcHJvcHJpZWRhZGUgYGJpbmRgLCBwb3IgZXhlbXBsbzpcbiAgICogYGBgXG4gICAqICBbcC1sb2FkXT1cIm9uTG9hZE9wdGlvbnMuYmluZCh0aGlzKVwiXG4gICAqIGBgYFxuICAgKi9cbiAgQElucHV0KCdwLWxvYWQnKSBvbkxvYWQ6IHN0cmluZyB8ICgoKSA9PiBQb1BhZ2VEeW5hbWljVGFibGVPcHRpb25zKTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBNYW50w6ltIG5hIG1vZGFsIGRlIGBCdXNjYSBBdmFuw6dhZGFgIG9zIHZhbG9yZXMgcHJlZW5jaGlkb3MgZG8gw7psdGltbyBmaWx0cm8gcmVhbGl6YWRvIHBlbG8gdXN1w6FyaW8uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dEJvb2xlYW4oKVxuICBASW5wdXQoJ3Ata2VlcC1maWx0ZXJzJylcbiAga2VlcEZpbHRlcnM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgcXVlIGEgY29sdW5hIGRlIGHDp8O1ZXMgZmljYXLDoSBubyBsYWRvIGRpcmVpdG8gZGEgdGFiZWxhLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXRCb29sZWFuKClcbiAgQElucHV0KCdwLWFjdGlvbnMtcmlnaHQnKVxuICBhY3Rpb25SaWdodD86IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBQZXJtaXRlIGEgdXRpbGl6YcOnw6NvIGRhIHBlc3F1aXNhIHLDoXBpZGEganVudG8gY29tIGEgcGVzcXVpc2EgYXZhbsOnYWRhLlxuICAgKlxuICAgKiBEZXN0YSBmb3JtYSwgYW8gdGVyIHVtYSBwZXNxdWlzYSBhdmFuw6dhZGEgZXN0YWJlbGVjaWRhIGUgc2VyXG4gICAqIHByZWVuY2hpZG8gYSBwZXNxdWlzYSByw6FwaWRhLCBvIGZpbHRybyBzZXLDoSBjb25jYXRlbmFkbyBhZGljaW9uYW5kbyBhIHBlc3F1aXNhXG4gICAqIHLDoXBpZGEgdGFtYsOpbSBuYSBsaXN0YSBkZSBgZGlzY2xhaW1lcnNgIGEgYXBsaWNhbmRvIHVtYSBub3ZhIGJ1c2NhIGNvbSBhIGNvbmNhdGVuYcOnw6NvLlxuICAgKlxuICAgKiBQb3IgZXhlbXBsbywgY29tIG9zIHNlZ3VpbnRlcyBmaWx0cm9zIGFwbGljYWRvczpcbiAgICogICAtIGZpbHRybyBhdmFuw6dhZG86IGB7IG5hbWU6ICdNaWtlJywgYWdlOiAnMTInIH1gXG4gICAqICAgLSBmaWx0cm8gcsOhcGlkbzogYHsgc2VhcmNoOiAncGFwZXInIH1gXG4gICAqXG4gICAqIEEgcmVxdWlzacOnw6NvIGRvcyBkYWRvcyBuYSBBUEkgZmljYXLDoSBjb20gb3MgcGFyw6JtZXRyb3M6XG4gICAqIGBgYFxuICAgKiBwYWdlPTEmcGFnZVNpemU9MTAmbmFtZT1NaWtlJmFnZT0xMiZzZWFyY2g9cGFwZXJcbiAgICogYGBgXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dEJvb2xlYW4oKVxuICBASW5wdXQoJ3AtY29uY2F0LWZpbHRlcnMnKVxuICBjb25jYXRGaWx0ZXJzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogU2UgdmVyZGFkZWlybywgYXRpdmEgYSBmdW5jaW9uYWxpZGFkZSBkZSBzY3JvbGwgaW5maW5pdG8gcGFyYSBhIHRhYmVsYSBlIG8gYm90w6NvIFwiQ2FycmVnYXIgTWFpc1wiIGRlaXhhcsOhIGRlIHNlciBleGliaWRvLiBBbyBjaGVnYXIgbm8gZmltIGRhIHRhYmVsYVxuICAgKiBleGVjdXRhcsOhIGEgZnVuw6fDo28gYHAtc2hvdy1tb3JlYC5cbiAgICpcbiAgICogKipSZWdyYXMgZGUgdXRpbGl6YcOnw6NvOioqXG4gICAqICAtIE8gc2Nyb2xsIGluZmluaXRvIHPDsyBmdW5jaW9uYSBwYXJhIHRhYmVsYXMgcXVlIHV0aWxpemFtIGEgcHJvcHJpZWRhZGUgYHAtaGVpZ2h0YCBlIHF1ZSBwb3NzdWVtIG8gc2Nyb2xsIGrDoSBuYSBjYXJnYSBpbmljaWFsIGRvcyBkYWRvcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0Qm9vbGVhbigpXG4gIEBJbnB1dCgncC1pbmZpbml0ZS1zY3JvbGwnKVxuICBpbmZpbml0ZVNjcm9sbD86IGJvb2xlYW4gPSBmYWxzZTtcblxuICBoYXNOZXh0ID0gZmFsc2U7XG4gIGl0ZW1zID0gW107XG4gIGxpdGVyYWxzO1xuICBwYWdlQWN0aW9uczogQXJyYXk8UG9QYWdlQWN0aW9uPiA9IFtdO1xuICB0YWJsZUFjdGlvbnM6IEFycmF5PFBvVGFibGVBY3Rpb24+ID0gW107XG5cbiAgcHJpdmF0ZSBfYWN0aW9uczogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9ucyA9IHt9O1xuICBwcml2YXRlIF9wYWdlQ3VzdG9tQWN0aW9uczogQXJyYXk8UG9QYWdlRHluYW1pY1RhYmxlQ3VzdG9tQWN0aW9uPiA9IFtdO1xuICBwcml2YXRlIF9oZWlnaHQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfcXVpY2tTZWFyY2hXaWR0aDogbnVtYmVyO1xuICBwcml2YXRlIF90YWJsZUN1c3RvbUFjdGlvbnM6IEFycmF5PFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbVRhYmxlQWN0aW9uPiA9IFtdO1xuXG4gIHByaXZhdGUgcGFnZTogbnVtYmVyID0gMTtcbiAgcHJpdmF0ZSBjdXJyZW50UGFnZTogbnVtYmVyID0gMTtcbiAgcHJpdmF0ZSBpdGVtU2VsZWN0ZWRBY3Rpb247XG4gIHByaXZhdGUgcGFyYW1zID0ge307XG4gIHByaXZhdGUgc29ydGVkQ29sdW1uOiBQb1RhYmxlQ29sdW1uU29ydDtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIGhhc0N1c3RvbUFjdGlvbldpdGhTZWxlY3RhYmxlID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfY3VzdG9tUGFnZUxpc3RBY3Rpb25zOiBBcnJheTxQb1BhZ2VBY3Rpb24+ID0gW107XG4gIHByaXZhdGUgX2N1c3RvbVRhYmxlQWN0aW9uczogQXJyYXk8UG9UYWJsZUFjdGlvbj4gPSBbXTtcbiAgcHJpdmF0ZSBfZGVmYXVsdFBhZ2VBY3Rpb25zOiBBcnJheTxQb1BhZ2VBY3Rpb24+ID0gW107XG4gIHByaXZhdGUgX2RlZmF1bHRUYWJsZUFjdGlvbnM6IEFycmF5PFBvVGFibGVBY3Rpb24+ID0gW107XG5cbiAgcHJpdmF0ZSBzZXQgZGVmYXVsdFBhZ2VBY3Rpb25zKHZhbHVlOiBBcnJheTxQb1BhZ2VBY3Rpb24+KSB7XG4gICAgdGhpcy5fZGVmYXVsdFBhZ2VBY3Rpb25zID0gdmFsdWU7XG4gICAgdGhpcy51cGRhdGVQYWdlQWN0aW9ucygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXQgZGVmYXVsdFRhYmxlQWN0aW9ucyh2YWx1ZTogQXJyYXk8UG9UYWJsZUFjdGlvbj4pIHtcbiAgICB0aGlzLl9kZWZhdWx0VGFibGVBY3Rpb25zID0gdmFsdWU7XG4gICAgdGhpcy51cGRhdGVUYWJsZUFjdGlvbnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0IGN1c3RvbVBhZ2VMaXN0QWN0aW9ucyh2YWx1ZTogQXJyYXk8UG9QYWdlQWN0aW9uPikge1xuICAgIHRoaXMuX2N1c3RvbVBhZ2VMaXN0QWN0aW9ucyA9IHZhbHVlO1xuICAgIHRoaXMudXBkYXRlUGFnZUFjdGlvbnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0IGN1c3RvbVRhYmxlQWN0aW9ucyh2YWx1ZTogQXJyYXk8UG9UYWJsZUFjdGlvbj4pIHtcbiAgICB0aGlzLl9jdXN0b21UYWJsZUFjdGlvbnMgPSB2YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZVRhYmxlQWN0aW9ucygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogQcOnw7VlcyBkYSBww6FnaW5hIGUgZGEgdGFiZWxhLlxuICAgKiA+IENhc28gdXRpbGl6YXIgYSBhw6fDo28gcGFkcsOjbyBkZSBleGNsdWlyLCBhIG1lc21hIHNlcsOhIGV4aWJpZGEgcG9yIMO6bHRpbW8gbmEgdGFiZWxhLlxuICAgKi9cbiAgQElucHV0KCdwLWFjdGlvbnMnKSBzZXQgYWN0aW9ucyh2YWx1ZTogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9ucykge1xuICAgIHRoaXMuX2FjdGlvbnMgPSB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPiAwID8gdmFsdWUgOiB7fTtcblxuICAgIHRoaXMuc2V0UGFnZUFjdGlvbnModGhpcy5hY3Rpb25zKTtcbiAgICB0aGlzLnNldFJlbW92ZUFsbEFjdGlvbigpO1xuICAgIHRoaXMuc2V0VGFibGVBY3Rpb25zKHRoaXMuYWN0aW9ucyk7XG4gIH1cblxuICBnZXQgYWN0aW9ucygpOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIExpc3RhIGRlIGHDp8O1ZXMgY3VzdG9taXphZGFzIGRhIHDDoWdpbmEgcXVlIHNlcsOjbyBpbmNvcnBvcmFkYXMgw6BzIGHDp8O1ZXNcbiAgICogaW5mb3JtYWRhcyBhdHJhdsOpcyBkYSBwcm9wcmllZGFkZSBgcC1hY3Rpb25zYC5cbiAgICpcbiAgICogRXNzYXMgYcOnw7VlcyBmaWNhbSBsb2NhbGl6YWRhcyBuYSBwYXJ0ZSBzdXBlcmlvciBkYSBww6FnaW5hIGVtIGJvdMO1ZXMgY29tIGHDp8O1ZXMuXG4gICAqXG4gICAqIEV4ZW1wbG8gZGUgdXRpbGl6YcOnw6NvOlxuICAgKiBgYGBcbiAgICogW1xuICAgKiAgeyBsYWJlbDogJ0V4cG9ydCcsIGFjdGlvbjogdGhpcy5leHBvcnQuYmluZCh0aGlzKSB9LFxuICAgKiAgeyBsYWJlbDogJ1ByaW50JywgYWN0aW9uOiB0aGlzLnByaW50LmJpbmQodGhpcykgfVxuICAgKiBdO1xuICAgKiBgYGBcbiAgICovXG4gIEBJbnB1dCgncC1wYWdlLWN1c3RvbS1hY3Rpb25zJykgc2V0IHBhZ2VDdXN0b21BY3Rpb25zKHZhbHVlOiBBcnJheTxQb1BhZ2VEeW5hbWljVGFibGVDdXN0b21BY3Rpb24+KSB7XG4gICAgdGhpcy5fcGFnZUN1c3RvbUFjdGlvbnMgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW107XG5cbiAgICB0aGlzLmN1c3RvbVBhZ2VMaXN0QWN0aW9ucyA9IHRoaXMudHJhbnNmb3JtQ3VzdG9tQWN0aW9uc1RvUGFnZUxpc3RBY3Rpb24odGhpcy5wYWdlQ3VzdG9tQWN0aW9ucyk7XG4gICAgdGhpcy5oYXNDdXN0b21BY3Rpb25XaXRoU2VsZWN0YWJsZSA9IHRoaXMucGFnZUN1c3RvbUFjdGlvbnMuc29tZShjdXN0b21BY3Rpb24gPT4gY3VzdG9tQWN0aW9uLnNlbGVjdGFibGUpO1xuICB9XG5cbiAgZ2V0IHBhZ2VDdXN0b21BY3Rpb25zKCk6IEFycmF5PFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbUFjdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLl9wYWdlQ3VzdG9tQWN0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIExpc3RhIGRlIGHDp8O1ZXMgY3VzdG9taXphZGFzIG5hIHRhYmVsYSBkYSBww6FnaW5hIHF1ZSBzZXLDo28gaW5jb3Jwb3JhZGFzIMOgcyBhw6fDtWVzXG4gICAqIGluZm9ybWFkYXMgYXRyYXbDqXMgZGEgcHJvcHJpZWRhZGUgYHAtYWN0aW9uc2AuXG4gICAqXG4gICAqIEV4ZW1wbG8gZGUgdXRpbGl6YcOnw6NvOlxuICAgKiBgYGBcbiAgICogW1xuICAgKiAgeyBsYWJlbDogJ0FwcGx5IGRpc2NvdW50JywgYWN0aW9uOiB0aGlzLmFwcGx5RGlzY291bnQuYmluZCh0aGlzKSB9LFxuICAgKiAgeyBsYWJlbDogJ0RldGFpbHMnLCBhY3Rpb246IHRoaXMuZGV0YWlscy5iaW5kKHRoaXMpIH1cbiAgICogXTtcbiAgICogYGBgXG4gICAqID4gQ2FzbyB1dGlsaXphciBhIGHDp8OjbyBwYWRyw6NvIGRlIGV4Y2x1aXIsIGEgbWVzbWEgc2Vyw6EgZXhpYmlkYSBwb3Igw7psdGltbyBuYSB0YWJlbGEuXG4gICAqL1xuICBASW5wdXQoJ3AtdGFibGUtY3VzdG9tLWFjdGlvbnMnKSBzZXQgdGFibGVDdXN0b21BY3Rpb25zKHZhbHVlOiBBcnJheTxQb1BhZ2VEeW5hbWljVGFibGVDdXN0b21UYWJsZUFjdGlvbj4pIHtcbiAgICB0aGlzLl90YWJsZUN1c3RvbUFjdGlvbnMgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW107XG5cbiAgICB0aGlzLmN1c3RvbVRhYmxlQWN0aW9ucyA9IHRoaXMudHJhbnNmb3JtVGFibGVDdXN0b21BY3Rpb25zVG9UYWJsZUFjdGlvbnModGhpcy50YWJsZUN1c3RvbUFjdGlvbnMpO1xuICB9XG5cbiAgZ2V0IHRhYmxlQ3VzdG9tQWN0aW9ucygpOiBBcnJheTxQb1BhZ2VEeW5hbWljVGFibGVDdXN0b21UYWJsZUFjdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLl90YWJsZUN1c3RvbUFjdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBMYXJndXJhIGRvIGNhbXBvIGRlIGJ1c2NhLCB1dGlsaXphbmRvIG8gKkdyaWQgU3lzdGVtKixcbiAgICogZSBsaW1pdGFkbyBhbyBtw6F4aW1vIGRlIDYgY29sdW5hcy4gTyB0YW1hbmhvIG3DrW5pbW8gw6kgY29udHJvbGFkb1xuICAgKiBjb25mb3JtZSByZXNvbHXDp8OjbyBkZSB0ZWxhIHBhcmEgbWFudGVyIGEgY29uc2lzdMOqbmNpYSBkbyBsYXlvdXQuXG4gICAqL1xuICBASW5wdXQoJ3AtcXVpY2stc2VhcmNoLXdpZHRoJykgc2V0IHF1aWNrU2VhcmNoV2lkdGgodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX3F1aWNrU2VhcmNoV2lkdGggPSB1dGlsLmNvbnZlcnRUb0ludCh2YWx1ZSk7XG4gIH1cblxuICBnZXQgcXVpY2tTZWFyY2hXaWR0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9xdWlja1NlYXJjaFdpZHRoO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIGEgYWx0dXJhIGRhIHRhYmVsYSBlbSAqcGl4ZWxzKiBlIGZpeGEgbyBjYWJlw6dhbGhvLlxuICAgKi9cbiAgQElucHV0KCdwLWhlaWdodCcpIHNldCBoZWlnaHQodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2hlaWdodCA9IHV0aWwuY29udmVydFRvSW50KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBoZWlnaHQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHBvRGlhbG9nU2VydmljZTogUG9EaWFsb2dTZXJ2aWNlLFxuICAgIHByaXZhdGUgcG9Ob3RpZmljYXRpb246IFBvTm90aWZpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHBvUGFnZUR5bmFtaWNTZXJ2aWNlOiBQb1BhZ2VEeW5hbWljU2VydmljZSxcbiAgICBwcml2YXRlIHBvUGFnZUN1c3RvbWl6YXRpb25TZXJ2aWNlOiBQb1BhZ2VDdXN0b21pemF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNTZXJ2aWNlOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zU2VydmljZSxcbiAgICBsYW5ndWFnZVNlcnZpY2U6IFBvTGFuZ3VhZ2VTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBjb25zdCBsYW5ndWFnZSA9IGxhbmd1YWdlU2VydmljZS5nZXRTaG9ydExhbmd1YWdlKCk7XG5cbiAgICB0aGlzLmxpdGVyYWxzID0ge1xuICAgICAgLi4ucG9QYWdlRHluYW1pY1RhYmxlTGl0ZXJhbHNEZWZhdWx0W3BvTG9jYWxlRGVmYXVsdF0sXG4gICAgICAuLi5wb1BhZ2VEeW5hbWljVGFibGVMaXRlcmFsc0RlZmF1bHRbbGFuZ3VhZ2VdXG4gICAgfTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubG9hZERhdGFGcm9tQVBJKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG9uQWR2YW5jZWRTZWFyY2goZmlsdGVyKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmxvYWREYXRhKHsgcGFnZTogMSwgLi4uZmlsdGVyIH0pLnN1YnNjcmliZSgpKTtcbiAgICB0aGlzLnBhcmFtcyA9IGZpbHRlcjtcblxuICAgIGlmICh0aGlzLmtlZXBGaWx0ZXJzKSB7XG4gICAgICB0aGlzLnVwZGF0ZUZpbHRlclZhbHVlKGZpbHRlcik7XG4gICAgfVxuICB9XG5cbiAgb25DaGFuZ2VEaXNjbGFpbWVycyhkaXNjbGFpbWVycykge1xuICAgIGNvbnN0IGZpbHRlciA9IHt9O1xuXG4gICAgZGlzY2xhaW1lcnMuZm9yRWFjaChkaXNjbGFpbWVyID0+IHtcbiAgICAgIGZpbHRlcltkaXNjbGFpbWVyLnByb3BlcnR5XSA9IGRpc2NsYWltZXIudmFsdWU7XG4gICAgfSk7XG5cbiAgICB0aGlzLm9uQWR2YW5jZWRTZWFyY2goZmlsdGVyKTtcbiAgfVxuXG4gIG9uUXVpY2tTZWFyY2godGVybVR5cGVkSW5RdWlja1NlYXJjaCkge1xuICAgIGNvbnN0IHF1aWNrU2VhcmNoUGFyYW0gPSB0ZXJtVHlwZWRJblF1aWNrU2VhcmNoID8geyBzZWFyY2g6IHRlcm1UeXBlZEluUXVpY2tTZWFyY2ggfSA6IHt9O1xuICAgIHRoaXMucGFyYW1zID0gdGhpcy5jb25jYXRGaWx0ZXJzID8geyAuLi50aGlzLnBhcmFtcywgLi4ucXVpY2tTZWFyY2hQYXJhbSB9IDogeyAuLi5xdWlja1NlYXJjaFBhcmFtIH07XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMubG9hZERhdGEodGVybVR5cGVkSW5RdWlja1NlYXJjaCA/IHsgcGFnZTogMSwgLi4udGhpcy5wYXJhbXMgfSA6IHVuZGVmaW5lZCkuc3Vic2NyaWJlKCkpO1xuICB9XG5cbiAgb25Tb3J0KHNvcnRlZENvbHVtbjogUG9UYWJsZUNvbHVtblNvcnQpIHtcbiAgICB0aGlzLnNvcnRlZENvbHVtbiA9IHNvcnRlZENvbHVtbjtcbiAgfVxuXG4gIHNob3dNb3JlKCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5sb2FkRGF0YSh7IHBhZ2U6ICsrdGhpcy5wYWdlLCAuLi50aGlzLnBhcmFtcyB9KS5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICBnZXQgZW5hYmxlU2VsZWN0aW9uVGFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQWN0aW9uUmVtb3ZlQWxsIHx8IHRoaXMuaGFzQ3VzdG9tQWN0aW9uV2l0aFNlbGVjdGFibGU7XG4gIH1cblxuICBnZXQgaGFzQWN0aW9uUmVtb3ZlQWxsKCkge1xuICAgIHJldHVybiAhIXRoaXMuYWN0aW9ucy5yZW1vdmVBbGw7XG4gIH1cblxuICAvKipcbiAgICogRnVuw6fDo28gcXVlIHJlYWxpemEgYSBhdHVhbGl6YcOnw6NvIGRvcyBkYWRvcyBkYSB0YWJlbGEuXG4gICAqXG4gICAqIFBhcmEgdXRpbGl6w6EtbGEgw6kgbmVjZXNzw6FyaW8gY2FwdHVyYXIgYSBpbnN0w6JuY2lhIGRvIGBwYWdlIGR5bmFtaWMgdGFibGVgLCBjb21vIHBvciBleGVtcGxvOlxuICAgKlxuICAgKiBgYGAgaHRtbFxuICAgKiA8cG8tcGFnZS1keW5hbWljLXRhYmxlICNkeW5hbWljVGFibGUgW3Atc2VydmljZS1hcGldPVwic2VydmljZUFwaVwiPjwvcG8tcGFnZS1keW5hbWljLXRhYmxlPlxuICAgKiBgYGBcbiAgICpcbiAgICogYGBgIGphdmFzY3JpcHRcbiAgICogaW1wb3J0IHsgUG9QYWdlRHluYW1pY1RhYmxlQ29tcG9uZW50LCBQb0R5bmFtaWNGb3JtRmllbGQgfSBmcm9tICdAcG8tdWkvbmctY29tcG9uZW50cyc7XG4gICAqXG4gICAqIC4uLlxuICAgKlxuICAgKiBAVmlld0NoaWxkKCdkeW5hbWljVGFibGUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBkeW5hbWljVGFibGU6IFBvUGFnZUR5bmFtaWNUYWJsZUNvbXBvbmVudDtcbiAgICpcbiAgICogcGFnZUN1c3RvbUFjdGlvbnM6IEFycmF5PFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbUFjdGlvbj4gPSBbXG4gICAqIHtcbiAgICogICBsYWJlbDogJ1VwZGF0ZScsXG4gICAqICAgYWN0aW9uOiB0aGlzLnVwZGF0ZVRhYmxlLmJpbmQodGhpcyksXG4gICAqICAgaWNvbjogJ3BvLWljb24tcmVmcmVzaCdcbiAgICogfV1cbiAgICpcbiAgICogdXBkYXRlVGFibGUoKSB7XG4gICAqICAgdGhpcy5keW5hbWljVGFibGUudXBkYXRlRGF0YVRhYmxlKCk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqXG4gICAqXG4gICAqIEBwYXJhbSB7e3BhZ2U6IG51bWJlciwga2V5OiB2YWx1ZSB9fSBmaWx0ZXIgUHJvcHJpZWRhZGUgcGFyYSBlbnZpbyBkZSB1bSBmaWx0cm8gY3VzdG9taXphZG8uXG4gICAqIEV4ZW1wbG8gZGUgZW52aW86XG4gICAqXG4gICAqYGBgXG4gICAqIHRoaXMuZHluYW1pY1RhYmxlLnVwZGF0ZURhdGFUYWJsZSh7cGFnZTogMywgc2VhcmNoOiAnQnJhc2lsJ30pO1xuICAgKiBgYGBcbiAgICogQ2FzbyBuw6NvIHNlamEgcGFzc2FkbyB1bSBmaWx0cm8gY3VzdG9taXphZG8gcGFyYSBvIG3DqXRvZG8gYHVwZGF0ZURhdGFUYWJsZWAgYSB0YWJlbGEgc2Vyw6EgYXR1YWxpemFkYSBjb25mb3JtZSBhIHDDoWdpbmEgZG8gdWx0aW1vIGl0ZW0gbW9kaWZpY2Fkby5cbiAgICovXG4gIHB1YmxpYyB1cGRhdGVEYXRhVGFibGUoZmlsdGVyPzogYW55KSB7XG4gICAgY29uc3QgaW5kZXhJdGVtU2VsZWN0ZWQgPSB0aGlzLml0ZW1zLmZpbmRJbmRleChpdGVtID0+IGl0ZW0gPT09IHRoaXMuaXRlbVNlbGVjdGVkQWN0aW9uKTtcbiAgICBjb25zdCBwYWdlTnVtYmVyID0gTWF0aC5mbG9vcihpbmRleEl0ZW1TZWxlY3RlZCAvIFBBR0VfU0laRV9ERUZBVUxUKTtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZU51bWJlciA8IDAgPyB0aGlzLmN1cnJlbnRQYWdlIDogcGFnZU51bWJlciArIDE7XG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlcikge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmxvYWREYXRhKGZpbHRlcikuc3Vic2NyaWJlKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMubG9hZERhdGEoeyBwYWdlOiB0aGlzLmN1cnJlbnRQYWdlLCAuLi50aGlzLnBhcmFtcyB9KS5zdWJzY3JpYmUoKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb25maXJtUmVtb3ZlKFxuICAgIGFjdGlvblJlbW92ZTogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1sncmVtb3ZlJ10sXG4gICAgYWN0aW9uQmVmb3JlUmVtb3ZlOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWydiZWZvcmVSZW1vdmUnXSxcbiAgICBpdGVtXG4gICkge1xuICAgIGNvbnN0IGNvbmZpcm1PcHRpb25zOiBQb0RpYWxvZ0NvbmZpcm1PcHRpb25zID0ge1xuICAgICAgdGl0bGU6IHRoaXMubGl0ZXJhbHMuY29uZmlybVJlbW92ZVRpdGxlLFxuICAgICAgbWVzc2FnZTogdGhpcy5saXRlcmFscy5jb25maXJtUmVtb3ZlTWVzc2FnZSxcbiAgICAgIGNvbmZpcm06IHRoaXMucmVtb3ZlLmJpbmQodGhpcywgaXRlbSwgYWN0aW9uUmVtb3ZlLCBhY3Rpb25CZWZvcmVSZW1vdmUpXG4gICAgfTtcblxuICAgIHRoaXMucG9EaWFsb2dTZXJ2aWNlLmNvbmZpcm0oY29uZmlybU9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25maXJtUmVtb3ZlQWxsKFxuICAgIGFjdGlvblJlbW92ZUFsbDogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1sncmVtb3ZlJ10sXG4gICAgYWN0aW9uQmVmb3JlUmVtb3ZlQWxsOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWydiZWZvcmVSZW1vdmUnXVxuICApIHtcbiAgICBjb25zdCBjb25maXJtT3B0aW9uczogUG9EaWFsb2dDb25maXJtT3B0aW9ucyA9IHtcbiAgICAgIHRpdGxlOiB0aGlzLmxpdGVyYWxzLmNvbmZpcm1SZW1vdmVBbGxUaXRsZSxcbiAgICAgIG1lc3NhZ2U6IHRoaXMubGl0ZXJhbHMuY29uZmlybVJlbW92ZUFsbE1lc3NhZ2UsXG4gICAgICBjb25maXJtOiB0aGlzLnJlbW92ZUFsbC5iaW5kKHRoaXMsIGFjdGlvblJlbW92ZUFsbCwgYWN0aW9uQmVmb3JlUmVtb3ZlQWxsKVxuICAgIH07XG5cbiAgICB0aGlzLnBvRGlhbG9nU2VydmljZS5jb25maXJtKGNvbmZpcm1PcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0VW5pcXVlS2V5KGl0ZW0pIHtcbiAgICBjb25zdCBrZXlzID0gdXRpbC5tYXBPYmplY3RCeVByb3BlcnRpZXMoaXRlbSwgdGhpcy5rZXlzKTtcblxuICAgIHJldHVybiB1dGlsLnZhbHVlc0Zyb21PYmplY3Qoa2V5cykuam9pbignfCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcmRlclBhcmFtKHNvcnRlZENvbHVtbjogUG9UYWJsZUNvbHVtblNvcnQgPSB7IHR5cGU6IHVuZGVmaW5lZCB9KSB7XG4gICAgY29uc3QgeyBjb2x1bW4sIHR5cGUgfSA9IHNvcnRlZENvbHVtbjtcblxuICAgIGlmICghY29sdW1uKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09IFBvVGFibGVDb2x1bW5Tb3J0VHlwZS5EZXNjZW5kaW5nKSB7XG4gICAgICByZXR1cm4geyBvcmRlcjogYC0ke2NvbHVtbi5wcm9wZXJ0eX1gIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgb3JkZXI6IGAke2NvbHVtbi5wcm9wZXJ0eX1gIH07XG4gIH1cblxuICBwcml2YXRlIGxvYWREYXRhKHBhcmFtczogeyBwYWdlPzogbnVtYmVyOyBzZWFyY2g/OiBzdHJpbmcgfSA9IHt9KSB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5rZXlzID8gdGhpcy5rZXlzWzBdIDogJ2lkJztcbiAgICBpZiAoIXRoaXMuc2VydmljZUFwaSkge1xuICAgICAgdGhpcy5wb05vdGlmaWNhdGlvbi5lcnJvcih0aGlzLmxpdGVyYWxzLmxvYWREYXRhRXJyb3JOb3RpZmljYXRpb24pO1xuICAgICAgcmV0dXJuIEVNUFRZO1xuICAgIH1cblxuICAgIGNvbnN0IG9yZGVyUGFyYW0gPSB0aGlzLmdldE9yZGVyUGFyYW0odGhpcy5zb3J0ZWRDb2x1bW4pO1xuICAgIGNvbnN0IGRlZmF1bHRQYXJhbXM6IGFueSA9IHsgcGFnZTogMSwgcGFnZVNpemU6IFBBR0VfU0laRV9ERUZBVUxUIH07XG4gICAgY29uc3QgZnVsbFBhcmFtczogYW55ID0geyAuLi5kZWZhdWx0UGFyYW1zLCAuLi5wYXJhbXMsIC4uLm9yZGVyUGFyYW0gfTtcblxuICAgIHJldHVybiB0aGlzLnBvUGFnZUR5bmFtaWNTZXJ2aWNlLmdldFJlc291cmNlcyhmdWxsUGFyYW1zKS5waXBlKFxuICAgICAgdGFwKHJlc3BvbnNlID0+IHtcbiAgICAgICAgcmVtb3ZlRHVwbGljYXRlSXRlbXMocmVzcG9uc2UuaXRlbXMsIHRoaXMuaXRlbXMsIGtleSk7XG4gICAgICAgIHRoaXMuaXRlbXMgPSBmdWxsUGFyYW1zLnBhZ2UgPT09IDEgPyByZXNwb25zZS5pdGVtcyA6IFsuLi50aGlzLml0ZW1zLCAuLi5yZXNwb25zZS5pdGVtc107XG4gICAgICAgIHRoaXMucGFnZSA9IGZ1bGxQYXJhbXMucGFnZTtcbiAgICAgICAgdGhpcy5oYXNOZXh0ID0gcmVzcG9uc2UuaGFzTmV4dDtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWV0YWRhdGEoXG4gICAgc2VydmljZUFwaUZyb21Sb3V0ZTogc3RyaW5nLFxuICAgIG9uTG9hZDogVXJsT3JQb0N1c3RvbWl6YXRpb25GdW5jdGlvblxuICApOiBPYnNlcnZhYmxlPFBvUGFnZUR5bmFtaWNUYWJsZU1ldGFEYXRhPiB7XG4gICAgaWYgKHNlcnZpY2VBcGlGcm9tUm91dGUpIHtcbiAgICAgIHJldHVybiB0aGlzLnBvUGFnZUR5bmFtaWNTZXJ2aWNlLmdldE1ldGFkYXRhPFBvUGFnZUR5bmFtaWNUYWJsZU1ldGFEYXRhPigpLnBpcGUoXG4gICAgICAgIHRhcChyZXNwb25zZSA9PiB7XG4gICAgICAgICAgdGhpcy5hdXRvUm91dGVyID0gcmVzcG9uc2UuYXV0b1JvdXRlciB8fCB0aGlzLmF1dG9Sb3V0ZXI7XG4gICAgICAgICAgdGhpcy5hY3Rpb25zID0gcmVzcG9uc2UuYWN0aW9ucyB8fCB0aGlzLmFjdGlvbnM7XG4gICAgICAgICAgdGhpcy5icmVhZGNydW1iID0gcmVzcG9uc2UuYnJlYWRjcnVtYiB8fCB0aGlzLmJyZWFkY3J1bWI7XG4gICAgICAgICAgdGhpcy5maWVsZHMgPSByZXNwb25zZS5maWVsZHMgfHwgdGhpcy5maWVsZHM7XG4gICAgICAgICAgdGhpcy50aXRsZSA9IHJlc3BvbnNlLnRpdGxlIHx8IHRoaXMudGl0bGU7XG4gICAgICAgICAgdGhpcy5wYWdlQ3VzdG9tQWN0aW9ucyA9IHJlc3BvbnNlLnBhZ2VDdXN0b21BY3Rpb25zIHx8IHRoaXMucGFnZUN1c3RvbUFjdGlvbnM7XG4gICAgICAgICAgdGhpcy50YWJsZUN1c3RvbUFjdGlvbnMgPSByZXNwb25zZS50YWJsZUN1c3RvbUFjdGlvbnMgfHwgdGhpcy50YWJsZUN1c3RvbUFjdGlvbnM7XG4gICAgICAgICAgdGhpcy5rZWVwRmlsdGVycyA9IHJlc3BvbnNlLmtlZXBGaWx0ZXJzIHx8IHRoaXMua2VlcEZpbHRlcnM7XG4gICAgICAgICAgdGhpcy5jb25jYXRGaWx0ZXJzID0gcmVzcG9uc2UuY29uY2F0RmlsdGVycyB8fCB0aGlzLmNvbmNhdEZpbHRlcnM7XG4gICAgICAgICAgdGhpcy5xdWlja1NlYXJjaFdpZHRoID0gcmVzcG9uc2UucXVpY2tTZWFyY2hXaWR0aCB8fCB0aGlzLnF1aWNrU2VhcmNoV2lkdGg7XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5sb2FkT3B0aW9uc09uSW5pdGlhbGl6ZShvbkxvYWQpKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5sb2FkT3B0aW9uc09uSW5pdGlhbGl6ZShvbkxvYWQpO1xuICB9XG5cbiAgLy8gQHRvZG8gVmFsaWRhciByb3RhcyBuYSBtw6NvIHBvaXMgc2UgZXhpc3RpciB1bWEgcm90YSAnKionIG8gY2F0Y2ggZG8gbmF2aWdhdGlvbiBuw6NvIGZ1bmNpb25hLlxuICBwcml2YXRlIG5hdmlnYXRlVG8oXG4gICAgcm91dGU6IHsgcGF0aDogc3RyaW5nOyBjb21wb25lbnQ/OyB1cmw/OiBzdHJpbmc7IHBhcmFtcz86IGFueSB9LFxuICAgIGZvcmNlU3RvcEF1dG9Sb3V0ZXI6IGJvb2xlYW4gPSBmYWxzZVxuICApIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbcm91dGUudXJsIHx8IHJvdXRlLnBhdGhdLCB7IHF1ZXJ5UGFyYW1zOiByb3V0ZS5wYXJhbXMgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgaWYgKGZvcmNlU3RvcEF1dG9Sb3V0ZXIgfHwgIXRoaXMuYXV0b1JvdXRlcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMucm91dGVyLmNvbmZpZy51bnNoaWZ0KDxSb3V0ZT57XG4gICAgICAgIHBhdGg6IHJvdXRlLnBhdGgsXG4gICAgICAgIGNvbXBvbmVudDogcm91dGUuY29tcG9uZW50LFxuICAgICAgICBkYXRhOiB7IHNlcnZpY2VBcGk6IHRoaXMuc2VydmljZUFwaSwgYXV0b1JvdXRlcjogdHJ1ZSB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5uYXZpZ2F0ZVRvKHJvdXRlLCB0cnVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ29uY2F0ZW5hdGVkVXJsKGNvbmNhdEtleXM6IGJvb2xlYW4sIHVybDogc3RyaW5nLCBzZWxlY3RlZEl0ZW0pOiBzdHJpbmcge1xuICAgIGNvbnN0IGtleXMgPSB0aGlzLmtleXMubWFwKGtleSA9PiBlbmNvZGVVUklDb21wb25lbnQoc2VsZWN0ZWRJdGVtW2tleV0pKS5qb2luKCk7XG4gICAgcmV0dXJuIGNvbmNhdEtleXMgPyBgJHt1cmx9LyR7a2V5c31gIDogdXJsO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuRGV0YWlsKGFjdGlvbjogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1snZGV0YWlsJ10sIGl0ZW0pIHtcbiAgICBjb25zdCBpZCA9IHRoaXMuZm9ybWF0VW5pcXVlS2V5KGl0ZW0pO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNTZXJ2aWNlXG4gICAgICAgIC5iZWZvcmVEZXRhaWwodGhpcy5hY3Rpb25zLmJlZm9yZURldGFpbCwgaWQsIGl0ZW0pXG4gICAgICAgIC5zdWJzY3JpYmUoKGJlZm9yZURldGFpbFJlc3VsdDogUG9QYWdlRHluYW1pY1RhYmxlQmVmb3JlRGV0YWlsKSA9PlxuICAgICAgICAgIHRoaXMuZXhlY3V0ZURldGFpbChhY3Rpb24sIGJlZm9yZURldGFpbFJlc3VsdCwgaWQsIGl0ZW0pXG4gICAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlRGV0YWlsKFxuICAgIGFjdGlvbjogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1snZGV0YWlsJ10sXG4gICAgYmVmb3JlRGV0YWlsUmVzdWx0PzogUG9QYWdlRHluYW1pY1RhYmxlQmVmb3JlTmV3LFxuICAgIGlkPzogc3RyaW5nLFxuICAgIGl0ZW0/OiBhbnlcbiAgKSB7XG4gICAgY29uc3QgYmVmb3JlID0gYmVmb3JlRGV0YWlsUmVzdWx0ID8/IHt9O1xuICAgIGNvbnN0IGFsbG93QWN0aW9uID0gdHlwZW9mIGJlZm9yZS5hbGxvd0FjdGlvbiA9PT0gJ2Jvb2xlYW4nID8gYmVmb3JlLmFsbG93QWN0aW9uIDogdHJ1ZTtcbiAgICBjb25zdCB7IG5ld1VybCB9ID0gYmVmb3JlO1xuXG4gICAgaWYgKGFsbG93QWN0aW9uICYmIGFjdGlvbikge1xuICAgICAgaWYgKG5ld1VybCkge1xuICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5nZXRQYXRoRnJvbU5ld1VybChuZXdVcmwsIGlkKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGVUbyh7IHBhdGggfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLnJlc29sdmVVcmwoaXRlbSwgYWN0aW9uKTtcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvKHsgcGF0aDogYWN0aW9uLCB1cmwsIGNvbXBvbmVudDogUG9QYWdlRHluYW1pY0RldGFpbENvbXBvbmVudCB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjdGlvbihpZCwgaXRlbSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRQYXRoRnJvbU5ld1VybChuZXdVcmw6IHN0cmluZywgaWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKG5ld1VybC5pbmNsdWRlcygnOmlkJykpIHtcbiAgICAgIHJldHVybiBuZXdVcmwucmVwbGFjZSgvOmlkL2csIGlkKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld1VybDtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkR1cGxpY2F0ZShhY3Rpb25EdXBsaWNhdGU6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ2R1cGxpY2F0ZSddLCBpdGVtOiBhbnkpIHtcbiAgICBjb25zdCBpZCA9IHRoaXMuZm9ybWF0VW5pcXVlS2V5KGl0ZW0pO1xuICAgIGNvbnN0IGR1cGxpY2F0ZXMgPSB1dGlsLnJlbW92ZUtleXNQcm9wZXJ0aWVzKHRoaXMua2V5cywgdXRpbC5tYXBPYmplY3RCeVByb3BlcnRpZXMoaXRlbSwgdGhpcy5kdXBsaWNhdGVzKSk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5wb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zU2VydmljZVxuICAgICAgICAuYmVmb3JlRHVwbGljYXRlKHRoaXMuYWN0aW9ucy5iZWZvcmVEdXBsaWNhdGUsIGlkLCBkdXBsaWNhdGVzKVxuICAgICAgICAuc3Vic2NyaWJlKChiZWZvcmVEdXBsaWNhdGVSZXN1bHQ6IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZUR1cGxpY2F0ZSkgPT5cbiAgICAgICAgICB0aGlzLmV4ZWN1dGVEdXBsaWNhdGUoYWN0aW9uRHVwbGljYXRlLCBiZWZvcmVEdXBsaWNhdGVSZXN1bHQsIGR1cGxpY2F0ZXMpXG4gICAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlRHVwbGljYXRlKFxuICAgIGFjdGlvbkR1cGxpY2F0ZTogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1snZHVwbGljYXRlJ10sXG4gICAgYmVmb3JlRHVwbGljYXRlUmVzdWx0OiBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVEdXBsaWNhdGUsXG4gICAgZHVwbGljYXRlczogYW55XG4gICkge1xuICAgIGNvbnN0IGJlZm9yZSA9IGJlZm9yZUR1cGxpY2F0ZVJlc3VsdCA/PyB7fTtcbiAgICBjb25zdCBhbGxvd0FjdGlvbiA9IHR5cGVvZiBiZWZvcmUuYWxsb3dBY3Rpb24gPT09ICdib29sZWFuJyA/IGJlZm9yZS5hbGxvd0FjdGlvbiA6IHRydWU7XG4gICAgY29uc3QgYmVmb3JlRHVwbGljYXRlUmVzb3VyY2UgPSBiZWZvcmUucmVzb3VyY2U7XG4gICAgY29uc3QgbmV3QWN0aW9uID0gYmVmb3JlLm5ld1VybCA/PyBhY3Rpb25EdXBsaWNhdGU7XG5cbiAgICBpZiAoYWxsb3dBY3Rpb24gJiYgYWN0aW9uRHVwbGljYXRlKSB7XG4gICAgICBpZiAodHlwZW9mIGJlZm9yZUR1cGxpY2F0ZVJlc291cmNlID09PSAnb2JqZWN0JyAmJiBiZWZvcmVEdXBsaWNhdGVSZXNvdXJjZSAhPT0gbnVsbCkge1xuICAgICAgICBkdXBsaWNhdGVzID0gdXRpbC5yZW1vdmVLZXlzUHJvcGVydGllcyh0aGlzLmtleXMsIGJlZm9yZUR1cGxpY2F0ZVJlc291cmNlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBuZXdBY3Rpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlVG8oeyBwYXRoOiBuZXdBY3Rpb24sIHBhcmFtczogeyBkdXBsaWNhdGU6IEpTT04uc3RyaW5naWZ5KGR1cGxpY2F0ZXMpIH0gfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXdBY3Rpb24oZHVwbGljYXRlcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvcGVuRWRpdChhY3Rpb25FZGl0OiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWydlZGl0J10sIGl0ZW0pIHtcbiAgICBjb25zdCBpZCA9IHRoaXMuZm9ybWF0VW5pcXVlS2V5KGl0ZW0pO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMucG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1NlcnZpY2VcbiAgICAgICAgLmJlZm9yZUVkaXQodGhpcy5hY3Rpb25zLmJlZm9yZUVkaXQsIGlkLCBpdGVtKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoKGJlZm9yZUVkaXRSZXN1bHQ6IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZUVkaXQpID0+XG4gICAgICAgICAgICB0aGlzLmV4ZWN1dGVFZGl0QWN0aW9uKGFjdGlvbkVkaXQsIGJlZm9yZUVkaXRSZXN1bHQsIGl0ZW0sIGlkKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlRWRpdEFjdGlvbihcbiAgICBhY3Rpb246IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ2VkaXQnXSxcbiAgICBiZWZvcmVFZGl0UmVzdWx0OiBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVFZGl0LFxuICAgIGl0ZW06IGFueSxcbiAgICBpZDogc3RyaW5nXG4gICkge1xuICAgIGNvbnN0IG5ld0VkaXRBY3Rpb24gPSBiZWZvcmVFZGl0UmVzdWx0Py5uZXdVcmwgPz8gYWN0aW9uO1xuICAgIGNvbnN0IGFsbG93QWN0aW9uID0gYmVmb3JlRWRpdFJlc3VsdD8uYWxsb3dBY3Rpb24gPz8gdHJ1ZTtcblxuICAgIGlmICghYWxsb3dBY3Rpb24pIHtcbiAgICAgIHJldHVybiBFTVBUWTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5ld0VkaXRBY3Rpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLm9wZW5FZGl0VXJsKG5ld0VkaXRBY3Rpb24sIGl0ZW0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB1cGRhdGVkSXRlbSA9IG5ld0VkaXRBY3Rpb24oaWQsIGl0ZW0pO1xuICAgICAgaWYgKHR5cGVvZiB1cGRhdGVkSXRlbSA9PT0gJ29iamVjdCcgJiYgdXBkYXRlZEl0ZW0gIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5tb2RpZnlVSVRhYmxlSXRlbShpdGVtLCB1dGlsLnJlbW92ZUtleXNQcm9wZXJ0aWVzKHRoaXMua2V5cywgdXBkYXRlZEl0ZW0pKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gRU1QVFk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5FZGl0VXJsKHBhdGg6IHN0cmluZywgaXRlbSkge1xuICAgIGNvbnN0IHVybCA9IHRoaXMucmVzb2x2ZVVybChpdGVtLCBwYXRoKTtcblxuICAgIHRoaXMubmF2aWdhdGVUbyh7IHBhdGgsIHVybCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbW9kaWZ5VUlUYWJsZUl0ZW0oY3VycmVudEl0ZW0sIG5ld0l0ZW1WYWx1ZSkge1xuICAgIGNvbnN0IHRhYmxlSXRlbSA9IHRoaXMuaXRlbXMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbSA9PT0gY3VycmVudEl0ZW0pO1xuICAgIHRoaXMuaXRlbXNbdGFibGVJdGVtXSA9IHsgLi4uY3VycmVudEl0ZW0sIC4uLm5ld0l0ZW1WYWx1ZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuTmV3KGFjdGlvbk5ldzogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1snbmV3J10pIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5wb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zU2VydmljZVxuICAgICAgICAuYmVmb3JlTmV3KHRoaXMuYWN0aW9ucy5iZWZvcmVOZXcpXG4gICAgICAgIC5zdWJzY3JpYmUoKGJlZm9yZU5ld1Jlc3VsdDogUG9QYWdlRHluYW1pY1RhYmxlQmVmb3JlTmV3KSA9PiB0aGlzLmV4ZWN1dGVOZXcoYWN0aW9uTmV3LCBiZWZvcmVOZXdSZXN1bHQpKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVOZXcoYWN0aW9uTmV3OiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWyduZXcnXSwgYmVmb3JlTmV3UmVzdWx0PzogUG9QYWdlRHluYW1pY1RhYmxlQmVmb3JlTmV3KSB7XG4gICAgY29uc3QgYmVmb3JlID0gYmVmb3JlTmV3UmVzdWx0ID8/IHt9O1xuICAgIGNvbnN0IGFsbG93QWN0aW9uID0gdHlwZW9mIGJlZm9yZS5hbGxvd0FjdGlvbiA9PT0gJ2Jvb2xlYW4nID8gYmVmb3JlLmFsbG93QWN0aW9uIDogdHJ1ZTtcbiAgICBjb25zdCB7IG5ld1VybCB9ID0gYmVmb3JlO1xuXG4gICAgaWYgKGFsbG93QWN0aW9uICYmIGFjdGlvbk5ldykge1xuICAgICAgaWYgKG5ld1VybCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZVRvKHsgcGF0aDogbmV3VXJsIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGFjdGlvbk5ldyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGVUbyh7IHBhdGg6IGFjdGlvbk5ldyB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjdGlvbk5ldygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYXNvIGV4aXN0YSBtYWlzIGRlIHVtIGlkZW50aWZpY2Fkb3IsIHNlcsOhIGNvbmNhdGVuYWRvIGNvbSAnfCcuXG4gICAqXG4gICAqIEV4OiB7IGlkOiAxLCBjb21wYW55OiAncG8nIH1cbiAgICpcbiAgICogUGFyYSBvIGVuZHBvaW50IC9yZXNvdXJjZXMvOmlkIHNlcsOhIGV4ZWN1dGFkYSBhIHVybCAvcmVzb3VyY2VzLzF8cG9cbiAgICovXG4gIHByaXZhdGUgcmVtb3ZlKFxuICAgIGl0ZW0sXG4gICAgYWN0aW9uUmVtb3ZlOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWydyZW1vdmUnXSxcbiAgICBhY3Rpb25CZWZvcmVSZW1vdmU6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ2JlZm9yZVJlbW92ZSddXG4gICkge1xuICAgIGNvbnN0IHVuaXF1ZUtleSA9IHRoaXMuZm9ybWF0VW5pcXVlS2V5KGl0ZW0pO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMucG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1NlcnZpY2VcbiAgICAgICAgLmJlZm9yZVJlbW92ZShhY3Rpb25CZWZvcmVSZW1vdmUsIHVuaXF1ZUtleSwgaXRlbSlcbiAgICAgICAgLnBpcGUoc3dpdGNoTWFwKGJlZm9yZVJlbW92ZSA9PiB0aGlzLmRlbGV0ZUFjdGlvbihpdGVtLCBhY3Rpb25SZW1vdmUsIGJlZm9yZVJlbW92ZSkpKVxuICAgICAgICAuc3Vic2NyaWJlKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVBY3Rpb24oXG4gICAgaXRlbSxcbiAgICBhY3Rpb25SZW1vdmU6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ3JlbW92ZSddLFxuICAgIGJlZm9yZVJlbW92ZTogUG9QYWdlRHluYW1pY1RhYmxlQmVmb3JlUmVtb3ZlXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgeyBhbGxvd0FjdGlvbiwgbmV3VXJsIH0gPSBiZWZvcmVSZW1vdmUgfHwge307XG4gICAgY29uc3QgYWxsb3cgPSBhbGxvd0FjdGlvbiA/PyB0cnVlO1xuXG4gICAgaWYgKGFsbG93KSB7XG4gICAgICBsZXQgdW5pcXVlS2V5ID0gdGhpcy5mb3JtYXRVbmlxdWVLZXkoaXRlbSk7XG4gICAgICBjb25zdCByZXNvdXJjZVRvUmVtb3ZlS2V5ID0gdGhpcy5yZXR1cm5SZXNvdXJjZXNLZXlzKFtpdGVtXSk7XG5cbiAgICAgIGlmICh0eXBlb2YgYWN0aW9uUmVtb3ZlID09PSAnYm9vbGVhbicgfHwgbmV3VXJsKSB7XG4gICAgICAgIHVuaXF1ZUtleSA9IG5ld1VybCA/IHVuZGVmaW5lZCA6IHVuaXF1ZUtleTtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9QYWdlRHluYW1pY1NlcnZpY2VcbiAgICAgICAgICAuZGVsZXRlUmVzb3VyY2UodW5pcXVlS2V5LCBuZXdVcmwpXG4gICAgICAgICAgLnBpcGUobWFwKCgpID0+IHRoaXMucmVtb3ZlRnJvbVVJKHJlc291cmNlVG9SZW1vdmVLZXksIHRoaXMubGl0ZXJhbHMucmVtb3ZlU3VjY2Vzc05vdGlmaWNhdGlvbikpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9mKGFjdGlvblJlbW92ZSh1bmlxdWVLZXksIGl0ZW0pKS5waXBlKFxuICAgICAgICB0YXAocmVtb3ZlID0+IHtcbiAgICAgICAgICBjb25zdCByZW1vdmVJdGVtID0gcmVtb3ZlID8/IGZhbHNlO1xuICAgICAgICAgIHRoaXMucmVtb3ZlRnJvbVVJKHJlc291cmNlVG9SZW1vdmVLZXksIHRoaXMubGl0ZXJhbHMucmVtb3ZlU3VjY2Vzc05vdGlmaWNhdGlvbiwgcmVtb3ZlSXRlbSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBvZih7fSk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUZyb21VSShpdGVtczogQXJyYXk8YW55PiwgbWVzc2FnZTogc3RyaW5nLCByZW1vdmUgPSB0cnVlKSB7XG4gICAgaWYgKHJlbW92ZSA9PT0gdHJ1ZSAmJiBpdGVtcz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLnJlbW92ZUxvY2FsSXRlbXMoaXRlbXMpO1xuICAgICAgdGhpcy5wb05vdGlmaWNhdGlvbi5zdWNjZXNzKG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlQWxsKFxuICAgIGFjdGlvblJlbW92ZUFsbDogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1sncmVtb3ZlQWxsJ10sXG4gICAgYWN0aW9uQmVmb3JlUmVtb3ZlQWxsOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWydiZWZvcmVSZW1vdmVBbGwnXVxuICApIHtcbiAgICBjb25zdCBvcmlnaW5hbFJlc291cmNlc0tleXMgPSB0aGlzLmdldFNlbGVjdGVkSXRlbXNLZXlzKCk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMucG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1NlcnZpY2VcbiAgICAgICAgLmJlZm9yZVJlbW92ZUFsbChhY3Rpb25CZWZvcmVSZW1vdmVBbGwsIG9yaWdpbmFsUmVzb3VyY2VzS2V5cylcbiAgICAgICAgLnBpcGUoc3dpdGNoTWFwKGJlZm9yZVJlbW92ZSA9PiB0aGlzLmRlbGV0ZUFsbEFjdGlvbihhY3Rpb25SZW1vdmVBbGwsIGJlZm9yZVJlbW92ZSwgb3JpZ2luYWxSZXNvdXJjZXNLZXlzKSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldFNlbGVjdGVkSXRlbXNLZXlzKCkge1xuICAgIGNvbnN0IHJlc291cmNlcyA9IHRoaXMuaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS4kc2VsZWN0ZWQpO1xuXG4gICAgaWYgKHJlc291cmNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmV0dXJuUmVzb3VyY2VzS2V5cyhyZXNvdXJjZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXR1cm5SZXNvdXJjZXNLZXlzKHJlc291cmNlcykge1xuICAgIHJldHVybiB1dGlsLm1hcEFycmF5QnlQcm9wZXJ0aWVzKHJlc291cmNlcywgdGhpcy5rZXlzKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlQWxsQWN0aW9uKFxuICAgIGFjdGlvblJlbW92ZUFsbDogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1sncmVtb3ZlQWxsJ10sXG4gICAgYmVmb3JlUmVtb3ZlQWxsOiBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVSZW1vdmVBbGwsXG4gICAgb3JpZ2luYWxSZXNvdXJjZXM6IEFycmF5PGFueT5cbiAgKSB7XG4gICAgY29uc3QgeyBhbGxvd0FjdGlvbiwgbmV3VXJsLCByZXNvdXJjZXMgfSA9IGJlZm9yZVJlbW92ZUFsbCA/PyB7fTtcbiAgICBjb25zdCBhbGxvdyA9IGFsbG93QWN0aW9uID8/IHRydWU7XG4gICAgY29uc3QgcmVzb3VyY2VzdG9EZWxldGUgPSByZXNvdXJjZXMgPz8gb3JpZ2luYWxSZXNvdXJjZXM7XG5cbiAgICBpZiAoYWxsb3cgJiYgQXJyYXkuaXNBcnJheShyZXNvdXJjZXN0b0RlbGV0ZSkpIHtcbiAgICAgIGlmICh0eXBlb2YgYWN0aW9uUmVtb3ZlQWxsID09PSAnYm9vbGVhbicgfHwgbmV3VXJsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBvUGFnZUR5bmFtaWNTZXJ2aWNlLmRlbGV0ZVJlc291cmNlcyhyZXNvdXJjZXN0b0RlbGV0ZSwgbmV3VXJsKS5waXBlKFxuICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUZyb21VSShyZXNvdXJjZXN0b0RlbGV0ZSwgdGhpcy5saXRlcmFscy5yZW1vdmVBbGxTdWNjZXNzTm90aWZpY2F0aW9uKTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9mKGFjdGlvblJlbW92ZUFsbChyZXNvdXJjZXN0b0RlbGV0ZSkpLnBpcGUoXG4gICAgICAgIHRhcChyZW1vdmVJdGVtcyA9PiB0aGlzLnJlbW92ZUZyb21VSShyZW1vdmVJdGVtcywgdGhpcy5saXRlcmFscy5yZW1vdmVTdWNjZXNzTm90aWZpY2F0aW9uKSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9mKHt9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlTG9jYWxJdGVtcyhpdGVtc0tleXNUb1JlbW92ZSA9IFtdKSB7XG4gICAgaWYgKGl0ZW1zS2V5c1RvUmVtb3ZlLmxlbmd0aCkge1xuICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuaXRlbXMuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBpdGVtS2V5ID0gdGhpcy5mb3JtYXRVbmlxdWVLZXkoaXRlbSk7XG4gICAgICAgIHJldHVybiAhaXRlbXNLZXlzVG9SZW1vdmUuZmluZChpdGVtS2V5VG9SZW1vdmUgPT4gdXRpbC52YWx1ZXNGcm9tT2JqZWN0KGl0ZW1LZXlUb1JlbW92ZSkuam9pbignfCcpID09PSBpdGVtS2V5KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVVybChpdGVtOiBhbnksIHBhdGg6IHN0cmluZykge1xuICAgIGNvbnN0IHVuaXF1ZUtleSA9IHRoaXMuZm9ybWF0VW5pcXVlS2V5KGl0ZW0pO1xuXG4gICAgcmV0dXJuIHBhdGgucmVwbGFjZSgvOmlkL2csIHVuaXF1ZUtleSk7XG4gIH1cblxuICBwcml2YXRlIHNldFBhZ2VBY3Rpb25zKGFjdGlvbnM6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnMpIHtcbiAgICBpZiAoYWN0aW9ucz8ubmV3KSB7XG4gICAgICB0aGlzLmRlZmF1bHRQYWdlQWN0aW9ucyA9IFt7IGxhYmVsOiB0aGlzLmxpdGVyYWxzLnBhZ2VBY3Rpb24sIGFjdGlvbjogdGhpcy5vcGVuTmV3LmJpbmQodGhpcywgYWN0aW9ucy5uZXcpIH1dO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtQ3VzdG9tQWN0aW9uc1RvUGFnZUxpc3RBY3Rpb24oXG4gICAgY3VzdG9tQWN0aW9uczogQXJyYXk8UG9QYWdlRHluYW1pY1RhYmxlQ3VzdG9tQWN0aW9uPlxuICApOiBBcnJheTxQb1BhZ2VBY3Rpb24+IHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiBjdXN0b21BY3Rpb25zLm1hcChjdXN0b21BY3Rpb24gPT4gKHtcbiAgICAgIGxhYmVsOiBjdXN0b21BY3Rpb24ubGFiZWwsXG4gICAgICBhY3Rpb246IHRoaXMuY2FsbFBhZ2VDdXN0b21BY3Rpb24uYmluZCh0aGlzLCBjdXN0b21BY3Rpb24pLFxuICAgICAgZGlzYWJsZWQ6IHRoaXMuaXNEaXNhYmxlUGFnZUN1c3RvbUFjdGlvbi5iaW5kKHRoaXMsIGN1c3RvbUFjdGlvbiksXG4gICAgICAuLi4oY3VzdG9tQWN0aW9uLmljb24gJiYgeyBpY29uOiBjdXN0b21BY3Rpb24uaWNvbiB9KSxcbiAgICAgIHZpc2libGU6IGN1c3RvbUFjdGlvbi52aXNpYmxlXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmFuc2Zvcm1UYWJsZUN1c3RvbUFjdGlvbnNUb1RhYmxlQWN0aW9ucyhcbiAgICB0YWJsZUN1c3RvbUFjdGlvbnM6IEFycmF5PFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbVRhYmxlQWN0aW9uPlxuICApOiBBcnJheTxQb1RhYmxlQWN0aW9uPiB7XG4gICAgcmV0dXJuIHRhYmxlQ3VzdG9tQWN0aW9ucy5tYXAodGFibGVDdXN0b21BY3Rpb24gPT4gKHtcbiAgICAgIGxhYmVsOiB0YWJsZUN1c3RvbUFjdGlvbi5sYWJlbCxcbiAgICAgIGljb246IHRhYmxlQ3VzdG9tQWN0aW9uLmljb24sXG4gICAgICBhY3Rpb246IHRoaXMuY2FsbFRhYmxlQ3VzdG9tQWN0aW9uLmJpbmQodGhpcywgdGFibGVDdXN0b21BY3Rpb24pLFxuICAgICAgZGlzYWJsZWQ6IHRhYmxlQ3VzdG9tQWN0aW9uLmRpc2FibGVkLFxuICAgICAgdmlzaWJsZTogdGFibGVDdXN0b21BY3Rpb24udmlzaWJsZVxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNEaXNhYmxlUGFnZUN1c3RvbUFjdGlvbihjdXN0b21BY3Rpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gY3VzdG9tQWN0aW9uLnNlbGVjdGFibGUgJiYgIXRoaXMuZ2V0U2VsZWN0ZWRJdGVtc0tleXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FsbFBhZ2VDdXN0b21BY3Rpb24oY3VzdG9tQWN0aW9uOiBQb1BhZ2VEeW5hbWljVGFibGVDdXN0b21BY3Rpb24pIHtcbiAgICBpZiAoY3VzdG9tQWN0aW9uLmFjdGlvbikge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IGN1c3RvbUFjdGlvbi5zZWxlY3RhYmxlID8gdGhpcy5nZXRTZWxlY3RlZEl0ZW1zS2V5cygpIDogdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCBzZW5kQ3VzdG9tQWN0aW9uU3Vic2NyaXB0aW9uID0gdGhpcy5wb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zU2VydmljZVxuICAgICAgICAuY3VzdG9tQWN0aW9uKGN1c3RvbUFjdGlvbi5hY3Rpb24sIHNlbGVjdGVkSXRlbXMpXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChzZW5kQ3VzdG9tQWN0aW9uU3Vic2NyaXB0aW9uKTtcbiAgICB9IGVsc2UgaWYgKGN1c3RvbUFjdGlvbi51cmwpIHtcbiAgICAgIHRoaXMubmF2aWdhdGVUbyh7IHBhdGg6IGN1c3RvbUFjdGlvbi51cmwgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjYWxsVGFibGVDdXN0b21BY3Rpb24oY3VzdG9tQWN0aW9uOiBQb1BhZ2VEeW5hbWljVGFibGVDdXN0b21UYWJsZUFjdGlvbiwgc2VsZWN0ZWRJdGVtKSB7XG4gICAgdGhpcy5pdGVtU2VsZWN0ZWRBY3Rpb24gPSBzZWxlY3RlZEl0ZW07XG4gICAgaWYgKGN1c3RvbUFjdGlvbi5hY3Rpb24pIHtcbiAgICAgIGNvbnN0IHNlbmRDdXN0b21BY3Rpb25TdWJzY3JpcHRpb24gPSB0aGlzLnBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNTZXJ2aWNlXG4gICAgICAgIC5jdXN0b21BY3Rpb24oY3VzdG9tQWN0aW9uLmFjdGlvbiwgc2VsZWN0ZWRJdGVtKVxuICAgICAgICAuc3Vic2NyaWJlKHVwZGF0ZWRJdGVtID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIHVwZGF0ZWRJdGVtID09PSAnb2JqZWN0JyAmJiB1cGRhdGVkSXRlbSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5tb2RpZnlVSVRhYmxlSXRlbShzZWxlY3RlZEl0ZW0sIHV0aWwucmVtb3ZlS2V5c1Byb3BlcnRpZXModGhpcy5rZXlzLCB1cGRhdGVkSXRlbSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoc2VuZEN1c3RvbUFjdGlvblN1YnNjcmlwdGlvbik7XG4gICAgfSBlbHNlIGlmIChjdXN0b21BY3Rpb24udXJsKSB7XG4gICAgICBpZiAoaXNFeHRlcm5hbExpbmsoY3VzdG9tQWN0aW9uLnVybCkpIHtcbiAgICAgICAgb3BlbkV4dGVybmFsTGluayh0aGlzLmNyZWF0ZUNvbmNhdGVuYXRlZFVybChjdXN0b21BY3Rpb24uY29uY2F0S2V5cywgY3VzdG9tQWN0aW9uLnVybCwgc2VsZWN0ZWRJdGVtKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm5hdmlnYXRlVG8oe1xuICAgICAgICAgIHBhdGg6IHRoaXMuY3JlYXRlQ29uY2F0ZW5hdGVkVXJsKGN1c3RvbUFjdGlvbi5jb25jYXRLZXlzLCBjdXN0b21BY3Rpb24udXJsLCBzZWxlY3RlZEl0ZW0pXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0UmVtb3ZlQWxsQWN0aW9uKCkge1xuICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuX2FjdGlvbnM7XG4gICAgaWYgKHRoaXMuc2hvd1JlbW92ZShhY3Rpb24ucmVtb3ZlQWxsKSkge1xuICAgICAgdGhpcy5kZWZhdWx0UGFnZUFjdGlvbnMgPSBbXG4gICAgICAgIC4uLnRoaXMuX2RlZmF1bHRQYWdlQWN0aW9ucyxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiB0aGlzLmxpdGVyYWxzLnBhZ2VBY3Rpb25SZW1vdmVBbGwsXG4gICAgICAgICAgYWN0aW9uOiB0aGlzLmNvbmZpcm1SZW1vdmVBbGwuYmluZCh0aGlzLCBhY3Rpb24ucmVtb3ZlQWxsLCBhY3Rpb24uYmVmb3JlUmVtb3ZlQWxsKSxcbiAgICAgICAgICBkaXNhYmxlZDogdGhpcy5kaXNhYmxlUmVtb3ZlQWxsLmJpbmQodGhpcylcbiAgICAgICAgfVxuICAgICAgXTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRpc2FibGVSZW1vdmVBbGwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmdldFNlbGVjdGVkSXRlbXNLZXlzKCk7XG4gIH1cblxuICBwcml2YXRlIHNldFRhYmxlQWN0aW9ucyhhY3Rpb25zOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zKSB7XG4gICAgaWYgKGFjdGlvbnMpIHtcbiAgICAgIGNvbnN0IHZpc2libGVSZW1vdmUgPSB0aGlzLnNob3dSZW1vdmUoYWN0aW9ucy5yZW1vdmUpO1xuICAgICAgdGhpcy5kZWZhdWx0VGFibGVBY3Rpb25zID0gW1xuICAgICAgICB7XG4gICAgICAgICAgYWN0aW9uOiB0aGlzLm9wZW5EZXRhaWwuYmluZCh0aGlzLCBhY3Rpb25zLmRldGFpbCksXG4gICAgICAgICAgbGFiZWw6IHRoaXMubGl0ZXJhbHMudGFibGVBY3Rpb25WaWV3LFxuICAgICAgICAgIHZpc2libGU6ICEhdGhpcy5fYWN0aW9ucy5kZXRhaWxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGFjdGlvbjogdGhpcy5vcGVuRWRpdC5iaW5kKHRoaXMsIGFjdGlvbnMuZWRpdCksXG4gICAgICAgICAgbGFiZWw6IHRoaXMubGl0ZXJhbHMudGFibGVBY3Rpb25FZGl0LFxuICAgICAgICAgIHZpc2libGU6ICEhdGhpcy5fYWN0aW9ucy5lZGl0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBhY3Rpb246IHRoaXMub3BlbkR1cGxpY2F0ZS5iaW5kKHRoaXMsIGFjdGlvbnMuZHVwbGljYXRlKSxcbiAgICAgICAgICBsYWJlbDogdGhpcy5saXRlcmFscy50YWJsZUFjdGlvbkR1cGxpY2F0ZSxcbiAgICAgICAgICB2aXNpYmxlOiAhIXRoaXMuX2FjdGlvbnMuZHVwbGljYXRlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBhY3Rpb246IHRoaXMuY29uZmlybVJlbW92ZS5iaW5kKHRoaXMsIGFjdGlvbnMucmVtb3ZlLCBhY3Rpb25zLmJlZm9yZVJlbW92ZSksXG4gICAgICAgICAgbGFiZWw6IHRoaXMubGl0ZXJhbHMudGFibGVBY3Rpb25EZWxldGUsXG4gICAgICAgICAgc2VwYXJhdG9yOiB0cnVlLFxuICAgICAgICAgIHR5cGU6ICdkYW5nZXInLFxuICAgICAgICAgIHZpc2libGU6IHZpc2libGVSZW1vdmVcbiAgICAgICAgfVxuICAgICAgXTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvYWREYXRhRnJvbUFQSSgpIHtcbiAgICBjb25zdCB7IHNlcnZpY2VBcGk6IHNlcnZpY2VBcGlGcm9tUm91dGUsIHNlcnZpY2VNZXRhZGF0YUFwaSwgc2VydmljZUxvYWRBcGkgfSA9IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QuZGF0YTtcblxuICAgIGNvbnN0IG9uTG9hZCA9IHNlcnZpY2VMb2FkQXBpIHx8IHRoaXMub25Mb2FkO1xuICAgIHRoaXMuc2VydmljZUFwaSA9IHNlcnZpY2VBcGlGcm9tUm91dGUgfHwgdGhpcy5zZXJ2aWNlQXBpO1xuXG4gICAgdGhpcy5wb1BhZ2VEeW5hbWljU2VydmljZS5jb25maWdTZXJ2aWNlQXBpKHsgZW5kcG9pbnQ6IHRoaXMuc2VydmljZUFwaSwgbWV0YWRhdGE6IHNlcnZpY2VNZXRhZGF0YUFwaSB9KTtcblxuICAgIGNvbnN0IG1ldGFkYXRhJCA9IHRoaXMuZ2V0TWV0YWRhdGEoc2VydmljZUFwaUZyb21Sb3V0ZSwgb25Mb2FkKTtcbiAgICBjb25zdCBkYXRhJCA9IHRoaXMubG9hZERhdGEoKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICBtZXRhZGF0YSRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluaXRpYWxGaWx0ZXJzID0gdGhpcy5nZXRJbml0aWFsVmFsdWVzRnJvbUZpbHRlcigpO1xuXG4gICAgICAgICAgICBpZiAoIU9iamVjdC5rZXlzKGluaXRpYWxGaWx0ZXJzKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGRhdGEkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbml0aWFsVmFsdWVzRnJvbUZpbHRlcigpIHtcbiAgICBjb25zdCBpbml0aWFsRmlsdGVycyA9IHRoaXMuZmlsdGVycy5yZWR1Y2UoXG4gICAgICAocmVzdWx0LCBpdGVtKSA9PiBPYmplY3QuYXNzaWduKHJlc3VsdCwgeyBbaXRlbS5wcm9wZXJ0eV06IGl0ZW0uaW5pdFZhbHVlIH0pLFxuICAgICAge31cbiAgICApO1xuXG4gICAgT2JqZWN0LmtleXMoaW5pdGlhbEZpbHRlcnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmICghaW5pdGlhbEZpbHRlcnNba2V5XSkge1xuICAgICAgICBkZWxldGUgaW5pdGlhbEZpbHRlcnNba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBpbml0aWFsRmlsdGVycztcbiAgfVxuXG4gIHByaXZhdGUgbG9hZE9wdGlvbnNPbkluaXRpYWxpemUob25Mb2FkOiBVcmxPclBvQ3VzdG9taXphdGlvbkZ1bmN0aW9uKSB7XG4gICAgaWYgKG9uTG9hZCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UG9EeW5hbWljUGFnZU9wdGlvbnMob25Mb2FkKS5waXBlKFxuICAgICAgICB0YXAocmVzcG9uc2VQb09wdGlvbiA9PlxuICAgICAgICAgIHRoaXMucG9QYWdlQ3VzdG9taXphdGlvblNlcnZpY2UuY2hhbmdlT3JpZ2luYWxPcHRpb25zVG9OZXdPcHRpb25zKHRoaXMsIHJlc3BvbnNlUG9PcHRpb24pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9mKG51bGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQb0R5bmFtaWNQYWdlT3B0aW9ucyhvbkxvYWQ6IFVybE9yUG9DdXN0b21pemF0aW9uRnVuY3Rpb24pOiBPYnNlcnZhYmxlPFBvUGFnZUR5bmFtaWNUYWJsZU9wdGlvbnM+IHtcbiAgICBjb25zdCBvcmlnaW5hbE9wdGlvbjogUG9QYWdlRHluYW1pY1RhYmxlT3B0aW9ucyA9IHtcbiAgICAgIGZpZWxkczogdGhpcy5maWVsZHMsXG4gICAgICBhY3Rpb25zOiB0aGlzLmFjdGlvbnMsXG4gICAgICBicmVhZGNydW1iOiB0aGlzLmJyZWFkY3J1bWIsXG4gICAgICB0aXRsZTogdGhpcy50aXRsZSxcbiAgICAgIGtlZXBGaWx0ZXJzOiB0aGlzLmtlZXBGaWx0ZXJzLFxuICAgICAgY29uY2F0RmlsdGVyczogdGhpcy5jb25jYXRGaWx0ZXJzLFxuICAgICAgcGFnZUN1c3RvbUFjdGlvbnM6IHRoaXMucGFnZUN1c3RvbUFjdGlvbnMsXG4gICAgICB0YWJsZUN1c3RvbUFjdGlvbnM6IHRoaXMudGFibGVDdXN0b21BY3Rpb25zLFxuICAgICAgcXVpY2tTZWFyY2hXaWR0aDogdGhpcy5xdWlja1NlYXJjaFdpZHRoXG4gICAgfTtcblxuICAgIGNvbnN0IHBhZ2VPcHRpb25TY2hlbWE6IFBvUGFnZUR5bmFtaWNPcHRpb25zU2NoZW1hPFBvUGFnZUR5bmFtaWNUYWJsZU9wdGlvbnM+ID0ge1xuICAgICAgc2NoZW1hOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lUHJvcDogJ2ZpZWxkcycsXG4gICAgICAgICAgbWVyZ2U6IHRydWUsXG4gICAgICAgICAga2V5Rm9yTWVyZ2U6ICdwcm9wZXJ0eSdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWVQcm9wOiAnYWN0aW9ucycsXG4gICAgICAgICAgbWVyZ2U6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWVQcm9wOiAnYnJlYWRjcnVtYidcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWVQcm9wOiAndGl0bGUnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lUHJvcDogJ2tlZXBGaWx0ZXJzJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZVByb3A6ICdxdWlja1NlYXJjaFdpZHRoJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZVByb3A6ICdjb25jYXRGaWx0ZXJzJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZVByb3A6ICdwYWdlQ3VzdG9tQWN0aW9ucycsXG4gICAgICAgICAgbWVyZ2U6IHRydWUsXG4gICAgICAgICAga2V5Rm9yTWVyZ2U6ICdsYWJlbCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWVQcm9wOiAndGFibGVDdXN0b21BY3Rpb25zJyxcbiAgICAgICAgICBtZXJnZTogdHJ1ZSxcbiAgICAgICAgICBrZXlGb3JNZXJnZTogJ2xhYmVsJ1xuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLnBvUGFnZUN1c3RvbWl6YXRpb25TZXJ2aWNlLmdldEN1c3RvbU9wdGlvbnMob25Mb2FkLCBvcmlnaW5hbE9wdGlvbiwgcGFnZU9wdGlvblNjaGVtYSk7XG4gIH1cblxuICBwcml2YXRlIHNob3dSZW1vdmU8VD4oYWN0aW9uUmVtb3ZlOiBUKTogYm9vbGVhbiB7XG4gICAgY29uc3QgYWN0aW9uID0gYWN0aW9uUmVtb3ZlID8/IGZhbHNlO1xuICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiBhY3Rpb247XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGaWx0ZXJWYWx1ZShmaWx0ZXIpIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZHMubWFwKGl0ZW0gPT4ge1xuICAgICAgaWYgKGZpbHRlci5oYXNPd25Qcm9wZXJ0eShpdGVtLnByb3BlcnR5KSkge1xuICAgICAgICBpdGVtLmluaXRWYWx1ZSA9IGZpbHRlcltpdGVtLnByb3BlcnR5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUGFnZUFjdGlvbnMoKSB7XG4gICAgdGhpcy5wYWdlQWN0aW9ucyA9IFsuLi50aGlzLl9kZWZhdWx0UGFnZUFjdGlvbnMsIC4uLnRoaXMuX2N1c3RvbVBhZ2VMaXN0QWN0aW9uc107XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVRhYmxlQWN0aW9ucygpIHtcbiAgICBjb25zdCBkZWZhdWx0VGFibGVBY3Rpb25zV2l0aG91dEFjdGlvbkRlbGV0ZSA9IHRoaXMuX2RlZmF1bHRUYWJsZUFjdGlvbnMuZmlsdGVyKFxuICAgICAgdGFibGVBY3Rpb24gPT4gdGFibGVBY3Rpb24ubGFiZWwgIT09IHRoaXMubGl0ZXJhbHMudGFibGVBY3Rpb25EZWxldGVcbiAgICApO1xuXG4gICAgY29uc3QgdGFibGVBY3Rpb25EZWxldGUgPSB0aGlzLl9kZWZhdWx0VGFibGVBY3Rpb25zLmZpbmQoXG4gICAgICB0YWJsZUFjdGlvbiA9PiB0YWJsZUFjdGlvbi5sYWJlbCA9PT0gdGhpcy5saXRlcmFscy50YWJsZUFjdGlvbkRlbGV0ZVxuICAgICk7XG5cbiAgICBjb25zdCBuZXdUYWJsZUFjdGlvbnMgPSBbLi4uZGVmYXVsdFRhYmxlQWN0aW9uc1dpdGhvdXRBY3Rpb25EZWxldGUsIC4uLnRoaXMuX2N1c3RvbVRhYmxlQWN0aW9uc107XG5cbiAgICBpZiAodGFibGVBY3Rpb25EZWxldGUpIHtcbiAgICAgIG5ld1RhYmxlQWN0aW9ucy5wdXNoKHRhYmxlQWN0aW9uRGVsZXRlKTtcbiAgICB9XG5cbiAgICB0aGlzLnRhYmxlQWN0aW9ucyA9IG5ld1RhYmxlQWN0aW9ucztcbiAgfVxufVxuIiwiPHBvLXBhZ2UtZHluYW1pYy1zZWFyY2hcbiAgW3AtYWN0aW9uc109XCJwYWdlQWN0aW9uc1wiXG4gIFtwLWJyZWFkY3J1bWJdPVwiYnJlYWRjcnVtYlwiXG4gIFtwLWZpbHRlcnNdPVwiZmlsdGVyc1wiXG4gIFtwLWtlZXAtZmlsdGVyc109XCJrZWVwRmlsdGVyc1wiXG4gIFtwLWNvbmNhdC1maWx0ZXJzXT1cImNvbmNhdEZpbHRlcnNcIlxuICBbcC1xdWljay1zZWFyY2gtd2lkdGhdPVwicXVpY2tTZWFyY2hXaWR0aFwiXG4gIFtwLXRpdGxlXT1cInRpdGxlXCJcbiAgKHAtYWR2YW5jZWQtc2VhcmNoKT1cIm9uQWR2YW5jZWRTZWFyY2goJGV2ZW50KVwiXG4gIChwLWNoYW5nZS1kaXNjbGFpbWVycyk9XCJvbkNoYW5nZURpc2NsYWltZXJzKCRldmVudClcIlxuICAocC1xdWljay1zZWFyY2gpPVwib25RdWlja1NlYXJjaCgkZXZlbnQpXCJcbj5cbiAgPHBvLXRhYmxlXG4gICAgW3Atc29ydF09XCJ0cnVlXCJcbiAgICBbcC1hY3Rpb25zXT1cInRhYmxlQWN0aW9uc1wiXG4gICAgW3AtYWN0aW9ucy1yaWdodF09XCJhY3Rpb25SaWdodFwiXG4gICAgW3Atc2VsZWN0YWJsZV09XCJlbmFibGVTZWxlY3Rpb25UYWJsZVwiXG4gICAgW3AtY29sdW1uc109XCJjb2x1bW5zXCJcbiAgICBbcC1pdGVtc109XCJpdGVtc1wiXG4gICAgW3AtaGVpZ2h0XT1cImhlaWdodFwiXG4gICAgW3AtaW5maW5pdGUtc2Nyb2xsXT1cImluZmluaXRlU2Nyb2xsXCJcbiAgICBbcC1zaG93LW1vcmUtZGlzYWJsZWRdPVwiIWhhc05leHRcIlxuICAgIChwLXNob3ctbW9yZSk9XCJzaG93TW9yZSgpXCJcbiAgICAocC1zb3J0LWJ5KT1cIm9uU29ydCgkZXZlbnQpXCJcbiAgPlxuICA8L3BvLXRhYmxlPlxuPC9wby1wYWdlLWR5bmFtaWMtc2VhcmNoPlxuIl19