@alfresco/adf-process-services 8.1.0-16320806191 → 9.1.0-16312921641
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/adf-process-services.mjs +297 -301
- package/fesm2022/adf-process-services.mjs.map +1 -1
- package/package.json +4 -6
- package/esm2022/adf-process-services.mjs +0 -5
- package/esm2022/lib/app-list/apps-list.component.mjs +0 -195
- package/esm2022/lib/app-list/icon.model.mjs +0 -166
- package/esm2022/lib/app-list/index.mjs +0 -18
- package/esm2022/lib/app-list/public-api.mjs +0 -23
- package/esm2022/lib/app-list/select-apps-dialog/select-apps-dialog.component.mjs +0 -53
- package/esm2022/lib/attachment/create-process-attachment/create-process-attachment.component.mjs +0 -73
- package/esm2022/lib/attachment/create-task-attachment/create-task-attachment.component.mjs +0 -73
- package/esm2022/lib/attachment/index.mjs +0 -18
- package/esm2022/lib/attachment/process-attachment-list/process-attachment-list.component.mjs +0 -197
- package/esm2022/lib/attachment/public-api.mjs +0 -31
- package/esm2022/lib/attachment/task-attachment-list/task-attachment-list.component.mjs +0 -196
- package/esm2022/lib/compat/types.mjs +0 -18
- package/esm2022/lib/form/events/validate-dynamic-table-row.event.mjs +0 -26
- package/esm2022/lib/form/form-custom-outcomes.component.mjs +0 -31
- package/esm2022/lib/form/form-list/form-list.component.mjs +0 -50
- package/esm2022/lib/form/form.component.mjs +0 -346
- package/esm2022/lib/form/index.mjs +0 -18
- package/esm2022/lib/form/model/form-definition.model.mjs +0 -92
- package/esm2022/lib/form/process-form-rendering.service.mjs +0 -55
- package/esm2022/lib/form/public-api.mjs +0 -32
- package/esm2022/lib/form/services/activiti-alfresco.service.mjs +0 -113
- package/esm2022/lib/form/services/ecm-model.service.mjs +0 -156
- package/esm2022/lib/form/services/editor.service.mjs +0 -87
- package/esm2022/lib/form/services/external-alfresco-api.service.mjs +0 -57
- package/esm2022/lib/form/services/index.mjs +0 -26
- package/esm2022/lib/form/services/model.service.mjs +0 -130
- package/esm2022/lib/form/services/process-content.service.mjs +0 -223
- package/esm2022/lib/form/services/process-definition.service.mjs +0 -93
- package/esm2022/lib/form/services/task-form.service.mjs +0 -127
- package/esm2022/lib/form/services/task.service.mjs +0 -77
- package/esm2022/lib/form/start-form/start-form.component.mjs +0 -141
- package/esm2022/lib/form/widgets/content-widget/attach-file-widget-dialog-component.interface.mjs +0 -18
- package/esm2022/lib/form/widgets/content-widget/attach-file-widget-dialog.component.mjs +0 -115
- package/esm2022/lib/form/widgets/content-widget/attach-file-widget-dialog.service.mjs +0 -100
- package/esm2022/lib/form/widgets/content-widget/attach-file-widget.component.mjs +0 -254
- package/esm2022/lib/form/widgets/content-widget/attach-folder-widget.component.mjs +0 -93
- package/esm2022/lib/form/widgets/content-widget/index.mjs +0 -18
- package/esm2022/lib/form/widgets/content-widget/public-api.mjs +0 -22
- package/esm2022/lib/form/widgets/document/content.widget.mjs +0 -125
- package/esm2022/lib/form/widgets/document/document.widget.mjs +0 -61
- package/esm2022/lib/form/widgets/dropdown/dropdown.widget.mjs +0 -182
- package/esm2022/lib/form/widgets/dynamic-table/dynamic-table.widget.mjs +0 -192
- package/esm2022/lib/form/widgets/dynamic-table/editors/amount/amount.editor.mjs +0 -47
- package/esm2022/lib/form/widgets/dynamic-table/editors/boolean/boolean.editor.mjs +0 -42
- package/esm2022/lib/form/widgets/dynamic-table/editors/date/date.editor.mjs +0 -84
- package/esm2022/lib/form/widgets/dynamic-table/editors/datetime/datetime.editor.mjs +0 -84
- package/esm2022/lib/form/widgets/dynamic-table/editors/dropdown/dropdown.editor.mjs +0 -95
- package/esm2022/lib/form/widgets/dynamic-table/editors/models/cell-validator.model.mjs +0 -18
- package/esm2022/lib/form/widgets/dynamic-table/editors/models/date-cell-validator-model.mjs +0 -47
- package/esm2022/lib/form/widgets/dynamic-table/editors/models/dynamic-row-validation-summary.model.mjs +0 -24
- package/esm2022/lib/form/widgets/dynamic-table/editors/models/dynamic-table-column-option.model.mjs +0 -18
- package/esm2022/lib/form/widgets/dynamic-table/editors/models/dynamic-table-column.model.mjs +0 -18
- package/esm2022/lib/form/widgets/dynamic-table/editors/models/dynamic-table-row.model.mjs +0 -18
- package/esm2022/lib/form/widgets/dynamic-table/editors/models/dynamic-table.widget.model.mjs +0 -159
- package/esm2022/lib/form/widgets/dynamic-table/editors/models/number-cell-validator.model.mjs +0 -45
- package/esm2022/lib/form/widgets/dynamic-table/editors/models/required-cell-validator.model.mjs +0 -40
- package/esm2022/lib/form/widgets/dynamic-table/editors/row-editor/row.editor.mjs +0 -89
- package/esm2022/lib/form/widgets/dynamic-table/editors/text/text.editor.mjs +0 -47
- package/esm2022/lib/form/widgets/dynamic-table/index.mjs +0 -18
- package/esm2022/lib/form/widgets/dynamic-table/public-api.mjs +0 -44
- package/esm2022/lib/form/widgets/file-viewer/file-viewer.widget.mjs +0 -46
- package/esm2022/lib/form/widgets/functional-group/functional-group.widget.mjs +0 -167
- package/esm2022/lib/form/widgets/index.mjs +0 -18
- package/esm2022/lib/form/widgets/people/people.widget.mjs +0 -169
- package/esm2022/lib/form/widgets/public-api.mjs +0 -54
- package/esm2022/lib/form/widgets/radio-buttons/radio-buttons.widget.mjs +0 -97
- package/esm2022/lib/form/widgets/typeahead/typeahead.widget.mjs +0 -152
- package/esm2022/lib/form/widgets/upload/upload.widget.mjs +0 -128
- package/esm2022/lib/people/components/people/people.component.mjs +0 -124
- package/esm2022/lib/people/components/people-list/people-list.component.mjs +0 -74
- package/esm2022/lib/people/components/people-search/people-search.component.mjs +0 -83
- package/esm2022/lib/people/components/people-search-field/people-search-field.component.mjs +0 -90
- package/esm2022/lib/people/components/people-selector/people-selector.component.mjs +0 -76
- package/esm2022/lib/people/helpers/get-display-user.mjs +0 -22
- package/esm2022/lib/people/index.mjs +0 -18
- package/esm2022/lib/people/interfaces/perform-search-callback.interface.mjs +0 -18
- package/esm2022/lib/people/public-api.mjs +0 -35
- package/esm2022/lib/process-comments/index.mjs +0 -21
- package/esm2022/lib/process-comments/process-comments.component.mjs +0 -45
- package/esm2022/lib/process-comments/services/comment-process.service.mjs +0 -77
- package/esm2022/lib/process-list/components/process-audit/process-audit.directive.mjs +0 -105
- package/esm2022/lib/process-list/components/process-filters/process-filters.component.mjs +0 -211
- package/esm2022/lib/process-list/components/process-instance-details/process-instance-details.component.mjs +0 -142
- package/esm2022/lib/process-list/components/process-instance-header/process-instance-header.component.mjs +0 -123
- package/esm2022/lib/process-list/components/process-instance-tasks/process-instance-tasks.component.mjs +0 -163
- package/esm2022/lib/process-list/components/process-list/process-list.component.mjs +0 -327
- package/esm2022/lib/process-list/components/start-process/start-process.component.mjs +0 -423
- package/esm2022/lib/process-list/index.mjs +0 -18
- package/esm2022/lib/process-list/public-api.mjs +0 -44
- package/esm2022/lib/process-list/services/process-filter.service.mjs +0 -182
- package/esm2022/lib/process-list/services/process.service.mjs +0 -259
- package/esm2022/lib/process.module.mjs +0 -132
- package/esm2022/lib/services/apps-process.service.mjs +0 -58
- package/esm2022/lib/services/people-process.service.mjs +0 -124
- package/esm2022/lib/services/task-comments.service.mjs +0 -65
- package/esm2022/lib/task-comments/index.mjs +0 -21
- package/esm2022/lib/task-comments/task-comments.component.mjs +0 -44
- package/esm2022/lib/task-list/components/attach-form/attach-form.component.mjs +0 -127
- package/esm2022/lib/task-list/components/checklist/checklist.component.mjs +0 -140
- package/esm2022/lib/task-list/components/start-task/start-task.component.mjs +0 -221
- package/esm2022/lib/task-list/components/task-details/task-details.component.mjs +0 -360
- package/esm2022/lib/task-list/components/task-filters/task-filters.component.mjs +0 -261
- package/esm2022/lib/task-list/components/task-form/claim-task.directive.mjs +0 -77
- package/esm2022/lib/task-list/components/task-form/task-form.component.mjs +0 -313
- package/esm2022/lib/task-list/components/task-form/unclaim-task.directive.mjs +0 -77
- package/esm2022/lib/task-list/components/task-header/task-header.component.mjs +0 -361
- package/esm2022/lib/task-list/components/task-list/task-list.component.mjs +0 -359
- package/esm2022/lib/task-list/components/task-standalone/task-standalone.component.mjs +0 -82
- package/esm2022/lib/task-list/index.mjs +0 -18
- package/esm2022/lib/task-list/models/form.model.mjs +0 -26
- package/esm2022/lib/task-list/models/task-details.event.mjs +0 -32
- package/esm2022/lib/task-list/models/task-preset.model.mjs +0 -41
- package/esm2022/lib/task-list/models/user-event.model.mjs +0 -18
- package/esm2022/lib/task-list/models/user-group.model.mjs +0 -18
- package/esm2022/lib/task-list/public-api.mjs +0 -60
- package/esm2022/lib/task-list/services/process-upload.service.mjs +0 -42
- package/esm2022/lib/task-list/services/task-filter.service.mjs +0 -249
- package/esm2022/lib/task-list/services/task-upload.service.mjs +0 -42
- package/esm2022/lib/task-list/services/tasklist.service.mjs +0 -251
- package/esm2022/lib/task-list/validators/task-description.validator.mjs +0 -26
- package/esm2022/public-api.mjs +0 -30
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import { MatDialog } from '@angular/material/dialog';
|
|
2
|
-
import { EventEmitter, Injectable, Output } from '@angular/core';
|
|
3
|
-
import { TranslationService } from '@alfresco/adf-core';
|
|
4
|
-
import { of, Subject } from 'rxjs';
|
|
5
|
-
import { ContentApi } from '@alfresco/js-api';
|
|
6
|
-
import { AttachFileWidgetDialogComponent } from './attach-file-widget-dialog.component';
|
|
7
|
-
import { switchMap } from 'rxjs/operators';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "@angular/material/dialog";
|
|
10
|
-
import * as i2 from "@alfresco/adf-core";
|
|
11
|
-
// eslint-disable-next-line @angular-eslint/directive-class-suffix
|
|
12
|
-
export class AttachFileWidgetDialogService {
|
|
13
|
-
constructor(dialog, translation) {
|
|
14
|
-
this.dialog = dialog;
|
|
15
|
-
this.translation = translation;
|
|
16
|
-
/** Emitted when an error occurs. */
|
|
17
|
-
this.error = new EventEmitter();
|
|
18
|
-
this.externalApis = {};
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Opens a dialog to choose a file to upload.
|
|
22
|
-
*
|
|
23
|
-
* @param repository Alfresco endpoint that represents the content service
|
|
24
|
-
* @param currentFolderId Upload file from specific folder
|
|
25
|
-
* @param accountIdentifier account identifier
|
|
26
|
-
* @returns Information about the chosen file(s)
|
|
27
|
-
*/
|
|
28
|
-
openLogin(repository, currentFolderId = '-my-', accountIdentifier) {
|
|
29
|
-
const { title, ecmHost, selected, registerExternalHost } = this.constructPayload(repository);
|
|
30
|
-
const data = {
|
|
31
|
-
title,
|
|
32
|
-
selected,
|
|
33
|
-
ecmHost,
|
|
34
|
-
currentFolderId,
|
|
35
|
-
isSelectionValid: (entry) => entry.isFile,
|
|
36
|
-
showFilesInResult: true,
|
|
37
|
-
registerExternalHost,
|
|
38
|
-
accountIdentifier
|
|
39
|
-
};
|
|
40
|
-
this.openLoginDialog(data, 'adf-attach-file-widget-dialog', '630px');
|
|
41
|
-
return selected;
|
|
42
|
-
}
|
|
43
|
-
downloadURL(repository, sourceId) {
|
|
44
|
-
const { accountIdentifier } = this.constructPayload(repository);
|
|
45
|
-
if (this.externalApis[accountIdentifier]?.getInstance()) {
|
|
46
|
-
const contentApi = new ContentApi(this.externalApis[accountIdentifier].getInstance());
|
|
47
|
-
if (this.externalApis[accountIdentifier].getInstance().isLoggedIn()) {
|
|
48
|
-
return of(contentApi.getContentUrl(sourceId));
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
return this.showExternalHostLoginDialog(repository).pipe(switchMap(() => {
|
|
52
|
-
const contentApi = new ContentApi(this.externalApis[accountIdentifier].getInstance());
|
|
53
|
-
return of(contentApi.getContentUrl(sourceId));
|
|
54
|
-
}));
|
|
55
|
-
}
|
|
56
|
-
addService(accountIdentifier, apiService) {
|
|
57
|
-
if (!this.externalApis[accountIdentifier]) {
|
|
58
|
-
this.externalApis[accountIdentifier] = apiService;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
/** Closes the currently open dialog. */
|
|
62
|
-
close() {
|
|
63
|
-
this.dialog.closeAll();
|
|
64
|
-
}
|
|
65
|
-
openLoginDialog(data, currentPanelClass, chosenWidth) {
|
|
66
|
-
this.dialog.open(AttachFileWidgetDialogComponent, { data, panelClass: currentPanelClass, width: chosenWidth });
|
|
67
|
-
}
|
|
68
|
-
showExternalHostLoginDialog(repository) {
|
|
69
|
-
const data = {
|
|
70
|
-
...this.constructPayload(repository),
|
|
71
|
-
loginOnly: true
|
|
72
|
-
};
|
|
73
|
-
return this.dialog.open(AttachFileWidgetDialogComponent, { data, panelClass: 'adf-attach-file-widget-dialog', width: '630px' }).afterClosed();
|
|
74
|
-
}
|
|
75
|
-
constructPayload(repository) {
|
|
76
|
-
const accountIdentifier = 'alfresco-' + repository.id + '-' + repository.name;
|
|
77
|
-
const ecmHost = repository.repositoryUrl.replace('/alfresco', '');
|
|
78
|
-
const selected = new Subject();
|
|
79
|
-
selected.subscribe({
|
|
80
|
-
complete: this.close.bind(this)
|
|
81
|
-
});
|
|
82
|
-
const title = this.getLoginTitleTranslation(ecmHost);
|
|
83
|
-
const registerExternalHost = this.addService.bind(this);
|
|
84
|
-
return { ecmHost, accountIdentifier, selected, title, registerExternalHost };
|
|
85
|
-
}
|
|
86
|
-
getLoginTitleTranslation(ecmHost) {
|
|
87
|
-
return this.translation.instant(`ATTACH-FILE.DIALOG.LOGIN`, { ecmHost });
|
|
88
|
-
}
|
|
89
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AttachFileWidgetDialogService, deps: [{ token: i1.MatDialog }, { token: i2.TranslationService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
90
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AttachFileWidgetDialogService, providedIn: 'root' }); }
|
|
91
|
-
}
|
|
92
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AttachFileWidgetDialogService, decorators: [{
|
|
93
|
-
type: Injectable,
|
|
94
|
-
args: [{
|
|
95
|
-
providedIn: 'root'
|
|
96
|
-
}]
|
|
97
|
-
}], ctorParameters: () => [{ type: i1.MatDialog }, { type: i2.TranslationService }], propDecorators: { error: [{
|
|
98
|
-
type: Output
|
|
99
|
-
}] } });
|
|
100
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNoLWZpbGUtd2lkZ2V0LWRpYWxvZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL3Byb2Nlc3Mtc2VydmljZXMvc3JjL2xpYi9mb3JtL3dpZGdldHMvY29udGVudC13aWRnZXQvYXR0YWNoLWZpbGUtd2lkZ2V0LWRpYWxvZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWtCQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3hELE9BQU8sRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9DLE9BQU8sRUFBd0MsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDcEYsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDeEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBSzNDLGtFQUFrRTtBQUNsRSxNQUFNLE9BQU8sNkJBQTZCO0lBT3RDLFlBQW9CLE1BQWlCLEVBQVUsV0FBK0I7UUFBMUQsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQU45RSxvQ0FBb0M7UUFFcEMsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFeEIsaUJBQVksR0FBMEMsRUFBRSxDQUFDO0lBRWdCLENBQUM7SUFFbEY7Ozs7Ozs7T0FPRztJQUNILFNBQVMsQ0FBQyxVQUEwQyxFQUFFLGVBQWUsR0FBRyxNQUFNLEVBQUUsaUJBQTBCO1FBQ3RHLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM3RixNQUFNLElBQUksR0FBd0M7WUFDOUMsS0FBSztZQUNMLFFBQVE7WUFDUixPQUFPO1lBQ1AsZUFBZTtZQUNmLGdCQUFnQixFQUFFLENBQUMsS0FBVyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTTtZQUMvQyxpQkFBaUIsRUFBRSxJQUFJO1lBQ3ZCLG9CQUFvQjtZQUNwQixpQkFBaUI7U0FDcEIsQ0FBQztRQUVGLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLCtCQUErQixFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3JFLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxXQUFXLENBQUMsVUFBMEMsRUFBRSxRQUFnQjtRQUNwRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFaEUsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQztZQUN0RCxNQUFNLFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUV0RixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO2dCQUNsRSxPQUFPLEVBQUUsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDbEQsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQ3BELFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDWCxNQUFNLFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUN0RixPQUFPLEVBQUUsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDbEQsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7SUFFRCxVQUFVLENBQUMsaUJBQXlCLEVBQUUsVUFBOEI7UUFDaEUsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsR0FBRyxVQUFVLENBQUM7UUFDdEQsQ0FBQztJQUNMLENBQUM7SUFFRCx3Q0FBd0M7SUFDeEMsS0FBSztRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVPLGVBQWUsQ0FBQyxJQUF5QyxFQUFFLGlCQUF5QixFQUFFLFdBQW1CO1FBQzdHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLCtCQUErQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNuSCxDQUFDO0lBRU8sMkJBQTJCLENBQUMsVUFBMEM7UUFDMUUsTUFBTSxJQUFJLEdBQUc7WUFDVCxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUM7WUFDcEMsU0FBUyxFQUFFLElBQUk7U0FDbEIsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsK0JBQStCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLCtCQUErQixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2xKLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxVQUEwQztRQUMvRCxNQUFNLGlCQUFpQixHQUFHLFdBQVcsR0FBRyxVQUFVLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO1FBQzlFLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNsRSxNQUFNLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO1FBQ3ZDLFFBQVEsQ0FBQyxTQUFTLENBQUM7WUFDZixRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQ2xDLENBQUMsQ0FBQztRQUNILE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyRCxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hELE9BQU8sRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxDQUFDO0lBQ2pGLENBQUM7SUFFTyx3QkFBd0IsQ0FBQyxPQUFlO1FBQzVDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsMEJBQTBCLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzdFLENBQUM7K0dBMUZRLDZCQUE2QjttSEFBN0IsNkJBQTZCLGNBSDFCLE1BQU07OzRGQUdULDZCQUE2QjtrQkFKekMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7K0dBS0csS0FBSztzQkFESixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBBbGZyZXNjb0FwaVNlcnZpY2UgfSBmcm9tICdAYWxmcmVzY28vYWRmLWNvbnRlbnQtc2VydmljZXMnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5qZWN0YWJsZSwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEF0dGFjaEZpbGVXaWRnZXREaWFsb2dDb21wb25lbnREYXRhIH0gZnJvbSAnLi9hdHRhY2gtZmlsZS13aWRnZXQtZGlhbG9nLWNvbXBvbmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQWxmcmVzY29FbmRwb2ludFJlcHJlc2VudGF0aW9uLCBOb2RlLCBDb250ZW50QXBpIH0gZnJvbSAnQGFsZnJlc2NvL2pzLWFwaSc7XG5pbXBvcnQgeyBBdHRhY2hGaWxlV2lkZ2V0RGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9hdHRhY2gtZmlsZS13aWRnZXQtZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1jbGFzcy1zdWZmaXhcbmV4cG9ydCBjbGFzcyBBdHRhY2hGaWxlV2lkZ2V0RGlhbG9nU2VydmljZSB7XG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBhbiBlcnJvciBvY2N1cnMuICovXG4gICAgQE91dHB1dCgpXG4gICAgZXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIHByaXZhdGUgZXh0ZXJuYWxBcGlzOiB7IFtrZXk6IHN0cmluZ106IEFsZnJlc2NvQXBpU2VydmljZSB9ID0ge307XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLCBwcml2YXRlIHRyYW5zbGF0aW9uOiBUcmFuc2xhdGlvblNlcnZpY2UpIHt9XG5cbiAgICAvKipcbiAgICAgKiBPcGVucyBhIGRpYWxvZyB0byBjaG9vc2UgYSBmaWxlIHRvIHVwbG9hZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXBvc2l0b3J5IEFsZnJlc2NvIGVuZHBvaW50IHRoYXQgcmVwcmVzZW50cyB0aGUgY29udGVudCBzZXJ2aWNlXG4gICAgICogQHBhcmFtIGN1cnJlbnRGb2xkZXJJZCBVcGxvYWQgZmlsZSBmcm9tIHNwZWNpZmljIGZvbGRlclxuICAgICAqIEBwYXJhbSBhY2NvdW50SWRlbnRpZmllciBhY2NvdW50IGlkZW50aWZpZXJcbiAgICAgKiBAcmV0dXJucyBJbmZvcm1hdGlvbiBhYm91dCB0aGUgY2hvc2VuIGZpbGUocylcbiAgICAgKi9cbiAgICBvcGVuTG9naW4ocmVwb3NpdG9yeTogQWxmcmVzY29FbmRwb2ludFJlcHJlc2VudGF0aW9uLCBjdXJyZW50Rm9sZGVySWQgPSAnLW15LScsIGFjY291bnRJZGVudGlmaWVyPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxOb2RlW10+IHtcbiAgICAgICAgY29uc3QgeyB0aXRsZSwgZWNtSG9zdCwgc2VsZWN0ZWQsIHJlZ2lzdGVyRXh0ZXJuYWxIb3N0IH0gPSB0aGlzLmNvbnN0cnVjdFBheWxvYWQocmVwb3NpdG9yeSk7XG4gICAgICAgIGNvbnN0IGRhdGE6IEF0dGFjaEZpbGVXaWRnZXREaWFsb2dDb21wb25lbnREYXRhID0ge1xuICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICBzZWxlY3RlZCxcbiAgICAgICAgICAgIGVjbUhvc3QsXG4gICAgICAgICAgICBjdXJyZW50Rm9sZGVySWQsXG4gICAgICAgICAgICBpc1NlbGVjdGlvblZhbGlkOiAoZW50cnk6IE5vZGUpID0+IGVudHJ5LmlzRmlsZSxcbiAgICAgICAgICAgIHNob3dGaWxlc0luUmVzdWx0OiB0cnVlLFxuICAgICAgICAgICAgcmVnaXN0ZXJFeHRlcm5hbEhvc3QsXG4gICAgICAgICAgICBhY2NvdW50SWRlbnRpZmllclxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMub3BlbkxvZ2luRGlhbG9nKGRhdGEsICdhZGYtYXR0YWNoLWZpbGUtd2lkZ2V0LWRpYWxvZycsICc2MzBweCcpO1xuICAgICAgICByZXR1cm4gc2VsZWN0ZWQ7XG4gICAgfVxuXG4gICAgZG93bmxvYWRVUkwocmVwb3NpdG9yeTogQWxmcmVzY29FbmRwb2ludFJlcHJlc2VudGF0aW9uLCBzb3VyY2VJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgeyBhY2NvdW50SWRlbnRpZmllciB9ID0gdGhpcy5jb25zdHJ1Y3RQYXlsb2FkKHJlcG9zaXRvcnkpO1xuXG4gICAgICAgIGlmICh0aGlzLmV4dGVybmFsQXBpc1thY2NvdW50SWRlbnRpZmllcl0/LmdldEluc3RhbmNlKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRBcGkgPSBuZXcgQ29udGVudEFwaSh0aGlzLmV4dGVybmFsQXBpc1thY2NvdW50SWRlbnRpZmllcl0uZ2V0SW5zdGFuY2UoKSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmV4dGVybmFsQXBpc1thY2NvdW50SWRlbnRpZmllcl0uZ2V0SW5zdGFuY2UoKS5pc0xvZ2dlZEluKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoY29udGVudEFwaS5nZXRDb250ZW50VXJsKHNvdXJjZUlkKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5zaG93RXh0ZXJuYWxIb3N0TG9naW5EaWFsb2cocmVwb3NpdG9yeSkucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGVudEFwaSA9IG5ldyBDb250ZW50QXBpKHRoaXMuZXh0ZXJuYWxBcGlzW2FjY291bnRJZGVudGlmaWVyXS5nZXRJbnN0YW5jZSgpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoY29udGVudEFwaS5nZXRDb250ZW50VXJsKHNvdXJjZUlkKSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGFkZFNlcnZpY2UoYWNjb3VudElkZW50aWZpZXI6IHN0cmluZywgYXBpU2VydmljZTogQWxmcmVzY29BcGlTZXJ2aWNlKSB7XG4gICAgICAgIGlmICghdGhpcy5leHRlcm5hbEFwaXNbYWNjb3VudElkZW50aWZpZXJdKSB7XG4gICAgICAgICAgICB0aGlzLmV4dGVybmFsQXBpc1thY2NvdW50SWRlbnRpZmllcl0gPSBhcGlTZXJ2aWNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIENsb3NlcyB0aGUgY3VycmVudGx5IG9wZW4gZGlhbG9nLiAqL1xuICAgIGNsb3NlKCkge1xuICAgICAgICB0aGlzLmRpYWxvZy5jbG9zZUFsbCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb3BlbkxvZ2luRGlhbG9nKGRhdGE6IEF0dGFjaEZpbGVXaWRnZXREaWFsb2dDb21wb25lbnREYXRhLCBjdXJyZW50UGFuZWxDbGFzczogc3RyaW5nLCBjaG9zZW5XaWR0aDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuZGlhbG9nLm9wZW4oQXR0YWNoRmlsZVdpZGdldERpYWxvZ0NvbXBvbmVudCwgeyBkYXRhLCBwYW5lbENsYXNzOiBjdXJyZW50UGFuZWxDbGFzcywgd2lkdGg6IGNob3NlbldpZHRoIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2hvd0V4dGVybmFsSG9zdExvZ2luRGlhbG9nKHJlcG9zaXRvcnk6IEFsZnJlc2NvRW5kcG9pbnRSZXByZXNlbnRhdGlvbik6IE9ic2VydmFibGU8QWxmcmVzY29BcGlTZXJ2aWNlPiB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICAuLi50aGlzLmNvbnN0cnVjdFBheWxvYWQocmVwb3NpdG9yeSksXG4gICAgICAgICAgICBsb2dpbk9ubHk6IHRydWVcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlhbG9nLm9wZW4oQXR0YWNoRmlsZVdpZGdldERpYWxvZ0NvbXBvbmVudCwgeyBkYXRhLCBwYW5lbENsYXNzOiAnYWRmLWF0dGFjaC1maWxlLXdpZGdldC1kaWFsb2cnLCB3aWR0aDogJzYzMHB4JyB9KS5hZnRlckNsb3NlZCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29uc3RydWN0UGF5bG9hZChyZXBvc2l0b3J5OiBBbGZyZXNjb0VuZHBvaW50UmVwcmVzZW50YXRpb24pIHtcbiAgICAgICAgY29uc3QgYWNjb3VudElkZW50aWZpZXIgPSAnYWxmcmVzY28tJyArIHJlcG9zaXRvcnkuaWQgKyAnLScgKyByZXBvc2l0b3J5Lm5hbWU7XG4gICAgICAgIGNvbnN0IGVjbUhvc3QgPSByZXBvc2l0b3J5LnJlcG9zaXRvcnlVcmwucmVwbGFjZSgnL2FsZnJlc2NvJywgJycpO1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IG5ldyBTdWJqZWN0PE5vZGVbXT4oKTtcbiAgICAgICAgc2VsZWN0ZWQuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIGNvbXBsZXRlOiB0aGlzLmNsb3NlLmJpbmQodGhpcylcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy5nZXRMb2dpblRpdGxlVHJhbnNsYXRpb24oZWNtSG9zdCk7XG4gICAgICAgIGNvbnN0IHJlZ2lzdGVyRXh0ZXJuYWxIb3N0ID0gdGhpcy5hZGRTZXJ2aWNlLmJpbmQodGhpcyk7XG4gICAgICAgIHJldHVybiB7IGVjbUhvc3QsIGFjY291bnRJZGVudGlmaWVyLCBzZWxlY3RlZCwgdGl0bGUsIHJlZ2lzdGVyRXh0ZXJuYWxIb3N0IH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRMb2dpblRpdGxlVHJhbnNsYXRpb24oZWNtSG9zdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRpb24uaW5zdGFudChgQVRUQUNILUZJTEUuRElBTE9HLkxPR0lOYCwgeyBlY21Ib3N0IH0pO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -1,254 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
|
|
4
|
-
*
|
|
5
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
* you may not use this file except in compliance with the License.
|
|
7
|
-
* You may obtain a copy of the License at
|
|
8
|
-
*
|
|
9
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
*
|
|
11
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
-
* See the License for the specific language governing permissions and
|
|
15
|
-
* limitations under the License.
|
|
16
|
-
*/
|
|
17
|
-
/* eslint-disable @angular-eslint/component-selector */
|
|
18
|
-
import { Component, DestroyRef, inject, isDevMode, ViewEncapsulation } from '@angular/core';
|
|
19
|
-
import { AppConfigService, AppConfigValues, DownloadService, ErrorWidgetComponent, FormService, ThumbnailService } from '@alfresco/adf-core';
|
|
20
|
-
import { AlfrescoIconComponent, ContentNodeDialogService, ContentService } from '@alfresco/adf-content-services';
|
|
21
|
-
import { from, of, zip } from 'rxjs';
|
|
22
|
-
import { mergeMap } from 'rxjs/operators';
|
|
23
|
-
import { AttachFileWidgetDialogService } from './attach-file-widget-dialog.service';
|
|
24
|
-
import { UploadWidgetComponent } from '../upload/upload.widget';
|
|
25
|
-
import { ProcessContentService } from '../../services/process-content.service';
|
|
26
|
-
import { ActivitiContentService } from '../../services/activiti-alfresco.service';
|
|
27
|
-
import { CommonModule } from '@angular/common';
|
|
28
|
-
import { TranslatePipe } from '@ngx-translate/core';
|
|
29
|
-
import { MatIconModule } from '@angular/material/icon';
|
|
30
|
-
import { MatButtonModule } from '@angular/material/button';
|
|
31
|
-
import { MatMenuModule } from '@angular/material/menu';
|
|
32
|
-
import { MatListModule } from '@angular/material/list';
|
|
33
|
-
import { ActivatedRoute, Router } from '@angular/router';
|
|
34
|
-
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
35
|
-
import * as i0 from "@angular/core";
|
|
36
|
-
import * as i1 from "@alfresco/adf-core";
|
|
37
|
-
import * as i2 from "../../services/process-content.service";
|
|
38
|
-
import * as i3 from "../../services/activiti-alfresco.service";
|
|
39
|
-
import * as i4 from "@alfresco/adf-content-services";
|
|
40
|
-
import * as i5 from "@angular/router";
|
|
41
|
-
import * as i6 from "./attach-file-widget-dialog.service";
|
|
42
|
-
import * as i7 from "@angular/common";
|
|
43
|
-
import * as i8 from "@angular/material/icon";
|
|
44
|
-
import * as i9 from "@angular/material/button";
|
|
45
|
-
import * as i10 from "@angular/material/menu";
|
|
46
|
-
import * as i11 from "@angular/material/list";
|
|
47
|
-
export class AttachFileWidgetComponent extends UploadWidgetComponent {
|
|
48
|
-
constructor(formService, thumbnails, processContentService, activitiContentService, contentService, contentDialog, appConfigService, downloadService, router, activatedRoute, attachDialogService) {
|
|
49
|
-
super(formService, thumbnails, processContentService);
|
|
50
|
-
this.formService = formService;
|
|
51
|
-
this.thumbnails = thumbnails;
|
|
52
|
-
this.processContentService = processContentService;
|
|
53
|
-
this.activitiContentService = activitiContentService;
|
|
54
|
-
this.contentService = contentService;
|
|
55
|
-
this.contentDialog = contentDialog;
|
|
56
|
-
this.appConfigService = appConfigService;
|
|
57
|
-
this.downloadService = downloadService;
|
|
58
|
-
this.router = router;
|
|
59
|
-
this.activatedRoute = activatedRoute;
|
|
60
|
-
this.attachDialogService = attachDialogService;
|
|
61
|
-
this.typeId = 'AttachFileWidgetComponent';
|
|
62
|
-
this.repositoryList = [];
|
|
63
|
-
this.isStartProcessPage = false;
|
|
64
|
-
this.tempFilesList = [];
|
|
65
|
-
this.destroyRef = inject(DestroyRef);
|
|
66
|
-
}
|
|
67
|
-
ngOnInit() {
|
|
68
|
-
super.ngOnInit();
|
|
69
|
-
this.isStartProcessPage = this.router.url.split('?')[0].includes('start-process');
|
|
70
|
-
if (Array.isArray(this.field.value) && this.isFileSourceConfigured()) {
|
|
71
|
-
this.tempFilesList.push(...this.field.value);
|
|
72
|
-
}
|
|
73
|
-
this.activitiContentService.getAlfrescoRepositories().subscribe((repoList) => {
|
|
74
|
-
this.repositoryList = repoList;
|
|
75
|
-
});
|
|
76
|
-
this.formService.taskSaved.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((formSaved) => {
|
|
77
|
-
if (formSaved.form.id === this.field.form.id) {
|
|
78
|
-
this.tempFilesList = [];
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
isFileSourceConfigured() {
|
|
83
|
-
return !!this.field.params?.fileSource;
|
|
84
|
-
}
|
|
85
|
-
isMultipleSourceUpload() {
|
|
86
|
-
return !this.field.readOnly && this.isFileSourceConfigured() && !this.isOnlyLocalSourceSelected();
|
|
87
|
-
}
|
|
88
|
-
isAllFileSourceSelected() {
|
|
89
|
-
return this.field.params?.fileSource?.serviceId === 'all-file-sources' && !this.field.params.link;
|
|
90
|
-
}
|
|
91
|
-
isOnlyLocalSourceSelected() {
|
|
92
|
-
return this.field.params?.fileSource?.serviceId === 'local-file';
|
|
93
|
-
}
|
|
94
|
-
isSimpleUploadButton() {
|
|
95
|
-
return (this.isUploadButtonVisible() && !this.isFileSourceConfigured()) || this.isOnlyLocalSourceSelected();
|
|
96
|
-
}
|
|
97
|
-
isUploadButtonVisible() {
|
|
98
|
-
return (!this.hasFile || this.multipleOption) && !this.field.readOnly;
|
|
99
|
-
}
|
|
100
|
-
isDefinedSourceFolder() {
|
|
101
|
-
return !!this.field.params?.fileSource?.selectedFolder;
|
|
102
|
-
}
|
|
103
|
-
isTemporaryFile(file) {
|
|
104
|
-
return this.tempFilesList.findIndex((elem) => elem.name === file.name) >= 0;
|
|
105
|
-
}
|
|
106
|
-
getNodeFromTempFile(file) {
|
|
107
|
-
return this.tempFilesList.find((elem) => elem.name === file.name);
|
|
108
|
-
}
|
|
109
|
-
openSelectDialogFromFileSource() {
|
|
110
|
-
const params = this.field.params;
|
|
111
|
-
const repository = this.repositoryList.find((repo) => repo.name === params?.fileSource?.name);
|
|
112
|
-
if (repository && this.isExternalHost(repository)) {
|
|
113
|
-
this.uploadFileFromExternalCS(repository, params?.fileSource?.selectedFolder?.pathId);
|
|
114
|
-
}
|
|
115
|
-
else {
|
|
116
|
-
this.contentDialog.openFileBrowseDialogByFolderId(params.fileSource.selectedFolder.pathId).subscribe((selections) => {
|
|
117
|
-
this.tempFilesList.push(...selections);
|
|
118
|
-
this.updateNodesParams();
|
|
119
|
-
this.uploadFileFromCS(selections, this.field.params.fileSource.selectedFolder.accountId, this.field.params.fileSource.selectedFolder.siteId);
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
onAttachFileChanged(event) {
|
|
124
|
-
this.tempFilesList.push(...Array.from(event.target.files));
|
|
125
|
-
this.onFileChanged(event);
|
|
126
|
-
}
|
|
127
|
-
onRemoveAttachFile(file) {
|
|
128
|
-
if (this.isTemporaryFile(file)) {
|
|
129
|
-
this.tempFilesList.splice(this.tempFilesList.indexOf(file.contentBlob), 1);
|
|
130
|
-
this.updateNodesParams();
|
|
131
|
-
}
|
|
132
|
-
this.removeFile(file);
|
|
133
|
-
}
|
|
134
|
-
onAttachFileClicked(file) {
|
|
135
|
-
if (file.isExternal || (!file.sourceId && (this.isStartProcessPage || !file.contentAvailable))) {
|
|
136
|
-
return;
|
|
137
|
-
}
|
|
138
|
-
if (this.isTemporaryFile(file)) {
|
|
139
|
-
this.formService.formContentClicked.next(file);
|
|
140
|
-
}
|
|
141
|
-
else {
|
|
142
|
-
this.fileClicked(file);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
downloadContent(file) {
|
|
146
|
-
if (this.isTemporaryFile(file)) {
|
|
147
|
-
const fileBlob = file.contentBlob;
|
|
148
|
-
if (fileBlob) {
|
|
149
|
-
this.downloadService.downloadBlob(fileBlob, file.name);
|
|
150
|
-
}
|
|
151
|
-
else {
|
|
152
|
-
const nodeUploaded = this.getNodeFromTempFile(file);
|
|
153
|
-
const nodeUrl = this.contentService.getContentUrl(nodeUploaded.id);
|
|
154
|
-
this.downloadService.downloadUrl(nodeUrl, file.name);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
if (file.sourceId) {
|
|
158
|
-
const sourceHost = this.findSource(file.source);
|
|
159
|
-
if (sourceHost && this.isExternalHost(sourceHost)) {
|
|
160
|
-
this.attachDialogService.downloadURL(sourceHost, file.sourceId).subscribe((nodeUrl) => {
|
|
161
|
-
this.downloadService.downloadUrl(nodeUrl, file.name);
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
else {
|
|
165
|
-
const nodeUrl = this.contentService.getContentUrl(file.sourceId);
|
|
166
|
-
this.downloadService.downloadUrl(nodeUrl, file.name);
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
else {
|
|
170
|
-
this.processContentService.getFileRawContent(file.id).subscribe((blob) => {
|
|
171
|
-
this.downloadService.downloadBlob(blob, file.name);
|
|
172
|
-
}, () => { });
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
openSelectDialog(repository) {
|
|
176
|
-
if (this.isExternalHost(repository) && !isDevMode()) {
|
|
177
|
-
this.uploadFileFromExternalCS(repository);
|
|
178
|
-
}
|
|
179
|
-
else {
|
|
180
|
-
this.contentDialog.openFileBrowseDialogByDefaultLocation().subscribe((selections) => {
|
|
181
|
-
if (selections.length) {
|
|
182
|
-
this.tempFilesList.push(...selections);
|
|
183
|
-
this.updateNodesParams();
|
|
184
|
-
this.uploadFileFromCS(selections, `alfresco-${repository.id}-${repository.name}Alfresco`);
|
|
185
|
-
}
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
isSelected() {
|
|
190
|
-
return this.hasFile;
|
|
191
|
-
}
|
|
192
|
-
isExternalHost(repository) {
|
|
193
|
-
const currentECMHost = this.getDomainHost(this.appConfigService.get(AppConfigValues.ECMHOST));
|
|
194
|
-
const chosenRepositoryHost = this.getDomainHost(repository.repositoryUrl);
|
|
195
|
-
return chosenRepositoryHost !== currentECMHost;
|
|
196
|
-
}
|
|
197
|
-
findSource(sourceIdentifier) {
|
|
198
|
-
return this.repositoryList.find((repository) => sourceIdentifier === `alfresco-${repository.id}-${repository.name}`);
|
|
199
|
-
}
|
|
200
|
-
uploadFileFromExternalCS(repository, currentFolderId) {
|
|
201
|
-
const accountIdentifier = `alfresco-${repository.id}-${repository.name}Alfresco`;
|
|
202
|
-
this.attachDialogService.openLogin(repository, currentFolderId, accountIdentifier).subscribe((selections) => {
|
|
203
|
-
selections.forEach((node) => (node['isExternal'] = true));
|
|
204
|
-
this.tempFilesList.push(...selections);
|
|
205
|
-
this.uploadFileFromCS(selections, accountIdentifier);
|
|
206
|
-
});
|
|
207
|
-
}
|
|
208
|
-
uploadFileFromCS(fileNodeList, accountId, siteId) {
|
|
209
|
-
const filesSaved = [];
|
|
210
|
-
fileNodeList.forEach((node) => {
|
|
211
|
-
node.isLink = this.field.params.link;
|
|
212
|
-
});
|
|
213
|
-
from(fileNodeList)
|
|
214
|
-
.pipe(mergeMap((node) => zip(of(node?.content?.mimeType), this.activitiContentService.applyAlfrescoNode(node, siteId, accountId), of(node['isExternal']))))
|
|
215
|
-
.subscribe(([mimeType, res, isExternal]) => {
|
|
216
|
-
res.mimeType = mimeType;
|
|
217
|
-
res['isExternal'] = isExternal;
|
|
218
|
-
filesSaved.push(res);
|
|
219
|
-
}, () => { }, () => {
|
|
220
|
-
const previousFiles = this.field.value ? this.field.value : [];
|
|
221
|
-
this.field.value = [...previousFiles, ...filesSaved];
|
|
222
|
-
this.field.json.value = [...previousFiles, ...filesSaved];
|
|
223
|
-
this.hasFile = true;
|
|
224
|
-
});
|
|
225
|
-
}
|
|
226
|
-
updateNodesParams() {
|
|
227
|
-
this.router.navigate([], {
|
|
228
|
-
relativeTo: this.activatedRoute,
|
|
229
|
-
queryParams: { nodes: this.tempFilesList.map((file) => file.id).join(',') },
|
|
230
|
-
queryParamsHandling: 'merge'
|
|
231
|
-
});
|
|
232
|
-
}
|
|
233
|
-
getDomainHost(urlToCheck) {
|
|
234
|
-
const result = urlToCheck.match('^(?:https?://)?(?:[^@/\n]+@)?(?:www\\.)?([^:/?\n]+)');
|
|
235
|
-
return result[1];
|
|
236
|
-
}
|
|
237
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AttachFileWidgetComponent, deps: [{ token: i1.FormService }, { token: i1.ThumbnailService }, { token: i2.ProcessContentService }, { token: i3.ActivitiContentService }, { token: i4.ContentService }, { token: i4.ContentNodeDialogService }, { token: i1.AppConfigService }, { token: i1.DownloadService }, { token: i5.Router }, { token: i5.ActivatedRoute }, { token: i6.AttachFileWidgetDialogService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
238
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AttachFileWidgetComponent, isStandalone: true, selector: "attach-widget", host: { listeners: { "click": "event($event)", "blur": "event($event)", "change": "event($event)", "focus": "event($event)", "focusin": "event($event)", "focusout": "event($event)", "input": "event($event)", "invalid": "event($event)", "select": "event($event)" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"adf-attach-widget {{ field.className }}\" [class.adf-readonly]=\"field.readOnly\">\n <label class=\"adf-label\" [attr.for]=\"field.id\"\n >{{ field.name | translate }}\n <span class=\"adf-asterisk\" [style.visibility]=\"isRequired() ? 'visible' : 'hidden'\">*</span>\n </label>\n <div class=\"adf-attach-widget-container\">\n <div id=\"adf-attach-widget-simple-upload\" *ngIf=\"isSimpleUploadButton() && isUploadButtonVisible()\">\n <a mat-raised-button color=\"primary\">\n {{ 'FORM.FIELD.UPLOAD' | translate }}\n <mat-icon>file_upload</mat-icon>\n <input #uploadFiles [multiple]=\"multipleOption\" type=\"file\" [id]=\"field.id\" (change)=\"onAttachFileChanged($event)\" />\n </a>\n </div>\n <div class=\"adf-attach-widget__menu-upload\" (focusout)=\"markAsTouched()\" *ngIf=\"isUploadButtonVisible() && isMultipleSourceUpload()\">\n <button mat-raised-button color=\"primary\" [matMenuTriggerFor]=\"menu\" [id]=\"field.id\">\n <mat-icon>attach_file</mat-icon>\n {{ 'FORM.FIELD.UPLOAD' | translate }}\n </button>\n <mat-menu #menu=\"matMenu\" class=\"adf-attach-widget__menu-content\">\n <button mat-menu-item (click)=\"uploadFile.click()\" id=\"attach-local-file\" *ngIf=\"isAllFileSourceSelected()\">\n {{ 'FORM.FIELD.LOCALSTORAGE' | translate }}\n <mat-icon>file_upload</mat-icon>\n <input\n #uploadFile\n class=\"adf-attach-widget__input-type\"\n [multiple]=\"multipleOption\"\n type=\"file\"\n [id]=\"field.id\"\n (change)=\"onAttachFileChanged($event)\"\n />\n </button>\n <button\n mat-menu-item\n *ngIf=\"isDefinedSourceFolder()\"\n id=\"attach-{{ field.params?.fileSource?.name }}\"\n (click)=\"openSelectDialogFromFileSource()\"\n >\n <mat-icon>\n <adf-alfresco-icon />\n </mat-icon>\n {{ field.params?.fileSource?.name }}\n </button>\n <div *ngIf=\"!isDefinedSourceFolder()\">\n <button mat-menu-item *ngFor=\"let repo of repositoryList\" id=\"attach-{{ repo?.name }}\" (click)=\"openSelectDialog(repo)\">\n <mat-icon>\n <adf-alfresco-icon />\n </mat-icon>\n {{ repo.name }}\n </button>\n </div>\n </mat-menu>\n </div>\n </div>\n</div>\n\n<div data-automation-id=\"adf-attach-widget-readonly-list\">\n <mat-list *ngIf=\"hasFile\">\n <mat-list-item class=\"adf-attach-files-row\" *ngFor=\"let file of field.value; index as i\">\n <mat-icon matListItemIcon>\n <img class=\"adf-attach-widget__icon\"\n [id]=\"'file-'+file.id+'-icon'\"\n [src]=\"file.content ? getIcon(file.content.mimeType) : getIcon(file.mimeType)\"\n [alt]=\"mimeTypeIcon\"\n (click)=\"onAttachFileClicked(file)\"\n (keyup.enter)=\"onAttachFileClicked(file)\"\n [attr.aria-label]=\"file.name\"\n [tabindex]=\"i\"/>\n </mat-icon>\n\n <div matListItemLine class=\"adf-attach-widget__label\">\n <span id=\"{{'file-'+file.id}}\"\n (click)=\"onAttachFileClicked(file)\"\n [title]=\"file.name\"\n (keyup.enter)=\"onAttachFileClicked(file)\"\n [tabindex]=\"i\" class=\"adf-file\">\n {{file.name}}\n </span>\n <button id=\"{{'file-'+file.id+'-option-menu'}}\" mat-icon-button [matMenuTriggerFor]=\"fileActionMenu\"\n [attr.aria-label]=\"'ADF_PROCESS_LIST.DETAILS.BUTTON.FILE_OPTION_MENU' | translate\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </div>\n <mat-menu #fileActionMenu=\"matMenu\" xPosition=\"before\">\n <button\n id=\"{{ 'file-' + file.id + '-show-file' }}\"\n [disabled]=\"file.isExternal || !file.mimeType || (!file.sourceId && (isStartProcessPage || !file.contentAvailable))\"\n mat-menu-item\n (click)=\"onAttachFileClicked(file)\"\n >\n <mat-icon>visibility</mat-icon>\n <span>{{ 'FORM.FIELD.VIEW_FILE' | translate }}</span>\n </button>\n <button\n id=\"{{ 'file-' + file.id + '-download-file' }}\"\n [disabled]=\"file.isExternal || !file.mimeType\"\n mat-menu-item\n (click)=\"downloadContent(file)\"\n >\n <mat-icon>file_download</mat-icon>\n <span>{{ 'FORM.FIELD.DOWNLOAD_FILE' | translate }}</span>\n </button>\n <button\n *ngIf=\"!field.readOnly\"\n mat-menu-item\n [id]=\"'file-' + file.id + '-remove'\"\n (click)=\"onRemoveAttachFile(file)\"\n (keyup.enter)=\"onRemoveAttachFile(file)\"\n >\n <mat-icon class=\"mat-24\">highlight_off</mat-icon>\n <span>{{ 'FORM.FIELD.REMOVE_FILE' | translate }}</span>\n </button>\n </mat-menu>\n </mat-list-item>\n </mat-list>\n</div>\n\n<error-widget [error]=\"field.validationSummary\" />\n<error-widget *ngIf=\"!field.isValid && isTouched() && !isSelected()\" required=\"{{ 'FORM.FIELD.REQUIRED' | translate }}\" />\n", styles: [".adf-attach-widget-container{margin-bottom:15px;display:flex;align-items:center}.adf-attach-widget-container input{cursor:pointer;height:100%;right:0;opacity:0;position:absolute;top:0;width:300px;z-index:4}.adf-attach-widget__input-type{width:.1px;height:.1px;opacity:0;overflow:hidden;position:absolute;z-index:-1}.adf-attach-widget{width:100%;word-break:break-all;padding:.4375em 0;border-top:.8438em solid transparent}.adf-attach-widget__icon{cursor:pointer}.adf-attach-widget__label{display:flex;align-items:center;cursor:pointer}.adf-attach-widget__label:hover{text-decoration:underline}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i9.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i9.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i10.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i10.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i10.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i11.MatList, selector: "mat-list", exportAs: ["matList"] }, { kind: "component", type: i11.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i11.MatListItemIcon, selector: "[matListItemIcon]" }, { kind: "directive", type: i11.MatListItemLine, selector: "[matListItemLine]" }, { kind: "component", type: ErrorWidgetComponent, selector: "error-widget", inputs: ["error", "required"] }, { kind: "component", type: AlfrescoIconComponent, selector: "adf-alfresco-icon" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
239
|
-
}
|
|
240
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AttachFileWidgetComponent, decorators: [{
|
|
241
|
-
type: Component,
|
|
242
|
-
args: [{ selector: 'attach-widget', standalone: true, imports: [CommonModule, TranslatePipe, MatIconModule, MatButtonModule, MatMenuModule, MatListModule, ErrorWidgetComponent, AlfrescoIconComponent], host: {
|
|
243
|
-
'(click)': 'event($event)',
|
|
244
|
-
'(blur)': 'event($event)',
|
|
245
|
-
'(change)': 'event($event)',
|
|
246
|
-
'(focus)': 'event($event)',
|
|
247
|
-
'(focusin)': 'event($event)',
|
|
248
|
-
'(focusout)': 'event($event)',
|
|
249
|
-
'(input)': 'event($event)',
|
|
250
|
-
'(invalid)': 'event($event)',
|
|
251
|
-
'(select)': 'event($event)'
|
|
252
|
-
}, encapsulation: ViewEncapsulation.None, template: "<div class=\"adf-attach-widget {{ field.className }}\" [class.adf-readonly]=\"field.readOnly\">\n <label class=\"adf-label\" [attr.for]=\"field.id\"\n >{{ field.name | translate }}\n <span class=\"adf-asterisk\" [style.visibility]=\"isRequired() ? 'visible' : 'hidden'\">*</span>\n </label>\n <div class=\"adf-attach-widget-container\">\n <div id=\"adf-attach-widget-simple-upload\" *ngIf=\"isSimpleUploadButton() && isUploadButtonVisible()\">\n <a mat-raised-button color=\"primary\">\n {{ 'FORM.FIELD.UPLOAD' | translate }}\n <mat-icon>file_upload</mat-icon>\n <input #uploadFiles [multiple]=\"multipleOption\" type=\"file\" [id]=\"field.id\" (change)=\"onAttachFileChanged($event)\" />\n </a>\n </div>\n <div class=\"adf-attach-widget__menu-upload\" (focusout)=\"markAsTouched()\" *ngIf=\"isUploadButtonVisible() && isMultipleSourceUpload()\">\n <button mat-raised-button color=\"primary\" [matMenuTriggerFor]=\"menu\" [id]=\"field.id\">\n <mat-icon>attach_file</mat-icon>\n {{ 'FORM.FIELD.UPLOAD' | translate }}\n </button>\n <mat-menu #menu=\"matMenu\" class=\"adf-attach-widget__menu-content\">\n <button mat-menu-item (click)=\"uploadFile.click()\" id=\"attach-local-file\" *ngIf=\"isAllFileSourceSelected()\">\n {{ 'FORM.FIELD.LOCALSTORAGE' | translate }}\n <mat-icon>file_upload</mat-icon>\n <input\n #uploadFile\n class=\"adf-attach-widget__input-type\"\n [multiple]=\"multipleOption\"\n type=\"file\"\n [id]=\"field.id\"\n (change)=\"onAttachFileChanged($event)\"\n />\n </button>\n <button\n mat-menu-item\n *ngIf=\"isDefinedSourceFolder()\"\n id=\"attach-{{ field.params?.fileSource?.name }}\"\n (click)=\"openSelectDialogFromFileSource()\"\n >\n <mat-icon>\n <adf-alfresco-icon />\n </mat-icon>\n {{ field.params?.fileSource?.name }}\n </button>\n <div *ngIf=\"!isDefinedSourceFolder()\">\n <button mat-menu-item *ngFor=\"let repo of repositoryList\" id=\"attach-{{ repo?.name }}\" (click)=\"openSelectDialog(repo)\">\n <mat-icon>\n <adf-alfresco-icon />\n </mat-icon>\n {{ repo.name }}\n </button>\n </div>\n </mat-menu>\n </div>\n </div>\n</div>\n\n<div data-automation-id=\"adf-attach-widget-readonly-list\">\n <mat-list *ngIf=\"hasFile\">\n <mat-list-item class=\"adf-attach-files-row\" *ngFor=\"let file of field.value; index as i\">\n <mat-icon matListItemIcon>\n <img class=\"adf-attach-widget__icon\"\n [id]=\"'file-'+file.id+'-icon'\"\n [src]=\"file.content ? getIcon(file.content.mimeType) : getIcon(file.mimeType)\"\n [alt]=\"mimeTypeIcon\"\n (click)=\"onAttachFileClicked(file)\"\n (keyup.enter)=\"onAttachFileClicked(file)\"\n [attr.aria-label]=\"file.name\"\n [tabindex]=\"i\"/>\n </mat-icon>\n\n <div matListItemLine class=\"adf-attach-widget__label\">\n <span id=\"{{'file-'+file.id}}\"\n (click)=\"onAttachFileClicked(file)\"\n [title]=\"file.name\"\n (keyup.enter)=\"onAttachFileClicked(file)\"\n [tabindex]=\"i\" class=\"adf-file\">\n {{file.name}}\n </span>\n <button id=\"{{'file-'+file.id+'-option-menu'}}\" mat-icon-button [matMenuTriggerFor]=\"fileActionMenu\"\n [attr.aria-label]=\"'ADF_PROCESS_LIST.DETAILS.BUTTON.FILE_OPTION_MENU' | translate\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </div>\n <mat-menu #fileActionMenu=\"matMenu\" xPosition=\"before\">\n <button\n id=\"{{ 'file-' + file.id + '-show-file' }}\"\n [disabled]=\"file.isExternal || !file.mimeType || (!file.sourceId && (isStartProcessPage || !file.contentAvailable))\"\n mat-menu-item\n (click)=\"onAttachFileClicked(file)\"\n >\n <mat-icon>visibility</mat-icon>\n <span>{{ 'FORM.FIELD.VIEW_FILE' | translate }}</span>\n </button>\n <button\n id=\"{{ 'file-' + file.id + '-download-file' }}\"\n [disabled]=\"file.isExternal || !file.mimeType\"\n mat-menu-item\n (click)=\"downloadContent(file)\"\n >\n <mat-icon>file_download</mat-icon>\n <span>{{ 'FORM.FIELD.DOWNLOAD_FILE' | translate }}</span>\n </button>\n <button\n *ngIf=\"!field.readOnly\"\n mat-menu-item\n [id]=\"'file-' + file.id + '-remove'\"\n (click)=\"onRemoveAttachFile(file)\"\n (keyup.enter)=\"onRemoveAttachFile(file)\"\n >\n <mat-icon class=\"mat-24\">highlight_off</mat-icon>\n <span>{{ 'FORM.FIELD.REMOVE_FILE' | translate }}</span>\n </button>\n </mat-menu>\n </mat-list-item>\n </mat-list>\n</div>\n\n<error-widget [error]=\"field.validationSummary\" />\n<error-widget *ngIf=\"!field.isValid && isTouched() && !isSelected()\" required=\"{{ 'FORM.FIELD.REQUIRED' | translate }}\" />\n", styles: [".adf-attach-widget-container{margin-bottom:15px;display:flex;align-items:center}.adf-attach-widget-container input{cursor:pointer;height:100%;right:0;opacity:0;position:absolute;top:0;width:300px;z-index:4}.adf-attach-widget__input-type{width:.1px;height:.1px;opacity:0;overflow:hidden;position:absolute;z-index:-1}.adf-attach-widget{width:100%;word-break:break-all;padding:.4375em 0;border-top:.8438em solid transparent}.adf-attach-widget__icon{cursor:pointer}.adf-attach-widget__label{display:flex;align-items:center;cursor:pointer}.adf-attach-widget__label:hover{text-decoration:underline}\n"] }]
|
|
253
|
-
}], ctorParameters: () => [{ type: i1.FormService }, { type: i1.ThumbnailService }, { type: i2.ProcessContentService }, { type: i3.ActivitiContentService }, { type: i4.ContentService }, { type: i4.ContentNodeDialogService }, { type: i1.AppConfigService }, { type: i1.DownloadService }, { type: i5.Router }, { type: i5.ActivatedRoute }, { type: i6.AttachFileWidgetDialogService }] });
|
|
254
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNoLWZpbGUtd2lkZ2V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzL3NyYy9saWIvZm9ybS93aWRnZXRzL2NvbnRlbnQtd2lkZ2V0L2F0dGFjaC1maWxlLXdpZGdldC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvcHJvY2Vzcy1zZXJ2aWNlcy9zcmMvbGliL2Zvcm0vd2lkZ2V0cy9jb250ZW50LXdpZGdldC9hdHRhY2gtZmlsZS13aWRnZXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsdURBQXVEO0FBRXZELE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQVUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsb0JBQW9CLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDN0ksT0FBTyxFQUFFLHFCQUFxQixFQUFFLHdCQUF3QixFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWpILE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDcEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDbEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7Ozs7Ozs7OztBQXFCaEUsTUFBTSxPQUFPLHlCQUEwQixTQUFRLHFCQUFxQjtJQVNoRSxZQUNXLFdBQXdCLEVBQ3hCLFVBQTRCLEVBQzVCLHFCQUE0QyxFQUMzQyxzQkFBOEMsRUFDOUMsY0FBOEIsRUFDOUIsYUFBdUMsRUFDdkMsZ0JBQWtDLEVBQ2xDLGVBQWdDLEVBQ2hDLE1BQWMsRUFDZCxjQUE4QixFQUM5QixtQkFBa0Q7UUFFMUQsS0FBSyxDQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUUscUJBQXFCLENBQUMsQ0FBQztRQVovQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixlQUFVLEdBQVYsVUFBVSxDQUFrQjtRQUM1QiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQzNDLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDOUMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGtCQUFhLEdBQWIsYUFBYSxDQUEwQjtRQUN2QyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBK0I7UUFuQjlELFdBQU0sR0FBRywyQkFBMkIsQ0FBQztRQUNyQyxtQkFBYyxHQUFxQyxFQUFFLENBQUM7UUFDdEQsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBRW5CLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBRVYsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQWdCakQsQ0FBQztJQUVELFFBQVE7UUFDSixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDbEYsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFLEVBQUUsQ0FBQztZQUNuRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakQsQ0FBQztRQUVELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ3pFLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ3pGLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1lBQzVCLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxzQkFBc0I7UUFDbEIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDO0lBQzNDLENBQUM7SUFFRCxzQkFBc0I7UUFDbEIsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7SUFDdEcsQ0FBQztJQUVELHVCQUF1QjtRQUNuQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxTQUFTLEtBQUssa0JBQWtCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDdEcsQ0FBQztJQUVELHlCQUF5QjtRQUNyQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxTQUFTLEtBQUssWUFBWSxDQUFDO0lBQ3JFLENBQUM7SUFFRCxvQkFBb0I7UUFDaEIsT0FBTyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztJQUNoSCxDQUFDO0lBRUQscUJBQXFCO1FBQ2pCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7SUFDMUUsQ0FBQztJQUVELHFCQUFxQjtRQUNqQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxDQUFDO0lBQzNELENBQUM7SUFFRCxlQUFlLENBQUMsSUFBdUI7UUFDbkMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxJQUF1QjtRQUN2QyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQsOEJBQThCO1FBQzFCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQ2pDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDOUYsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ2hELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDMUYsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsYUFBYSxDQUFDLDhCQUE4QixDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFVBQWtCLEVBQUUsRUFBRTtnQkFDeEgsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FDakIsVUFBVSxFQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUNyRCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FDckQsQ0FBQztZQUNOLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztJQUNMLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxLQUFVO1FBQzFCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBeUM7UUFDeEQsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUUsSUFBcUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM3RyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUM3QixDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsbUJBQW1CLENBQUMsSUFBUztRQUN6QixJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDN0YsT0FBTztRQUNYLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuRCxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsQ0FBQztJQUNMLENBQUM7SUFFRCxlQUFlLENBQUMsSUFBd0M7UUFDcEQsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDN0IsTUFBTSxRQUFRLEdBQUksSUFBcUMsQ0FBQyxXQUFXLENBQUM7WUFDcEUsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDWCxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNELENBQUM7aUJBQU0sQ0FBQztnQkFDSixNQUFNLFlBQVksR0FBeUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMxRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ25FLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekQsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNoRCxJQUFJLFVBQVUsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtvQkFDbEYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDekQsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNqRSxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pELENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUMzRCxDQUFDLElBQVUsRUFBRSxFQUFFO2dCQUNYLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkQsQ0FBQyxFQUNELEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FDWCxDQUFDO1FBQ04sQ0FBQztJQUNMLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUEwQztRQUN2RCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO1lBQ2xELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QyxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxhQUFhLENBQUMscUNBQXFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxVQUFrQixFQUFFLEVBQUU7Z0JBQ3hGLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNwQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDO29CQUN2QyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztvQkFDekIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxZQUFZLFVBQVUsQ0FBQyxFQUFFLElBQUksVUFBVSxDQUFDLElBQUksVUFBVSxDQUFDLENBQUM7Z0JBQzlGLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDTCxDQUFDO0lBRUQsVUFBVTtRQUNOLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDO0lBRU8sY0FBYyxDQUFDLFVBQTBDO1FBQzdELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUM5RixNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzFFLE9BQU8sb0JBQW9CLEtBQUssY0FBYyxDQUFDO0lBQ25ELENBQUM7SUFFTyxVQUFVLENBQUMsZ0JBQXdCO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixLQUFLLFlBQVksVUFBVSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN6SCxDQUFDO0lBRU8sd0JBQXdCLENBQUMsVUFBMEMsRUFBRSxlQUF3QjtRQUNqRyxNQUFNLGlCQUFpQixHQUFHLFlBQVksVUFBVSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsSUFBSSxVQUFVLENBQUM7UUFDakYsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDeEcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUN6RCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxZQUFvQixFQUFFLFNBQWlCLEVBQUUsTUFBZTtRQUM3RSxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFFdEIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQzFCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFlBQVksQ0FBQzthQUNiLElBQUksQ0FDRCxRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FDbkksQ0FDSjthQUNBLFNBQVMsQ0FDTixDQUFDLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFO1lBQzVCLEdBQUcsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1lBQ3hCLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxVQUFVLENBQUM7WUFDL0IsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QixDQUFDLEVBQ0QsR0FBRyxFQUFFLEdBQUUsQ0FBQyxFQUNSLEdBQUcsRUFBRTtZQUNELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQy9ELElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxhQUFhLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLGFBQWEsRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDO1lBQzFELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLENBQUMsQ0FDSixDQUFDO0lBQ1YsQ0FBQztJQUVPLGlCQUFpQjtRQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUU7WUFDckIsVUFBVSxFQUFFLElBQUksQ0FBQyxjQUFjO1lBQy9CLFdBQVcsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUMzRSxtQkFBbUIsRUFBRSxPQUFPO1NBQy9CLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxhQUFhLENBQUMsVUFBa0I7UUFDcEMsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO1FBQ3ZGLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7K0dBck9RLHlCQUF5QjttR0FBekIseUJBQXlCLDJXQ3pEdEMscStMQXNIQSwyb0JEN0VjLFlBQVksMlBBQUUsYUFBYSxpREFBRSxhQUFhLG1MQUFFLGVBQWUscWZBQUUsYUFBYSxnd0JBQUUsYUFBYSw0YkFBRSxvQkFBb0Isd0ZBQUUscUJBQXFCOzs0RkFnQnZJLHlCQUF5QjtrQkFuQnJDLFNBQVM7K0JBQ0ksZUFBZSxjQUNiLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLG9CQUFvQixFQUFFLHFCQUFxQixDQUFDLFFBRzNJO3dCQUNGLFNBQVMsRUFBRSxlQUFlO3dCQUMxQixRQUFRLEVBQUUsZUFBZTt3QkFDekIsVUFBVSxFQUFFLGVBQWU7d0JBQzNCLFNBQVMsRUFBRSxlQUFlO3dCQUMxQixXQUFXLEVBQUUsZUFBZTt3QkFDNUIsWUFBWSxFQUFFLGVBQWU7d0JBQzdCLFNBQVMsRUFBRSxlQUFlO3dCQUMxQixXQUFXLEVBQUUsZUFBZTt3QkFDNUIsVUFBVSxFQUFFLGVBQWU7cUJBQzlCLGlCQUNjLGlCQUFpQixDQUFDLElBQUkiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3IgKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBEZXN0cm95UmVmLCBpbmplY3QsIGlzRGV2TW9kZSwgT25Jbml0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXBwQ29uZmlnU2VydmljZSwgQXBwQ29uZmlnVmFsdWVzLCBEb3dubG9hZFNlcnZpY2UsIEVycm9yV2lkZ2V0Q29tcG9uZW50LCBGb3JtU2VydmljZSwgVGh1bWJuYWlsU2VydmljZSB9IGZyb20gJ0BhbGZyZXNjby9hZGYtY29yZSc7XG5pbXBvcnQgeyBBbGZyZXNjb0ljb25Db21wb25lbnQsIENvbnRlbnROb2RlRGlhbG9nU2VydmljZSwgQ29udGVudFNlcnZpY2UgfSBmcm9tICdAYWxmcmVzY28vYWRmLWNvbnRlbnQtc2VydmljZXMnO1xuaW1wb3J0IHsgQWxmcmVzY29FbmRwb2ludFJlcHJlc2VudGF0aW9uLCBOb2RlLCBOb2RlQ2hpbGRBc3NvY2lhdGlvbiwgUmVsYXRlZENvbnRlbnRSZXByZXNlbnRhdGlvbiB9IGZyb20gJ0BhbGZyZXNjby9qcy1hcGknO1xuaW1wb3J0IHsgZnJvbSwgb2YsIHppcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWVyZ2VNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBdHRhY2hGaWxlV2lkZ2V0RGlhbG9nU2VydmljZSB9IGZyb20gJy4vYXR0YWNoLWZpbGUtd2lkZ2V0LWRpYWxvZy5zZXJ2aWNlJztcbmltcG9ydCB7IFVwbG9hZFdpZGdldENvbXBvbmVudCB9IGZyb20gJy4uL3VwbG9hZC91cGxvYWQud2lkZ2V0JztcbmltcG9ydCB7IFByb2Nlc3NDb250ZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Byb2Nlc3MtY29udGVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEFjdGl2aXRpQ29udGVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hY3Rpdml0aS1hbGZyZXNjby5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgTWF0TGlzdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xpc3QnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXR0YWNoLXdpZGdldCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBUcmFuc2xhdGVQaXBlLCBNYXRJY29uTW9kdWxlLCBNYXRCdXR0b25Nb2R1bGUsIE1hdE1lbnVNb2R1bGUsIE1hdExpc3RNb2R1bGUsIEVycm9yV2lkZ2V0Q29tcG9uZW50LCBBbGZyZXNjb0ljb25Db21wb25lbnRdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hdHRhY2gtZmlsZS13aWRnZXQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2F0dGFjaC1maWxlLXdpZGdldC5jb21wb25lbnQuc2NzcyddLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJyhjbGljayknOiAnZXZlbnQoJGV2ZW50KScsXG4gICAgICAgICcoYmx1ciknOiAnZXZlbnQoJGV2ZW50KScsXG4gICAgICAgICcoY2hhbmdlKSc6ICdldmVudCgkZXZlbnQpJyxcbiAgICAgICAgJyhmb2N1cyknOiAnZXZlbnQoJGV2ZW50KScsXG4gICAgICAgICcoZm9jdXNpbiknOiAnZXZlbnQoJGV2ZW50KScsXG4gICAgICAgICcoZm9jdXNvdXQpJzogJ2V2ZW50KCRldmVudCknLFxuICAgICAgICAnKGlucHV0KSc6ICdldmVudCgkZXZlbnQpJyxcbiAgICAgICAgJyhpbnZhbGlkKSc6ICdldmVudCgkZXZlbnQpJyxcbiAgICAgICAgJyhzZWxlY3QpJzogJ2V2ZW50KCRldmVudCknXG4gICAgfSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIEF0dGFjaEZpbGVXaWRnZXRDb21wb25lbnQgZXh0ZW5kcyBVcGxvYWRXaWRnZXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIHR5cGVJZCA9ICdBdHRhY2hGaWxlV2lkZ2V0Q29tcG9uZW50JztcbiAgICByZXBvc2l0b3J5TGlzdDogQWxmcmVzY29FbmRwb2ludFJlcHJlc2VudGF0aW9uW10gPSBbXTtcbiAgICBpc1N0YXJ0UHJvY2Vzc1BhZ2UgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgdGVtcEZpbGVzTGlzdCA9IFtdO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBmb3JtU2VydmljZTogRm9ybVNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyB0aHVtYm5haWxzOiBUaHVtYm5haWxTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgcHJvY2Vzc0NvbnRlbnRTZXJ2aWNlOiBQcm9jZXNzQ29udGVudFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYWN0aXZpdGlDb250ZW50U2VydmljZTogQWN0aXZpdGlDb250ZW50U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb250ZW50U2VydmljZTogQ29udGVudFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY29udGVudERpYWxvZzogQ29udGVudE5vZGVEaWFsb2dTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGFwcENvbmZpZ1NlcnZpY2U6IEFwcENvbmZpZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZG93bmxvYWRTZXJ2aWNlOiBEb3dubG9hZFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICBwcml2YXRlIGF0dGFjaERpYWxvZ1NlcnZpY2U6IEF0dGFjaEZpbGVXaWRnZXREaWFsb2dTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGZvcm1TZXJ2aWNlLCB0aHVtYm5haWxzLCBwcm9jZXNzQ29udGVudFNlcnZpY2UpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLmlzU3RhcnRQcm9jZXNzUGFnZSA9IHRoaXMucm91dGVyLnVybC5zcGxpdCgnPycpWzBdLmluY2x1ZGVzKCdzdGFydC1wcm9jZXNzJyk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZmllbGQudmFsdWUpICYmIHRoaXMuaXNGaWxlU291cmNlQ29uZmlndXJlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLnRlbXBGaWxlc0xpc3QucHVzaCguLi50aGlzLmZpZWxkLnZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWN0aXZpdGlDb250ZW50U2VydmljZS5nZXRBbGZyZXNjb1JlcG9zaXRvcmllcygpLnN1YnNjcmliZSgocmVwb0xpc3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVwb3NpdG9yeUxpc3QgPSByZXBvTGlzdDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5mb3JtU2VydmljZS50YXNrU2F2ZWQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKChmb3JtU2F2ZWQpID0+IHtcbiAgICAgICAgICAgIGlmIChmb3JtU2F2ZWQuZm9ybS5pZCA9PT0gdGhpcy5maWVsZC5mb3JtLmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wRmlsZXNMaXN0ID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlzRmlsZVNvdXJjZUNvbmZpZ3VyZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZmllbGQucGFyYW1zPy5maWxlU291cmNlO1xuICAgIH1cblxuICAgIGlzTXVsdGlwbGVTb3VyY2VVcGxvYWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5maWVsZC5yZWFkT25seSAmJiB0aGlzLmlzRmlsZVNvdXJjZUNvbmZpZ3VyZWQoKSAmJiAhdGhpcy5pc09ubHlMb2NhbFNvdXJjZVNlbGVjdGVkKCk7XG4gICAgfVxuXG4gICAgaXNBbGxGaWxlU291cmNlU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkLnBhcmFtcz8uZmlsZVNvdXJjZT8uc2VydmljZUlkID09PSAnYWxsLWZpbGUtc291cmNlcycgJiYgIXRoaXMuZmllbGQucGFyYW1zLmxpbms7XG4gICAgfVxuXG4gICAgaXNPbmx5TG9jYWxTb3VyY2VTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGQucGFyYW1zPy5maWxlU291cmNlPy5zZXJ2aWNlSWQgPT09ICdsb2NhbC1maWxlJztcbiAgICB9XG5cbiAgICBpc1NpbXBsZVVwbG9hZEJ1dHRvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmlzVXBsb2FkQnV0dG9uVmlzaWJsZSgpICYmICF0aGlzLmlzRmlsZVNvdXJjZUNvbmZpZ3VyZWQoKSkgfHwgdGhpcy5pc09ubHlMb2NhbFNvdXJjZVNlbGVjdGVkKCk7XG4gICAgfVxuXG4gICAgaXNVcGxvYWRCdXR0b25WaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKCF0aGlzLmhhc0ZpbGUgfHwgdGhpcy5tdWx0aXBsZU9wdGlvbikgJiYgIXRoaXMuZmllbGQucmVhZE9ubHk7XG4gICAgfVxuXG4gICAgaXNEZWZpbmVkU291cmNlRm9sZGVyKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmZpZWxkLnBhcmFtcz8uZmlsZVNvdXJjZT8uc2VsZWN0ZWRGb2xkZXI7XG4gICAgfVxuXG4gICAgaXNUZW1wb3JhcnlGaWxlKGZpbGU6IHsgbmFtZT86IHN0cmluZyB9KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRlbXBGaWxlc0xpc3QuZmluZEluZGV4KChlbGVtKSA9PiBlbGVtLm5hbWUgPT09IGZpbGUubmFtZSkgPj0gMDtcbiAgICB9XG5cbiAgICBnZXROb2RlRnJvbVRlbXBGaWxlKGZpbGU6IHsgbmFtZT86IHN0cmluZyB9KTogTm9kZUNoaWxkQXNzb2NpYXRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy50ZW1wRmlsZXNMaXN0LmZpbmQoKGVsZW0pID0+IGVsZW0ubmFtZSA9PT0gZmlsZS5uYW1lKTtcbiAgICB9XG5cbiAgICBvcGVuU2VsZWN0RGlhbG9nRnJvbUZpbGVTb3VyY2UoKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuZmllbGQucGFyYW1zO1xuICAgICAgICBjb25zdCByZXBvc2l0b3J5ID0gdGhpcy5yZXBvc2l0b3J5TGlzdC5maW5kKChyZXBvKSA9PiByZXBvLm5hbWUgPT09IHBhcmFtcz8uZmlsZVNvdXJjZT8ubmFtZSk7XG4gICAgICAgIGlmIChyZXBvc2l0b3J5ICYmIHRoaXMuaXNFeHRlcm5hbEhvc3QocmVwb3NpdG9yeSkpIHtcbiAgICAgICAgICAgIHRoaXMudXBsb2FkRmlsZUZyb21FeHRlcm5hbENTKHJlcG9zaXRvcnksIHBhcmFtcz8uZmlsZVNvdXJjZT8uc2VsZWN0ZWRGb2xkZXI/LnBhdGhJZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnREaWFsb2cub3BlbkZpbGVCcm93c2VEaWFsb2dCeUZvbGRlcklkKHBhcmFtcy5maWxlU291cmNlLnNlbGVjdGVkRm9sZGVyLnBhdGhJZCkuc3Vic2NyaWJlKChzZWxlY3Rpb25zOiBOb2RlW10pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBGaWxlc0xpc3QucHVzaCguLi5zZWxlY3Rpb25zKTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZU5vZGVzUGFyYW1zKCk7XG4gICAgICAgICAgICAgICAgdGhpcy51cGxvYWRGaWxlRnJvbUNTKFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25zLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpZWxkLnBhcmFtcy5maWxlU291cmNlLnNlbGVjdGVkRm9sZGVyLmFjY291bnRJZCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWVsZC5wYXJhbXMuZmlsZVNvdXJjZS5zZWxlY3RlZEZvbGRlci5zaXRlSWRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkF0dGFjaEZpbGVDaGFuZ2VkKGV2ZW50OiBhbnkpIHtcbiAgICAgICAgdGhpcy50ZW1wRmlsZXNMaXN0LnB1c2goLi4uQXJyYXkuZnJvbShldmVudC50YXJnZXQuZmlsZXMpKTtcbiAgICAgICAgdGhpcy5vbkZpbGVDaGFuZ2VkKGV2ZW50KTtcbiAgICB9XG5cbiAgICBvblJlbW92ZUF0dGFjaEZpbGUoZmlsZTogRmlsZSB8IFJlbGF0ZWRDb250ZW50UmVwcmVzZW50YXRpb24pIHtcbiAgICAgICAgaWYgKHRoaXMuaXNUZW1wb3JhcnlGaWxlKGZpbGUpKSB7XG4gICAgICAgICAgICB0aGlzLnRlbXBGaWxlc0xpc3Quc3BsaWNlKHRoaXMudGVtcEZpbGVzTGlzdC5pbmRleE9mKChmaWxlIGFzIFJlbGF0ZWRDb250ZW50UmVwcmVzZW50YXRpb24pLmNvbnRlbnRCbG9iKSwgMSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU5vZGVzUGFyYW1zKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVGaWxlKGZpbGUpO1xuICAgIH1cblxuICAgIG9uQXR0YWNoRmlsZUNsaWNrZWQoZmlsZTogYW55KSB7XG4gICAgICAgIGlmIChmaWxlLmlzRXh0ZXJuYWwgfHwgKCFmaWxlLnNvdXJjZUlkICYmICh0aGlzLmlzU3RhcnRQcm9jZXNzUGFnZSB8fCAhZmlsZS5jb250ZW50QXZhaWxhYmxlKSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc1RlbXBvcmFyeUZpbGUoZmlsZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybVNlcnZpY2UuZm9ybUNvbnRlbnRDbGlja2VkLm5leHQoZmlsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZpbGVDbGlja2VkKGZpbGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZG93bmxvYWRDb250ZW50KGZpbGU6IGFueSB8IFJlbGF0ZWRDb250ZW50UmVwcmVzZW50YXRpb24pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNUZW1wb3JhcnlGaWxlKGZpbGUpKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlQmxvYiA9IChmaWxlIGFzIFJlbGF0ZWRDb250ZW50UmVwcmVzZW50YXRpb24pLmNvbnRlbnRCbG9iO1xuICAgICAgICAgICAgaWYgKGZpbGVCbG9iKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kb3dubG9hZFNlcnZpY2UuZG93bmxvYWRCbG9iKGZpbGVCbG9iLCBmaWxlLm5hbWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlVXBsb2FkZWQ6IE5vZGVDaGlsZEFzc29jaWF0aW9uID0gdGhpcy5nZXROb2RlRnJvbVRlbXBGaWxlKGZpbGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVVcmwgPSB0aGlzLmNvbnRlbnRTZXJ2aWNlLmdldENvbnRlbnRVcmwobm9kZVVwbG9hZGVkLmlkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRvd25sb2FkU2VydmljZS5kb3dubG9hZFVybChub2RlVXJsLCBmaWxlLm5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChmaWxlLnNvdXJjZUlkKSB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VIb3N0ID0gdGhpcy5maW5kU291cmNlKGZpbGUuc291cmNlKTtcbiAgICAgICAgICAgIGlmIChzb3VyY2VIb3N0ICYmIHRoaXMuaXNFeHRlcm5hbEhvc3Qoc291cmNlSG9zdCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmF0dGFjaERpYWxvZ1NlcnZpY2UuZG93bmxvYWRVUkwoc291cmNlSG9zdCwgZmlsZS5zb3VyY2VJZCkuc3Vic2NyaWJlKChub2RlVXJsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZG93bmxvYWRTZXJ2aWNlLmRvd25sb2FkVXJsKG5vZGVVcmwsIGZpbGUubmFtZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVVcmwgPSB0aGlzLmNvbnRlbnRTZXJ2aWNlLmdldENvbnRlbnRVcmwoZmlsZS5zb3VyY2VJZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5kb3dubG9hZFNlcnZpY2UuZG93bmxvYWRVcmwobm9kZVVybCwgZmlsZS5uYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0NvbnRlbnRTZXJ2aWNlLmdldEZpbGVSYXdDb250ZW50KGZpbGUuaWQpLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAoYmxvYjogQmxvYikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvd25sb2FkU2VydmljZS5kb3dubG9hZEJsb2IoYmxvYiwgZmlsZS5uYW1lKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICgpID0+IHt9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb3BlblNlbGVjdERpYWxvZyhyZXBvc2l0b3J5OiBBbGZyZXNjb0VuZHBvaW50UmVwcmVzZW50YXRpb24pIHtcbiAgICAgICAgaWYgKHRoaXMuaXNFeHRlcm5hbEhvc3QocmVwb3NpdG9yeSkgJiYgIWlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgICB0aGlzLnVwbG9hZEZpbGVGcm9tRXh0ZXJuYWxDUyhyZXBvc2l0b3J5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29udGVudERpYWxvZy5vcGVuRmlsZUJyb3dzZURpYWxvZ0J5RGVmYXVsdExvY2F0aW9uKCkuc3Vic2NyaWJlKChzZWxlY3Rpb25zOiBOb2RlW10pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZW1wRmlsZXNMaXN0LnB1c2goLi4uc2VsZWN0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTm9kZXNQYXJhbXMoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRGaWxlRnJvbUNTKHNlbGVjdGlvbnMsIGBhbGZyZXNjby0ke3JlcG9zaXRvcnkuaWR9LSR7cmVwb3NpdG9yeS5uYW1lfUFsZnJlc2NvYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc1NlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNGaWxlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNFeHRlcm5hbEhvc3QocmVwb3NpdG9yeTogQWxmcmVzY29FbmRwb2ludFJlcHJlc2VudGF0aW9uKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRFQ01Ib3N0ID0gdGhpcy5nZXREb21haW5Ib3N0KHRoaXMuYXBwQ29uZmlnU2VydmljZS5nZXQoQXBwQ29uZmlnVmFsdWVzLkVDTUhPU1QpKTtcbiAgICAgICAgY29uc3QgY2hvc2VuUmVwb3NpdG9yeUhvc3QgPSB0aGlzLmdldERvbWFpbkhvc3QocmVwb3NpdG9yeS5yZXBvc2l0b3J5VXJsKTtcbiAgICAgICAgcmV0dXJuIGNob3NlblJlcG9zaXRvcnlIb3N0ICE9PSBjdXJyZW50RUNNSG9zdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbmRTb3VyY2Uoc291cmNlSWRlbnRpZmllcjogc3RyaW5nKTogQWxmcmVzY29FbmRwb2ludFJlcHJlc2VudGF0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVwb3NpdG9yeUxpc3QuZmluZCgocmVwb3NpdG9yeSkgPT4gc291cmNlSWRlbnRpZmllciA9PT0gYGFsZnJlc2NvLSR7cmVwb3NpdG9yeS5pZH0tJHtyZXBvc2l0b3J5Lm5hbWV9YCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGxvYWRGaWxlRnJvbUV4dGVybmFsQ1MocmVwb3NpdG9yeTogQWxmcmVzY29FbmRwb2ludFJlcHJlc2VudGF0aW9uLCBjdXJyZW50Rm9sZGVySWQ/OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgYWNjb3VudElkZW50aWZpZXIgPSBgYWxmcmVzY28tJHtyZXBvc2l0b3J5LmlkfS0ke3JlcG9zaXRvcnkubmFtZX1BbGZyZXNjb2A7XG4gICAgICAgIHRoaXMuYXR0YWNoRGlhbG9nU2VydmljZS5vcGVuTG9naW4ocmVwb3NpdG9yeSwgY3VycmVudEZvbGRlcklkLCBhY2NvdW50SWRlbnRpZmllcikuc3Vic2NyaWJlKChzZWxlY3Rpb25zKSA9PiB7XG4gICAgICAgICAgICBzZWxlY3Rpb25zLmZvckVhY2goKG5vZGUpID0+IChub2RlWydpc0V4dGVybmFsJ10gPSB0cnVlKSk7XG4gICAgICAgICAgICB0aGlzLnRlbXBGaWxlc0xpc3QucHVzaCguLi5zZWxlY3Rpb25zKTtcbiAgICAgICAgICAgIHRoaXMudXBsb2FkRmlsZUZyb21DUyhzZWxlY3Rpb25zLCBhY2NvdW50SWRlbnRpZmllcik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBsb2FkRmlsZUZyb21DUyhmaWxlTm9kZUxpc3Q6IE5vZGVbXSwgYWNjb3VudElkOiBzdHJpbmcsIHNpdGVJZD86IHN0cmluZykge1xuICAgICAgICBjb25zdCBmaWxlc1NhdmVkID0gW107XG5cbiAgICAgICAgZmlsZU5vZGVMaXN0LmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICAgIG5vZGUuaXNMaW5rID0gdGhpcy5maWVsZC5wYXJhbXMubGluaztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbShmaWxlTm9kZUxpc3QpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtZXJnZU1hcCgobm9kZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgemlwKG9mKG5vZGU/LmNvbnRlbnQ/Lm1pbWVUeXBlKSwgdGhpcy5hY3Rpdml0aUNvbnRlbnRTZXJ2aWNlLmFwcGx5QWxmcmVzY29Ob2RlKG5vZGUsIHNpdGVJZCwgYWNjb3VudElkKSwgb2Yobm9kZVsnaXNFeHRlcm5hbCddKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgIChbbWltZVR5cGUsIHJlcywgaXNFeHRlcm5hbF0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzLm1pbWVUeXBlID0gbWltZVR5cGU7XG4gICAgICAgICAgICAgICAgICAgIHJlc1snaXNFeHRlcm5hbCddID0gaXNFeHRlcm5hbDtcbiAgICAgICAgICAgICAgICAgICAgZmlsZXNTYXZlZC5wdXNoKHJlcyk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAoKSA9PiB7fSxcbiAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzRmlsZXMgPSB0aGlzLmZpZWxkLnZhbHVlID8gdGhpcy5maWVsZC52YWx1ZSA6IFtdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpZWxkLnZhbHVlID0gWy4uLnByZXZpb3VzRmlsZXMsIC4uLmZpbGVzU2F2ZWRdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpZWxkLmpzb24udmFsdWUgPSBbLi4ucHJldmlvdXNGaWxlcywgLi4uZmlsZXNTYXZlZF07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzRmlsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZU5vZGVzUGFyYW1zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5hY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7IG5vZGVzOiB0aGlzLnRlbXBGaWxlc0xpc3QubWFwKChmaWxlKSA9PiBmaWxlLmlkKS5qb2luKCcsJykgfSxcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZSdcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREb21haW5Ib3N0KHVybFRvQ2hlY2s6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHVybFRvQ2hlY2subWF0Y2goJ14oPzpodHRwcz86Ly8pPyg/OlteQC9cXG5dK0ApPyg/Ond3d1xcXFwuKT8oW146Lz9cXG5dKyknKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdFsxXTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYWRmLWF0dGFjaC13aWRnZXQge3sgZmllbGQuY2xhc3NOYW1lIH19XCIgW2NsYXNzLmFkZi1yZWFkb25seV09XCJmaWVsZC5yZWFkT25seVwiPlxuICAgIDxsYWJlbCBjbGFzcz1cImFkZi1sYWJlbFwiIFthdHRyLmZvcl09XCJmaWVsZC5pZFwiXG4gICAgICAgID57eyBmaWVsZC5uYW1lIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiYWRmLWFzdGVyaXNrXCIgW3N0eWxlLnZpc2liaWxpdHldPVwiaXNSZXF1aXJlZCgpID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcIj4qPC9zcGFuPlxuICAgIDwvbGFiZWw+XG4gICAgPGRpdiBjbGFzcz1cImFkZi1hdHRhY2gtd2lkZ2V0LWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGlkPVwiYWRmLWF0dGFjaC13aWRnZXQtc2ltcGxlLXVwbG9hZFwiICpuZ0lmPVwiaXNTaW1wbGVVcGxvYWRCdXR0b24oKSAmJiBpc1VwbG9hZEJ1dHRvblZpc2libGUoKVwiPlxuICAgICAgICAgICAgPGEgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICAgICAgICAgICAge3sgJ0ZPUk0uRklFTEQuVVBMT0FEJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5maWxlX3VwbG9hZDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPGlucHV0ICN1cGxvYWRGaWxlcyBbbXVsdGlwbGVdPVwibXVsdGlwbGVPcHRpb25cIiB0eXBlPVwiZmlsZVwiIFtpZF09XCJmaWVsZC5pZFwiIChjaGFuZ2UpPVwib25BdHRhY2hGaWxlQ2hhbmdlZCgkZXZlbnQpXCIgLz5cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtYXR0YWNoLXdpZGdldF9fbWVudS11cGxvYWRcIiAoZm9jdXNvdXQpPVwibWFya0FzVG91Y2hlZCgpXCIgKm5nSWY9XCJpc1VwbG9hZEJ1dHRvblZpc2libGUoKSAmJiBpc011bHRpcGxlU291cmNlVXBsb2FkKClcIj5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIiBbaWRdPVwiZmllbGQuaWRcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+YXR0YWNoX2ZpbGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIHt7ICdGT1JNLkZJRUxELlVQTE9BRCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiIGNsYXNzPVwiYWRmLWF0dGFjaC13aWRnZXRfX21lbnUtY29udGVudFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwidXBsb2FkRmlsZS5jbGljaygpXCIgaWQ9XCJhdHRhY2gtbG9jYWwtZmlsZVwiICpuZ0lmPVwiaXNBbGxGaWxlU291cmNlU2VsZWN0ZWQoKVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyAnRk9STS5GSUVMRC5MT0NBTFNUT1JBR0UnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5maWxlX3VwbG9hZDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgI3VwbG9hZEZpbGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWF0dGFjaC13aWRnZXRfX2lucHV0LXR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW211bHRpcGxlXT1cIm11bHRpcGxlT3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uQXR0YWNoRmlsZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNEZWZpbmVkU291cmNlRm9sZGVyKClcIlxuICAgICAgICAgICAgICAgICAgICBpZD1cImF0dGFjaC17eyBmaWVsZC5wYXJhbXM/LmZpbGVTb3VyY2U/Lm5hbWUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlblNlbGVjdERpYWxvZ0Zyb21GaWxlU291cmNlKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1hbGZyZXNjby1pY29uIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIHt7IGZpZWxkLnBhcmFtcz8uZmlsZVNvdXJjZT8ubmFtZSB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXNEZWZpbmVkU291cmNlRm9sZGVyKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtICpuZ0Zvcj1cImxldCByZXBvIG9mIHJlcG9zaXRvcnlMaXN0XCIgaWQ9XCJhdHRhY2gte3sgcmVwbz8ubmFtZSB9fVwiIChjbGljayk9XCJvcGVuU2VsZWN0RGlhbG9nKHJlcG8pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1hbGZyZXNjby1pY29uIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgcmVwby5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiBkYXRhLWF1dG9tYXRpb24taWQ9XCJhZGYtYXR0YWNoLXdpZGdldC1yZWFkb25seS1saXN0XCI+XG4gICAgPG1hdC1saXN0ICpuZ0lmPVwiaGFzRmlsZVwiPlxuICAgICAgICA8bWF0LWxpc3QtaXRlbSBjbGFzcz1cImFkZi1hdHRhY2gtZmlsZXMtcm93XCIgKm5nRm9yPVwibGV0IGZpbGUgb2YgZmllbGQudmFsdWU7IGluZGV4IGFzIGlcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRMaXN0SXRlbUljb24+XG4gICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImFkZi1hdHRhY2gtd2lkZ2V0X19pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgIFtpZF09XCInZmlsZS0nK2ZpbGUuaWQrJy1pY29uJ1wiXG4gICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImZpbGUuY29udGVudCA/IGdldEljb24oZmlsZS5jb250ZW50Lm1pbWVUeXBlKSA6IGdldEljb24oZmlsZS5taW1lVHlwZSlcIlxuICAgICAgICAgICAgICAgICAgICAgW2FsdF09XCJtaW1lVHlwZUljb25cIlxuICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQXR0YWNoRmlsZUNsaWNrZWQoZmlsZSlcIlxuICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uQXR0YWNoRmlsZUNsaWNrZWQoZmlsZSlcIlxuICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJmaWxlLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cImlcIi8+XG4gICAgICAgICAgICA8L21hdC1pY29uPlxuXG4gICAgICAgICAgICA8ZGl2IG1hdExpc3RJdGVtTGluZSBjbGFzcz1cImFkZi1hdHRhY2gtd2lkZ2V0X19sYWJlbFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGlkPVwie3snZmlsZS0nK2ZpbGUuaWR9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQXR0YWNoRmlsZUNsaWNrZWQoZmlsZSlcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJmaWxlLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkF0dGFjaEZpbGVDbGlja2VkKGZpbGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwiaVwiIGNsYXNzPVwiYWRmLWZpbGVcIj5cbiAgICAgICAgICAgICAgICAgICAge3tmaWxlLm5hbWV9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPVwie3snZmlsZS0nK2ZpbGUuaWQrJy1vcHRpb24tbWVudSd9fVwiIG1hdC1pY29uLWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwiZmlsZUFjdGlvbk1lbnVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQURGX1BST0NFU1NfTElTVC5ERVRBSUxTLkJVVFRPTi5GSUxFX09QVElPTl9NRU5VJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+bW9yZV92ZXJ0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1tZW51ICNmaWxlQWN0aW9uTWVudT1cIm1hdE1lbnVcIiB4UG9zaXRpb249XCJiZWZvcmVcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGlkPVwie3sgJ2ZpbGUtJyArIGZpbGUuaWQgKyAnLXNob3ctZmlsZScgfX1cIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmlsZS5pc0V4dGVybmFsIHx8ICFmaWxlLm1pbWVUeXBlIHx8ICghZmlsZS5zb3VyY2VJZCAmJiAoaXNTdGFydFByb2Nlc3NQYWdlIHx8ICFmaWxlLmNvbnRlbnRBdmFpbGFibGUpKVwiXG4gICAgICAgICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQXR0YWNoRmlsZUNsaWNrZWQoZmlsZSlcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPnZpc2liaWxpdHk8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyAnRk9STS5GSUVMRC5WSUVXX0ZJTEUnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJ7eyAnZmlsZS0nICsgZmlsZS5pZCArICctZG93bmxvYWQtZmlsZScgfX1cIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmlsZS5pc0V4dGVybmFsIHx8ICFmaWxlLm1pbWVUeXBlXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZG93bmxvYWRDb250ZW50KGZpbGUpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5maWxlX2Rvd25sb2FkPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgJ0ZPUk0uRklFTEQuRE9XTkxPQURfRklMRScgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFmaWVsZC5yZWFkT25seVwiXG4gICAgICAgICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cIidmaWxlLScgKyBmaWxlLmlkICsgJy1yZW1vdmUnXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUmVtb3ZlQXR0YWNoRmlsZShmaWxlKVwiXG4gICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvblJlbW92ZUF0dGFjaEZpbGUoZmlsZSlcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0LTI0XCI+aGlnaGxpZ2h0X29mZjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7ICdGT1JNLkZJRUxELlJFTU9WRV9GSUxFJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbWF0LW1lbnU+XG4gICAgICAgIDwvbWF0LWxpc3QtaXRlbT5cbiAgICA8L21hdC1saXN0PlxuPC9kaXY+XG5cbjxlcnJvci13aWRnZXQgW2Vycm9yXT1cImZpZWxkLnZhbGlkYXRpb25TdW1tYXJ5XCIgLz5cbjxlcnJvci13aWRnZXQgKm5nSWY9XCIhZmllbGQuaXNWYWxpZCAmJiBpc1RvdWNoZWQoKSAmJiAhaXNTZWxlY3RlZCgpXCIgcmVxdWlyZWQ9XCJ7eyAnRk9STS5GSUVMRC5SRVFVSVJFRCcgfCB0cmFuc2xhdGUgfX1cIiAvPlxuIl19
|