@igo2/geo 1.13.0-alpha.0 → 1.13.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/esm2020/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +3 -3
  2. package/esm2020/lib/draw/draw/draw.component.mjs +3 -3
  3. package/esm2020/lib/feature/shared/feature.interfaces.mjs +1 -1
  4. package/esm2020/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +3 -3
  5. package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +6 -6
  6. package/esm2020/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +5 -5
  7. package/esm2020/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +4 -4
  8. package/esm2020/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +3 -3
  9. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +1 -1
  10. package/esm2020/lib/import-export/import-export/import-export.component.mjs +3 -3
  11. package/esm2020/lib/layer/shared/layer.service.mjs +1 -1
  12. package/esm2020/lib/print/print-form/print-form.component.mjs +3 -3
  13. package/esm2020/lib/search/shared/sources/cadastre.mjs +1 -1
  14. package/fesm2015/igo2-geo.mjs +21 -21
  15. package/fesm2015/igo2-geo.mjs.map +1 -1
  16. package/fesm2020/igo2-geo.mjs +21 -21
  17. package/fesm2020/igo2-geo.mjs.map +1 -1
  18. package/lib/catalog/catalog-library/add-catalog-dialog.component.d.ts +3 -3
  19. package/lib/draw/draw/draw.component.d.ts +3 -3
  20. package/lib/feature/shared/feature.interfaces.d.ts +2 -2
  21. package/lib/filter/ogc-filter-selection/ogc-filter-selection.component.d.ts +3 -3
  22. package/lib/filter/ogc-filter-time/ogc-filter-time.component.d.ts +5 -5
  23. package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +4 -4
  24. package/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.d.ts +3 -3
  25. package/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.d.ts +2 -2
  26. package/lib/geometry/geometry-form-field/geometry-form-field.component.d.ts +2 -2
  27. package/lib/import-export/import-export/import-export.component.d.ts +4 -4
  28. package/lib/print/print-form/print-form.component.d.ts +16 -16
  29. package/package.json +11 -11
@@ -1260,7 +1260,7 @@ export class OgcFilterSelectionComponent {
1260
1260
  }
1261
1261
  }
1262
1262
  }
1263
- OgcFilterSelectionComponent.ɵfac = function OgcFilterSelectionComponent_Factory(t) { return new (t || OgcFilterSelectionComponent)(i0.ɵɵdirectiveInject(i1.OGCFilterService), i0.ɵɵdirectiveInject(i2.UntypedFormBuilder), i0.ɵɵdirectiveInject(i3.DOMService), i0.ɵɵdirectiveInject(i4.ConfigService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
1263
+ OgcFilterSelectionComponent.ɵfac = function OgcFilterSelectionComponent_Factory(t) { return new (t || OgcFilterSelectionComponent)(i0.ɵɵdirectiveInject(i1.OGCFilterService), i0.ɵɵdirectiveInject(i2.FormBuilder), i0.ɵɵdirectiveInject(i3.DOMService), i0.ɵɵdirectiveInject(i4.ConfigService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
1264
1264
  OgcFilterSelectionComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: OgcFilterSelectionComponent, selectors: [["igo-ogc-filter-selection"]], viewQuery: function OgcFilterSelectionComponent_Query(rf, ctx) { if (rf & 1) {
1265
1265
  i0.ɵɵviewQuery(_c0, 5);
1266
1266
  } if (rf & 2) {
@@ -1281,7 +1281,7 @@ OgcFilterSelectionComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
1281
1281
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(OgcFilterSelectionComponent, [{
1282
1282
  type: Component,
1283
1283
  args: [{ selector: 'igo-ogc-filter-selection', providers: [DOMService], template: "<form [formGroup]=\"form\">\r\n <div *ngFor=\"let selector of ogcFiltersSelectors\">\r\n <div class=\"pushButtonGroups\" *ngIf=\"selector.selectorType === 'pushButton'\">\r\n <mat-divider></mat-divider>\r\n <div class=\"groupsSelector\" *ngIf=\"getPushButtonsGroups().length > 1\">\r\n <mat-form-field>\r\n <mat-select\r\n formControlName=\"pushButtonsGroup\"\r\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\" tooltip-position=\"below\" matTooltipShowDelay=\"500\"\r\n [(value)]=\"currentPushButtonsGroup\">\r\n <mat-option *ngFor=\"let selectorGroup of getPushButtonsGroups()\"\r\n [value]=\"selectorGroup\">{{selectorGroup.title}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <ng-container *ngFor=\"let bundle of currentPushButtonsGroup.computedSelectors\">\r\n <h4>{{bundle.title}}</h4>\r\n <mat-button-toggle-group\r\n formControlName=\"pushButtons\" class=\"mat-typography\" appearance=\"legacy\" vertical={{bundleIsVertical(bundle)}} multiple=\"true\">\r\n <mat-button-toggle *ngFor=\"let ogcPushButton of bundle.selectors\"\r\n [matTooltip]=\"getToolTip(ogcPushButton)\" tooltip-position=\"below\" matTooltipShowDelay=\"500\" matTooltipClass=\"material-tooltip\"\r\n [ngStyle]=\"getButtonColor(ogcPushButton)\"\r\n [checked]=\"ogcPushButton.enabled\" (change)=\"onSelectionChange(ogcPushButton, selector.selectorType)\"\r\n [value]=\"ogcPushButton\">{{ogcPushButton.title}}\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"checkboxGroups\" *ngIf=\"selector.selectorType === 'checkbox'\">\r\n <mat-divider></mat-divider>\r\n <div class=\"groupsSelector\" *ngIf=\"getCheckboxesGroups().length > 1\">\r\n <mat-form-field>\r\n <mat-select\r\n formControlName=\"checkboxesGroup\"\r\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\" tooltip-position=\"below\" matTooltipShowDelay=\"500\"\r\n [(value)]=\"currentCheckboxesGroup\">\r\n <mat-option *ngFor=\"let selectorGroup of getCheckboxesGroups()\"\r\n [value]=\"selectorGroup\">{{selectorGroup.title}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <ng-container *ngFor=\"let bundle of currentCheckboxesGroup.computedSelectors\">\r\n <h4>{{bundle.title}}</h4>\r\n <div class=\"checkboxes mat-typography\">\r\n <mat-checkbox *ngFor=\"let ogcCheckbox of bundle.selectors\"\r\n [matTooltip]=\"getToolTip(ogcCheckbox)\" tooltip-position=\"below\" matTooltipShowDelay=\"500\" matTooltipClass=\"material-tooltip\"\r\n [checked]=\"ogcCheckbox.enabled\" (change)=\"onSelectionChange(ogcCheckbox, selector.selectorType)\"\r\n [value]=\"ogcCheckbox\">{{ogcCheckbox.title}}\r\n </mat-checkbox>\r\n </div>\r\n <p *ngIf=\"isLessResults(bundle, 'checkbox') || isMoreResults(bundle, 'checkbox')\">\r\n <u *ngIf=\"isLessResults(bundle, 'checkbox')\"\r\n class=\"lessResults mat-typography\"\r\n (click)=\"displayLessResults('checkbox')\">{{ 'igo.geo.filter.displayLessResults' | translate }}\r\n </u>\r\n <u *ngIf=\"isMoreResults(bundle, 'checkbox')\"\r\n class=\"moreResults mat-typography\"\r\n (click)=\"displayMoreResults('checkbox')\">{{ 'igo.geo.filter.displayMoreResults' | translate }}\r\n </u>\r\n </p>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"radioButtonGroups\" *ngIf=\"selector.selectorType === 'radioButton'\">\r\n <mat-divider></mat-divider>\r\n <div class=\"groupsSelector\" *ngIf=\"getRadioButtonsGroups().length > 1\">\r\n <mat-form-field>\r\n <mat-select\r\n formControlName=\"radioButtonsGroup\"\r\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\" tooltip-position=\"below\" matTooltipShowDelay=\"500\"\r\n [(value)]=\"currentRadioButtonsGroup\">\r\n <mat-option *ngFor=\"let selectorGroup of getRadioButtonsGroups()\"\r\n [value]=\"selectorGroup\">{{selectorGroup.title}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <ng-container *ngFor=\"let bundle of currentRadioButtonsGroup.computedSelectors\">\r\n <h4>{{bundle.title}}</h4>\r\n <mat-radio-group\r\n formControlName=\"radioButtons\" class=\"mat-typography\">\r\n <mat-radio-button *ngIf=\"bundle.unfiltered\"\r\n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\" tooltip-position=\"below\" matTooltipShowDelay=\"500\" matTooltipClass=\"material-tooltip\"\r\n (change)=\"emptyRadioButtons()\">{{ 'igo.geo.filter.resetFilters' | translate }}\r\n </mat-radio-button>\r\n <mat-radio-button *ngFor=\"let ogcRadioButton of bundle.selectors\"\r\n [matTooltip]=\"getToolTip(ogcRadioButton)\" tooltip-position=\"below\" matTooltipShowDelay=\"500\" matTooltipClass=\"material-tooltip\"\r\n [checked]=\"ogcRadioButton.enabled\" (change)=\"onSelectionChange(ogcRadioButton, selector.selectorType)\"\r\n [value]=\"ogcRadioButton\">{{ogcRadioButton.title}}\r\n </mat-radio-button>\r\n <p *ngIf=\"isLessResults(bundle, 'radio') || isMoreResults(bundle, 'radio')\">\r\n <u *ngIf=\"isLessResults(bundle, 'radio')\"\r\n class=\"lessResults mat-typography\"\r\n (click)=\"displayLessResults('radio')\">{{ 'igo.geo.filter.displayLessResults' | translate }}\r\n </u>\r\n <u *ngIf=\"isMoreResults(bundle, 'radio')\"\r\n class=\"moreResults mat-typography\"\r\n (click)=\"displayMoreResults('radio')\">{{ 'igo.geo.filter.displayMoreResults' | translate }}\r\n </u>\r\n </p>\r\n </mat-radio-group>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"selectGroups\" *ngIf=\"selector.selectorType === 'select'\">\r\n <mat-divider></mat-divider>\r\n <div class=\"groupsSelector\" *ngIf=\"getSelectGroups().length > 1\">\r\n <mat-form-field>\r\n <mat-select\r\n formControlName=\"selectGroup\"\r\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\" tooltip-position=\"below\" matTooltipShowDelay=\"500\"\r\n [(value)]=\"currentSelectGroup\">\r\n <mat-option *ngFor=\"let selectorGroup of getSelectGroups()\"\r\n [value]=\"selectorGroup\">{{selectorGroup.title}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <ng-container *ngFor=\"let bundle of currentSelectGroup.computedSelectors\">\r\n <h4>{{bundle.title}}</h4>\r\n <div class=\"groupsSelector\">\r\n <mat-button *ngIf=\"bundle.unfiltered && !bundle.multiple\"\r\n mat-icon-button\r\n color=\"warn\"\r\n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\" tooltip-position=\"below\" matTooltipShowDelay=\"500\" matTooltipClass=\"material-tooltip\"\r\n (click)=\"emptySelect()\">\r\n <mat-icon svgIcon=\"filter-remove\"></mat-icon>\r\n </mat-button>\r\n <mat-form-field [style.width.%]=\"bundle.width ? bundle.width : undefined\">\r\n <div *ngIf=\"bundle.multiple; else notMulti\">\r\n <mat-select\r\n #selection [multiple]=\"bundle.multiple\" [placeholder]=\"bundle.title\" formControlName=\"selectMulti\">\r\n <div class=\"checkboxes mat-typography\">\r\n <mat-checkbox *ngIf=\"bundle.multiple\"\r\n [(ngModel)]=\"selectAllSelected\" [ngModelOptions]=\"{standalone: true}\"\r\n (change)=\"toggleAllSelection()\">Tous\r\n </mat-checkbox>\r\n </div>\r\n <mat-option *ngFor=\"let ogcSelect of bundle.selectors\"\r\n [matTooltip]=\"getToolTip(ogcSelect)\" tooltip-position=\"below\" matTooltipDelay=\"500\" matTooltipClass=\"material-tooltip\"\r\n (onSelectionChange)=\"selectOptionClick($event.source.value, bundle, $event)\"\r\n [value]=\"ogcSelect\">{{ogcSelect.title}}\r\n </mat-option>\r\n </mat-select>\r\n </div>\r\n <ng-template #notMulti>\r\n <mat-select\r\n [placeholder]=\"bundle.title\" formControlName=\"select\">\r\n <mat-option *ngFor=\"let ogcSelect of bundle.selectors\"\r\n [matTooltip]=\"getToolTip(ogcSelect)\" tooltip-position=\"below\" matTooltipDelay=\"500\" matTooltipClass=\"material-tooltip\"\r\n [value]=\"ogcSelect\" (onSelectionChange)=\"selectOptionClick($event.source.value, bundle)\">{{ogcSelect.title}}\r\n </mat-option>\r\n </mat-select>\r\n </ng-template>\r\n </mat-form-field>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"autocompleteGroups\" *ngIf=\"selector.selectorType === 'autocomplete'\">\r\n <mat-divider></mat-divider>\r\n <div class=\"groupsSelector\" *ngIf=\"getAutocompleteGroups().length > 1\">\r\n <mat-form-field>\r\n <mat-select\r\n formControlName=\"autocompleteGroup\"\r\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\" tooltip-position=\"below\" matTooltipShowDelay=\"500\"\r\n [(value)]=\"currentAutocompleteGroup\">\r\n <mat-option *ngFor=\"let autocompleteGroup of getAutocompleteGroups()\"\r\n [value]=\"autocompleteGroup\">{{autocompleteGroup.title}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <ng-container *ngFor=\"let bundle of currentAutocompleteGroup.computedSelectors\">\r\n <h4>{{bundle.title}}</h4>\r\n <div class=\"groupsSelector\">\r\n <mat-button *ngIf=\"bundle.unfiltered\"\r\n mat-icon-button\r\n color=\"warn\"\r\n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\" tooltip-position=\"below\" matTooltipShowDelay=\"500\" matTooltipClass=\"material-tooltip\"\r\n (click)=\"emptyAutocomplete()\">\r\n <mat-icon svgIcon=\"filter-remove\"></mat-icon>\r\n </mat-button>\r\n <mat-form-field *ngIf=\"filteredOgcAutocomplete[bundle.id]\" [style.width.%]=\"bundle.width ? bundle.width : undefined\">\r\n <input matInput type=\"text\" formControlName=\"autocomplete\" #autocomplete class=\"autocomplete\"\r\n [matAutocomplete]=\"auto\" [placeholder]=\"bundle.title\">\r\n <mat-autocomplete #auto=\"matAutocomplete\" #autocomplete (optionSelected)=\"autocompleteOptionClick($event.option.value)\"\r\n [displayWith]=\"displayFn\">\r\n <mat-option *ngFor=\"let ogcAutocomplete of filteredOgcAutocomplete[bundle.id] | async\" [value]=\"ogcAutocomplete\">\r\n {{ ogcAutocomplete.value }}\r\n </mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</form>\r\n\r\n<div *ngIf=\"isTemporalOperator()\">\r\n <mat-divider></mat-divider>\r\n <h4 *ngIf=\"!currentFilter.title\">{{ 'igo.geo.filter.reportingDate' | translate }}</h4>\r\n <h4 *ngIf=\"currentFilter.title\">{{ currentFilter.title }}</h4>\r\n <igo-ogc-filter-time\r\n [(datasource)]=\"datasource\"\r\n [(currentFilter)]=\"currentFilter\"\r\n (changeProperty)=\"changeProperty($event.value, $event.pos)\">\r\n </igo-ogc-filter-time>\r\n</div>", styles: [".mat-button-toggle-group{margin:5px;flex-wrap:wrap;box-shadow:none}.checkboxes{flex-wrap:wrap;box-shadow:none}.groupsSelector{text-align:center}mat-button-toggle{display:inline-flex;border:1.5px solid black;border-radius:5px;margin:5px;white-space:normal;min-height:40px;height:auto;width:150px}mat-button-toggle ::ng-deep .mat-button-toggle-label-content{line-height:inherit;font-size:small;display:block}::ng-deep .material-tooltip{white-space:pre-wrap}mat-checkbox,mat-radio-button{margin:7px;width:95%;display:inline-flex;font-size:larger}mat-checkbox ::ng-deep label,mat-radio-button ::ng-deep label{white-space:normal}mat-checkbox{vertical-align:middle}mat-button{padding-right:10px;cursor:pointer}h4{margin:7px;text-align:left}u{cursor:pointer;color:#00f;margin:5px}p{margin:0;margin:initial}\n"] }]
1284
- }], function () { return [{ type: i1.OGCFilterService }, { type: i2.UntypedFormBuilder }, { type: i3.DOMService }, { type: i4.ConfigService }, { type: i0.ChangeDetectorRef }]; }, { sel: [{
1284
+ }], function () { return [{ type: i1.OGCFilterService }, { type: i2.FormBuilder }, { type: i3.DOMService }, { type: i4.ConfigService }, { type: i0.ChangeDetectorRef }]; }, { sel: [{
1285
1285
  type: ViewChild,
1286
1286
  args: ['selection']
1287
1287
  }], refreshFilters: [{
@@ -1299,4 +1299,4 @@ OgcFilterSelectionComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
1299
1299
  }], currentFilter: [{
1300
1300
  type: Input
1301
1301
  }] }); })();
1302
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2djLWZpbHRlci1zZWxlY3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvZmlsdGVyL29nYy1maWx0ZXItc2VsZWN0aW9uL29nYy1maWx0ZXItc2VsZWN0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9vZ2MtZmlsdGVyLXNlbGVjdGlvbi9vZ2MtZmlsdGVyLXNlbGVjdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULEtBQUssRUFFTCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLFVBQVUsRUFBWSxNQUFNLGNBQWMsQ0FBQztBQVVwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFJakUsT0FBTyxFQUF3QyxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRixPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztJQ2xCdkMsc0NBQzBCO0lBQUEsWUFDMUI7SUFBQSxpQkFBYTs7O0lBRFgseUNBQXVCO0lBQUMsZUFDMUI7SUFEMEIsdURBQzFCOzs7O0lBUk4sK0JBQXNFLHFCQUFBLHFCQUFBO0lBS2hFLHlRQUFtQzs7SUFDbkMsNkdBRWE7SUFDZixpQkFBYSxFQUFBLEVBQUE7OztJQUxYLGVBQTZEO0lBQTdELHFGQUE2RCx5Q0FBQTtJQUV2QixlQUF5QjtJQUF6Qix1REFBeUI7Ozs7SUFVakUsNkNBSTBCO0lBRFUsd1ZBQVUsZUFBQSxzRUFB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O1lBRWIsY0FBYztrQkFBdEIsS0FBSztZQUVHLFVBQVU7a0JBQWxCLEtBQUs7WUFFRyxHQUFHO2tCQUFYLEtBQUs7WUFFRyxlQUFlO2tCQUF2QixLQUFLO1lBQ0csaUJBQWlCO2tCQUF6QixLQUFLO1lBQ0csU0FBUztrQkFBakIsS0FBSztZQUdGLGFBQWE7a0JBRGhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgVmlld0NoaWxkXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZSc7XHJcbmltcG9ydCB7IERPTVNlcnZpY2UsIERPTVZhbHVlIH0gZnJvbSAnQGlnbzIvY29tbW9uJztcclxuXHJcbmltcG9ydCB7XHJcbiAgT2djRmlsdGVyYWJsZURhdGFTb3VyY2UsXHJcbiAgSWdvT2djRmlsdGVyT2JqZWN0LFxyXG4gIE9nY1B1c2hCdXR0b24sXHJcbiAgT2djU2VsZWN0b3JCdW5kbGUsXHJcbiAgU2VsZWN0b3JHcm91cFxyXG5cclxufSBmcm9tICcuLi8uLi9maWx0ZXIvc2hhcmVkL29nYy1maWx0ZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgT2djRmlsdGVyV3JpdGVyIH0gZnJvbSAnLi4vLi4vZmlsdGVyL3NoYXJlZC9vZ2MtZmlsdGVyJztcclxuaW1wb3J0IHsgSWdvTWFwIH0gZnJvbSAnLi4vLi4vbWFwJztcclxuaW1wb3J0IHsgT0dDRmlsdGVyU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9vZ2MtZmlsdGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBXTVNEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vZGF0YXNvdXJjZS9zaGFyZWQvZGF0YXNvdXJjZXMvd21zLWRhdGFzb3VyY2UnO1xyXG5pbXBvcnQgeyBVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBPZ2NGaWx0ZXJPcGVyYXRvciB9IGZyb20gJy4uL3NoYXJlZC9vZ2MtZmlsdGVyLmVudW0nO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3QgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5pbXBvcnQgeyBNYXRPcHRpb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2lnby1vZ2MtZmlsdGVyLXNlbGVjdGlvbicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL29nYy1maWx0ZXItc2VsZWN0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9vZ2MtZmlsdGVyLXNlbGVjdGlvbi5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogWyBET01TZXJ2aWNlIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIE9nY0ZpbHRlclNlbGVjdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3NlbGVjdGlvbicpIHNlbDogTWF0U2VsZWN0O1xyXG5cclxuICBASW5wdXQoKSByZWZyZXNoRmlsdGVyczogKCkgPT4gdm9pZDtcclxuXHJcbiAgQElucHV0KCkgZGF0YXNvdXJjZTogT2djRmlsdGVyYWJsZURhdGFTb3VyY2U7XHJcblxyXG4gIEBJbnB1dCgpIG1hcDogSWdvTWFwO1xyXG5cclxuICBASW5wdXQoKSBjaGVja2JveGVzSW5kZXggPSA1O1xyXG4gIEBJbnB1dCgpIHJhZGlvQnV0dG9uc0luZGV4ID0gNTtcclxuICBASW5wdXQoKSBiYXNlSW5kZXggPSA1O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBjdXJyZW50RmlsdGVyKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEZpbHRlcjtcclxuICB9XHJcbiAgc2V0IGN1cnJlbnRGaWx0ZXIodmFsdWUpIHtcclxuICAgIHRoaXMuX2N1cnJlbnRGaWx0ZXIgPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLl9jdXJyZW50RmlsdGVyPy5zbGlkZXJPcHRpb25zKSB7XHJcbiAgICAgIHRoaXMuX2N1cnJlbnRGaWx0ZXIuc2xpZGVyT3B0aW9ucy5lbmFibGVkID0gZmFsc2U7IC8vIHJlbW92ZSBzbGlkZXIgdG9nZ2xlIChhbmltYXRpb24gdGVtcG9yZWxsZSlcclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSBfY3VycmVudEZpbHRlcjogYW55O1xyXG5cclxuICBwdWJsaWMgb2djRmlsdGVyT3BlcmF0b3IgPSBPZ2NGaWx0ZXJPcGVyYXRvcjtcclxuXHJcbiAgcHVibGljIGZvcm06IFVudHlwZWRGb3JtR3JvdXA7XHJcbiAgcHJpdmF0ZSBvZ2NGaWx0ZXJXcml0ZXI6IE9nY0ZpbHRlcldyaXRlcjtcclxuICBwdWJsaWMgY29sb3IgPSAncHJpbWFyeSc7XHJcbiAgcHVibGljIHNlbGVjdEFsbFNlbGVjdGVkID0gZmFsc2U7XHJcbiAgcHVibGljIHNlbGVjdEVuYWJsZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdCh1bmRlZmluZWQpO1xyXG4gIHB1YmxpYyBzZWxlY3RFbmFibGVkcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcclxuICBwdWJsaWMgYXV0b2NvbXBsZXRlRW5hYmxlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XHJcbiAgcHVibGljIGZpbHRlcmVkT2djQXV0b2NvbXBsZXRlID0ge307XHJcblxyXG4gIHB1YmxpYyBhcHBseUZpbHRlcnNUaW1lb3V0O1xyXG5cclxuICBnZXQgb2djRmlsdGVyc1NlbGVjdG9ycygpIHtcclxuICAgIGNvbnN0IG9nY1NlbGVjdG9yID0gW107XHJcbiAgICBpZiAodGhpcy5kYXRhc291cmNlPy5vcHRpb25zPy5vZ2NGaWx0ZXJzPy5wdXNoQnV0dG9ucykge1xyXG4gICAgICBvZ2NTZWxlY3Rvci5wdXNoKHRoaXMuZGF0YXNvdXJjZT8ub3B0aW9ucz8ub2djRmlsdGVycz8ucHVzaEJ1dHRvbnMpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGF0YXNvdXJjZT8ub3B0aW9ucz8ub2djRmlsdGVycz8uY2hlY2tib3hlcykge1xyXG4gICAgICBvZ2NTZWxlY3Rvci5wdXNoKHRoaXMuZGF0YXNvdXJjZT8ub3B0aW9ucz8ub2djRmlsdGVycz8uY2hlY2tib3hlcyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kYXRhc291cmNlPy5vcHRpb25zPy5vZ2NGaWx0ZXJzPy5yYWRpb0J1dHRvbnMpIHtcclxuICAgICAgb2djU2VsZWN0b3IucHVzaCh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LnJhZGlvQnV0dG9ucyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kYXRhc291cmNlPy5vcHRpb25zPy5vZ2NGaWx0ZXJzPy5zZWxlY3QpIHtcclxuICAgICAgb2djU2VsZWN0b3IucHVzaCh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LnNlbGVjdCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kYXRhc291cmNlPy5vcHRpb25zPy5vZ2NGaWx0ZXJzPy5hdXRvY29tcGxldGUpIHtcclxuICAgICAgb2djU2VsZWN0b3IucHVzaCh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LmF1dG9jb21wbGV0ZSk7XHJcbiAgICB9XHJcbiAgICBvZ2NTZWxlY3Rvci5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIGlmIChhLm9yZGVyIDwgYi5vcmRlcikge1xyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoYS5vcmRlciA+IGIub3JkZXIpIHtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG9nY1NlbGVjdG9yO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGN1cnJlbnRQdXNoQnV0dG9uc0dyb3VwKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ3B1c2hCdXR0b25zR3JvdXAnKS52YWx1ZTtcclxuICB9XHJcbiAgc2V0IGN1cnJlbnRQdXNoQnV0dG9uc0dyb3VwKHZhbHVlKSB7XHJcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IHB1c2hCdXR0b25zR3JvdXA6IHZhbHVlIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGN1cnJlbnRDaGVja2JveGVzR3JvdXAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtLmdldCgnY2hlY2tib3hlc0dyb3VwJykudmFsdWU7XHJcbiAgfVxyXG4gIHNldCBjdXJyZW50Q2hlY2tib3hlc0dyb3VwKHZhbHVlKSB7XHJcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGNoZWNrYm94ZXNHcm91cDogdmFsdWUgfSk7XHJcbiAgfVxyXG5cclxuICBnZXQgY3VycmVudFJhZGlvQnV0dG9uc0dyb3VwKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ3JhZGlvQnV0dG9uc0dyb3VwJykudmFsdWU7XHJcbiAgfVxyXG4gIHNldCBjdXJyZW50UmFkaW9CdXR0b25zR3JvdXAodmFsdWUpIHtcclxuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgcmFkaW9CdXR0b25zR3JvdXA6IHZhbHVlIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGN1cnJlbnRTZWxlY3RHcm91cCgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KCdzZWxlY3RHcm91cCcpLnZhbHVlO1xyXG4gIH1cclxuICBzZXQgY3VycmVudFNlbGVjdEdyb3VwKHZhbHVlKSB7XHJcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IHNlbGVjdEdyb3VwOiB2YWx1ZSB9KTtcclxuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGN1cnJlbnRBdXRvY29tcGxldGVHcm91cCgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KCdhdXRvY29tcGxldGVHcm91cCcpLnZhbHVlO1xyXG4gIH1cclxuICBzZXQgY3VycmVudEF1dG9jb21wbGV0ZUdyb3VwKHZhbHVlKSB7XHJcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGF1dG9jb21wbGV0ZUdyb3VwOiB2YWx1ZSB9KTtcclxuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNlbGVjdEVuYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RFbmFibGVkJC52YWx1ZTtcclxuICB9XHJcblxyXG4gIHNldCBzZWxlY3RFbmFibGVkKHZhbHVlKSB7XHJcbiAgICB0aGlzLnNlbGVjdEVuYWJsZWQkLm5leHQodmFsdWUpO1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuYXBwbHlGaWx0ZXJzVGltZW91dCk7XHJcbiAgICB0aGlzLmN1cnJlbnRTZWxlY3RHcm91cC5jb21wdXRlZFNlbGVjdG9ycy5mb3JFYWNoKGNvbXBTZWxlY3QgPT4ge1xyXG4gICAgICBjb21wU2VsZWN0LnNlbGVjdG9ycz8uZm9yRWFjaChzZWxlY3RvciA9PiB7XHJcbiAgICAgICAgdmFsdWUgPT09IHNlbGVjdG9yID8gc2VsZWN0b3IuZW5hYmxlZCA9IHRydWUgOiBzZWxlY3Rvci5lbmFibGVkID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hcHBseUZpbHRlcnNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XHJcbiAgICB9LCA3NTApO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNlbGVjdEVuYWJsZWRzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0RW5hYmxlZHMkLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgc2V0IHNlbGVjdEVuYWJsZWRzKHZhbHVlKSB7XHJcbiAgICB0aGlzLnNlbGVjdEVuYWJsZWRzJC5uZXh0KHZhbHVlKTtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLmFwcGx5RmlsdGVyc1RpbWVvdXQpO1xyXG4gICAgdGhpcy5jdXJyZW50U2VsZWN0R3JvdXAuY29tcHV0ZWRTZWxlY3RvcnMuZm9yRWFjaChjb21wU2VsZWN0ID0+IHtcclxuICAgICAgY29tcFNlbGVjdC5zZWxlY3RvcnM/LmZvckVhY2goc2VsZWN0b3IgPT4ge1xyXG4gICAgICAgIHZhbHVlLmluY2x1ZGVzKHNlbGVjdG9yKSA/IHNlbGVjdG9yLmVuYWJsZWQgPSB0cnVlIDogc2VsZWN0b3IuZW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYXBwbHlGaWx0ZXJzVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xyXG4gICAgfSwgNzUwKTtcclxuICB9XHJcblxyXG4gIGdldCBhdXRvY29tcGxldGVFbmFibGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuYXV0b2NvbXBsZXRlRW5hYmxlZCQudmFsdWU7XHJcbiAgfVxyXG5cclxuICBzZXQgYXV0b2NvbXBsZXRlRW5hYmxlZCh2YWx1ZSkge1xyXG4gICAgdGhpcy5hdXRvY29tcGxldGVFbmFibGVkJC5uZXh0KHZhbHVlKTtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLmFwcGx5RmlsdGVyc1RpbWVvdXQpO1xyXG4gICAgdGhpcy5jdXJyZW50QXV0b2NvbXBsZXRlR3JvdXAuY29tcHV0ZWRTZWxlY3RvcnMuZm9yRWFjaChjb21wU2VsZWN0ID0+IHtcclxuICAgICAgY29tcFNlbGVjdC5zZWxlY3RvcnM/LmZvckVhY2goc2VsZWN0b3IgPT4ge1xyXG4gICAgICAgIHZhbHVlID09PSBzZWxlY3Rvci50aXRsZSA/IHNlbGVjdG9yLmVuYWJsZWQgPSB0cnVlIDogc2VsZWN0b3IuZW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYXBwbHlGaWx0ZXJzVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xyXG4gICAgfSwgNzUwKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBvZ2NGaWx0ZXJTZXJ2aWNlOiBPR0NGaWx0ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBkb21TZXJ2aWNlOiBET01TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICApIHtcclxuICAgIHRoaXMub2djRmlsdGVyV3JpdGVyID0gbmV3IE9nY0ZpbHRlcldyaXRlcigpO1xyXG4gICAgdGhpcy5idWlsZEZvcm0oKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRGb3JtKCkge1xyXG4gICAgdGhpcy5mb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgIHB1c2hCdXR0b25zOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIHJhZGlvQnV0dG9uczogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBwdXNoQnV0dG9uc0dyb3VwOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIGNoZWNrYm94ZXNHcm91cDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICByYWRpb0J1dHRvbnNHcm91cDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBzZWxlY3RHcm91cDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBzZWxlY3Q6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgc2VsZWN0TXVsdGk6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgYXV0b2NvbXBsZXRlR3JvdXA6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgYXV0b2NvbXBsZXRlOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHVzaEJ1dHRvbnNHcm91cHMoKTogU2VsZWN0b3JHcm91cFtdIHtcclxuICAgIGlmICh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LnB1c2hCdXR0b25zKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLnB1c2hCdXR0b25zLmdyb3VwcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENoZWNrYm94ZXNHcm91cHMoKTogU2VsZWN0b3JHcm91cFtdIHtcclxuICAgIGlmICh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LmNoZWNrYm94ZXMpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuY2hlY2tib3hlcy5ncm91cHM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRSYWRpb0J1dHRvbnNHcm91cHMoKTogU2VsZWN0b3JHcm91cFtdIHtcclxuICAgIGlmICh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LnJhZGlvQnV0dG9ucykge1xyXG4gICAgICByZXR1cm4gdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5yYWRpb0J1dHRvbnMuZ3JvdXBzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0U2VsZWN0R3JvdXBzKCk6IFNlbGVjdG9yR3JvdXBbXSB7XHJcbiAgICBpZiAodGhpcy5kYXRhc291cmNlPy5vcHRpb25zPy5vZ2NGaWx0ZXJzPy5zZWxlY3QpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuc2VsZWN0Lmdyb3VwcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEF1dG9jb21wbGV0ZUdyb3VwcygpOiBTZWxlY3Rvckdyb3VwW10ge1xyXG4gICAgaWYgKHRoaXMuZGF0YXNvdXJjZT8ub3B0aW9ucz8ub2djRmlsdGVycz8uYXV0b2NvbXBsZXRlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmF1dG9jb21wbGV0ZS5ncm91cHM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgIGlmICh0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzKSB7XHJcbiAgICAgIGlmICh0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLnB1c2hCdXR0b25zKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UHVzaEJ1dHRvbnNHcm91cCA9XHJcbiAgICAgICAgICB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLnB1c2hCdXR0b25zLmdyb3Vwcy5maW5kKGdyb3VwID0+IGdyb3VwLmVuYWJsZWQpIHx8XHJcbiAgICAgICAgICB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLnB1c2hCdXR0b25zLmdyb3Vwc1swXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5jaGVja2JveGVzKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Q2hlY2tib3hlc0dyb3VwID1cclxuICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuY2hlY2tib3hlcy5ncm91cHMuZmluZChncm91cCA9PiBncm91cC5lbmFibGVkKSB8fFxyXG4gICAgICAgICAgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5jaGVja2JveGVzLmdyb3Vwc1swXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5yYWRpb0J1dHRvbnMpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRSYWRpb0J1dHRvbnNHcm91cCA9XHJcbiAgICAgICAgICB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLnJhZGlvQnV0dG9ucy5ncm91cHMuZmluZChncm91cCA9PiBncm91cC5lbmFibGVkKSB8fFxyXG4gICAgICAgICAgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5yYWRpb0J1dHRvbnMuZ3JvdXBzWzBdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLnNlbGVjdCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFNlbGVjdEdyb3VwID1cclxuICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuc2VsZWN0Lmdyb3Vwcy5maW5kKGdyb3VwID0+IGdyb3VwLmVuYWJsZWQpIHx8XHJcbiAgICAgICAgICB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLnNlbGVjdC5ncm91cHNbMF07XHJcbiAgICAgICAgdGhpcy5nZXRTZWxlY3RFbmFibGVkKCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5nZXRTZWxlY3REb21WYWx1ZXMoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5hdXRvY29tcGxldGUpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdXRvY29tcGxldGVHcm91cCA9XHJcbiAgICAgICAgICB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmF1dG9jb21wbGV0ZS5ncm91cHMuZmluZChncm91cCA9PiBncm91cC5lbmFibGVkKSB8fFxyXG4gICAgICAgICAgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5hdXRvY29tcGxldGUuZ3JvdXBzWzBdO1xyXG4gICAgICAgIHRoaXMuZ2V0QXV0b2NvbXBsZXRlRW5hYmxlZCgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZ2V0QXV0b2NvbXBsZXRlRG9tVmFsdWVzKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZvcm1cclxuICAgIC5nZXQoJ3B1c2hCdXR0b25zR3JvdXAnKVxyXG4gICAgLnZhbHVlQ2hhbmdlc1xyXG4gICAgLnBpcGUoZGVib3VuY2VUaW1lKDc1MCkpXHJcbiAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5vblB1c2hCdXR0b25zQ2hhbmdlR3JvdXAoKTtcclxuICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLmZvcm1cclxuICAgIC5nZXQoJ2NoZWNrYm94ZXNHcm91cCcpXHJcbiAgICAudmFsdWVDaGFuZ2VzXHJcbiAgICAucGlwZShkZWJvdW5jZVRpbWUoNzUwKSlcclxuICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLm9uQ2hlY2tib3hlc0NoYW5nZUdyb3VwKCk7XHJcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5mb3JtXHJcbiAgICAgIC5nZXQoJ3JhZGlvQnV0dG9uc0dyb3VwJylcclxuICAgICAgLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoNzUwKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vblJhZGlvQnV0dG9uc0NoYW5nZUdyb3VwKCk7XHJcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLmZvcm1cclxuICAgICAgLmdldCgnc2VsZWN0R3JvdXAnKVxyXG4gICAgICAudmFsdWVDaGFuZ2VzXHJcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSg3NTApKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLm9uU2VsZWN0Q2hhbmdlR3JvdXAoKTtcclxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuZm9ybVxyXG4gICAgICAuZ2V0KCdhdXRvY29tcGxldGVHcm91cCcpXHJcbiAgICAgIC52YWx1ZUNoYW5nZXNcclxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDc1MCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMub25BdXRvY29tcGxldGVDaGFuZ2VHcm91cCgpO1xyXG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5mb3JtXHJcbiAgICAgIC5nZXQoJ3B1c2hCdXR0b25zJylcclxuICAgICAgLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoNzUwKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLmZvcm1cclxuICAgICAgLmdldCgncmFkaW9CdXR0b25zJylcclxuICAgICAgLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoNzUwKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFNlbGVjdEVuYWJsZWQoKSB7XHJcbiAgICBjb25zdCBlbmFibGVkcyA9IFtdO1xyXG4gICAgbGV0IGVuYWJsZWQ7XHJcbiAgICB0aGlzLmN1cnJlbnRTZWxlY3RHcm91cC5jb21wdXRlZFNlbGVjdG9ycy5mb3JFYWNoKGNvbXBTZWxlY3QgPT4ge1xyXG4gICAgICBpZiAoY29tcFNlbGVjdC5tdWx0aXBsZSkge1xyXG4gICAgICAgIGNvbXBTZWxlY3Quc2VsZWN0b3JzPy5mb3JFYWNoKHNlbGVjdG9yID0+IHtcclxuICAgICAgICAgIGlmIChzZWxlY3Rvci5lbmFibGVkKSB7XHJcbiAgICAgICAgICAgIGVuYWJsZWRzLnB1c2goc2VsZWN0b3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0RW5hYmxlZHMgPSBlbmFibGVkcztcclxuICAgICAgICB0aGlzLmZvcm0uY29udHJvbHNbJ3NlbGVjdE11bHRpJ10uc2V0VmFsdWUoZW5hYmxlZHMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbXBTZWxlY3Quc2VsZWN0b3JzPy5mb3JFYWNoKHNlbGVjdG9yID0+IHtcclxuICAgICAgICAgIGlmIChzZWxlY3Rvci5lbmFibGVkKSB7XHJcbiAgICAgICAgICAgIGVuYWJsZWQgPSBzZWxlY3RvcjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmZvcm0uY29udHJvbHNbJ3NlbGVjdCddLnJlc2V0KGVuYWJsZWQpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0RW5hYmxlZCQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMuZm9ybS5jb250cm9sc1snc2VsZWN0J10udmFsdWUgIT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9sc1snc2VsZWN0J10uc2V0VmFsdWUodmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0RW5hYmxlZCA9IGVuYWJsZWQ7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRBdXRvY29tcGxldGVFbmFibGVkKCkge1xyXG4gICAgbGV0IGVuYWJsZWQ7XHJcbiAgICB0aGlzLmN1cnJlbnRBdXRvY29tcGxldGVHcm91cC5jb21wdXRlZFNlbGVjdG9ycy5mb3JFYWNoKGNvbXBTZWxlY3QgPT4ge1xyXG4gICAgICBjb21wU2VsZWN0LnNlbGVjdG9ycz8uZm9yRWFjaChzZWxlY3RvciA9PiB7XHJcbiAgICAgICAgaWYgKHNlbGVjdG9yLmVuYWJsZWQpIHtcclxuICAgICAgICAgIGNvbnN0IGRvbSA9IHtcclxuICAgICAgICAgICAgaWQ6IHNlbGVjdG9yLmZpbHRlcnMuZXhwcmVzc2lvbixcclxuICAgICAgICAgICAgdmFsdWU6IHNlbGVjdG9yLnRpdGxlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgZW5hYmxlZCA9IHNlbGVjdG9yLnRpdGxlO1xyXG4gICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzWydhdXRvY29tcGxldGUnXS5zZXRWYWx1ZShkb20pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlRW5hYmxlZCA9IGVuYWJsZWQ7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldFRvb2xUaXAoc2VsZWN0b3IpOiBzdHJpbmcge1xyXG4gICAgbGV0IHRvb2xUaXA7XHJcbiAgICBpZiAoc2VsZWN0b3IudG9vbHRpcCkge1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShzZWxlY3Rvci50b29sdGlwKSkge1xyXG4gICAgICAgIHRvb2xUaXAgPSBzZWxlY3Rvci50b29sdGlwLmpvaW4oJ1xcbicpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRvb2xUaXAgPSBzZWxlY3Rvci50b29sdGlwO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG9vbFRpcCB8fCAnJztcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldFNlbGVjdERvbVZhbHVlcygpIHtcclxuICAgIGZvciAoY29uc3QgYnVuZGxlIG9mIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuc2VsZWN0LmJ1bmRsZXMpIHtcclxuICAgICAgaWYgKGJ1bmRsZS5kb21TZWxlY3RvcnMpIHtcclxuICAgICAgICBsZXQgZG9tVmFsdWVzO1xyXG4gICAgICAgIGZvciAoY29uc3QgZG9tU2VsZWN0b3Igb2YgYnVuZGxlLmRvbVNlbGVjdG9ycykge1xyXG4gICAgICAgICAgbGV0IGZpbHRlckRPTTtcclxuICAgICAgICAgIGZvciAoY29uc3QgZG9tT3B0aW9ucyBvZiB0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCdkb20nKSkge1xyXG4gICAgICAgICAgICBpZiAoZG9tU2VsZWN0b3IuaWQgPT09IGRvbU9wdGlvbnMuaWQgfHwgZG9tU2VsZWN0b3IubmFtZSA9PT0gZG9tT3B0aW9ucy5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgZmlsdGVyRE9NID0ge1xyXG4gICAgICAgICAgICAgICAgaWQ6IGRvbU9wdGlvbnMuaWQsXHJcbiAgICAgICAgICAgICAgICB1cmw6IGRvbU9wdGlvbnMudXJsLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogZG9tT3B0aW9ucy5uYW1lLFxyXG4gICAgICAgICAgICAgICAgdmFsdWVzOiBkb21PcHRpb25zLnZhbHVlc1xyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGZpbHRlckRPTS51cmwgPyBkb21WYWx1ZXMgPSBhd2FpdCB0aGlzLmRvbVNlcnZpY2UuZ2V0RG9tKGZpbHRlckRPTSkgYXMgRE9NVmFsdWVbXSA6XHJcbiAgICAgICAgICAgIGRvbVZhbHVlcyA9IGZpbHRlckRPTS52YWx1ZXM7XHJcblxyXG4gICAgICAgICAgaWYgKGRvbVZhbHVlcykge1xyXG4gICAgICAgICAgICBsZXQgbmV3QnVuZGxlID0gYnVuZGxlO1xyXG4gICAgICAgICAgICBuZXdCdW5kbGUuc2VsZWN0b3JzID0gW107XHJcbiAgICAgICAgICAgIGxldCBzZWxlY3RvcjtcclxuICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBkb21WYWx1ZXMpIHtcclxuICAgICAgICAgICAgICBpZiAoYnVuZGxlLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZW5hYmxlZDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0RW5hYmxlZHM/LmZpbmQoc2VsID0+IHNlbC50aXRsZSA9PT0gdmFsdWUudmFsdWUpID8gZW5hYmxlZCA9IHRydWUgOiBlbmFibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RvciA9IHtcclxuICAgICAgICAgICAgICAgICAgdGl0bGU6IHZhbHVlLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICBlbmFibGVkLFxyXG4gICAgICAgICAgICAgICAgICBmaWx0ZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IGRvbVNlbGVjdG9yLm9wZXJhdG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZTogZG9tU2VsZWN0b3IucHJvcGVydHlOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IHZhbHVlLmlkLFxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RvciA9IHtcclxuICAgICAgICAgICAgICAgICAgdGl0bGU6IHZhbHVlLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICBlbmFibGVkOiB0aGlzLnNlbGVjdEVuYWJsZWQ/LnRpdGxlID09PSB2YWx1ZS52YWx1ZSA/XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBmaWx0ZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IGRvbVNlbGVjdG9yLm9wZXJhdG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZTogZG9tU2VsZWN0b3IucHJvcGVydHlOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IHZhbHVlLmlkLFxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBuZXdCdW5kbGUuc2VsZWN0b3JzLnB1c2goc2VsZWN0b3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0U2VsZWN0R3JvdXBzKCkuZmluZChncm91cCA9PiBncm91cC5pZHMuaW5jbHVkZXMobmV3QnVuZGxlLmlkKSkuY29tcHV0ZWRTZWxlY3RvcnNcclxuICAgICAgICAgICAgICAuZmluZChjb21wID0+IGNvbXAudGl0bGUgPT09IG5ld0J1bmRsZS50aXRsZSkuc2VsZWN0b3JzID0gbmV3QnVuZGxlLnNlbGVjdG9ycztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5nZXRTZWxlY3RFbmFibGVkKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGdldEF1dG9jb21wbGV0ZURvbVZhbHVlcygpIHtcclxuICAgIGZvciAoY29uc3QgYnVuZGxlIG9mIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuYXV0b2NvbXBsZXRlLmJ1bmRsZXMpIHtcclxuICAgICAgaWYgKGJ1bmRsZS5kb21TZWxlY3RvcnMpIHtcclxuICAgICAgICBsZXQgZG9tVmFsdWVzO1xyXG4gICAgICAgIGZvciAoY29uc3QgZG9tU2VsZWN0b3Igb2YgYnVuZGxlLmRvbVNlbGVjdG9ycykge1xyXG4gICAgICAgICAgbGV0IGZpbHRlckRPTTtcclxuICAgICAgICAgIGZvciAoY29uc3QgZG9tT3B0aW9ucyBvZiB0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCdkb20nKSkge1xyXG4gICAgICAgICAgICBpZiAoZG9tU2VsZWN0b3IuaWQgPT09IGRvbU9wdGlvbnMuaWQgfHwgZG9tU2VsZWN0b3IubmFtZSA9PT0gZG9tT3B0aW9ucy5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgZmlsdGVyRE9NID0ge1xyXG4gICAgICAgICAgICAgICAgaWQ6IGRvbU9wdGlvbnMuaWQsXHJcbiAgICAgICAgICAgICAgICB1cmw6IGRvbU9wdGlvbnMudXJsLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogZG9tT3B0aW9ucy5uYW1lLFxyXG4gICAgICAgICAgICAgICAgdmFsdWVzOiBkb21PcHRpb25zLnZhbHVlc1xyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGZpbHRlckRPTS51cmwgPyBkb21WYWx1ZXMgPSBhd2FpdCB0aGlzLmRvbVNlcnZpY2UuZ2V0RG9tKGZpbHRlckRPTSkgYXMgRE9NVmFsdWVbXSA6XHJcbiAgICAgICAgICAgIGRvbVZhbHVlcyA9IGZpbHRlckRPTS52YWx1ZXM7XHJcblxyXG4gICAgICAgICAgaWYgKGRvbVZhbHVlcykge1xyXG4gICAgICAgICAgICBsZXQgbmV3QnVuZGxlID0gYnVuZGxlO1xyXG4gICAgICAgICAgICBuZXdCdW5kbGUuc2VsZWN0b3JzID0gW107XHJcbiAgICAgICAgICAgIGxldCBzZWxlY3RvcjtcclxuICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBkb21WYWx1ZXMpIHtcclxuICAgICAgICAgICAgICBzZWxlY3RvciA9IHtcclxuICAgICAgICAgICAgICAgIHRpdGxlOiB2YWx1ZS52YWx1ZSxcclxuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRoaXMuYXV0b2NvbXBsZXRlRW5hYmxlZCAmJiB0aGlzLmF1dG9jb21wbGV0ZUVuYWJsZWQgPT09IHZhbHVlLnZhbHVlID9cclxuICAgICAgICAgICAgICAgICAgdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgZmlsdGVyczoge1xyXG4gICAgICAgICAgICAgICAgICBvcGVyYXRvcjogZG9tU2VsZWN0b3Iub3BlcmF0b3IsXHJcbiAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZTogZG9tU2VsZWN0b3IucHJvcGVydHlOYW1lLFxyXG4gICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiB2YWx1ZS5pZCxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIG5ld0J1bmRsZS5zZWxlY3RvcnMucHVzaChzZWxlY3Rvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5nZXRBdXRvY29tcGxldGVHcm91cHMoKS5maW5kKGdyb3VwID0+IGdyb3VwLmlkcy5pbmNsdWRlcyhuZXdCdW5kbGUuaWQpKS5jb21wdXRlZFNlbGVjdG9yc1xyXG4gICAgICAgICAgICAgIC5maW5kKGNvbXAgPT4gY29tcC50aXRsZSA9PT0gbmV3QnVuZGxlLnRpdGxlKS5zZWxlY3RvcnMgPSBuZXdCdW5kbGUuc2VsZWN0b3JzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5maWx0ZXJlZE9nY0F1dG9jb21wbGV0ZVtidW5kbGUuaWRdID0gbmV3IE9ic2VydmFibGU8YW55W10+KCk7XHJcbiAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJlZE9nY0F1dG9jb21wbGV0ZVtidW5kbGUuaWRdID0gdGhpcy5mb3JtLmNvbnRyb2xzWydhdXRvY29tcGxldGUnXS52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgICAgICAgIG1hcCh2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gZG9tVmFsdWVzPy5maWx0ZXIoKG9wdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyTm9ybWFsaXplZCA9IHZhbHVlID8gdmFsdWUudG9Mb3dlckNhc2UoKS5ub3JtYWxpemUoJ05GRCcpLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKSA6ICcnO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmVhdHVyZU5hbWVOb3JtYWxpemVkID0gb3B0aW9uLnZhbHVlLnRvTG93ZXJDYXNlKCkubm9ybWFsaXplKCdORkQnKS5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmVhdHVyZU5hbWVOb3JtYWxpemVkLmluY2x1ZGVzKGZpbHRlck5vcm1hbGl6ZWQpO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGdldEJ1dHRvblN0eWxlKHBiOiBPZ2NQdXNoQnV0dG9uKToge30ge1xyXG5cclxuICAvLyAgIGxldCBzdHlsZXM7XHJcbiAgLy8gICBpZiAocGIuY29sb3IpIHtcclxuICAvLyAgICAgc3R5bGVzID0ge1xyXG4gIC8vICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogcGIuZW5hYmxlZCA/IGByZ2JhKCR7cGIuY29sb3J9KWAgOiBgcmdiYSgyNTUsMjU1LDI1NSwwKWBcclxuICAvLyAgICAgfTtcclxuICAvLyAgIH0gZWxzZSB7XHJcbiAgLy8gICAgIHN0eWxlcyA9IHtcclxuICAvLyAgICAgICAnYmFja2dyb3VuZC1jb2xvcic6IHBiLmVuYWJsZWQgPyAnYWNjZW50JzogYHJnYmEoMjU1LDI1NSwyNTUsMClgLFxyXG4gIC8vICAgICAgICdjb2xvcic6IHBiLmVuYWJsZWQgPyBgcmdiYSgwLDAsMCwwLjkpYCA6IGByZ2JhKDMzLDMzLDMzLDAuMzgpYFxyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9XHJcbiAgLy8gICByZXR1cm4gc3R5bGVzO1xyXG4gIC8vIH1cclxuXHJcbiAgZ2V0QnV0dG9uQ29sb3IocHVzaEJ1dHRvbjogT2djUHVzaEJ1dHRvbik6IHt9IHtcclxuICAgIGxldCBzdHlsZXM7XHJcbiAgICBpZiAocHVzaEJ1dHRvbi5jb2xvciAmJiBwdXNoQnV0dG9uLmVuYWJsZWQpIHtcclxuICAgICAgc3R5bGVzID0ge1xyXG4gICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogYHJnYmEoJHtwdXNoQnV0dG9uLmNvbG9yfSlgXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3R5bGVzO1xyXG4gIH1cclxuXHJcbiAgYnVuZGxlSXNWZXJ0aWNhbChidW5kbGU6IE9nY1NlbGVjdG9yQnVuZGxlKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gYnVuZGxlLnZlcnRpY2FsID8gYnVuZGxlLnZlcnRpY2FsIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uUHVzaEJ1dHRvbnNDaGFuZ2VHcm91cCgpIHtcclxuICAgIHRoaXMuZ2V0UHVzaEJ1dHRvbnNHcm91cHMoKS5tYXAoZ3JvdXAgPT4gZ3JvdXAuZW5hYmxlZCA9IGZhbHNlKTtcclxuICAgIHRoaXMuZ2V0UHVzaEJ1dHRvbnNHcm91cHMoKS5maW5kKGdyb3VwID0+IGdyb3VwID09PSB0aGlzLmN1cnJlbnRQdXNoQnV0dG9uc0dyb3VwKS5lbmFibGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25DaGVja2JveGVzQ2hhbmdlR3JvdXAoKSB7XHJcbiAgICB0aGlzLmdldENoZWNrYm94ZXNHcm91cHMoKS5tYXAoZ3JvdXAgPT4gZ3JvdXAuZW5hYmxlZCA9IGZhbHNlKTtcclxuICAgIHRoaXMuZ2V0Q2hlY2tib3hlc0dyb3VwcygpLmZpbmQoZ3JvdXAgPT4gZ3JvdXAgPT09IHRoaXMuY3VycmVudENoZWNrYm94ZXNHcm91cCkuZW5hYmxlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uUmFkaW9CdXR0b25zQ2hhbmdlR3JvdXAoKSB7XHJcbiAgICB0aGlzLmdldFJhZGlvQnV0dG9uc0dyb3VwcygpLm1hcChncm91cCA9PiBncm91cC5lbmFibGVkID0gZmFsc2UpO1xyXG4gICAgdGhpcy5nZXRSYWRpb0J1dHRvbnNHcm91cHMoKS5maW5kKGdyb3VwID0+IGdyb3VwID09PSB0aGlzLmN1cnJlbnRSYWRpb0J1dHRvbnNHcm91cCkuZW5hYmxlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uU2VsZWN0Q2hhbmdlR3JvdXAoKSB7XHJcbiAgICB0aGlzLmdldFNlbGVjdEdyb3VwcygpLm1hcChncm91cCA9PiBncm91cC5lbmFibGVkID0gZmFsc2UpO1xyXG4gICAgdGhpcy5nZXRTZWxlY3RHcm91cHMoKS5maW5kKGdyb3VwID0+IGdyb3VwID09PSB0aGlzLmN1cnJlbnRTZWxlY3RHcm91cCkuZW5hYmxlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uQXV0b2NvbXBsZXRlQ2hhbmdlR3JvdXAoKSB7XHJcbiAgICB0aGlzLmdldEF1dG9jb21wbGV0ZUdyb3VwcygpLm1hcChncm91cCA9PiBncm91cC5lbmFibGVkID0gZmFsc2UpO1xyXG4gICAgdGhpcy5nZXRBdXRvY29tcGxldGVHcm91cHMoKS5maW5kKGdyb3VwID0+IGdyb3VwID09PSB0aGlzLmN1cnJlbnRBdXRvY29tcGxldGVHcm91cCkuZW5hYmxlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdGlvbkNoYW5nZShjdXJyZW50T2djU2VsZWN0aW9uPywgc2VsZWN0b3JUeXBlPykge1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuYXBwbHlGaWx0ZXJzVGltZW91dCk7XHJcbiAgICBpZiAoc2VsZWN0b3JUeXBlID09PSAncmFkaW9CdXR0b24nKSB7XHJcbiAgICAgIHRoaXMuZW1wdHlSYWRpb0J1dHRvbnMoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY3VycmVudE9nY1NlbGVjdGlvbikge1xyXG4gICAgICBjdXJyZW50T2djU2VsZWN0aW9uLmVuYWJsZWQgPSAhY3VycmVudE9nY1NlbGVjdGlvbi5lbmFibGVkO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hcHBseUZpbHRlcnNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XHJcbiAgICB9LCA3NTApO1xyXG4gIH1cclxuXHJcbiAgZW1wdHlSYWRpb0J1dHRvbnMoKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRSYWRpb0J1dHRvbnNHcm91cC5jb21wdXRlZFNlbGVjdG9ycy5mb3JFYWNoKGNvbXBTZWxlY3QgPT4ge1xyXG4gICAgICBjb21wU2VsZWN0LnNlbGVjdG9ycy5tYXAoc2VsZWN0b3IgPT4gc2VsZWN0b3IuZW5hYmxlZCA9IGZhbHNlKTtcclxuXHJcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XHJcbiAgICAgIH0sIDc1MCk7XHJcbiAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZW1wdHlTZWxlY3QoKSB7XHJcbiAgICB0aGlzLnNlbGVjdEVuYWJsZWQgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBlbXB0eUF1dG9jb21wbGV0ZSgpIHtcclxuICAgIHRoaXMuYXV0b2NvbXBsZXRlRW5hYmxlZCA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuZm9ybS5jb250cm9sc1snYXV0b2NvbXBsZXRlJ10uc2V0VmFsdWUoJycpO1xyXG4gICAgdGhpcy5mb3JtLmNvbnRyb2xzWydhdXRvY29tcGxldGUnXS5tYXJrQXNVbnRvdWNoZWQoKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZUFsbFNlbGVjdGlvbigpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdEFsbFNlbGVjdGVkKSB7XHJcbiAgICAgIGNvbnN0IGVuYWJsZWRzID0gW107XHJcbiAgICAgIHRoaXMuY3VycmVudFNlbGVjdEdyb3VwLmNvbXB1dGVkU2VsZWN0b3JzLmZvckVhY2goY29tcFNlbGVjdCA9PiB7XHJcbiAgICAgICAgY29tcFNlbGVjdC5zZWxlY3RvcnM/LmZvckVhY2goc2VsZWN0b3IgPT4ge1xyXG4gICAgICAgICAgZW5hYmxlZHMucHVzaChzZWxlY3Rvcik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnNlbC5vcHRpb25zLmZvckVhY2goKGl0ZW06IE1hdE9wdGlvbikgPT4gaXRlbS5zZWxlY3QoKSk7XHJcbiAgICAgIHRoaXMuc2VsZWN0RW5hYmxlZHMgPSBlbmFibGVkcztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsLm9wdGlvbnMuZm9yRWFjaCgoaXRlbTogTWF0T3B0aW9uKSA9PiBpdGVtLmRlc2VsZWN0KCkpO1xyXG4gICAgICB0aGlzLnNlbGVjdEVuYWJsZWRzID0gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RPcHRpb25DbGljayh2YWx1ZSwgYnVuZGxlLCBldmVudD8pIHtcclxuICAgIGlmIChidW5kbGUubXVsdGlwbGUpIHtcclxuICAgICAgY29uc3QgZW5hYmxlZHMgPSB0aGlzLnNlbGVjdEVuYWJsZWRzO1xyXG4gICAgICBsZXQgbmV3U3RhdHVzID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zZWwub3B0aW9ucy5mb3JFYWNoKChpdGVtOiBNYXRPcHRpb24pID0+IHtcclxuICAgICAgICBpZiAoIWl0ZW0uc2VsZWN0ZWQpIHtcclxuICAgICAgICAgIG5ld1N0YXR1cyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuc2VsZWN0QWxsU2VsZWN0ZWQgPSBuZXdTdGF0dXM7XHJcbiAgICAgIGlmIChldmVudC5pc1VzZXJJbnB1dCkge1xyXG4gICAgICAgIGlmIChlbmFibGVkcy5sZW5ndGgpIHtcclxuICAgICAgICAgIGZvciAoY29uc3QgZW5hYmxlZCBvZiBlbmFibGVkcykge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZC50aXRsZSA9PT0gdmFsdWUudGl0bGUpIHtcclxuICAgICAgICAgICAgICBpZiAoZW5hYmxlZC5lbmFibGVkICYmIHZhbHVlLmVuYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIGVuYWJsZWRzLnNwbGljZShlbmFibGVkcy5pbmRleE9mKGVuYWJsZWQpLCAxKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0RW5hYmxlZHMgPSBlbmFibGVkcztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChlbmFibGVkcy5pbmRleE9mKGVuYWJsZWQpID09PSBlbmFibGVkcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgZW5hYmxlZHMucHVzaCh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RFbmFibGVkcyA9IGVuYWJsZWRzO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGVuYWJsZWRzLnB1c2godmFsdWUpO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RFbmFibGVkcyA9IGVuYWJsZWRzO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RFbmFibGVkID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhdXRvY29tcGxldGVPcHRpb25DbGljayh2YWx1ZSkge1xyXG4gICAgdGhpcy5hdXRvY29tcGxldGVFbmFibGVkID0gdmFsdWUudmFsdWU7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5Rm4oZG9tKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBkb20gPyBkb20udmFsdWUgOiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5RmlsdGVycygpIHtcclxuICAgIGxldCBmaWx0ZXJRdWVyeVN0cmluZyA9ICcnO1xyXG4gICAgY29uc3QgY29uZGl0aW9ucyA9IFtdO1xyXG4gICAgY29uc3QgY3VycmVudEdyb3VwcyA9IFt0aGlzLmN1cnJlbnRQdXNoQnV0dG9uc0dyb3VwLCB0aGlzLmN1cnJlbnRDaGVja2JveGVzR3JvdXAsXHJcbiAgICAgIHRoaXMuY3VycmVudFJhZGlvQnV0dG9uc0dyb3VwLCB0aGlzLmN1cnJlbnRTZWxlY3RHcm91cCwgdGhpcy5jdXJyZW50QXV0b2NvbXBsZXRlR3JvdXBdO1xyXG4gICAgZm9yIChjb25zdCBjdXJyZW50R3JvdXAgb2YgY3VycmVudEdyb3Vwcykge1xyXG4gICAgICBpZiAoY3VycmVudEdyb3VwLmNvbXB1dGVkU2VsZWN0b3JzKSB7XHJcbiAgICAgICAgY3VycmVudEdyb3VwLmNvbXB1dGVkU2VsZWN0b3JzLm1hcChzZWxlY3RvckJ1bmRsZSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBidW5kbGVDb25kaXRpb24gPSBbXTtcclxuICAgICAgICAgIHNlbGVjdG9yQnVuZGxlLnNlbGVjdG9ycz8uZmlsdGVyKG9nY1NlbGVjdG9yID0+IG9nY1NlbGVjdG9yLmVuYWJsZWQgPT09IHRydWUpXHJcbiAgICAgICAgICAuZm9yRWFjaChlbmFibGVkU2VsZWN0b3IgPT4gYnVuZGxlQ29uZGl0aW9uLnB1c2goZW5hYmxlZFNlbGVjdG9yLmZpbHRlcnMpKTtcclxuICAgICAgICAgIGlmIChidW5kbGVDb25kaXRpb24ubGVuZ3RoID49IDEgKSB7XHJcbiAgICAgICAgICAgIGlmIChidW5kbGVDb25kaXRpb24ubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgY29uZGl0aW9ucy5wdXNoKGJ1bmRsZUNvbmRpdGlvblswXSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29uZGl0aW9ucy5wdXNoKHtsb2dpY2FsOiBzZWxlY3RvckJ1bmRsZS5sb2dpY2FsLCBmaWx0ZXJzOiBidW5kbGVDb25kaXRpb259KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pc1RlbXBvcmFsT3BlcmF0b3IoKSAmJiB0aGlzLl9jdXJyZW50RmlsdGVyLmFjdGl2ZSkge1xyXG4gICAgICBjb25kaXRpb25zLnB1c2godGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5pbnRlcmZhY2VPZ2NGaWx0ZXJzWzBdKTtcclxuICAgIH1cclxuICAgIGlmIChjb25kaXRpb25zLmxlbmd0aCA+PSAxKSB7XHJcbiAgICAgIGZpbHRlclF1ZXJ5U3RyaW5nID0gdGhpcy5vZ2NGaWx0ZXJXcml0ZXJcclxuICAgICAgICAuYnVpbGRGaWx0ZXIoY29uZGl0aW9ucy5sZW5ndGggPT09IDEgP1xyXG4gICAgICAgICAgY29uZGl0aW9uc1swXSA6IHtsb2dpY2FsOiAnQW5kJywgZmlsdGVyczogY29uZGl0aW9ucyB9IGFzIElnb09nY0ZpbHRlck9iamVjdCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kYXRhc291cmNlLm9wdGlvbnMudHlwZSA9PT0gJ3dtcycpIHtcclxuICAgICAgdGhpcy5vZ2NGaWx0ZXJTZXJ2aWNlLmZpbHRlckJ5T2djKHRoaXMuZGF0YXNvdXJjZSBhcyBXTVNEYXRhU291cmNlLCBmaWx0ZXJRdWVyeVN0cmluZyApO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLnR5cGUgPT09ICd3ZnMnKSB7XHJcbiAgICAgIC8vIFRPRE86IENoZWNrIGhvdyB0byBwcmV2ZW50IHdmcyB0byByZWZyZXNoIHdoZW4gZmlsdGVyIGljb24gaXMgcHVzaGVkLi4uXHJcbiAgICAgIHRoaXMuZGF0YXNvdXJjZS5vbC5yZWZyZXNoKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRhdGFzb3VyY2Uuc2V0T2djRmlsdGVycyh0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLCB0cnVlKTtcclxuICB9XHJcblxyXG4gIGlzTW9yZVJlc3VsdHMoYnVuZGxlLCB0eXBlKSB7XHJcbiAgICBsZXQgc2VsZWN0b3JzTGVuZ3RoID0gMDtcclxuICAgIGZvciAoY29uc3Qgc2VsZWN0b3JzIG9mIGJ1bmRsZS5zZWxlY3RvcnMpIHtcclxuICAgICAgc2VsZWN0b3JzTGVuZ3RoKys7XHJcbiAgICB9XHJcbiAgICBjb25zdCBpbmRleCA9IHR5cGUgPT09ICdyYWRpbycgPyB0aGlzLnJhZGlvQnV0dG9uc0luZGV4IDogdGhpcy5jaGVja2JveGVzSW5kZXg7XHJcbiAgICByZXR1cm4gc2VsZWN0b3JzTGVuZ3RoID4gaW5kZXg7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5TW9yZVJlc3VsdHModHlwZSkge1xyXG4gICAgdHlwZSA9PT0gJ3JhZGlvJyA/IHRoaXMucmFkaW9CdXR0b25zSW5kZXggKz0gNSA6IHRoaXMuY2hlY2tib3hlc0luZGV4ICs9IDU7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBpc0xlc3NSZXN1bHRzKGJ1bmRsZSwgdHlwZSkge1xyXG4gICAgbGV0IHNlbGVjdG9yc0xlbmd0aCA9IDA7XHJcbiAgICBmb3IgKGNvbnN0IHNlbGVjdG9ycyBvZiBidW5kbGUuc2VsZWN0b3JzKSB7XHJcbiAgICAgIHNlbGVjdG9yc0xlbmd0aCsrO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaW5kZXggPSB0eXBlID09PSAncmFkaW8nID8gdGhpcy5yYWRpb0J1dHRvbnNJbmRleCA6IHRoaXMuY2hlY2tib3hlc0luZGV4O1xyXG4gICAgcmV0dXJuIHRoaXMuYmFzZUluZGV4ICE9PSBpbmRleCAmJiBzZWxlY3RvcnNMZW5ndGggPiB0aGlzLmJhc2VJbmRleDtcclxuICB9XHJcblxyXG4gIGRpc3BsYXlMZXNzUmVzdWx0cyh0eXBlKSB7XHJcbiAgICB0eXBlID09PSAncmFkaW8nID8gdGhpcy5yYWRpb0J1dHRvbnNJbmRleCA9IHRoaXMuYmFzZUluZGV4IDogdGhpcy5jaGVja2JveGVzSW5kZXggPSB0aGlzLmJhc2VJbmRleDtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGlzVGVtcG9yYWxPcGVyYXRvcigpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlcj8ub3BlcmF0b3I/LnRvTG93ZXJDYXNlKCkgPT09XHJcbiAgICAgIHRoaXMub2djRmlsdGVyT3BlcmF0b3IuRHVyaW5nLnRvTG93ZXJDYXNlKClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VQcm9wZXJ0eSh2YWx1ZTogYW55LCBwb3M/OiBudW1iZXIsIHJlZnJlc2hGaWx0ZXIgPSB0cnVlKSB7XHJcbiAgICBjb25zdCBkZXRlY3RlZFByb3BlcnR5ID0gdGhpcy5kZXRlY3RQcm9wZXJ0eShwb3MpO1xyXG4gICAgaWYgKGRldGVjdGVkUHJvcGVydHkpIHtcclxuICAgICAgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5pbnRlcmZhY2VPZ2NGaWx0ZXJzLmZpbmQoXHJcbiAgICAgICAgZmlsdGVyID0+IGZpbHRlci5maWx0ZXJpZCA9PT0gdGhpcy5jdXJyZW50RmlsdGVyLmZpbHRlcmlkXHJcbiAgICAgIClbZGV0ZWN0ZWRQcm9wZXJ0eV0gPSB2YWx1ZTtcclxuXHJcbiAgICAgIGlmICggcmVmcmVzaEZpbHRlciApIHtcclxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkZXRlY3RQcm9wZXJ0eShwb3M/OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoICh0aGlzLmN1cnJlbnRGaWx0ZXIub3BlcmF0b3IpIHtcclxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzTm90RXF1YWxUbzpcclxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzRXF1YWxUbzpcclxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzR3JlYXRlclRoYW46XHJcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0dyZWF0ZXJUaGFuT3JFcXVhbFRvOlxyXG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLlByb3BlcnR5SXNMZXNzVGhhbjpcclxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzTGVzc1RoYW5PckVxdWFsVG86XHJcbiAgICAgICAgcmV0dXJuICdleHByZXNzaW9uJztcclxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzTGlrZTpcclxuICAgICAgICByZXR1cm4gJ3BhdHRlcm4nO1xyXG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLlByb3BlcnR5SXNCZXR3ZWVuOlxyXG4gICAgICAgIHJldHVybiBwb3MgJiYgcG9zID09PSAxXHJcbiAgICAgICAgICA/ICdsb3dlckJvdW5kYXJ5J1xyXG4gICAgICAgICAgOiBwb3MgJiYgcG9zID09PSAyXHJcbiAgICAgICAgICA/ICd1cHBlckJvdW5kYXJ5J1xyXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuRHVyaW5nOlxyXG4gICAgICAgIHJldHVybiBwb3MgJiYgcG9zID09PSAxXHJcbiAgICAgICAgICA/ICdiZWdpbidcclxuICAgICAgICAgIDogcG9zICYmIHBvcyA9PT0gMlxyXG4gICAgICAgICAgPyAnZW5kJ1xyXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIj5cclxuICA8ZGl2ICpuZ0Zvcj1cImxldCBzZWxlY3RvciBvZiBvZ2NGaWx0ZXJzU2VsZWN0b3JzXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicHVzaEJ1dHRvbkdyb3Vwc1wiICpuZ0lmPVwic2VsZWN0b3Iuc2VsZWN0b3JUeXBlID09PSAncHVzaEJ1dHRvbidcIj5cclxuICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJncm91cHNTZWxlY3RvclwiICpuZ0lmPVwiZ2V0UHVzaEJ1dHRvbnNHcm91cHMoKS5sZW5ndGggPiAxXCI+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPG1hdC1zZWxlY3RcclxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicHVzaEJ1dHRvbnNHcm91cFwiXHJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmxheWVyLmxlZ2VuZC5zZWxlY3RTdHlsZScgfCB0cmFuc2xhdGVcIiB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIiBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgICAgICAgICAgWyh2YWx1ZSldPVwiY3VycmVudFB1c2hCdXR0b25zR3JvdXBcIj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHNlbGVjdG9yR3JvdXAgb2YgZ2V0UHVzaEJ1dHRvbnNHcm91cHMoKVwiXHJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlbGVjdG9yR3JvdXBcIj57e3NlbGVjdG9yR3JvdXAudGl0bGV9fVxyXG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ1bmRsZSBvZiBjdXJyZW50UHVzaEJ1dHRvbnNHcm91cC5jb21wdXRlZFNlbGVjdG9yc1wiPlxyXG4gICAgICAgIDxoND57e2J1bmRsZS50aXRsZX19PC9oND5cclxuICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXBcclxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInB1c2hCdXR0b25zXCIgY2xhc3M9XCJtYXQtdHlwb2dyYXBoeVwiIGFwcGVhcmFuY2U9XCJsZWdhY3lcIiB2ZXJ0aWNhbD17e2J1bmRsZUlzVmVydGljYWwoYnVuZGxlKX19IG11bHRpcGxlPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlICpuZ0Zvcj1cImxldCBvZ2NQdXNoQnV0dG9uIG9mIGJ1bmRsZS5zZWxlY3RvcnNcIlxyXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJnZXRUb29sVGlwKG9nY1B1c2hCdXR0b24pXCIgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCIgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiIG1hdFRvb2x0aXBDbGFzcz1cIm1hdGVyaWFsLXRvb2x0aXBcIlxyXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJnZXRCdXR0b25Db2xvcihvZ2NQdXNoQnV0dG9uKVwiXHJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cIm9nY1B1c2hCdXR0b24uZW5hYmxlZFwiIChjaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2Uob2djUHVzaEJ1dHRvbiwgc2VsZWN0b3Iuc2VsZWN0b3JUeXBlKVwiXHJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJvZ2NQdXNoQnV0dG9uXCI+e3tvZ2NQdXNoQnV0dG9uLnRpdGxlfX1cclxuICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XHJcbiAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hHcm91cHNcIiAqbmdJZj1cInNlbGVjdG9yLnNlbGVjdG9yVHlwZSA9PT0gJ2NoZWNrYm94J1wiPlxyXG4gICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgPGRpdiBjbGFzcz1cImdyb3Vwc1NlbGVjdG9yXCIgKm5nSWY9XCJnZXRDaGVja2JveGVzR3JvdXBzKCkubGVuZ3RoID4gMVwiPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDxtYXQtc2VsZWN0XHJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNoZWNrYm94ZXNHcm91cFwiXHJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmxheWVyLmxlZ2VuZC5zZWxlY3RTdHlsZScgfCB0cmFuc2xhdGVcIiB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIiBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgICAgICAgICAgWyh2YWx1ZSldPVwiY3VycmVudENoZWNrYm94ZXNHcm91cFwiPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgc2VsZWN0b3JHcm91cCBvZiBnZXRDaGVja2JveGVzR3JvdXBzKClcIlxyXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJzZWxlY3Rvckdyb3VwXCI+e3tzZWxlY3Rvckdyb3VwLnRpdGxlfX1cclxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBidW5kbGUgb2YgY3VycmVudENoZWNrYm94ZXNHcm91cC5jb21wdXRlZFNlbGVjdG9yc1wiPlxyXG4gICAgICAgIDxoND57e2J1bmRsZS50aXRsZX19PC9oND5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hlcyBtYXQtdHlwb2dyYXBoeVwiPlxyXG4gICAgICAgICAgPG1hdC1jaGVja2JveCAqbmdGb3I9XCJsZXQgb2djQ2hlY2tib3ggb2YgYnVuZGxlLnNlbGVjdG9yc1wiXHJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImdldFRvb2xUaXAob2djQ2hlY2tib3gpXCIgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCIgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiICBtYXRUb29sdGlwQ2xhc3M9XCJtYXRlcmlhbC10b29sdGlwXCJcclxuICAgICAgICAgICAgW2NoZWNrZWRdPVwib2djQ2hlY2tib3guZW5hYmxlZFwiIChjaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2Uob2djQ2hlY2tib3gsIHNlbGVjdG9yLnNlbGVjdG9yVHlwZSlcIlxyXG4gICAgICAgICAgICBbdmFsdWVdPVwib2djQ2hlY2tib3hcIj57e29nY0NoZWNrYm94LnRpdGxlfX1cclxuICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxwICpuZ0lmPVwiaXNMZXNzUmVzdWx0cyhidW5kbGUsICdjaGVja2JveCcpIHx8IGlzTW9yZVJlc3VsdHMoYnVuZGxlLCAnY2hlY2tib3gnKVwiPlxyXG4gICAgICAgICAgPHUgKm5nSWY9XCJpc0xlc3NSZXN1bHRzKGJ1bmRsZSwgJ2NoZWNrYm94JylcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImxlc3NSZXN1bHRzIG1hdC10eXBvZ3JhcGh5XCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImRpc3BsYXlMZXNzUmVzdWx0cygnY2hlY2tib3gnKVwiPnt7ICdpZ28uZ2VvLmZpbHRlci5kaXNwbGF5TGVzc1Jlc3VsdHMnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICA8L3U+XHJcbiAgICAgICAgICA8dSAqbmdJZj1cImlzTW9yZVJlc3VsdHMoYnVuZGxlLCAnY2hlY2tib3gnKVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwibW9yZVJlc3VsdHMgbWF0LXR5cG9ncmFwaHlcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiZGlzcGxheU1vcmVSZXN1bHRzKCdjaGVja2JveCcpXCI+e3sgJ2lnby5nZW8uZmlsdGVyLmRpc3BsYXlNb3JlUmVzdWx0cycgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgIDwvdT5cclxuICAgICAgICA8L3A+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInJhZGlvQnV0dG9uR3JvdXBzXCIgKm5nSWY9XCJzZWxlY3Rvci5zZWxlY3RvclR5cGUgPT09ICdyYWRpb0J1dHRvbidcIj5cclxuICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJncm91cHNTZWxlY3RvclwiICpuZ0lmPVwiZ2V0UmFkaW9CdXR0b25zR3JvdXBzKCkubGVuZ3RoID4gMVwiPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDxtYXQtc2VsZWN0XHJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInJhZGlvQnV0dG9uc0dyb3VwXCJcclxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8ubGF5ZXIubGVnZW5kLnNlbGVjdFN0eWxlJyB8IHRyYW5zbGF0ZVwiIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgICAgICAgICBbKHZhbHVlKV09XCJjdXJyZW50UmFkaW9CdXR0b25zR3JvdXBcIj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHNlbGVjdG9yR3JvdXAgb2YgZ2V0UmFkaW9CdXR0b25zR3JvdXBzKClcIlxyXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJzZWxlY3Rvckdyb3VwXCI+e3tzZWxlY3Rvckdyb3VwLnRpdGxlfX1cclxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBidW5kbGUgb2YgY3VycmVudFJhZGlvQnV0dG9uc0dyb3VwLmNvbXB1dGVkU2VsZWN0b3JzXCI+XHJcbiAgICAgICAgPGg0Pnt7YnVuZGxlLnRpdGxlfX08L2g0PlxyXG4gICAgICAgIDxtYXQtcmFkaW8tZ3JvdXBcclxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInJhZGlvQnV0dG9uc1wiIGNsYXNzPVwibWF0LXR5cG9ncmFwaHlcIj5cclxuICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uICpuZ0lmPVwiYnVuZGxlLnVuZmlsdGVyZWRcIlxyXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5maWx0ZXIucmVzZXRGaWx0ZXJzJyB8IHRyYW5zbGF0ZVwiIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIiAgbWF0VG9vbHRpcENsYXNzPVwibWF0ZXJpYWwtdG9vbHRpcFwiXHJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwiZW1wdHlSYWRpb0J1dHRvbnMoKVwiPnt7ICdpZ28uZ2VvLmZpbHRlci5yZXNldEZpbHRlcnMnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICA8L21hdC1yYWRpby1idXR0b24+XHJcbiAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiAqbmdGb3I9XCJsZXQgb2djUmFkaW9CdXR0b24gb2YgYnVuZGxlLnNlbGVjdG9yc1wiXHJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImdldFRvb2xUaXAob2djUmFkaW9CdXR0b24pXCIgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCIgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiICBtYXRUb29sdGlwQ2xhc3M9XCJtYXRlcmlhbC10b29sdGlwXCJcclxuICAgICAgICAgICAgW2NoZWNrZWRdPVwib2djUmFkaW9CdXR0b24uZW5hYmxlZFwiIChjaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2Uob2djUmFkaW9CdXR0b24sIHNlbGVjdG9yLnNlbGVjdG9yVHlwZSlcIlxyXG4gICAgICAgICAgICBbdmFsdWVdPVwib2djUmFkaW9CdXR0b25cIj57e29nY1JhZGlvQnV0dG9uLnRpdGxlfX1cclxuICAgICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICAgIDxwICpuZ0lmPVwiaXNMZXNzUmVzdWx0cyhidW5kbGUsICdyYWRpbycpIHx8IGlzTW9yZVJlc3VsdHMoYnVuZGxlLCAncmFkaW8nKVwiPlxyXG4gICAgICAgICAgICA8dSAqbmdJZj1cImlzTGVzc1Jlc3VsdHMoYnVuZGxlLCAncmFkaW8nKVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJsZXNzUmVzdWx0cyBtYXQtdHlwb2dyYXBoeVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImRpc3BsYXlMZXNzUmVzdWx0cygncmFkaW8nKVwiPnt7ICdpZ28uZ2VvLmZpbHRlci5kaXNwbGF5TGVzc1Jlc3VsdHMnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgIDwvdT5cclxuICAgICAgICAgICAgPHUgKm5nSWY9XCJpc01vcmVSZXN1bHRzKGJ1bmRsZSwgJ3JhZGlvJylcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwibW9yZVJlc3VsdHMgbWF0LXR5cG9ncmFwaHlcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJkaXNwbGF5TW9yZVJlc3VsdHMoJ3JhZGlvJylcIj57eyAnaWdvLmdlby5maWx0ZXIuZGlzcGxheU1vcmVSZXN1bHRzJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L3U+XHJcbiAgICAgICAgICA8L3A+XHJcbiAgICAgICAgPC9tYXQtcmFkaW8tZ3JvdXA+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInNlbGVjdEdyb3Vwc1wiICpuZ0lmPVwic2VsZWN0b3Iuc2VsZWN0b3JUeXBlID09PSAnc2VsZWN0J1wiPlxyXG4gICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgPGRpdiBjbGFzcz1cImdyb3Vwc1NlbGVjdG9yXCIgKm5nSWY9XCJnZXRTZWxlY3RHcm91cHMoKS5sZW5ndGggPiAxXCI+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPG1hdC1zZWxlY3RcclxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VsZWN0R3JvdXBcIlxyXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5sYXllci5sZWdlbmQuc2VsZWN0U3R5bGUnIHwgdHJhbnNsYXRlXCIgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCIgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgICAgICAgIFsodmFsdWUpXT1cImN1cnJlbnRTZWxlY3RHcm91cFwiPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgc2VsZWN0b3JHcm91cCBvZiBnZXRTZWxlY3RHcm91cHMoKVwiXHJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlbGVjdG9yR3JvdXBcIj57e3NlbGVjdG9yR3JvdXAudGl0bGV9fVxyXG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ1bmRsZSBvZiBjdXJyZW50U2VsZWN0R3JvdXAuY29tcHV0ZWRTZWxlY3RvcnNcIj5cclxuICAgICAgICA8aDQ+e3tidW5kbGUudGl0bGV9fTwvaDQ+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImdyb3Vwc1NlbGVjdG9yXCI+XHJcbiAgICAgICAgICA8bWF0LWJ1dHRvbiAqbmdJZj1cImJ1bmRsZS51bmZpbHRlcmVkICYmICFidW5kbGUubXVsdGlwbGVcIlxyXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgY29sb3I9XCJ3YXJuXCJcclxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uZmlsdGVyLnJlc2V0RmlsdGVycycgfCB0cmFuc2xhdGVcIiB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIiBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCIgIG1hdFRvb2x0aXBDbGFzcz1cIm1hdGVyaWFsLXRvb2x0aXBcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiZW1wdHlTZWxlY3QoKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImZpbHRlci1yZW1vdmVcIj48L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9tYXQtYnV0dG9uPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIFtzdHlsZS53aWR0aC4lXT1cImJ1bmRsZS53aWR0aCA/IGJ1bmRsZS53aWR0aCA6IHVuZGVmaW5lZFwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYnVuZGxlLm11bHRpcGxlOyBlbHNlIG5vdE11bHRpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcclxuICAgICAgICAgICAgICAgICNzZWxlY3Rpb24gW211bHRpcGxlXT1cImJ1bmRsZS5tdWx0aXBsZVwiIFtwbGFjZWhvbGRlcl09XCJidW5kbGUudGl0bGVcIiBmb3JtQ29udHJvbE5hbWU9XCJzZWxlY3RNdWx0aVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94ZXMgbWF0LXR5cG9ncmFwaHlcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCAqbmdJZj1cImJ1bmRsZS5tdWx0aXBsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RBbGxTZWxlY3RlZFwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlQWxsU2VsZWN0aW9uKClcIj5Ub3VzXHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb2djU2VsZWN0IG9mIGJ1bmRsZS5zZWxlY3RvcnNcIlxyXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJnZXRUb29sVGlwKG9nY1NlbGVjdClcIiB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIiBtYXRUb29sdGlwRGVsYXk9XCI1MDBcIiBtYXRUb29sdGlwQ2xhc3M9XCJtYXRlcmlhbC10b29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgKG9uU2VsZWN0aW9uQ2hhbmdlKT1cInNlbGVjdE9wdGlvbkNsaWNrKCRldmVudC5zb3VyY2UudmFsdWUsIGJ1bmRsZSwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJvZ2NTZWxlY3RcIj57e29nY1NlbGVjdC50aXRsZX19XHJcbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3RNdWx0aT5cclxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImJ1bmRsZS50aXRsZVwiIGZvcm1Db250cm9sTmFtZT1cInNlbGVjdFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9nY1NlbGVjdCBvZiBidW5kbGUuc2VsZWN0b3JzXCJcclxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiZ2V0VG9vbFRpcChvZ2NTZWxlY3QpXCIgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCIgbWF0VG9vbHRpcERlbGF5PVwiNTAwXCIgbWF0VG9vbHRpcENsYXNzPVwibWF0ZXJpYWwtdG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJvZ2NTZWxlY3RcIiAob25TZWxlY3Rpb25DaGFuZ2UpPVwic2VsZWN0T3B0aW9uQ2xpY2soJGV2ZW50LnNvdXJjZS52YWx1ZSwgYnVuZGxlKVwiPnt7b2djU2VsZWN0LnRpdGxlfX1cclxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJhdXRvY29tcGxldGVHcm91cHNcIiAqbmdJZj1cInNlbGVjdG9yLnNlbGVjdG9yVHlwZSA9PT0gJ2F1dG9jb21wbGV0ZSdcIj5cclxuICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJncm91cHNTZWxlY3RvclwiICpuZ0lmPVwiZ2V0QXV0b2NvbXBsZXRlR3JvdXBzKCkubGVuZ3RoID4gMVwiPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDxtYXQtc2VsZWN0XHJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImF1dG9jb21wbGV0ZUdyb3VwXCJcclxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8ubGF5ZXIubGVnZW5kLnNlbGVjdFN0eWxlJyB8IHRyYW5zbGF0ZVwiIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgICAgICAgICBbKHZhbHVlKV09XCJjdXJyZW50QXV0b2NvbXBsZXRlR3JvdXBcIj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGF1dG9jb21wbGV0ZUdyb3VwIG9mIGdldEF1dG9jb21wbGV0ZUdyb3VwcygpXCJcclxuICAgICAgICAgICAgICBbdmFsdWVdPVwiYXV0b2NvbXBsZXRlR3JvdXBcIj57e2F1dG9jb21wbGV0ZUdyb3VwLnRpdGxlfX1cclxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBidW5kbGUgb2YgY3VycmVudEF1dG9jb21wbGV0ZUdyb3VwLmNvbXB1dGVkU2VsZWN0b3JzXCI+XHJcbiAgICAgICAgPGg0Pnt7YnVuZGxlLnRpdGxlfX08L2g0PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJncm91cHNTZWxlY3RvclwiPlxyXG4gICAgICAgICAgPG1hdC1idXR0b24gKm5nSWY9XCJidW5kbGUudW5maWx0ZXJlZFwiXHJcbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICBjb2xvcj1cIndhcm5cIlxyXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5maWx0ZXIucmVzZXRGaWx0ZXJzJyB8IHRyYW5zbGF0ZVwiIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIiAgbWF0VG9vbHRpcENsYXNzPVwibWF0ZXJpYWwtdG9vbHRpcFwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJlbXB0eUF1dG9jb21wbGV0ZSgpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiZmlsdGVyLXJlbW92ZVwiPjwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L21hdC1idXR0b24+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJmaWx0ZXJlZE9nY0F1dG9jb21wbGV0ZVtidW5kbGUuaWRdXCIgW3N0eWxlLndpZHRoLiVdPVwiYnVuZGxlLndpZHRoID8gYnVuZGxlLndpZHRoIDogdW5kZWZpbmVkXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cImF1dG9jb21wbGV0ZVwiICNhdXRvY29tcGxldGUgY2xhc3M9XCJhdXRvY29tcGxldGVcIlxyXG4gICAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiIFtwbGFjZWhvbGRlcl09XCJidW5kbGUudGl0bGVcIj5cclxuICAgICAgICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZSAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiICNhdXRvY29tcGxldGUgKG9wdGlvblNlbGVjdGVkKT1cImF1dG9jb21wbGV0ZU9wdGlvbkNsaWNrKCRldmVudC5vcHRpb24udmFsdWUpXCJcclxuICAgICAgICAgICAgICBbZGlzcGxheVdpdGhdPVwiZGlzcGxheUZuXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb2djQXV0b2NvbXBsZXRlIG9mIGZpbHRlcmVkT2djQXV0b2NvbXBsZXRlW2J1bmRsZS5pZF0gfCBhc3luY1wiIFt2YWx1ZV09XCJvZ2NBdXRvY29tcGxldGVcIj5cclxuICAgICAgICAgICAgICAgICAge3sgb2djQXV0b2NvbXBsZXRlLnZhbHVlIH19XHJcbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9mb3JtPlxyXG5cclxuPGRpdiAqbmdJZj1cImlzVGVtcG9yYWxPcGVyYXRvcigpXCI+XHJcbiAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgPGg0ICpuZ0lmPVwiIWN1cnJlbnRGaWx0ZXIudGl0bGVcIj57eyAnaWdvLmdlby5maWx0ZXIucmVwb3J0aW5nRGF0ZScgfCB0cmFuc2xhdGUgfX08L2g0PlxyXG4gIDxoNCAqbmdJZj1cImN1cnJlbnRGaWx0ZXIudGl0bGVcIj57eyBjdXJyZW50RmlsdGVyLnRpdGxlIH19PC9oND5cclxuICA8aWdvLW9nYy1maWx0ZXItdGltZVxyXG4gICAgWyhkYXRhc291cmNlKV09XCJkYXRhc291cmNlXCJcclxuICAgIFsoY3VycmVudEZpbHRlcildPVwiY3VycmVudEZpbHRlclwiXHJcbiAgICAoY2hhbmdlUHJvcGVydHkpPVwiY2hhbmdlUHJvcGVydHkoJGV2ZW50LnZhbHVlLCAkZXZlbnQucG9zKVwiPlxyXG4gIDwvaWdvLW9nYy1maWx0ZXItdGltZT5cclxuPC9kaXY+Il19
1302
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2djLWZpbHRlci1zZWxlY3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvZmlsdGVyL29nYy1maWx0ZXItc2VsZWN0aW9uL29nYy1maWx0ZXItc2VsZWN0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9vZ2MtZmlsdGVyLXNlbGVjdGlvbi9vZ2MtZmlsdGVyLXNlbGVjdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULEtBQUssRUFFTCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLFVBQVUsRUFBWSxNQUFNLGNBQWMsQ0FBQztBQVVwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFJakUsT0FBTyxFQUEwQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztJQ2xCdkMsc0NBQzBCO0lBQUEsWUFDMUI7SUFBQSxpQkFBYTs7O0lBRFgseUNBQXVCO0lBQUMsZUFDMUI7SUFEMEIsdURBQzFCOzs7O0lBUk4sK0JBQXNFLHFCQUFBLHFCQUFBO0lBS2hFLHlRQUFtQzs7SUFDbkMsNkdBRWE7SUFDZixpQkFBYSxFQUFBLEVBQUE7OztJQUxYLGVBQTZEO0lBQTdELHFGQUE2RCx5Q0FBQTtJQUV2QixlQUF5QjtJQUF6Qix1REFBeUI7Ozs7SUFVakUsNkNBSTBCO0lBRFUsd1ZBQVUsZUFBQSxzRUFB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WUFFYixjQUFjO2tCQUF0QixLQUFLO1lBRUcsVUFBVTtrQkFBbEIsS0FBSztZQUVHLEdBQUc7a0JBQVgsS0FBSztZQUVHLGVBQWU7a0JBQXZCLEtBQUs7WUFDRyxpQkFBaUI7a0JBQXpCLEtBQUs7WUFDRyxTQUFTO2tCQUFqQixLQUFLO1lBR0YsYUFBYTtrQkFEaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlJztcclxuaW1wb3J0IHsgRE9NU2VydmljZSwgRE9NVmFsdWUgfSBmcm9tICdAaWdvMi9jb21tb24nO1xyXG5cclxuaW1wb3J0IHtcclxuICBPZ2NGaWx0ZXJhYmxlRGF0YVNvdXJjZSxcclxuICBJZ29PZ2NGaWx0ZXJPYmplY3QsXHJcbiAgT2djUHVzaEJ1dHRvbixcclxuICBPZ2NTZWxlY3RvckJ1bmRsZSxcclxuICBTZWxlY3Rvckdyb3VwXHJcblxyXG59IGZyb20gJy4uLy4uL2ZpbHRlci9zaGFyZWQvb2djLWZpbHRlci5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBPZ2NGaWx0ZXJXcml0ZXIgfSBmcm9tICcuLi8uLi9maWx0ZXIvc2hhcmVkL29nYy1maWx0ZXInO1xyXG5pbXBvcnQgeyBJZ29NYXAgfSBmcm9tICcuLi8uLi9tYXAnO1xyXG5pbXBvcnQgeyBPR0NGaWx0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL29nYy1maWx0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFdNU0RhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi9kYXRhc291cmNlL3NoYXJlZC9kYXRhc291cmNlcy93bXMtZGF0YXNvdXJjZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBPZ2NGaWx0ZXJPcGVyYXRvciB9IGZyb20gJy4uL3NoYXJlZC9vZ2MtZmlsdGVyLmVudW0nO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3QgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5pbXBvcnQgeyBNYXRPcHRpb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2lnby1vZ2MtZmlsdGVyLXNlbGVjdGlvbicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL29nYy1maWx0ZXItc2VsZWN0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9vZ2MtZmlsdGVyLXNlbGVjdGlvbi5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogWyBET01TZXJ2aWNlIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIE9nY0ZpbHRlclNlbGVjdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3NlbGVjdGlvbicpIHNlbDogTWF0U2VsZWN0O1xyXG5cclxuICBASW5wdXQoKSByZWZyZXNoRmlsdGVyczogKCkgPT4gdm9pZDtcclxuXHJcbiAgQElucHV0KCkgZGF0YXNvdXJjZTogT2djRmlsdGVyYWJsZURhdGFTb3VyY2U7XHJcblxyXG4gIEBJbnB1dCgpIG1hcDogSWdvTWFwO1xyXG5cclxuICBASW5wdXQoKSBjaGVja2JveGVzSW5kZXggPSA1O1xyXG4gIEBJbnB1dCgpIHJhZGlvQnV0dG9uc0luZGV4ID0gNTtcclxuICBASW5wdXQoKSBiYXNlSW5kZXggPSA1O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBjdXJyZW50RmlsdGVyKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEZpbHRlcjtcclxuICB9XHJcbiAgc2V0IGN1cnJlbnRGaWx0ZXIodmFsdWUpIHtcclxuICAgIHRoaXMuX2N1cnJlbnRGaWx0ZXIgPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLl9jdXJyZW50RmlsdGVyPy5zbGlkZXJPcHRpb25zKSB7XHJcbiAgICAgIHRoaXMuX2N1cnJlbnRGaWx0ZXIuc2xpZGVyT3B0aW9ucy5lbmFibGVkID0gZmFsc2U7IC8vIHJlbW92ZSBzbGlkZXIgdG9nZ2xlIChhbmltYXRpb24gdGVtcG9yZWxsZSlcclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSBfY3VycmVudEZpbHRlcjogYW55O1xyXG5cclxuICBwdWJsaWMgb2djRmlsdGVyT3BlcmF0b3IgPSBPZ2NGaWx0ZXJPcGVyYXRvcjtcclxuXHJcbiAgcHVibGljIGZvcm06IEZvcm1Hcm91cDtcclxuICBwcml2YXRlIG9nY0ZpbHRlcldyaXRlcjogT2djRmlsdGVyV3JpdGVyO1xyXG4gIHB1YmxpYyBjb2xvciA9ICdwcmltYXJ5JztcclxuICBwdWJsaWMgc2VsZWN0QWxsU2VsZWN0ZWQgPSBmYWxzZTtcclxuICBwdWJsaWMgc2VsZWN0RW5hYmxlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XHJcbiAgcHVibGljIHNlbGVjdEVuYWJsZWRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoW10pO1xyXG4gIHB1YmxpYyBhdXRvY29tcGxldGVFbmFibGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3QodW5kZWZpbmVkKTtcclxuICBwdWJsaWMgZmlsdGVyZWRPZ2NBdXRvY29tcGxldGUgPSB7fTtcclxuXHJcbiAgcHVibGljIGFwcGx5RmlsdGVyc1RpbWVvdXQ7XHJcblxyXG4gIGdldCBvZ2NGaWx0ZXJzU2VsZWN0b3JzKCkge1xyXG4gICAgY29uc3Qgb2djU2VsZWN0b3IgPSBbXTtcclxuICAgIGlmICh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LnB1c2hCdXR0b25zKSB7XHJcbiAgICAgIG9nY1NlbGVjdG9yLnB1c2godGhpcy5kYXRhc291cmNlPy5vcHRpb25zPy5vZ2NGaWx0ZXJzPy5wdXNoQnV0dG9ucyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kYXRhc291cmNlPy5vcHRpb25zPy5vZ2NGaWx0ZXJzPy5jaGVja2JveGVzKSB7XHJcbiAgICAgIG9nY1NlbGVjdG9yLnB1c2godGhpcy5kYXRhc291cmNlPy5vcHRpb25zPy5vZ2NGaWx0ZXJzPy5jaGVja2JveGVzKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LnJhZGlvQnV0dG9ucykge1xyXG4gICAgICBvZ2NTZWxlY3Rvci5wdXNoKHRoaXMuZGF0YXNvdXJjZT8ub3B0aW9ucz8ub2djRmlsdGVycz8ucmFkaW9CdXR0b25zKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LnNlbGVjdCkge1xyXG4gICAgICBvZ2NTZWxlY3Rvci5wdXNoKHRoaXMuZGF0YXNvdXJjZT8ub3B0aW9ucz8ub2djRmlsdGVycz8uc2VsZWN0KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LmF1dG9jb21wbGV0ZSkge1xyXG4gICAgICBvZ2NTZWxlY3Rvci5wdXNoKHRoaXMuZGF0YXNvdXJjZT8ub3B0aW9ucz8ub2djRmlsdGVycz8uYXV0b2NvbXBsZXRlKTtcclxuICAgIH1cclxuICAgIG9nY1NlbGVjdG9yLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgaWYgKGEub3JkZXIgPCBiLm9yZGVyKSB7XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChhLm9yZGVyID4gYi5vcmRlcikge1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gb2djU2VsZWN0b3I7XHJcbiAgfVxyXG5cclxuICBnZXQgY3VycmVudFB1c2hCdXR0b25zR3JvdXAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtLmdldCgncHVzaEJ1dHRvbnNHcm91cCcpLnZhbHVlO1xyXG4gIH1cclxuICBzZXQgY3VycmVudFB1c2hCdXR0b25zR3JvdXAodmFsdWUpIHtcclxuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgcHVzaEJ1dHRvbnNHcm91cDogdmFsdWUgfSk7XHJcbiAgfVxyXG5cclxuICBnZXQgY3VycmVudENoZWNrYm94ZXNHcm91cCgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KCdjaGVja2JveGVzR3JvdXAnKS52YWx1ZTtcclxuICB9XHJcbiAgc2V0IGN1cnJlbnRDaGVja2JveGVzR3JvdXAodmFsdWUpIHtcclxuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgY2hlY2tib3hlc0dyb3VwOiB2YWx1ZSB9KTtcclxuICB9XHJcblxyXG4gIGdldCBjdXJyZW50UmFkaW9CdXR0b25zR3JvdXAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtLmdldCgncmFkaW9CdXR0b25zR3JvdXAnKS52YWx1ZTtcclxuICB9XHJcbiAgc2V0IGN1cnJlbnRSYWRpb0J1dHRvbnNHcm91cCh2YWx1ZSkge1xyXG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyByYWRpb0J1dHRvbnNHcm91cDogdmFsdWUgfSk7XHJcbiAgfVxyXG5cclxuICBnZXQgY3VycmVudFNlbGVjdEdyb3VwKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ3NlbGVjdEdyb3VwJykudmFsdWU7XHJcbiAgfVxyXG4gIHNldCBjdXJyZW50U2VsZWN0R3JvdXAodmFsdWUpIHtcclxuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgc2VsZWN0R3JvdXA6IHZhbHVlIH0pO1xyXG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgY3VycmVudEF1dG9jb21wbGV0ZUdyb3VwKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ2F1dG9jb21wbGV0ZUdyb3VwJykudmFsdWU7XHJcbiAgfVxyXG4gIHNldCBjdXJyZW50QXV0b2NvbXBsZXRlR3JvdXAodmFsdWUpIHtcclxuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgYXV0b2NvbXBsZXRlR3JvdXA6IHZhbHVlIH0pO1xyXG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgc2VsZWN0RW5hYmxlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdEVuYWJsZWQkLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgc2V0IHNlbGVjdEVuYWJsZWQodmFsdWUpIHtcclxuICAgIHRoaXMuc2VsZWN0RW5hYmxlZCQubmV4dCh2YWx1ZSk7XHJcbiAgICBjbGVhclRpbWVvdXQodGhpcy5hcHBseUZpbHRlcnNUaW1lb3V0KTtcclxuICAgIHRoaXMuY3VycmVudFNlbGVjdEdyb3VwLmNvbXB1dGVkU2VsZWN0b3JzLmZvckVhY2goY29tcFNlbGVjdCA9PiB7XHJcbiAgICAgIGNvbXBTZWxlY3Quc2VsZWN0b3JzPy5mb3JFYWNoKHNlbGVjdG9yID0+IHtcclxuICAgICAgICB2YWx1ZSA9PT0gc2VsZWN0b3IgPyBzZWxlY3Rvci5lbmFibGVkID0gdHJ1ZSA6IHNlbGVjdG9yLmVuYWJsZWQgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFwcGx5RmlsdGVyc1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcclxuICAgIH0sIDc1MCk7XHJcbiAgfVxyXG5cclxuICBnZXQgc2VsZWN0RW5hYmxlZHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RFbmFibGVkcyQudmFsdWU7XHJcbiAgfVxyXG5cclxuICBzZXQgc2VsZWN0RW5hYmxlZHModmFsdWUpIHtcclxuICAgIHRoaXMuc2VsZWN0RW5hYmxlZHMkLm5leHQodmFsdWUpO1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuYXBwbHlGaWx0ZXJzVGltZW91dCk7XHJcbiAgICB0aGlzLmN1cnJlbnRTZWxlY3RHcm91cC5jb21wdXRlZFNlbGVjdG9ycy5mb3JFYWNoKGNvbXBTZWxlY3QgPT4ge1xyXG4gICAgICBjb21wU2VsZWN0LnNlbGVjdG9ycz8uZm9yRWFjaChzZWxlY3RvciA9PiB7XHJcbiAgICAgICAgdmFsdWUuaW5jbHVkZXMoc2VsZWN0b3IpID8gc2VsZWN0b3IuZW5hYmxlZCA9IHRydWUgOiBzZWxlY3Rvci5lbmFibGVkID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hcHBseUZpbHRlcnNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XHJcbiAgICB9LCA3NTApO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGF1dG9jb21wbGV0ZUVuYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5hdXRvY29tcGxldGVFbmFibGVkJC52YWx1ZTtcclxuICB9XHJcblxyXG4gIHNldCBhdXRvY29tcGxldGVFbmFibGVkKHZhbHVlKSB7XHJcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUVuYWJsZWQkLm5leHQodmFsdWUpO1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuYXBwbHlGaWx0ZXJzVGltZW91dCk7XHJcbiAgICB0aGlzLmN1cnJlbnRBdXRvY29tcGxldGVHcm91cC5jb21wdXRlZFNlbGVjdG9ycy5mb3JFYWNoKGNvbXBTZWxlY3QgPT4ge1xyXG4gICAgICBjb21wU2VsZWN0LnNlbGVjdG9ycz8uZm9yRWFjaChzZWxlY3RvciA9PiB7XHJcbiAgICAgICAgdmFsdWUgPT09IHNlbGVjdG9yLnRpdGxlID8gc2VsZWN0b3IuZW5hYmxlZCA9IHRydWUgOiBzZWxlY3Rvci5lbmFibGVkID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hcHBseUZpbHRlcnNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XHJcbiAgICB9LCA3NTApO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIG9nY0ZpbHRlclNlcnZpY2U6IE9HQ0ZpbHRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgZG9tU2VydmljZTogRE9NU2VydmljZSxcclxuICAgIHByaXZhdGUgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcclxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgKSB7XHJcbiAgICB0aGlzLm9nY0ZpbHRlcldyaXRlciA9IG5ldyBPZ2NGaWx0ZXJXcml0ZXIoKTtcclxuICAgIHRoaXMuYnVpbGRGb3JtKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkRm9ybSgpIHtcclxuICAgIHRoaXMuZm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBwdXNoQnV0dG9uczogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICByYWRpb0J1dHRvbnM6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgcHVzaEJ1dHRvbnNHcm91cDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBjaGVja2JveGVzR3JvdXA6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgcmFkaW9CdXR0b25zR3JvdXA6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgc2VsZWN0R3JvdXA6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgc2VsZWN0OiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIHNlbGVjdE11bHRpOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIGF1dG9jb21wbGV0ZUdyb3VwOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIGF1dG9jb21wbGV0ZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldFB1c2hCdXR0b25zR3JvdXBzKCk6IFNlbGVjdG9yR3JvdXBbXSB7XHJcbiAgICBpZiAodGhpcy5kYXRhc291cmNlPy5vcHRpb25zPy5vZ2NGaWx0ZXJzPy5wdXNoQnV0dG9ucykge1xyXG4gICAgICByZXR1cm4gdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5wdXNoQnV0dG9ucy5ncm91cHM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRDaGVja2JveGVzR3JvdXBzKCk6IFNlbGVjdG9yR3JvdXBbXSB7XHJcbiAgICBpZiAodGhpcy5kYXRhc291cmNlPy5vcHRpb25zPy5vZ2NGaWx0ZXJzPy5jaGVja2JveGVzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmNoZWNrYm94ZXMuZ3JvdXBzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UmFkaW9CdXR0b25zR3JvdXBzKCk6IFNlbGVjdG9yR3JvdXBbXSB7XHJcbiAgICBpZiAodGhpcy5kYXRhc291cmNlPy5vcHRpb25zPy5vZ2NGaWx0ZXJzPy5yYWRpb0J1dHRvbnMpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMucmFkaW9CdXR0b25zLmdyb3VwcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFNlbGVjdEdyb3VwcygpOiBTZWxlY3Rvckdyb3VwW10ge1xyXG4gICAgaWYgKHRoaXMuZGF0YXNvdXJjZT8ub3B0aW9ucz8ub2djRmlsdGVycz8uc2VsZWN0KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLnNlbGVjdC5ncm91cHM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRBdXRvY29tcGxldGVHcm91cHMoKTogU2VsZWN0b3JHcm91cFtdIHtcclxuICAgIGlmICh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LmF1dG9jb21wbGV0ZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5hdXRvY29tcGxldGUuZ3JvdXBzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycykge1xyXG4gICAgICBpZiAodGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5wdXNoQnV0dG9ucykge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFB1c2hCdXR0b25zR3JvdXAgPVxyXG4gICAgICAgICAgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5wdXNoQnV0dG9ucy5ncm91cHMuZmluZChncm91cCA9PiBncm91cC5lbmFibGVkKSB8fFxyXG4gICAgICAgICAgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5wdXNoQnV0dG9ucy5ncm91cHNbMF07XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuY2hlY2tib3hlcykge1xyXG4gICAgICAgIHRoaXMuY3VycmVudENoZWNrYm94ZXNHcm91cCA9XHJcbiAgICAgICAgICB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmNoZWNrYm94ZXMuZ3JvdXBzLmZpbmQoZ3JvdXAgPT4gZ3JvdXAuZW5hYmxlZCkgfHxcclxuICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuY2hlY2tib3hlcy5ncm91cHNbMF07XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMucmFkaW9CdXR0b25zKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UmFkaW9CdXR0b25zR3JvdXAgPVxyXG4gICAgICAgICAgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5yYWRpb0J1dHRvbnMuZ3JvdXBzLmZpbmQoZ3JvdXAgPT4gZ3JvdXAuZW5hYmxlZCkgfHxcclxuICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMucmFkaW9CdXR0b25zLmdyb3Vwc1swXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5zZWxlY3QpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRTZWxlY3RHcm91cCA9XHJcbiAgICAgICAgICB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLnNlbGVjdC5ncm91cHMuZmluZChncm91cCA9PiBncm91cC5lbmFibGVkKSB8fFxyXG4gICAgICAgICAgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5zZWxlY3QuZ3JvdXBzWzBdO1xyXG4gICAgICAgIHRoaXMuZ2V0U2VsZWN0RW5hYmxlZCgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZ2V0U2VsZWN0RG9tVmFsdWVzKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuYXV0b2NvbXBsZXRlKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXV0b2NvbXBsZXRlR3JvdXAgPVxyXG4gICAgICAgICAgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5hdXRvY29tcGxldGUuZ3JvdXBzLmZpbmQoZ3JvdXAgPT4gZ3JvdXAuZW5hYmxlZCkgfHxcclxuICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuYXV0b2NvbXBsZXRlLmdyb3Vwc1swXTtcclxuICAgICAgICB0aGlzLmdldEF1dG9jb21wbGV0ZUVuYWJsZWQoKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmdldEF1dG9jb21wbGV0ZURvbVZhbHVlcygpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5mb3JtXHJcbiAgICAuZ2V0KCdwdXNoQnV0dG9uc0dyb3VwJylcclxuICAgIC52YWx1ZUNoYW5nZXNcclxuICAgIC5waXBlKGRlYm91bmNlVGltZSg3NTApKVxyXG4gICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMub25QdXNoQnV0dG9uc0NoYW5nZUdyb3VwKCk7XHJcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5mb3JtXHJcbiAgICAuZ2V0KCdjaGVja2JveGVzR3JvdXAnKVxyXG4gICAgLnZhbHVlQ2hhbmdlc1xyXG4gICAgLnBpcGUoZGVib3VuY2VUaW1lKDc1MCkpXHJcbiAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5vbkNoZWNrYm94ZXNDaGFuZ2VHcm91cCgpO1xyXG4gICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuZm9ybVxyXG4gICAgICAuZ2V0KCdyYWRpb0J1dHRvbnNHcm91cCcpXHJcbiAgICAgIC52YWx1ZUNoYW5nZXNcclxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDc1MCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMub25SYWRpb0J1dHRvbnNDaGFuZ2VHcm91cCgpO1xyXG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5mb3JtXHJcbiAgICAgIC5nZXQoJ3NlbGVjdEdyb3VwJylcclxuICAgICAgLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoNzUwKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vblNlbGVjdENoYW5nZUdyb3VwKCk7XHJcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLmZvcm1cclxuICAgICAgLmdldCgnYXV0b2NvbXBsZXRlR3JvdXAnKVxyXG4gICAgICAudmFsdWVDaGFuZ2VzXHJcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSg3NTApKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLm9uQXV0b2NvbXBsZXRlQ2hhbmdlR3JvdXAoKTtcclxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuZm9ybVxyXG4gICAgICAuZ2V0KCdwdXNoQnV0dG9ucycpXHJcbiAgICAgIC52YWx1ZUNoYW5nZXNcclxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDc1MCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5mb3JtXHJcbiAgICAgIC5nZXQoJ3JhZGlvQnV0dG9ucycpXHJcbiAgICAgIC52YWx1ZUNoYW5nZXNcclxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDc1MCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRTZWxlY3RFbmFibGVkKCkge1xyXG4gICAgY29uc3QgZW5hYmxlZHMgPSBbXTtcclxuICAgIGxldCBlbmFibGVkO1xyXG4gICAgdGhpcy5jdXJyZW50U2VsZWN0R3JvdXAuY29tcHV0ZWRTZWxlY3RvcnMuZm9yRWFjaChjb21wU2VsZWN0ID0+IHtcclxuICAgICAgaWYgKGNvbXBTZWxlY3QubXVsdGlwbGUpIHtcclxuICAgICAgICBjb21wU2VsZWN0LnNlbGVjdG9ycz8uZm9yRWFjaChzZWxlY3RvciA9PiB7XHJcbiAgICAgICAgICBpZiAoc2VsZWN0b3IuZW5hYmxlZCkge1xyXG4gICAgICAgICAgICBlbmFibGVkcy5wdXNoKHNlbGVjdG9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnNlbGVjdEVuYWJsZWRzID0gZW5hYmxlZHM7XHJcbiAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzWydzZWxlY3RNdWx0aSddLnNldFZhbHVlKGVuYWJsZWRzKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb21wU2VsZWN0LnNlbGVjdG9ycz8uZm9yRWFjaChzZWxlY3RvciA9PiB7XHJcbiAgICAgICAgICBpZiAoc2VsZWN0b3IuZW5hYmxlZCkge1xyXG4gICAgICAgICAgICBlbmFibGVkID0gc2VsZWN0b3I7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzWydzZWxlY3QnXS5yZXNldChlbmFibGVkKTtcclxuICAgICAgICB0aGlzLnNlbGVjdEVuYWJsZWQkLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLmZvcm0uY29udHJvbHNbJ3NlbGVjdCddLnZhbHVlICE9PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHNbJ3NlbGVjdCddLnNldFZhbHVlKHZhbHVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnNlbGVjdEVuYWJsZWQgPSBlbmFibGVkO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QXV0b2NvbXBsZXRlRW5hYmxlZCgpIHtcclxuICAgIGxldCBlbmFibGVkO1xyXG4gICAgdGhpcy5jdXJyZW50QXV0b2NvbXBsZXRlR3JvdXAuY29tcHV0ZWRTZWxlY3RvcnMuZm9yRWFjaChjb21wU2VsZWN0ID0+IHtcclxuICAgICAgY29tcFNlbGVjdC5zZWxlY3RvcnM/LmZvckVhY2goc2VsZWN0b3IgPT4ge1xyXG4gICAgICAgIGlmIChzZWxlY3Rvci5lbmFibGVkKSB7XHJcbiAgICAgICAgICBjb25zdCBkb20gPSB7XHJcbiAgICAgICAgICAgIGlkOiBzZWxlY3Rvci5maWx0ZXJzLmV4cHJlc3Npb24sXHJcbiAgICAgICAgICAgIHZhbHVlOiBzZWxlY3Rvci50aXRsZVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIGVuYWJsZWQgPSBzZWxlY3Rvci50aXRsZTtcclxuICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9sc1snYXV0b2NvbXBsZXRlJ10uc2V0VmFsdWUoZG9tKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUVuYWJsZWQgPSBlbmFibGVkO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRUb29sVGlwKHNlbGVjdG9yKTogc3RyaW5nIHtcclxuICAgIGxldCB0b29sVGlwO1xyXG4gICAgaWYgKHNlbGVjdG9yLnRvb2x0aXApIHtcclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2VsZWN0b3IudG9vbHRpcCkpIHtcclxuICAgICAgICB0b29sVGlwID0gc2VsZWN0b3IudG9vbHRpcC5qb2luKCdcXG4nKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0b29sVGlwID0gc2VsZWN0b3IudG9vbHRpcDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRvb2xUaXAgfHwgJyc7XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRTZWxlY3REb21WYWx1ZXMoKSB7XHJcbiAgICBmb3IgKGNvbnN0IGJ1bmRsZSBvZiB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLnNlbGVjdC5idW5kbGVzKSB7XHJcbiAgICAgIGlmIChidW5kbGUuZG9tU2VsZWN0b3JzKSB7XHJcbiAgICAgICAgbGV0IGRvbVZhbHVlcztcclxuICAgICAgICBmb3IgKGNvbnN0IGRvbVNlbGVjdG9yIG9mIGJ1bmRsZS5kb21TZWxlY3RvcnMpIHtcclxuICAgICAgICAgIGxldCBmaWx0ZXJET007XHJcbiAgICAgICAgICBmb3IgKGNvbnN0IGRvbU9wdGlvbnMgb2YgdGhpcy5jb25maWdTZXJ2aWNlLmdldENvbmZpZygnZG9tJykpIHtcclxuICAgICAgICAgICAgaWYgKGRvbVNlbGVjdG9yLmlkID09PSBkb21PcHRpb25zLmlkIHx8IGRvbVNlbGVjdG9yLm5hbWUgPT09IGRvbU9wdGlvbnMubmFtZSkge1xyXG4gICAgICAgICAgICAgIGZpbHRlckRPTSA9IHtcclxuICAgICAgICAgICAgICAgIGlkOiBkb21PcHRpb25zLmlkLFxyXG4gICAgICAgICAgICAgICAgdXJsOiBkb21PcHRpb25zLnVybCxcclxuICAgICAgICAgICAgICAgIG5hbWU6IGRvbU9wdGlvbnMubmFtZSxcclxuICAgICAgICAgICAgICAgIHZhbHVlczogZG9tT3B0aW9ucy52YWx1ZXNcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBmaWx0ZXJET00udXJsID8gZG9tVmFsdWVzID0gYXdhaXQgdGhpcy5kb21TZXJ2aWNlLmdldERvbShmaWx0ZXJET00pIGFzIERPTVZhbHVlW10gOlxyXG4gICAgICAgICAgICBkb21WYWx1ZXMgPSBmaWx0ZXJET00udmFsdWVzO1xyXG5cclxuICAgICAgICAgIGlmIChkb21WYWx1ZXMpIHtcclxuICAgICAgICAgICAgbGV0IG5ld0J1bmRsZSA9IGJ1bmRsZTtcclxuICAgICAgICAgICAgbmV3QnVuZGxlLnNlbGVjdG9ycyA9IFtdO1xyXG4gICAgICAgICAgICBsZXQgc2VsZWN0b3I7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgZG9tVmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGJ1bmRsZS5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGVuYWJsZWQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEVuYWJsZWRzPy5maW5kKHNlbCA9PiBzZWwudGl0bGUgPT09IHZhbHVlLnZhbHVlKSA/IGVuYWJsZWQgPSB0cnVlIDogZW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0b3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgIHRpdGxlOiB2YWx1ZS52YWx1ZSxcclxuICAgICAgICAgICAgICAgICAgZW5hYmxlZCxcclxuICAgICAgICAgICAgICAgICAgZmlsdGVyczoge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBkb21TZWxlY3Rvci5vcGVyYXRvcixcclxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWU6IGRvbVNlbGVjdG9yLnByb3BlcnR5TmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiB2YWx1ZS5pZCxcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0b3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgIHRpdGxlOiB2YWx1ZS52YWx1ZSxcclxuICAgICAgICAgICAgICAgICAgZW5hYmxlZDogdGhpcy5zZWxlY3RFbmFibGVkPy50aXRsZSA9PT0gdmFsdWUudmFsdWUgP1xyXG4gICAgICAgICAgICAgICAgICAgIHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgZmlsdGVyczoge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBkb21TZWxlY3Rvci5vcGVyYXRvcixcclxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWU6IGRvbVNlbGVjdG9yLnByb3BlcnR5TmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiB2YWx1ZS5pZCxcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgbmV3QnVuZGxlLnNlbGVjdG9ycy5wdXNoKHNlbGVjdG9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmdldFNlbGVjdEdyb3VwcygpLmZpbmQoZ3JvdXAgPT4gZ3JvdXAuaWRzLmluY2x1ZGVzKG5ld0J1bmRsZS5pZCkpLmNvbXB1dGVkU2VsZWN0b3JzXHJcbiAgICAgICAgICAgICAgLmZpbmQoY29tcCA9PiBjb21wLnRpdGxlID09PSBuZXdCdW5kbGUudGl0bGUpLnNlbGVjdG9ycyA9IG5ld0J1bmRsZS5zZWxlY3RvcnM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ2V0U2VsZWN0RW5hYmxlZCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRBdXRvY29tcGxldGVEb21WYWx1ZXMoKSB7XHJcbiAgICBmb3IgKGNvbnN0IGJ1bmRsZSBvZiB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmF1dG9jb21wbGV0ZS5idW5kbGVzKSB7XHJcbiAgICAgIGlmIChidW5kbGUuZG9tU2VsZWN0b3JzKSB7XHJcbiAgICAgICAgbGV0IGRvbVZhbHVlcztcclxuICAgICAgICBmb3IgKGNvbnN0IGRvbVNlbGVjdG9yIG9mIGJ1bmRsZS5kb21TZWxlY3RvcnMpIHtcclxuICAgICAgICAgIGxldCBmaWx0ZXJET007XHJcbiAgICAgICAgICBmb3IgKGNvbnN0IGRvbU9wdGlvbnMgb2YgdGhpcy5jb25maWdTZXJ2aWNlLmdldENvbmZpZygnZG9tJykpIHtcclxuICAgICAgICAgICAgaWYgKGRvbVNlbGVjdG9yLmlkID09PSBkb21PcHRpb25zLmlkIHx8IGRvbVNlbGVjdG9yLm5hbWUgPT09IGRvbU9wdGlvbnMubmFtZSkge1xyXG4gICAgICAgICAgICAgIGZpbHRlckRPTSA9IHtcclxuICAgICAgICAgICAgICAgIGlkOiBkb21PcHRpb25zLmlkLFxyXG4gICAgICAgICAgICAgICAgdXJsOiBkb21PcHRpb25zLnVybCxcclxuICAgICAgICAgICAgICAgIG5hbWU6IGRvbU9wdGlvbnMubmFtZSxcclxuICAgICAgICAgICAgICAgIHZhbHVlczogZG9tT3B0aW9ucy52YWx1ZXNcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBmaWx0ZXJET00udXJsID8gZG9tVmFsdWVzID0gYXdhaXQgdGhpcy5kb21TZXJ2aWNlLmdldERvbShmaWx0ZXJET00pIGFzIERPTVZhbHVlW10gOlxyXG4gICAgICAgICAgICBkb21WYWx1ZXMgPSBmaWx0ZXJET00udmFsdWVzO1xyXG5cclxuICAgICAgICAgIGlmIChkb21WYWx1ZXMpIHtcclxuICAgICAgICAgICAgbGV0IG5ld0J1bmRsZSA9IGJ1bmRsZTtcclxuICAgICAgICAgICAgbmV3QnVuZGxlLnNlbGVjdG9ycyA9IFtdO1xyXG4gICAgICAgICAgICBsZXQgc2VsZWN0b3I7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgZG9tVmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgc2VsZWN0b3IgPSB7XHJcbiAgICAgICAgICAgICAgICB0aXRsZTogdmFsdWUudmFsdWUsXHJcbiAgICAgICAgICAgICAgICBlbmFibGVkOiB0aGlzLmF1dG9jb21wbGV0ZUVuYWJsZWQgJiYgdGhpcy5hdXRvY29tcGxldGVFbmFibGVkID09PSB2YWx1ZS52YWx1ZSA/XHJcbiAgICAgICAgICAgICAgICAgIHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGZpbHRlcnM6IHtcclxuICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IGRvbVNlbGVjdG9yLm9wZXJhdG9yLFxyXG4gICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWU6IGRvbVNlbGVjdG9yLnByb3BlcnR5TmFtZSxcclxuICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogdmFsdWUuaWQsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICBuZXdCdW5kbGUuc2VsZWN0b3JzLnB1c2goc2VsZWN0b3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0QXV0b2NvbXBsZXRlR3JvdXBzKCkuZmluZChncm91cCA9PiBncm91cC5pZHMuaW5jbHVkZXMobmV3QnVuZGxlLmlkKSkuY29tcHV0ZWRTZWxlY3RvcnNcclxuICAgICAgICAgICAgICAuZmluZChjb21wID0+IGNvbXAudGl0bGUgPT09IG5ld0J1bmRsZS50aXRsZSkuc2VsZWN0b3JzID0gbmV3QnVuZGxlLnNlbGVjdG9ycztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRPZ2NBdXRvY29tcGxldGVbYnVuZGxlLmlkXSA9IG5ldyBPYnNlcnZhYmxlPGFueVtdPigpO1xyXG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRPZ2NBdXRvY29tcGxldGVbYnVuZGxlLmlkXSA9IHRoaXMuZm9ybS5jb250cm9sc1snYXV0b2NvbXBsZXRlJ10udmFsdWVDaGFuZ2VzLnBpcGUoXHJcbiAgICAgICAgICBtYXAodmFsdWUgPT4ge1xyXG4gICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGRvbVZhbHVlcz8uZmlsdGVyKChvcHRpb24pID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlck5vcm1hbGl6ZWQgPSB2YWx1ZSA/IHZhbHVlLnRvTG93ZXJDYXNlKCkubm9ybWFsaXplKCdORkQnKS5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJykgOiAnJztcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZlYXR1cmVOYW1lTm9ybWFsaXplZCA9IG9wdGlvbi52YWx1ZS50b0xvd2VyQ2FzZSgpLm5vcm1hbGl6ZSgnTkZEJykucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZlYXR1cmVOYW1lTm9ybWFsaXplZC5pbmNsdWRlcyhmaWx0ZXJOb3JtYWxpemVkKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBnZXRCdXR0b25TdHlsZShwYjogT2djUHVzaEJ1dHRvbik6IHt9IHtcclxuXHJcbiAgLy8gICBsZXQgc3R5bGVzO1xyXG4gIC8vICAgaWYgKHBiLmNvbG9yKSB7XHJcbiAgLy8gICAgIHN0eWxlcyA9IHtcclxuICAvLyAgICAgICAnYmFja2dyb3VuZC1jb2xvcic6IHBiLmVuYWJsZWQgPyBgcmdiYSgke3BiLmNvbG9yfSlgIDogYHJnYmEoMjU1LDI1NSwyNTUsMClgXHJcbiAgLy8gICAgIH07XHJcbiAgLy8gICB9IGVsc2Uge1xyXG4gIC8vICAgICBzdHlsZXMgPSB7XHJcbiAgLy8gICAgICAgJ2JhY2tncm91bmQtY29sb3InOiBwYi5lbmFibGVkID8gJ2FjY2VudCc6IGByZ2JhKDI1NSwyNTUsMjU1LDApYCxcclxuICAvLyAgICAgICAnY29sb3InOiBwYi5lbmFibGVkID8gYHJnYmEoMCwwLDAsMC45KWAgOiBgcmdiYSgzMywzMywzMywwLjM4KWBcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG4gIC8vICAgcmV0dXJuIHN0eWxlcztcclxuICAvLyB9XHJcblxyXG4gIGdldEJ1dHRvbkNvbG9yKHB1c2hCdXR0b246IE9nY1B1c2hCdXR0b24pOiB7fSB7XHJcbiAgICBsZXQgc3R5bGVzO1xyXG4gICAgaWYgKHB1c2hCdXR0b24uY29sb3IgJiYgcHVzaEJ1dHRvbi5lbmFibGVkKSB7XHJcbiAgICAgIHN0eWxlcyA9IHtcclxuICAgICAgICAnYmFja2dyb3VuZC1jb2xvcic6IGByZ2JhKCR7cHVzaEJ1dHRvbi5jb2xvcn0pYFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0eWxlcztcclxuICB9XHJcblxyXG4gIGJ1bmRsZUlzVmVydGljYWwoYnVuZGxlOiBPZ2NTZWxlY3RvckJ1bmRsZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGJ1bmRsZS52ZXJ0aWNhbCA/IGJ1bmRsZS52ZXJ0aWNhbCA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvblB1c2hCdXR0b25zQ2hhbmdlR3JvdXAoKSB7XHJcbiAgICB0aGlzLmdldFB1c2hCdXR0b25zR3JvdXBzKCkubWFwKGdyb3VwID0+IGdyb3VwLmVuYWJsZWQgPSBmYWxzZSk7XHJcbiAgICB0aGlzLmdldFB1c2hCdXR0b25zR3JvdXBzKCkuZmluZChncm91cCA9PiBncm91cCA9PT0gdGhpcy5jdXJyZW50UHVzaEJ1dHRvbnNHcm91cCkuZW5hYmxlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uQ2hlY2tib3hlc0NoYW5nZUdyb3VwKCkge1xyXG4gICAgdGhpcy5nZXRDaGVja2JveGVzR3JvdXBzKCkubWFwKGdyb3VwID0+IGdyb3VwLmVuYWJsZWQgPSBmYWxzZSk7XHJcbiAgICB0aGlzLmdldENoZWNrYm94ZXNHcm91cHMoKS5maW5kKGdyb3VwID0+IGdyb3VwID09PSB0aGlzLmN1cnJlbnRDaGVja2JveGVzR3JvdXApLmVuYWJsZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvblJhZGlvQnV0dG9uc0NoYW5nZUdyb3VwKCkge1xyXG4gICAgdGhpcy5nZXRSYWRpb0J1dHRvbnNHcm91cHMoKS5tYXAoZ3JvdXAgPT4gZ3JvdXAuZW5hYmxlZCA9IGZhbHNlKTtcclxuICAgIHRoaXMuZ2V0UmFkaW9CdXR0b25zR3JvdXBzKCkuZmluZChncm91cCA9PiBncm91cCA9PT0gdGhpcy5jdXJyZW50UmFkaW9CdXR0b25zR3JvdXApLmVuYWJsZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvblNlbGVjdENoYW5nZUdyb3VwKCkge1xyXG4gICAgdGhpcy5nZXRTZWxlY3RHcm91cHMoKS5tYXAoZ3JvdXAgPT4gZ3JvdXAuZW5hYmxlZCA9IGZhbHNlKTtcclxuICAgIHRoaXMuZ2V0U2VsZWN0R3JvdXBzKCkuZmluZChncm91cCA9PiBncm91cCA9PT0gdGhpcy5jdXJyZW50U2VsZWN0R3JvdXApLmVuYWJsZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkF1dG9jb21wbGV0ZUNoYW5nZUdyb3VwKCkge1xyXG4gICAgdGhpcy5nZXRBdXRvY29tcGxldGVHcm91cHMoKS5tYXAoZ3JvdXAgPT4gZ3JvdXAuZW5hYmxlZCA9IGZhbHNlKTtcclxuICAgIHRoaXMuZ2V0QXV0b2NvbXBsZXRlR3JvdXBzKCkuZmluZChncm91cCA9PiBncm91cCA9PT0gdGhpcy5jdXJyZW50QXV0b2NvbXBsZXRlR3JvdXApLmVuYWJsZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3Rpb25DaGFuZ2UoY3VycmVudE9nY1NlbGVjdGlvbj8sIHNlbGVjdG9yVHlwZT8pIHtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLmFwcGx5RmlsdGVyc1RpbWVvdXQpO1xyXG4gICAgaWYgKHNlbGVjdG9yVHlwZSA9PT0gJ3JhZGlvQnV0dG9uJykge1xyXG4gICAgICB0aGlzLmVtcHR5UmFkaW9CdXR0b25zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGN1cnJlbnRPZ2NTZWxlY3Rpb24pIHtcclxuICAgICAgY3VycmVudE9nY1NlbGVjdGlvbi5lbmFibGVkID0gIWN1cnJlbnRPZ2NTZWxlY3Rpb24uZW5hYmxlZDtcclxuICAgIH1cclxuICAgIHRoaXMuYXBwbHlGaWx0ZXJzVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xyXG4gICAgfSwgNzUwKTtcclxuICB9XHJcblxyXG4gIGVtcHR5UmFkaW9CdXR0b25zKCkge1xyXG4gICAgdGhpcy5jdXJyZW50UmFkaW9CdXR0b25zR3JvdXAuY29tcHV0ZWRTZWxlY3RvcnMuZm9yRWFjaChjb21wU2VsZWN0ID0+IHtcclxuICAgICAgY29tcFNlbGVjdC5zZWxlY3RvcnMubWFwKHNlbGVjdG9yID0+IHNlbGVjdG9yLmVuYWJsZWQgPSBmYWxzZSk7XHJcblxyXG4gICAgICB0aGlzLmFwcGx5RmlsdGVyc1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xyXG4gICAgICB9LCA3NTApO1xyXG4gICB9KTtcclxuICB9XHJcblxyXG4gIGVtcHR5U2VsZWN0KCkge1xyXG4gICAgdGhpcy5zZWxlY3RFbmFibGVkID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgZW1wdHlBdXRvY29tcGxldGUoKSB7XHJcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUVuYWJsZWQgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmZvcm0uY29udHJvbHNbJ2F1dG9jb21wbGV0ZSddLnNldFZhbHVlKCcnKTtcclxuICAgIHRoaXMuZm9ybS5jb250cm9sc1snYXV0b2NvbXBsZXRlJ10ubWFya0FzVW50b3VjaGVkKCk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVBbGxTZWxlY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RBbGxTZWxlY3RlZCkge1xyXG4gICAgICBjb25zdCBlbmFibGVkcyA9IFtdO1xyXG4gICAgICB0aGlzLmN1cnJlbnRTZWxlY3RHcm91cC5jb21wdXRlZFNlbGVjdG9ycy5mb3JFYWNoKGNvbXBTZWxlY3QgPT4ge1xyXG4gICAgICAgIGNvbXBTZWxlY3Quc2VsZWN0b3JzPy5mb3JFYWNoKHNlbGVjdG9yID0+IHtcclxuICAgICAgICAgIGVuYWJsZWRzLnB1c2goc2VsZWN0b3IpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5zZWwub3B0aW9ucy5mb3JFYWNoKChpdGVtOiBNYXRPcHRpb24pID0+IGl0ZW0uc2VsZWN0KCkpO1xyXG4gICAgICB0aGlzLnNlbGVjdEVuYWJsZWRzID0gZW5hYmxlZHM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbC5vcHRpb25zLmZvckVhY2goKGl0ZW06IE1hdE9wdGlvbikgPT4gaXRlbS5kZXNlbGVjdCgpKTtcclxuICAgICAgdGhpcy5zZWxlY3RFbmFibGVkcyA9IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0T3B0aW9uQ2xpY2sodmFsdWUsIGJ1bmRsZSwgZXZlbnQ/KSB7XHJcbiAgICBpZiAoYnVuZGxlLm11bHRpcGxlKSB7XHJcbiAgICAgIGNvbnN0IGVuYWJsZWRzID0gdGhpcy5zZWxlY3RFbmFibGVkcztcclxuICAgICAgbGV0IG5ld1N0YXR1cyA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2VsLm9wdGlvbnMuZm9yRWFjaCgoaXRlbTogTWF0T3B0aW9uKSA9PiB7XHJcbiAgICAgICAgaWYgKCFpdGVtLnNlbGVjdGVkKSB7XHJcbiAgICAgICAgICBuZXdTdGF0dXMgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnNlbGVjdEFsbFNlbGVjdGVkID0gbmV3U3RhdHVzO1xyXG4gICAgICBpZiAoZXZlbnQuaXNVc2VySW5wdXQpIHtcclxuICAgICAgICBpZiAoZW5hYmxlZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICBmb3IgKGNvbnN0IGVuYWJsZWQgb2YgZW5hYmxlZHMpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQudGl0bGUgPT09IHZhbHVlLnRpdGxlKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGVuYWJsZWQuZW5hYmxlZCAmJiB2YWx1ZS5lbmFibGVkKSB7XHJcbiAgICAgICAgICAgICAgICBlbmFibGVkcy5zcGxpY2UoZW5hYmxlZHMuaW5kZXhPZihlbmFibGVkKSwgMSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEVuYWJsZWRzID0gZW5hYmxlZHM7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZW5hYmxlZHMuaW5kZXhPZihlbmFibGVkKSA9PT0gZW5hYmxlZHMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgIGVuYWJsZWRzLnB1c2godmFsdWUpO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0RW5hYmxlZHMgPSBlbmFibGVkcztcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBlbmFibGVkcy5wdXNoKHZhbHVlKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0RW5hYmxlZHMgPSBlbmFibGVkcztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0RW5hYmxlZCA9IHZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXV0b2NvbXBsZXRlT3B0aW9uQ2xpY2sodmFsdWUpIHtcclxuICAgIHRoaXMuYXV0b2NvbXBsZXRlRW5hYmxlZCA9IHZhbHVlLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZGlzcGxheUZuKGRvbSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gZG9tID8gZG9tLnZhbHVlIDogdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseUZpbHRlcnMoKSB7XHJcbiAgICBsZXQgZmlsdGVyUXVlcnlTdHJpbmcgPSAnJztcclxuICAgIGNvbnN0IGNvbmRpdGlvbnMgPSBbXTtcclxuICAgIGNvbnN0IGN1cnJlbnRHcm91cHMgPSBbdGhpcy5jdXJyZW50UHVzaEJ1dHRvbnNHcm91cCwgdGhpcy5jdXJyZW50Q2hlY2tib3hlc0dyb3VwLFxyXG4gICAgICB0aGlzLmN1cnJlbnRSYWRpb0J1dHRvbnNHcm91cCwgdGhpcy5jdXJyZW50U2VsZWN0R3JvdXAsIHRoaXMuY3VycmVudEF1dG9jb21wbGV0ZUdyb3VwXTtcclxuICAgIGZvciAoY29uc3QgY3VycmVudEdyb3VwIG9mIGN1cnJlbnRHcm91cHMpIHtcclxuICAgICAgaWYgKGN1cnJlbnRHcm91cC5jb21wdXRlZFNlbGVjdG9ycykge1xyXG4gICAgICAgIGN1cnJlbnRHcm91cC5jb21wdXRlZFNlbGVjdG9ycy5tYXAoc2VsZWN0b3JCdW5kbGUgPT4ge1xyXG4gICAgICAgICAgY29uc3QgYnVuZGxlQ29uZGl0aW9uID0gW107XHJcbiAgICAgICAgICBzZWxlY3RvckJ1bmRsZS5zZWxlY3RvcnM/LmZpbHRlcihvZ2NTZWxlY3RvciA9PiBvZ2NTZWxlY3Rvci5lbmFibGVkID09PSB0cnVlKVxyXG4gICAgICAgICAgLmZvckVhY2goZW5hYmxlZFNlbGVjdG9yID0+IGJ1bmRsZUNvbmRpdGlvbi5wdXNoKGVuYWJsZWRTZWxlY3Rvci5maWx0ZXJzKSk7XHJcbiAgICAgICAgICBpZiAoYnVuZGxlQ29uZGl0aW9uLmxlbmd0aCA+PSAxICkge1xyXG4gICAgICAgICAgICBpZiAoYnVuZGxlQ29uZGl0aW9uLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgIGNvbmRpdGlvbnMucHVzaChidW5kbGVDb25kaXRpb25bMF0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvbmRpdGlvbnMucHVzaCh7bG9naWNhbDogc2VsZWN0b3JCdW5kbGUubG9naWNhbCwgZmlsdGVyczogYnVuZGxlQ29uZGl0aW9ufSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaXNUZW1wb3JhbE9wZXJhdG9yKCkgJiYgdGhpcy5fY3VycmVudEZpbHRlci5hY3RpdmUpIHtcclxuICAgICAgY29uZGl0aW9ucy5wdXNoKHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuaW50ZXJmYWNlT2djRmlsdGVyc1swXSk7XHJcbiAgICB9XHJcbiAgICBpZiAoY29uZGl0aW9ucy5sZW5ndGggPj0gMSkge1xyXG4gICAgICBmaWx0ZXJRdWVyeVN0cmluZyA9IHRoaXMub2djRmlsdGVyV3JpdGVyXHJcbiAgICAgICAgLmJ1aWxkRmlsdGVyKGNvbmRpdGlvbnMubGVuZ3RoID09PSAxID9cclxuICAgICAgICAgIGNvbmRpdGlvbnNbMF0gOiB7bG9naWNhbDogJ0FuZCcsIGZpbHRlcnM6IGNvbmRpdGlvbnMgfSBhcyBJZ29PZ2NGaWx0ZXJPYmplY3QpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLnR5cGUgPT09ICd3bXMnKSB7XHJcbiAgICAgIHRoaXMub2djRmlsdGVyU2VydmljZS5maWx0ZXJCeU9nYyh0aGlzLmRhdGFzb3VyY2UgYXMgV01TRGF0YVNvdXJjZSwgZmlsdGVyUXVlcnlTdHJpbmcgKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy50eXBlID09PSAnd2ZzJykge1xyXG4gICAgICAvLyBUT0RPOiBDaGVjayBob3cgdG8gcHJldmVudCB3ZnMgdG8gcmVmcmVzaCB3aGVuIGZpbHRlciBpY29uIGlzIHB1c2hlZC4uLlxyXG4gICAgICB0aGlzLmRhdGFzb3VyY2Uub2wucmVmcmVzaCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kYXRhc291cmNlLnNldE9nY0ZpbHRlcnModGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycywgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBpc01vcmVSZXN1bHRzKGJ1bmRsZSwgdHlwZSkge1xyXG4gICAgbGV0IHNlbGVjdG9yc0xlbmd0aCA9IDA7XHJcbiAgICBmb3IgKGNvbnN0IHNlbGVjdG9ycyBvZiBidW5kbGUuc2VsZWN0b3JzKSB7XHJcbiAgICAgIHNlbGVjdG9yc0xlbmd0aCsrO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaW5kZXggPSB0eXBlID09PSAncmFkaW8nID8gdGhpcy5yYWRpb0J1dHRvbnNJbmRleCA6IHRoaXMuY2hlY2tib3hlc0luZGV4O1xyXG4gICAgcmV0dXJuIHNlbGVjdG9yc0xlbmd0aCA+IGluZGV4O1xyXG4gIH1cclxuXHJcbiAgZGlzcGxheU1vcmVSZXN1bHRzKHR5cGUpIHtcclxuICAgIHR5cGUgPT09ICdyYWRpbycgPyB0aGlzLnJhZGlvQnV0dG9uc0luZGV4ICs9IDUgOiB0aGlzLmNoZWNrYm94ZXNJbmRleCArPSA1O1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgaXNMZXNzUmVzdWx0cyhidW5kbGUsIHR5cGUpIHtcclxuICAgIGxldCBzZWxlY3RvcnNMZW5ndGggPSAwO1xyXG4gICAgZm9yIChjb25zdCBzZWxlY3RvcnMgb2YgYnVuZGxlLnNlbGVjdG9ycykge1xyXG4gICAgICBzZWxlY3RvcnNMZW5ndGgrKztcclxuICAgIH1cclxuICAgIGNvbnN0IGluZGV4ID0gdHlwZSA9PT0gJ3JhZGlvJyA/IHRoaXMucmFkaW9CdXR0b25zSW5kZXggOiB0aGlzLmNoZWNrYm94ZXNJbmRleDtcclxuICAgIHJldHVybiB0aGlzLmJhc2VJbmRleCAhPT0gaW5kZXggJiYgc2VsZWN0b3JzTGVuZ3RoID4gdGhpcy5iYXNlSW5kZXg7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5TGVzc1Jlc3VsdHModHlwZSkge1xyXG4gICAgdHlwZSA9PT0gJ3JhZGlvJyA/IHRoaXMucmFkaW9CdXR0b25zSW5kZXggPSB0aGlzLmJhc2VJbmRleCA6IHRoaXMuY2hlY2tib3hlc0luZGV4ID0gdGhpcy5iYXNlSW5kZXg7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBpc1RlbXBvcmFsT3BlcmF0b3IoKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXI/Lm9wZXJhdG9yPy50b0xvd2VyQ2FzZSgpID09PVxyXG4gICAgICB0aGlzLm9nY0ZpbHRlck9wZXJhdG9yLkR1cmluZy50b0xvd2VyQ2FzZSgpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlUHJvcGVydHkodmFsdWU6IGFueSwgcG9zPzogbnVtYmVyLCByZWZyZXNoRmlsdGVyID0gdHJ1ZSkge1xyXG4gICAgY29uc3QgZGV0ZWN0ZWRQcm9wZXJ0eSA9IHRoaXMuZGV0ZWN0UHJvcGVydHkocG9zKTtcclxuICAgIGlmIChkZXRlY3RlZFByb3BlcnR5KSB7XHJcbiAgICAgIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuaW50ZXJmYWNlT2djRmlsdGVycy5maW5kKFxyXG4gICAgICAgIGZpbHRlciA9PiBmaWx0ZXIuZmlsdGVyaWQgPT09IHRoaXMuY3VycmVudEZpbHRlci5maWx0ZXJpZFxyXG4gICAgICApW2RldGVjdGVkUHJvcGVydHldID0gdmFsdWU7XHJcblxyXG4gICAgICBpZiAoIHJlZnJlc2hGaWx0ZXIgKSB7XHJcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGV0ZWN0UHJvcGVydHkocG9zPzogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAodGhpcy5jdXJyZW50RmlsdGVyLm9wZXJhdG9yKSB7XHJcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc05vdEVxdWFsVG86XHJcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0VxdWFsVG86XHJcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0dyZWF0ZXJUaGFuOlxyXG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLlByb3BlcnR5SXNHcmVhdGVyVGhhbk9yRXF1YWxUbzpcclxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzTGVzc1RoYW46XHJcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0xlc3NUaGFuT3JFcXVhbFRvOlxyXG4gICAgICAgIHJldHVybiAnZXhwcmVzc2lvbic7XHJcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0xpa2U6XHJcbiAgICAgICAgcmV0dXJuICdwYXR0ZXJuJztcclxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzQmV0d2VlbjpcclxuICAgICAgICByZXR1cm4gcG9zICYmIHBvcyA9PT0gMVxyXG4gICAgICAgICAgPyAnbG93ZXJCb3VuZGFyeSdcclxuICAgICAgICAgIDogcG9zICYmIHBvcyA9PT0gMlxyXG4gICAgICAgICAgPyAndXBwZXJCb3VuZGFyeSdcclxuICAgICAgICAgIDogdW5kZWZpbmVkO1xyXG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLkR1cmluZzpcclxuICAgICAgICByZXR1cm4gcG9zICYmIHBvcyA9PT0gMVxyXG4gICAgICAgICAgPyAnYmVnaW4nXHJcbiAgICAgICAgICA6IHBvcyAmJiBwb3MgPT09IDJcclxuICAgICAgICAgID8gJ2VuZCdcclxuICAgICAgICAgIDogdW5kZWZpbmVkO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCI+XHJcbiAgPGRpdiAqbmdGb3I9XCJsZXQgc2VsZWN0b3Igb2Ygb2djRmlsdGVyc1NlbGVjdG9yc1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cInB1c2hCdXR0b25Hcm91cHNcIiAqbmdJZj1cInNlbGVjdG9yLnNlbGVjdG9yVHlwZSA9PT0gJ3B1c2hCdXR0b24nXCI+XHJcbiAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXBzU2VsZWN0b3JcIiAqbmdJZj1cImdldFB1c2hCdXR0b25zR3JvdXBzKCkubGVuZ3RoID4gMVwiPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDxtYXQtc2VsZWN0XHJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInB1c2hCdXR0b25zR3JvdXBcIlxyXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5sYXllci5sZWdlbmQuc2VsZWN0U3R5bGUnIHwgdHJhbnNsYXRlXCIgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCIgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgICAgICAgIFsodmFsdWUpXT1cImN1cnJlbnRQdXNoQnV0dG9uc0dyb3VwXCI+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBzZWxlY3Rvckdyb3VwIG9mIGdldFB1c2hCdXR0b25zR3JvdXBzKClcIlxyXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJzZWxlY3Rvckdyb3VwXCI+e3tzZWxlY3Rvckdyb3VwLnRpdGxlfX1cclxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBidW5kbGUgb2YgY3VycmVudFB1c2hCdXR0b25zR3JvdXAuY29tcHV0ZWRTZWxlY3RvcnNcIj5cclxuICAgICAgICA8aDQ+e3tidW5kbGUudGl0bGV9fTwvaDQ+XHJcbiAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwXHJcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwdXNoQnV0dG9uc1wiIGNsYXNzPVwibWF0LXR5cG9ncmFwaHlcIiBhcHBlYXJhbmNlPVwibGVnYWN5XCIgdmVydGljYWw9e3tidW5kbGVJc1ZlcnRpY2FsKGJ1bmRsZSl9fSBtdWx0aXBsZT1cInRydWVcIj5cclxuICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSAqbmdGb3I9XCJsZXQgb2djUHVzaEJ1dHRvbiBvZiBidW5kbGUuc2VsZWN0b3JzXCJcclxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiZ2V0VG9vbFRpcChvZ2NQdXNoQnV0dG9uKVwiIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIiBtYXRUb29sdGlwQ2xhc3M9XCJtYXRlcmlhbC10b29sdGlwXCJcclxuICAgICAgICAgICAgW25nU3R5bGVdPVwiZ2V0QnV0dG9uQ29sb3Iob2djUHVzaEJ1dHRvbilcIlxyXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJvZ2NQdXNoQnV0dG9uLmVuYWJsZWRcIiAoY2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKG9nY1B1c2hCdXR0b24sIHNlbGVjdG9yLnNlbGVjdG9yVHlwZSlcIlxyXG4gICAgICAgICAgICBbdmFsdWVdPVwib2djUHVzaEJ1dHRvblwiPnt7b2djUHVzaEJ1dHRvbi50aXRsZX19XHJcbiAgICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxyXG4gICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImNoZWNrYm94R3JvdXBzXCIgKm5nSWY9XCJzZWxlY3Rvci5zZWxlY3RvclR5cGUgPT09ICdjaGVja2JveCdcIj5cclxuICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJncm91cHNTZWxlY3RvclwiICpuZ0lmPVwiZ2V0Q2hlY2tib3hlc0dyb3VwcygpLmxlbmd0aCA+IDFcIj5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8bWF0LXNlbGVjdFxyXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjaGVja2JveGVzR3JvdXBcIlxyXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5sYXllci5sZWdlbmQuc2VsZWN0U3R5bGUnIHwgdHJhbnNsYXRlXCIgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCIgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgICAgICAgIFsodmFsdWUpXT1cImN1cnJlbnRDaGVja2JveGVzR3JvdXBcIj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHNlbGVjdG9yR3JvdXAgb2YgZ2V0Q2hlY2tib3hlc0dyb3VwcygpXCJcclxuICAgICAgICAgICAgICBbdmFsdWVdPVwic2VsZWN0b3JHcm91cFwiPnt7c2VsZWN0b3JHcm91cC50aXRsZX19XHJcbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnVuZGxlIG9mIGN1cnJlbnRDaGVja2JveGVzR3JvdXAuY29tcHV0ZWRTZWxlY3RvcnNcIj5cclxuICAgICAgICA8aDQ+e3tidW5kbGUudGl0bGV9fTwvaDQ+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94ZXMgbWF0LXR5cG9ncmFwaHlcIj5cclxuICAgICAgICAgIDxtYXQtY2hlY2tib3ggKm5nRm9yPVwibGV0IG9nY0NoZWNrYm94IG9mIGJ1bmRsZS5zZWxlY3RvcnNcIlxyXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJnZXRUb29sVGlwKG9nY0NoZWNrYm94KVwiIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIiAgbWF0VG9vbHRpcENsYXNzPVwibWF0ZXJpYWwtdG9vbHRpcFwiXHJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cIm9nY0NoZWNrYm94LmVuYWJsZWRcIiAoY2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKG9nY0NoZWNrYm94LCBzZWxlY3Rvci5zZWxlY3RvclR5cGUpXCJcclxuICAgICAgICAgICAgW3ZhbHVlXT1cIm9nY0NoZWNrYm94XCI+e3tvZ2NDaGVja2JveC50aXRsZX19XHJcbiAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8cCAqbmdJZj1cImlzTGVzc1Jlc3VsdHMoYnVuZGxlLCAnY2hlY2tib3gnKSB8fCBpc01vcmVSZXN1bHRzKGJ1bmRsZSwgJ2NoZWNrYm94JylcIj5cclxuICAgICAgICAgIDx1ICpuZ0lmPVwiaXNMZXNzUmVzdWx0cyhidW5kbGUsICdjaGVja2JveCcpXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJsZXNzUmVzdWx0cyBtYXQtdHlwb2dyYXBoeVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJkaXNwbGF5TGVzc1Jlc3VsdHMoJ2NoZWNrYm94JylcIj57eyAnaWdvLmdlby5maWx0ZXIuZGlzcGxheUxlc3NSZXN1bHRzJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgPC91PlxyXG4gICAgICAgICAgPHUgKm5nSWY9XCJpc01vcmVSZXN1bHRzKGJ1bmRsZSwgJ2NoZWNrYm94JylcIlxyXG4gICAgICAgICAgICBjbGFzcz1cIm1vcmVSZXN1bHRzIG1hdC10eXBvZ3JhcGh5XCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImRpc3BsYXlNb3JlUmVzdWx0cygnY2hlY2tib3gnKVwiPnt7ICdpZ28uZ2VvLmZpbHRlci5kaXNwbGF5TW9yZVJlc3VsdHMnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICA8L3U+XHJcbiAgICAgICAgPC9wPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJyYWRpb0J1dHRvbkdyb3Vwc1wiICpuZ0lmPVwic2VsZWN0b3Iuc2VsZWN0b3JUeXBlID09PSAncmFkaW9CdXR0b24nXCI+XHJcbiAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXBzU2VsZWN0b3JcIiAqbmdJZj1cImdldFJhZGlvQnV0dG9uc0dyb3VwcygpLmxlbmd0aCA+IDFcIj5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8bWF0LXNlbGVjdFxyXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJyYWRpb0J1dHRvbnNHcm91cFwiXHJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmxheWVyLmxlZ2VuZC5zZWxlY3RTdHlsZScgfCB0cmFuc2xhdGVcIiB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIiBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgICAgICAgICAgWyh2YWx1ZSldPVwiY3VycmVudFJhZGlvQnV0dG9uc0dyb3VwXCI+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBzZWxlY3Rvckdyb3VwIG9mIGdldFJhZGlvQnV0dG9uc0dyb3VwcygpXCJcclxuICAgICAgICAgICAgICBbdmFsdWVdPVwic2VsZWN0b3JHcm91cFwiPnt7c2VsZWN0b3JHcm91cC50aXRsZX19XHJcbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnVuZGxlIG9mIGN1cnJlbnRSYWRpb0J1dHRvbnNHcm91cC5jb21wdXRlZFNlbGVjdG9yc1wiPlxyXG4gICAgICAgIDxoND57e2J1bmRsZS50aXRsZX19PC9oND5cclxuICAgICAgICA8bWF0LXJhZGlvLWdyb3VwXHJcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJyYWRpb0J1dHRvbnNcIiBjbGFzcz1cIm1hdC10eXBvZ3JhcGh5XCI+XHJcbiAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiAqbmdJZj1cImJ1bmRsZS51bmZpbHRlcmVkXCJcclxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uZmlsdGVyLnJlc2V0RmlsdGVycycgfCB0cmFuc2xhdGVcIiB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIiBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCIgIG1hdFRvb2x0aXBDbGFzcz1cIm1hdGVyaWFsLXRvb2x0aXBcIlxyXG4gICAgICAgICAgICAoY2hhbmdlKT1cImVtcHR5UmFkaW9CdXR0b25zKClcIj57eyAnaWdvLmdlby5maWx0ZXIucmVzZXRGaWx0ZXJzJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgPC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gKm5nRm9yPVwibGV0IG9nY1JhZGlvQnV0dG9uIG9mIGJ1bmRsZS5zZWxlY3RvcnNcIlxyXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJnZXRUb29sVGlwKG9nY1JhZGlvQnV0dG9uKVwiIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIiAgbWF0VG9vbHRpcENsYXNzPVwibWF0ZXJpYWwtdG9vbHRpcFwiXHJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cIm9nY1JhZGlvQnV0dG9uLmVuYWJsZWRcIiAoY2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKG9nY1JhZGlvQnV0dG9uLCBzZWxlY3Rvci5zZWxlY3RvclR5cGUpXCJcclxuICAgICAgICAgICAgW3ZhbHVlXT1cIm9nY1JhZGlvQnV0dG9uXCI+e3tvZ2NSYWRpb0J1dHRvbi50aXRsZX19XHJcbiAgICAgICAgICA8L21hdC1yYWRpby1idXR0b24+XHJcbiAgICAgICAgICA8cCAqbmdJZj1cImlzTGVzc1Jlc3VsdHMoYnVuZGxlLCAncmFkaW8nKSB8fCBpc01vcmVSZXN1bHRzKGJ1bmRsZSwgJ3JhZGlvJylcIj5cclxuICAgICAgICAgICAgPHUgKm5nSWY9XCJpc0xlc3NSZXN1bHRzKGJ1bmRsZSwgJ3JhZGlvJylcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwibGVzc1Jlc3VsdHMgbWF0LXR5cG9ncmFwaHlcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJkaXNwbGF5TGVzc1Jlc3VsdHMoJ3JhZGlvJylcIj57eyAnaWdvLmdlby5maWx0ZXIuZGlzcGxheUxlc3NSZXN1bHRzJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L3U+XHJcbiAgICAgICAgICAgIDx1ICpuZ0lmPVwiaXNNb3JlUmVzdWx0cyhidW5kbGUsICdyYWRpbycpXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cIm1vcmVSZXN1bHRzIG1hdC10eXBvZ3JhcGh5XCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiZGlzcGxheU1vcmVSZXN1bHRzKCdyYWRpbycpXCI+e3sgJ2lnby5nZW8uZmlsdGVyLmRpc3BsYXlNb3JlUmVzdWx0cycgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgPC91PlxyXG4gICAgICAgICAgPC9wPlxyXG4gICAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RHcm91cHNcIiAqbmdJZj1cInNlbGVjdG9yLnNlbGVjdG9yVHlwZSA9PT0gJ3NlbGVjdCdcIj5cclxuICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJncm91cHNTZWxlY3RvclwiICpuZ0lmPVwiZ2V0U2VsZWN0R3JvdXBzKCkubGVuZ3RoID4gMVwiPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDxtYXQtc2VsZWN0XHJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlbGVjdEdyb3VwXCJcclxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8ubGF5ZXIubGVnZW5kLnNlbGVjdFN0eWxlJyB8IHRyYW5zbGF0ZVwiIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgICAgICAgICBbKHZhbHVlKV09XCJjdXJyZW50U2VsZWN0R3JvdXBcIj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHNlbGVjdG9yR3JvdXAgb2YgZ2V0U2VsZWN0R3JvdXBzKClcIlxyXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJzZWxlY3Rvckdyb3VwXCI+e3tzZWxlY3Rvckdyb3VwLnRpdGxlfX1cclxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBidW5kbGUgb2YgY3VycmVudFNlbGVjdEdyb3VwLmNvbXB1dGVkU2VsZWN0b3JzXCI+XHJcbiAgICAgICAgPGg0Pnt7YnVuZGxlLnRpdGxlfX08L2g0PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJncm91cHNTZWxlY3RvclwiPlxyXG4gICAgICAgICAgPG1hdC1idXR0b24gKm5nSWY9XCJidW5kbGUudW5maWx0ZXJlZCAmJiAhYnVuZGxlLm11bHRpcGxlXCJcclxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgIGNvbG9yPVwid2FyblwiXHJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmZpbHRlci5yZXNldEZpbHRlcnMnIHwgdHJhbnNsYXRlXCIgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCIgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiICBtYXRUb29sdGlwQ2xhc3M9XCJtYXRlcmlhbC10b29sdGlwXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImVtcHR5U2VsZWN0KClcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJmaWx0ZXItcmVtb3ZlXCI+PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvbWF0LWJ1dHRvbj5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBbc3R5bGUud2lkdGguJV09XCJidW5kbGUud2lkdGggPyBidW5kbGUud2lkdGggOiB1bmRlZmluZWRcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImJ1bmRsZS5tdWx0aXBsZTsgZWxzZSBub3RNdWx0aVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICAjc2VsZWN0aW9uIFttdWx0aXBsZV09XCJidW5kbGUubXVsdGlwbGVcIiBbcGxhY2Vob2xkZXJdPVwiYnVuZGxlLnRpdGxlXCIgZm9ybUNvbnRyb2xOYW1lPVwic2VsZWN0TXVsdGlcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveGVzIG1hdC10eXBvZ3JhcGh5XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggKm5nSWY9XCJidW5kbGUubXVsdGlwbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0QWxsU2VsZWN0ZWRcIiBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCJcclxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZUFsbFNlbGVjdGlvbigpXCI+VG91c1xyXG4gICAgICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9nY1NlbGVjdCBvZiBidW5kbGUuc2VsZWN0b3JzXCJcclxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiZ2V0VG9vbFRpcChvZ2NTZWxlY3QpXCIgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCIgbWF0VG9vbHRpcERlbGF5PVwiNTAwXCIgbWF0VG9vbHRpcENsYXNzPVwibWF0ZXJpYWwtdG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgIChvblNlbGVjdGlvbkNoYW5nZSk9XCJzZWxlY3RPcHRpb25DbGljaygkZXZlbnQuc291cmNlLnZhbHVlLCBidW5kbGUsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwib2djU2VsZWN0XCI+e3tvZ2NTZWxlY3QudGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm90TXVsdGk+XHJcbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcclxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJidW5kbGUudGl0bGVcIiBmb3JtQ29udHJvbE5hbWU9XCJzZWxlY3RcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvZ2NTZWxlY3Qgb2YgYnVuZGxlLnNlbGVjdG9yc1wiXHJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImdldFRvb2xUaXAob2djU2VsZWN0KVwiIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiIG1hdFRvb2x0aXBEZWxheT1cIjUwMFwiIG1hdFRvb2x0aXBDbGFzcz1cIm1hdGVyaWFsLXRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwib2djU2VsZWN0XCIgKG9uU2VsZWN0aW9uQ2hhbmdlKT1cInNlbGVjdE9wdGlvbkNsaWNrKCRldmVudC5zb3VyY2UudmFsdWUsIGJ1bmRsZSlcIj57e29nY1NlbGVjdC50aXRsZX19XHJcbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiYXV0b2NvbXBsZXRlR3JvdXBzXCIgKm5nSWY9XCJzZWxlY3Rvci5zZWxlY3RvclR5cGUgPT09ICdhdXRvY29tcGxldGUnXCI+XHJcbiAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXBzU2VsZWN0b3JcIiAqbmdJZj1cImdldEF1dG9jb21wbGV0ZUdyb3VwcygpLmxlbmd0aCA+IDFcIj5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8bWF0LXNlbGVjdFxyXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJhdXRvY29tcGxldGVHcm91cFwiXHJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmxheWVyLmxlZ2VuZC5zZWxlY3RTdHlsZScgfCB0cmFuc2xhdGVcIiB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIiBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgICAgICAgICAgWyh2YWx1ZSldPVwiY3VycmVudEF1dG9jb21wbGV0ZUdyb3VwXCI+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBhdXRvY29tcGxldGVHcm91cCBvZiBnZXRBdXRvY29tcGxldGVHcm91cHMoKVwiXHJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cImF1dG9jb21wbGV0ZUdyb3VwXCI+e3thdXRvY29tcGxldGVHcm91cC50aXRsZX19XHJcbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnVuZGxlIG9mIGN1cnJlbnRBdXRvY29tcGxldGVHcm91cC5jb21wdXRlZFNlbGVjdG9yc1wiPlxyXG4gICAgICAgIDxoND57e2J1bmRsZS50aXRsZX19PC9oND5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXBzU2VsZWN0b3JcIj5cclxuICAgICAgICAgIDxtYXQtYnV0dG9uICpuZ0lmPVwiYnVuZGxlLnVuZmlsdGVyZWRcIlxyXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgY29sb3I9XCJ3YXJuXCJcclxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uZmlsdGVyLnJlc2V0RmlsdGVycycgfCB0cmFuc2xhdGVcIiB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIiBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCIgIG1hdFRvb2x0aXBDbGFzcz1cIm1hdGVyaWFsLXRvb2x0aXBcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiZW1wdHlBdXRvY29tcGxldGUoKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImZpbHRlci1yZW1vdmVcIj48L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9tYXQtYnV0dG9uPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwiZmlsdGVyZWRPZ2NBdXRvY29tcGxldGVbYnVuZGxlLmlkXVwiIFtzdHlsZS53aWR0aC4lXT1cImJ1bmRsZS53aWR0aCA/IGJ1bmRsZS53aWR0aCA6IHVuZGVmaW5lZFwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJhdXRvY29tcGxldGVcIiAjYXV0b2NvbXBsZXRlIGNsYXNzPVwiYXV0b2NvbXBsZXRlXCJcclxuICAgICAgICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIiBbcGxhY2Vob2xkZXJdPVwiYnVuZGxlLnRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1hdXRvY29tcGxldGUgI2F1dG89XCJtYXRBdXRvY29tcGxldGVcIiAjYXV0b2NvbXBsZXRlIChvcHRpb25TZWxlY3RlZCk9XCJhdXRvY29tcGxldGVPcHRpb25DbGljaygkZXZlbnQub3B0aW9uLnZhbHVlKVwiXHJcbiAgICAgICAgICAgICAgW2Rpc3BsYXlXaXRoXT1cImRpc3BsYXlGblwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9nY0F1dG9jb21wbGV0ZSBvZiBmaWx0ZXJlZE9nY0F1dG9jb21wbGV0ZVtidW5kbGUuaWRdIHwgYXN5bmNcIiBbdmFsdWVdPVwib2djQXV0b2NvbXBsZXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IG9nY0F1dG9jb21wbGV0ZS52YWx1ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZm9ybT5cclxuXHJcbjxkaXYgKm5nSWY9XCJpc1RlbXBvcmFsT3BlcmF0b3IoKVwiPlxyXG4gIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gIDxoNCAqbmdJZj1cIiFjdXJyZW50RmlsdGVyLnRpdGxlXCI+e3sgJ2lnby5nZW8uZmlsdGVyLnJlcG9ydGluZ0RhdGUnIHwgdHJhbnNsYXRlIH19PC9oND5cclxuICA8aDQgKm5nSWY9XCJjdXJyZW50RmlsdGVyLnRpdGxlXCI+e3sgY3VycmVudEZpbHRlci50aXRsZSB9fTwvaDQ+XHJcbiAgPGlnby1vZ2MtZmlsdGVyLXRpbWVcclxuICAgIFsoZGF0YXNvdXJjZSldPVwiZGF0YXNvdXJjZVwiXHJcbiAgICBbKGN1cnJlbnRGaWx0ZXIpXT1cImN1cnJlbnRGaWx0ZXJcIlxyXG4gICAgKGNoYW5nZVByb3BlcnR5KT1cImNoYW5nZVByb3BlcnR5KCRldmVudC52YWx1ZSwgJGV2ZW50LnBvcylcIj5cclxuICA8L2lnby1vZ2MtZmlsdGVyLXRpbWU+XHJcbjwvZGl2PiJdfQ==