verben-workflow-ui 0.5.73 → 0.5.74

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.
@@ -67,10 +67,17 @@ export class FlowableStatusComponent extends BaseDataViewComponent {
67
67
  }
68
68
  }
69
69
  async onSave(data) {
70
- const payload = {
70
+ const merged = {
71
71
  ...this.currentData?.data,
72
72
  ...data,
73
- DataState: this.currentData?.data?.DataState === ObjectState.New ? ObjectState.New : ObjectState.Changed,
73
+ };
74
+ // A record is new only when it has no Code yet (the backend always assigns
75
+ // Code on persisted records). Don't trust the loaded DataState here: records
76
+ // returned from the backend come through unchanged and report DataState
77
+ // 'New', which would force an insert (and thus duplicate) on every edit.
78
+ const payload = {
79
+ ...merged,
80
+ DataState: merged.Code ? ObjectState.Changed : ObjectState.New,
74
81
  };
75
82
  await this.facade.addRequest(payload);
76
83
  }
@@ -119,4 +126,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
119
126
  type: Component,
120
127
  args: [{ selector: 'lib-flowable-status', template: "<div class=\"space-y-8\">\n <verben-data-view #vdv [viewState]=\"{\n isSearch: true,\n isColumn: true,\n isFilter: true,\n isSort: true,\n isExport: true,\n isSelect: true,\n isCreate: true,\n isToggle: true,\n }\" [buttonClass]=\"'my-custom-button-class'\" [iconClass]=\"'my-icon-class'\"\n [activeIconClass]=\"'my-active-icon-class'\" [selectedColumnCount]=\"selectedColumnCount\"\n [selectedSortCount]=\"selectedSortCount\" [selectedFilterTableCount]=\"selectedFilterTableCount\"\n (viewChange)=\"onViewChange($event)\" (stateChange)=\"onStateChange($event)\"\n (onSearchChange)=\"handleSearch($event)\" (createClick)=\"vdv.toggleView()\">\n <div table-content>\n <lib-data-table [data]=\"data()\" [columns]=\"config.columns\" [styleConfig]=\"styles\"\n [formGroupConfig]=\"formGroupConfig()\" (selectionChange)=\"onSelectionChange($event)\"\n (rowSave)=\"onSave($event.data)\">\n <ng-container libColumn=\"date\">\n <ng-template #cell let-row=\"row\" let-value>\n {{ value | date }}\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"name\">\n <ng-template #cellEdit let-control=\"control\">\n <verbena-input name=\"Name\" [formControl]=\"control\" placeHolder=\"Enter Name\" />\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"description\">\n <ng-template #cellEdit let-control=\"control\">\n <verbena-input name=\"Description\" [formControl]=\"control\" placeHolder=\"Enter Description\" />\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-value let-isEditing=\"isEditing\" let-toggleRowEdit=\"toggleRowEdit\"\n let-deleteRow=\"deleteRow\">\n <div class=\"flex gap-6\">\n <verben-svg (click)=\"toggleRowEdit()\" icon=\"edit\" [width]=\"15\" [height]=\"15\"\n class=\"cursor-pointer\"></verben-svg>\n\n <verben-svg icon=\"delete\" [width]=\"15\" [height]=\"15\" (click)=\"deleteRow()\"\n class=\"cursor-pointer\"></verben-svg>\n </div>\n </ng-template>\n\n <ng-template #cellEdit let-value let-deleteRow let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\" let-row=\"row\" let-rowIndex=\"rowIndex\">\n <div class=\"flex gap-6\">\n <verben-svg (click)=\"toggleRowEdit()\" icon=\"tick\" [width]=\"15\" [height]=\"15\"\n class=\"cursor-pointer\"></verben-svg>\n\n <verben-svg icon=\"delete\" [width]=\"15\" [height]=\"15\" (click)=\"toggleRowEdit()\"\n class=\"cursor-pointer\"></verben-svg>\n </div>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n <div card-content>\n <verben-card-data-view borderRadius=\"12px\" (loadMoreClick)=\"loadMore()\" #vdcv dataId=\"Id\" border=\"5px\"\n [cardDataList]=\"cardData()\" rbgColor=\"#f5f6f9\" mg=\"20px\">\n <verben-left-card-data-view class=\"space-y-7\">\n <verben-left-card-data #vlcd [parent]=\"vdcv\" dataId=\"Id\"\n class=\"bg-secondary-100 rounded-xl border-primary border-[1px]\" [cardDataList]=\"cardData()\">\n <ng-template #card let-item>\n <div (click)=\"currentData = vdcv.onItemClick(item)\" class=\"flex\">\n <div (click)=\"currentData = vdcv.onItemClick(item)\"\n class=\"flex cursor-pointer w-full bg-secondary rounded-xl\">\n <div class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\" [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"></div>\n <div class=\"flex flex-col py-2 px-4 w-full\">\n <div class=\"flex items-center gap-4 justify-between\">\n <div class=\"grid gap-y-2\">\n <span class=\"font-semibold text-[#404040]\">{{\n item.title\n }}</span>\n <p class=\"flex items-center gap-1\">\n <label for=\"desc\"\n class=\"text-[10px] font-light\">Description:</label>\n <span id=\"desc\" class=\"text-sm\">{{\n item.data.Description\n }}</span>\n </p>\n </div>\n\n <div class=\"grid gap-y-1\">\n <p class=\"grid\">\n <label for=\"name\"\n class=\"text-[10px] font-light text-[#404040]\">Name</label>\n <span id=\"name\" class=\"text-sm font-medium\">{{\n item.data?.Name\n }}</span>\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </verben-left-card-data>\n </verben-left-card-data-view>\n\n <verben-right-card-data-view>\n <ng-template #parent>\n <flowable-status-form [currentData]=\"currentData\" (switchView)=\"vdv.toggleView()\"\n (onSave)=\"onSave($event)\"></flowable-status-form>\n </ng-template>\n </verben-right-card-data-view>\n\n <verben-card-data-view-footer class=\"w-full\">\n <div [ngClass]=\"{\n 'flex gap-2 items-center': true,\n 'justify-end': true\n }\">\n <div class=\"flex {{\n vdcv.hasCurrentItem() ? 'flex-1' : ''\n }} justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData().length }} records loaded</span>\n <button (click)=\"loadMore()\" class=\"load-more view-links text-[#3479E9] underline\">\n Load more\n </button>\n </div>\n </div>\n </verben-card-data-view-footer>\n </verben-card-data-view>\n </div>\n <div column-content>\n <lib-data-columns [columns]=\"config.columns\" (columnsUpdated)=\"onColumnsUpdated($event)\"></lib-data-columns>\n </div>\n <div filter-content>\n <verben-table-filter [border]=\"'1px solid rgba(212, 160, 7, 1)'\" borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"420px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" tertiaryColor=\"#404040\" [filterOptions]=\"filterArray\"\n [maxFilterLength]=\"3\"></verben-table-filter>\n </div>\n <div sort-content>\n <lib-data-sort [columns]=\"config.columns\" [data]=\"data()\"\n (sortApplied)=\"onSortUpdated($event)\"></lib-data-sort>\n </div>\n <div export-content>\n <lib-data-xport [columns]=\"config.columns\" [data]=\"data()\" [dataQueryFunction]=\"loadData\">\n </lib-data-xport>\n </div>\n </verben-data-view>\n\n <div *ngIf=\"vdv.isTableView\" class=\"flex gap-2 justify-end\">\n <div class=\"flex justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData().length }} records loaded</span>\n <button (click)=\"loadMore()\" class=\"load-more view-links text-[#3479E9] underline\">\n Load more\n </button>\n </div>\n </div>\n</div>\n" }]
121
128
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.FlowableStatusFacade }, { type: i2.FormBuilder }] });
122
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvd2FibGUtc3RhdHVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL2NvbXBvbmVudHMvZmxvd2FibGUtc3RhdHVzL2Zsb3dhYmxlLXN0YXR1cy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL2Zsb3dhYmxlLXN0YXR1cy9mbG93YWJsZS1zdGF0dXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFlLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpELE9BQU8sRUFBa0IsV0FBVyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDaEYsT0FBTyxFQUFFLHFCQUFxQixFQUFrQixNQUFNLG1DQUFtQyxDQUFDO0FBQzFGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7OztBQVFwRCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEscUJBQXFDO0lBc0J0RTtJQUNBO0lBQ0E7SUF2QlYsTUFBTSxHQUFtQztRQUN2QyxVQUFVLEVBQUUsRUFBRTtRQUNkLE9BQU8sRUFBRSxPQUFPO1FBQ2hCLGNBQWMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMzQixRQUFRLEVBQUUsS0FBSztZQUNmLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSTtZQUNsQixJQUFJLEVBQUUsTUFBTTtZQUNaLElBQUksRUFBRTtnQkFDSixFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUU7Z0JBQ3JDLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFB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QixrRkNsQnBDLGc3UkErSkE7OzRGRDdJYSx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0UscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgc2lnbmFsLFxuICBXcml0YWJsZVNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENhcmREYXRhLCBGb3JtR3JvdXBDb25maWcgfSBmcm9tICd2ZXJiZW4tbmctdWknO1xuaW1wb3J0IHsgRmxvd2FibGVTdGF0dXMsIE9iamVjdFN0YXRlIH0gZnJvbSAndmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvbW9kZWxzJztcbmltcG9ydCB7IEJhc2VEYXRhVmlld0NvbXBvbmVudCwgRGF0YVZpZXdDb25maWcgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9zaGFyZWQnO1xuaW1wb3J0IHsgY29sdW1ucyB9IGZyb20gJy4vZmxvd2FibGUtc3RhdHVzLmNvbHVtbnMnO1xuaW1wb3J0IHsgRmxvd2FibGVTdGF0dXNGYWNhZGUgfSBmcm9tICcuL2Zsb3dhYmxlLXN0YXR1cy5mYWNhZGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItZmxvd2FibGUtc3RhdHVzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zsb3dhYmxlLXN0YXR1cy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9mbG93YWJsZS1zdGF0dXMuY29tcG9uZW50LmNzcycsXG59KVxuZXhwb3J0IGNsYXNzIEZsb3dhYmxlU3RhdHVzQ29tcG9uZW50IGV4dGVuZHMgQmFzZURhdGFWaWV3Q29tcG9uZW50PEZsb3dhYmxlU3RhdHVzPiB7XG4gIGNvbmZpZzogRGF0YVZpZXdDb25maWc8Rmxvd2FibGVTdGF0dXM+ID0ge1xuICAgIGRhdGFTb3VyY2U6IFtdLFxuICAgIGNvbHVtbnM6IGNvbHVtbnMsXG4gICAgY2FyZERhdGFNYXBwZXI6IChzdGF0dXMpID0+ICh7XG4gICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICB0aXRsZTogc3RhdHVzLk5hbWUsXG4gICAgICBkYXRhOiBzdGF0dXMsXG4gICAgICBib2R5OiBbXG4gICAgICAgIHsgdGl0bGU6ICdOYW1lJywgdmFsdWU6IHN0YXR1cy5OYW1lIH0sXG4gICAgICAgIHsgdGl0bGU6ICdEZXNjcmlwdGlvbicsIHZhbHVlOiBzdGF0dXMuRGVzY3JpcHRpb24gfSxcbiAgICAgIF0sXG4gICAgICBjaGlsZHJlbjogW10sXG4gICAgfSksXG4gICAgb25EZXRhaWxWaWV3OiAoc3RhdHVzKSA9PiB7XG4gICAgICAvLyBDdXN0b20gZGV0YWlsIHZpZXcgbG9naWNcbiAgICB9LFxuICB9O1xuXG4gIGZvcm1Hcm91cENvbmZpZzogV3JpdGFibGVTaWduYWw8Rm9ybUdyb3VwQ29uZmlnPGFueT4+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGZhY2FkZTogRmxvd2FibGVTdGF0dXNGYWNhZGUsXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXJcbiAgKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMubG9hZERhdGEgPSB0aGlzLmxvYWREYXRhLmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLmZvcm1Hcm91cENvbmZpZyA9IHNpZ25hbCh7XG4gICAgICBjb250cm9sczoge1xuICAgICAgICBOYW1lOiB0aGlzLmZiLmNvbnRyb2woJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXG4gICAgICAgIERlc2NyaXB0aW9uOiB0aGlzLmZiLmNvbnRyb2woJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5mYWNhZGUuZ2V0UmVxdWVzdHMkKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICB0aGlzLmRhdGEuc2V0KGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgbG9hZEluaXRpYWxEYXRhKCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmZhY2FkZS5sb2FkUmVxdWVzdHMoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gSGFuZGxlIGVycm9yXG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldENhcmREYXRhQnlJZGVudGlmaWVyKGNvZGU6IHN0cmluZyk6IENhcmREYXRhIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jYXJkRGF0YSgpPy5maW5kKCh7IGRhdGEgfSkgPT4gZGF0YS5kYXRhLkNvZGUgPT09IGNvZGUpO1xuICB9XG5cbiAgYXN5bmMgbG9hZE1vcmUoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZmFjYWRlLmxvYWRNb3JlKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEhhbmRsZSBlcnJvclxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9uU2F2ZShkYXRhOiBQYXJ0aWFsPEZsb3dhYmxlU3RhdHVzPikge1xuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAuLi50aGlzLmN1cnJlbnREYXRhPy5kYXRhLFxuICAgICAgLi4uZGF0YSxcbiAgICAgIERhdGFTdGF0ZTogdGhpcy5jdXJyZW50RGF0YT8uZGF0YT8uRGF0YVN0YXRlID09PSBPYmplY3RTdGF0ZS5OZXcgPyBPYmplY3RTdGF0ZS5OZXcgOiBPYmplY3RTdGF0ZS5DaGFuZ2VkLFxuICAgIH0gYXMgRmxvd2FibGVTdGF0dXM7XG4gICAgYXdhaXQgdGhpcy5mYWNhZGUuYWRkUmVxdWVzdChwYXlsb2FkKTtcbiAgfVxuXG4gIGhhbmRsZVNlYXJjaChldmVudDogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9KSB7XG4gICAgdGhpcy5mYWNhZGUuc2VhcmNoKGV2ZW50LnZhbHVlKTtcbiAgfVxuXG4gIGhhbmRsZUZldGNoZWRFeHBvcnQoeyBza2lwLCBsaW1pdCB9OiBhbnkpIHtcbiAgICB0aGlzLmZhY2FkZS5sb2FkRGF0YShza2lwLCBsaW1pdCkudGhlbigoZGF0YSkgPT4ge1xuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVFeHBvcnQoZGF0YSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBsb2FkRGF0YShyYW5nZTogeyBza2lwOiBudW1iZXI7IGxpbWl0OiBudW1iZXIgfSkge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmZhY2FkZS5sb2FkRGF0YShyYW5nZS5za2lwLCByYW5nZS5saW1pdCk7XG4gICAgcmV0dXJuIGRhdGEgPz8gW107XG4gIH1cblxuICBvdmVycmlkZSBvblN0YXRlQ2hhbmdlKGV2ZW50OiB7IGtleTogc3RyaW5nOyB2YWx1ZTogYm9vbGVhbiB9KTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coYFN0YXRlIGNoYW5nZWQgZm9yICR7ZXZlbnQua2V5fTpgLCBldmVudC52YWx1ZSk7XG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ2NyZWF0ZSc6XG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IG5ldyBEYXRlKCk7XG4gICAgICAgIHZhciBuZXdGb3JtOiBGbG93YWJsZVN0YXR1cyA9IHtcbiAgICAgICAgICBOYW1lOiAnJyxcbiAgICAgICAgICBEZXNjcmlwdGlvbjogJycsXG4gICAgICAgICAgVGVuYW50SWQ6ICcnLFxuICAgICAgICAgIFNlcnZpY2VOYW1lOiAnJyxcbiAgICAgICAgICBpZDogY3J5cHRvLnJhbmRvbVVVSUQoKSxcbiAgICAgICAgICBJZDogJycsXG4gICAgICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgICBDb2RlOiAnJyxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kYXRhLnVwZGF0ZSgocHJldikgPT4gW25ld0Zvcm0sIC4uLnByZXZdKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2cobmV3Rm9ybSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwic3BhY2UteS04XCI+XG4gICAgPHZlcmJlbi1kYXRhLXZpZXcgI3ZkdiBbdmlld1N0YXRlXT1cIntcbiAgICAgIGlzU2VhcmNoOiB0cnVlLFxuICAgICAgaXNDb2x1bW46IHRydWUsXG4gICAgICBpc0ZpbHRlcjogdHJ1ZSxcbiAgICAgIGlzU29ydDogdHJ1ZSxcbiAgICAgIGlzRXhwb3J0OiB0cnVlLFxuICAgICAgaXNTZWxlY3Q6IHRydWUsXG4gICAgICBpc0NyZWF0ZTogdHJ1ZSxcbiAgICAgIGlzVG9nZ2xlOiB0cnVlLFxuICAgIH1cIiBbYnV0dG9uQ2xhc3NdPVwiJ215LWN1c3RvbS1idXR0b24tY2xhc3MnXCIgW2ljb25DbGFzc109XCInbXktaWNvbi1jbGFzcydcIlxuICAgICAgICBbYWN0aXZlSWNvbkNsYXNzXT1cIidteS1hY3RpdmUtaWNvbi1jbGFzcydcIiBbc2VsZWN0ZWRDb2x1bW5Db3VudF09XCJzZWxlY3RlZENvbHVtbkNvdW50XCJcbiAgICAgICAgW3NlbGVjdGVkU29ydENvdW50XT1cInNlbGVjdGVkU29ydENvdW50XCIgW3NlbGVjdGVkRmlsdGVyVGFibGVDb3VudF09XCJzZWxlY3RlZEZpbHRlclRhYmxlQ291bnRcIlxuICAgICAgICAodmlld0NoYW5nZSk9XCJvblZpZXdDaGFuZ2UoJGV2ZW50KVwiIChzdGF0ZUNoYW5nZSk9XCJvblN0YXRlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAob25TZWFyY2hDaGFuZ2UpPVwiaGFuZGxlU2VhcmNoKCRldmVudClcIiAoY3JlYXRlQ2xpY2spPVwidmR2LnRvZ2dsZVZpZXcoKVwiPlxuICAgICAgICA8ZGl2IHRhYmxlLWNvbnRlbnQ+XG4gICAgICAgICAgICA8bGliLWRhdGEtdGFibGUgW2RhdGFdPVwiZGF0YSgpXCIgW2NvbHVtbnNdPVwiY29uZmlnLmNvbHVtbnNcIiBbc3R5bGVDb25maWddPVwic3R5bGVzXCJcbiAgICAgICAgICAgICAgICBbZm9ybUdyb3VwQ29uZmlnXT1cImZvcm1Hcm91cENvbmZpZygpXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAocm93U2F2ZSk9XCJvblNhdmUoJGV2ZW50LmRhdGEpXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJkYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbCBsZXQtcm93PVwicm93XCIgbGV0LXZhbHVlPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgdmFsdWUgfCBkYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cIm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsRWRpdCBsZXQtY29udHJvbD1cImNvbnRyb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJiZW5hLWlucHV0IG5hbWU9XCJOYW1lXCIgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIiBwbGFjZUhvbGRlcj1cIkVudGVyIE5hbWVcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJkZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGxFZGl0IGxldC1jb250cm9sPVwiY29udHJvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHZlcmJlbmEtaW5wdXQgbmFtZT1cIkRlc2NyaXB0aW9uXCIgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIiBwbGFjZUhvbGRlcj1cIkVudGVyIERlc2NyaXB0aW9uXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwiYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LXZhbHVlIGxldC1pc0VkaXRpbmc9XCJpc0VkaXRpbmdcIiBsZXQtdG9nZ2xlUm93RWRpdD1cInRvZ2dsZVJvd0VkaXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0LWRlbGV0ZVJvdz1cImRlbGV0ZVJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyYmVuLXN2ZyAoY2xpY2spPVwidG9nZ2xlUm93RWRpdCgpXCIgaWNvbj1cImVkaXRcIiBbd2lkdGhdPVwiMTVcIiBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiPjwvdmVyYmVuLXN2Zz5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJiZW4tc3ZnIGljb249XCJkZWxldGVcIiBbd2lkdGhdPVwiMTVcIiBbaGVpZ2h0XT1cIjE1XCIgKGNsaWNrKT1cImRlbGV0ZVJvdygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbEVkaXQgbGV0LXZhbHVlIGxldC1kZWxldGVSb3cgbGV0LWlzRWRpdGluZz1cImlzRWRpdGluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQtdG9nZ2xlUm93RWRpdD1cInRvZ2dsZVJvd0VkaXRcIiBsZXQtcm93PVwicm93XCIgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC02XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZlcmJlbi1zdmcgKGNsaWNrKT1cInRvZ2dsZVJvd0VkaXQoKVwiIGljb249XCJ0aWNrXCIgW3dpZHRoXT1cIjE1XCIgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIj48L3ZlcmJlbi1zdmc+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyYmVuLXN2ZyBpY29uPVwiZGVsZXRlXCIgW3dpZHRoXT1cIjE1XCIgW2hlaWdodF09XCIxNVwiIChjbGljayk9XCJ0b2dnbGVSb3dFZGl0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCI+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2xpYi1kYXRhLXRhYmxlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICA8dmVyYmVuLWNhcmQtZGF0YS12aWV3IGJvcmRlclJhZGl1cz1cIjEycHhcIiAobG9hZE1vcmVDbGljayk9XCJsb2FkTW9yZSgpXCIgI3ZkY3YgZGF0YUlkPVwiSWRcIiBib3JkZXI9XCI1cHhcIlxuICAgICAgICAgICAgICAgIFtjYXJkRGF0YUxpc3RdPVwiY2FyZERhdGEoKVwiIHJiZ0NvbG9yPVwiI2Y1ZjZmOVwiIG1nPVwiMjBweFwiPlxuICAgICAgICAgICAgICAgIDx2ZXJiZW4tbGVmdC1jYXJkLWRhdGEtdmlldyBjbGFzcz1cInNwYWNlLXktN1wiPlxuICAgICAgICAgICAgICAgICAgICA8dmVyYmVuLWxlZnQtY2FyZC1kYXRhICN2bGNkIFtwYXJlbnRdPVwidmRjdlwiIGRhdGFJZD1cIklkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYmctc2Vjb25kYXJ5LTEwMCByb3VuZGVkLXhsIGJvcmRlci1wcmltYXJ5IGJvcmRlci1bMXB4XVwiIFtjYXJkRGF0YUxpc3RdPVwiY2FyZERhdGEoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjYXJkIGxldC1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImN1cnJlbnREYXRhID0gdmRjdi5vbkl0ZW1DbGljayhpdGVtKVwiIGNsYXNzPVwiZmxleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJjdXJyZW50RGF0YSA9IHZkY3Yub25JdGVtQ2xpY2soaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGN1cnNvci1wb2ludGVyIHctZnVsbCBiZy1zZWNvbmRhcnkgcm91bmRlZC14bFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMyByb3VuZGVkLXhsIHJvdW5kZWQtdHItbm9uZSByb3VuZGVkLWJyLW5vbmVcIiBbbmdDbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtLnNlbGVjdGVkID8gJ2JnLXByaW1hcnknIDogJ2JnLXNlY29uZGFyeS0yMDAnXG4gICAgICAgICAgICAgICAgICAgIFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgcHktMiBweC00IHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNCBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgZ2FwLXktMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LXNlbWlib2xkIHRleHQtWyM0MDQwNDBdXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImRlc2NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtWzEwcHhdIGZvbnQtbGlnaHRcIj5EZXNjcmlwdGlvbjo8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPVwiZGVzY1wiIGNsYXNzPVwidGV4dC1zbVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZGF0YS5EZXNjcmlwdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgZ2FwLXktMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJncmlkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtWzEwcHhdIGZvbnQtbGlnaHQgdGV4dC1bIzQwNDA0MF1cIj5OYW1lPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD1cIm5hbWVcIiBjbGFzcz1cInRleHQtc20gZm9udC1tZWRpdW1cIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmRhdGE/Lk5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC92ZXJiZW4tbGVmdC1jYXJkLWRhdGE+XG4gICAgICAgICAgICAgICAgPC92ZXJiZW4tbGVmdC1jYXJkLWRhdGEtdmlldz5cblxuICAgICAgICAgICAgICAgIDx2ZXJiZW4tcmlnaHQtY2FyZC1kYXRhLXZpZXc+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcGFyZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGZsb3dhYmxlLXN0YXR1cy1mb3JtIFtjdXJyZW50RGF0YV09XCJjdXJyZW50RGF0YVwiIChzd2l0Y2hWaWV3KT1cInZkdi50b2dnbGVWaWV3KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvblNhdmUpPVwib25TYXZlKCRldmVudClcIj48L2Zsb3dhYmxlLXN0YXR1cy1mb3JtPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvdmVyYmVuLXJpZ2h0LWNhcmQtZGF0YS12aWV3PlxuXG4gICAgICAgICAgICAgICAgPHZlcmJlbi1jYXJkLWRhdGEtdmlldy1mb290ZXIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdmbGV4IGdhcC0yIGl0ZW1zLWNlbnRlcic6IHRydWUsXG4gICAgICAgICAgICAgICdqdXN0aWZ5LWVuZCc6IHRydWVcbiAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHt7XG4gICAgICAgICAgICAgICAgdmRjdi5oYXNDdXJyZW50SXRlbSgpID8gJ2ZsZXgtMScgOiAnJ1xuICAgICAgICAgICAgICB9fSBqdXN0aWZ5LWVuZCBpdGVtcy1jZW50ZXIgZ2FwLTVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2luYXRvci10ZXh0XCI+e3sgY2FyZERhdGEoKS5sZW5ndGggfX0gcmVjb3JkcyBsb2FkZWQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibG9hZE1vcmUoKVwiIGNsYXNzPVwibG9hZC1tb3JlIHZpZXctbGlua3MgdGV4dC1bIzM0NzlFOV0gdW5kZXJsaW5lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvYWQgbW9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvdmVyYmVuLWNhcmQtZGF0YS12aWV3LWZvb3Rlcj5cbiAgICAgICAgICAgIDwvdmVyYmVuLWNhcmQtZGF0YS12aWV3PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjb2x1bW4tY29udGVudD5cbiAgICAgICAgICAgIDxsaWItZGF0YS1jb2x1bW5zIFtjb2x1bW5zXT1cImNvbmZpZy5jb2x1bW5zXCIgKGNvbHVtbnNVcGRhdGVkKT1cIm9uQ29sdW1uc1VwZGF0ZWQoJGV2ZW50KVwiPjwvbGliLWRhdGEtY29sdW1ucz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgZmlsdGVyLWNvbnRlbnQ+XG4gICAgICAgICAgICA8dmVyYmVuLXRhYmxlLWZpbHRlciBbYm9yZGVyXT1cIicxcHggc29saWQgcmdiYSgyMTIsIDE2MCwgNywgMSknXCIgYm9yZGVyUmFkaXVzPVwiMTBweFwiXG4gICAgICAgICAgICAgICAgYm94U2hhZG93PVwiMnB4IDJweCAycHggMHB4IHNpbHZlclwiIGJnQ29sb3I9XCJ3aGl0ZVwiIHdpZHRoPVwiNDIwcHhcIiB0ZXh0Q29sb3I9XCJibGFja1wiIHBkPVwiMXJlbVwiXG4gICAgICAgICAgICAgICAgcHJpbWFyeUNvbG9yPVwiI0ZGRTY4MVwiIHNlY29uZGFyeUNvbG9yPVwiIzM0NzlFOVwiIHRlcnRpYXJ5Q29sb3I9XCIjNDA0MDQwXCIgW2ZpbHRlck9wdGlvbnNdPVwiZmlsdGVyQXJyYXlcIlxuICAgICAgICAgICAgICAgIFttYXhGaWx0ZXJMZW5ndGhdPVwiM1wiPjwvdmVyYmVuLXRhYmxlLWZpbHRlcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgc29ydC1jb250ZW50PlxuICAgICAgICAgICAgPGxpYi1kYXRhLXNvcnQgW2NvbHVtbnNdPVwiY29uZmlnLmNvbHVtbnNcIiBbZGF0YV09XCJkYXRhKClcIlxuICAgICAgICAgICAgICAgIChzb3J0QXBwbGllZCk9XCJvblNvcnRVcGRhdGVkKCRldmVudClcIj48L2xpYi1kYXRhLXNvcnQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGV4cG9ydC1jb250ZW50PlxuICAgICAgICAgICAgPGxpYi1kYXRhLXhwb3J0IFtjb2x1bW5zXT1cImNvbmZpZy5jb2x1bW5zXCIgW2RhdGFdPVwiZGF0YSgpXCIgW2RhdGFRdWVyeUZ1bmN0aW9uXT1cImxvYWREYXRhXCI+XG4gICAgICAgICAgICA8L2xpYi1kYXRhLXhwb3J0PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L3ZlcmJlbi1kYXRhLXZpZXc+XG5cbiAgICA8ZGl2ICpuZ0lmPVwidmR2LmlzVGFibGVWaWV3XCIgY2xhc3M9XCJmbGV4IGdhcC0yIGp1c3RpZnktZW5kXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kIGl0ZW1zLWNlbnRlciBnYXAtNVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWdpbmF0b3ItdGV4dFwiPnt7IGNhcmREYXRhKCkubGVuZ3RoIH19IHJlY29yZHMgbG9hZGVkPC9zcGFuPlxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibG9hZE1vcmUoKVwiIGNsYXNzPVwibG9hZC1tb3JlIHZpZXctbGlua3MgdGV4dC1bIzM0NzlFOV0gdW5kZXJsaW5lXCI+XG4gICAgICAgICAgICAgICAgTG9hZCBtb3JlXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvd2FibGUtc3RhdHVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL2NvbXBvbmVudHMvZmxvd2FibGUtc3RhdHVzL2Zsb3dhYmxlLXN0YXR1cy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL2Zsb3dhYmxlLXN0YXR1cy9mbG93YWJsZS1zdGF0dXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFlLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpELE9BQU8sRUFBa0IsV0FBVyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDaEYsT0FBTyxFQUFFLHFCQUFxQixFQUFrQixNQUFNLG1DQUFtQyxDQUFDO0FBQzFGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7OztBQVFwRCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEscUJBQXFDO0lBc0J0RTtJQUNBO0lBQ0E7SUF2QlYsTUFBTSxHQUFtQztRQUN2QyxVQUFVLEVBQUUsRUFBRTtRQUNkLE9BQU8sRUFBRSxPQUFPO1FBQ2hCLGNBQWMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMzQixRQUFRLEVBQUUsS0FBSztZQUNmLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSTtZQUNsQixJQUFJLEVBQUUsTUFBTTtZQUNaLElBQUksRUFBRTtnQkFDSixFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUU7Z0JBQ3JDLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFB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O2dCQUNFLE1BQU07UUFDVixDQUFDO0lBQ0gsQ0FBQzt3R0F0SFUsdUJBQXVCOzRGQUF2Qix1QkFBdUIsa0ZDbEJwQyxnN1JBK0pBOzs0RkQ3SWEsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIHNpZ25hbCxcbiAgV3JpdGFibGVTaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDYXJkRGF0YSwgRm9ybUdyb3VwQ29uZmlnIH0gZnJvbSAndmVyYmVuLW5nLXVpJztcbmltcG9ydCB7IEZsb3dhYmxlU3RhdHVzLCBPYmplY3RTdGF0ZSB9IGZyb20gJ3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL21vZGVscyc7XG5pbXBvcnQgeyBCYXNlRGF0YVZpZXdDb21wb25lbnQsIERhdGFWaWV3Q29uZmlnIH0gZnJvbSAndmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvc2hhcmVkJztcbmltcG9ydCB7IGNvbHVtbnMgfSBmcm9tICcuL2Zsb3dhYmxlLXN0YXR1cy5jb2x1bW5zJztcbmltcG9ydCB7IEZsb3dhYmxlU3RhdHVzRmFjYWRlIH0gZnJvbSAnLi9mbG93YWJsZS1zdGF0dXMuZmFjYWRlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWZsb3dhYmxlLXN0YXR1cycsXG4gIHRlbXBsYXRlVXJsOiAnLi9mbG93YWJsZS1zdGF0dXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZmxvd2FibGUtc3RhdHVzLmNvbXBvbmVudC5jc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBGbG93YWJsZVN0YXR1c0NvbXBvbmVudCBleHRlbmRzIEJhc2VEYXRhVmlld0NvbXBvbmVudDxGbG93YWJsZVN0YXR1cz4ge1xuICBjb25maWc6IERhdGFWaWV3Q29uZmlnPEZsb3dhYmxlU3RhdHVzPiA9IHtcbiAgICBkYXRhU291cmNlOiBbXSxcbiAgICBjb2x1bW5zOiBjb2x1bW5zLFxuICAgIGNhcmREYXRhTWFwcGVyOiAoc3RhdHVzKSA9PiAoe1xuICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgdGl0bGU6IHN0YXR1cy5OYW1lLFxuICAgICAgZGF0YTogc3RhdHVzLFxuICAgICAgYm9keTogW1xuICAgICAgICB7IHRpdGxlOiAnTmFtZScsIHZhbHVlOiBzdGF0dXMuTmFtZSB9LFxuICAgICAgICB7IHRpdGxlOiAnRGVzY3JpcHRpb24nLCB2YWx1ZTogc3RhdHVzLkRlc2NyaXB0aW9uIH0sXG4gICAgICBdLFxuICAgICAgY2hpbGRyZW46IFtdLFxuICAgIH0pLFxuICAgIG9uRGV0YWlsVmlldzogKHN0YXR1cykgPT4ge1xuICAgICAgLy8gQ3VzdG9tIGRldGFpbCB2aWV3IGxvZ2ljXG4gICAgfSxcbiAgfTtcblxuICBmb3JtR3JvdXBDb25maWc6IFdyaXRhYmxlU2lnbmFsPEZvcm1Hcm91cENvbmZpZzxhbnk+PjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBmYWNhZGU6IEZsb3dhYmxlU3RhdHVzRmFjYWRlLFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyXG4gICkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmxvYWREYXRhID0gdGhpcy5sb2FkRGF0YS5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy5mb3JtR3JvdXBDb25maWcgPSBzaWduYWwoe1xuICAgICAgY29udHJvbHM6IHtcbiAgICAgICAgTmFtZTogdGhpcy5mYi5jb250cm9sKCcnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxuICAgICAgICBEZXNjcmlwdGlvbjogdGhpcy5mYi5jb250cm9sKCcnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMuZmFjYWRlLmdldFJlcXVlc3RzJCgpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgdGhpcy5kYXRhLnNldChkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIG92ZXJyaWRlIGxvYWRJbml0aWFsRGF0YSgpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5mYWNhZGUubG9hZFJlcXVlc3RzKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEhhbmRsZSBlcnJvclxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRDYXJkRGF0YUJ5SWRlbnRpZmllcihjb2RlOiBzdHJpbmcpOiBDYXJkRGF0YSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY2FyZERhdGEoKT8uZmluZCgoeyBkYXRhIH0pID0+IGRhdGEuZGF0YS5Db2RlID09PSBjb2RlKTtcbiAgfVxuXG4gIGFzeW5jIGxvYWRNb3JlKCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmZhY2FkZS5sb2FkTW9yZSgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBIYW5kbGUgZXJyb3JcbiAgICB9XG4gIH1cblxuICBhc3luYyBvblNhdmUoZGF0YTogUGFydGlhbDxGbG93YWJsZVN0YXR1cz4pIHtcbiAgICBjb25zdCBtZXJnZWQgPSB7XG4gICAgICAuLi50aGlzLmN1cnJlbnREYXRhPy5kYXRhLFxuICAgICAgLi4uZGF0YSxcbiAgICB9IGFzIEZsb3dhYmxlU3RhdHVzO1xuICAgIC8vIEEgcmVjb3JkIGlzIG5ldyBvbmx5IHdoZW4gaXQgaGFzIG5vIENvZGUgeWV0ICh0aGUgYmFja2VuZCBhbHdheXMgYXNzaWduc1xuICAgIC8vIENvZGUgb24gcGVyc2lzdGVkIHJlY29yZHMpLiBEb24ndCB0cnVzdCB0aGUgbG9hZGVkIERhdGFTdGF0ZSBoZXJlOiByZWNvcmRzXG4gICAgLy8gcmV0dXJuZWQgZnJvbSB0aGUgYmFja2VuZCBjb21lIHRocm91Z2ggdW5jaGFuZ2VkIGFuZCByZXBvcnQgRGF0YVN0YXRlXG4gICAgLy8gJ05ldycsIHdoaWNoIHdvdWxkIGZvcmNlIGFuIGluc2VydCAoYW5kIHRodXMgZHVwbGljYXRlKSBvbiBldmVyeSBlZGl0LlxuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAuLi5tZXJnZWQsXG4gICAgICBEYXRhU3RhdGU6IG1lcmdlZC5Db2RlID8gT2JqZWN0U3RhdGUuQ2hhbmdlZCA6IE9iamVjdFN0YXRlLk5ldyxcbiAgICB9IGFzIEZsb3dhYmxlU3RhdHVzO1xuICAgIGF3YWl0IHRoaXMuZmFjYWRlLmFkZFJlcXVlc3QocGF5bG9hZCk7XG4gIH1cblxuICBoYW5kbGVTZWFyY2goZXZlbnQ6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfSkge1xuICAgIHRoaXMuZmFjYWRlLnNlYXJjaChldmVudC52YWx1ZSk7XG4gIH1cblxuICBoYW5kbGVGZXRjaGVkRXhwb3J0KHsgc2tpcCwgbGltaXQgfTogYW55KSB7XG4gICAgdGhpcy5mYWNhZGUubG9hZERhdGEoc2tpcCwgbGltaXQpLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlRXhwb3J0KGRhdGEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbG9hZERhdGEocmFuZ2U6IHsgc2tpcDogbnVtYmVyOyBsaW1pdDogbnVtYmVyIH0pIHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5mYWNhZGUubG9hZERhdGEocmFuZ2Uuc2tpcCwgcmFuZ2UubGltaXQpO1xuICAgIHJldHVybiBkYXRhID8/IFtdO1xuICB9XG5cbiAgb3ZlcnJpZGUgb25TdGF0ZUNoYW5nZShldmVudDogeyBrZXk6IHN0cmluZzsgdmFsdWU6IGJvb2xlYW4gfSk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKGBTdGF0ZSBjaGFuZ2VkIGZvciAke2V2ZW50LmtleX06YCwgZXZlbnQudmFsdWUpO1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdjcmVhdGUnOlxuICAgICAgICBjb25zdCB0aW1lc3RhbXAgPSBuZXcgRGF0ZSgpO1xuICAgICAgICB2YXIgbmV3Rm9ybTogRmxvd2FibGVTdGF0dXMgPSB7XG4gICAgICAgICAgTmFtZTogJycsXG4gICAgICAgICAgRGVzY3JpcHRpb246ICcnLFxuICAgICAgICAgIFRlbmFudElkOiAnJyxcbiAgICAgICAgICBTZXJ2aWNlTmFtZTogJycsXG4gICAgICAgICAgaWQ6IGNyeXB0by5yYW5kb21VVUlEKCksXG4gICAgICAgICAgSWQ6ICcnLFxuICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5OZXcsXG4gICAgICAgICAgQ29kZTogJycsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZGF0YS51cGRhdGUoKHByZXYpID0+IFtuZXdGb3JtLCAuLi5wcmV2XSk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG5ld0Zvcm0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInNwYWNlLXktOFwiPlxuICAgIDx2ZXJiZW4tZGF0YS12aWV3ICN2ZHYgW3ZpZXdTdGF0ZV09XCJ7XG4gICAgICBpc1NlYXJjaDogdHJ1ZSxcbiAgICAgIGlzQ29sdW1uOiB0cnVlLFxuICAgICAgaXNGaWx0ZXI6IHRydWUsXG4gICAgICBpc1NvcnQ6IHRydWUsXG4gICAgICBpc0V4cG9ydDogdHJ1ZSxcbiAgICAgIGlzU2VsZWN0OiB0cnVlLFxuICAgICAgaXNDcmVhdGU6IHRydWUsXG4gICAgICBpc1RvZ2dsZTogdHJ1ZSxcbiAgICB9XCIgW2J1dHRvbkNsYXNzXT1cIidteS1jdXN0b20tYnV0dG9uLWNsYXNzJ1wiIFtpY29uQ2xhc3NdPVwiJ215LWljb24tY2xhc3MnXCJcbiAgICAgICAgW2FjdGl2ZUljb25DbGFzc109XCInbXktYWN0aXZlLWljb24tY2xhc3MnXCIgW3NlbGVjdGVkQ29sdW1uQ291bnRdPVwic2VsZWN0ZWRDb2x1bW5Db3VudFwiXG4gICAgICAgIFtzZWxlY3RlZFNvcnRDb3VudF09XCJzZWxlY3RlZFNvcnRDb3VudFwiIFtzZWxlY3RlZEZpbHRlclRhYmxlQ291bnRdPVwic2VsZWN0ZWRGaWx0ZXJUYWJsZUNvdW50XCJcbiAgICAgICAgKHZpZXdDaGFuZ2UpPVwib25WaWV3Q2hhbmdlKCRldmVudClcIiAoc3RhdGVDaGFuZ2UpPVwib25TdGF0ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKG9uU2VhcmNoQ2hhbmdlKT1cImhhbmRsZVNlYXJjaCgkZXZlbnQpXCIgKGNyZWF0ZUNsaWNrKT1cInZkdi50b2dnbGVWaWV3KClcIj5cbiAgICAgICAgPGRpdiB0YWJsZS1jb250ZW50PlxuICAgICAgICAgICAgPGxpYi1kYXRhLXRhYmxlIFtkYXRhXT1cImRhdGEoKVwiIFtjb2x1bW5zXT1cImNvbmZpZy5jb2x1bW5zXCIgW3N0eWxlQ29uZmlnXT1cInN0eWxlc1wiXG4gICAgICAgICAgICAgICAgW2Zvcm1Hcm91cENvbmZpZ109XCJmb3JtR3JvdXBDb25maWcoKVwiIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKHJvd1NhdmUpPVwib25TYXZlKCRldmVudC5kYXRhKVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwiZGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LXJvdz1cInJvd1wiIGxldC12YWx1ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHZhbHVlIHwgZGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJuYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbEVkaXQgbGV0LWNvbnRyb2w9XCJjb250cm9sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dmVyYmVuYS1pbnB1dCBuYW1lPVwiTmFtZVwiIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCIgcGxhY2VIb2xkZXI9XCJFbnRlciBOYW1lXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwiZGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsRWRpdCBsZXQtY29udHJvbD1cImNvbnRyb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJiZW5hLWlucHV0IG5hbWU9XCJEZXNjcmlwdGlvblwiIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCIgcGxhY2VIb2xkZXI9XCJFbnRlciBEZXNjcmlwdGlvblwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cImFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC12YWx1ZSBsZXQtaXNFZGl0aW5nPVwiaXNFZGl0aW5nXCIgbGV0LXRvZ2dsZVJvd0VkaXQ9XCJ0b2dnbGVSb3dFZGl0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldC1kZWxldGVSb3c9XCJkZWxldGVSb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC02XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZlcmJlbi1zdmcgKGNsaWNrKT1cInRvZ2dsZVJvd0VkaXQoKVwiIGljb249XCJlZGl0XCIgW3dpZHRoXT1cIjE1XCIgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIj48L3ZlcmJlbi1zdmc+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyYmVuLXN2ZyBpY29uPVwiZGVsZXRlXCIgW3dpZHRoXT1cIjE1XCIgW2hlaWdodF09XCIxNVwiIChjbGljayk9XCJkZWxldGVSb3coKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIj48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGxFZGl0IGxldC12YWx1ZSBsZXQtZGVsZXRlUm93IGxldC1pc0VkaXRpbmc9XCJpc0VkaXRpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0LXRvZ2dsZVJvd0VkaXQ9XCJ0b2dnbGVSb3dFZGl0XCIgbGV0LXJvdz1cInJvd1wiIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJiZW4tc3ZnIChjbGljayk9XCJ0b2dnbGVSb3dFZGl0KClcIiBpY29uPVwidGlja1wiIFt3aWR0aF09XCIxNVwiIFtoZWlnaHRdPVwiMTVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCI+PC92ZXJiZW4tc3ZnPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZlcmJlbi1zdmcgaWNvbj1cImRlbGV0ZVwiIFt3aWR0aF09XCIxNVwiIFtoZWlnaHRdPVwiMTVcIiAoY2xpY2spPVwidG9nZ2xlUm93RWRpdCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9saWItZGF0YS10YWJsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgPHZlcmJlbi1jYXJkLWRhdGEtdmlldyBib3JkZXJSYWRpdXM9XCIxMnB4XCIgKGxvYWRNb3JlQ2xpY2spPVwibG9hZE1vcmUoKVwiICN2ZGN2IGRhdGFJZD1cIklkXCIgYm9yZGVyPVwiNXB4XCJcbiAgICAgICAgICAgICAgICBbY2FyZERhdGFMaXN0XT1cImNhcmREYXRhKClcIiByYmdDb2xvcj1cIiNmNWY2ZjlcIiBtZz1cIjIwcHhcIj5cbiAgICAgICAgICAgICAgICA8dmVyYmVuLWxlZnQtY2FyZC1kYXRhLXZpZXcgY2xhc3M9XCJzcGFjZS15LTdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHZlcmJlbi1sZWZ0LWNhcmQtZGF0YSAjdmxjZCBbcGFyZW50XT1cInZkY3ZcIiBkYXRhSWQ9XCJJZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJnLXNlY29uZGFyeS0xMDAgcm91bmRlZC14bCBib3JkZXItcHJpbWFyeSBib3JkZXItWzFweF1cIiBbY2FyZERhdGFMaXN0XT1cImNhcmREYXRhKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2FyZCBsZXQtaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJjdXJyZW50RGF0YSA9IHZkY3Yub25JdGVtQ2xpY2soaXRlbSlcIiBjbGFzcz1cImZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiY3VycmVudERhdGEgPSB2ZGN2Lm9uSXRlbUNsaWNrKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBjdXJzb3ItcG9pbnRlciB3LWZ1bGwgYmctc2Vjb25kYXJ5IHJvdW5kZWQteGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTMgcm91bmRlZC14bCByb3VuZGVkLXRyLW5vbmUgcm91bmRlZC1ici1ub25lXCIgW25nQ2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbS5zZWxlY3RlZCA/ICdiZy1wcmltYXJ5JyA6ICdiZy1zZWNvbmRhcnktMjAwJ1xuICAgICAgICAgICAgICAgICAgICBcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHB5LTIgcHgtNCB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTQganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGdhcC15LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1zZW1pYm9sZCB0ZXh0LVsjNDA0MDQwXVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS50aXRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJkZXNjXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LVsxMHB4XSBmb250LWxpZ2h0XCI+RGVzY3JpcHRpb246PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD1cImRlc2NcIiBjbGFzcz1cInRleHQtc21cIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmRhdGEuRGVzY3JpcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGdhcC15LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZ3JpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LVsxMHB4XSBmb250LWxpZ2h0IHRleHQtWyM0MDQwNDBdXCI+TmFtZTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9XCJuYW1lXCIgY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5kYXRhPy5OYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvdmVyYmVuLWxlZnQtY2FyZC1kYXRhPlxuICAgICAgICAgICAgICAgIDwvdmVyYmVuLWxlZnQtY2FyZC1kYXRhLXZpZXc+XG5cbiAgICAgICAgICAgICAgICA8dmVyYmVuLXJpZ2h0LWNhcmQtZGF0YS12aWV3PlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3BhcmVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxmbG93YWJsZS1zdGF0dXMtZm9ybSBbY3VycmVudERhdGFdPVwiY3VycmVudERhdGFcIiAoc3dpdGNoVmlldyk9XCJ2ZHYudG9nZ2xlVmlldygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25TYXZlKT1cIm9uU2F2ZSgkZXZlbnQpXCI+PC9mbG93YWJsZS1zdGF0dXMtZm9ybT5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L3ZlcmJlbi1yaWdodC1jYXJkLWRhdGEtdmlldz5cblxuICAgICAgICAgICAgICAgIDx2ZXJiZW4tY2FyZC1kYXRhLXZpZXctZm9vdGVyIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnZmxleCBnYXAtMiBpdGVtcy1jZW50ZXInOiB0cnVlLFxuICAgICAgICAgICAgICAnanVzdGlmeS1lbmQnOiB0cnVlXG4gICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCB7e1xuICAgICAgICAgICAgICAgIHZkY3YuaGFzQ3VycmVudEl0ZW0oKSA/ICdmbGV4LTEnIDogJydcbiAgICAgICAgICAgICAgfX0ganVzdGlmeS1lbmQgaXRlbXMtY2VudGVyIGdhcC01XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWdpbmF0b3ItdGV4dFwiPnt7IGNhcmREYXRhKCkubGVuZ3RoIH19IHJlY29yZHMgbG9hZGVkPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImxvYWRNb3JlKClcIiBjbGFzcz1cImxvYWQtbW9yZSB2aWV3LWxpbmtzIHRleHQtWyMzNDc5RTldIHVuZGVybGluZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2FkIG1vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L3ZlcmJlbi1jYXJkLWRhdGEtdmlldy1mb290ZXI+XG4gICAgICAgICAgICA8L3ZlcmJlbi1jYXJkLWRhdGEtdmlldz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY29sdW1uLWNvbnRlbnQ+XG4gICAgICAgICAgICA8bGliLWRhdGEtY29sdW1ucyBbY29sdW1uc109XCJjb25maWcuY29sdW1uc1wiIChjb2x1bW5zVXBkYXRlZCk9XCJvbkNvbHVtbnNVcGRhdGVkKCRldmVudClcIj48L2xpYi1kYXRhLWNvbHVtbnM+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZpbHRlci1jb250ZW50PlxuICAgICAgICAgICAgPHZlcmJlbi10YWJsZS1maWx0ZXIgW2JvcmRlcl09XCInMXB4IHNvbGlkIHJnYmEoMjEyLCAxNjAsIDcsIDEpJ1wiIGJvcmRlclJhZGl1cz1cIjEwcHhcIlxuICAgICAgICAgICAgICAgIGJveFNoYWRvdz1cIjJweCAycHggMnB4IDBweCBzaWx2ZXJcIiBiZ0NvbG9yPVwid2hpdGVcIiB3aWR0aD1cIjQyMHB4XCIgdGV4dENvbG9yPVwiYmxhY2tcIiBwZD1cIjFyZW1cIlxuICAgICAgICAgICAgICAgIHByaW1hcnlDb2xvcj1cIiNGRkU2ODFcIiBzZWNvbmRhcnlDb2xvcj1cIiMzNDc5RTlcIiB0ZXJ0aWFyeUNvbG9yPVwiIzQwNDA0MFwiIFtmaWx0ZXJPcHRpb25zXT1cImZpbHRlckFycmF5XCJcbiAgICAgICAgICAgICAgICBbbWF4RmlsdGVyTGVuZ3RoXT1cIjNcIj48L3ZlcmJlbi10YWJsZS1maWx0ZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IHNvcnQtY29udGVudD5cbiAgICAgICAgICAgIDxsaWItZGF0YS1zb3J0IFtjb2x1bW5zXT1cImNvbmZpZy5jb2x1bW5zXCIgW2RhdGFdPVwiZGF0YSgpXCJcbiAgICAgICAgICAgICAgICAoc29ydEFwcGxpZWQpPVwib25Tb3J0VXBkYXRlZCgkZXZlbnQpXCI+PC9saWItZGF0YS1zb3J0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBleHBvcnQtY29udGVudD5cbiAgICAgICAgICAgIDxsaWItZGF0YS14cG9ydCBbY29sdW1uc109XCJjb25maWcuY29sdW1uc1wiIFtkYXRhXT1cImRhdGEoKVwiIFtkYXRhUXVlcnlGdW5jdGlvbl09XCJsb2FkRGF0YVwiPlxuICAgICAgICAgICAgPC9saWItZGF0YS14cG9ydD5cbiAgICAgICAgPC9kaXY+XG4gICAgPC92ZXJiZW4tZGF0YS12aWV3PlxuXG4gICAgPGRpdiAqbmdJZj1cInZkdi5pc1RhYmxlVmlld1wiIGNsYXNzPVwiZmxleCBnYXAtMiBqdXN0aWZ5LWVuZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZCBpdGVtcy1jZW50ZXIgZ2FwLTVcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGFnaW5hdG9yLXRleHRcIj57eyBjYXJkRGF0YSgpLmxlbmd0aCB9fSByZWNvcmRzIGxvYWRlZDwvc3Bhbj5cbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImxvYWRNb3JlKClcIiBjbGFzcz1cImxvYWQtbW9yZSB2aWV3LWxpbmtzIHRleHQtWyMzNDc5RTldIHVuZGVybGluZVwiPlxuICAgICAgICAgICAgICAgIExvYWQgbW9yZVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -5,53 +5,71 @@ import * as i1 from "verben-workflow-ui/src/lib/services";
5
5
  export class WorkflowDataService {
6
6
  httpService;
7
7
  envSvc;
8
- constructor(httpService, envSvc) {
8
+ utilService;
9
+ pendingRequests = 0;
10
+ constructor(httpService, envSvc, utilService) {
9
11
  this.httpService = httpService;
10
12
  this.envSvc = envSvc;
13
+ this.utilService = utilService;
14
+ }
15
+ /**
16
+ * Wraps an API call so a busy indicator is shown while it is in flight.
17
+ * A ref-count keeps the loader visible until the last concurrent request
18
+ * settles, mirroring how the workflows facade toggles `sendBI`.
19
+ */
20
+ withLoader(request) {
21
+ if (this.pendingRequests++ === 0) {
22
+ this.utilService.sendBI(true);
23
+ }
24
+ return request().finally(() => {
25
+ if (--this.pendingRequests === 0) {
26
+ this.utilService.sendBI(false);
27
+ }
28
+ });
11
29
  }
12
30
  getWorkflowWithParam(param, skip = 0, limit = 1, sortParam = 'CreatedAt', sortOrder = 'Asc') {
13
31
  const url = `GetWorkflowsWithParam/${param}/${skip}/${limit}/${sortParam}/${sortOrder}`;
14
- return this.httpService.get(url);
32
+ return this.withLoader(() => this.httpService.get(url));
15
33
  }
16
34
  getWorkflows(skip = 0, limit = 0) {
17
35
  const url = `GetWorkflows/${skip}/${limit}`;
18
- return this.httpService.get(url, this.envSvc.environment.WorkFlowAPI);
36
+ return this.withLoader(() => this.httpService.get(url, this.envSvc.environment.WorkFlowAPI));
19
37
  }
20
38
  getForms(skip = 0, limit = 0) {
21
39
  const url = `GetForms/${skip}/${limit}`;
22
- return this.httpService.get(url, this.envSvc.environment.WorkFlowAPI);
40
+ return this.withLoader(() => this.httpService.get(url, this.envSvc.environment.WorkFlowAPI));
23
41
  }
24
42
  getTags(skip = 0, limit = 0) {
25
43
  const url = `GetTags/${skip}/${limit}`;
26
- return this.httpService.get(url, this.envSvc.environment.AuthAPI);
44
+ return this.withLoader(() => this.httpService.get(url, this.envSvc.environment.AuthAPI));
27
45
  }
28
46
  saveWorkflows(requests) {
29
47
  const url = `SaveWorkflows`;
30
48
  // console.log('Saving workflows', requests);
31
- return this.httpService.post(url, requests, this.envSvc.environment.WorkFlowAPI);
49
+ return this.withLoader(() => this.httpService.post(url, requests, this.envSvc.environment.WorkFlowAPI));
32
50
  }
33
51
  deleteWorkflowStages(requests) {
34
52
  const url = `DeleteWorkflowStage`;
35
53
  // console.log('Saving workflows', requests);
36
- return this.httpService.post(url, requests, this.envSvc.environment.WorkFlowAPI);
54
+ return this.withLoader(() => this.httpService.post(url, requests, this.envSvc.environment.WorkFlowAPI));
37
55
  }
38
56
  deleteWorkflowActions(requests) {
39
57
  const url = `DeleteWorkflowAction`;
40
- return this.httpService.post(url, requests, this.envSvc.environment.WorkFlowAPI);
58
+ return this.withLoader(() => this.httpService.post(url, requests, this.envSvc.environment.WorkFlowAPI));
41
59
  }
42
60
  deleteSwimLanes(requests) {
43
61
  const url = `DeleteSwimLane`;
44
- return this.httpService.post(url, requests, this.envSvc.environment.WorkFlowAPI);
62
+ return this.withLoader(() => this.httpService.post(url, requests, this.envSvc.environment.WorkFlowAPI));
45
63
  }
46
64
  saveEscalations(requests) {
47
65
  const url = `SaveEscalations`;
48
66
  // console.log('Saving workflows', requests);
49
- return this.httpService.post(url, requests, this.envSvc.environment.WorkFlowAPI);
67
+ return this.withLoader(() => this.httpService.post(url, requests, this.envSvc.environment.WorkFlowAPI));
50
68
  }
51
69
  deleteEscalations(requests) {
52
70
  const url = `DeleteEscalation`;
53
71
  // console.log('Saving workflows', requests);
54
- return this.httpService.post(url, requests, this.envSvc.environment.WorkFlowAPI);
72
+ return this.withLoader(() => this.httpService.post(url, requests, this.envSvc.environment.WorkFlowAPI));
55
73
  }
56
74
  searchEscalationWithParam(params, skip = 0, limit = 1, sortOrder = 'Asc') {
57
75
  const url = `SearchEscalations/${skip}/${limit}`;
@@ -66,27 +84,27 @@ export class WorkflowDataService {
66
84
  Sort: sortOrder,
67
85
  // Fields: ['string'],
68
86
  }));
69
- return this.httpService.post(url, payload);
87
+ return this.withLoader(() => this.httpService.post(url, payload));
70
88
  }
71
89
  getEscalationWithParam(param, skip = 0, limit = 1, sortParam = 'CreatedAt', sortOrder = 'Asc') {
72
90
  const url = `GetEscalationsWithParam/${param}/${skip}/${limit}/${sortParam}/${sortOrder}`;
73
- return this.httpService.get(url);
91
+ return this.withLoader(() => this.httpService.get(url));
74
92
  }
75
93
  getReportSchedules(skip = 0, limit = 0) {
76
94
  const url = `GetReportSchedules/${skip}/${limit}`;
77
- return this.httpService.get(url, this.envSvc.environment.ReportingAPI);
95
+ return this.withLoader(() => this.httpService.get(url, this.envSvc.environment.ReportingAPI));
78
96
  }
79
97
  getOperationActions(skip = 0, limit = 0) {
80
98
  const url = `GetOperationAction`;
81
- return this.httpService.get(url);
99
+ return this.withLoader(() => this.httpService.get(url));
82
100
  }
83
101
  saveActorTags(requests) {
84
102
  const url = `SaveActorTags`;
85
- return this.httpService.post(url, requests, this.envSvc.environment.WorkFlowAPI);
103
+ return this.withLoader(() => this.httpService.post(url, requests, this.envSvc.environment.WorkFlowAPI));
86
104
  }
87
105
  getFlowableStatuses(skip = 0, limit = 0) {
88
106
  const url = `GetFlowableStatus/${skip}/${limit}/CreatedAt/Desc`;
89
- return this.httpService.get(url);
107
+ return this.withLoader(() => this.httpService.get(url));
90
108
  }
91
109
  // Helper to create a mock workflow (just for demo)
92
110
  createMockWorkflow(code) {
@@ -156,7 +174,7 @@ export class WorkflowDataService {
156
174
  };
157
175
  return workflow;
158
176
  }
159
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WorkflowDataService, deps: [{ token: i1.HttpWebRequestService }, { token: i1.EnvironmentService }], target: i0.ɵɵFactoryTarget.Injectable });
177
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WorkflowDataService, deps: [{ token: i1.HttpWebRequestService }, { token: i1.EnvironmentService }, { token: i1.UtilService }], target: i0.ɵɵFactoryTarget.Injectable });
160
178
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WorkflowDataService, providedIn: 'root' });
161
179
  }
162
180
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WorkflowDataService, decorators: [{
@@ -164,5 +182,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
164
182
  args: [{
165
183
  providedIn: 'root',
166
184
  }]
167
- }], ctorParameters: () => [{ type: i1.HttpWebRequestService }, { type: i1.EnvironmentService }] });
168
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZGF0YS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvY29tcG9uZW50cy93b3JrZmxvdy1kZXNpZ25lci93b3JrZmxvdy1kYXRhLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQTZELFdBQVcsRUFBMEMsY0FBYyxFQUFFLE1BQU0sRUFBaUIsa0JBQWtCLEVBQTJCLE1BQU0sbUNBQW1DLENBQUM7OztBQU12UCxNQUFNLE9BQU8sbUJBQW1CO0lBR3BCO0lBQ0E7SUFGVixZQUNVLFdBQWtDLEVBQ2xDLE1BQTBCO1FBRDFCLGdCQUFXLEdBQVgsV0FBVyxDQUF1QjtRQUNsQyxXQUFNLEdBQU4sTUFBTSxDQUFvQjtJQUNoQyxDQUFDO0lBRUwsb0JBQW9CLENBQ2xCLEtBQWEsRUFDYixPQUFlLENBQUMsRUFDaEIsUUFBZ0IsQ0FBQyxFQUNqQixZQUFvQixXQUFXLEVBQy9CLFlBQW9CLEtBQUs7UUFFekIsTUFBTSxHQUFHLEdBQUcseUJBQXlCLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJLFNBQVMsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUN4RixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBNkIsQ0FBQztJQUMvRCxDQUFDO0lBRUQsWUFBWSxDQUFDLE9BQWUsQ0FBQyxFQUFFLFFBQWdCLENBQUM7UUFDOUMsTUFBTSxHQUFHLEdBQUcsZ0JBQWdCLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUM1QyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUN6QixHQUFHLEVBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUNSLENBQUM7SUFDaEMsQ0FB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QVEsQ0FBQztJQUNsQixDQUFDO3dHQS9PVSxtQkFBbUI7NEdBQW5CLG1CQUFtQixjQUZsQixNQUFNOzs0RkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0b3JUYWcsIEVycm9yUmVzcG9uc2UsIEVzY2FsYXRpb24sIEZsb3dhYmxlU3RhdHVzLCBGb3JtLCBPYmplY3RTdGF0ZSwgT3BlcmF0aW9uQWN0aW9uLCBQYWdlZCwgUmVwb3J0U2NoZWR1bGUsIFN0YWdlQWN0b3JSdWxlLCBTdGF0dXMsIFN3aW1MYW5lLCBUYWcsIFRhc2tBc3NpZ25tZW50VHlwZSwgV29ya2Zsb3csIFdvcmtmbG93U3RhZ2UgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnRTZXJ2aWNlLCBIdHRwV2ViUmVxdWVzdFNlcnZpY2UgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9zZXJ2aWNlcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBXb3JrZmxvd0RhdGFTZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHBTZXJ2aWNlOiBIdHRwV2ViUmVxdWVzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbnZTdmM6IEVudmlyb25tZW50U2VydmljZVxuICApIHsgfVxuXG4gIGdldFdvcmtmbG93V2l0aFBhcmFtKFxuICAgIHBhcmFtOiBzdHJpbmcsXG4gICAgc2tpcDogbnVtYmVyID0gMCxcbiAgICBsaW1pdDogbnVtYmVyID0gMSxcbiAgICBzb3J0UGFyYW06IHN0cmluZyA9ICdDcmVhdGVkQXQnLFxuICAgIHNvcnRPcmRlcjogc3RyaW5nID0gJ0FzYydcbiAgKTogUHJvbWlzZTxQYWdlZDxXb3JrZmxvdz4+IHtcbiAgICBjb25zdCB1cmwgPSBgR2V0V29ya2Zsb3dzV2l0aFBhcmFtLyR7cGFyYW19LyR7c2tpcH0vJHtsaW1pdH0vJHtzb3J0UGFyYW19LyR7c29ydE9yZGVyfWA7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuZ2V0KHVybCkgYXMgUHJvbWlzZTxQYWdlZDxXb3JrZmxvdz4+O1xuICB9XG5cbiAgZ2V0V29ya2Zsb3dzKHNraXA6IG51bWJlciA9IDAsIGxpbWl0OiBudW1iZXIgPSAwKTogUHJvbWlzZTxQYWdlZDxXb3JrZmxvdz4+IHtcbiAgICBjb25zdCB1cmwgPSBgR2V0V29ya2Zsb3dzLyR7c2tpcH0vJHtsaW1pdH1gO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLmdldChcbiAgICAgIHVybCxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgKSBhcyBQcm9taXNlPFBhZ2VkPFdvcmtmbG93Pj47XG4gIH1cblxuICBnZXRGb3Jtcyhza2lwOiBudW1iZXIgPSAwLCBsaW1pdDogbnVtYmVyID0gMCk6IFByb21pc2U8UGFnZWQ8Rm9ybT4+IHtcbiAgICBjb25zdCB1cmwgPSBgR2V0Rm9ybXMvJHtza2lwfS8ke2xpbWl0fWA7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuZ2V0KFxuICAgICAgdXJsLFxuICAgICAgdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuV29ya0Zsb3dBUElcbiAgICApIGFzIFByb21pc2U8UGFnZWQ8Rm9ybT4+O1xuICB9XG5cbiAgZ2V0VGFncyhza2lwOiBudW1iZXIgPSAwLCBsaW1pdDogbnVtYmVyID0gMCk6IFByb21pc2U8UGFnZWQ8VGFnPj4ge1xuICAgIGNvbnN0IHVybCA9IGBHZXRUYWdzLyR7c2tpcH0vJHtsaW1pdH1gO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLmdldChcbiAgICAgIHVybCxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkF1dGhBUElcbiAgICApIGFzIFByb21pc2U8UGFnZWQ8VGFnPj47XG4gIH1cblxuICBzYXZlV29ya2Zsb3dzKHJlcXVlc3RzOiBQYXJ0aWFsPFdvcmtmbG93PltdKTogUHJvbWlzZTxhbnkgfCBFcnJvclJlc3BvbnNlPiB7XG4gICAgY29uc3QgdXJsID0gYFNhdmVXb3JrZmxvd3NgO1xuICAgIC8vIGNvbnNvbGUubG9nKCdTYXZpbmcgd29ya2Zsb3dzJywgcmVxdWVzdHMpO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLnBvc3QoXG4gICAgICB1cmwsXG4gICAgICByZXF1ZXN0cyxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZVdvcmtmbG93U3RhZ2VzKHJlcXVlc3RzOiBXb3JrZmxvd1N0YWdlWydDb2RlJ11bXSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgdXJsID0gYERlbGV0ZVdvcmtmbG93U3RhZ2VgO1xuICAgIC8vIGNvbnNvbGUubG9nKCdTYXZpbmcgd29ya2Zsb3dzJywgcmVxdWVzdHMpO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLnBvc3QoXG4gICAgICB1cmwsXG4gICAgICByZXF1ZXN0cyxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZVdvcmtmbG93QWN0aW9ucyhyZXF1ZXN0czogc3RyaW5nW10pOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHVybCA9IGBEZWxldGVXb3JrZmxvd0FjdGlvbmA7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UucG9zdChcbiAgICAgIHVybCxcbiAgICAgIHJlcXVlc3RzLFxuICAgICAgdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuV29ya0Zsb3dBUElcbiAgICApO1xuICB9XG5cbiAgZGVsZXRlU3dpbUxhbmVzKHJlcXVlc3RzOiBTd2ltTGFuZVsnQ29kZSddW10pOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHVybCA9IGBEZWxldGVTd2ltTGFuZWA7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UucG9zdChcbiAgICAgIHVybCxcbiAgICAgIHJlcXVlc3RzLFxuICAgICAgdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuV29ya0Zsb3dBUElcbiAgICApO1xuICB9XG5cbiAgc2F2ZUVzY2FsYXRpb25zKHJlcXVlc3RzOiBQYXJ0aWFsPEVzY2FsYXRpb24+W10pOiBQcm9taXNlPEVzY2FsYXRpb25bXT4ge1xuICAgIGNvbnN0IHVybCA9IGBTYXZlRXNjYWxhdGlvbnNgO1xuICAgIC8vIGNvbnNvbGUubG9nKCdTYXZpbmcgd29ya2Zsb3dzJywgcmVxdWVzdHMpO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLnBvc3QoXG4gICAgICB1cmwsXG4gICAgICByZXF1ZXN0cyxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUVzY2FsYXRpb25zKHJlcXVlc3RzOiBFc2NhbGF0aW9uWydDb2RlJ11bXSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgdXJsID0gYERlbGV0ZUVzY2FsYXRpb25gO1xuICAgIC8vIGNvbnNvbGUubG9nKCdTYXZpbmcgd29ya2Zsb3dzJywgcmVxdWVzdHMpO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLnBvc3QoXG4gICAgICB1cmwsXG4gICAgICByZXF1ZXN0cyxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgKTtcbiAgfVxuXG4gIHNlYXJjaEVzY2FsYXRpb25XaXRoUGFyYW0oXG4gICAgcGFyYW1zOiBQaWNrPEVzY2FsYXRpb24sICdXb3JrZmxvdycgfCAnU3RhZ2UnIHwgJ1R5cGUnPixcbiAgICBza2lwOiBudW1iZXIgPSAwLFxuICAgIGxpbWl0OiBudW1iZXIgPSAxLFxuICAgIHNvcnRPcmRlcjogc3RyaW5nID0gJ0FzYydcbiAgKTogUHJvbWlzZTxQYWdlZDxFc2NhbGF0aW9uPj4ge1xuICAgIGNvbnN0IHVybCA9IGBTZWFyY2hFc2NhbGF0aW9ucy8ke3NraXB9LyR7bGltaXR9YDtcbiAgICBjb25zdCBwYXlsb2FkID0gT2JqZWN0LmVudHJpZXMocGFyYW1zKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gKHtcbiAgICAgIElzQXV0b0Zyb21EYXRlOiB0cnVlLFxuICAgICAgSXNBdXRvRW5kRGF0ZTogdHJ1ZSxcbiAgICAgIFByb3BlcnR5TmFtZToga2V5LFxuICAgICAgRW50aXR5VmFsdWU6IHZhbHVlLFxuICAgICAgVHlwZTogJ1N0cmluZycsXG4gICAgICBPcGVyYXRvcjogJ0FuZCcsXG4gICAgICBTaWduOiAnRVEnLFxuICAgICAgU29ydDogc29ydE9yZGVyLFxuICAgICAgLy8gRmllbGRzOiBbJ3N0cmluZyddLFxuICAgIH0pKTtcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5wb3N0KHVybCwgcGF5bG9hZCkgYXMgUHJvbWlzZTxQYWdlZDxFc2NhbGF0aW9uPj47XG4gIH1cblxuICBnZXRFc2NhbGF0aW9uV2l0aFBhcmFtKFxuICAgIHBhcmFtOiBzdHJpbmcsXG4gICAgc2tpcDogbnVtYmVyID0gMCxcbiAgICBsaW1pdDogbnVtYmVyID0gMSxcbiAgICBzb3J0UGFyYW06IHN0cmluZyA9ICdDcmVhdGVkQXQnLFxuICAgIHNvcnRPcmRlcjogc3RyaW5nID0gJ0FzYydcbiAgKTogUHJvbWlzZTxQYWdlZDxFc2NhbGF0aW9uPj4ge1xuICAgIGNvbnN0IHVybCA9IGBHZXRFc2NhbGF0aW9uc1dpdGhQYXJhbS8ke3BhcmFtfS8ke3NraXB9LyR7bGltaXR9LyR7c29ydFBhcmFtfS8ke3NvcnRPcmRlcn1gO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLmdldCh1cmwpIGFzIFByb21pc2U8UGFnZWQ8RXNjYWxhdGlvbj4+O1xuICB9XG5cbiAgZ2V0UmVwb3J0U2NoZWR1bGVzKFxuICAgIHNraXA6IG51bWJlciA9IDAsXG4gICAgbGltaXQ6IG51bWJlciA9IDBcbiAgKTogUHJvbWlzZTxQYWdlZDxSZXBvcnRTY2hlZHVsZT4+IHtcbiAgICBjb25zdCB1cmwgPSBgR2V0UmVwb3J0U2NoZWR1bGVzLyR7c2tpcH0vJHtsaW1pdH1gO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLmdldChcbiAgICAgIHVybCxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LlJlcG9ydGluZ0FQSVxuICAgICkgYXMgUHJvbWlzZTxQYWdlZDxSZXBvcnRTY2hlZHVsZT4+O1xuICB9XG5cbiAgZ2V0T3BlcmF0aW9uQWN0aW9ucyhcbiAgICBza2lwOiBudW1iZXIgPSAwLFxuICAgIGxpbWl0OiBudW1iZXIgPSAwXG4gICk6IFByb21pc2U8UGFnZWQ8T3BlcmF0aW9uQWN0aW9uPj4ge1xuICAgIGNvbnN0IHVybCA9IGBHZXRPcGVyYXRpb25BY3Rpb25gO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLmdldChcbiAgICAgIHVybCxcbiAgICAgIC8vIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkdMQVBJXG4gICAgKSBhcyBQcm9taXNlPFBhZ2VkPE9wZXJhdGlvbkFjdGlvbj4+O1xuICB9XG5cbiAgc2F2ZUFjdG9yVGFncyhyZXF1ZXN0czogQWN0b3JUYWdbXSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgdXJsID0gYFNhdmVBY3RvclRhZ3NgO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLnBvc3QoXG4gICAgICB1cmwsXG4gICAgICByZXF1ZXN0cyxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgKTtcbiAgfVxuXG4gIGdldEZsb3dhYmxlU3RhdHVzZXMoXG4gICAgc2tpcDogbnVtYmVyID0gMCxcbiAgICBsaW1pdDogbnVtYmVyID0gMFxuICApOiBQcm9taXNlPFBhZ2VkPEZsb3dhYmxlU3RhdHVzPj4ge1xuICAgIGNvbnN0IHVybCA9IGBHZXRGbG93YWJsZVN0YXR1cy8ke3NraXB9LyR7bGltaXR9L0NyZWF0ZWRBdC9EZXNjYDtcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5nZXQodXJsKSBhcyBQcm9taXNlPFBhZ2VkPEZsb3dhYmxlU3RhdHVzPj47XG4gIH1cblxuICAvLyBIZWxwZXIgdG8gY3JlYXRlIGEgbW9jayB3b3JrZmxvdyAoanVzdCBmb3IgZGVtbylcbiAgcHJpdmF0ZSBjcmVhdGVNb2NrV29ya2Zsb3coY29kZTogc3RyaW5nKTogV29ya2Zsb3cge1xuICAgIC8vIFJldHVybiBhIHNpbXBsZSB3b3JrZmxvdyB3aXRoIG9uZSBsYW5lIGFuZCBvbmUgc3RhZ2VcbiAgICBjb25zdCB3b3JrZmxvdzogV29ya2Zsb3cgPSB7XG4gICAgICBJZDogJ3dvcmtmbG93LTEyMycsXG4gICAgICBDb2RlOiBjb2RlLFxuICAgICAgVGVuYW50SWQ6ICd0ZW5hbnQtMScsXG4gICAgICBpZDogJ3dvcmtmbG93LTEyMycsXG4gICAgICBTZXJ2aWNlTmFtZTogJ3dvcmtmbG93LXNlcnZpY2UnLFxuICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5VbmNoYW5nZWQsXG4gICAgICBOYW1lOiAnU2FtcGxlIFdvcmtmbG93JyxcbiAgICAgIERlc2NyaXB0aW9uOiAnQSBzYW1wbGUgd29ya2Zsb3cgbG9hZGVkIGZyb20gQVBJJyxcbiAgICAgIFN0YWdlRW50cnlSdWxlOiAnJyxcbiAgICAgIEFzc2lnbm1lbnRUeXBlOiBUYXNrQXNzaWdubWVudFR5cGUuQXV0b1JvdXRlLFxuICAgICAgU3RhdHVzOiBTdGF0dXMuQWN0aXZlLFxuICAgICAgQWN0aW9uczogW10sXG4gICAgICBMYW5lczogW1xuICAgICAgICB7XG4gICAgICAgICAgSWQ6ICdsYW5lLTAnLFxuICAgICAgICAgIENvZGU6ICdsYW5lLTAnLFxuICAgICAgICAgIFRlbmFudElkOiAndGVuYW50LTEnLFxuICAgICAgICAgIGlkOiAnbGFuZS0wJyxcbiAgICAgICAgICBTZXJ2aWNlTmFtZTogJ3dvcmtmbG93LXNlcnZpY2UnLFxuICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5VbmNoYW5nZWQsXG4gICAgICAgICAgV29ya2Zsb3c6ICd3b3JrZmxvdy0xMjMnLFxuICAgICAgICAgIFRhZ3M6IFtdLFxuICAgICAgICAgIFBvc2l0aW9uOiAwLFxuICAgICAgICAgIENvb3JkaW5hdGVzOiB7IFg6IDAsIFk6IDAgfSxcbiAgICAgICAgICBTaXplOiB7IFdpZHRoOiAzMDAwLCBIZWlnaHQ6IDI2MyB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIFN0YWdlczogW1xuICAgICAgICB7XG4gICAgICAgICAgSWQ6ICdzdGFnZS0xMjMnLFxuICAgICAgICAgIENvZGU6ICdzdGFnZS0xMjMnLFxuICAgICAgICAgIFRlbmFudElkOiAndGVuYW50LTEnLFxuICAgICAgICAgIGlkOiAnc3RhZ2UtMTIzJyxcbiAgICAgICAgICBTZXJ2aWNlTmFtZTogJ3dvcmtmbG93LXNlcnZpY2UnLFxuICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5VbmNoYW5nZWQsXG4gICAgICAgICAgV29ya2Zsb3c6ICd3b3JrZmxvdy0xMjMnLFxuICAgICAgICAgIE5hbWU6ICdJbml0aWFsIFN0YWdlJyxcbiAgICAgICAgICBEZXNjcmlwdGlvbjogJ1N0YXJ0aW5nIHBvaW50JyxcbiAgICAgICAgICBEdXJhdGlvbjogMjQsXG4gICAgICAgICAgUGFzc09uUnVsZTogJycsXG4gICAgICAgICAgQWN0b3JSdWxlOiBTdGFnZUFjdG9yUnVsZS5Ob25lLFxuICAgICAgICAgIE1pbk5vT2ZBY3RvcjogMSxcbiAgICAgICAgICBJc1BhcmFsbGVsOiBmYWxzZSxcbiAgICAgICAgICBJc0VudHJ5UG9pbnQ6IHRydWUsXG4gICAgICAgICAgSXNFeGl0UG9pbnQ6IGZhbHNlLFxuICAgICAgICAgIFRhZ3M6IFtdLFxuICAgICAgICAgIEZvcm06ICcnLFxuICAgICAgICAgIEFsbG93TXVsdGlTdWJQcm9jZXNzOiBmYWxzZSxcbiAgICAgICAgICBBc3NpZ25tZW50VHlwZTogVGFza0Fzc2lnbm1lbnRUeXBlLkF1dG9Sb3V0ZSxcbiAgICAgICAgICBTdWJXb3JrRmxvdzogJycsXG4gICAgICAgICAgU3dpbUxhbmU6ICdsYW5lLTAnLFxuICAgICAgICAgIENvb3JkaW5hdGVzOiB7IFg6IDEwMCwgWTogNTAgfSxcbiAgICAgICAgICBJc1N1YlByb2Nlc3M6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHdvcmtmbG93O1xuICB9XG59XG4iXX0=
185
+ }], ctorParameters: () => [{ type: i1.HttpWebRequestService }, { type: i1.EnvironmentService }, { type: i1.UtilService }] });
186
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZGF0YS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvY29tcG9uZW50cy93b3JrZmxvdy1kZXNpZ25lci93b3JrZmxvdy1kYXRhLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQTZELFdBQVcsRUFBMEMsY0FBYyxFQUFFLE1BQU0sRUFBaUIsa0JBQWtCLEVBQTJCLE1BQU0sbUNBQW1DLENBQUM7OztBQU12UCxNQUFNLE9BQU8sbUJBQW1CO0lBSXBCO0lBQ0E7SUFDQTtJQUxGLGVBQWUsR0FBRyxDQUFDLENBQUM7SUFFNUIsWUFDVSxXQUFrQyxFQUNsQyxNQUEwQixFQUMxQixXQUF3QjtRQUZ4QixnQkFBVyxHQUFYLFdBQVcsQ0FBdUI7UUFDbEMsV0FBTSxHQUFOLE1BQU0sQ0FBb0I7UUFDMUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7SUFDOUIsQ0FBQztJQUVMOzs7O09BSUc7SUFDSyxVQUFVLENBQUksT0FBeUI7UUFDN0MsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUNELE9BQU8sT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRTtZQUM1QixJQUFJLEVBQUUsSUFBSSxDQUFDLGVBQWUsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELG9CQUFvQixDQUNsQixLQUFhLEVBQ2IsT0FBZSxDQUFDLEVBQ2hCLFFBQWdCLENBQUMsRUFDakIsWUFBb0IsV0FBVyxFQUMvQixZQUFvQixLQUFLO1FBRXpCLE1BQU0sR0FBRyxHQUFHLHlCQUF5QixLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssSUFBSSxTQUFTLElBQUksU0FBUyxFQUFFLENBQUM7UUFDeEYsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBNkIsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFRCxZQUFZLENBQUMsT0FBZSxDQUFDLEVBQUUsUUFBZ0IsQ0FBQztRQUM5QyxNQUFNLEdBQUcsR0FBRyxnQkFBZ0IsSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQzVDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FDL0MsR0FBRyxFQUNILElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FDUixDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELFFBQVEsQ0FBQyxPQUFlLENBQUMsRUFBRSxRQUFnQixDQUFDO1FBQzFDLE1BQU0sR0FBRyxHQUFHLFlBQVksSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FDL0MsR0FBRyxFQUNILElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FDWixDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELE9BQU8sQ0FBQyxPQUFlLENBQUMsRUFBRSxRQUFnQixDQUFDO1FBQ3pDLE1BQU0sR0FBRyxHQUFHLFdBQVcsSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FDL0MsR0FBRyxFQUNILElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FDVCxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELGFBQWEsQ0FBQyxRQUE2QjtRQUN6QyxNQUFNLEdBQUcsR0FBRyxlQUFlLENBQUM7UUFDNUIsNkNBQTZDO1FBQzdDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDaEQsR0FBRyxFQUNILFFBQVEsRUFDUixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQ3BDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxRQUFpQztRQUNwRCxNQUFNLEdBQUcsR0FBRyxxQkFBcUIsQ0FBQztRQUNsQyw2Q0FBNkM7UUFDN0MsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUNoRCxHQUFHLEVBQ0gsUUFBUSxFQUNSLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FDcEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHFCQUFxQixDQUFDLFFBQWtCO1FBQ3RDLE1BQU0sR0FBRyxHQUFHLHNCQUFzQixDQUFDO1FBQ25DLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDaEQsR0FBRyxFQUNILFFBQVEsRUFDUixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQ3BDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxlQUFlLENBQUMsUUFBNEI7UUFDMUMsTUFBTSxHQUFHLEdBQUcsZ0JBQWdCLENBQUM7UUFDN0IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUNoRCxHQUFHLEVBQ0gsUUFBUSxFQUNSLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FDcEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGVBQWUsQ0FBQyxRQUErQjtRQUM3QyxNQUFNLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQztRQUM5Qiw2Q0FBNkM7UUFDN0MsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUNoRCxHQUFHLEVBQ0gsUUFBUSxFQUNSLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FDcEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGlCQUFpQixDQUFDLFFBQThCO1FBQzlDLE1BQU0sR0FBRyxHQUFHLGtCQUFrQixDQUFDO1FBQy9CLDZDQUE2QztRQUM3QyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ2hELEdBQUcsRUFDSCxRQUFRLEVBQ1IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUNwQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQseUJBQXlCLENBQ3ZCLE1BQXVELEVBQ3ZELE9BQWUsQ0FBQyxFQUNoQixRQUFnQixDQUFDLEVBQ2pCLFlBQW9CLEtBQUs7UUFFekIsTUFBTSxHQUFHLEdBQUcscUJBQXFCLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNqRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzVELGNBQWMsRUFBRSxJQUFJO1lBQ3BCLGFBQWEsRUFBRSxJQUFJO1lBQ25CLFlBQVksRUFBRSxHQUFHO1lBQ2pCLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLElBQUksRUFBRSxRQUFRO1lBQ2QsUUFBUSxFQUFFLEtBQUs7WUFDZixJQUFJLEVBQUUsSUFBSTtZQUNWLElBQUksRUFBRSxTQUFTO1lBQ2Ysc0JBQXNCO1NBQ3ZCLENBQUMsQ0FBQyxDQUFDO1FBQ0osT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQStCLENBQUMsQ0FBQztJQUNsRyxDQUFDO0lBRUQsc0JBQXNCLENBQ3BCLEtBQWEsRUFDYixPQUFlLENBQUMsRUFDaEIsUUFBZ0IsQ0FBQyxFQUNqQixZQUFvQixXQUFXLEVBQy9CLFlBQW9CLEtBQUs7UUFFekIsTUFBTSxHQUFHLEdBQUcsMkJBQTJCLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJLFNBQVMsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUMxRixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUErQixDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUVELGtCQUFrQixDQUNoQixPQUFlLENBQUMsRUFDaEIsUUFBZ0IsQ0FBQztRQUVqQixNQUFNLEdBQUcsR0FBRyxzQkFBc0IsSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ2xELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FDL0MsR0FBRyxFQUNILElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FDSCxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELG1CQUFtQixDQUNqQixPQUFlLENBQUMsRUFDaEIsUUFBZ0IsQ0FBQztRQUVqQixNQUFNLEdBQUcsR0FBRyxvQkFBb0IsQ0FBQztRQUNqQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQy9DLEdBQUcsQ0FFK0IsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxhQUFhLENBQUMsUUFBb0I7UUFDaEMsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDO1FBQzVCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDaEQsR0FBRyxFQUNILFFBQVEsRUFDUixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQ3BDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxtQkFBbUIsQ0FDakIsT0FBZSxDQUFDLEVBQ2hCLFFBQWdCLENBQUM7UUFFakIsTUFBTSxHQUFHLEdBQUcscUJBQXFCLElBQUksSUFBSSxLQUFLLGlCQUFpQixDQUFDO1FBQ2hFLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQW1DLENBQUMsQ0FBQztJQUM1RixDQUFDO0lBRUQsbURBQW1EO0lBQzNDLGtCQUFrQixDQUFDLElBQVk7UUFDckMsdURBQXVEO1FBQ3ZELE1BQU0sUUFBUSxHQUFhO1lBQ3pCLEVBQUUsRUFBRSxjQUFjO1lBQ2xCLElBQUksRUFBRSxJQUFJO1lBQ1YsUUFBUSxFQUFFLFVBQVU7WUFDcEIsRUFBRSxFQUFFLGNBQWM7WUFDbEIsV0FBVyxFQUFFLGtCQUFrQjtZQUMvQixTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUU7WUFDckIsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFO1lBQ3JCLFNBQVMsRUFBRSxXQUFXLENBQUMsU0FBUztZQUNoQyxJQUFJLEVBQUUsaUJBQWlCO1lBQ3ZCLFdBQVcsRUFBRSxtQ0FBbUM7WUFDaEQsY0FBYyxFQUFFLEVBQUU7WUFDbEIsY0FBYyxFQUFFLGtCQUFrQixDQUFDLFNBQVM7WUFDNUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1lBQ3JCLE9BQU8sRUFBRSxFQUFFO1lBQ1gsS0FBSyxFQUFFO2dCQUNMO29CQUNFLEVBQUUsRUFBRSxRQUFRO29CQUNaLElBQUksRUFBRSxRQUFRO29CQUNkLFFBQVEsRUFBRSxVQUFVO29CQUNwQixFQUFFLEVBQUUsUUFBUTtvQkFDWixXQUFXLEVBQUUsa0JBQWtCO29CQUMvQixTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUU7b0JBQ3JCLFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRTtvQkFDckIsU0FBUyxFQUFFLFdBQVcsQ0FBQyxTQUFTO29CQUNoQyxRQUFRLEVBQUUsY0FBYztvQkFDeEIsSUFBSSxFQUFFLEVBQUU7b0JBQ1IsUUFBUSxFQUFFLENBQUM7b0JBQ1gsV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO29CQUMzQixJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUU7aUJBQ25DO2FBQ0Y7WUFDRCxNQUFNLEVBQUU7Z0JBQ047b0JBQ0UsRUFBRSxFQUFFLFdBQVc7b0JBQ2YsSUFBSSxFQUFFLFdBQVc7b0JBQ2pCLFFBQVEsRUFBRSxVQUFVO29CQUNwQixFQUFFLEVBQUUsV0FBVztvQkFDZixXQUFXLEVBQUUsa0JBQWtCO29CQUMvQixTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUU7b0JBQ3JCLFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRTtvQkFDckIsU0FBUyxFQUFFLFdBQVcsQ0FBQyxTQUFTO29CQUNoQyxRQUFRLEVBQUUsY0FBYztvQkFDeEIsSUFBSSxFQUFFLGVBQWU7b0JBQ3JCLFdBQVcsRUFBRSxnQkFBZ0I7b0JBQzdCLFFBQVEsRUFBRSxFQUFFO29CQUNaLFVBQVUsRUFBRSxFQUFFO29CQUNkLFNBQVMsRUFBRSxjQUFjLENBQUMsSUFBSTtvQkFDOUIsWUFBWSxFQUFFLENBQUM7b0JBQ2YsVUFBVSxFQUFFLEtBQUs7b0JBQ2pCLFlBQVksRUFBRSxJQUFJO29CQUNsQixXQUFXLEVBQUUsS0FBSztvQkFDbEIsSUFBSSxFQUFFLEVBQUU7b0JBQ1IsSUFBSSxFQUFFLEVBQUU7b0JBQ1Isb0JBQW9CLEVBQUUsS0FBSztvQkFDM0IsY0FBYyxFQUFFLGtCQUFrQixDQUFDLFNBQVM7b0JBQzVDLFdBQVcsRUFBRSxFQUFFO29CQUNmLFFBQVEsRUFBRSxRQUFRO29CQUNsQixXQUFXLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7b0JBQzlCLFlBQVksRUFBRSxLQUFLO2lCQUNwQjthQUNGO1NBQ0YsQ0FBQztRQUVGLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7d0dBalFVLG1CQUFtQjs0R0FBbkIsbUJBQW1CLGNBRmxCLE1BQU07OzRGQUVQLG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RvclRhZywgRXJyb3JSZXNwb25zZSwgRXNjYWxhdGlvbiwgRmxvd2FibGVTdGF0dXMsIEZvcm0sIE9iamVjdFN0YXRlLCBPcGVyYXRpb25BY3Rpb24sIFBhZ2VkLCBSZXBvcnRTY2hlZHVsZSwgU3RhZ2VBY3RvclJ1bGUsIFN0YXR1cywgU3dpbUxhbmUsIFRhZywgVGFza0Fzc2lnbm1lbnRUeXBlLCBXb3JrZmxvdywgV29ya2Zsb3dTdGFnZSB9IGZyb20gJ3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL21vZGVscyc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudFNlcnZpY2UsIEh0dHBXZWJSZXF1ZXN0U2VydmljZSwgVXRpbFNlcnZpY2UgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9zZXJ2aWNlcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBXb3JrZmxvd0RhdGFTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBwZW5kaW5nUmVxdWVzdHMgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaHR0cFNlcnZpY2U6IEh0dHBXZWJSZXF1ZXN0U2VydmljZSxcbiAgICBwcml2YXRlIGVudlN2YzogRW52aXJvbm1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXRpbFNlcnZpY2U6IFV0aWxTZXJ2aWNlXG4gICkgeyB9XG5cbiAgLyoqXG4gICAqIFdyYXBzIGFuIEFQSSBjYWxsIHNvIGEgYnVzeSBpbmRpY2F0b3IgaXMgc2hvd24gd2hpbGUgaXQgaXMgaW4gZmxpZ2h0LlxuICAgKiBBIHJlZi1jb3VudCBrZWVwcyB0aGUgbG9hZGVyIHZpc2libGUgdW50aWwgdGhlIGxhc3QgY29uY3VycmVudCByZXF1ZXN0XG4gICAqIHNldHRsZXMsIG1pcnJvcmluZyBob3cgdGhlIHdvcmtmbG93cyBmYWNhZGUgdG9nZ2xlcyBgc2VuZEJJYC5cbiAgICovXG4gIHByaXZhdGUgd2l0aExvYWRlcjxUPihyZXF1ZXN0OiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgaWYgKHRoaXMucGVuZGluZ1JlcXVlc3RzKysgPT09IDApIHtcbiAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVxdWVzdCgpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgaWYgKC0tdGhpcy5wZW5kaW5nUmVxdWVzdHMgPT09IDApIHtcbiAgICAgICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0V29ya2Zsb3dXaXRoUGFyYW0oXG4gICAgcGFyYW06IHN0cmluZyxcbiAgICBza2lwOiBudW1iZXIgPSAwLFxuICAgIGxpbWl0OiBudW1iZXIgPSAxLFxuICAgIHNvcnRQYXJhbTogc3RyaW5nID0gJ0NyZWF0ZWRBdCcsXG4gICAgc29ydE9yZGVyOiBzdHJpbmcgPSAnQXNjJ1xuICApOiBQcm9taXNlPFBhZ2VkPFdvcmtmbG93Pj4ge1xuICAgIGNvbnN0IHVybCA9IGBHZXRXb3JrZmxvd3NXaXRoUGFyYW0vJHtwYXJhbX0vJHtza2lwfS8ke2xpbWl0fS8ke3NvcnRQYXJhbX0vJHtzb3J0T3JkZXJ9YDtcbiAgICByZXR1cm4gdGhpcy53aXRoTG9hZGVyKCgpID0+IHRoaXMuaHR0cFNlcnZpY2UuZ2V0KHVybCkgYXMgUHJvbWlzZTxQYWdlZDxXb3JrZmxvdz4+KTtcbiAgfVxuXG4gIGdldFdvcmtmbG93cyhza2lwOiBudW1iZXIgPSAwLCBsaW1pdDogbnVtYmVyID0gMCk6IFByb21pc2U8UGFnZWQ8V29ya2Zsb3c+PiB7XG4gICAgY29uc3QgdXJsID0gYEdldFdvcmtmbG93cy8ke3NraXB9LyR7bGltaXR9YDtcbiAgICByZXR1cm4gdGhpcy53aXRoTG9hZGVyKCgpID0+IHRoaXMuaHR0cFNlcnZpY2UuZ2V0KFxuICAgICAgdXJsLFxuICAgICAgdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuV29ya0Zsb3dBUElcbiAgICApIGFzIFByb21pc2U8UGFnZWQ8V29ya2Zsb3c+Pik7XG4gIH1cblxuICBnZXRGb3Jtcyhza2lwOiBudW1iZXIgPSAwLCBsaW1pdDogbnVtYmVyID0gMCk6IFByb21pc2U8UGFnZWQ8Rm9ybT4+IHtcbiAgICBjb25zdCB1cmwgPSBgR2V0Rm9ybXMvJHtza2lwfS8ke2xpbWl0fWA7XG4gICAgcmV0dXJuIHRoaXMud2l0aExvYWRlcigoKSA9PiB0aGlzLmh0dHBTZXJ2aWNlLmdldChcbiAgICAgIHVybCxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgKSBhcyBQcm9taXNlPFBhZ2VkPEZvcm0+Pik7XG4gIH1cblxuICBnZXRUYWdzKHNraXA6IG51bWJlciA9IDAsIGxpbWl0OiBudW1iZXIgPSAwKTogUHJvbWlzZTxQYWdlZDxUYWc+PiB7XG4gICAgY29uc3QgdXJsID0gYEdldFRhZ3MvJHtza2lwfS8ke2xpbWl0fWA7XG4gICAgcmV0dXJuIHRoaXMud2l0aExvYWRlcigoKSA9PiB0aGlzLmh0dHBTZXJ2aWNlLmdldChcbiAgICAgIHVybCxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkF1dGhBUElcbiAgICApIGFzIFByb21pc2U8UGFnZWQ8VGFnPj4pO1xuICB9XG5cbiAgc2F2ZVdvcmtmbG93cyhyZXF1ZXN0czogUGFydGlhbDxXb3JrZmxvdz5bXSk6IFByb21pc2U8YW55IHwgRXJyb3JSZXNwb25zZT4ge1xuICAgIGNvbnN0IHVybCA9IGBTYXZlV29ya2Zsb3dzYDtcbiAgICAvLyBjb25zb2xlLmxvZygnU2F2aW5nIHdvcmtmbG93cycsIHJlcXVlc3RzKTtcbiAgICByZXR1cm4gdGhpcy53aXRoTG9hZGVyKCgpID0+IHRoaXMuaHR0cFNlcnZpY2UucG9zdChcbiAgICAgIHVybCxcbiAgICAgIHJlcXVlc3RzLFxuICAgICAgdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuV29ya0Zsb3dBUElcbiAgICApKTtcbiAgfVxuXG4gIGRlbGV0ZVdvcmtmbG93U3RhZ2VzKHJlcXVlc3RzOiBXb3JrZmxvd1N0YWdlWydDb2RlJ11bXSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgdXJsID0gYERlbGV0ZVdvcmtmbG93U3RhZ2VgO1xuICAgIC8vIGNvbnNvbGUubG9nKCdTYXZpbmcgd29ya2Zsb3dzJywgcmVxdWVzdHMpO1xuICAgIHJldHVybiB0aGlzLndpdGhMb2FkZXIoKCkgPT4gdGhpcy5odHRwU2VydmljZS5wb3N0KFxuICAgICAgdXJsLFxuICAgICAgcmVxdWVzdHMsXG4gICAgICB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5Xb3JrRmxvd0FQSVxuICAgICkpO1xuICB9XG5cbiAgZGVsZXRlV29ya2Zsb3dBY3Rpb25zKHJlcXVlc3RzOiBzdHJpbmdbXSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgdXJsID0gYERlbGV0ZVdvcmtmbG93QWN0aW9uYDtcbiAgICByZXR1cm4gdGhpcy53aXRoTG9hZGVyKCgpID0+IHRoaXMuaHR0cFNlcnZpY2UucG9zdChcbiAgICAgIHVybCxcbiAgICAgIHJlcXVlc3RzLFxuICAgICAgdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuV29ya0Zsb3dBUElcbiAgICApKTtcbiAgfVxuXG4gIGRlbGV0ZVN3aW1MYW5lcyhyZXF1ZXN0czogU3dpbUxhbmVbJ0NvZGUnXVtdKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCB1cmwgPSBgRGVsZXRlU3dpbUxhbmVgO1xuICAgIHJldHVybiB0aGlzLndpdGhMb2FkZXIoKCkgPT4gdGhpcy5odHRwU2VydmljZS5wb3N0KFxuICAgICAgdXJsLFxuICAgICAgcmVxdWVzdHMsXG4gICAgICB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5Xb3JrRmxvd0FQSVxuICAgICkpO1xuICB9XG5cbiAgc2F2ZUVzY2FsYXRpb25zKHJlcXVlc3RzOiBQYXJ0aWFsPEVzY2FsYXRpb24+W10pOiBQcm9taXNlPEVzY2FsYXRpb25bXT4ge1xuICAgIGNvbnN0IHVybCA9IGBTYXZlRXNjYWxhdGlvbnNgO1xuICAgIC8vIGNvbnNvbGUubG9nKCdTYXZpbmcgd29ya2Zsb3dzJywgcmVxdWVzdHMpO1xuICAgIHJldHVybiB0aGlzLndpdGhMb2FkZXIoKCkgPT4gdGhpcy5odHRwU2VydmljZS5wb3N0KFxuICAgICAgdXJsLFxuICAgICAgcmVxdWVzdHMsXG4gICAgICB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5Xb3JrRmxvd0FQSVxuICAgICkpO1xuICB9XG5cbiAgZGVsZXRlRXNjYWxhdGlvbnMocmVxdWVzdHM6IEVzY2FsYXRpb25bJ0NvZGUnXVtdKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCB1cmwgPSBgRGVsZXRlRXNjYWxhdGlvbmA7XG4gICAgLy8gY29uc29sZS5sb2coJ1NhdmluZyB3b3JrZmxvd3MnLCByZXF1ZXN0cyk7XG4gICAgcmV0dXJuIHRoaXMud2l0aExvYWRlcigoKSA9PiB0aGlzLmh0dHBTZXJ2aWNlLnBvc3QoXG4gICAgICB1cmwsXG4gICAgICByZXF1ZXN0cyxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgKSk7XG4gIH1cblxuICBzZWFyY2hFc2NhbGF0aW9uV2l0aFBhcmFtKFxuICAgIHBhcmFtczogUGljazxFc2NhbGF0aW9uLCAnV29ya2Zsb3cnIHwgJ1N0YWdlJyB8ICdUeXBlJz4sXG4gICAgc2tpcDogbnVtYmVyID0gMCxcbiAgICBsaW1pdDogbnVtYmVyID0gMSxcbiAgICBzb3J0T3JkZXI6IHN0cmluZyA9ICdBc2MnXG4gICk6IFByb21pc2U8UGFnZWQ8RXNjYWxhdGlvbj4+IHtcbiAgICBjb25zdCB1cmwgPSBgU2VhcmNoRXNjYWxhdGlvbnMvJHtza2lwfS8ke2xpbWl0fWA7XG4gICAgY29uc3QgcGF5bG9hZCA9IE9iamVjdC5lbnRyaWVzKHBhcmFtcykubWFwKChba2V5LCB2YWx1ZV0pID0+ICh7XG4gICAgICBJc0F1dG9Gcm9tRGF0ZTogdHJ1ZSxcbiAgICAgIElzQXV0b0VuZERhdGU6IHRydWUsXG4gICAgICBQcm9wZXJ0eU5hbWU6IGtleSxcbiAgICAgIEVudGl0eVZhbHVlOiB2YWx1ZSxcbiAgICAgIFR5cGU6ICdTdHJpbmcnLFxuICAgICAgT3BlcmF0b3I6ICdBbmQnLFxuICAgICAgU2lnbjogJ0VRJyxcbiAgICAgIFNvcnQ6IHNvcnRPcmRlcixcbiAgICAgIC8vIEZpZWxkczogWydzdHJpbmcnXSxcbiAgICB9KSk7XG4gICAgcmV0dXJuIHRoaXMud2l0aExvYWRlcigoKSA9PiB0aGlzLmh0dHBTZXJ2aWNlLnBvc3QodXJsLCBwYXlsb2FkKSBhcyBQcm9taXNlPFBhZ2VkPEVzY2FsYXRpb24+Pik7XG4gIH1cblxuICBnZXRFc2NhbGF0aW9uV2l0aFBhcmFtKFxuICAgIHBhcmFtOiBzdHJpbmcsXG4gICAgc2tpcDogbnVtYmVyID0gMCxcbiAgICBsaW1pdDogbnVtYmVyID0gMSxcbiAgICBzb3J0UGFyYW06IHN0cmluZyA9ICdDcmVhdGVkQXQnLFxuICAgIHNvcnRPcmRlcjogc3RyaW5nID0gJ0FzYydcbiAgKTogUHJvbWlzZTxQYWdlZDxFc2NhbGF0aW9uPj4ge1xuICAgIGNvbnN0IHVybCA9IGBHZXRFc2NhbGF0aW9uc1dpdGhQYXJhbS8ke3BhcmFtfS8ke3NraXB9LyR7bGltaXR9LyR7c29ydFBhcmFtfS8ke3NvcnRPcmRlcn1gO1xuICAgIHJldHVybiB0aGlzLndpdGhMb2FkZXIoKCkgPT4gdGhpcy5odHRwU2VydmljZS5nZXQodXJsKSBhcyBQcm9taXNlPFBhZ2VkPEVzY2FsYXRpb24+Pik7XG4gIH1cblxuICBnZXRSZXBvcnRTY2hlZHVsZXMoXG4gICAgc2tpcDogbnVtYmVyID0gMCxcbiAgICBsaW1pdDogbnVtYmVyID0gMFxuICApOiBQcm9taXNlPFBhZ2VkPFJlcG9ydFNjaGVkdWxlPj4ge1xuICAgIGNvbnN0IHVybCA9IGBHZXRSZXBvcnRTY2hlZHVsZXMvJHtza2lwfS8ke2xpbWl0fWA7XG4gICAgcmV0dXJuIHRoaXMud2l0aExvYWRlcigoKSA9PiB0aGlzLmh0dHBTZXJ2aWNlLmdldChcbiAgICAgIHVybCxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LlJlcG9ydGluZ0FQSVxuICAgICkgYXMgUHJvbWlzZTxQYWdlZDxSZXBvcnRTY2hlZHVsZT4+KTtcbiAgfVxuXG4gIGdldE9wZXJhdGlvbkFjdGlvbnMoXG4gICAgc2tpcDogbnVtYmVyID0gMCxcbiAgICBsaW1pdDogbnVtYmVyID0gMFxuICApOiBQcm9taXNlPFBhZ2VkPE9wZXJhdGlvbkFjdGlvbj4+IHtcbiAgICBjb25zdCB1cmwgPSBgR2V0T3BlcmF0aW9uQWN0aW9uYDtcbiAgICByZXR1cm4gdGhpcy53aXRoTG9hZGVyKCgpID0+IHRoaXMuaHR0cFNlcnZpY2UuZ2V0KFxuICAgICAgdXJsLFxuICAgICAgLy8gdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuR0xBUElcbiAgICApIGFzIFByb21pc2U8UGFnZWQ8T3BlcmF0aW9uQWN0aW9uPj4pO1xuICB9XG5cbiAgc2F2ZUFjdG9yVGFncyhyZXF1ZXN0czogQWN0b3JUYWdbXSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgdXJsID0gYFNhdmVBY3RvclRhZ3NgO1xuICAgIHJldHVybiB0aGlzLndpdGhMb2FkZXIoKCkgPT4gdGhpcy5odHRwU2VydmljZS5wb3N0KFxuICAgICAgdXJsLFxuICAgICAgcmVxdWVzdHMsXG4gICAgICB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5Xb3JrRmxvd0FQSVxuICAgICkpO1xuICB9XG5cbiAgZ2V0Rmxvd2FibGVTdGF0dXNlcyhcbiAgICBza2lwOiBudW1iZXIgPSAwLFxuICAgIGxpbWl0OiBudW1iZXIgPSAwXG4gICk6IFByb21pc2U8UGFnZWQ8Rmxvd2FibGVTdGF0dXM+PiB7XG4gICAgY29uc3QgdXJsID0gYEdldEZsb3dhYmxlU3RhdHVzLyR7c2tpcH0vJHtsaW1pdH0vQ3JlYXRlZEF0L0Rlc2NgO1xuICAgIHJldHVybiB0aGlzLndpdGhMb2FkZXIoKCkgPT4gdGhpcy5odHRwU2VydmljZS5nZXQodXJsKSBhcyBQcm9taXNlPFBhZ2VkPEZsb3dhYmxlU3RhdHVzPj4pO1xuICB9XG5cbiAgLy8gSGVscGVyIHRvIGNyZWF0ZSBhIG1vY2sgd29ya2Zsb3cgKGp1c3QgZm9yIGRlbW8pXG4gIHByaXZhdGUgY3JlYXRlTW9ja1dvcmtmbG93KGNvZGU6IHN0cmluZyk6IFdvcmtmbG93IHtcbiAgICAvLyBSZXR1cm4gYSBzaW1wbGUgd29ya2Zsb3cgd2l0aCBvbmUgbGFuZSBhbmQgb25lIHN0YWdlXG4gICAgY29uc3Qgd29ya2Zsb3c6IFdvcmtmbG93ID0ge1xuICAgICAgSWQ6ICd3b3JrZmxvdy0xMjMnLFxuICAgICAgQ29kZTogY29kZSxcbiAgICAgIFRlbmFudElkOiAndGVuYW50LTEnLFxuICAgICAgaWQ6ICd3b3JrZmxvdy0xMjMnLFxuICAgICAgU2VydmljZU5hbWU6ICd3b3JrZmxvdy1zZXJ2aWNlJyxcbiAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuVW5jaGFuZ2VkLFxuICAgICAgTmFtZTogJ1NhbXBsZSBXb3JrZmxvdycsXG4gICAgICBEZXNjcmlwdGlvbjogJ0Egc2FtcGxlIHdvcmtmbG93IGxvYWRlZCBmcm9tIEFQSScsXG4gICAgICBTdGFnZUVudHJ5UnVsZTogJycsXG4gICAgICBBc3NpZ25tZW50VHlwZTogVGFza0Fzc2lnbm1lbnRUeXBlLkF1dG9Sb3V0ZSxcbiAgICAgIFN0YXR1czogU3RhdHVzLkFjdGl2ZSxcbiAgICAgIEFjdGlvbnM6IFtdLFxuICAgICAgTGFuZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIElkOiAnbGFuZS0wJyxcbiAgICAgICAgICBDb2RlOiAnbGFuZS0wJyxcbiAgICAgICAgICBUZW5hbnRJZDogJ3RlbmFudC0xJyxcbiAgICAgICAgICBpZDogJ2xhbmUtMCcsXG4gICAgICAgICAgU2VydmljZU5hbWU6ICd3b3JrZmxvdy1zZXJ2aWNlJyxcbiAgICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuVW5jaGFuZ2VkLFxuICAgICAgICAgIFdvcmtmbG93OiAnd29ya2Zsb3ctMTIzJyxcbiAgICAgICAgICBUYWdzOiBbXSxcbiAgICAgICAgICBQb3NpdGlvbjogMCxcbiAgICAgICAgICBDb29yZGluYXRlczogeyBYOiAwLCBZOiAwIH0sXG4gICAgICAgICAgU2l6ZTogeyBXaWR0aDogMzAwMCwgSGVpZ2h0OiAyNjMgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBTdGFnZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIElkOiAnc3RhZ2UtMTIzJyxcbiAgICAgICAgICBDb2RlOiAnc3RhZ2UtMTIzJyxcbiAgICAgICAgICBUZW5hbnRJZDogJ3RlbmFudC0xJyxcbiAgICAgICAgICBpZDogJ3N0YWdlLTEyMycsXG4gICAgICAgICAgU2VydmljZU5hbWU6ICd3b3JrZmxvdy1zZXJ2aWNlJyxcbiAgICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuVW5jaGFuZ2VkLFxuICAgICAgICAgIFdvcmtmbG93OiAnd29ya2Zsb3ctMTIzJyxcbiAgICAgICAgICBOYW1lOiAnSW5pdGlhbCBTdGFnZScsXG4gICAgICAgICAgRGVzY3JpcHRpb246ICdTdGFydGluZyBwb2ludCcsXG4gICAgICAgICAgRHVyYXRpb246IDI0LFxuICAgICAgICAgIFBhc3NPblJ1bGU6ICcnLFxuICAgICAgICAgIEFjdG9yUnVsZTogU3RhZ2VBY3RvclJ1bGUuTm9uZSxcbiAgICAgICAgICBNaW5Ob09mQWN0b3I6IDEsXG4gICAgICAgICAgSXNQYXJhbGxlbDogZmFsc2UsXG4gICAgICAgICAgSXNFbnRyeVBvaW50OiB0cnVlLFxuICAgICAgICAgIElzRXhpdFBvaW50OiBmYWxzZSxcbiAgICAgICAgICBUYWdzOiBbXSxcbiAgICAgICAgICBGb3JtOiAnJyxcbiAgICAgICAgICBBbGxvd011bHRpU3ViUHJvY2VzczogZmFsc2UsXG4gICAgICAgICAgQXNzaWdubWVudFR5cGU6IFRhc2tBc3NpZ25tZW50VHlwZS5BdXRvUm91dGUsXG4gICAgICAgICAgU3ViV29ya0Zsb3c6ICcnLFxuICAgICAgICAgIFN3aW1MYW5lOiAnbGFuZS0wJyxcbiAgICAgICAgICBDb29yZGluYXRlczogeyBYOiAxMDAsIFk6IDUwIH0sXG4gICAgICAgICAgSXNTdWJQcm9jZXNzOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcblxuICAgIHJldHVybiB3b3JrZmxvdztcbiAgfVxufVxuIl19
@@ -469,10 +469,17 @@ class FlowableStatusComponent extends BaseDataViewComponent {
469
469
  }
470
470
  }
471
471
  async onSave(data) {
472
- const payload = {
472
+ const merged = {
473
473
  ...this.currentData?.data,
474
474
  ...data,
475
- DataState: this.currentData?.data?.DataState === ObjectState.New ? ObjectState.New : ObjectState.Changed,
475
+ };
476
+ // A record is new only when it has no Code yet (the backend always assigns
477
+ // Code on persisted records). Don't trust the loaded DataState here: records
478
+ // returned from the backend come through unchanged and report DataState
479
+ // 'New', which would force an insert (and thus duplicate) on every edit.
480
+ const payload = {
481
+ ...merged,
482
+ DataState: merged.Code ? ObjectState.Changed : ObjectState.New,
476
483
  };
477
484
  await this.facade.addRequest(payload);
478
485
  }