@igo2/common 1.13.0-alpha.0 → 1.13.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.
- package/esm2020/lib/action/action.module.mjs +1 -1
- package/esm2020/lib/action/actionbar/actionbar-item.component.mjs +2 -2
- package/esm2020/lib/action/actionbar/actionbar.component.mjs +2 -2
- package/esm2020/lib/action/actionbar/actionbar.module.mjs +1 -1
- package/esm2020/lib/action/index.mjs +1 -1
- package/esm2020/lib/action/shared/action.enums.mjs +1 -1
- package/esm2020/lib/action/shared/action.interfaces.mjs +1 -1
- package/esm2020/lib/action/shared/index.mjs +1 -1
- package/esm2020/lib/action/shared/store.mjs +1 -1
- package/esm2020/lib/backdrop/backdrop.component.mjs +2 -2
- package/esm2020/lib/backdrop/backdrop.module.mjs +1 -1
- package/esm2020/lib/backdrop/index.mjs +1 -1
- package/esm2020/lib/badge-icon/badge-icon.directive.mjs +1 -1
- package/esm2020/lib/badge-icon/badge-icon.module.mjs +1 -1
- package/esm2020/lib/badge-icon/index.mjs +1 -1
- package/esm2020/lib/clickout/clickout.directive.mjs +1 -1
- package/esm2020/lib/clickout/clickout.module.mjs +1 -1
- package/esm2020/lib/clickout/index.mjs +1 -1
- package/esm2020/lib/clone/clone.module.mjs +1 -1
- package/esm2020/lib/clone/clone.pipe.mjs +1 -1
- package/esm2020/lib/clone/index.mjs +1 -1
- package/esm2020/lib/collapsible/collapse.directive.mjs +1 -1
- package/esm2020/lib/collapsible/collapsible.component.mjs +2 -2
- package/esm2020/lib/collapsible/collapsible.module.mjs +1 -1
- package/esm2020/lib/collapsible/index.mjs +1 -1
- package/esm2020/lib/confirm-dialog/confirm-dialog.component.mjs +2 -2
- package/esm2020/lib/confirm-dialog/confirm-dialog.module.mjs +1 -1
- package/esm2020/lib/confirm-dialog/confirm-dialog.service.mjs +1 -1
- package/esm2020/lib/confirm-dialog/index.mjs +1 -1
- package/esm2020/lib/context-menu/context-menu.directive.mjs +1 -1
- package/esm2020/lib/context-menu/context-menu.module.mjs +1 -1
- package/esm2020/lib/context-menu/index.mjs +1 -1
- package/esm2020/lib/custom-html/custom-html.component.mjs +2 -2
- package/esm2020/lib/custom-html/custom-html.module.mjs +1 -1
- package/esm2020/lib/custom-html/custom-html.pipe.mjs +1 -1
- package/esm2020/lib/custom-html/index.mjs +1 -1
- package/esm2020/lib/dom/dom.interfaces.mjs +1 -1
- package/esm2020/lib/dom/dom.module.mjs +1 -1
- package/esm2020/lib/dom/dom.service.mjs +1 -1
- package/esm2020/lib/dom/index.mjs +1 -1
- package/esm2020/lib/drag-drop/drag-drop.module.mjs +1 -1
- package/esm2020/lib/drag-drop/index.mjs +1 -1
- package/esm2020/lib/dynamic-component/dynamic-component.module.mjs +1 -1
- package/esm2020/lib/dynamic-component/dynamic-outlet/dynamic-outlet.component.mjs +2 -2
- package/esm2020/lib/dynamic-component/dynamic-outlet/dynamic-outlet.module.mjs +1 -1
- package/esm2020/lib/dynamic-component/index.mjs +1 -1
- package/esm2020/lib/dynamic-component/shared/dynamic-component.interfaces.mjs +1 -1
- package/esm2020/lib/dynamic-component/shared/dynamic-component.mjs +1 -1
- package/esm2020/lib/dynamic-component/shared/dynamic-component.service.mjs +1 -1
- package/esm2020/lib/dynamic-component/shared/index.mjs +1 -1
- package/esm2020/lib/entity/entity-selector/entity-selector.component.mjs +2 -2
- package/esm2020/lib/entity/entity-selector/entity-selector.module.mjs +1 -1
- package/esm2020/lib/entity/entity-table/entity-table-row.directive.mjs +1 -1
- package/esm2020/lib/entity/entity-table/entity-table.component.mjs +86 -61
- package/esm2020/lib/entity/entity-table/entity-table.module.mjs +1 -1
- package/esm2020/lib/entity/entity-table-paginator/entity-table-paginator.component.mjs +2 -2
- package/esm2020/lib/entity/entity-table-paginator/entity-table-paginator.interface.mjs +1 -1
- package/esm2020/lib/entity/entity-table-paginator/entity-table-paginator.module.mjs +1 -1
- package/esm2020/lib/entity/entity.module.mjs +1 -1
- package/esm2020/lib/entity/index.mjs +1 -1
- package/esm2020/lib/entity/shared/entity.enums.mjs +1 -1
- package/esm2020/lib/entity/shared/entity.interfaces.mjs +1 -1
- package/esm2020/lib/entity/shared/entity.utils.mjs +1 -1
- package/esm2020/lib/entity/shared/index.mjs +1 -1
- package/esm2020/lib/entity/shared/state.mjs +1 -1
- package/esm2020/lib/entity/shared/store.mjs +1 -1
- package/esm2020/lib/entity/shared/strategies/filter-custom-function.mjs +1 -1
- package/esm2020/lib/entity/shared/strategies/filter-selection.mjs +1 -1
- package/esm2020/lib/entity/shared/strategies/index.mjs +1 -1
- package/esm2020/lib/entity/shared/strategies/strategy.mjs +1 -1
- package/esm2020/lib/entity/shared/transaction.mjs +1 -1
- package/esm2020/lib/entity/shared/view.mjs +1 -1
- package/esm2020/lib/entity/shared/watcher.mjs +1 -1
- package/esm2020/lib/flexible/flexible.component.mjs +2 -2
- package/esm2020/lib/flexible/flexible.module.mjs +1 -1
- package/esm2020/lib/flexible/flexible.type.mjs +1 -1
- package/esm2020/lib/flexible/index.mjs +1 -1
- package/esm2020/lib/form/form/form.component.mjs +2 -2
- package/esm2020/lib/form/form/form.module.mjs +1 -1
- package/esm2020/lib/form/form-field/form-field-select.component.mjs +2 -2
- package/esm2020/lib/form/form-field/form-field-text.component.mjs +2 -2
- package/esm2020/lib/form/form-field/form-field-textarea.component.mjs +2 -2
- package/esm2020/lib/form/form-field/form-field.component.mjs +2 -2
- package/esm2020/lib/form/form-field/form-field.module.mjs +1 -1
- package/esm2020/lib/form/form-field/index.mjs +1 -1
- package/esm2020/lib/form/form-group/form-group.component.mjs +2 -2
- package/esm2020/lib/form/form-group/form-group.module.mjs +1 -1
- package/esm2020/lib/form/form.module.mjs +1 -1
- package/esm2020/lib/form/index.mjs +1 -1
- package/esm2020/lib/form/shared/form-field-component.mjs +1 -1
- package/esm2020/lib/form/shared/form-field.service.mjs +1 -1
- package/esm2020/lib/form/shared/form.interfaces.mjs +1 -1
- package/esm2020/lib/form/shared/form.service.mjs +1 -1
- package/esm2020/lib/form/shared/form.utils.mjs +1 -1
- package/esm2020/lib/form/shared/index.mjs +1 -1
- package/esm2020/lib/home-button/home-button.component.mjs +2 -2
- package/esm2020/lib/home-button/home-button.module.mjs +1 -1
- package/esm2020/lib/home-button/index.mjs +1 -1
- package/esm2020/lib/image/image.module.mjs +1 -1
- package/esm2020/lib/image/index.mjs +1 -1
- package/esm2020/lib/image/secure-image.pipe.mjs +1 -1
- package/esm2020/lib/interactive-tour/index.mjs +1 -1
- package/esm2020/lib/interactive-tour/interactive-tour.component.mjs +2 -2
- package/esm2020/lib/interactive-tour/interactive-tour.interface.mjs +1 -1
- package/esm2020/lib/interactive-tour/interactive-tour.loader.mjs +1 -1
- package/esm2020/lib/interactive-tour/interactive-tour.module.mjs +1 -1
- package/esm2020/lib/interactive-tour/interactive-tour.service.mjs +1 -1
- package/esm2020/lib/json-dialog/index.mjs +1 -1
- package/esm2020/lib/json-dialog/json-dialog.component.mjs +2 -2
- package/esm2020/lib/json-dialog/json-dialog.module.mjs +1 -1
- package/esm2020/lib/json-dialog/json-dialog.service.mjs +1 -1
- package/esm2020/lib/keyvalue/index.mjs +1 -1
- package/esm2020/lib/keyvalue/keyvalue.module.mjs +1 -1
- package/esm2020/lib/keyvalue/keyvalue.pipe.mjs +1 -1
- package/esm2020/lib/list/index.mjs +1 -1
- package/esm2020/lib/list/list-item.directive.mjs +1 -1
- package/esm2020/lib/list/list.component.mjs +2 -2
- package/esm2020/lib/list/list.module.mjs +1 -1
- package/esm2020/lib/panel/index.mjs +1 -1
- package/esm2020/lib/panel/panel.component.mjs +2 -2
- package/esm2020/lib/panel/panel.module.mjs +1 -1
- package/esm2020/lib/sidenav/index.mjs +1 -1
- package/esm2020/lib/sidenav/sidenav-shim.directive.mjs +1 -1
- package/esm2020/lib/sidenav/sidenav.module.mjs +1 -1
- package/esm2020/lib/spinner/index.mjs +1 -1
- package/esm2020/lib/spinner/spinner-activity.directive.mjs +1 -1
- package/esm2020/lib/spinner/spinner.component.mjs +2 -2
- package/esm2020/lib/spinner/spinner.module.mjs +1 -1
- package/esm2020/lib/stop-propagation/index.mjs +1 -1
- package/esm2020/lib/stop-propagation/stop-drop-propagation.directive.mjs +1 -1
- package/esm2020/lib/stop-propagation/stop-propagation.directive.mjs +1 -1
- package/esm2020/lib/stop-propagation/stop-propagation.module.mjs +1 -1
- package/esm2020/lib/table/index.mjs +1 -1
- package/esm2020/lib/table/table-action-color.enum.mjs +1 -1
- package/esm2020/lib/table/table-database.mjs +1 -1
- package/esm2020/lib/table/table-datasource.mjs +1 -1
- package/esm2020/lib/table/table-model.interface.mjs +1 -1
- package/esm2020/lib/table/table.component.mjs +2 -2
- package/esm2020/lib/table/table.module.mjs +1 -1
- package/esm2020/lib/tool/index.mjs +1 -1
- package/esm2020/lib/tool/shared/index.mjs +1 -1
- package/esm2020/lib/tool/shared/tool-component.mjs +1 -1
- package/esm2020/lib/tool/shared/tool.interface.mjs +1 -1
- package/esm2020/lib/tool/shared/tool.service.mjs +1 -1
- package/esm2020/lib/tool/shared/toolbox.enums.mjs +1 -1
- package/esm2020/lib/tool/shared/toolbox.mjs +1 -1
- package/esm2020/lib/tool/tool.module.mjs +1 -1
- package/esm2020/lib/tool/toolbox/toolbox.animation.mjs +1 -1
- package/esm2020/lib/tool/toolbox/toolbox.component.mjs +2 -2
- package/esm2020/lib/tool/toolbox/toolbox.module.mjs +1 -1
- package/esm2020/lib/widget/index.mjs +1 -1
- package/esm2020/lib/widget/shared/index.mjs +1 -1
- package/esm2020/lib/widget/shared/widget.interfaces.mjs +1 -1
- package/esm2020/lib/widget/shared/widget.mjs +1 -1
- package/esm2020/lib/widget/shared/widget.service.mjs +1 -1
- package/esm2020/lib/widget/widget-outlet/widget-outlet.component.mjs +2 -2
- package/esm2020/lib/widget/widget-outlet/widget-outlet.module.mjs +1 -1
- package/esm2020/lib/widget/widget.module.mjs +1 -1
- package/esm2020/lib/workspace/index.mjs +1 -1
- package/esm2020/lib/workspace/shared/index.mjs +1 -1
- package/esm2020/lib/workspace/shared/store.mjs +1 -1
- package/esm2020/lib/workspace/shared/workspace.interfaces.mjs +1 -1
- package/esm2020/lib/workspace/shared/workspace.mjs +1 -1
- package/esm2020/lib/workspace/workspace-selector/workspace-selector.component.mjs +2 -2
- package/esm2020/lib/workspace/workspace-selector/workspace-selector.module.mjs +1 -1
- package/esm2020/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.component.mjs +2 -2
- package/esm2020/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.module.mjs +1 -1
- package/esm2020/lib/workspace/workspace.module.mjs +1 -1
- package/esm2020/public_api.mjs +1 -1
- package/fesm2015/igo2-common.mjs +118 -86
- package/fesm2015/igo2-common.mjs.map +1 -1
- package/fesm2020/igo2-common.mjs +111 -86
- package/fesm2020/igo2-common.mjs.map +1 -1
- package/lib/entity/entity-table/entity-table.component.d.ts +3 -3
- package/package.json +7 -7
- package/style/common.theming.scss +12 -12
- package/style/partial/action.scss +18 -18
- package/style/partial/common.variables.scss +8 -8
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, Optional, Self } from '@angular/core';
|
|
2
|
-
import { BehaviorSubject } from 'rxjs';
|
|
2
|
+
import { BehaviorSubject, Observable } from 'rxjs';
|
|
3
3
|
import { EntityTableColumnRenderer, EntityTableSelectionState, EntityTableScrollBehavior } from '../shared';
|
|
4
4
|
import { MatTableDataSource } from '@angular/material/table';
|
|
5
5
|
import { MatFormFieldControl } from '@angular/material/form-field';
|
|
@@ -335,6 +335,7 @@ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_co
|
|
|
335
335
|
const ctx_r73 = i0.ɵɵnextContext();
|
|
336
336
|
i0.ɵɵpropertyInterpolate("required", ctx_r73.getValidationAttributeValue(column_r16, "mandatory"));
|
|
337
337
|
i0.ɵɵpropertyInterpolate("value", ctx_r73.getValue(record_r63, column_r16));
|
|
338
|
+
i0.ɵɵpropertyInterpolate("readonly", ctx_r73.getValidationAttributeValue(column_r16, "readonly"));
|
|
338
339
|
i0.ɵɵproperty("formControlName", column_r16.name)("matAutocomplete", _r74);
|
|
339
340
|
} }
|
|
340
341
|
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_option_10_Template(rf, ctx) { if (rf & 1) {
|
|
@@ -356,9 +357,9 @@ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_co
|
|
|
356
357
|
i0.ɵɵtemplate(4, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_4_Template, 1, 4, "input", 36);
|
|
357
358
|
i0.ɵɵtemplate(5, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_checkbox_5_Template, 1, 2, "mat-checkbox", 37);
|
|
358
359
|
i0.ɵɵtemplate(6, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_select_6_Template, 2, 5, "mat-select", 38);
|
|
359
|
-
i0.ɵɵtemplate(7, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_7_Template, 1,
|
|
360
|
+
i0.ɵɵtemplate(7, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_7_Template, 1, 5, "input", 39);
|
|
360
361
|
i0.ɵɵelementStart(8, "mat-autocomplete", 40, 41);
|
|
361
|
-
i0.ɵɵlistener("optionSelected", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_Template_mat_autocomplete_optionSelected_8_listener($event) { i0.ɵɵrestoreView(_r122); const record_r63 = i0.ɵɵnextContext().$implicit; const column_r16 = i0.ɵɵnextContext(3).$implicit; const ctx_r120 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r120.onAutocompleteValueChange(column_r16
|
|
362
|
+
i0.ɵɵlistener("optionSelected", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_Template_mat_autocomplete_optionSelected_8_listener($event) { i0.ɵɵrestoreView(_r122); const record_r63 = i0.ɵɵnextContext().$implicit; const column_r16 = i0.ɵɵnextContext(3).$implicit; const ctx_r120 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r120.onAutocompleteValueChange(column_r16, record_r63, $event)); });
|
|
362
363
|
i0.ɵɵtemplate(10, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_option_10_Template, 2, 2, "mat-option", 42);
|
|
363
364
|
i0.ɵɵpipe(11, "async");
|
|
364
365
|
i0.ɵɵelementEnd()();
|
|
@@ -382,7 +383,7 @@ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_co
|
|
|
382
383
|
i0.ɵɵadvance(1);
|
|
383
384
|
i0.ɵɵproperty("ngIf", column_r16.type === "autocomplete");
|
|
384
385
|
i0.ɵɵadvance(3);
|
|
385
|
-
i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(11, 10, ctx_r64.filteredOptions));
|
|
386
|
+
i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(11, 10, ctx_r64.filteredOptions[column_r16.name]));
|
|
386
387
|
} }
|
|
387
388
|
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_td_0_Template(rf, ctx) { if (rf & 1) {
|
|
388
389
|
i0.ɵɵelement(0, "td", 29);
|
|
@@ -456,85 +457,106 @@ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_Templ
|
|
|
456
457
|
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_Template, 4, 2, "ng-container", 19);
|
|
457
458
|
i0.ɵɵelementContainerEnd();
|
|
458
459
|
} }
|
|
460
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_mat_icon_1_Template(rf, ctx) { if (rf & 1) {
|
|
461
|
+
const _r147 = i0.ɵɵgetCurrentView();
|
|
462
|
+
i0.ɵɵelementStart(0, "mat-icon", 60);
|
|
463
|
+
i0.ɵɵlistener("click", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_mat_icon_1_Template_mat_icon_click_0_listener($event) { i0.ɵɵrestoreView(_r147); const column_r16 = i0.ɵɵnextContext(4).$implicit; return i0.ɵɵresetView(column_r16.onClick($event)); });
|
|
464
|
+
i0.ɵɵelementEnd();
|
|
465
|
+
} if (rf & 2) {
|
|
466
|
+
const record_r142 = i0.ɵɵnextContext().$implicit;
|
|
467
|
+
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
468
|
+
const ctx_r143 = i0.ɵɵnextContext();
|
|
469
|
+
i0.ɵɵpropertyInterpolate("svgIcon", ctx_r143.getValue(record_r142, column_r16) || column_r16.icon);
|
|
470
|
+
} }
|
|
471
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_mat_icon_2_Template(rf, ctx) { if (rf & 1) {
|
|
472
|
+
i0.ɵɵelement(0, "mat-icon", 61);
|
|
473
|
+
} if (rf & 2) {
|
|
474
|
+
const record_r142 = i0.ɵɵnextContext().$implicit;
|
|
475
|
+
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
476
|
+
const ctx_r144 = i0.ɵɵnextContext();
|
|
477
|
+
i0.ɵɵpropertyInterpolate("svgIcon", ctx_r144.getValue(record_r142, column_r16) || column_r16.icon);
|
|
478
|
+
} }
|
|
459
479
|
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_Template(rf, ctx) { if (rf & 1) {
|
|
460
|
-
|
|
461
|
-
i0.ɵɵ
|
|
462
|
-
i0.ɵɵ
|
|
463
|
-
i0.ɵɵelementEnd()
|
|
480
|
+
i0.ɵɵelementStart(0, "td", 22);
|
|
481
|
+
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_mat_icon_1_Template, 1, 1, "mat-icon", 58);
|
|
482
|
+
i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_mat_icon_2_Template, 1, 1, "mat-icon", 59);
|
|
483
|
+
i0.ɵɵelementEnd();
|
|
464
484
|
} if (rf & 2) {
|
|
465
485
|
const record_r142 = ctx.$implicit;
|
|
466
486
|
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
467
487
|
const ctx_r141 = i0.ɵɵnextContext();
|
|
468
488
|
i0.ɵɵproperty("ngClass", ctx_r141.getCellClass(record_r142, column_r16));
|
|
469
489
|
i0.ɵɵadvance(1);
|
|
470
|
-
i0.ɵɵ
|
|
490
|
+
i0.ɵɵproperty("ngIf", column_r16.onClick);
|
|
491
|
+
i0.ɵɵadvance(1);
|
|
492
|
+
i0.ɵɵproperty("ngIf", !column_r16.onClick);
|
|
471
493
|
} }
|
|
472
494
|
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_Template(rf, ctx) { if (rf & 1) {
|
|
473
495
|
i0.ɵɵelementContainerStart(0);
|
|
474
|
-
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_Template,
|
|
496
|
+
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_Template, 3, 3, "td", 57);
|
|
475
497
|
i0.ɵɵelementContainerEnd();
|
|
476
498
|
} }
|
|
477
499
|
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_1_Template(rf, ctx) { if (rf & 1) {
|
|
478
|
-
const
|
|
479
|
-
i0.ɵɵelementStart(0, "button",
|
|
480
|
-
i0.ɵɵlistener("mousedown", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_1_Template_button_mousedown_0_listener() { i0.ɵɵrestoreView(
|
|
481
|
-
i0.ɵɵelement(1, "mat-icon",
|
|
500
|
+
const _r162 = i0.ɵɵgetCurrentView();
|
|
501
|
+
i0.ɵɵelementStart(0, "button", 65);
|
|
502
|
+
i0.ɵɵlistener("mousedown", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_1_Template_button_mousedown_0_listener() { i0.ɵɵrestoreView(_r162); const button_r156 = i0.ɵɵnextContext(2).$implicit; const record_r154 = i0.ɵɵnextContext().$implicit; const ctx_r160 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r160.onButtonClick(button_r156.click, record_r154)); });
|
|
503
|
+
i0.ɵɵelement(1, "mat-icon", 61);
|
|
482
504
|
i0.ɵɵelementEnd();
|
|
483
505
|
} if (rf & 2) {
|
|
484
|
-
const
|
|
485
|
-
i0.ɵɵproperty("color",
|
|
506
|
+
const button_r156 = i0.ɵɵnextContext(2).$implicit;
|
|
507
|
+
i0.ɵɵproperty("color", button_r156.color)("disabled", button_r156.disabled);
|
|
486
508
|
i0.ɵɵadvance(1);
|
|
487
|
-
i0.ɵɵpropertyInterpolate("svgIcon",
|
|
509
|
+
i0.ɵɵpropertyInterpolate("svgIcon", button_r156.icon);
|
|
488
510
|
} }
|
|
489
511
|
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_2_Template(rf, ctx) { if (rf & 1) {
|
|
490
|
-
const
|
|
491
|
-
i0.ɵɵelementStart(0, "button",
|
|
492
|
-
i0.ɵɵlistener("mousedown", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_2_Template_button_mousedown_0_listener() { i0.ɵɵrestoreView(
|
|
493
|
-
i0.ɵɵelement(1, "mat-icon",
|
|
512
|
+
const _r167 = i0.ɵɵgetCurrentView();
|
|
513
|
+
i0.ɵɵelementStart(0, "button", 66);
|
|
514
|
+
i0.ɵɵlistener("mousedown", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_2_Template_button_mousedown_0_listener() { i0.ɵɵrestoreView(_r167); const button_r156 = i0.ɵɵnextContext(2).$implicit; const record_r154 = i0.ɵɵnextContext().$implicit; const ctx_r165 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r165.onButtonClick(button_r156.click, record_r154)); });
|
|
515
|
+
i0.ɵɵelement(1, "mat-icon", 61);
|
|
494
516
|
i0.ɵɵelementEnd();
|
|
495
517
|
} if (rf & 2) {
|
|
496
|
-
const
|
|
497
|
-
i0.ɵɵproperty("color",
|
|
518
|
+
const button_r156 = i0.ɵɵnextContext(2).$implicit;
|
|
519
|
+
i0.ɵɵproperty("color", button_r156.color)("disabled", button_r156.disabled);
|
|
498
520
|
i0.ɵɵadvance(1);
|
|
499
|
-
i0.ɵɵpropertyInterpolate("svgIcon",
|
|
521
|
+
i0.ɵɵpropertyInterpolate("svgIcon", button_r156.icon);
|
|
500
522
|
} }
|
|
501
523
|
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
502
524
|
i0.ɵɵelementContainerStart(0);
|
|
503
|
-
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_1_Template, 2, 3, "button",
|
|
504
|
-
i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_2_Template, 2, 3, "button",
|
|
525
|
+
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_1_Template, 2, 3, "button", 63);
|
|
526
|
+
i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_2_Template, 2, 3, "button", 64);
|
|
505
527
|
i0.ɵɵelementContainerEnd();
|
|
506
528
|
} if (rf & 2) {
|
|
507
|
-
const
|
|
529
|
+
const button_r156 = i0.ɵɵnextContext().$implicit;
|
|
508
530
|
i0.ɵɵadvance(1);
|
|
509
|
-
i0.ɵɵproperty("ngIf",
|
|
531
|
+
i0.ɵɵproperty("ngIf", button_r156.style === "mat-icon-button");
|
|
510
532
|
i0.ɵɵadvance(1);
|
|
511
|
-
i0.ɵɵproperty("ngIf",
|
|
533
|
+
i0.ɵɵproperty("ngIf", button_r156.style !== "mat-icon-button");
|
|
512
534
|
} }
|
|
513
535
|
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_Template(rf, ctx) { if (rf & 1) {
|
|
514
536
|
i0.ɵɵelementStart(0, "span");
|
|
515
537
|
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_Template, 3, 2, "ng-container", 10);
|
|
516
538
|
i0.ɵɵelementEnd();
|
|
517
539
|
} if (rf & 2) {
|
|
518
|
-
const
|
|
519
|
-
const
|
|
520
|
-
const
|
|
540
|
+
const button_r156 = ctx.$implicit;
|
|
541
|
+
const record_r154 = i0.ɵɵnextContext().$implicit;
|
|
542
|
+
const ctx_r155 = i0.ɵɵnextContext(4);
|
|
521
543
|
i0.ɵɵadvance(1);
|
|
522
|
-
i0.ɵɵproperty("ngIf",
|
|
544
|
+
i0.ɵɵproperty("ngIf", ctx_r155.isEdition(record_r154) === button_r156.editMode || button_r156.editMode === undefined);
|
|
523
545
|
} }
|
|
524
546
|
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
525
547
|
i0.ɵɵelementContainerStart(0);
|
|
526
548
|
i0.ɵɵelementStart(1, "td", 22);
|
|
527
|
-
i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_Template, 2, 1, "span",
|
|
549
|
+
i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_Template, 2, 1, "span", 62);
|
|
528
550
|
i0.ɵɵelementEnd();
|
|
529
551
|
i0.ɵɵelementContainerEnd();
|
|
530
552
|
} if (rf & 2) {
|
|
531
|
-
const
|
|
553
|
+
const record_r154 = ctx.$implicit;
|
|
532
554
|
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
533
|
-
const
|
|
555
|
+
const ctx_r153 = i0.ɵɵnextContext();
|
|
534
556
|
i0.ɵɵadvance(1);
|
|
535
|
-
i0.ɵɵproperty("ngClass",
|
|
557
|
+
i0.ɵɵproperty("ngClass", ctx_r153.getCellClass(record_r154, column_r16));
|
|
536
558
|
i0.ɵɵadvance(1);
|
|
537
|
-
i0.ɵɵproperty("ngForOf",
|
|
559
|
+
i0.ɵɵproperty("ngForOf", ctx_r153.getValue(record_r154, column_r16));
|
|
538
560
|
} }
|
|
539
561
|
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_Template(rf, ctx) { if (rf & 1) {
|
|
540
562
|
i0.ɵɵelementContainerStart(0);
|
|
@@ -581,25 +603,25 @@ function EntityTableComponent_ng_container_5_Template(rf, ctx) { if (rf & 1) {
|
|
|
581
603
|
i0.ɵɵproperty("ngIf", ctx_r2.getColumnRenderer(column_r16));
|
|
582
604
|
} }
|
|
583
605
|
function EntityTableComponent_tr_6_Template(rf, ctx) { if (rf & 1) {
|
|
584
|
-
i0.ɵɵelement(0, "tr",
|
|
606
|
+
i0.ɵɵelement(0, "tr", 67);
|
|
585
607
|
} if (rf & 2) {
|
|
586
608
|
const ctx_r3 = i0.ɵɵnextContext();
|
|
587
609
|
i0.ɵɵproperty("ngClass", ctx_r3.getHeaderClass());
|
|
588
610
|
} }
|
|
589
611
|
function EntityTableComponent_tr_7_Template(rf, ctx) { if (rf & 1) {
|
|
590
|
-
const
|
|
591
|
-
i0.ɵɵelementStart(0, "tr",
|
|
592
|
-
i0.ɵɵlistener("select", function EntityTableComponent_tr_7_Template_tr_select_0_listener() { const restoredCtx = i0.ɵɵrestoreView(
|
|
612
|
+
const _r175 = i0.ɵɵgetCurrentView();
|
|
613
|
+
i0.ɵɵelementStart(0, "tr", 68);
|
|
614
|
+
i0.ɵɵlistener("select", function EntityTableComponent_tr_7_Template_tr_select_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r175); const record_r173 = restoredCtx.$implicit; const ctx_r174 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r174.onRowSelect(record_r173)); })("click", function EntityTableComponent_tr_7_Template_tr_click_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r175); const record_r173 = restoredCtx.$implicit; const ctx_r176 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r176.onRowClick(record_r173)); });
|
|
593
615
|
i0.ɵɵelementEnd();
|
|
594
616
|
} if (rf & 2) {
|
|
595
|
-
const
|
|
617
|
+
const record_r173 = ctx.$implicit;
|
|
596
618
|
const ctx_r4 = i0.ɵɵnextContext();
|
|
597
|
-
i0.ɵɵproperty("scrollBehavior", ctx_r4.scrollBehavior)("ngClass", ctx_r4.getRowClass(
|
|
619
|
+
i0.ɵɵproperty("scrollBehavior", ctx_r4.scrollBehavior)("ngClass", ctx_r4.getRowClass(record_r173))("selection", ctx_r4.selection)("selected", ctx_r4.rowIsSelected(record_r173));
|
|
598
620
|
} }
|
|
599
621
|
function EntityTableComponent_igo_entity_table_paginator_8_Template(rf, ctx) { if (rf & 1) {
|
|
600
|
-
const
|
|
601
|
-
i0.ɵɵelementStart(0, "igo-entity-table-paginator",
|
|
602
|
-
i0.ɵɵlistener("paginatorChange", function EntityTableComponent_igo_entity_table_paginator_8_Template_igo_entity_table_paginator_paginatorChange_0_listener($event) { i0.ɵɵrestoreView(
|
|
622
|
+
const _r178 = i0.ɵɵgetCurrentView();
|
|
623
|
+
i0.ɵɵelementStart(0, "igo-entity-table-paginator", 69);
|
|
624
|
+
i0.ɵɵlistener("paginatorChange", function EntityTableComponent_igo_entity_table_paginator_8_Template_igo_entity_table_paginator_paginatorChange_0_listener($event) { i0.ɵɵrestoreView(_r178); const ctx_r177 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r177.paginatorChange($event)); });
|
|
603
625
|
i0.ɵɵelementEnd();
|
|
604
626
|
} if (rf & 2) {
|
|
605
627
|
const ctx_r5 = i0.ɵɵnextContext();
|
|
@@ -618,6 +640,7 @@ export class EntityTableComponent {
|
|
|
618
640
|
this.dateAdapter = dateAdapter;
|
|
619
641
|
this.entitySortChange$ = new BehaviorSubject(false);
|
|
620
642
|
this.formGroup = new UntypedFormGroup({});
|
|
643
|
+
this.filteredOptions = {};
|
|
621
644
|
/**
|
|
622
645
|
* Reference to the column renderer types
|
|
623
646
|
* @internal
|
|
@@ -749,8 +772,8 @@ export class EntityTableComponent {
|
|
|
749
772
|
* Process autocomplete value change (edition)
|
|
750
773
|
*/
|
|
751
774
|
onAutocompleteValueChange(column, record, event) {
|
|
752
|
-
this.formGroup.controls[column].setValue(event.option.viewValue);
|
|
753
|
-
const key = this.getColumnKeyWithoutPropertiesTag(column);
|
|
775
|
+
this.formGroup.controls[column.name].setValue(event.option.viewValue);
|
|
776
|
+
const key = this.getColumnKeyWithoutPropertiesTag(column.name);
|
|
754
777
|
record.entity.properties[key] = event.option.value;
|
|
755
778
|
}
|
|
756
779
|
/**
|
|
@@ -793,15 +816,17 @@ export class EntityTableComponent {
|
|
|
793
816
|
}
|
|
794
817
|
else if (column.type === 'autocomplete') {
|
|
795
818
|
this.formGroup.setControl(column.name, this.formBuilder.control(item[key]));
|
|
796
|
-
this.filteredOptions
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
819
|
+
this.filteredOptions[column.name] = new Observable();
|
|
820
|
+
this.filteredOptions[column.name] =
|
|
821
|
+
this.formGroup.controls[column.name].valueChanges.pipe(map(value => {
|
|
822
|
+
if (value?.length) {
|
|
823
|
+
return column.domainValues?.filter((option) => {
|
|
824
|
+
const filterNormalized = value ? value.toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g, '') : '';
|
|
825
|
+
const featureNameNormalized = option.value.toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g, '');
|
|
826
|
+
return featureNameNormalized.includes(filterNormalized);
|
|
827
|
+
});
|
|
828
|
+
}
|
|
829
|
+
}));
|
|
805
830
|
let formControlValue = item[key];
|
|
806
831
|
column.domainValues.forEach(option => {
|
|
807
832
|
if (typeof formControlValue === 'string' && /^\d+$/.test(formControlValue)) {
|
|
@@ -1279,7 +1304,7 @@ export class EntityTableComponent {
|
|
|
1279
1304
|
}
|
|
1280
1305
|
}
|
|
1281
1306
|
EntityTableComponent.ɵfac = function EntityTableComponent_Factory(t) { return new (t || EntityTableComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.UntypedFormBuilder), i0.ɵɵdirectiveInject(i2.FocusMonitor), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.NgControl, 10), i0.ɵɵdirectiveInject(i1.NgForm, 8), i0.ɵɵdirectiveInject(i1.FormControlName, 8), i0.ɵɵdirectiveInject(i3.ErrorStateMatcher), i0.ɵɵdirectiveInject(i3.DateAdapter)); };
|
|
1282
|
-
EntityTableComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: EntityTableComponent, selectors: [["igo-entity-table"]], inputs: { store: "store", paginator: "paginator", template: "template", scrollBehavior: "scrollBehavior", sortNullsFirst: "sortNullsFirst", withPaginator: "withPaginator", paginatorOptions: "paginatorOptions" }, outputs: { entityClick: "entityClick", entitySelectChange: "entitySelectChange", entitySortChange: "entitySortChange" }, features: [i0.ɵɵProvidersFeature([{ provide: MatFormFieldControl, useExisting: EntityTableComponent }]), i0.ɵɵNgOnChangesFeature], decls: 9, vars: 8, consts: [[1, "table-container"], ["mat-table", "", "matSort", "", 3, "ngClass", "dataSource", "trackBy", "matSortChange"], ["matColumnDef", "selectionCheckbox", 1, "mat-cell-checkbox"], ["mat-header-cell", "", 4, "matHeaderCellDef"], ["mat-cell", "", 4, "matCellDef"], [3, "matColumnDef", 4, "ngFor", "ngForOf"], ["mat-header-row", "", 3, "ngClass", 4, "matHeaderRowDef", "matHeaderRowDefSticky"], ["mat-row", "", "igoEntityTableRow", "", 3, "scrollBehavior", "ngClass", "selection", "selected", "select", "click", 4, "matRowDef", "matRowDefColumns"], [3, "store", "paginatorOptions", "entitySortChange$", "paginatorChange", 4, "ngIf"], ["mat-header-cell", ""], [4, "ngIf"], [3, "checked", "indeterminate", "change"], ["mat-cell", ""], [3, "checked", "mousedown", "click", "change"], [3, "matColumnDef"], ["mat-header-cell", "", "mat-sort-header", "", 3, "matTooltip", 4, "matHeaderCellDef"], ["mat-header-cell", "", "mat-sort-header", "", 3, "matTooltip"], ["mat-header-cell", "", 3, "matTooltip", 4, "matHeaderCellDef"], ["mat-header-cell", "", 3, "matTooltip"], [4, "matCellDef"], ["mat-cell", "", "class", "mat-cell-text", 3, "ngClass", 4, "ngIf", "ngIfElse"], ["isAnUrlDefault", ""], ["mat-cell", "", 1, "mat-cell-text", 3, "ngClass"], ["target", "_blank", "rel", "noopener noreferrer", 3, "href", "click"], ["width", "50", "heigth", "auto", 3, "src", 4, "ngIf", "ngIfElse"], ["notImg", ""], ["width", "50", "heigth", "auto", 3, "src"], ["mat-cell", "", "class", "mat-cell-text", 3, "ngClass", "innerHTML", 4, "ngIf", "ngIfElse"], ["isAnUrlHTML", ""], ["mat-cell", "", 1, "mat-cell-text", 3, "ngClass", "innerHTML"], ["mat-cell", "", "class", "mat-cell-text edition", 3, "formGroup", "ngClass", 4, "ngIf", "ngIfElse"], ["isUnsanitizedHTML", ""], ["mat-cell", "", 1, "mat-cell-text", "edition", 3, "formGroup", "ngClass"], ["class", "date-picker", 4, "ngIf"], ["matInput", "", "type", "time", "step", "900", 3, "formControlName", "focus", "keypress", "blur", 4, "ngIf"], ["matInput", "", "type", "number", "class", "class_number_edition", 3, "formControlName", "step", "value", "readonly", "required", "min", "max", "input", 4, "ngIf"], ["matInput", "", "type", "text", 3, "formControlName", "value", "readonly", "required", "input", 4, "ngIf"], [3, "formControlName", "checked", "change", 4, "ngIf"], [3, "required", "formControlName", "multiple", "value", "selectionChange", 4, "ngIf"], ["matInput", "", "type", "text", 3, "formControlName", "matAutocomplete", "required", "value", 4, "ngIf"], ["panelWidth", "430px", 3, "optionSelected"], ["auto", "matAutocomplete"], [3, "value", 4, "ngFor", "ngForOf"], [1, "date-picker"], ["matSuffix", "", 3, "for"], ["matInput", "", 3, "matDatepicker", "formControlName", "value", "dateChange"], ["picker", ""], ["matInput", "", "type", "time", "step", "900", 3, "formControlName", "focus", "keypress", "blur"], ["matInput", "", "type", "number", 1, "class_number_edition", 3, "formControlName", "step", "value", "readonly", "required", "min", "max", "input"], ["matInput", "", "type", "text", 3, "formControlName", "value", "readonly", "required", "input"], [3, "formControlName", "checked", "change"], [3, "required", "formControlName", "multiple", "value", "selectionChange"], [3, "value", "disabled", 4, "ngFor", "ngForOf"], [3, "value", "disabled"], ["matInput", "", "type", "text", 3, "formControlName", "matAutocomplete", "required", "value"], [3, "value"], ["isAnUrlUnsanitizedHTML", ""], ["mat-cell", "", "class", "mat-cell-text", 3, "ngClass", 4, "matCellDef"], [3, "svgIcon", "click"], [4, "ngFor", "ngForOf"], ["igoStopPropagation", "", "mat-icon-button", "", 3, "color", "disabled", "mousedown", 4, "ngIf"], ["igoStopPropagation", "", "mat-mini-fab", "", 3, "color", "disabled", "mousedown", 4, "ngIf"], ["igoStopPropagation", "", "mat-icon-button", "", 3, "color", "disabled", "mousedown"], [
|
|
1307
|
+
EntityTableComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: EntityTableComponent, selectors: [["igo-entity-table"]], inputs: { store: "store", paginator: "paginator", template: "template", scrollBehavior: "scrollBehavior", sortNullsFirst: "sortNullsFirst", withPaginator: "withPaginator", paginatorOptions: "paginatorOptions" }, outputs: { entityClick: "entityClick", entitySelectChange: "entitySelectChange", entitySortChange: "entitySortChange" }, features: [i0.ɵɵProvidersFeature([{ provide: MatFormFieldControl, useExisting: EntityTableComponent }]), i0.ɵɵNgOnChangesFeature], decls: 9, vars: 8, consts: [[1, "table-container"], ["mat-table", "", "matSort", "", 3, "ngClass", "dataSource", "trackBy", "matSortChange"], ["matColumnDef", "selectionCheckbox", 1, "mat-cell-checkbox"], ["mat-header-cell", "", 4, "matHeaderCellDef"], ["mat-cell", "", 4, "matCellDef"], [3, "matColumnDef", 4, "ngFor", "ngForOf"], ["mat-header-row", "", 3, "ngClass", 4, "matHeaderRowDef", "matHeaderRowDefSticky"], ["mat-row", "", "igoEntityTableRow", "", 3, "scrollBehavior", "ngClass", "selection", "selected", "select", "click", 4, "matRowDef", "matRowDefColumns"], [3, "store", "paginatorOptions", "entitySortChange$", "paginatorChange", 4, "ngIf"], ["mat-header-cell", ""], [4, "ngIf"], [3, "checked", "indeterminate", "change"], ["mat-cell", ""], [3, "checked", "mousedown", "click", "change"], [3, "matColumnDef"], ["mat-header-cell", "", "mat-sort-header", "", 3, "matTooltip", 4, "matHeaderCellDef"], ["mat-header-cell", "", "mat-sort-header", "", 3, "matTooltip"], ["mat-header-cell", "", 3, "matTooltip", 4, "matHeaderCellDef"], ["mat-header-cell", "", 3, "matTooltip"], [4, "matCellDef"], ["mat-cell", "", "class", "mat-cell-text", 3, "ngClass", 4, "ngIf", "ngIfElse"], ["isAnUrlDefault", ""], ["mat-cell", "", 1, "mat-cell-text", 3, "ngClass"], ["target", "_blank", "rel", "noopener noreferrer", 3, "href", "click"], ["width", "50", "heigth", "auto", 3, "src", 4, "ngIf", "ngIfElse"], ["notImg", ""], ["width", "50", "heigth", "auto", 3, "src"], ["mat-cell", "", "class", "mat-cell-text", 3, "ngClass", "innerHTML", 4, "ngIf", "ngIfElse"], ["isAnUrlHTML", ""], ["mat-cell", "", 1, "mat-cell-text", 3, "ngClass", "innerHTML"], ["mat-cell", "", "class", "mat-cell-text edition", 3, "formGroup", "ngClass", 4, "ngIf", "ngIfElse"], ["isUnsanitizedHTML", ""], ["mat-cell", "", 1, "mat-cell-text", "edition", 3, "formGroup", "ngClass"], ["class", "date-picker", 4, "ngIf"], ["matInput", "", "type", "time", "step", "900", 3, "formControlName", "focus", "keypress", "blur", 4, "ngIf"], ["matInput", "", "type", "number", "class", "class_number_edition", 3, "formControlName", "step", "value", "readonly", "required", "min", "max", "input", 4, "ngIf"], ["matInput", "", "type", "text", 3, "formControlName", "value", "readonly", "required", "input", 4, "ngIf"], [3, "formControlName", "checked", "change", 4, "ngIf"], [3, "required", "formControlName", "multiple", "value", "selectionChange", 4, "ngIf"], ["matInput", "", "type", "text", 3, "formControlName", "matAutocomplete", "required", "value", "readonly", 4, "ngIf"], ["panelWidth", "430px", 3, "optionSelected"], ["auto", "matAutocomplete"], [3, "value", 4, "ngFor", "ngForOf"], [1, "date-picker"], ["matSuffix", "", 3, "for"], ["matInput", "", 3, "matDatepicker", "formControlName", "value", "dateChange"], ["picker", ""], ["matInput", "", "type", "time", "step", "900", 3, "formControlName", "focus", "keypress", "blur"], ["matInput", "", "type", "number", 1, "class_number_edition", 3, "formControlName", "step", "value", "readonly", "required", "min", "max", "input"], ["matInput", "", "type", "text", 3, "formControlName", "value", "readonly", "required", "input"], [3, "formControlName", "checked", "change"], [3, "required", "formControlName", "multiple", "value", "selectionChange"], [3, "value", "disabled", 4, "ngFor", "ngForOf"], [3, "value", "disabled"], ["matInput", "", "type", "text", 3, "formControlName", "matAutocomplete", "required", "value", "readonly"], [3, "value"], ["isAnUrlUnsanitizedHTML", ""], ["mat-cell", "", "class", "mat-cell-text", 3, "ngClass", 4, "matCellDef"], [3, "svgIcon", "click", 4, "ngIf"], [3, "svgIcon", 4, "ngIf"], [3, "svgIcon", "click"], [3, "svgIcon"], [4, "ngFor", "ngForOf"], ["igoStopPropagation", "", "mat-icon-button", "", 3, "color", "disabled", "mousedown", 4, "ngIf"], ["igoStopPropagation", "", "mat-mini-fab", "", 3, "color", "disabled", "mousedown", 4, "ngIf"], ["igoStopPropagation", "", "mat-icon-button", "", 3, "color", "disabled", "mousedown"], ["igoStopPropagation", "", "mat-mini-fab", "", 3, "color", "disabled", "mousedown"], ["mat-header-row", "", 3, "ngClass"], ["mat-row", "", "igoEntityTableRow", "", 3, "scrollBehavior", "ngClass", "selection", "selected", "select", "click"], [3, "store", "paginatorOptions", "entitySortChange$", "paginatorChange"]], template: function EntityTableComponent_Template(rf, ctx) { if (rf & 1) {
|
|
1283
1308
|
i0.ɵɵelementStart(0, "div", 0)(1, "table", 1);
|
|
1284
1309
|
i0.ɵɵlistener("matSortChange", function EntityTableComponent_Template_table_matSortChange_1_listener($event) { return ctx.onSort($event); });
|
|
1285
1310
|
i0.ɵɵelementContainerStart(2, 2);
|
|
@@ -1306,7 +1331,7 @@ EntityTableComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: Entity
|
|
|
1306
1331
|
} }, dependencies: [i4.NgClass, i4.NgForOf, i4.NgIf, i5.MatTable, i5.MatHeaderCellDef, i5.MatHeaderRowDef, i5.MatColumnDef, i5.MatCellDef, i5.MatRowDef, i5.MatHeaderCell, i5.MatCell, i5.MatHeaderRow, i5.MatRow, i6.MatAutocomplete, i6.MatAutocompleteTrigger, i3.MatOption, i7.MatSort, i7.MatSortHeader, i8.MatIcon, i9.MatButton, i10.MatCheckbox, i11.MatSuffix, i12.MatSelect, i13.StopPropagationDirective, i14.EntityTablePaginatorComponent, i1.DefaultValueAccessor, i1.NumberValueAccessor, i1.NgControlStatus, i1.NgControlStatusGroup, i1.RequiredValidator, i1.MinValidator, i1.MaxValidator, i1.FormGroupDirective, i1.FormControlName, i15.MatInput, i16.MatDatepicker, i16.MatDatepickerInput, i16.MatDatepickerToggle, i17.MatTooltip, i18.EntityTableRowDirective, i4.AsyncPipe, i19.SanitizeHtmlPipe, i20.SecureImagePipe, i21.TranslatePipe], styles: ["[_nghost-%COMP%]{width:100%;height:100%;display:block}.table-compact[_nghost-%COMP%] tr.mat-header-row[_ngcontent-%COMP%], .table-compact[_nghost-%COMP%] .mat-checkbox .mat-checkbox-ripple{height:36px}.table-compact[_nghost-%COMP%] tr.mat-row[_ngcontent-%COMP%], .table-compact[_nghost-%COMP%] .mat-checkbox .mat-checkbox-ripple{height:28px}.table-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%;overflow:auto;flex:1 1 auto}.mat-cell-text[_ngcontent-%COMP%]{overflow:hidden;word-wrap:break-word}th.mat-header-cell[_ngcontent-%COMP%], td.mat-cell[_ngcontent-%COMP%], td.mat-footer-cell[_ngcontent-%COMP%]{padding:0 3px}entity-table[_ngcontent-%COMP%] table.igo-entity-table-with-selection[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover{-o-box-shadow:2px 0px 2px 0px #dddddd;box-shadow:2px 0 2px #ddd;cursor:pointer}table[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{margin:7px}.class_hidden[_ngcontent-%COMP%]{visibility:hidden}.class_display_none[_ngcontent-%COMP%]{display:none}.class_boolean[_ngcontent-%COMP%], .class_icon[_ngcontent-%COMP%], .class_number[_ngcontent-%COMP%]{text-align:center;padding-right:35px!important}.class_sting[_ngcontent-%COMP%], .class_text[_ngcontent-%COMP%], .class_number_edition[_ngcontent-%COMP%]{text-align:left}td.edition[_ngcontent-%COMP%]{background:rgba(166,166,166,.2)}input[_ngcontent-%COMP%]{border-bottom:1px solid darkgrey}"], changeDetection: 0 });
|
|
1307
1332
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EntityTableComponent, [{
|
|
1308
1333
|
type: Component,
|
|
1309
|
-
args: [{ selector: 'igo-entity-table', changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: MatFormFieldControl, useExisting: EntityTableComponent }], template: "<div class=\"table-container\">\r\n <table mat-table matSort [ngClass]=\"getTableClass()\" [dataSource]=\"dataSource\" [trackBy]=\"getTrackByFunction()\" (matSortChange)=\"onSort($event)\">\r\n <ng-container matColumnDef=\"selectionCheckbox\" class=\"mat-cell-checkbox\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <ng-container *ngIf=\"selectMany\">\r\n <ng-container *ngIf=\"selectionState$ | async as selectionState\">\r\n <mat-checkbox (change)=\"onToggleRows($event.checked)\" [checked]=\"selectionState === entityTableSelectionState.All\"\r\n [indeterminate]=\"selectionState === entityTableSelectionState.Some\">\r\n </mat-checkbox>\r\n </ng-container>\r\n </ng-container>\r\n </th>\r\n <td mat-cell *matCellDef=\"let record\">\r\n <mat-checkbox (mousedown)=\"$event.shiftKey ? $event.preventDefault() : null\" (click)=\"$event.shiftKey ?\r\n onShiftToggleRow(!rowIsSelected(record), record, $event) : $event.stopPropagation()\" (change)=\"onToggleRow($event.checked,record)\"\r\n [checked]=\"rowIsSelected(record)\">\r\n </mat-checkbox>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container [matColumnDef]=\"column.name\" *ngFor=\"let column of template.columns\">\r\n <ng-container *ngIf=\"columnIsSortable(column)\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header [matTooltip]=\"column.tooltip ? column.tooltip : undefined\">\r\n {{column.title}}\r\n </th>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!columnIsSortable(column)\">\r\n <th mat-header-cell *matHeaderCellDef [matTooltip]=\"column.tooltip ? column.tooltip : undefined\">\r\n {{column.title}}\r\n </th>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"getColumnRenderer(column) as columnRenderer\">\r\n <ng-container *ngIf=\"columnRenderer === entityTableColumnRenderer.Default\">\r\n <ng-container *matCellDef=\"let record\">\r\n <td mat-cell class=\"mat-cell-text\" *ngIf=\"!isUrl(getValue(record, column));else isAnUrlDefault\" [ngClass]=\"getCellClass(record, column)\">\r\n {{getValue(record, column)}}\r\n </td>\r\n <ng-template #isAnUrlDefault>\r\n <td mat-cell class=\"mat-cell-text\" [ngClass]=\"getCellClass(record, column)\">\r\n <a href=\"{{getValue(record, column)}}\" target='_blank' rel=\"noopener noreferrer\" (click)=\"$event.stopPropagation()\">\r\n <img *ngIf=\"isImg(getValue(record, column));else notImg\" src=\"{{(getValue(record, column) | secureImage) | async}}\" width=\"50\" heigth=\"auto\">\r\n <ng-template #notImg><span>{{\r\n 'igo.common.entity-table.targetHtmlUrl' | translate }}\r\n </span></ng-template>\r\n </a>\r\n </td>\r\n </ng-template>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"columnRenderer === entityTableColumnRenderer.HTML\">\r\n <ng-container *matCellDef=\"let record\">\r\n <td mat-cell class=\"mat-cell-text\" *ngIf=\"!isUrl(getValue(record, column));else isAnUrlHTML\" [ngClass]=\"getCellClass(record, column)\"\r\n [innerHTML]=\"getValue(record, column)\">\r\n </td>\r\n <ng-template #isAnUrlHTML>\r\n <td mat-cell class=\"mat-cell-text\" [ngClass]=\"getCellClass(record, column)\">\r\n <a href=\"{{getValue(record, column)}}\" target='_blank' rel=\"noopener noreferrer\" (click)=\"$event.stopPropagation()\">\r\n <img *ngIf=\"isImg(getValue(record, column));else notImg\" src=\"{{(getValue(record, column) | secureImage) | async}}\" width=\"50\" heigth=\"auto\">\r\n <ng-template #notImg><span>{{ 'igo.geo.targetHtmlUrl' |\r\n translate }} </span></ng-template>\r\n </a>\r\n </td>\r\n </ng-template>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"columnRenderer === entityTableColumnRenderer.UnsanitizedHTML\">\r\n <ng-container *matCellDef=\"let record\">\r\n <td mat-cell class=\"mat-cell-text edition\" [formGroup]=\"formGroup\" *ngIf=\"isEdition(record);else isUnsanitizedHTML\"\r\n [ngClass]=\"getCellClass(record, column)\">\r\n <div class=\"date-picker\" *ngIf=\"column.type === 'date'\">\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <input matInput [matDatepicker]=\"picker\" [formControlName]=\"column.name\" value=\"{{getValue(record, column)}}\"\r\n (dateChange)=\"onDateChange(column.name, record, $event)\">\r\n <mat-datepicker #picker></mat-datepicker>\r\n </div>\r\n <input matInput type=\"time\" *ngIf=\"column.type === 'time'\" [formControlName]=\"column.name\" step=\"900\" (focus)=\"column.onFocus($event)\"\r\n (keypress)=\"column.onChange($event)\" (blur)=\"column.onBlur($event)\">\r\n <input matInput type=\"number\" class=\"class_number_edition\" *ngIf=\"column.type === 'number'\" [formControlName]=\"column.name\" step=\"{{column.step}}\"\r\n value=\"{{getValue(record,column)}}\" (input)=\"onValueChange(column.name, record, $event)\"\r\n readonly=\"{{getValidationAttributeValue(column, 'readonly')}}\" required=\"{{getValidationAttributeValue(column, 'mandatory')}}\"\r\n min=\"{{getValidationAttributeValue(column, 'minValue')}}\" max=\"{{getValidationAttributeValue(column, 'maxValue')}}\">\r\n <input matInput type=\"text\" *ngIf=\"!column.type || column.type ==='string'\" [formControlName]=\"column.name\"\r\n value=\"{{getValue(record, column)}}\" (input)=\"onValueChange(column.name, record, $event)\"\r\n readonly=\"{{getValidationAttributeValue(column, 'readonly')}}\" required=\"{{getValidationAttributeValue(column, 'mandatory')}}\">\r\n <mat-checkbox *ngIf=\"column.type === 'boolean'\" [formControlName]=\"column.name\" [checked]=\"getValue(record,column)\"\r\n (change)=\"onBooleanValueChange(column.name, record,$event)\"></mat-checkbox>\r\n <mat-select *ngIf=\"column.type === 'list'\" required=\"{{getValidationAttributeValue(column, 'mandatory')}}\"\r\n [formControlName]=\"column.name\" [multiple]=\"column.multiple\" (selectionChange)=\"onSelectValueChange(column.name, record, $event)\"\r\n [value]=\"getValue(record, column)\">\r\n <mat-option *ngFor=\"let option of column.domainValues\" [value]=\"option.id\" [disabled]=\"option.disabled\">\r\n {{ option.value }}\r\n </mat-option>\r\n </mat-select>\r\n <input matInput type=\"text\" [formControlName]=\"column.name\" *ngIf=\"column.type === 'autocomplete'\"\r\n [matAutocomplete]=\"auto\" required=\"{{getValidationAttributeValue(column, 'mandatory')}}\" value=\"{{getValue(record, column)}}\">\r\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"onAutocompleteValueChange(column.name, record, $event)\"\r\n panelWidth=\"430px\">\r\n <mat-option *ngFor=\"let option of filteredOptions | async\" [value]=\"option.id\">\r\n {{ option.value }}\r\n </mat-option>\r\n </mat-autocomplete>\r\n </td>\r\n <ng-template #isUnsanitizedHTML>\r\n <td mat-cell class=\"mat-cell-text\" *ngIf=\"!isUrl(getValue(record, column));else isAnUrlUnsanitizedHTML\" [ngClass]=\"getCellClass(record, column)\"\r\n [innerHTML]=\"getValue(record, column) | sanitizeHtml\">\r\n </td>\r\n <ng-template #isAnUrlUnsanitizedHTML>\r\n <td mat-cell class=\"mat-cell-text\" [ngClass]=\"getCellClass(record, column)\">\r\n <a href=\"{{getValue(record, column)}}\" target='_blank' rel=\"noopener noreferrer\" (click)=\"$event.stopPropagation()\">\r\n <img *ngIf=\"isImg(getValue(record, column));else notImg\" src=\"{{(getValue(record, column) | secureImage) | async}}\" width=\"50\" heigth=\"auto\">\r\n <ng-template #notImg><span>{{ 'igo.geo.targetHtmlUrl' | translate }} </span></ng-template>\r\n </a>\r\n </td>\r\n </ng-template>\r\n </ng-template>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"columnRenderer === entityTableColumnRenderer.Icon\">\r\n <td mat-cell *matCellDef=\"let record\" class=\"mat-cell-text\" [ngClass]=\"getCellClass(record, column)\">\r\n <mat-icon svgIcon=\"{{getValue(record, column)|| column.icon}}\" (click)=\"column.onClick($event)\"></mat-icon>\r\n </td>\r\n </ng-container>\r\n <ng-container *ngIf=\"columnRenderer === entityTableColumnRenderer.ButtonGroup\">\r\n <ng-container *matCellDef=\"let record\">\r\n <td mat-cell class=\"mat-cell-text\" [ngClass]=\"getCellClass(record, column)\">\r\n <span *ngFor=\"let button of getValue(record, column)\">\r\n <ng-container *ngIf=\"isEdition(record) === button.editMode\">\r\n <button *ngIf=\"button.style === 'mat-icon-button'\" igoStopPropagation mat-icon-button\r\n [color]=\"button.color\" (mousedown)=\"onButtonClick(button.click, record)\" [disabled]=\"button.disabled\">\r\n <mat-icon svgIcon=\"{{button.icon}}\"></mat-icon>\r\n </button>\r\n <button *ngIf=\"button.style !== 'mat-icon-button'\" igoStopPropagation mat-mini-fab\r\n [color]=\"button.color\" (mousedown)=\"onButtonClick(button.click, record)\" [disabled]=\"button.disabled\">\r\n <mat-icon svgIcon=\"{{button.icon}}\"></mat-icon>\r\n </button>\r\n </ng-container>\r\n </span>\r\n </td>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"headers; sticky: fixedHeader;\" [ngClass]=\"getHeaderClass()\">\r\n </tr>\r\n <tr mat-row igoEntityTableRow *matRowDef=\"let record; columns: headers;\" [scrollBehavior]=\"scrollBehavior\" [ngClass]=\"getRowClass(record)\" [selection]=\"selection\" [selected]=\"rowIsSelected(record)\" (select)=\"onRowSelect(record)\" (click)=\"onRowClick(record)\">\r\n </tr>\r\n </table>\r\n <igo-entity-table-paginator *ngIf=\"withPaginator\" [store]=\"store\" [paginatorOptions]=\"paginatorOptions\" [entitySortChange$]=\"entitySortChange$\" (paginatorChange)=\"paginatorChange($event)\">\r\n </igo-entity-table-paginator>\r\n</div>", styles: [":host{width:100%;height:100%;display:block}:host.table-compact tr.mat-header-row,:host.table-compact ::ng-deep .mat-checkbox .mat-checkbox-ripple{height:36px}:host.table-compact tr.mat-row,:host.table-compact ::ng-deep .mat-checkbox .mat-checkbox-ripple{height:28px}.table-container{display:flex;flex-direction:column;height:100%;overflow:auto;flex:1 1 auto}.mat-cell-text{overflow:hidden;word-wrap:break-word}th.mat-header-cell,td.mat-cell,td.mat-footer-cell{padding:0 3px}entity-table table.igo-entity-table-with-selection tr:hover{-o-box-shadow:2px 0px 2px 0px #dddddd;box-shadow:2px 0 2px #ddd;cursor:pointer}table button{margin:7px}.class_hidden{visibility:hidden}.class_display_none{display:none}.class_boolean,.class_icon,.class_number{text-align:center;padding-right:35px!important}.class_sting,.class_text,.class_number_edition{text-align:left}td.edition{background:rgba(166,166,166,.2)}input{border-bottom:1px solid darkgrey}\n"] }]
|
|
1334
|
+
args: [{ selector: 'igo-entity-table', changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: MatFormFieldControl, useExisting: EntityTableComponent }], template: "<div class=\"table-container\">\n <table mat-table matSort [ngClass]=\"getTableClass()\" [dataSource]=\"dataSource\" [trackBy]=\"getTrackByFunction()\" (matSortChange)=\"onSort($event)\">\n <ng-container matColumnDef=\"selectionCheckbox\" class=\"mat-cell-checkbox\">\n <th mat-header-cell *matHeaderCellDef>\n <ng-container *ngIf=\"selectMany\">\n <ng-container *ngIf=\"selectionState$ | async as selectionState\">\n <mat-checkbox (change)=\"onToggleRows($event.checked)\" [checked]=\"selectionState === entityTableSelectionState.All\"\n [indeterminate]=\"selectionState === entityTableSelectionState.Some\">\n </mat-checkbox>\n </ng-container>\n </ng-container>\n </th>\n <td mat-cell *matCellDef=\"let record\">\n <mat-checkbox (mousedown)=\"$event.shiftKey ? $event.preventDefault() : null\" (click)=\"$event.shiftKey ?\n onShiftToggleRow(!rowIsSelected(record), record, $event) : $event.stopPropagation()\" (change)=\"onToggleRow($event.checked,record)\"\n [checked]=\"rowIsSelected(record)\">\n </mat-checkbox>\n </td>\n </ng-container>\n\n <ng-container [matColumnDef]=\"column.name\" *ngFor=\"let column of template.columns\">\n <ng-container *ngIf=\"columnIsSortable(column)\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header [matTooltip]=\"column.tooltip ? column.tooltip : undefined\">\n {{column.title}}\n </th>\n </ng-container>\n\n <ng-container *ngIf=\"!columnIsSortable(column)\">\n <th mat-header-cell *matHeaderCellDef [matTooltip]=\"column.tooltip ? column.tooltip : undefined\">\n {{column.title}}\n </th>\n </ng-container>\n\n <ng-container *ngIf=\"getColumnRenderer(column) as columnRenderer\">\n <ng-container *ngIf=\"columnRenderer === entityTableColumnRenderer.Default\">\n <ng-container *matCellDef=\"let record\">\n <td mat-cell class=\"mat-cell-text\" *ngIf=\"!isUrl(getValue(record, column));else isAnUrlDefault\" [ngClass]=\"getCellClass(record, column)\">\n {{getValue(record, column)}}\n </td>\n <ng-template #isAnUrlDefault>\n <td mat-cell class=\"mat-cell-text\" [ngClass]=\"getCellClass(record, column)\">\n <a href=\"{{getValue(record, column)}}\" target='_blank' rel=\"noopener noreferrer\" (click)=\"$event.stopPropagation()\">\n <img *ngIf=\"isImg(getValue(record, column));else notImg\" src=\"{{(getValue(record, column) | secureImage) | async}}\" width=\"50\" heigth=\"auto\">\n <ng-template #notImg><span>{{\n 'igo.common.entity-table.targetHtmlUrl' | translate }}\n </span></ng-template>\n </a>\n </td>\n </ng-template>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"columnRenderer === entityTableColumnRenderer.HTML\">\n <ng-container *matCellDef=\"let record\">\n <td mat-cell class=\"mat-cell-text\" *ngIf=\"!isUrl(getValue(record, column));else isAnUrlHTML\" [ngClass]=\"getCellClass(record, column)\"\n [innerHTML]=\"getValue(record, column)\">\n </td>\n <ng-template #isAnUrlHTML>\n <td mat-cell class=\"mat-cell-text\" [ngClass]=\"getCellClass(record, column)\">\n <a href=\"{{getValue(record, column)}}\" target='_blank' rel=\"noopener noreferrer\" (click)=\"$event.stopPropagation()\">\n <img *ngIf=\"isImg(getValue(record, column));else notImg\" src=\"{{(getValue(record, column) | secureImage) | async}}\" width=\"50\" heigth=\"auto\">\n <ng-template #notImg><span>{{ 'igo.geo.targetHtmlUrl' |\n translate }} </span></ng-template>\n </a>\n </td>\n </ng-template>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"columnRenderer === entityTableColumnRenderer.UnsanitizedHTML\">\n <ng-container *matCellDef=\"let record\">\n <td mat-cell class=\"mat-cell-text edition\" [formGroup]=\"formGroup\" *ngIf=\"isEdition(record);else isUnsanitizedHTML\"\n [ngClass]=\"getCellClass(record, column)\">\n <div class=\"date-picker\" *ngIf=\"column.type === 'date'\">\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <input matInput [matDatepicker]=\"picker\" [formControlName]=\"column.name\" value=\"{{getValue(record, column)}}\"\n (dateChange)=\"onDateChange(column.name, record, $event)\">\n <mat-datepicker #picker></mat-datepicker>\n </div>\n <input matInput type=\"time\" *ngIf=\"column.type === 'time'\" [formControlName]=\"column.name\" step=\"900\" (focus)=\"column.onFocus($event)\"\n (keypress)=\"column.onChange($event)\" (blur)=\"column.onBlur($event)\">\n <input matInput type=\"number\" class=\"class_number_edition\" *ngIf=\"column.type === 'number'\" [formControlName]=\"column.name\" step=\"{{column.step}}\"\n value=\"{{getValue(record,column)}}\" (input)=\"onValueChange(column.name, record, $event)\"\n readonly=\"{{getValidationAttributeValue(column, 'readonly')}}\" required=\"{{getValidationAttributeValue(column, 'mandatory')}}\"\n min=\"{{getValidationAttributeValue(column, 'minValue')}}\" max=\"{{getValidationAttributeValue(column, 'maxValue')}}\">\n <input matInput type=\"text\" *ngIf=\"!column.type || column.type ==='string'\" [formControlName]=\"column.name\"\n value=\"{{getValue(record, column)}}\" (input)=\"onValueChange(column.name, record, $event)\"\n readonly=\"{{getValidationAttributeValue(column, 'readonly')}}\" required=\"{{getValidationAttributeValue(column, 'mandatory')}}\">\n <mat-checkbox *ngIf=\"column.type === 'boolean'\" [formControlName]=\"column.name\" [checked]=\"getValue(record,column)\"\n (change)=\"onBooleanValueChange(column.name, record,$event)\"></mat-checkbox>\n <mat-select *ngIf=\"column.type === 'list'\" required=\"{{getValidationAttributeValue(column, 'mandatory')}}\"\n [formControlName]=\"column.name\" [multiple]=\"column.multiple\" (selectionChange)=\"onSelectValueChange(column.name, record, $event)\"\n [value]=\"getValue(record, column)\">\n <mat-option *ngFor=\"let option of column.domainValues\" [value]=\"option.id\" [disabled]=\"option.disabled\">\n {{ option.value }}\n </mat-option>\n </mat-select>\n <input matInput type=\"text\" [formControlName]=\"column.name\" *ngIf=\"column.type === 'autocomplete'\" [matAutocomplete]=\"auto\"\n required=\"{{getValidationAttributeValue(column, 'mandatory')}}\" value=\"{{getValue(record, column)}}\"\n readonly=\"{{getValidationAttributeValue(column, 'readonly')}}\">\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"onAutocompleteValueChange(column, record, $event)\"\n panelWidth=\"430px\">\n <mat-option *ngFor=\"let option of filteredOptions[column.name] | async\"\n [value]=\"option.id\">\n {{ option.value }}\n </mat-option>\n </mat-autocomplete>\n </td>\n <ng-template #isUnsanitizedHTML>\n <td mat-cell class=\"mat-cell-text\" *ngIf=\"!isUrl(getValue(record, column));else isAnUrlUnsanitizedHTML\" [ngClass]=\"getCellClass(record, column)\"\n [innerHTML]=\"getValue(record, column) | sanitizeHtml\">\n </td>\n <ng-template #isAnUrlUnsanitizedHTML>\n <td mat-cell class=\"mat-cell-text\" [ngClass]=\"getCellClass(record, column)\">\n <a href=\"{{getValue(record, column)}}\" target='_blank' rel=\"noopener noreferrer\" (click)=\"$event.stopPropagation()\">\n <img *ngIf=\"isImg(getValue(record, column));else notImg\" src=\"{{(getValue(record, column) | secureImage) | async}}\" width=\"50\" heigth=\"auto\">\n <ng-template #notImg><span>{{ 'igo.geo.targetHtmlUrl' | translate }} </span></ng-template>\n </a>\n </td>\n </ng-template>\n </ng-template>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"columnRenderer === entityTableColumnRenderer.Icon\">\n <td mat-cell *matCellDef=\"let record\" class=\"mat-cell-text\" [ngClass]=\"getCellClass(record, column)\">\n <mat-icon *ngIf=\"column.onClick\" svgIcon=\"{{getValue(record, column)|| column.icon}}\" (click)=\"column.onClick($event)\"></mat-icon>\n <mat-icon *ngIf=\"!column.onClick\" svgIcon=\"{{getValue(record, column)|| column.icon}}\"></mat-icon>\n </td>\n </ng-container>\n <ng-container *ngIf=\"columnRenderer === entityTableColumnRenderer.ButtonGroup\">\n <ng-container *matCellDef=\"let record\">\n <td mat-cell class=\"mat-cell-text\" [ngClass]=\"getCellClass(record, column)\">\n <span *ngFor=\"let button of getValue(record, column)\">\n <ng-container *ngIf=\"isEdition(record) === button.editMode || button.editMode === undefined\">\n <button *ngIf=\"button.style === 'mat-icon-button'\" igoStopPropagation mat-icon-button\n [color]=\"button.color\" (mousedown)=\"onButtonClick(button.click, record)\" [disabled]=\"button.disabled\">\n <mat-icon svgIcon=\"{{button.icon}}\"></mat-icon>\n </button>\n <button *ngIf=\"button.style !== 'mat-icon-button'\" igoStopPropagation mat-mini-fab\n [color]=\"button.color\" (mousedown)=\"onButtonClick(button.click, record)\" [disabled]=\"button.disabled\">\n <mat-icon svgIcon=\"{{button.icon}}\"></mat-icon>\n </button>\n </ng-container>\n </span>\n </td>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"headers; sticky: fixedHeader;\" [ngClass]=\"getHeaderClass()\">\n </tr>\n <tr mat-row igoEntityTableRow *matRowDef=\"let record; columns: headers;\" [scrollBehavior]=\"scrollBehavior\" [ngClass]=\"getRowClass(record)\" [selection]=\"selection\" [selected]=\"rowIsSelected(record)\" (select)=\"onRowSelect(record)\" (click)=\"onRowClick(record)\">\n </tr>\n </table>\n <igo-entity-table-paginator *ngIf=\"withPaginator\" [store]=\"store\" [paginatorOptions]=\"paginatorOptions\" [entitySortChange$]=\"entitySortChange$\" (paginatorChange)=\"paginatorChange($event)\">\n </igo-entity-table-paginator>\n</div>", styles: [":host{width:100%;height:100%;display:block}:host.table-compact tr.mat-header-row,:host.table-compact ::ng-deep .mat-checkbox .mat-checkbox-ripple{height:36px}:host.table-compact tr.mat-row,:host.table-compact ::ng-deep .mat-checkbox .mat-checkbox-ripple{height:28px}.table-container{display:flex;flex-direction:column;height:100%;overflow:auto;flex:1 1 auto}.mat-cell-text{overflow:hidden;word-wrap:break-word}th.mat-header-cell,td.mat-cell,td.mat-footer-cell{padding:0 3px}entity-table table.igo-entity-table-with-selection tr:hover{-o-box-shadow:2px 0px 2px 0px #dddddd;box-shadow:2px 0 2px #ddd;cursor:pointer}table button{margin:7px}.class_hidden{visibility:hidden}.class_display_none{display:none}.class_boolean,.class_icon,.class_number{text-align:center;padding-right:35px!important}.class_sting,.class_text,.class_number_edition{text-align:left}td.edition{background:rgba(166,166,166,.2)}input{border-bottom:1px solid darkgrey}\n"] }]
|
|
1310
1335
|
}], function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.UntypedFormBuilder }, { type: i2.FocusMonitor }, { type: i0.ElementRef }, { type: i1.NgControl, decorators: [{
|
|
1311
1336
|
type: Optional
|
|
1312
1337
|
}, {
|
|
@@ -1336,4 +1361,4 @@ EntityTableComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: Entity
|
|
|
1336
1361
|
}], entitySortChange: [{
|
|
1337
1362
|
type: Output
|
|
1338
1363
|
}] }); })();
|
|
1339
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvbGliL2VudGl0eS9lbnRpdHktdGFibGUvZW50aXR5LXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvbGliL2VudGl0eS9lbnRpdHktdGFibGUvZW50aXR5LXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osdUJBQXVCLEVBT3ZCLFFBQVEsRUFDUixJQUFJLEVBQ0wsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGVBQWUsRUFBNEIsTUFBTSxNQUFNLENBQUM7QUFFakUsT0FBTyxFQU9MLHlCQUF5QixFQUN6Qix5QkFBeUIsRUFDekIseUJBQXlCLEVBQzFCLE1BQU0sV0FBVyxDQUFDO0FBRW5CLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBMEQsZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUcxRyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLE9BQU8sSUFBSSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUNoQ3pCLDZCQUFnRTtJQUM1RCx3Q0FDb0U7SUFEdEQsOE1BQVUsZUFBQSxtQ0FBNEIsQ0FBQSxJQUFDO0lBRXJELGlCQUFlO0lBQ25CLDBCQUFlOzs7O0lBSDJDLGVBQTREO0lBQTVELG9GQUE0RCw4RUFBQTs7O0lBRjFILDZCQUFpQztJQUM3Qiw0R0FJZTs7SUFD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QUk7O3NCQUNoQixRQUFROztzQkFDUixRQUFRO2tGQWpIRixLQUFLO2tCQUFiLEtBQUs7WUFLTyxTQUFTO2tCQUFyQixLQUFLO1lBYUcsUUFBUTtrQkFBaEIsS0FBSztZQU1OLGNBQWM7a0JBRGIsS0FBSztZQU9OLGNBQWM7a0JBRGIsS0FBSztZQU9OLGFBQWE7a0JBRFosS0FBSztZQU9OLGdCQUFnQjtrQkFEZixLQUFLO1lBTUksV0FBVztrQkFBcEIsTUFBTTtZQUtHLGtCQUFrQjtrQkFBM0IsTUFBTTtZQU9HLGdCQUFnQjtrQkFBekIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgT25Jbml0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkNoYW5nZXMsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBFbGVtZW50UmVmLFxyXG4gIE9wdGlvbmFsLFxyXG4gIFNlbGZcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQge1xyXG4gIEVudGl0eUtleSxcclxuICBFbnRpdHlSZWNvcmQsXHJcbiAgRW50aXR5U3RhdGUsXHJcbiAgRW50aXR5U3RvcmUsXHJcbiAgRW50aXR5VGFibGVUZW1wbGF0ZSxcclxuICBFbnRpdHlUYWJsZUNvbHVtbixcclxuICBFbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLFxyXG4gIEVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGUsXHJcbiAgRW50aXR5VGFibGVTY3JvbGxCZWhhdmlvclxyXG59IGZyb20gJy4uL3NoYXJlZCc7XHJcbmltcG9ydCB7IE1hdFBhZ2luYXRvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcclxuaW1wb3J0IHsgRW50aXR5VGFibGVQYWdpbmF0b3JPcHRpb25zIH0gZnJvbSAnLi4vZW50aXR5LXRhYmxlLXBhZ2luYXRvci9lbnRpdHktdGFibGUtcGFnaW5hdG9yLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgVW50eXBlZEZvcm1CdWlsZGVyLCBOZ0NvbnRyb2wsIE5nRm9ybSwgRm9ybUNvbnRyb2xOYW1lLCBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBGb2N1c01vbml0b3IgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XHJcbmltcG9ydCB7IERhdGVBZGFwdGVyLCBFcnJvclN0YXRlTWF0Y2hlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IGRlZmF1bHQgYXMgbW9tZW50IH0gZnJvbSAnbW9tZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWdvLWVudGl0eS10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2VudGl0eS10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZW50aXR5LXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBNYXRGb3JtRmllbGRDb250cm9sLCB1c2VFeGlzdGluZzogRW50aXR5VGFibGVDb21wb25lbnQgfV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEVudGl0eVRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcblxyXG4gIGVudGl0eVNvcnRDaGFuZ2UkOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcclxuXHJcbiAgcHVibGljIGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCA9IG5ldyBVbnR5cGVkRm9ybUdyb3VwKHt9KTtcclxuXHJcbiAgcHVibGljIGZpbHRlcmVkT3B0aW9uczogT2JzZXJ2YWJsZTxhbnlbXT47XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlZmVyZW5jZSB0byB0aGUgY29sdW1uIHJlbmRlcmVyIHR5cGVzXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZW50aXR5VGFibGVDb2x1bW5SZW5kZXJlciA9IEVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlZmVyZW5jZSB0byB0aGUgc2VsZWN0aW9uJ3Mgc3RhdGVcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBlbnRpdHlUYWJsZVNlbGVjdGlvblN0YXRlID0gRW50aXR5VGFibGVTZWxlY3Rpb25TdGF0ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogT2JzZXJ2YWJsZSBvZiB0aGUgc2VsZWN0aW9uLHMgc3RhdGVcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICByZWFkb25seSBzZWxlY3Rpb25TdGF0ZSQ6IEJlaGF2aW9yU3ViamVjdDxFbnRpdHlUYWJsZVNlbGVjdGlvblN0YXRlPiA9IG5ldyBCZWhhdmlvclN1YmplY3QodW5kZWZpbmVkKTtcclxuXHJcbiAgLyoqXHJcbiAgICogU3Vic2NyaXB0aW9uIHRvIHRoZSBzdG9yZSdzIHNlbGVjdGlvblxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2VsZWN0aW9uJCQ6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgLyoqXHJcbiAgICogU3Vic2NyaXB0aW9uIHRvIHRoZSBkYXRhU291cmNlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBkYXRhU291cmNlJCQ6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGxhc3QgcmVjb3JkIGNoZWNrZWQuIFVzZWZ1bCBmb3Igc2VsZWN0aW5nXHJcbiAgICogbXVsdGlwbGUgcmVjb3JkcyBieSBob2xkaW5nIHRoZSBzaGlmdCBrZXkgYW5kIGNoZWNraW5nXHJcbiAgICogY2hlY2tib3hlcy5cclxuICAgKi9cclxuICBwcml2YXRlIGxhc3RSZWNvcmRDaGVja2VkS2V5OiBFbnRpdHlLZXk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEVudGl0eSBzdG9yZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHN0b3JlOiBFbnRpdHlTdG9yZTxvYmplY3Q+O1xyXG5cclxuICAvKipcclxuICAgKiBUYWJsZSBwYWdpbmF0b3JcclxuICAgKi9cclxuICBASW5wdXQoKSBzZXQgcGFnaW5hdG9yKHZhbHVlOiBNYXRQYWdpbmF0b3IpIHtcclxuICAgIHRoaXMuX3BhZ2luYXRvciA9IHZhbHVlO1xyXG4gICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvciA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHBhZ2luYXRvcigpOiBNYXRQYWdpbmF0b3Ige1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhZ2luYXRvcjtcclxuICB9XHJcbiAgcHJpdmF0ZSBfcGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRhYmxlIHRlbXBsYXRlXHJcbiAgICovXHJcbiAgQElucHV0KCkgdGVtcGxhdGU6IEVudGl0eVRhYmxlVGVtcGxhdGU7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNjcm9sbCBiZWhhdmlvciBvbiBzZWxlY3Rpb25cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNjcm9sbEJlaGF2aW9yOiBFbnRpdHlUYWJsZVNjcm9sbEJlaGF2aW9yID0gRW50aXR5VGFibGVTY3JvbGxCZWhhdmlvci5BdXRvO1xyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIG51bGxzIHNob3VsZCBiZSBmaXJzdCB3aGVuIHNvcnRpbmdcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNvcnROdWxsc0ZpcnN0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNob3cgdGhlIHRhYmxlIHBhZ2luYXRvciBvciBub3QuIEZhbHNlIGJ5IGRlZmF1bHQuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICB3aXRoUGFnaW5hdG9yOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhZ2luYXRvciBvcHRpb25zXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwYWdpbmF0b3JPcHRpb25zOiBFbnRpdHlUYWJsZVBhZ2luYXRvck9wdGlvbnM7XHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBhbiBlbnRpdHkgKHJvdykgaXMgY2xpY2tlZFxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBlbnRpdHlDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8b2JqZWN0PigpO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gYW4gZW50aXR5IChyb3cpIGlzIHNlbGVjdGVkXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIGVudGl0eVNlbGVjdENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8e1xyXG4gICAgYWRkZWQ6IG9iamVjdFtdO1xyXG4gIH0+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgdGFibGUgc29ydCBpcyBjaGFuZ2VkLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBlbnRpdHlTb3J0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8e2NvbHVtbjogRW50aXR5VGFibGVDb2x1bW4sIGRpcmVjdGlvbjogc3RyaW5nfT4gPSBuZXcgRXZlbnRFbWl0dGVyKHVuZGVmaW5lZCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRhYmxlIGhlYWRlcnNcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXQgaGVhZGVycygpOiBzdHJpbmdbXSB7XHJcbiAgICBsZXQgY29sdW1ucyA9IHRoaXMudGVtcGxhdGUuY29sdW1uc1xyXG4gICAgICAuZmlsdGVyKChjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uKSA9PiBjb2x1bW4udmlzaWJsZSAhPT0gZmFsc2UpXHJcbiAgICAgIC5tYXAoKGNvbHVtbjogRW50aXR5VGFibGVDb2x1bW4pID0+IGNvbHVtbi5uYW1lKTtcclxuXHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25DaGVja2JveCA9PT0gdHJ1ZSkge1xyXG4gICAgICBjb2x1bW5zID0gWydzZWxlY3Rpb25DaGVja2JveCddLmNvbmNhdChjb2x1bW5zKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY29sdW1ucztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERhdGEgc291cmNlIGNvbnN1bWFibGUgYnkgdGhlIHVuZGVybHlpbmcgbWF0ZXJpYWwgdGFibGVcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBkYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZTxvYmplY3Q+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgc2VsZWN0aW9uIGlzIHN1cHBvcnRlZFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldCBzZWxlY3Rpb24oKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnRlbXBsYXRlLnNlbGVjdGlvbiB8fCBmYWxzZTsgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIGEgc2VsZWN0aW9uIGNoZWNrYm94IHNob3VsZCBiZSBkaXNwbGF5ZWRcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXQgc2VsZWN0aW9uQ2hlY2tib3goKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnRlbXBsYXRlLnNlbGVjdGlvbkNoZWNrYm94IHx8IGZhbHNlOyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgc2VsZWN0aW9uIG1hbnkgZW50aXRpZXMgc2hvdWxkIGViIHN1cHBvcnRlZFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldCBzZWxlY3RNYW55KCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy50ZW1wbGF0ZS5zZWxlY3RNYW55IHx8IGZhbHNlOyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgc2VsZWN0aW9uIG1hbnkgZW50aXRpZXMgc2hvdWxkIGViIHN1cHBvcnRlZFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldCBmaXhlZEhlYWRlcigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudGVtcGxhdGUuZml4ZWRIZWFkZXIgPT09IHVuZGVmaW5lZCA/IHRydWUgOiB0aGlzLnRlbXBsYXRlLmZpeGVkSGVhZGVyOyB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxyXG4gICAgcHJvdGVjdGVkIF9mb2N1c01vbml0b3I6IEZvY3VzTW9uaXRvcixcclxuICAgIHByb3RlY3RlZCBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXHJcbiAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcclxuICAgIEBPcHRpb25hbCgpIHByb3RlY3RlZCBfcGFyZW50Rm9ybTogTmdGb3JtLFxyXG4gICAgQE9wdGlvbmFsKCkgcHJvdGVjdGVkIF9jb250cm9sTmFtZTogRm9ybUNvbnRyb2xOYW1lLFxyXG4gICAgcHJvdGVjdGVkIF9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXI6IEVycm9yU3RhdGVNYXRjaGVyLFxyXG4gICAgcHJpdmF0ZSBkYXRlQWRhcHRlcjogRGF0ZUFkYXB0ZXI8RGF0ZT5cclxuICApIHtcclxuICAgIHRoaXMuZGF0ZUFkYXB0ZXIuc2V0TG9jYWxlKCdmci1DQScpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJhY2sgdGhlIHNlbGVjdGlvbiBzdGF0ZSB0byBwcm9wZXJseSBkaXNwbGF5IHRoZSBzZWxlY3Rpb24gY2hlY2tib3hlc1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5oYW5kbGVEYXRhc291cmNlKCk7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5wYWdpbmF0b3I7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBjb25zdCBzdG9yZSA9IGNoYW5nZXMuc3RvcmU7XHJcbiAgICBpZiAoc3RvcmUgJiYgc3RvcmUuY3VycmVudFZhbHVlICE9PSBzdG9yZS5wcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlRGF0YXNvdXJjZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJvY2VzcyB0ZXh0IG9yIG51bWJlciB2YWx1ZSBjaGFuZ2UgKGVkaXRpb24pXHJcbiAgICovXHJcbiAgb25WYWx1ZUNoYW5nZShjb2x1bW46IHN0cmluZywgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8YW55PiwgZXZlbnQpIHtcclxuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uKTtcclxuICAgIHJlY29yZC5lbnRpdHkucHJvcGVydGllc1trZXldID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJvY2VzcyBib29sZWFuIHZhbHVlIGNoYW5nZSAoZWRpdGlvbilcclxuICAgKi9cclxuICBvbkJvb2xlYW5WYWx1ZUNoYW5nZShjb2x1bW46IHN0cmluZywgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8YW55PiwgZXZlbnQpIHtcclxuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uKTtcclxuICAgIHJlY29yZC5lbnRpdHkucHJvcGVydGllc1trZXldID0gZXZlbnQuY2hlY2tlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByb2Nlc3Mgc2VsZWN0IHZhbHVlIGNoYW5nZSAoZWRpdGlvbilcclxuICAgKi9cclxuICBvblNlbGVjdFZhbHVlQ2hhbmdlKGNvbHVtbjogc3RyaW5nLCByZWNvcmQ6IEVudGl0eVJlY29yZDxhbnk+LCBldmVudCkge1xyXG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRDb2x1bW5LZXlXaXRob3V0UHJvcGVydGllc1RhZyhjb2x1bW4pO1xyXG4gICAgcmVjb3JkLmVudGl0eS5wcm9wZXJ0aWVzW2tleV0gPSBldmVudC52YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByb2Nlc3MgYXV0b2NvbXBsZXRlIHZhbHVlIGNoYW5nZSAoZWRpdGlvbilcclxuICAgKi9cclxuICBvbkF1dG9jb21wbGV0ZVZhbHVlQ2hhbmdlKGNvbHVtbjogc3RyaW5nLCByZWNvcmQ6IEVudGl0eVJlY29yZDxhbnk+LCBldmVudCkge1xyXG4gICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbY29sdW1uXS5zZXRWYWx1ZShldmVudC5vcHRpb24udmlld1ZhbHVlKTtcclxuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uKTtcclxuICAgIHJlY29yZC5lbnRpdHkucHJvcGVydGllc1trZXldID0gZXZlbnQub3B0aW9uLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJvY2VzcyBkYXRlIHZhbHVlIGNoYW5nZSAoZWRpdGlvbilcclxuICAgKi9cclxuICBvbkRhdGVDaGFuZ2UoY29sdW1uOiBzdHJpbmcsIHJlY29yZDogRW50aXR5UmVjb3JkPGFueT4sIGV2ZW50KSB7XHJcbiAgICBjb25zdCBmb3JtYXQgPSBcIllZWVktTU0tRERcIjtcclxuICAgIGNvbnN0IHZhbHVlID0gbW9tZW50KGV2ZW50LnZhbHVlKS5mb3JtYXQoZm9ybWF0KTtcclxuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uKTtcclxuICAgIHJlY29yZC5lbnRpdHkucHJvcGVydGllc1trZXldID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbmFibGUgZWRpdGlvbiBtb2RlIGZvciBvbmUgcm93XHJcbiAgICogTW9yZSB0aGFuIG9uZSByb3cgY2FuIGJlIGVkaXRlZCBhdCB0aGUgc2FtZSB0aW1lXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBlbmFibGVFZGl0KHJlY29yZDogRW50aXR5UmVjb3JkPGFueT4pIHtcclxuICAgIGNvbnN0IGl0ZW0gPSByZWNvcmQuZW50aXR5LnByb3BlcnRpZXMgfHwgcmVjb3JkLmVudGl0eTtcclxuICAgIHRoaXMudGVtcGxhdGUuY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XHJcbiAgICAgIGNvbHVtbi50aXRsZSA9IGNvbHVtbi52YWxpZGF0aW9uPy5tYW5kYXRvcnkgJiYgIWNvbHVtbi50aXRsZS5pbmNsdWRlcygnKicpID8gY29sdW1uLnRpdGxlICsgJyAqJyA6IGNvbHVtbi50aXRsZTtcclxuXHJcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uLm5hbWUpO1xyXG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgIGlmICghaXRlbVtrZXldIHx8IGl0ZW1ba2V5XSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgaXRlbVtrZXldID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaXRlbVtrZXldID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgaXRlbVtrZXldID0gSlNPTi5wYXJzZShpdGVtW2tleV0udG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnNldENvbnRyb2woY29sdW1uLm5hbWUsIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChcclxuICAgICAgICAgIGl0ZW1ba2V5XVxyXG4gICAgICAgICkpO1xyXG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnbGlzdCcpIHtcclxuICAgICAgICBpZiAoY29sdW1uLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5zZXRDb250cm9sKGNvbHVtbi5uYW1lLCB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2woXHJcbiAgICAgICAgICAgIFtpdGVtW2tleV1dXHJcbiAgICAgICAgICApKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5mb3JtR3JvdXAuc2V0Q29udHJvbChjb2x1bW4ubmFtZSwgdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKFxyXG4gICAgICAgICAgICBpdGVtW2tleV1cclxuICAgICAgICAgICkpO1xyXG5cclxuICAgICAgICAgIHR5cGVvZiBpdGVtW2tleV0gPT09ICdzdHJpbmcnID9cclxuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbY29sdW1uLm5hbWVdLnNldFZhbHVlKHBhcnNlSW50KGl0ZW1ba2V5XSkpIDpcclxuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbY29sdW1uLm5hbWVdLnNldFZhbHVlKGl0ZW1ba2V5XSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnYXV0b2NvbXBsZXRlJykge1xyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnNldENvbnRyb2woY29sdW1uLm5hbWUsIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChcclxuICAgICAgICAgIGl0ZW1ba2V5XVxyXG4gICAgICAgICkpO1xyXG5cclxuICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5uYW1lXS52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgICAgICAgIG1hcCh2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gY29sdW1uLmRvbWFpblZhbHVlcy5maWx0ZXIoKG9wdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyTm9ybWFsaXplZCA9IHZhbHVlID8gdmFsdWUudG9Mb3dlckNhc2UoKS5ub3JtYWxpemUoJ05GRCcpLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKSA6ICcnO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmVhdHVyZU5hbWVOb3JtYWxpemVkID0gb3B0aW9uLnZhbHVlLnRvTG93ZXJDYXNlKCkubm9ybWFsaXplKCdORkQnKS5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmVhdHVyZU5hbWVOb3JtYWxpemVkLmluY2x1ZGVzKGZpbHRlck5vcm1hbGl6ZWQpO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGxldCBmb3JtQ29udHJvbFZhbHVlID0gaXRlbVtrZXldO1xyXG4gICAgICAgIGNvbHVtbi5kb21haW5WYWx1ZXMuZm9yRWFjaChvcHRpb24gPT4ge1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiBmb3JtQ29udHJvbFZhbHVlID09PSAnc3RyaW5nJyAmJiAvXlxcZCskLy50ZXN0KGZvcm1Db250cm9sVmFsdWUpKSB7XHJcbiAgICAgICAgICAgIGZvcm1Db250cm9sVmFsdWUgPSBwYXJzZUludChmb3JtQ29udHJvbFZhbHVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChvcHRpb24udmFsdWUgPT09IGZvcm1Db250cm9sVmFsdWUgfHwgb3B0aW9uLmlkID09PSBmb3JtQ29udHJvbFZhbHVlKSB7XHJcbiAgICAgICAgICAgIGZvcm1Db250cm9sVmFsdWUgPSBvcHRpb24udmFsdWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5uYW1lXS5zZXRWYWx1ZShmb3JtQ29udHJvbFZhbHVlKTtcclxuICAgICAgICBpZiAodGhpcy5pc0VkaXRpb24ocmVjb3JkKSAmJiBjb2x1bW4ubGlua0NvbHVtbkZvcmNlKSB7XHJcbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSByZWNvcmQuZW50aXR5IGFzIGFueTtcclxuICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5uYW1lXS5zZXRWYWx1ZShcclxuICAgICAgICAgICAgZW50aXR5Py5wcm9wZXJ0aWVzW3RoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uLmxpbmtDb2x1bW5Gb3JjZSldXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2RhdGUnKSB7XHJcbiAgICAgICAgaWYgKGNvbHVtbi52aXNpYmxlKSB7XHJcbiAgICAgICAgICBpZiAoaXRlbVtrZXldKSB7XHJcbiAgICAgICAgICAgIGxldCBkYXRlID0gbW9tZW50KGl0ZW1ba2V5XSk7XHJcbiAgICAgICAgICAgIGl0ZW1ba2V5XSA9IGRhdGUudXRjKCkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnNldENvbnRyb2woY29sdW1uLm5hbWUsIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChcclxuICAgICAgICAgICAgICBpdGVtW2tleV1cclxuICAgICAgICAgICAgKSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBuZXdLZXkgPSB0aGlzLmdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbi5uYW1lKTtcclxuICAgICAgICAgICAgcmVjb3JkLmVudGl0eS5wcm9wZXJ0aWVzW25ld0tleV0gPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5zZXRDb250cm9sKGNvbHVtbi5uYW1lLCB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2woXHJcbiAgICAgICAgICAgICAgbnVsbFxyXG4gICAgICAgICAgICApKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuc2V0Q29udHJvbChjb2x1bW4ubmFtZSwgdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKFxyXG4gICAgICAgICAgaXRlbVtrZXldXHJcbiAgICAgICAgKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb2x1bW4ubmFtZV0gJiYgdGhpcy5nZXRWYWxpZGF0aW9uQXR0cmlidXRlVmFsdWUoY29sdW1uLCAncmVhZG9ubHknKSkge1xyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5uYW1lXS5kaXNhYmxlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVEYXRhc291cmNlKCkge1xyXG4gICAgdGhpcy51bnN1YnNjcmliZVN0b3JlKCk7XHJcbiAgICB0aGlzLnNlbGVjdGlvbiQkID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXdcclxuICAgICAgLm1hbnlCeSQoKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+IHJlY29yZC5zdGF0ZS5zZWxlY3RlZCA9PT0gdHJ1ZSlcclxuICAgICAgLnN1YnNjcmliZSgocmVjb3JkczogRW50aXR5UmVjb3JkPG9iamVjdD5bXSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZpcnN0U2VsZWN0ZWQgPSByZWNvcmRzWzBdO1xyXG4gICAgICAgIGNvbnN0IGZpcnN0U2VsZWN0ZWRTdGF0ZXZpZXdQb3NpdGlvbiA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3LmFsbCgpLmluZGV4T2YoZmlyc3RTZWxlY3RlZCk7XHJcbiAgICAgICAgY29uc3QgcGFnZU1heCA9IHRoaXMucGFnaW5hdG9yID8gdGhpcy5wYWdpbmF0b3IucGFnZVNpemUgKiAodGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ICsgMSkgOiAwO1xyXG4gICAgICAgIGNvbnN0IHBhZ2VNaW4gPSB0aGlzLnBhZ2luYXRvciA/IHBhZ2VNYXggLSB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSA6IDA7XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMucGFnaW5hdG9yICYmXHJcbiAgICAgICAgICAoZmlyc3RTZWxlY3RlZFN0YXRldmlld1Bvc2l0aW9uIDwgcGFnZU1pbiB8fFxyXG4gICAgICAgICAgZmlyc3RTZWxlY3RlZFN0YXRldmlld1Bvc2l0aW9uID49IHBhZ2VNYXgpKSB7XHJcbiAgICAgICAgICBjb25zdCBwYWdlVG9SZWFjaCA9IE1hdGguZmxvb3IoZmlyc3RTZWxlY3RlZFN0YXRldmlld1Bvc2l0aW9uIC8gdGhpcy5wYWdpbmF0b3IucGFnZVNpemUpO1xyXG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvci5wYWdlSW5kZXggPSBwYWdlVG9SZWFjaDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZSQubmV4dCh0aGlzLmNvbXB1dGVTZWxlY3Rpb25TdGF0ZShyZWNvcmRzKSk7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5kYXRhU291cmNlJCQgPSB0aGlzLnN0b3JlLnN0YXRlVmlldy5hbGwkKCkuc3Vic2NyaWJlKChhbGwpID0+IHtcclxuICAgICAgaWYgKGFsbFswXSkge1xyXG4gICAgICAgIHRoaXMuZW5hYmxlRWRpdChhbGxbMF0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gYWxsO1xyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVW5iaW5kIHRoZSBzdG9yZSB3YXRjaGVyXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlU3RvcmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdW5zdWJzY3JpYmVTdG9yZSgpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGlvbiQkKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0aW9uJCQudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UkJCkge1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UkJC51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJhY2tieSBmdW5jdGlvblxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXHJcbiAgICogQHBhcmFtIGluZGV4IFJlY29yZCBpbmRleFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldFRyYWNrQnlGdW5jdGlvbigpIHtcclxuICAgIHJldHVybiAoaW5kZXg6IG51bWJlciwgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0LCBFbnRpdHlTdGF0ZT4pID0+IHtcclxuICAgICAgcmV0dXJuIHJlY29yZC5yZWY7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJpZ2dlciBhIHJlZnJlc2ggb2YgdGhyZSB0YWJsZS4gVGhpcyBjYW4gYmUgdXNlZnVsIHdoZW5cclxuICAgKiB0aGUgZGF0YSBzb3VyY2UgZG9lc24ndCBlbWl0IGEgbmV3IHZhbHVlIGJ1dCBmb3Igc29tZSByZWFzb25cclxuICAgKiB0aGUgcmVjb3JkcyBuZWVkIGFuIHVwZGF0ZS5cclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICByZWZyZXNoKCkge1xyXG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwYWdpbmF0b3JDaGFuZ2UoZXZlbnQ6IE1hdFBhZ2luYXRvcikge1xyXG4gICAgdGhpcy5wYWdpbmF0b3IgPSBldmVudDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9uIHNvcnQsIHNvcnQgdGhlIHN0b3JlXHJcbiAgICogQHBhcmFtIGV2ZW50IFNvcnQgZXZlbnRcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBvblNvcnQoZXZlbnQ6IHthY3RpdmU6IHN0cmluZywgZGlyZWN0aW9uOiBzdHJpbmd9KSB7XHJcbiAgICBjb25zdCBkaXJlY3Rpb24gPSBldmVudC5kaXJlY3Rpb247XHJcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLnRlbXBsYXRlLmNvbHVtbnNcclxuICAgICAgLmZpbmQoKGM6IEVudGl0eVRhYmxlQ29sdW1uKSA9PiBjLm5hbWUgPT09IGV2ZW50LmFjdGl2ZSk7XHJcblxyXG4gICAgaWYgKGRpcmVjdGlvbiA9PT0gJ2FzYycgfHwgZGlyZWN0aW9uID09PSAnZGVzYycpIHtcclxuICAgICAgdGhpcy5zdG9yZS5zdGF0ZVZpZXcuc29ydCh7XHJcbiAgICAgICAgdmFsdWVBY2Nlc3NvcjogKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+IHRoaXMuZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pLFxyXG4gICAgICAgIGRpcmVjdGlvbixcclxuICAgICAgICBudWxsc0ZpcnN0OiB0aGlzLnNvcnROdWxsc0ZpcnN0XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmVudGl0eVNvcnRDaGFuZ2UuZW1pdCh7Y29sdW1uLCBkaXJlY3Rpb259KTtcclxuICAgICAgdGhpcy5lbnRpdHlTb3J0Q2hhbmdlJC5uZXh0KHRydWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zdG9yZS5zdGF0ZVZpZXcuc29ydCh1bmRlZmluZWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hlbiBhbiBlbnRpdHkgaXMgY2xpY2tlZCwgZW1pdCBhbiBldmVudFxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgb25Sb3dDbGljayhyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KSB7XHJcbiAgICB0aGlzLmxhc3RSZWNvcmRDaGVja2VkS2V5ID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuZ2V0S2V5KHJlY29yZCk7XHJcbiAgICB0aGlzLmVudGl0eUNsaWNrLmVtaXQocmVjb3JkLmVudGl0eSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGVuIGFuIGVudGl0eSBpcyBzZWxlY3RlZCwgc2VsZWN0IGl0IGluIHRoZSBzdG9yZSBhbmQgZW1pdCBhbiBldmVudC4gRXZlbiBpZlxyXG4gICAqIFwibWFueVwiIGlzIHNldCB0byB0cnVlLCB0aGlzIG1ldGhvZCBhbHdheXMgc2VsZWN0IGEgc2luZ2xlLCBleGNsdXNpdmUgcm93LiBTZWxlY3RpbmdcclxuICAgKiBtdWx0aXBsZSByb3dzIHNob3VsZCBiZSBhY2hpZXZlZCBieSB1c2luZyB0aGUgY2hlY2tib3hlcy5cclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG9uUm93U2VsZWN0KHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGlvbiA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XHJcblxyXG4gICAgY29uc3QgZW50aXR5ID0gcmVjb3JkLmVudGl0eTtcclxuICAgIHRoaXMuc3RvcmUuc3RhdGUudXBkYXRlKGVudGl0eSwge3NlbGVjdGVkOiB0cnVlfSwgdHJ1ZSk7XHJcbiAgICB0aGlzLmVudGl0eVNlbGVjdENoYW5nZS5lbWl0KHthZGRlZDogW2VudGl0eV19KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbGVjdCBvciB1bnNlbGVjdCBhbGwgcm93cyBhdCBvbmNlLiBPbiBzZWxlY3QsIGVtaXQgYW4gZXZlbnQuXHJcbiAgICogQHBhcmFtIHRvZ2dsZSBTZWxlY3Qgb3IgdW5zZWxlY3RcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBvblRvZ2dsZVJvd3ModG9nZ2xlOiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24gPT09IGZhbHNlKSB7IHJldHVybjsgfVxyXG5cclxuICAgIHRoaXMuc3RvcmUuc3RhdGUudXBkYXRlQWxsKHtzZWxlY3RlZDogdG9nZ2xlfSk7XHJcbiAgICBpZiAodG9nZ2xlID09PSB0cnVlKSB7XHJcbiAgICAgIGNvbnN0IGVudGl0aWVzID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXdcclxuICAgICAgICAuYWxsKClcclxuICAgICAgICAubWFwKChyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KSA9PiByZWNvcmQuZW50aXR5KTtcclxuICAgICAgdGhpcy5lbnRpdHlTZWxlY3RDaGFuZ2UuZW1pdCh7YWRkZWQ6IFtlbnRpdGllc119KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gYW4gZW50aXR5IGlzIHRvZ2dsZWQsIHNlbGVjdCBvciB1bnNlbGVjdCBpdCBpbiB0aGUgc3RvcmUuIE9uIHNlbGVjdCxcclxuICAgKiBlbWl0IGFuIGV2ZW50LlxyXG4gICAqIEBwYXJhbSB0b2dnbGUgU2VsZWN0IG9yIHVuc2VsZWN0XHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBvblRvZ2dsZVJvdyh0b2dnbGU6IGJvb2xlYW4sIHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGlvbiA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XHJcblxyXG4gICAgY29uc3QgZW50aXR5ID0gcmVjb3JkLmVudGl0eTtcclxuICAgIGNvbnN0IGV4Y2x1c2l2ZSA9IHRvZ2dsZSA9PT0gdHJ1ZSAmJiAhdGhpcy5zZWxlY3RNYW55O1xyXG4gICAgdGhpcy5zdG9yZS5zdGF0ZS51cGRhdGUoZW50aXR5LCB7c2VsZWN0ZWQ6IHRvZ2dsZX0sIGV4Y2x1c2l2ZSk7XHJcbiAgICBpZiAodG9nZ2xlID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuZW50aXR5U2VsZWN0Q2hhbmdlLmVtaXQoe2FkZGVkOiBbZW50aXR5XX0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5sYXN0UmVjb3JkQ2hlY2tlZEtleSA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3LmdldEtleShyZWNvcmQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hlbiBhbiBlbnRpdHkgaXMgdG9nZ2xlZCwgc2VsZWN0IG9yIHVuc2VsZWN0IGl0IGluIHRoZSBzdG9yZS4gT24gc2VsZWN0LFxyXG4gICAqIGVtaXQgYW4gZXZlbnQuXHJcbiAgICogQHBhcmFtIHRvZ2dsZSBTZWxlY3Qgb3IgdW5zZWxlY3RcclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG9uU2hpZnRUb2dnbGVSb3codG9nZ2xlOiBib29sZWFuLCByZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+LCBldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uID09PSBmYWxzZSkgeyByZXR1cm47IH1cclxuXHJcbiAgICBpZiAodGhpcy5zZWxlY3RNYW55ID09PSBmYWxzZSB8fCB0aGlzLmxhc3RSZWNvcmRDaGVja2VkS2V5ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5vblRvZ2dsZVJvdyh0b2dnbGUsIHJlY29yZCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCBtYXQgY2hlY2tib3ggd3JvbmcgYmVoYXZpb3JcclxuICAgIC8vIHdoZW4gdGhlIHNoaWZ0IGtleSBpcyBoZWxkLlxyXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvaXNzdWVzLzYyMzJcclxuICAgIGNvbnN0IHJhbmdlID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XHJcbiAgICByYW5nZS5zZWxlY3ROb2RlKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XHJcbiAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuYWRkUmFuZ2UocmFuZ2UpO1xyXG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgY29uc3QgcmVjb3JkcyA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3LmFsbCgpO1xyXG4gICAgY29uc3QgcmVjb3JkSW5kZXggPSByZWNvcmRzLmluZGV4T2YocmVjb3JkKTtcclxuICAgIGNvbnN0IGxhc3RSZWNvcmRDaGVja2VkID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuZ2V0KHRoaXMubGFzdFJlY29yZENoZWNrZWRLZXkpO1xyXG4gICAgY29uc3QgbGFzdFJlY29yZEluZGV4ID0gcmVjb3Jkcy5pbmRleE9mKGxhc3RSZWNvcmRDaGVja2VkKTtcclxuICAgIGNvbnN0IGluZGV4ZXMgPSBbcmVjb3JkSW5kZXgsIGxhc3RSZWNvcmRJbmRleF07XHJcbiAgICBjb25zdCBzZWxlY3RSZWNvcmRzID0gcmVjb3Jkcy5zbGljZShNYXRoLm1pbiguLi5pbmRleGVzKSwgTWF0aC5tYXgoLi4uaW5kZXhlcykgKyAxKTtcclxuXHJcbiAgICBjb25zdCBlbnRpdGllcyA9IHNlbGVjdFJlY29yZHMubWFwKChfcmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PikgPT4gX3JlY29yZC5lbnRpdHkpO1xyXG4gICAgdGhpcy5zdG9yZS5zdGF0ZS51cGRhdGVNYW55KGVudGl0aWVzLCB7c2VsZWN0ZWQ6IHRvZ2dsZX0pO1xyXG4gICAgaWYgKHRvZ2dsZSA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmVudGl0eVNlbGVjdENoYW5nZS5lbWl0KHthZGRlZDogZW50aXRpZXN9KTtcclxuICAgIH1cclxuICAgIHRoaXMubGFzdFJlY29yZENoZWNrZWRLZXkgPSB0aGlzLnN0b3JlLnN0YXRlVmlldy5nZXRLZXkocmVjb3JkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbXB1dGUgdGhlIHNlbGVjdGlvbiBzdGF0ZVxyXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgYWxsLCBzb21lIG9yIG5vIHJvd3MgYXJlIHNlbGVjdGVkXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjb21wdXRlU2VsZWN0aW9uU3RhdGUoc2VsZWN0ZWRSZWNvcmRzOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PltdKTogRW50aXR5VGFibGVTZWxlY3Rpb25TdGF0ZSB7XHJcbiAgICBjb25zdCBzdGF0ZXMgPSBFbnRpdHlUYWJsZVNlbGVjdGlvblN0YXRlO1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uQ291bnQgPSBzZWxlY3RlZFJlY29yZHMubGVuZ3RoO1xyXG4gICAgcmV0dXJuIHNlbGVjdGlvbkNvdW50ID09PSAwID9cclxuICAgICAgc3RhdGVzLk5vbmUgOlxyXG4gICAgICAoc2VsZWN0aW9uQ291bnQgPT09IHRoaXMuc3RvcmUuc3RhdGVWaWV3LmNvdW50ID8gc3RhdGVzLkFsbCA6IHN0YXRlcy5Tb21lKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgYSBjb2x1bW4gaXMgc29ydGFibGVcclxuICAgKiBAcGFyYW0gY29sdW1uIENvbHVtblxyXG4gICAqIEByZXR1cm5zIFRydWUgaWYgYSBjb2x1bW4gaXMgc29ydGFibGVcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBjb2x1bW5Jc1NvcnRhYmxlKGNvbHVtbjogRW50aXR5VGFibGVDb2x1bW4pOiBib29sZWFuIHtcclxuICAgIGxldCBzb3J0YWJsZSA9IGNvbHVtbi5zb3J0O1xyXG4gICAgaWYgKHNvcnRhYmxlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgc29ydGFibGUgPSB0aGlzLnRlbXBsYXRlLnNvcnQgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogdGhpcy50ZW1wbGF0ZS5zb3J0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNvcnRhYmxlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciBhIHJvdyBpcyBzaG91bGQgYmUgc2VsZWN0ZWQgYmFzZWQgb24gdGhlIHVuZGVybHlpbmcgZW50aXR5IHN0YXRlXHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcclxuICAgKiBAcmV0dXJucyBUcnVlIGlmIGEgcm93IHNob3VsZCBiZSBzZWxlY3RlZFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIHJvd0lzU2VsZWN0ZWQocmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0Pik6IGJvb2xlYW4ge1xyXG4gICAgY29uc3Qgc3RhdGUgPSByZWNvcmQuc3RhdGU7XHJcbiAgICByZXR1cm4gc3RhdGUuc2VsZWN0ZWQgPyBzdGF0ZS5zZWxlY3RlZCA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgaXNJbWcodmFsdWUpIHtcclxuICAgIGlmICh0aGlzLmlzVXJsKHZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIFsnanBnJywgJ3BuZycsICdnaWYnXS5pbmRleE9mKHZhbHVlLnNwbGl0KCcuJykucG9wKCkudG9Mb3dlckNhc2UoKSkgIT09IC0xXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc1VybCh2YWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICB2YWx1ZS5zbGljZSgwLCA4KSA9PT0gJ2h0dHBzOi8vJyB8fCB2YWx1ZS5zbGljZSgwLCA3KSA9PT0gJ2h0dHA6Ly8nXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRob2QgdG8gYWNjZXNzIGFuIGVudGl0eSdzIHZhbHVlc1xyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXHJcbiAgICogQHBhcmFtIGNvbHVtbiBDb2x1bW5cclxuICAgKiBAcmV0dXJucyBBbnkgdmFsdWVcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXRWYWx1ZShyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+LCBjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uKTogYW55IHtcclxuICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHk7XHJcbiAgICBsZXQgdmFsdWU7XHJcbiAgICBpZiAoY29sdW1uLnZhbHVlQWNjZXNzb3IgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gY29sdW1uLnZhbHVlQWNjZXNzb3IoZW50aXR5LCByZWNvcmQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudGVtcGxhdGUudmFsdWVBY2Nlc3NvciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlLnZhbHVlQWNjZXNzb3IoZW50aXR5LCBjb2x1bW4ubmFtZSwgcmVjb3JkKTtcclxuICAgIH1cclxuICAgIHZhbHVlID0gdGhpcy5zdG9yZS5nZXRQcm9wZXJ0eShlbnRpdHksIGNvbHVtbi5uYW1lKTtcclxuXHJcbiAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdib29sZWFuJykge1xyXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHtcclxuICAgICAgICB2YWx1ZSA9IGZhbHNlO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyl7XHJcbiAgICAgICAgICB2YWx1ZSA9IEJvb2xlYW4odmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB2YWx1ZSA9IEpTT04ucGFyc2UodmFsdWUudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5pc0VkaXRpb24ocmVjb3JkKSl7XHJcbiAgICAgICAgdmFsdWUgPSB2YWx1ZSA/ICcmIzEwMDAzOycgOiAnJzsgLy8gY2hlY2sgbWFya1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnbGlzdCcgJiYgdmFsdWUgJiYgY29sdW1uLmRvbWFpblZhbHVlcykge1xyXG4gICAgICBjb25zdCBlbnRpdHkgPSByZWNvcmQuZW50aXR5IGFzIGFueTtcclxuICAgICAgaWYgKGNvbHVtbi5tdWx0aXBsZSkge1xyXG4gICAgICAgIGxldCBsaXN0X2lkO1xyXG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyBsaXN0X2lkID0gdmFsdWUubWF0Y2goL1tcXHcuLV0rL2cpLm1hcChOdW1iZXIpIDogbGlzdF9pZCA9IHZhbHVlO1xyXG4gICAgICAgIGxldCBsaXN0X29wdGlvbiA9IFtdO1xyXG5cclxuICAgICAgICBjb2x1bW4uZG9tYWluVmFsdWVzLmZvckVhY2gob3B0aW9uID0+IHtcclxuICAgICAgICAgIGlmIChsaXN0X2lkLmluY2x1ZGVzKG9wdGlvbi5pZCkpIHtcclxuICAgICAgICAgICAgaWYgKHJlY29yZC5lZGl0aW9uKSB7XHJcbiAgICAgICAgICAgICAgbGlzdF9vcHRpb24ucHVzaChvcHRpb24uaWQpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGxpc3Rfb3B0aW9uLnB1c2gob3B0aW9uLnZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmlzRWRpdGlvbihyZWNvcmQpID8gdmFsdWUgPSBsaXN0X2lkIDogdmFsdWUgPSBsaXN0X29wdGlvbjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNFZGl0aW9uKHJlY29yZCkgJiYgY29sdW1uLmxpbmtDb2x1bW5Gb3JjZSkge1xyXG4gICAgICAgICAgdmFsdWUgPSBlbnRpdHk/LnByb3BlcnRpZXNbdGhpcy5nZXRDb2x1bW5LZXlXaXRob3V0UHJvcGVydGllc1RhZyhjb2x1bW4ubGlua0NvbHVtbkZvcmNlKV07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbHVtbi5kb21haW5WYWx1ZXMuZm9yRWFjaChvcHRpb24gPT4ge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAvXlxcZCskLy50ZXN0KHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChvcHRpb24udmFsdWUgPT09IHZhbHVlIHx8IG9wdGlvbi5pZCA9PT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICB0aGlzLmlzRWRpdGlvbihyZWNvcmQpID8gdmFsdWUgPSBvcHRpb24uaWQgOiB2YWx1ZSA9IG9wdGlvbi52YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnYXV0b2NvbXBsZXRlJyAmJiB2YWx1ZSAmJiBjb2x1bW4uZG9tYWluVmFsdWVzKSB7XHJcbiAgICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHkgYXMgYW55O1xyXG4gICAgICBpZiAoIXRoaXMuaXNFZGl0aW9uKHJlY29yZCkgJiYgY29sdW1uLmxpbmtDb2x1bW5Gb3JjZSkge1xyXG4gICAgICAgIHZhbHVlID0gZW50aXR5Py5wcm9wZXJ0aWVzW3RoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uLmxpbmtDb2x1bW5Gb3JjZSldO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbHVtbi5kb21haW5WYWx1ZXMuZm9yRWFjaChvcHRpb24gPT4ge1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgL15cXGQrJC8udGVzdCh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUludCh2YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAob3B0aW9uLnZhbHVlID09PSB2YWx1ZSB8fCBvcHRpb24uaWQgPT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gb3B0aW9uLnZhbHVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgaWYgKHRoaXMuaXNFZGl0aW9uKHJlY29yZCkpIHtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgIGxldCBkYXRlID0gbW9tZW50KHZhbHVlKTtcclxuICAgICAgICAgIHZhbHVlID0gZGF0ZS5mb3JtYXQoKTtcclxuICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5uYW1lXS5zZXRWYWx1ZSh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLmlzRWRpdGlvbihyZWNvcmQpICYmIHZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgICAgdmFsdWUgPSBcIlwiO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdmFsdWUgPSAnJztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRob2QgdG8gYWNjZXNzIGFuIGVudGl0eSdzIHZhbGlkYXRpb24gdmFsdWVzXHJcbiAgICogQHBhcmFtIGNvbHVtbiBDb2x1bW5cclxuICAgKiBAcGFyYW0gdmFsaWRhdGlvblR5cGUgc3RyaW5nXHJcbiAgICogQHJldHVybnMgQW55IHZhbHVlIChmYWxzZSBpZiBubyB2YWxpZGF0aW9uIG9yIG5vdCB0aGUgb25lIGNvbmNlcm5lZClcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXRWYWxpZGF0aW9uQXR0cmlidXRlVmFsdWUoY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbiwgdmFsaWRhdGlvblR5cGU6IHN0cmluZyk6IGFueSB7XHJcbiAgICBpZiAoY29sdW1uLnZhbGlkYXRpb24gIT09IHVuZGVmaW5lZCAmJiBjb2x1bW4udmFsaWRhdGlvblt2YWxpZGF0aW9uVHlwZV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gY29sdW1uLnZhbGlkYXRpb25bdmFsaWRhdGlvblR5cGVdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzRWRpdGlvbihyZWNvcmQpIHtcclxuICAgIHJldHVybiByZWNvcmQuZW50aXR5LmVkaXRpb24gPyB0cnVlIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIHR5cGUgb2YgcmVuZGVyZXIgb2YgYSBjb2x1bW5cclxuICAgKiBAcGFyYW0gY29sdW1uIENvbHVtblxyXG4gICAqIEByZXR1cm5zIFJlbmRlcmVyIHR5cGVcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXRDb2x1bW5SZW5kZXJlcihjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uKTogRW50aXR5VGFibGVDb2x1bW5SZW5kZXJlciB7XHJcbiAgICBpZiAoY29sdW1uLnJlbmRlcmVyICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIGNvbHVtbi5yZW5kZXJlcjtcclxuICAgIH1cclxuICAgIHJldHVybiBFbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLkRlZmF1bHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIHRhYmxlIG5nQ2xhc3NcclxuICAgKiBAcmV0dXJucyBuZ0NsYXNzXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0VGFibGVDbGFzcygpOiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn0ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgJ2lnby1lbnRpdHktdGFibGUtd2l0aC1zZWxlY3Rpb24nOiB0aGlzLnNlbGVjdGlvblxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIGhlYWRlciBuZ0NsYXNzXHJcbiAgICogQHJldHVybnMgbmdDbGFzc1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldEhlYWRlckNsYXNzKCk6IHtba2V5OiBzdHJpbmddOiBib29sZWFufSB7XHJcbiAgICBjb25zdCBmdW5jID0gdGhpcy50ZW1wbGF0ZS5oZWFkZXJDbGFzc0Z1bmM7XHJcbiAgICBpZiAoZnVuYyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XHJcbiAgICAgIHJldHVybiBmdW5jKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSByb3cgbmdDbGFzc1xyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXHJcbiAgICogQHJldHVybnMgbmdDbGFzc1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldFJvd0NsYXNzKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pOiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn0ge1xyXG4gICAgY29uc3QgZW50aXR5ID0gcmVjb3JkLmVudGl0eTtcclxuICAgIGNvbnN0IGZ1bmMgPSB0aGlzLnRlbXBsYXRlLnJvd0NsYXNzRnVuYztcclxuICAgIGlmIChmdW5jIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcclxuICAgICAgcmV0dXJuIGZ1bmMoZW50aXR5LCByZWNvcmQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHt9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGEgcm93IG5nQ2xhc3NcclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxyXG4gICAqIEBwYXJhbSBjb2x1bW4gQ29sdW1uXHJcbiAgICogQHJldHVybnMgbmdDbGFzc1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldENlbGxDbGFzcyhyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+LCBjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uKToge1trZXk6IHN0cmluZ106IGJvb2xlYW59IHtcclxuICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHk7XHJcbiAgICBjb25zdCBjbHMgPSB7fTtcclxuXHJcbiAgICBjb25zdCB0YWJsZUZ1bmMgPSB0aGlzLnRlbXBsYXRlLmNlbGxDbGFzc0Z1bmM7XHJcbiAgICBpZiAodGFibGVGdW5jIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcclxuICAgICAgT2JqZWN0LmFzc2lnbihjbHMsIHRhYmxlRnVuYyhlbnRpdHksIGNvbHVtbiwgcmVjb3JkKSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29sdW1uRnVuYyA9IGNvbHVtbi5jZWxsQ2xhc3NGdW5jO1xyXG4gICAgaWYgKGNvbHVtbkZ1bmMgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xyXG4gICAgICBPYmplY3QuYXNzaWduKGNscywgY29sdW1uRnVuYyhlbnRpdHksIHJlY29yZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjbHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGVuIGEgYnV0dG9uIGlzIGNsaWNrZWRcclxuICAgKiBAcGFyYW0gZnVuYyBGdW5jdGlvblxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgb25CdXR0b25DbGljayhcclxuICAgIGNsaWNrRnVuYzogKGVudGl0eTogb2JqZWN0LCByZWNvcmQ/OiBFbnRpdHlSZWNvcmQ8b2JqZWN0PikgPT4gdm9pZCxcclxuICAgIHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD5cclxuICApIHtcclxuICAgIHRoaXMuZW5hYmxlRWRpdChyZWNvcmQpO1xyXG4gICAgaWYgKHR5cGVvZiBjbGlja0Z1bmMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgY2xpY2tGdW5jKHJlY29yZC5lbnRpdHksIHJlY29yZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZSBjb2x1bW4gbmFtZSB3aXRob3V0IGhpcyBcInByb3BlcnRpZXNcIiB0YWcgKHVzZWZ1bCBmb3IgZWRpdGlvbiB3b3Jrc3BhY2UgcHJvcGVydGllcylcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uOiBzdHJpbmcpIHtcclxuICAgIGlmIChjb2x1bW4uaW5jbHVkZXMoJ3Byb3BlcnRpZXMuJykpIHtcclxuICAgICAgcmV0dXJuIGNvbHVtbi5zcGxpdCgnLicpWzFdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbHVtbjtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInRhYmxlLWNvbnRhaW5lclwiPlxyXG4gIDx0YWJsZSBtYXQtdGFibGUgbWF0U29ydCBbbmdDbGFzc109XCJnZXRUYWJsZUNsYXNzKClcIiBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCIgW3RyYWNrQnldPVwiZ2V0VHJhY2tCeUZ1bmN0aW9uKClcIiAobWF0U29ydENoYW5nZSk9XCJvblNvcnQoJGV2ZW50KVwiPlxyXG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInNlbGVjdGlvbkNoZWNrYm94XCIgY2xhc3M9XCJtYXQtY2VsbC1jaGVja2JveFwiPlxyXG4gICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0TWFueVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uU3RhdGUkIHwgYXN5bmMgYXMgc2VsZWN0aW9uU3RhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggKGNoYW5nZSk9XCJvblRvZ2dsZVJvd3MoJGV2ZW50LmNoZWNrZWQpXCIgW2NoZWNrZWRdPVwic2VsZWN0aW9uU3RhdGUgPT09IGVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGUuQWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cInNlbGVjdGlvblN0YXRlID09PSBlbnRpdHlUYWJsZVNlbGVjdGlvblN0YXRlLlNvbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcmVjb3JkXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCAobW91c2Vkb3duKT1cIiRldmVudC5zaGlmdEtleSA/ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpIDogbnVsbFwiIChjbGljayk9XCIkZXZlbnQuc2hpZnRLZXkgP1xyXG4gICAgICAgICAgICAgIG9uU2hpZnRUb2dnbGVSb3coIXJvd0lzU2VsZWN0ZWQocmVjb3JkKSwgcmVjb3JkLCAkZXZlbnQpIDogJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgKGNoYW5nZSk9XCJvblRvZ2dsZVJvdygkZXZlbnQuY2hlY2tlZCxyZWNvcmQpXCJcclxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJyb3dJc1NlbGVjdGVkKHJlY29yZClcIj5cclxuICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5uYW1lXCIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiB0ZW1wbGF0ZS5jb2x1bW5zXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uSXNTb3J0YWJsZShjb2x1bW4pXCI+XHJcbiAgICAgICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXIgW21hdFRvb2x0aXBdPVwiY29sdW1uLnRvb2x0aXAgPyBjb2x1bW4udG9vbHRpcCA6IHVuZGVmaW5lZFwiPlxyXG4gICAgICAgICAgICAgICAgICB7e2NvbHVtbi50aXRsZX19XHJcbiAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sdW1uSXNTb3J0YWJsZShjb2x1bW4pXCI+XHJcbiAgICAgICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBbbWF0VG9vbHRpcF09XCJjb2x1bW4udG9vbHRpcCA/IGNvbHVtbi50b29sdGlwIDogdW5kZWZpbmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7Y29sdW1uLnRpdGxlfX1cclxuICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldENvbHVtblJlbmRlcmVyKGNvbHVtbikgYXMgY29sdW1uUmVuZGVyZXJcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uUmVuZGVyZXIgPT09IGVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIuRGVmYXVsdFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICptYXRDZWxsRGVmPVwibGV0IHJlY29yZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiICpuZ0lmPVwiIWlzVXJsKGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSk7ZWxzZSBpc0FuVXJsRGVmYXVsdFwiIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2dldFZhbHVlKHJlY29yZCwgY29sdW1uKX19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpc0FuVXJsRGVmYXVsdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgY2xhc3M9XCJtYXQtY2VsbC10ZXh0XCIgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzKHJlY29yZCwgY29sdW1uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwie3tnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbil9fVwiIHRhcmdldD0nX2JsYW5rJyByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cImlzSW1nKGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSk7ZWxzZSBub3RJbWdcIiBzcmM9XCJ7eyhnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikgfCBzZWN1cmVJbWFnZSkgfCBhc3luY319XCIgd2lkdGg9XCI1MFwiIGhlaWd0aD1cImF1dG9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm90SW1nPjxzcGFuPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgJ2lnby5jb21tb24uZW50aXR5LXRhYmxlLnRhcmdldEh0bWxVcmwnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj48L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5SZW5kZXJlciA9PT0gZW50aXR5VGFibGVDb2x1bW5SZW5kZXJlci5IVE1MXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm1hdENlbGxEZWY9XCJsZXQgcmVjb3JkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgY2xhc3M9XCJtYXQtY2VsbC10ZXh0XCIgKm5nSWY9XCIhaXNVcmwoZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pKTtlbHNlIGlzQW5VcmxIVE1MXCIgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzKHJlY29yZCwgY29sdW1uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImdldFZhbHVlKHJlY29yZCwgY29sdW1uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXNBblVybEhUTUw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cInt7Z2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pfX1cIiB0YXJnZXQ9J19ibGFuaycgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJpc0ltZyhnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikpO2Vsc2Ugbm90SW1nXCIgc3JjPVwie3soZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pIHwgc2VjdXJlSW1hZ2UpIHwgYXN5bmN9fVwiIHdpZHRoPVwiNTBcIiBoZWlndGg9XCJhdXRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vdEltZz48c3Bhbj57eyAnaWdvLmdlby50YXJnZXRIdG1sVXJsJyB8XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlIH19IDwvc3Bhbj48L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5SZW5kZXJlciA9PT0gZW50aXR5VGFibGVDb2x1bW5SZW5kZXJlci5VbnNhbml0aXplZEhUTUxcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbWF0Q2VsbERlZj1cImxldCByZWNvcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCBjbGFzcz1cIm1hdC1jZWxsLXRleHQgZWRpdGlvblwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCIgKm5nSWY9XCJpc0VkaXRpb24ocmVjb3JkKTtlbHNlIGlzVW5zYW5pdGl6ZWRIVE1MXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXJcIiAqbmdJZj1cImNvbHVtbi50eXBlID09PSAnZGF0ZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJwaWNrZXJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFttYXREYXRlcGlja2VyXT1cInBpY2tlclwiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29sdW1uLm5hbWVcIiB2YWx1ZT1cInt7Z2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF0ZUNoYW5nZSk9XCJvbkRhdGVDaGFuZ2UoY29sdW1uLm5hbWUsIHJlY29yZCwgJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI3BpY2tlcj48L21hdC1kYXRlcGlja2VyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGltZVwiICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09ICd0aW1lJ1wiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29sdW1uLm5hbWVcIiBzdGVwPVwiOTAwXCIgKGZvY3VzKT1cImNvbHVtbi5vbkZvY3VzKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJjb2x1bW4ub25DaGFuZ2UoJGV2ZW50KVwiIChibHVyKT1cImNvbHVtbi5vbkJsdXIoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJjbGFzc19udW1iZXJfZWRpdGlvblwiICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09ICdudW1iZXInXCIgW2Zvcm1Db250cm9sTmFtZV09XCJjb2x1bW4ubmFtZVwiIHN0ZXA9XCJ7e2NvbHVtbi5zdGVwfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwie3tnZXRWYWx1ZShyZWNvcmQsY29sdW1uKX19XCIgKGlucHV0KT1cIm9uVmFsdWVDaGFuZ2UoY29sdW1uLm5hbWUsIHJlY29yZCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZG9ubHk9XCJ7e2dldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdyZWFkb25seScpfX1cIiByZXF1aXJlZD1cInt7Z2V0VmFsaWRhdGlvbkF0dHJpYnV0ZVZhbHVlKGNvbHVtbiwgJ21hbmRhdG9yeScpfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cInt7Z2V0VmFsaWRhdGlvbkF0dHJpYnV0ZVZhbHVlKGNvbHVtbiwgJ21pblZhbHVlJyl9fVwiIG1heD1cInt7Z2V0VmFsaWRhdGlvbkF0dHJpYnV0ZVZhbHVlKGNvbHVtbiwgJ21heFZhbHVlJyl9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGV4dFwiICpuZ0lmPVwiIWNvbHVtbi50eXBlIHx8IGNvbHVtbi50eXBlID09PSdzdHJpbmcnXCIgW2Zvcm1Db250cm9sTmFtZV09XCJjb2x1bW4ubmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJ7e2dldFZhbHVlKHJlY29yZCwgY29sdW1uKX19XCIgKGlucHV0KT1cIm9uVmFsdWVDaGFuZ2UoY29sdW1uLm5hbWUsIHJlY29yZCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZG9ubHk9XCJ7e2dldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdyZWFkb25seScpfX1cIiByZXF1aXJlZD1cInt7Z2V0VmFsaWRhdGlvbkF0dHJpYnV0ZVZhbHVlKGNvbHVtbiwgJ21hbmRhdG9yeScpfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94ICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09ICdib29sZWFuJ1wiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29sdW1uLm5hbWVcIiBbY2hlY2tlZF09XCJnZXRWYWx1ZShyZWNvcmQsY29sdW1uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkJvb2xlYW5WYWx1ZUNoYW5nZShjb2x1bW4ubmFtZSwgcmVjb3JkLCRldmVudClcIj48L21hdC1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCAqbmdJZj1cImNvbHVtbi50eXBlID09PSAnbGlzdCdcIiByZXF1aXJlZD1cInt7Z2V0VmFsaWRhdGlvbkF0dHJpYnV0ZVZhbHVlKGNvbHVtbiwgJ21hbmRhdG9yeScpfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29sdW1uLm5hbWVcIiBbbXVsdGlwbGVdPVwiY29sdW1uLm11bHRpcGxlXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdFZhbHVlQ2hhbmdlKGNvbHVtbi5uYW1lLCByZWNvcmQsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBjb2x1bW4uZG9tYWluVmFsdWVzXCIgW3ZhbHVlXT1cIm9wdGlvbi5pZFwiIFtkaXNhYmxlZF09XCJvcHRpb24uZGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbi52YWx1ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29sdW1uLm5hbWVcIiAqbmdJZj1cImNvbHVtbi50eXBlID09PSAnYXV0b2NvbXBsZXRlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvXCIgcmVxdWlyZWQ9XCJ7e2dldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdtYW5kYXRvcnknKX19XCIgdmFsdWU9XCJ7e2dldFZhbHVlKHJlY29yZCwgY29sdW1uKX19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCIgKG9wdGlvblNlbGVjdGVkKT1cIm9uQXV0b2NvbXBsZXRlVmFsdWVDaGFuZ2UoY29sdW1uLm5hbWUsIHJlY29yZCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsV2lkdGg9XCI0MzBweFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnMgfCBhc3luY1wiIFt2YWx1ZV09XCJvcHRpb24uaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb24udmFsdWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXNVbnNhbml0aXplZEhUTUw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiICpuZ0lmPVwiIWlzVXJsKGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSk7ZWxzZSBpc0FuVXJsVW5zYW5pdGl6ZWRIVE1MXCIgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzKHJlY29yZCwgY29sdW1uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikgfCBzYW5pdGl6ZUh0bWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXNBblVybFVuc2FuaXRpemVkSFRNTD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJ7e2dldFZhbHVlKHJlY29yZCwgY29sdW1uKX19XCIgdGFyZ2V0PSdfYmxhbmsnIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cImlzSW1nKGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSk7ZWxzZSBub3RJbWdcIiBzcmM9XCJ7eyhnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikgfCBzZWN1cmVJbWFnZSkgfCBhc3luY319XCIgd2lkdGg9XCI1MFwiIGhlaWd0aD1cImF1dG9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vdEltZz48c3Bhbj57eyAnaWdvLmdlby50YXJnZXRIdG1sVXJsJyB8IHRyYW5zbGF0ZSB9fSA8L3NwYW4+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtblJlbmRlcmVyID09PSBlbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLkljb25cIj5cclxuICAgICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJlY29yZFwiIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwie3tnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbil8fCBjb2x1bW4uaWNvbn19XCIgKGNsaWNrKT1cImNvbHVtbi5vbkNsaWNrKCRldmVudClcIj48L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5SZW5kZXJlciA9PT0gZW50aXR5VGFibGVDb2x1bW5SZW5kZXJlci5CdXR0b25Hcm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICptYXRDZWxsRGVmPVwibGV0IHJlY29yZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGdldFZhbHVlKHJlY29yZCwgY29sdW1uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNFZGl0aW9uKHJlY29yZCkgPT09IGJ1dHRvbi5lZGl0TW9kZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImJ1dHRvbi5zdHlsZSA9PT0gJ21hdC1pY29uLWJ1dHRvbidcIiBpZ29TdG9wUHJvcGFnYXRpb24gbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImJ1dHRvbi5jb2xvclwiIChtb3VzZWRvd24pPVwib25CdXR0b25DbGljayhidXR0b24uY2xpY2ssIHJlY29yZClcIiBbZGlzYWJsZWRdPVwiYnV0dG9uLmRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJ7e2J1dHRvbi5pY29ufX1cIj48L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiYnV0dG9uLnN0eWxlICE9PSAnbWF0LWljb24tYnV0dG9uJ1wiIGlnb1N0b3BQcm9wYWdhdGlvbiBtYXQtbWluaS1mYWJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiYnV0dG9uLmNvbG9yXCIgKG1vdXNlZG93bik9XCJvbkJ1dHRvbkNsaWNrKGJ1dHRvbi5jbGljaywgcmVjb3JkKVwiIFtkaXNhYmxlZF09XCJidXR0b24uZGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cInt7YnV0dG9uLmljb259fVwiPjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImhlYWRlcnM7IHN0aWNreTogZml4ZWRIZWFkZXI7XCIgW25nQ2xhc3NdPVwiZ2V0SGVhZGVyQ2xhc3MoKVwiPlxyXG4gICAgICA8L3RyPlxyXG4gICAgICA8dHIgbWF0LXJvdyBpZ29FbnRpdHlUYWJsZVJvdyAqbWF0Um93RGVmPVwibGV0IHJlY29yZDsgY29sdW1uczogaGVhZGVycztcIiBbc2Nyb2xsQmVoYXZpb3JdPVwic2Nyb2xsQmVoYXZpb3JcIiBbbmdDbGFzc109XCJnZXRSb3dDbGFzcyhyZWNvcmQpXCIgW3NlbGVjdGlvbl09XCJzZWxlY3Rpb25cIiBbc2VsZWN0ZWRdPVwicm93SXNTZWxlY3RlZChyZWNvcmQpXCIgKHNlbGVjdCk9XCJvblJvd1NlbGVjdChyZWNvcmQpXCIgKGNsaWNrKT1cIm9uUm93Q2xpY2socmVjb3JkKVwiPlxyXG4gICAgICA8L3RyPlxyXG4gIDwvdGFibGU+XHJcbiAgPGlnby1lbnRpdHktdGFibGUtcGFnaW5hdG9yICpuZ0lmPVwid2l0aFBhZ2luYXRvclwiIFtzdG9yZV09XCJzdG9yZVwiIFtwYWdpbmF0b3JPcHRpb25zXT1cInBhZ2luYXRvck9wdGlvbnNcIiBbZW50aXR5U29ydENoYW5nZSRdPVwiZW50aXR5U29ydENoYW5nZSRcIiAocGFnaW5hdG9yQ2hhbmdlKT1cInBhZ2luYXRvckNoYW5nZSgkZXZlbnQpXCI+XHJcbiAgPC9pZ28tZW50aXR5LXRhYmxlLXBhZ2luYXRvcj5cclxuPC9kaXY+Il19
|
|
1364
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvbGliL2VudGl0eS9lbnRpdHktdGFibGUvZW50aXR5LXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvbGliL2VudGl0eS9lbnRpdHktdGFibGUvZW50aXR5LXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osdUJBQXVCLEVBT3ZCLFFBQVEsRUFDUixJQUFJLEVBQ0wsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBRWpFLE9BQU8sRUFPTCx5QkFBeUIsRUFDekIseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUMxQixNQUFNLFdBQVcsQ0FBQztBQUVuQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQTBELGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHMUcsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLElBQUksTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDaEN6Qiw2QkFBZ0U7SUFDNUQsd0NBQ29FO0lBRHRELDhNQUFVLGVBQUEsbUNBQTRCLENBQUEsSUFBQztJQUVyRCxpQkFBZTtJQUNuQiwwQkFBZTs7OztJQUgyQyxlQUE0RDtJQUE1RCxvRkFBNEQsOEVBQUE7OztJQUYxSCw2QkFBaUM7SUFDN0Is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LGVBQTJCO1FBQTNCLDZDQUEyQiw4QkFBQSxxQ0FBQTtRQW1CYyxlQUFtQjtRQUFuQiw4Q0FBbUI7UUFnSTdELGVBQTBCO1FBQTFCLDZDQUEwQiwwQ0FBQTtRQUVRLGVBQWlCO1FBQWpCLDhDQUFpQjtRQUc5QyxlQUFtQjtRQUFuQix3Q0FBbUI7O3VGRDNHckMsb0JBQW9CO2NBUGhDLFNBQVM7MkJBQ0Usa0JBQWtCLG1CQUdYLHVCQUF1QixDQUFDLE1BQU0sYUFDcEMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLHNCQUFzQixFQUFFLENBQUM7O3NCQStKN0UsUUFBUTs7c0JBQUksSUFBSTs7c0JBQ2hCLFFBQVE7O3NCQUNSLFFBQVE7a0ZBakhGLEtBQUs7a0JBQWIsS0FBSztZQUtPLFNBQVM7a0JBQXJCLEtBQUs7WUFhRyxRQUFRO2tCQUFoQixLQUFLO1lBTU4sY0FBYztrQkFEYixLQUFLO1lBT04sY0FBYztrQkFEYixLQUFLO1lBT04sYUFBYTtrQkFEWixLQUFLO1lBT04sZ0JBQWdCO2tCQURmLEtBQUs7WUFNSSxXQUFXO2tCQUFwQixNQUFNO1lBS0csa0JBQWtCO2tCQUEzQixNQUFNO1lBT0csZ0JBQWdCO2tCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgT25Jbml0LFxuICBPbkRlc3Ryb3ksXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgRWxlbWVudFJlZixcbiAgT3B0aW9uYWwsXG4gIFNlbGZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7XG4gIEVudGl0eUtleSxcbiAgRW50aXR5UmVjb3JkLFxuICBFbnRpdHlTdGF0ZSxcbiAgRW50aXR5U3RvcmUsXG4gIEVudGl0eVRhYmxlVGVtcGxhdGUsXG4gIEVudGl0eVRhYmxlQ29sdW1uLFxuICBFbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLFxuICBFbnRpdHlUYWJsZVNlbGVjdGlvblN0YXRlLFxuICBFbnRpdHlUYWJsZVNjcm9sbEJlaGF2aW9yXG59IGZyb20gJy4uL3NoYXJlZCc7XG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgRW50aXR5VGFibGVQYWdpbmF0b3JPcHRpb25zIH0gZnJvbSAnLi4vZW50aXR5LXRhYmxlLXBhZ2luYXRvci9lbnRpdHktdGFibGUtcGFnaW5hdG9yLmludGVyZmFjZSc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUJ1aWxkZXIsIE5nQ29udHJvbCwgTmdGb3JtLCBGb3JtQ29udHJvbE5hbWUsIFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGb2N1c01vbml0b3IgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBEYXRlQWRhcHRlciwgRXJyb3JTdGF0ZU1hdGNoZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGRlZmF1bHQgYXMgbW9tZW50IH0gZnJvbSAnbW9tZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaWdvLWVudGl0eS10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9lbnRpdHktdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9lbnRpdHktdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTWF0Rm9ybUZpZWxkQ29udHJvbCwgdXNlRXhpc3Rpbmc6IEVudGl0eVRhYmxlQ29tcG9uZW50IH1dXG59KVxuZXhwb3J0IGNsYXNzIEVudGl0eVRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG5cbiAgZW50aXR5U29ydENoYW5nZSQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gIHB1YmxpYyBmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXAgPSBuZXcgVW50eXBlZEZvcm1Hcm91cCh7fSk7XG5cbiAgcHVibGljIGZpbHRlcmVkT3B0aW9ucyA9IHt9O1xuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgdG8gdGhlIGNvbHVtbiByZW5kZXJlciB0eXBlc1xuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIgPSBFbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyO1xuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgdG8gdGhlIHNlbGVjdGlvbidzIHN0YXRlXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW50aXR5VGFibGVTZWxlY3Rpb25TdGF0ZSA9IEVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGU7XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgb2YgdGhlIHNlbGVjdGlvbixzIHN0YXRlXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcmVhZG9ubHkgc2VsZWN0aW9uU3RhdGUkOiBCZWhhdmlvclN1YmplY3Q8RW50aXR5VGFibGVTZWxlY3Rpb25TdGF0ZT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XG5cbiAgLyoqXG4gICAqIFN1YnNjcmlwdGlvbiB0byB0aGUgc3RvcmUncyBzZWxlY3Rpb25cbiAgICovXG4gIHByaXZhdGUgc2VsZWN0aW9uJCQ6IFN1YnNjcmlwdGlvbjtcblxuICAvKipcbiAgICogU3Vic2NyaXB0aW9uIHRvIHRoZSBkYXRhU291cmNlXG4gICAqL1xuICBwcml2YXRlIGRhdGFTb3VyY2UkJDogU3Vic2NyaXB0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgbGFzdCByZWNvcmQgY2hlY2tlZC4gVXNlZnVsIGZvciBzZWxlY3RpbmdcbiAgICogbXVsdGlwbGUgcmVjb3JkcyBieSBob2xkaW5nIHRoZSBzaGlmdCBrZXkgYW5kIGNoZWNraW5nXG4gICAqIGNoZWNrYm94ZXMuXG4gICAqL1xuICBwcml2YXRlIGxhc3RSZWNvcmRDaGVja2VkS2V5OiBFbnRpdHlLZXk7XG5cbiAgLyoqXG4gICAqIEVudGl0eSBzdG9yZVxuICAgKi9cbiAgQElucHV0KCkgc3RvcmU6IEVudGl0eVN0b3JlPG9iamVjdD47XG5cbiAgLyoqXG4gICAqIFRhYmxlIHBhZ2luYXRvclxuICAgKi9cbiAgQElucHV0KCkgc2V0IHBhZ2luYXRvcih2YWx1ZTogTWF0UGFnaW5hdG9yKSB7XG4gICAgdGhpcy5fcGFnaW5hdG9yID0gdmFsdWU7XG4gICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvciA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHBhZ2luYXRvcigpOiBNYXRQYWdpbmF0b3Ige1xuICAgIHJldHVybiB0aGlzLl9wYWdpbmF0b3I7XG4gIH1cbiAgcHJpdmF0ZSBfcGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XG5cbiAgLyoqXG4gICAqIFRhYmxlIHRlbXBsYXRlXG4gICAqL1xuICBASW5wdXQoKSB0ZW1wbGF0ZTogRW50aXR5VGFibGVUZW1wbGF0ZTtcblxuICAvKipcbiAgICogU2Nyb2xsIGJlaGF2aW9yIG9uIHNlbGVjdGlvblxuICAgKi9cbiAgQElucHV0KClcbiAgc2Nyb2xsQmVoYXZpb3I6IEVudGl0eVRhYmxlU2Nyb2xsQmVoYXZpb3IgPSBFbnRpdHlUYWJsZVNjcm9sbEJlaGF2aW9yLkF1dG87XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgbnVsbHMgc2hvdWxkIGJlIGZpcnN0IHdoZW4gc29ydGluZ1xuICAgKi9cbiAgQElucHV0KClcbiAgc29ydE51bGxzRmlyc3Q6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogU2hvdyB0aGUgdGFibGUgcGFnaW5hdG9yIG9yIG5vdC4gRmFsc2UgYnkgZGVmYXVsdC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHdpdGhQYWdpbmF0b3I6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogUGFnaW5hdG9yIG9wdGlvbnNcbiAgICovXG4gIEBJbnB1dCgpXG4gIHBhZ2luYXRvck9wdGlvbnM6IEVudGl0eVRhYmxlUGFnaW5hdG9yT3B0aW9ucztcblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIGFuIGVudGl0eSAocm93KSBpcyBjbGlja2VkXG4gICAqL1xuICBAT3V0cHV0KCkgZW50aXR5Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPG9iamVjdD4oKTtcblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIGFuIGVudGl0eSAocm93KSBpcyBzZWxlY3RlZFxuICAgKi9cbiAgQE91dHB1dCgpIGVudGl0eVNlbGVjdENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIGFkZGVkOiBvYmplY3RbXTtcbiAgfT4oKTtcblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSB0YWJsZSBzb3J0IGlzIGNoYW5nZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgZW50aXR5U29ydENoYW5nZTogRXZlbnRFbWl0dGVyPHtjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uLCBkaXJlY3Rpb246IHN0cmluZ30+ID0gbmV3IEV2ZW50RW1pdHRlcih1bmRlZmluZWQpO1xuXG4gIC8qKlxuICAgKiBUYWJsZSBoZWFkZXJzXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0IGhlYWRlcnMoKTogc3RyaW5nW10ge1xuICAgIGxldCBjb2x1bW5zID0gdGhpcy50ZW1wbGF0ZS5jb2x1bW5zXG4gICAgICAuZmlsdGVyKChjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uKSA9PiBjb2x1bW4udmlzaWJsZSAhPT0gZmFsc2UpXG4gICAgICAubWFwKChjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uKSA9PiBjb2x1bW4ubmFtZSk7XG5cbiAgICBpZiAodGhpcy5zZWxlY3Rpb25DaGVja2JveCA9PT0gdHJ1ZSkge1xuICAgICAgY29sdW1ucyA9IFsnc2VsZWN0aW9uQ2hlY2tib3gnXS5jb25jYXQoY29sdW1ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbHVtbnM7XG4gIH1cblxuICAvKipcbiAgICogRGF0YSBzb3VyY2UgY29uc3VtYWJsZSBieSB0aGUgdW5kZXJseWluZyBtYXRlcmlhbCB0YWJsZVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlPG9iamVjdD4oKTtcblxuICAvKipcbiAgICogV2hldGhlciBzZWxlY3Rpb24gaXMgc3VwcG9ydGVkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0IHNlbGVjdGlvbigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudGVtcGxhdGUuc2VsZWN0aW9uIHx8IGZhbHNlOyB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYSBzZWxlY3Rpb24gY2hlY2tib3ggc2hvdWxkIGJlIGRpc3BsYXllZFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldCBzZWxlY3Rpb25DaGVja2JveCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudGVtcGxhdGUuc2VsZWN0aW9uQ2hlY2tib3ggfHwgZmFsc2U7IH1cblxuICAvKipcbiAgICogV2hldGhlciBzZWxlY3Rpb24gbWFueSBlbnRpdGllcyBzaG91bGQgZWIgc3VwcG9ydGVkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0IHNlbGVjdE1hbnkoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnRlbXBsYXRlLnNlbGVjdE1hbnkgfHwgZmFsc2U7IH1cblxuICAvKipcbiAgICogV2hldGhlciBzZWxlY3Rpb24gbWFueSBlbnRpdGllcyBzaG91bGQgZWIgc3VwcG9ydGVkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0IGZpeGVkSGVhZGVyKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy50ZW1wbGF0ZS5maXhlZEhlYWRlciA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHRoaXMudGVtcGxhdGUuZml4ZWRIZWFkZXI7IH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gICAgcHJvdGVjdGVkIF9mb2N1c01vbml0b3I6IEZvY3VzTW9uaXRvcixcbiAgICBwcm90ZWN0ZWQgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIG5nQ29udHJvbDogTmdDb250cm9sLFxuICAgIEBPcHRpb25hbCgpIHByb3RlY3RlZCBfcGFyZW50Rm9ybTogTmdGb3JtLFxuICAgIEBPcHRpb25hbCgpIHByb3RlY3RlZCBfY29udHJvbE5hbWU6IEZvcm1Db250cm9sTmFtZSxcbiAgICBwcm90ZWN0ZWQgX2RlZmF1bHRFcnJvclN0YXRlTWF0Y2hlcjogRXJyb3JTdGF0ZU1hdGNoZXIsXG4gICAgcHJpdmF0ZSBkYXRlQWRhcHRlcjogRGF0ZUFkYXB0ZXI8RGF0ZT5cbiAgKSB7XG4gICAgdGhpcy5kYXRlQWRhcHRlci5zZXRMb2NhbGUoJ2ZyLUNBJyk7XG4gIH1cblxuICAvKipcbiAgICogVHJhY2sgdGhlIHNlbGVjdGlvbiBzdGF0ZSB0byBwcm9wZXJseSBkaXNwbGF5IHRoZSBzZWxlY3Rpb24gY2hlY2tib3hlc1xuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaGFuZGxlRGF0YXNvdXJjZSgpO1xuICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLnBhZ2luYXRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBjb25zdCBzdG9yZSA9IGNoYW5nZXMuc3RvcmU7XG4gICAgaWYgKHN0b3JlICYmIHN0b3JlLmN1cnJlbnRWYWx1ZSAhPT0gc3RvcmUucHJldmlvdXNWYWx1ZSkge1xuICAgICAgdGhpcy5oYW5kbGVEYXRhc291cmNlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgdGV4dCBvciBudW1iZXIgdmFsdWUgY2hhbmdlIChlZGl0aW9uKVxuICAgKi9cbiAgb25WYWx1ZUNoYW5nZShjb2x1bW46IHN0cmluZywgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8YW55PiwgZXZlbnQpIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbik7XG4gICAgcmVjb3JkLmVudGl0eS5wcm9wZXJ0aWVzW2tleV0gPSBldmVudC50YXJnZXQudmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyBib29sZWFuIHZhbHVlIGNoYW5nZSAoZWRpdGlvbilcbiAgICovXG4gIG9uQm9vbGVhblZhbHVlQ2hhbmdlKGNvbHVtbjogc3RyaW5nLCByZWNvcmQ6IEVudGl0eVJlY29yZDxhbnk+LCBldmVudCkge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uKTtcbiAgICByZWNvcmQuZW50aXR5LnByb3BlcnRpZXNba2V5XSA9IGV2ZW50LmNoZWNrZWQ7XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyBzZWxlY3QgdmFsdWUgY2hhbmdlIChlZGl0aW9uKVxuICAgKi9cbiAgb25TZWxlY3RWYWx1ZUNoYW5nZShjb2x1bW46IHN0cmluZywgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8YW55PiwgZXZlbnQpIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbik7XG4gICAgcmVjb3JkLmVudGl0eS5wcm9wZXJ0aWVzW2tleV0gPSBldmVudC52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIGF1dG9jb21wbGV0ZSB2YWx1ZSBjaGFuZ2UgKGVkaXRpb24pXG4gICAqL1xuICBvbkF1dG9jb21wbGV0ZVZhbHVlQ2hhbmdlKGNvbHVtbjogRW50aXR5VGFibGVDb2x1bW4sIHJlY29yZDogRW50aXR5UmVjb3JkPGFueT4sIGV2ZW50KSB7XG4gICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbY29sdW1uLm5hbWVdLnNldFZhbHVlKGV2ZW50Lm9wdGlvbi52aWV3VmFsdWUpO1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uLm5hbWUpO1xuICAgIHJlY29yZC5lbnRpdHkucHJvcGVydGllc1trZXldID0gZXZlbnQub3B0aW9uLnZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgZGF0ZSB2YWx1ZSBjaGFuZ2UgKGVkaXRpb24pXG4gICAqL1xuICBvbkRhdGVDaGFuZ2UoY29sdW1uOiBzdHJpbmcsIHJlY29yZDogRW50aXR5UmVjb3JkPGFueT4sIGV2ZW50KSB7XG4gICAgY29uc3QgZm9ybWF0ID0gXCJZWVlZLU1NLUREXCI7XG4gICAgY29uc3QgdmFsdWUgPSBtb21lbnQoZXZlbnQudmFsdWUpLmZvcm1hdChmb3JtYXQpO1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uKTtcbiAgICByZWNvcmQuZW50aXR5LnByb3BlcnRpZXNba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBlZGl0aW9uIG1vZGUgZm9yIG9uZSByb3dcbiAgICogTW9yZSB0aGFuIG9uZSByb3cgY2FuIGJlIGVkaXRlZCBhdCB0aGUgc2FtZSB0aW1lXG4gICAqL1xuICBwcml2YXRlIGVuYWJsZUVkaXQocmVjb3JkOiBFbnRpdHlSZWNvcmQ8YW55Pikge1xuICAgIGNvbnN0IGl0ZW0gPSByZWNvcmQuZW50aXR5LnByb3BlcnRpZXMgfHwgcmVjb3JkLmVudGl0eTtcbiAgICB0aGlzLnRlbXBsYXRlLmNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgICAgY29sdW1uLnRpdGxlID0gY29sdW1uLnZhbGlkYXRpb24/Lm1hbmRhdG9yeSAmJiAhY29sdW1uLnRpdGxlLmluY2x1ZGVzKCcqJykgPyBjb2x1bW4udGl0bGUgKyAnIConIDogY29sdW1uLnRpdGxlO1xuXG4gICAgICBjb25zdCBrZXkgPSB0aGlzLmdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbi5uYW1lKTtcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGlmICghaXRlbVtrZXldIHx8IGl0ZW1ba2V5XSA9PT0gbnVsbCkge1xuICAgICAgICAgIGl0ZW1ba2V5XSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtW2tleV0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgaXRlbVtrZXldID0gSlNPTi5wYXJzZShpdGVtW2tleV0udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuc2V0Q29udHJvbChjb2x1bW4ubmFtZSwgdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKFxuICAgICAgICAgIGl0ZW1ba2V5XVxuICAgICAgICApKTtcbiAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdsaXN0Jykge1xuICAgICAgICBpZiAoY29sdW1uLm11bHRpcGxlKSB7XG4gICAgICAgICAgdGhpcy5mb3JtR3JvdXAuc2V0Q29udHJvbChjb2x1bW4ubmFtZSwgdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKFxuICAgICAgICAgICAgW2l0ZW1ba2V5XV1cbiAgICAgICAgICApKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5zZXRDb250cm9sKGNvbHVtbi5uYW1lLCB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2woXG4gICAgICAgICAgICBpdGVtW2tleV1cbiAgICAgICAgICApKTtcblxuICAgICAgICAgIHR5cGVvZiBpdGVtW2tleV0gPT09ICdzdHJpbmcnID9cbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5uYW1lXS5zZXRWYWx1ZShwYXJzZUludChpdGVtW2tleV0pKSA6XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb2x1bW4ubmFtZV0uc2V0VmFsdWUoaXRlbVtrZXldKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2F1dG9jb21wbGV0ZScpIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuc2V0Q29udHJvbChjb2x1bW4ubmFtZSwgdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKFxuICAgICAgICAgIGl0ZW1ba2V5XVxuICAgICAgICApKTtcblxuICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9uc1tjb2x1bW4ubmFtZV0gPSBuZXcgT2JzZXJ2YWJsZTxhbnlbXT4oKTtcbiAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnNbY29sdW1uLm5hbWVdID1cbiAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb2x1bW4ubmFtZV0udmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICBtYXAodmFsdWUgPT4ge1xuICAgICAgICAgICAgICBpZiAodmFsdWU/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb2x1bW4uZG9tYWluVmFsdWVzPy5maWx0ZXIoKG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyTm9ybWFsaXplZCA9IHZhbHVlID8gdmFsdWUudG9Mb3dlckNhc2UoKS5ub3JtYWxpemUoJ05GRCcpLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKSA6ICcnO1xuICAgICAgICAgICAgICAgICAgY29uc3QgZmVhdHVyZU5hbWVOb3JtYWxpemVkID0gb3B0aW9uLnZhbHVlLnRvTG93ZXJDYXNlKCkubm9ybWFsaXplKCdORkQnKS5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmVhdHVyZU5hbWVOb3JtYWxpemVkLmluY2x1ZGVzKGZpbHRlck5vcm1hbGl6ZWQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG5cbiAgICAgICAgbGV0IGZvcm1Db250cm9sVmFsdWUgPSBpdGVtW2tleV07XG4gICAgICAgIGNvbHVtbi5kb21haW5WYWx1ZXMuZm9yRWFjaChvcHRpb24gPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgZm9ybUNvbnRyb2xWYWx1ZSA9PT0gJ3N0cmluZycgJiYgL15cXGQrJC8udGVzdChmb3JtQ29udHJvbFZhbHVlKSkge1xuICAgICAgICAgICAgZm9ybUNvbnRyb2xWYWx1ZSA9IHBhcnNlSW50KGZvcm1Db250cm9sVmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob3B0aW9uLnZhbHVlID09PSBmb3JtQ29udHJvbFZhbHVlIHx8IG9wdGlvbi5pZCA9PT0gZm9ybUNvbnRyb2xWYWx1ZSkge1xuICAgICAgICAgICAgZm9ybUNvbnRyb2xWYWx1ZSA9IG9wdGlvbi52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5uYW1lXS5zZXRWYWx1ZShmb3JtQ29udHJvbFZhbHVlKTtcbiAgICAgICAgaWYgKHRoaXMuaXNFZGl0aW9uKHJlY29yZCkgJiYgY29sdW1uLmxpbmtDb2x1bW5Gb3JjZSkge1xuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHkgYXMgYW55O1xuICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5uYW1lXS5zZXRWYWx1ZShcbiAgICAgICAgICAgIGVudGl0eT8ucHJvcGVydGllc1t0aGlzLmdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbi5saW5rQ29sdW1uRm9yY2UpXVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdkYXRlJykge1xuICAgICAgICBpZiAoY29sdW1uLnZpc2libGUpIHtcbiAgICAgICAgICBpZiAoaXRlbVtrZXldKSB7XG4gICAgICAgICAgICBsZXQgZGF0ZSA9IG1vbWVudChpdGVtW2tleV0pO1xuICAgICAgICAgICAgaXRlbVtrZXldID0gZGF0ZS51dGMoKS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnNldENvbnRyb2woY29sdW1uLm5hbWUsIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChcbiAgICAgICAgICAgICAgaXRlbVtrZXldXG4gICAgICAgICAgICApKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbmV3S2V5ID0gdGhpcy5nZXRDb2x1bW5LZXlXaXRob3V0UHJvcGVydGllc1RhZyhjb2x1bW4ubmFtZSk7XG4gICAgICAgICAgICByZWNvcmQuZW50aXR5LnByb3BlcnRpZXNbbmV3S2V5XSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5zZXRDb250cm9sKGNvbHVtbi5uYW1lLCB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2woXG4gICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuc2V0Q29udHJvbChjb2x1bW4ubmFtZSwgdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKFxuICAgICAgICAgIGl0ZW1ba2V5XVxuICAgICAgICApKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5uYW1lXSAmJiB0aGlzLmdldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdyZWFkb25seScpKSB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5uYW1lXS5kaXNhYmxlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZURhdGFzb3VyY2UoKSB7XG4gICAgdGhpcy51bnN1YnNjcmliZVN0b3JlKCk7XG4gICAgdGhpcy5zZWxlY3Rpb24kJCA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3XG4gICAgICAubWFueUJ5JCgocmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PikgPT4gcmVjb3JkLnN0YXRlLnNlbGVjdGVkID09PSB0cnVlKVxuICAgICAgLnN1YnNjcmliZSgocmVjb3JkczogRW50aXR5UmVjb3JkPG9iamVjdD5bXSkgPT4ge1xuICAgICAgICBjb25zdCBmaXJzdFNlbGVjdGVkID0gcmVjb3Jkc1swXTtcbiAgICAgICAgY29uc3QgZmlyc3RTZWxlY3RlZFN0YXRldmlld1Bvc2l0aW9uID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuYWxsKCkuaW5kZXhPZihmaXJzdFNlbGVjdGVkKTtcbiAgICAgICAgY29uc3QgcGFnZU1heCA9IHRoaXMucGFnaW5hdG9yID8gdGhpcy5wYWdpbmF0b3IucGFnZVNpemUgKiAodGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ICsgMSkgOiAwO1xuICAgICAgICBjb25zdCBwYWdlTWluID0gdGhpcy5wYWdpbmF0b3IgPyBwYWdlTWF4IC0gdGhpcy5wYWdpbmF0b3IucGFnZVNpemUgOiAwO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLnBhZ2luYXRvciAmJlxuICAgICAgICAgIChmaXJzdFNlbGVjdGVkU3RhdGV2aWV3UG9zaXRpb24gPCBwYWdlTWluIHx8XG4gICAgICAgICAgZmlyc3RTZWxlY3RlZFN0YXRldmlld1Bvc2l0aW9uID49IHBhZ2VNYXgpKSB7XG4gICAgICAgICAgY29uc3QgcGFnZVRvUmVhY2ggPSBNYXRoLmZsb29yKGZpcnN0U2VsZWN0ZWRTdGF0ZXZpZXdQb3NpdGlvbiAvIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplKTtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yLnBhZ2VJbmRleCA9IHBhZ2VUb1JlYWNoO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUkLm5leHQodGhpcy5jb21wdXRlU2VsZWN0aW9uU3RhdGUocmVjb3JkcykpO1xuICAgICAgfSk7XG4gICAgdGhpcy5kYXRhU291cmNlJCQgPSB0aGlzLnN0b3JlLnN0YXRlVmlldy5hbGwkKCkuc3Vic2NyaWJlKChhbGwpID0+IHtcbiAgICAgIGlmIChhbGxbMF0pIHtcbiAgICAgICAgdGhpcy5lbmFibGVFZGl0KGFsbFswXSk7XG4gICAgICB9XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGFsbDtcbiAgICB9KTtcblxuICB9XG5cbiAgLyoqXG4gICAqIFVuYmluZCB0aGUgc3RvcmUgd2F0Y2hlclxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMudW5zdWJzY3JpYmVTdG9yZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1bnN1YnNjcmliZVN0b3JlKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbiQkKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbiQkLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UkJCkge1xuICAgICAgdGhpcy5kYXRhU291cmNlJCQudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVHJhY2tieSBmdW5jdGlvblxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxuICAgKiBAcGFyYW0gaW5kZXggUmVjb3JkIGluZGV4XG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0VHJhY2tCeUZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAoaW5kZXg6IG51bWJlciwgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0LCBFbnRpdHlTdGF0ZT4pID0+IHtcbiAgICAgIHJldHVybiByZWNvcmQucmVmO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlciBhIHJlZnJlc2ggb2YgdGhyZSB0YWJsZS4gVGhpcyBjYW4gYmUgdXNlZnVsIHdoZW5cbiAgICogdGhlIGRhdGEgc291cmNlIGRvZXNuJ3QgZW1pdCBhIG5ldyB2YWx1ZSBidXQgZm9yIHNvbWUgcmVhc29uXG4gICAqIHRoZSByZWNvcmRzIG5lZWQgYW4gdXBkYXRlLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHJlZnJlc2goKSB7XG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwYWdpbmF0b3JDaGFuZ2UoZXZlbnQ6IE1hdFBhZ2luYXRvcikge1xuICAgIHRoaXMucGFnaW5hdG9yID0gZXZlbnQ7XG4gIH1cblxuICAvKipcbiAgICogT24gc29ydCwgc29ydCB0aGUgc3RvcmVcbiAgICogQHBhcmFtIGV2ZW50IFNvcnQgZXZlbnRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBvblNvcnQoZXZlbnQ6IHthY3RpdmU6IHN0cmluZywgZGlyZWN0aW9uOiBzdHJpbmd9KSB7XG4gICAgY29uc3QgZGlyZWN0aW9uID0gZXZlbnQuZGlyZWN0aW9uO1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMudGVtcGxhdGUuY29sdW1uc1xuICAgICAgLmZpbmQoKGM6IEVudGl0eVRhYmxlQ29sdW1uKSA9PiBjLm5hbWUgPT09IGV2ZW50LmFjdGl2ZSk7XG5cbiAgICBpZiAoZGlyZWN0aW9uID09PSAnYXNjJyB8fCBkaXJlY3Rpb24gPT09ICdkZXNjJykge1xuICAgICAgdGhpcy5zdG9yZS5zdGF0ZVZpZXcuc29ydCh7XG4gICAgICAgIHZhbHVlQWNjZXNzb3I6IChyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KSA9PiB0aGlzLmdldFZhbHVlKHJlY29yZCwgY29sdW1uKSxcbiAgICAgICAgZGlyZWN0aW9uLFxuICAgICAgICBudWxsc0ZpcnN0OiB0aGlzLnNvcnROdWxsc0ZpcnN0XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZW50aXR5U29ydENoYW5nZS5lbWl0KHtjb2x1bW4sIGRpcmVjdGlvbn0pO1xuICAgICAgdGhpcy5lbnRpdHlTb3J0Q2hhbmdlJC5uZXh0KHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0b3JlLnN0YXRlVmlldy5zb3J0KHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gYW4gZW50aXR5IGlzIGNsaWNrZWQsIGVtaXQgYW4gZXZlbnRcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBvblJvd0NsaWNrKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pIHtcbiAgICB0aGlzLmxhc3RSZWNvcmRDaGVja2VkS2V5ID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuZ2V0S2V5KHJlY29yZCk7XG4gICAgdGhpcy5lbnRpdHlDbGljay5lbWl0KHJlY29yZC5lbnRpdHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gYW4gZW50aXR5IGlzIHNlbGVjdGVkLCBzZWxlY3QgaXQgaW4gdGhlIHN0b3JlIGFuZCBlbWl0IGFuIGV2ZW50LiBFdmVuIGlmXG4gICAqIFwibWFueVwiIGlzIHNldCB0byB0cnVlLCB0aGlzIG1ldGhvZCBhbHdheXMgc2VsZWN0IGEgc2luZ2xlLCBleGNsdXNpdmUgcm93LiBTZWxlY3RpbmdcbiAgICogbXVsdGlwbGUgcm93cyBzaG91bGQgYmUgYWNoaWV2ZWQgYnkgdXNpbmcgdGhlIGNoZWNrYm94ZXMuXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgb25Sb3dTZWxlY3QocmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0Pikge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbiA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG5cbiAgICBjb25zdCBlbnRpdHkgPSByZWNvcmQuZW50aXR5O1xuICAgIHRoaXMuc3RvcmUuc3RhdGUudXBkYXRlKGVudGl0eSwge3NlbGVjdGVkOiB0cnVlfSwgdHJ1ZSk7XG4gICAgdGhpcy5lbnRpdHlTZWxlY3RDaGFuZ2UuZW1pdCh7YWRkZWQ6IFtlbnRpdHldfSk7XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0IG9yIHVuc2VsZWN0IGFsbCByb3dzIGF0IG9uY2UuIE9uIHNlbGVjdCwgZW1pdCBhbiBldmVudC5cbiAgICogQHBhcmFtIHRvZ2dsZSBTZWxlY3Qgb3IgdW5zZWxlY3RcbiAgICogQGludGVybmFsXG4gICAqL1xuICBvblRvZ2dsZVJvd3ModG9nZ2xlOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uID09PSBmYWxzZSkgeyByZXR1cm47IH1cblxuICAgIHRoaXMuc3RvcmUuc3RhdGUudXBkYXRlQWxsKHtzZWxlY3RlZDogdG9nZ2xlfSk7XG4gICAgaWYgKHRvZ2dsZSA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgZW50aXRpZXMgPSB0aGlzLnN0b3JlLnN0YXRlVmlld1xuICAgICAgICAuYWxsKClcbiAgICAgICAgLm1hcCgocmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PikgPT4gcmVjb3JkLmVudGl0eSk7XG4gICAgICB0aGlzLmVudGl0eVNlbGVjdENoYW5nZS5lbWl0KHthZGRlZDogW2VudGl0aWVzXX0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIGFuIGVudGl0eSBpcyB0b2dnbGVkLCBzZWxlY3Qgb3IgdW5zZWxlY3QgaXQgaW4gdGhlIHN0b3JlLiBPbiBzZWxlY3QsXG4gICAqIGVtaXQgYW4gZXZlbnQuXG4gICAqIEBwYXJhbSB0b2dnbGUgU2VsZWN0IG9yIHVuc2VsZWN0XG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgb25Ub2dnbGVSb3codG9nZ2xlOiBib29sZWFuLCByZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uID09PSBmYWxzZSkgeyByZXR1cm47IH1cblxuICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHk7XG4gICAgY29uc3QgZXhjbHVzaXZlID0gdG9nZ2xlID09PSB0cnVlICYmICF0aGlzLnNlbGVjdE1hbnk7XG4gICAgdGhpcy5zdG9yZS5zdGF0ZS51cGRhdGUoZW50aXR5LCB7c2VsZWN0ZWQ6IHRvZ2dsZX0sIGV4Y2x1c2l2ZSk7XG4gICAgaWYgKHRvZ2dsZSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5lbnRpdHlTZWxlY3RDaGFuZ2UuZW1pdCh7YWRkZWQ6IFtlbnRpdHldfSk7XG4gICAgfVxuICAgIHRoaXMubGFzdFJlY29yZENoZWNrZWRLZXkgPSB0aGlzLnN0b3JlLnN0YXRlVmlldy5nZXRLZXkocmVjb3JkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIGFuIGVudGl0eSBpcyB0b2dnbGVkLCBzZWxlY3Qgb3IgdW5zZWxlY3QgaXQgaW4gdGhlIHN0b3JlLiBPbiBzZWxlY3QsXG4gICAqIGVtaXQgYW4gZXZlbnQuXG4gICAqIEBwYXJhbSB0b2dnbGUgU2VsZWN0IG9yIHVuc2VsZWN0XG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgb25TaGlmdFRvZ2dsZVJvdyh0b2dnbGU6IGJvb2xlYW4sIHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4sIGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uID09PSBmYWxzZSkgeyByZXR1cm47IH1cblxuICAgIGlmICh0aGlzLnNlbGVjdE1hbnkgPT09IGZhbHNlIHx8IHRoaXMubGFzdFJlY29yZENoZWNrZWRLZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5vblRvZ2dsZVJvdyh0b2dnbGUsIHJlY29yZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyBhIHdvcmthcm91bmQgbWF0IGNoZWNrYm94IHdyb25nIGJlaGF2aW9yXG4gICAgLy8gd2hlbiB0aGUgc2hpZnQga2V5IGlzIGhlbGQuXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvaXNzdWVzLzYyMzJcbiAgICBjb25zdCByYW5nZSA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgIHJhbmdlLnNlbGVjdE5vZGUoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgd2luZG93LmdldFNlbGVjdGlvbigpLmFkZFJhbmdlKHJhbmdlKTtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblxuICAgIGNvbnN0IHJlY29yZHMgPSB0aGlzLnN0b3JlLnN0YXRlVmlldy5hbGwoKTtcbiAgICBjb25zdCByZWNvcmRJbmRleCA9IHJlY29yZHMuaW5kZXhPZihyZWNvcmQpO1xuICAgIGNvbnN0IGxhc3RSZWNvcmRDaGVja2VkID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuZ2V0KHRoaXMubGFzdFJlY29yZENoZWNrZWRLZXkpO1xuICAgIGNvbnN0IGxhc3RSZWNvcmRJbmRleCA9IHJlY29yZHMuaW5kZXhPZihsYXN0UmVjb3JkQ2hlY2tlZCk7XG4gICAgY29uc3QgaW5kZXhlcyA9IFtyZWNvcmRJbmRleCwgbGFzdFJlY29yZEluZGV4XTtcbiAgICBjb25zdCBzZWxlY3RSZWNvcmRzID0gcmVjb3Jkcy5zbGljZShNYXRoLm1pbiguLi5pbmRleGVzKSwgTWF0aC5tYXgoLi4uaW5kZXhlcykgKyAxKTtcblxuICAgIGNvbnN0IGVudGl0aWVzID0gc2VsZWN0UmVjb3Jkcy5tYXAoKF9yZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KSA9PiBfcmVjb3JkLmVudGl0eSk7XG4gICAgdGhpcy5zdG9yZS5zdGF0ZS51cGRhdGVNYW55KGVudGl0aWVzLCB7c2VsZWN0ZWQ6IHRvZ2dsZX0pO1xuICAgIGlmICh0b2dnbGUgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuZW50aXR5U2VsZWN0Q2hhbmdlLmVtaXQoe2FkZGVkOiBlbnRpdGllc30pO1xuICAgIH1cbiAgICB0aGlzLmxhc3RSZWNvcmRDaGVja2VkS2V5ID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuZ2V0S2V5KHJlY29yZCk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgc2VsZWN0aW9uIHN0YXRlXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgYWxsLCBzb21lIG9yIG5vIHJvd3MgYXJlIHNlbGVjdGVkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSBjb21wdXRlU2VsZWN0aW9uU3RhdGUoc2VsZWN0ZWRSZWNvcmRzOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PltdKTogRW50aXR5VGFibGVTZWxlY3Rpb25TdGF0ZSB7XG4gICAgY29uc3Qgc3RhdGVzID0gRW50aXR5VGFibGVTZWxlY3Rpb25TdGF0ZTtcbiAgICBjb25zdCBzZWxlY3Rpb25Db3VudCA9IHNlbGVjdGVkUmVjb3Jkcy5sZW5ndGg7XG4gICAgcmV0dXJuIHNlbGVjdGlvbkNvdW50ID09PSAwID9cbiAgICAgIHN0YXRlcy5Ob25lIDpcbiAgICAgIChzZWxlY3Rpb25Db3VudCA9PT0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuY291bnQgPyBzdGF0ZXMuQWxsIDogc3RhdGVzLlNvbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYSBjb2x1bW4gaXMgc29ydGFibGVcbiAgICogQHBhcmFtIGNvbHVtbiBDb2x1bW5cbiAgICogQHJldHVybnMgVHJ1ZSBpZiBhIGNvbHVtbiBpcyBzb3J0YWJsZVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGNvbHVtbklzU29ydGFibGUoY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbik6IGJvb2xlYW4ge1xuICAgIGxldCBzb3J0YWJsZSA9IGNvbHVtbi5zb3J0O1xuICAgIGlmIChzb3J0YWJsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzb3J0YWJsZSA9IHRoaXMudGVtcGxhdGUuc29ydCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiB0aGlzLnRlbXBsYXRlLnNvcnQ7XG4gICAgfVxuICAgIHJldHVybiBzb3J0YWJsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGEgcm93IGlzIHNob3VsZCBiZSBzZWxlY3RlZCBiYXNlZCBvbiB0aGUgdW5kZXJseWluZyBlbnRpdHkgc3RhdGVcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcbiAgICogQHJldHVybnMgVHJ1ZSBpZiBhIHJvdyBzaG91bGQgYmUgc2VsZWN0ZWRcbiAgICogQGludGVybmFsXG4gICAqL1xuICByb3dJc1NlbGVjdGVkKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pOiBib29sZWFuIHtcbiAgICBjb25zdCBzdGF0ZSA9IHJlY29yZC5zdGF0ZTtcbiAgICByZXR1cm4gc3RhdGUuc2VsZWN0ZWQgPyBzdGF0ZS5zZWxlY3RlZCA6IGZhbHNlO1xuICB9XG5cbiAgaXNJbWcodmFsdWUpIHtcbiAgICBpZiAodGhpcy5pc1VybCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIFsnanBnJywgJ3BuZycsICdnaWYnXS5pbmRleE9mKHZhbHVlLnNwbGl0KCcuJykucG9wKCkudG9Mb3dlckNhc2UoKSkgIT09IC0xXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaXNVcmwodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdmFsdWUuc2xpY2UoMCwgOCkgPT09ICdodHRwczovLycgfHwgdmFsdWUuc2xpY2UoMCwgNykgPT09ICdodHRwOi8vJ1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdG8gYWNjZXNzIGFuIGVudGl0eSdzIHZhbHVlc1xuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxuICAgKiBAcGFyYW0gY29sdW1uIENvbHVtblxuICAgKiBAcmV0dXJucyBBbnkgdmFsdWVcbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXRWYWx1ZShyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+LCBjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uKTogYW55IHtcbiAgICBjb25zdCBlbnRpdHkgPSByZWNvcmQuZW50aXR5O1xuICAgIGxldCB2YWx1ZTtcbiAgICBpZiAoY29sdW1uLnZhbHVlQWNjZXNzb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGNvbHVtbi52YWx1ZUFjY2Vzc29yKGVudGl0eSwgcmVjb3JkKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGVtcGxhdGUudmFsdWVBY2Nlc3NvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZS52YWx1ZUFjY2Vzc29yKGVudGl0eSwgY29sdW1uLm5hbWUsIHJlY29yZCk7XG4gICAgfVxuICAgIHZhbHVlID0gdGhpcy5zdG9yZS5nZXRQcm9wZXJ0eShlbnRpdHksIGNvbHVtbi5uYW1lKTtcblxuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgdmFsdWUgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlICE9PSAnYm9vbGVhbicgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyl7XG4gICAgICAgICAgdmFsdWUgPSBCb29sZWFuKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZSA9IEpTT04ucGFyc2UodmFsdWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5pc0VkaXRpb24ocmVjb3JkKSl7XG4gICAgICAgIHZhbHVlID0gdmFsdWUgPyAnJiMxMDAwMzsnIDogJyc7IC8vIGNoZWNrIG1hcmtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnbGlzdCcgJiYgdmFsdWUgJiYgY29sdW1uLmRvbWFpblZhbHVlcykge1xuICAgICAgY29uc3QgZW50aXR5ID0gcmVjb3JkLmVudGl0eSBhcyBhbnk7XG4gICAgICBpZiAoY29sdW1uLm11bHRpcGxlKSB7XG4gICAgICAgIGxldCBsaXN0X2lkO1xuICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gbGlzdF9pZCA9IHZhbHVlLm1hdGNoKC9bXFx3Li1dKy9nKS5tYXAoTnVtYmVyKSA6IGxpc3RfaWQgPSB2YWx1ZTtcbiAgICAgICAgbGV0IGxpc3Rfb3B0aW9uID0gW107XG5cbiAgICAgICAgY29sdW1uLmRvbWFpblZhbHVlcy5mb3JFYWNoKG9wdGlvbiA9PiB7XG4gICAgICAgICAgaWYgKGxpc3RfaWQuaW5jbHVkZXMob3B0aW9uLmlkKSkge1xuICAgICAgICAgICAgaWYgKHJlY29yZC5lZGl0aW9uKSB7XG4gICAgICAgICAgICAgIGxpc3Rfb3B0aW9uLnB1c2gob3B0aW9uLmlkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGxpc3Rfb3B0aW9uLnB1c2gob3B0aW9uLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuaXNFZGl0aW9uKHJlY29yZCkgPyB2YWx1ZSA9IGxpc3RfaWQgOiB2YWx1ZSA9IGxpc3Rfb3B0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRWRpdGlvbihyZWNvcmQpICYmIGNvbHVtbi5saW5rQ29sdW1uRm9yY2UpIHtcbiAgICAgICAgICB2YWx1ZSA9IGVudGl0eT8ucHJvcGVydGllc1t0aGlzLmdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbi5saW5rQ29sdW1uRm9yY2UpXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2x1bW4uZG9tYWluVmFsdWVzLmZvckVhY2gob3B0aW9uID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIC9eXFxkKyQvLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbi52YWx1ZSA9PT0gdmFsdWUgfHwgb3B0aW9uLmlkID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgICB0aGlzLmlzRWRpdGlvbihyZWNvcmQpID8gdmFsdWUgPSBvcHRpb24uaWQgOiB2YWx1ZSA9IG9wdGlvbi52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdhdXRvY29tcGxldGUnICYmIHZhbHVlICYmIGNvbHVtbi5kb21haW5WYWx1ZXMpIHtcbiAgICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHkgYXMgYW55O1xuICAgICAgaWYgKCF0aGlzLmlzRWRpdGlvbihyZWNvcmQpICYmIGNvbHVtbi5saW5rQ29sdW1uRm9yY2UpIHtcbiAgICAgICAgdmFsdWUgPSBlbnRpdHk/LnByb3BlcnRpZXNbdGhpcy5nZXRDb2x1bW5LZXlXaXRob3V0UHJvcGVydGllc1RhZyhjb2x1bW4ubGlua0NvbHVtbkZvcmNlKV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2x1bW4uZG9tYWluVmFsdWVzLmZvckVhY2gob3B0aW9uID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAvXlxcZCskLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUludCh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvcHRpb24udmFsdWUgPT09IHZhbHVlIHx8IG9wdGlvbi5pZCA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHZhbHVlID0gb3B0aW9uLnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2RhdGUnKSB7XG4gICAgICBpZiAodGhpcy5pc0VkaXRpb24ocmVjb3JkKSkge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICBsZXQgZGF0ZSA9IG1vbWVudCh2YWx1ZSk7XG4gICAgICAgICAgdmFsdWUgPSBkYXRlLmZvcm1hdCgpO1xuICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5uYW1lXS5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNFZGl0aW9uKHJlY29yZCkgJiYgdmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgdmFsdWUgPSBcIlwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWx1ZSA9ICcnO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdG8gYWNjZXNzIGFuIGVudGl0eSdzIHZhbGlkYXRpb24gdmFsdWVzXG4gICAqIEBwYXJhbSBjb2x1bW4gQ29sdW1uXG4gICAqIEBwYXJhbSB2YWxpZGF0aW9uVHlwZSBzdHJpbmdcbiAgICogQHJldHVybnMgQW55IHZhbHVlIChmYWxzZSBpZiBubyB2YWxpZGF0aW9uIG9yIG5vdCB0aGUgb25lIGNvbmNlcm5lZClcbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXRWYWxpZGF0aW9uQXR0cmlidXRlVmFsdWUoY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbiwgdmFsaWRhdGlvblR5cGU6IHN0cmluZyk6IGFueSB7XG4gICAgaWYgKGNvbHVtbi52YWxpZGF0aW9uICE9PSB1bmRlZmluZWQgJiYgY29sdW1uLnZhbGlkYXRpb25bdmFsaWRhdGlvblR5cGVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBjb2x1bW4udmFsaWRhdGlvblt2YWxpZGF0aW9uVHlwZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNFZGl0aW9uKHJlY29yZCkge1xuICAgIHJldHVybiByZWNvcmQuZW50aXR5LmVkaXRpb24gPyB0cnVlIDogZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSB0eXBlIG9mIHJlbmRlcmVyIG9mIGEgY29sdW1uXG4gICAqIEBwYXJhbSBjb2x1bW4gQ29sdW1uXG4gICAqIEByZXR1cm5zIFJlbmRlcmVyIHR5cGVcbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXRDb2x1bW5SZW5kZXJlcihjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uKTogRW50aXR5VGFibGVDb2x1bW5SZW5kZXJlciB7XG4gICAgaWYgKGNvbHVtbi5yZW5kZXJlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gY29sdW1uLnJlbmRlcmVyO1xuICAgIH1cbiAgICByZXR1cm4gRW50aXR5VGFibGVDb2x1bW5SZW5kZXJlci5EZWZhdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgdGFibGUgbmdDbGFzc1xuICAgKiBAcmV0dXJucyBuZ0NsYXNzXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0VGFibGVDbGFzcygpOiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn0ge1xuICAgIHJldHVybiB7XG4gICAgICAnaWdvLWVudGl0eS10YWJsZS13aXRoLXNlbGVjdGlvbic6IHRoaXMuc2VsZWN0aW9uXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBoZWFkZXIgbmdDbGFzc1xuICAgKiBAcmV0dXJucyBuZ0NsYXNzXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0SGVhZGVyQ2xhc3MoKToge1trZXk6IHN0cmluZ106IGJvb2xlYW59IHtcbiAgICBjb25zdCBmdW5jID0gdGhpcy50ZW1wbGF0ZS5oZWFkZXJDbGFzc0Z1bmM7XG4gICAgaWYgKGZ1bmMgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgcmV0dXJuIGZ1bmMoKTtcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIHJvdyBuZ0NsYXNzXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXG4gICAqIEByZXR1cm5zIG5nQ2xhc3NcbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXRSb3dDbGFzcyhyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KToge1trZXk6IHN0cmluZ106IGJvb2xlYW59IHtcbiAgICBjb25zdCBlbnRpdHkgPSByZWNvcmQuZW50aXR5O1xuICAgIGNvbnN0IGZ1bmMgPSB0aGlzLnRlbXBsYXRlLnJvd0NsYXNzRnVuYztcbiAgICBpZiAoZnVuYyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICByZXR1cm4gZnVuYyhlbnRpdHksIHJlY29yZCk7XG4gICAgfVxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSByb3cgbmdDbGFzc1xuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxuICAgKiBAcGFyYW0gY29sdW1uIENvbHVtblxuICAgKiBAcmV0dXJucyBuZ0NsYXNzXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0Q2VsbENsYXNzKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4sIGNvbHVtbjogRW50aXR5VGFibGVDb2x1bW4pOiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn0ge1xuICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHk7XG4gICAgY29uc3QgY2xzID0ge307XG5cbiAgICBjb25zdCB0YWJsZUZ1bmMgPSB0aGlzLnRlbXBsYXRlLmNlbGxDbGFzc0Z1bmM7XG4gICAgaWYgKHRhYmxlRnVuYyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICBPYmplY3QuYXNzaWduKGNscywgdGFibGVGdW5jKGVudGl0eSwgY29sdW1uLCByZWNvcmQpKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb2x1bW5GdW5jID0gY29sdW1uLmNlbGxDbGFzc0Z1bmM7XG4gICAgaWYgKGNvbHVtbkZ1bmMgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgT2JqZWN0LmFzc2lnbihjbHMsIGNvbHVtbkZ1bmMoZW50aXR5LCByZWNvcmQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xzO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gYSBidXR0b24gaXMgY2xpY2tlZFxuICAgKiBAcGFyYW0gZnVuYyBGdW5jdGlvblxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG9uQnV0dG9uQ2xpY2soXG4gICAgY2xpY2tGdW5jOiAoZW50aXR5OiBvYmplY3QsIHJlY29yZD86IEVudGl0eVJlY29yZDxvYmplY3Q+KSA9PiB2b2lkLFxuICAgIHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD5cbiAgKSB7XG4gICAgdGhpcy5lbmFibGVFZGl0KHJlY29yZCk7XG4gICAgaWYgKHR5cGVvZiBjbGlja0Z1bmMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNsaWNrRnVuYyhyZWNvcmQuZW50aXR5LCByZWNvcmQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBjb2x1bW4gbmFtZSB3aXRob3V0IGhpcyBcInByb3BlcnRpZXNcIiB0YWcgKHVzZWZ1bCBmb3IgZWRpdGlvbiB3b3Jrc3BhY2UgcHJvcGVydGllcylcbiAgICovXG4gIHB1YmxpYyBnZXRDb2x1bW5LZXlXaXRob3V0UHJvcGVydGllc1RhZyhjb2x1bW46IHN0cmluZykge1xuICAgIGlmIChjb2x1bW4uaW5jbHVkZXMoJ3Byb3BlcnRpZXMuJykpIHtcbiAgICAgIHJldHVybiBjb2x1bW4uc3BsaXQoJy4nKVsxXTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbHVtbjtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInRhYmxlLWNvbnRhaW5lclwiPlxuICA8dGFibGUgbWF0LXRhYmxlIG1hdFNvcnQgW25nQ2xhc3NdPVwiZ2V0VGFibGVDbGFzcygpXCIgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiIFt0cmFja0J5XT1cImdldFRyYWNrQnlGdW5jdGlvbigpXCIgKG1hdFNvcnRDaGFuZ2UpPVwib25Tb3J0KCRldmVudClcIj5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic2VsZWN0aW9uQ2hlY2tib3hcIiBjbGFzcz1cIm1hdC1jZWxsLWNoZWNrYm94XCI+XG4gICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdE1hbnlcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3Rpb25TdGF0ZSQgfCBhc3luYyBhcyBzZWxlY3Rpb25TdGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggKGNoYW5nZSk9XCJvblRvZ2dsZVJvd3MoJGV2ZW50LmNoZWNrZWQpXCIgW2NoZWNrZWRdPVwic2VsZWN0aW9uU3RhdGUgPT09IGVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGUuQWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJzZWxlY3Rpb25TdGF0ZSA9PT0gZW50aXR5VGFibGVTZWxlY3Rpb25TdGF0ZS5Tb21lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcmVjb3JkXCI+XG4gICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggKG1vdXNlZG93bik9XCIkZXZlbnQuc2hpZnRLZXkgPyAkZXZlbnQucHJldmVudERlZmF1bHQoKSA6IG51bGxcIiAoY2xpY2spPVwiJGV2ZW50LnNoaWZ0S2V5ID9cbiAgICAgICAgICAgICAgb25TaGlmdFRvZ2dsZVJvdyghcm93SXNTZWxlY3RlZChyZWNvcmQpLCByZWNvcmQsICRldmVudCkgOiAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiAoY2hhbmdlKT1cIm9uVG9nZ2xlUm93KCRldmVudC5jaGVja2VkLHJlY29yZClcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJyb3dJc1NlbGVjdGVkKHJlY29yZClcIj5cbiAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPVwiY29sdW1uLm5hbWVcIiAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHRlbXBsYXRlLmNvbHVtbnNcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uSXNTb3J0YWJsZShjb2x1bW4pXCI+XG4gICAgICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIFttYXRUb29sdGlwXT1cImNvbHVtbi50b29sdGlwID8gY29sdW1uLnRvb2x0aXAgOiB1bmRlZmluZWRcIj5cbiAgICAgICAgICAgICAgICAgIHt7Y29sdW1uLnRpdGxlfX1cbiAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sdW1uSXNTb3J0YWJsZShjb2x1bW4pXCI+XG4gICAgICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgW21hdFRvb2x0aXBdPVwiY29sdW1uLnRvb2x0aXAgPyBjb2x1bW4udG9vbHRpcCA6IHVuZGVmaW5lZFwiPlxuICAgICAgICAgICAgICAgICAge3tjb2x1bW4udGl0bGV9fVxuICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldENvbHVtblJlbmRlcmVyKGNvbHVtbikgYXMgY29sdW1uUmVuZGVyZXJcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtblJlbmRlcmVyID09PSBlbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLkRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm1hdENlbGxEZWY9XCJsZXQgcmVjb3JkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiICpuZ0lmPVwiIWlzVXJsKGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSk7ZWxzZSBpc0FuVXJsRGVmYXVsdFwiIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3tnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbil9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpc0FuVXJsRGVmYXVsdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJ7e2dldFZhbHVlKHJlY29yZCwgY29sdW1uKX19XCIgdGFyZ2V0PSdfYmxhbmsnIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cImlzSW1nKGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSk7ZWxzZSBub3RJbWdcIiBzcmM9XCJ7eyhnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikgfCBzZWN1cmVJbWFnZSkgfCBhc3luY319XCIgd2lkdGg9XCI1MFwiIGhlaWd0aD1cImF1dG9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vdEltZz48c3Bhbj57e1xuICAgICAgICAgICAgICAgICAgICAnaWdvLmNvbW1vbi5lbnRpdHktdGFibGUudGFyZ2V0SHRtbFVybCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5SZW5kZXJlciA9PT0gZW50aXR5VGFibGVDb2x1bW5SZW5kZXJlci5IVE1MXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICptYXRDZWxsRGVmPVwibGV0IHJlY29yZFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCBjbGFzcz1cIm1hdC1jZWxsLXRleHRcIiAqbmdJZj1cIiFpc1VybChnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikpO2Vsc2UgaXNBblVybEhUTUxcIiBbbmdDbGFzc109XCJnZXRDZWxsQ2xhc3MocmVjb3JkLCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImdldFZhbHVlKHJlY29yZCwgY29sdW1uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpc0FuVXJsSFRNTD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJ7e2dldFZhbHVlKHJlY29yZCwgY29sdW1uKX19XCIgdGFyZ2V0PSdfYmxhbmsnIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cImlzSW1nKGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSk7ZWxzZSBub3RJbWdcIiBzcmM9XCJ7eyhnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikgfCBzZWN1cmVJbWFnZSkgfCBhc3luY319XCIgd2lkdGg9XCI1MFwiIGhlaWd0aD1cImF1dG9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vdEltZz48c3Bhbj57eyAnaWdvLmdlby50YXJnZXRIdG1sVXJsJyB8XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZSB9fSA8L3NwYW4+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uUmVuZGVyZXIgPT09IGVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIuVW5zYW5pdGl6ZWRIVE1MXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICptYXRDZWxsRGVmPVwibGV0IHJlY29yZFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCBjbGFzcz1cIm1hdC1jZWxsLXRleHQgZWRpdGlvblwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCIgKm5nSWY9XCJpc0VkaXRpb24ocmVjb3JkKTtlbHNlIGlzVW5zYW5pdGl6ZWRIVE1MXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRDZWxsQ2xhc3MocmVjb3JkLCBjb2x1bW4pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlclwiICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09ICdkYXRlJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJwaWNrZXJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbHVtbi5uYW1lXCIgdmFsdWU9XCJ7e2dldFZhbHVlKHJlY29yZCwgY29sdW1uKX19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXRlQ2hhbmdlKT1cIm9uRGF0ZUNoYW5nZShjb2x1bW4ubmFtZSwgcmVjb3JkLCAkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI3BpY2tlcj48L21hdC1kYXRlcGlja2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJ0aW1lXCIgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gJ3RpbWUnXCIgW2Zvcm1Db250cm9sTmFtZV09XCJjb2x1bW4ubmFtZVwiIHN0ZXA9XCI5MDBcIiAoZm9jdXMpPVwiY29sdW1uLm9uRm9jdXMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJjb2x1bW4ub25DaGFuZ2UoJGV2ZW50KVwiIChibHVyKT1cImNvbHVtbi5vbkJsdXIoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwiY2xhc3NfbnVtYmVyX2VkaXRpb25cIiAqbmdJZj1cImNvbHVtbi50eXBlID09PSAnbnVtYmVyJ1wiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29sdW1uLm5hbWVcIiBzdGVwPVwie3tjb2x1bW4uc3RlcH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJ7e2dldFZhbHVlKHJlY29yZCxjb2x1bW4pfX1cIiAoaW5wdXQpPVwib25WYWx1ZUNoYW5nZShjb2x1bW4ubmFtZSwgcmVjb3JkLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZG9ubHk9XCJ7e2dldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdyZWFkb25seScpfX1cIiByZXF1aXJlZD1cInt7Z2V0VmFsaWRhdGlvbkF0dHJpYnV0ZVZhbHVlKGNvbHVtbiwgJ21hbmRhdG9yeScpfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCJ7e2dldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdtaW5WYWx1ZScpfX1cIiBtYXg9XCJ7e2dldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdtYXhWYWx1ZScpfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJ0ZXh0XCIgKm5nSWY9XCIhY29sdW1uLnR5cGUgfHwgY29sdW1uLnR5cGUgPT09J3N0cmluZydcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbHVtbi5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJ7e2dldFZhbHVlKHJlY29yZCwgY29sdW1uKX19XCIgKGlucHV0KT1cIm9uVmFsdWVDaGFuZ2UoY29sdW1uLm5hbWUsIHJlY29yZCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5PVwie3tnZXRWYWxpZGF0aW9uQXR0cmlidXRlVmFsdWUoY29sdW1uLCAncmVhZG9ubHknKX19XCIgcmVxdWlyZWQ9XCJ7e2dldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdtYW5kYXRvcnknKX19XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gJ2Jvb2xlYW4nXCIgW2Zvcm1Db250cm9sTmFtZV09XCJjb2x1bW4ubmFtZVwiIFtjaGVja2VkXT1cImdldFZhbHVlKHJlY29yZCxjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkJvb2xlYW5WYWx1ZUNoYW5nZShjb2x1bW4ubmFtZSwgcmVjb3JkLCRldmVudClcIj48L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gJ2xpc3QnXCIgcmVxdWlyZWQ9XCJ7e2dldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdtYW5kYXRvcnknKX19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb2x1bW4ubmFtZVwiIFttdWx0aXBsZV09XCJjb2x1bW4ubXVsdGlwbGVcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0VmFsdWVDaGFuZ2UoY29sdW1uLm5hbWUsIHJlY29yZCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgY29sdW1uLmRvbWFpblZhbHVlc1wiIFt2YWx1ZV09XCJvcHRpb24uaWRcIiBbZGlzYWJsZWRdPVwib3B0aW9uLmRpc2FibGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uLnZhbHVlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJ0ZXh0XCIgW2Zvcm1Db250cm9sTmFtZV09XCJjb2x1bW4ubmFtZVwiICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09ICdhdXRvY29tcGxldGUnXCIgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZD1cInt7Z2V0VmFsaWRhdGlvbkF0dHJpYnV0ZVZhbHVlKGNvbHVtbiwgJ21hbmRhdG9yeScpfX1cIiB2YWx1ZT1cInt7Z2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5PVwie3tnZXRWYWxpZGF0aW9uQXR0cmlidXRlVmFsdWUoY29sdW1uLCAncmVhZG9ubHknKX19XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCIgKG9wdGlvblNlbGVjdGVkKT1cIm9uQXV0b2NvbXBsZXRlVmFsdWVDaGFuZ2UoY29sdW1uLCByZWNvcmQsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5lbFdpZHRoPVwiNDMwcHhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmlsdGVyZWRPcHRpb25zW2NvbHVtbi5uYW1lXSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uLmlkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uLnZhbHVlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXNVbnNhbml0aXplZEhUTUw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCBjbGFzcz1cIm1hdC1jZWxsLXRleHRcIiAqbmdJZj1cIiFpc1VybChnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikpO2Vsc2UgaXNBblVybFVuc2FuaXRpemVkSFRNTFwiIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImdldFZhbHVlKHJlY29yZCwgY29sdW1uKSB8IHNhbml0aXplSHRtbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2lzQW5VcmxVbnNhbml0aXplZEhUTUw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgY2xhc3M9XCJtYXQtY2VsbC10ZXh0XCIgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzKHJlY29yZCwgY29sdW1uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJ7e2dldFZhbHVlKHJlY29yZCwgY29sdW1uKX19XCIgdGFyZ2V0PSdfYmxhbmsnIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJpc0ltZyhnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikpO2Vsc2Ugbm90SW1nXCIgc3JjPVwie3soZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pIHwgc2VjdXJlSW1hZ2UpIHwgYXN5bmN9fVwiIHdpZHRoPVwiNTBcIiBoZWlndGg9XCJhdXRvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm90SW1nPjxzcGFuPnt7ICdpZ28uZ2VvLnRhcmdldEh0bWxVcmwnIHwgdHJhbnNsYXRlIH19IDwvc3Bhbj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtblJlbmRlcmVyID09PSBlbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLkljb25cIj5cbiAgICAgICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByZWNvcmRcIiBjbGFzcz1cIm1hdC1jZWxsLXRleHRcIiBbbmdDbGFzc109XCJnZXRDZWxsQ2xhc3MocmVjb3JkLCBjb2x1bW4pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiY29sdW1uLm9uQ2xpY2tcIiBzdmdJY29uPVwie3tnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbil8fCBjb2x1bW4uaWNvbn19XCIgKGNsaWNrKT1cImNvbHVtbi5vbkNsaWNrKCRldmVudClcIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIiFjb2x1bW4ub25DbGlja1wiIHN2Z0ljb249XCJ7e2dldFZhbHVlKHJlY29yZCwgY29sdW1uKXx8IGNvbHVtbi5pY29ufX1cIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5SZW5kZXJlciA9PT0gZW50aXR5VGFibGVDb2x1bW5SZW5kZXJlci5CdXR0b25Hcm91cFwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbWF0Q2VsbERlZj1cImxldCByZWNvcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgY2xhc3M9XCJtYXQtY2VsbC10ZXh0XCIgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzKHJlY29yZCwgY29sdW1uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGdldFZhbHVlKHJlY29yZCwgY29sdW1uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRWRpdGlvbihyZWNvcmQpID09PSBidXR0b24uZWRpdE1vZGUgfHwgYnV0dG9uLmVkaXRNb2RlID09PSB1bmRlZmluZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiYnV0dG9uLnN0eWxlID09PSAnbWF0LWljb24tYnV0dG9uJ1wiIGlnb1N0b3BQcm9wYWdhdGlvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImJ1dHRvbi5jb2xvclwiIChtb3VzZWRvd24pPVwib25CdXR0b25DbGljayhidXR0b24uY2xpY2ssIHJlY29yZClcIiBbZGlzYWJsZWRdPVwiYnV0dG9uLmRpc2FibGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwie3tidXR0b24uaWNvbn19XCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiYnV0dG9uLnN0eWxlICE9PSAnbWF0LWljb24tYnV0dG9uJ1wiIGlnb1N0b3BQcm9wYWdhdGlvbiBtYXQtbWluaS1mYWJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImJ1dHRvbi5jb2xvclwiIChtb3VzZWRvd24pPVwib25CdXR0b25DbGljayhidXR0b24uY2xpY2ssIHJlY29yZClcIiBbZGlzYWJsZWRdPVwiYnV0dG9uLmRpc2FibGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwie3tidXR0b24uaWNvbn19XCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImhlYWRlcnM7IHN0aWNreTogZml4ZWRIZWFkZXI7XCIgW25nQ2xhc3NdPVwiZ2V0SGVhZGVyQ2xhc3MoKVwiPlxuICAgICAgPC90cj5cbiAgICAgIDx0ciBtYXQtcm93IGlnb0VudGl0eVRhYmxlUm93ICptYXRSb3dEZWY9XCJsZXQgcmVjb3JkOyBjb2x1bW5zOiBoZWFkZXJzO1wiIFtzY3JvbGxCZWhhdmlvcl09XCJzY3JvbGxCZWhhdmlvclwiIFtuZ0NsYXNzXT1cImdldFJvd0NsYXNzKHJlY29yZClcIiBbc2VsZWN0aW9uXT1cInNlbGVjdGlvblwiIFtzZWxlY3RlZF09XCJyb3dJc1NlbGVjdGVkKHJlY29yZClcIiAoc2VsZWN0KT1cIm9uUm93U2VsZWN0KHJlY29yZClcIiAoY2xpY2spPVwib25Sb3dDbGljayhyZWNvcmQpXCI+XG4gICAgICA8L3RyPlxuICA8L3RhYmxlPlxuICA8aWdvLWVudGl0eS10YWJsZS1wYWdpbmF0b3IgKm5nSWY9XCJ3aXRoUGFnaW5hdG9yXCIgW3N0b3JlXT1cInN0b3JlXCIgW3BhZ2luYXRvck9wdGlvbnNdPVwicGFnaW5hdG9yT3B0aW9uc1wiIFtlbnRpdHlTb3J0Q2hhbmdlJF09XCJlbnRpdHlTb3J0Q2hhbmdlJFwiIChwYWdpbmF0b3JDaGFuZ2UpPVwicGFnaW5hdG9yQ2hhbmdlKCRldmVudClcIj5cbiAgPC9pZ28tZW50aXR5LXRhYmxlLXBhZ2luYXRvcj5cbjwvZGl2PiJdfQ==
|