@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,423 +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
|
-
import { Component, DestroyRef, EventEmitter, inject, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';
|
|
18
|
-
import { AppConfigService, AppConfigValues, EmptyContentComponent, LocalizedDatePipe } from '@alfresco/adf-core';
|
|
19
|
-
import { AppsProcessService } from '../../../services/apps-process.service';
|
|
20
|
-
import { ProcessService } from '../../services/process.service';
|
|
21
|
-
import { FormsModule, ReactiveFormsModule, UntypedFormControl, Validators } from '@angular/forms';
|
|
22
|
-
import { forkJoin } from 'rxjs';
|
|
23
|
-
import { map } from 'rxjs/operators';
|
|
24
|
-
import { MatAutocompleteModule, MatAutocompleteTrigger } from '@angular/material/autocomplete';
|
|
25
|
-
import { MatSelectModule } from '@angular/material/select';
|
|
26
|
-
import { StartFormComponent } from '../../../form';
|
|
27
|
-
import { ActivitiContentService } from '../../../form/services/activiti-alfresco.service';
|
|
28
|
-
import { getTime } from 'date-fns';
|
|
29
|
-
import { CommonModule } from '@angular/common';
|
|
30
|
-
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
|
31
|
-
import { TranslatePipe } from '@ngx-translate/core';
|
|
32
|
-
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
33
|
-
import { MatButtonModule } from '@angular/material/button';
|
|
34
|
-
import { MatIconModule } from '@angular/material/icon';
|
|
35
|
-
import { MatInputModule } from '@angular/material/input';
|
|
36
|
-
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
37
|
-
import * as i0 from "@angular/core";
|
|
38
|
-
import * as i1 from "../../services/process.service";
|
|
39
|
-
import * as i2 from "../../../form/services/activiti-alfresco.service";
|
|
40
|
-
import * as i3 from "../../../services/apps-process.service";
|
|
41
|
-
import * as i4 from "@alfresco/adf-core";
|
|
42
|
-
import * as i5 from "@angular/common";
|
|
43
|
-
import * as i6 from "@angular/material/progress-spinner";
|
|
44
|
-
import * as i7 from "@angular/material/form-field";
|
|
45
|
-
import * as i8 from "@angular/material/select";
|
|
46
|
-
import * as i9 from "@angular/material/core";
|
|
47
|
-
import * as i10 from "@angular/forms";
|
|
48
|
-
import * as i11 from "@angular/material/autocomplete";
|
|
49
|
-
import * as i12 from "@angular/material/button";
|
|
50
|
-
import * as i13 from "@angular/material/icon";
|
|
51
|
-
import * as i14 from "@angular/material/input";
|
|
52
|
-
const MAX_LENGTH = 255;
|
|
53
|
-
const DATE_TIME_IDENTIFIER_REG_EXP = new RegExp('%{datetime}', 'i');
|
|
54
|
-
const PROCESS_DEFINITION_IDENTIFIER_REG_EXP = new RegExp('%{processdefinition}', 'i');
|
|
55
|
-
export class StartProcessInstanceComponent {
|
|
56
|
-
constructor(processService, contentService, appsProcessService, appConfig, datePipe) {
|
|
57
|
-
this.processService = processService;
|
|
58
|
-
this.contentService = contentService;
|
|
59
|
-
this.appsProcessService = appsProcessService;
|
|
60
|
-
this.appConfig = appConfig;
|
|
61
|
-
this.datePipe = datePipe;
|
|
62
|
-
/** Name to assign to the current process. */
|
|
63
|
-
this.name = '';
|
|
64
|
-
/** Hide or show the process selection dropdown. */
|
|
65
|
-
this.showSelectProcessDropdown = true;
|
|
66
|
-
/** Hide or show application selection dropdown. */
|
|
67
|
-
this.showSelectApplicationDropdown = false;
|
|
68
|
-
/** Parameter to enable selection of process when filtering. */
|
|
69
|
-
this.processFilterSelector = true;
|
|
70
|
-
/** Emitted when the process starts. */
|
|
71
|
-
this.start = new EventEmitter();
|
|
72
|
-
/** Emitted when the process is canceled. */
|
|
73
|
-
this.cancel = new EventEmitter();
|
|
74
|
-
/** Emitted when an error occurs. */
|
|
75
|
-
this.error = new EventEmitter();
|
|
76
|
-
/** Emitted when process definition selection changes. */
|
|
77
|
-
this.processDefinitionSelection = new EventEmitter();
|
|
78
|
-
/** Emitted when application selection changes. */
|
|
79
|
-
this.applicationSelection = new EventEmitter();
|
|
80
|
-
this.processDefinitions = [];
|
|
81
|
-
this.maxProcessNameLength = MAX_LENGTH;
|
|
82
|
-
this.applications = [];
|
|
83
|
-
this.isProcessDefinitionsLoading = true;
|
|
84
|
-
this.isAppsLoading = true;
|
|
85
|
-
this.destroyRef = inject(DestroyRef);
|
|
86
|
-
}
|
|
87
|
-
ngOnInit() {
|
|
88
|
-
this.processNameInput = new UntypedFormControl('', [
|
|
89
|
-
Validators.required,
|
|
90
|
-
Validators.maxLength(this.maxProcessNameLength),
|
|
91
|
-
Validators.pattern('^[^\\s]+(\\s+[^\\s]+)*$')
|
|
92
|
-
]);
|
|
93
|
-
this.processDefinitionInput = new UntypedFormControl();
|
|
94
|
-
this.load(this.appId);
|
|
95
|
-
this.filteredProcessesDefinitions$ = this.processDefinitionInput.valueChanges.pipe(map((value) => this._filter(value)), takeUntilDestroyed(this.destroyRef));
|
|
96
|
-
this.contentService.getAlfrescoRepositories().subscribe((repoList) => {
|
|
97
|
-
if (repoList?.[0]) {
|
|
98
|
-
const alfrescoRepository = repoList[0];
|
|
99
|
-
this.alfrescoRepositoryName = `alfresco-${alfrescoRepository.id}-${alfrescoRepository.name}`;
|
|
100
|
-
}
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
ngOnChanges(changes) {
|
|
104
|
-
if (changes['values']?.currentValue) {
|
|
105
|
-
this.moveNodeFromCStoPS();
|
|
106
|
-
}
|
|
107
|
-
const appId = changes['appId'];
|
|
108
|
-
if (appId?.currentValue) {
|
|
109
|
-
this.load(appId.currentValue);
|
|
110
|
-
}
|
|
111
|
-
const processDefinitionName = changes['processDefinitionName'];
|
|
112
|
-
if (processDefinitionName?.currentValue) {
|
|
113
|
-
this.filterProcessDefinitionByName(processDefinitionName.currentValue);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
getSelectedProcess(selectedProcess) {
|
|
117
|
-
return this.processDefinitions.find((process) => process.name.toLowerCase() === selectedProcess);
|
|
118
|
-
}
|
|
119
|
-
load(appId) {
|
|
120
|
-
if (this.showSelectApplicationDropdown) {
|
|
121
|
-
this.loadApps();
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
124
|
-
this.loadProcessDefinitions(appId);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
loadProcessDefinitions(appId) {
|
|
128
|
-
this.isProcessDefinitionsLoading = true;
|
|
129
|
-
this.resetSelectedProcessDefinition();
|
|
130
|
-
this.processService
|
|
131
|
-
.getProcessDefinitions(appId)
|
|
132
|
-
.pipe(map((processDefinitionRepresentations) => {
|
|
133
|
-
let currentProcessDef;
|
|
134
|
-
if (processDefinitionRepresentations.length === 1) {
|
|
135
|
-
currentProcessDef = processDefinitionRepresentations[0];
|
|
136
|
-
}
|
|
137
|
-
if (this.processDefinitionName) {
|
|
138
|
-
const filteredProcessDefinition = processDefinitionRepresentations.find((processDefinition) => processDefinition.name === this.processDefinitionName);
|
|
139
|
-
if (filteredProcessDefinition) {
|
|
140
|
-
currentProcessDef = filteredProcessDefinition;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
return { currentProcessDef, processDefinitionRepresentations };
|
|
144
|
-
}))
|
|
145
|
-
.subscribe((filteredProcessDefinitions) => {
|
|
146
|
-
this.processDefinitions = filteredProcessDefinitions.processDefinitionRepresentations;
|
|
147
|
-
this.processDefinitionSelectionChanged(filteredProcessDefinitions.currentProcessDef);
|
|
148
|
-
this.processDefinitionInput.setValue(this.selectedProcessDef ? this.selectedProcessDef.name : '');
|
|
149
|
-
this.isProcessDefinitionsLoading = false;
|
|
150
|
-
}, (error) => {
|
|
151
|
-
this.isProcessDefinitionsLoading = false;
|
|
152
|
-
this.error.emit(error);
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
filterProcessDefinitionByName(definitionName) {
|
|
156
|
-
if (definitionName) {
|
|
157
|
-
const filteredProcessDef = this.processDefinitions.find((processDefinition) => processDefinition.name === definitionName);
|
|
158
|
-
if (filteredProcessDef) {
|
|
159
|
-
this.processDefinitionSelectionChanged(filteredProcessDef);
|
|
160
|
-
this.processDefinitionInput.setValue(this.selectedProcessDef ? this.selectedProcessDef.name : '');
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
loadApps() {
|
|
165
|
-
this.isAppsLoading = true;
|
|
166
|
-
this.appsProcessService
|
|
167
|
-
.getDeployedApplications()
|
|
168
|
-
.pipe(map((response) => {
|
|
169
|
-
const applications = response.filter((app) => app.id);
|
|
170
|
-
let currentApplication;
|
|
171
|
-
if (applications && applications.length === 1) {
|
|
172
|
-
currentApplication = applications[0];
|
|
173
|
-
}
|
|
174
|
-
const filteredApp = applications.find((app) => app.id === +this.appId);
|
|
175
|
-
if (filteredApp) {
|
|
176
|
-
currentApplication = filteredApp;
|
|
177
|
-
}
|
|
178
|
-
return { currentApplication, applications };
|
|
179
|
-
}))
|
|
180
|
-
.subscribe((filteredApps) => {
|
|
181
|
-
this.applications = filteredApps.applications;
|
|
182
|
-
this.selectedApplication = filteredApps.currentApplication;
|
|
183
|
-
this.applicationSelection.emit(this.selectedApplication);
|
|
184
|
-
this.toggleProcessNameAndDefinitionsDropdown();
|
|
185
|
-
this.isAppsLoading = false;
|
|
186
|
-
this.loadProcessDefinitionsBasedOnSelectedApp();
|
|
187
|
-
}, (err) => {
|
|
188
|
-
this.isAppsLoading = false;
|
|
189
|
-
this.error.emit(err);
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
loadProcessDefinitionsBasedOnSelectedApp() {
|
|
193
|
-
if (this.selectedApplication?.id) {
|
|
194
|
-
this.loadProcessDefinitions(this.selectedApplication ? this.selectedApplication.id : null);
|
|
195
|
-
}
|
|
196
|
-
else {
|
|
197
|
-
this.isProcessDefinitionsLoading = false;
|
|
198
|
-
this.resetProcessDefinitions();
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
onAppSelectionChange(selectedApplication) {
|
|
202
|
-
this.resetProcessDefinitions();
|
|
203
|
-
this.selectedApplication = selectedApplication.value;
|
|
204
|
-
this.applicationSelection.emit(this.selectedApplication);
|
|
205
|
-
this.toggleProcessNameAndDefinitionsDropdown();
|
|
206
|
-
this.loadProcessDefinitionsBasedOnSelectedApp();
|
|
207
|
-
}
|
|
208
|
-
hasApplications() {
|
|
209
|
-
return this.applications?.length > 0;
|
|
210
|
-
}
|
|
211
|
-
hasProcessDefinitions() {
|
|
212
|
-
return this.processDefinitions?.length > 0;
|
|
213
|
-
}
|
|
214
|
-
isProcessDefinitionSelected() {
|
|
215
|
-
return !!this.selectedProcessDef?.id;
|
|
216
|
-
}
|
|
217
|
-
isDropdownDisabled() {
|
|
218
|
-
return this.showSelectApplicationDropdown && !this.isAppSelected();
|
|
219
|
-
}
|
|
220
|
-
getAlfrescoRepositoryName() {
|
|
221
|
-
let alfrescoRepositoryName = this.appConfig.get(AppConfigValues.ALFRESCO_REPOSITORY_NAME);
|
|
222
|
-
if (!alfrescoRepositoryName) {
|
|
223
|
-
alfrescoRepositoryName = this.alfrescoRepositoryName;
|
|
224
|
-
}
|
|
225
|
-
return alfrescoRepositoryName + 'Alfresco';
|
|
226
|
-
}
|
|
227
|
-
moveNodeFromCStoPS() {
|
|
228
|
-
const accountIdentifier = this.getAlfrescoRepositoryName();
|
|
229
|
-
for (const key in this.values) {
|
|
230
|
-
if (Object.prototype.hasOwnProperty.call(this.values, key)) {
|
|
231
|
-
const currentValue = Array.isArray(this.values[key]) ? this.values[key] : [this.values[key]];
|
|
232
|
-
const contents = currentValue
|
|
233
|
-
.filter((value) => !!value?.isFile)
|
|
234
|
-
.map((content) => this.contentService.applyAlfrescoNode(content, null, accountIdentifier));
|
|
235
|
-
forkJoin(contents).subscribe((res) => {
|
|
236
|
-
this.movedNodeToPS = { [key]: [...res] };
|
|
237
|
-
});
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
startProcess(outcome) {
|
|
242
|
-
if (this.selectedProcessDef?.id && this.nameController.value) {
|
|
243
|
-
const formValues = this.startForm ? this.startForm.form.values : undefined;
|
|
244
|
-
this.processService.startProcess(this.selectedProcessDef.id, this.nameController.value, outcome, formValues, this.variables).subscribe((res) => {
|
|
245
|
-
this.name = '';
|
|
246
|
-
this.start.emit(res);
|
|
247
|
-
}, (err) => {
|
|
248
|
-
this.error.emit(err);
|
|
249
|
-
});
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
cancelStartProcess() {
|
|
253
|
-
this.cancel.emit();
|
|
254
|
-
}
|
|
255
|
-
hasStartForm() {
|
|
256
|
-
return this.selectedProcessDef?.hasStartForm;
|
|
257
|
-
}
|
|
258
|
-
isStartFormMissingOrValid() {
|
|
259
|
-
if (this.startForm) {
|
|
260
|
-
return this.startForm.form?.isValid;
|
|
261
|
-
}
|
|
262
|
-
else {
|
|
263
|
-
return true;
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
validateForm() {
|
|
267
|
-
return this.selectedProcessDef?.id && this.processNameInput.valid && this.isStartFormMissingOrValid();
|
|
268
|
-
}
|
|
269
|
-
onOutcomeClick(outcome) {
|
|
270
|
-
this.startProcess(outcome);
|
|
271
|
-
}
|
|
272
|
-
reset() {
|
|
273
|
-
this.resetSelectedProcessDefinition();
|
|
274
|
-
this.name = '';
|
|
275
|
-
if (this.startForm) {
|
|
276
|
-
this.startForm.data = {};
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
displayFn(process) {
|
|
280
|
-
if (process) {
|
|
281
|
-
let processName = process;
|
|
282
|
-
if (typeof process !== 'string') {
|
|
283
|
-
processName = process.name;
|
|
284
|
-
}
|
|
285
|
-
return processName;
|
|
286
|
-
}
|
|
287
|
-
return undefined;
|
|
288
|
-
}
|
|
289
|
-
displayDropdown(event) {
|
|
290
|
-
event.stopPropagation();
|
|
291
|
-
if (!this.inputAutocomplete.panelOpen) {
|
|
292
|
-
this.processDefinitionInput.setValue('');
|
|
293
|
-
this.inputAutocomplete.openPanel();
|
|
294
|
-
}
|
|
295
|
-
else {
|
|
296
|
-
this.inputAutocomplete.closePanel();
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
get nameController() {
|
|
300
|
-
return this.processNameInput;
|
|
301
|
-
}
|
|
302
|
-
get processDefinitionController() {
|
|
303
|
-
return this.processDefinitionInput;
|
|
304
|
-
}
|
|
305
|
-
processDefinitionSelectionChanged(processDefinition) {
|
|
306
|
-
if (processDefinition) {
|
|
307
|
-
const processInstanceDetails = { processDefinitionName: processDefinition.name };
|
|
308
|
-
const processName = this.formatProcessName(this.name, processInstanceDetails);
|
|
309
|
-
this.processNameInput.setValue(processName);
|
|
310
|
-
this.processNameInput.markAsDirty();
|
|
311
|
-
this.processNameInput.markAsTouched();
|
|
312
|
-
this.selectedProcessDef = processDefinition;
|
|
313
|
-
this.processDefinitionSelection.emit(this.selectedProcessDef);
|
|
314
|
-
}
|
|
315
|
-
else {
|
|
316
|
-
this.nameController.reset();
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
isLoading() {
|
|
320
|
-
return this.showSelectApplicationDropdown ? this.isAppsLoading : false;
|
|
321
|
-
}
|
|
322
|
-
isAppSelected() {
|
|
323
|
-
return !!this.selectedApplication?.id;
|
|
324
|
-
}
|
|
325
|
-
resetSelectedProcessDefinition() {
|
|
326
|
-
this.selectedProcessDef = undefined;
|
|
327
|
-
if (this.processDefinitionInput) {
|
|
328
|
-
this.processDefinitionInput.setValue('');
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
resetProcessDefinitions() {
|
|
332
|
-
this.processDefinitions = [];
|
|
333
|
-
this.resetSelectedProcessDefinition();
|
|
334
|
-
}
|
|
335
|
-
toggleProcessNameAndDefinitionsDropdown() {
|
|
336
|
-
if (!this.isAppSelected()) {
|
|
337
|
-
this.processDefinitionController.disable();
|
|
338
|
-
this.nameController.disable();
|
|
339
|
-
}
|
|
340
|
-
else {
|
|
341
|
-
this.processDefinitionController.enable();
|
|
342
|
-
this.nameController.enable();
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
_filter(value) {
|
|
346
|
-
if (value !== null && value !== undefined) {
|
|
347
|
-
const filterValue = value.toLowerCase();
|
|
348
|
-
const filteredProcess = this.processDefinitions.filter((option) => option.name.toLowerCase().includes(filterValue));
|
|
349
|
-
if (this.processFilterSelector) {
|
|
350
|
-
this.selectedProcessDef = this.getSelectedProcess(filterValue);
|
|
351
|
-
}
|
|
352
|
-
return filteredProcess;
|
|
353
|
-
}
|
|
354
|
-
return [];
|
|
355
|
-
}
|
|
356
|
-
formatProcessName(processNameFormat, processInstance) {
|
|
357
|
-
let processName = processNameFormat;
|
|
358
|
-
if (processName.match(DATE_TIME_IDENTIFIER_REG_EXP)) {
|
|
359
|
-
const presentDateTime = getTime(new Date());
|
|
360
|
-
processName = processName.replace(DATE_TIME_IDENTIFIER_REG_EXP, this.datePipe.transform(presentDateTime, 'medium'));
|
|
361
|
-
}
|
|
362
|
-
if (processName.match(PROCESS_DEFINITION_IDENTIFIER_REG_EXP)) {
|
|
363
|
-
const selectedProcessDefinitionName = processInstance ? processInstance.processDefinitionName : '';
|
|
364
|
-
processName = processName.replace(PROCESS_DEFINITION_IDENTIFIER_REG_EXP, selectedProcessDefinitionName);
|
|
365
|
-
}
|
|
366
|
-
return processName;
|
|
367
|
-
}
|
|
368
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StartProcessInstanceComponent, deps: [{ token: i1.ProcessService }, { token: i2.ActivitiContentService }, { token: i3.AppsProcessService }, { token: i4.AppConfigService }, { token: i4.LocalizedDatePipe }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
369
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: StartProcessInstanceComponent, isStandalone: true, selector: "adf-start-process", inputs: { appId: "appId", title: "title", processDefinitionName: "processDefinitionName", variables: "variables", values: "values", name: "name", showSelectProcessDropdown: "showSelectProcessDropdown", showSelectApplicationDropdown: "showSelectApplicationDropdown", processFilterSelector: "processFilterSelector" }, outputs: { start: "start", cancel: "cancel", error: "error", processDefinitionSelection: "processDefinitionSelection", applicationSelection: "applicationSelection" }, viewQueries: [{ propertyName: "startForm", first: true, predicate: ["startForm"], descendants: true }, { propertyName: "inputAutocomplete", first: true, predicate: MatAutocompleteTrigger, descendants: true }], usesOnChanges: true, ngImport: i0, template: "\n<ng-container *ngIf=\"isLoading(); then showLoadingTemplate; else showStartProcessTemplate\" />\n <ng-template #showLoadingTemplate>\n <mat-spinner class=\"adf-start-process-loading\" />\n </ng-template>\n<ng-template #showStartProcessTemplate>\n <ng-container *ngIf=\"hasApplications() || hasProcessDefinitions() ; else showEmptyTemplate\">\n <div class=\"adf-start-process\">\n <div class=\"adf-title\" *ngIf=\"title\">{{ title | translate}}</div>\n <div class=\"content\">\n <div class=\"adf-start-process-definition-container\">\n <mat-form-field *ngIf=\"showSelectApplicationDropdown\" [floatLabel]=\"'always'\" class=\"adf-start-process-app-list\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.SELECT_APPLICATION' | translate }}</mat-label>\n <mat-select\n placeholder=\"{{ 'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.SELECT_APPLICATION' | translate }}\"\n (selectionChange)=\"onAppSelectionChange($event)\"\n [(ngModel)]=\"selectedApplication\"\n class=\"adf-start-process-definition-select\"\n data-automation-id=\"adf-start-process-apps-drop-down\">\n <mat-option\n *ngFor=\"let application of applications\"\n [value]=\"application\"\n role=\"option\"\n [attr.data-automation-id]=\"'adf-start-process-apps-option-' + application.name\">\n {{ application.name }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field class=\"adf-process-input-container\" [floatLabel]=\"'always'\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.TYPE' | translate}}</mat-label>\n <input\n type=\"text\"\n matInput\n [formControl]=\"processDefinitionInput\"\n [matAutocomplete]=\"auto\"\n id=\"processDefinitionName\">\n <div class=\"adf-process-input-autocomplete\">\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n id=\"processDefinitionOptions\"\n [displayWith]=\"displayFn\">\n <mat-option *ngFor=\"let processDef of filteredProcessesDefinitions$ | async\" [value]=\"processDef.name\"\n (click)=\"processDefinitionSelectionChanged(processDef)\">\n {{ processDef.name }}\n </mat-option>\n </mat-autocomplete>\n <ng-container *ngIf=\"!isProcessDefinitionsLoading ; else showProcessDefLoadingTemplate\">\n <button\n class=\"adf-start-process-button\"\n id=\"adf-select-process-dropdown\"\n *ngIf=\"showSelectProcessDropdown\"\n mat-icon-button\n (click)=\"displayDropdown($event)\"\n [disabled]=\"isDropdownDisabled()\"\n [attr.aria-label]=\"'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.TYPE' | translate | uppercase\">\n <mat-icon>arrow_drop_down</mat-icon>\n </button>\n </ng-container>\n <ng-template #showProcessDefLoadingTemplate>\n <mat-spinner id=\"adf-select-process-spinner\" [diameter]=\"20\" />\n </ng-template>\n </div>\n </mat-form-field>\n </div>\n <mat-form-field class=\"adf-process-input-container adf-process-input-container-process-name\" [floatLabel]=\"'always'\">\n <mat-label>{{'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.NAME' | translate}}</mat-label>\n <input\n matInput\n [formControl]=\"processNameInput\"\n id=\"processName\"\n required/>\n <mat-error *ngIf=\"nameController.hasError('maxlength')\">\n {{ 'ADF_PROCESS_LIST.START_PROCESS.ERROR.MAXIMUM_LENGTH' | translate : { characters : maxProcessNameLength } }}\n </mat-error>\n <mat-error *ngIf=\"nameController.hasError('required')\">\n {{ 'ADF_PROCESS_LIST.START_PROCESS.ERROR.PROCESS_NAME_REQUIRED' | translate }}\n </mat-error>\n <mat-error *ngIf=\"nameController.hasError('pattern')\">\n {{ 'ADF_PROCESS_LIST.START_PROCESS.ERROR.SPACE_VALIDATOR' | translate }}\n </mat-error>\n </mat-form-field>\n\n <ng-container *ngIf=\"!isProcessDefinitionsLoading ; else showStartFormLoadingTemplate\">\n <ng-container *ngIf=\"isProcessDefinitionSelected() ; else emptyProcessDefTemplate\">\n <ng-container *ngIf=\"hasStartForm(); else noStartFormTemplate\">\n <adf-start-form\n #startForm\n [data]=\"movedNodeToPS\"\n [disableStartProcessButton]=\"processNameInput.invalid\"\n [processDefinitionId]=\"selectedProcessDef.id\"\n (outcomeClick)=\"onOutcomeClick($event)\"\n [showRefreshButton]=\"false\">\n <button\n class=\"adf-start-process-button\"\n adf-form-custom-button\n mat-button\n (click)=\"cancelStartProcess()\"\n id=\"cancel_process\">\n {{'ADF_PROCESS_LIST.START_PROCESS.FORM.ACTION.CANCEL'| translate | uppercase}}\n </button>\n </adf-start-form>\n </ng-container>\n <ng-template #noStartFormTemplate>\n <adf-empty-content\n class=\"adf-start-process-empty-template\"\n [icon]=\"'assessment'\"\n [title]=\"'ADF_PROCESS_LIST.START_PROCESS.NO_START_FORM' | translate\" />\n </ng-template>\n </ng-container>\n <ng-template #emptyProcessDefTemplate>\n <adf-empty-content class=\"adf-start-process-empty-template\"\n [icon]=\"'assessment'\"\n [title]=\"'ADF_PROCESS_LIST.START_PROCESS.NO_PROCESS_DEF_SELECTED' | translate\" />\n </ng-template>\n </ng-container>\n <ng-template #showStartFormLoadingTemplate>\n <mat-spinner class=\"adf-start-process-loading\" />\n </ng-template>\n </div>\n <div class=\"adf-start-process-content-actions\" *ngIf=\"!hasStartForm()\">\n <button\n class=\"adf-start-process-button\"\n mat-button\n *ngIf=\"!hasStartForm()\"\n (click)=\"cancelStartProcess()\"\n id=\"cancel_process\">\n {{'ADF_PROCESS_LIST.START_PROCESS.FORM.ACTION.CANCEL'| translate | uppercase}}\n </button>\n <button\n color=\"primary\"\n mat-button\n *ngIf=\"!hasStartForm()\"\n [disabled]=\"!validateForm()\"\n (click)=\"startProcess()\"\n data-automation-id=\"btn-start\"\n id=\"button-start\"\n class=\"btn-start adf-start-process-button\">\n {{'ADF_PROCESS_LIST.START_PROCESS.FORM.ACTION.START' | translate | uppercase}}\n </button>\n </div>\n </div>\n </ng-container>\n <ng-template #showEmptyTemplate>\n <adf-empty-content class=\"adf-start-process-empty-template\"\n [icon]=\"'assessment'\"\n [title]=\"'ADF_PROCESS_LIST.START_PROCESS.NO_PROCESS_DEFINITIONS' | translate\" />\n </ng-template>\n</ng-template>\n", styles: [".adf-start-process{width:96%;margin-left:auto;margin-right:auto;margin-top:10px}.adf-start-process mat-form-field{width:100%}.adf-start-process .mat-mdc-floating-label{color:var(--adf-theme-mat-grey-color-a200-dark)}.adf-start-process-content-actions{padding-bottom:16px;padding-right:16px;text-align:right}.adf-start-process .mat-mdc-button{width:auto;padding:0 16px;margin:0 8px;white-space:nowrap}.adf-title{padding-bottom:1.25em}.adf-process-input-container mat-form-field{width:100%}.adf-process-input-container-process-name{margin-top:16px}.adf-process-input-autocomplete{display:flex;padding-bottom:2px}.adf-process-input-autocomplete .adf-start-process-button{position:absolute;right:-14px;top:10px}.adf-process-input-autocomplete mat-spinner{position:absolute;right:-1px;top:0}.adf-start-form-container .mat-mdc-card-content{margin-bottom:100px}.adf-start-form-container .mat-mdc-card-header{display:none}.adf-start-form-container .adf-start-form-card:has(.adf-start-form-header){box-shadow:none;padding:0}.adf-start-form-actions:has(.adf-start-form-actions-button){text-align:right;padding-bottom:16px}.adf-start-form-actions:has(.adf-start-form-actions-button) button{text-wrap:nowrap}.adf-start-process-definition-container{display:flex;flex-direction:row;justify-content:space-around;align-items:baseline}.adf-start-process-definition-container .adf-start-process-definition-select .mat-mdc-select-arrow-wrapper{transform:none}.adf-start-process-definition-container .adf-start-process-definition-select .mat-mdc-select-arrow-wrapper svg{fill:currentcolor}.adf-start-process-app-list{margin-right:10px}@media (max-width: 599.9px){.adf-start-process{width:90%;margin-left:auto;margin-right:auto}}.adf-start-process-loading{margin-left:calc((100% - 100px)/2);margin-right:calc((100% - 100px)/2)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.UpperCasePipe, name: "uppercase" }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i6.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i8.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i9.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i10.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i10.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i11.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i11.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i12.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i12.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i13.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i14.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: EmptyContentComponent, selector: "adf-empty-content", inputs: ["icon", "title", "subtitle"] }, { kind: "component", type: StartFormComponent, selector: "adf-start-form", inputs: ["processDefinitionId", "processId", "showOutcomeButtons", "showRefreshButton", "readOnlyForm"], outputs: ["outcomeClick", "formContentClicked"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
370
|
-
}
|
|
371
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StartProcessInstanceComponent, decorators: [{
|
|
372
|
-
type: Component,
|
|
373
|
-
args: [{ selector: 'adf-start-process', standalone: true, imports: [
|
|
374
|
-
CommonModule,
|
|
375
|
-
MatProgressSpinnerModule,
|
|
376
|
-
TranslatePipe,
|
|
377
|
-
MatFormFieldModule,
|
|
378
|
-
MatSelectModule,
|
|
379
|
-
FormsModule,
|
|
380
|
-
ReactiveFormsModule,
|
|
381
|
-
MatAutocompleteModule,
|
|
382
|
-
MatButtonModule,
|
|
383
|
-
MatIconModule,
|
|
384
|
-
MatInputModule,
|
|
385
|
-
EmptyContentComponent,
|
|
386
|
-
StartFormComponent
|
|
387
|
-
], encapsulation: ViewEncapsulation.None, template: "\n<ng-container *ngIf=\"isLoading(); then showLoadingTemplate; else showStartProcessTemplate\" />\n <ng-template #showLoadingTemplate>\n <mat-spinner class=\"adf-start-process-loading\" />\n </ng-template>\n<ng-template #showStartProcessTemplate>\n <ng-container *ngIf=\"hasApplications() || hasProcessDefinitions() ; else showEmptyTemplate\">\n <div class=\"adf-start-process\">\n <div class=\"adf-title\" *ngIf=\"title\">{{ title | translate}}</div>\n <div class=\"content\">\n <div class=\"adf-start-process-definition-container\">\n <mat-form-field *ngIf=\"showSelectApplicationDropdown\" [floatLabel]=\"'always'\" class=\"adf-start-process-app-list\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.SELECT_APPLICATION' | translate }}</mat-label>\n <mat-select\n placeholder=\"{{ 'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.SELECT_APPLICATION' | translate }}\"\n (selectionChange)=\"onAppSelectionChange($event)\"\n [(ngModel)]=\"selectedApplication\"\n class=\"adf-start-process-definition-select\"\n data-automation-id=\"adf-start-process-apps-drop-down\">\n <mat-option\n *ngFor=\"let application of applications\"\n [value]=\"application\"\n role=\"option\"\n [attr.data-automation-id]=\"'adf-start-process-apps-option-' + application.name\">\n {{ application.name }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field class=\"adf-process-input-container\" [floatLabel]=\"'always'\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.TYPE' | translate}}</mat-label>\n <input\n type=\"text\"\n matInput\n [formControl]=\"processDefinitionInput\"\n [matAutocomplete]=\"auto\"\n id=\"processDefinitionName\">\n <div class=\"adf-process-input-autocomplete\">\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n id=\"processDefinitionOptions\"\n [displayWith]=\"displayFn\">\n <mat-option *ngFor=\"let processDef of filteredProcessesDefinitions$ | async\" [value]=\"processDef.name\"\n (click)=\"processDefinitionSelectionChanged(processDef)\">\n {{ processDef.name }}\n </mat-option>\n </mat-autocomplete>\n <ng-container *ngIf=\"!isProcessDefinitionsLoading ; else showProcessDefLoadingTemplate\">\n <button\n class=\"adf-start-process-button\"\n id=\"adf-select-process-dropdown\"\n *ngIf=\"showSelectProcessDropdown\"\n mat-icon-button\n (click)=\"displayDropdown($event)\"\n [disabled]=\"isDropdownDisabled()\"\n [attr.aria-label]=\"'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.TYPE' | translate | uppercase\">\n <mat-icon>arrow_drop_down</mat-icon>\n </button>\n </ng-container>\n <ng-template #showProcessDefLoadingTemplate>\n <mat-spinner id=\"adf-select-process-spinner\" [diameter]=\"20\" />\n </ng-template>\n </div>\n </mat-form-field>\n </div>\n <mat-form-field class=\"adf-process-input-container adf-process-input-container-process-name\" [floatLabel]=\"'always'\">\n <mat-label>{{'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.NAME' | translate}}</mat-label>\n <input\n matInput\n [formControl]=\"processNameInput\"\n id=\"processName\"\n required/>\n <mat-error *ngIf=\"nameController.hasError('maxlength')\">\n {{ 'ADF_PROCESS_LIST.START_PROCESS.ERROR.MAXIMUM_LENGTH' | translate : { characters : maxProcessNameLength } }}\n </mat-error>\n <mat-error *ngIf=\"nameController.hasError('required')\">\n {{ 'ADF_PROCESS_LIST.START_PROCESS.ERROR.PROCESS_NAME_REQUIRED' | translate }}\n </mat-error>\n <mat-error *ngIf=\"nameController.hasError('pattern')\">\n {{ 'ADF_PROCESS_LIST.START_PROCESS.ERROR.SPACE_VALIDATOR' | translate }}\n </mat-error>\n </mat-form-field>\n\n <ng-container *ngIf=\"!isProcessDefinitionsLoading ; else showStartFormLoadingTemplate\">\n <ng-container *ngIf=\"isProcessDefinitionSelected() ; else emptyProcessDefTemplate\">\n <ng-container *ngIf=\"hasStartForm(); else noStartFormTemplate\">\n <adf-start-form\n #startForm\n [data]=\"movedNodeToPS\"\n [disableStartProcessButton]=\"processNameInput.invalid\"\n [processDefinitionId]=\"selectedProcessDef.id\"\n (outcomeClick)=\"onOutcomeClick($event)\"\n [showRefreshButton]=\"false\">\n <button\n class=\"adf-start-process-button\"\n adf-form-custom-button\n mat-button\n (click)=\"cancelStartProcess()\"\n id=\"cancel_process\">\n {{'ADF_PROCESS_LIST.START_PROCESS.FORM.ACTION.CANCEL'| translate | uppercase}}\n </button>\n </adf-start-form>\n </ng-container>\n <ng-template #noStartFormTemplate>\n <adf-empty-content\n class=\"adf-start-process-empty-template\"\n [icon]=\"'assessment'\"\n [title]=\"'ADF_PROCESS_LIST.START_PROCESS.NO_START_FORM' | translate\" />\n </ng-template>\n </ng-container>\n <ng-template #emptyProcessDefTemplate>\n <adf-empty-content class=\"adf-start-process-empty-template\"\n [icon]=\"'assessment'\"\n [title]=\"'ADF_PROCESS_LIST.START_PROCESS.NO_PROCESS_DEF_SELECTED' | translate\" />\n </ng-template>\n </ng-container>\n <ng-template #showStartFormLoadingTemplate>\n <mat-spinner class=\"adf-start-process-loading\" />\n </ng-template>\n </div>\n <div class=\"adf-start-process-content-actions\" *ngIf=\"!hasStartForm()\">\n <button\n class=\"adf-start-process-button\"\n mat-button\n *ngIf=\"!hasStartForm()\"\n (click)=\"cancelStartProcess()\"\n id=\"cancel_process\">\n {{'ADF_PROCESS_LIST.START_PROCESS.FORM.ACTION.CANCEL'| translate | uppercase}}\n </button>\n <button\n color=\"primary\"\n mat-button\n *ngIf=\"!hasStartForm()\"\n [disabled]=\"!validateForm()\"\n (click)=\"startProcess()\"\n data-automation-id=\"btn-start\"\n id=\"button-start\"\n class=\"btn-start adf-start-process-button\">\n {{'ADF_PROCESS_LIST.START_PROCESS.FORM.ACTION.START' | translate | uppercase}}\n </button>\n </div>\n </div>\n </ng-container>\n <ng-template #showEmptyTemplate>\n <adf-empty-content class=\"adf-start-process-empty-template\"\n [icon]=\"'assessment'\"\n [title]=\"'ADF_PROCESS_LIST.START_PROCESS.NO_PROCESS_DEFINITIONS' | translate\" />\n </ng-template>\n</ng-template>\n", styles: [".adf-start-process{width:96%;margin-left:auto;margin-right:auto;margin-top:10px}.adf-start-process mat-form-field{width:100%}.adf-start-process .mat-mdc-floating-label{color:var(--adf-theme-mat-grey-color-a200-dark)}.adf-start-process-content-actions{padding-bottom:16px;padding-right:16px;text-align:right}.adf-start-process .mat-mdc-button{width:auto;padding:0 16px;margin:0 8px;white-space:nowrap}.adf-title{padding-bottom:1.25em}.adf-process-input-container mat-form-field{width:100%}.adf-process-input-container-process-name{margin-top:16px}.adf-process-input-autocomplete{display:flex;padding-bottom:2px}.adf-process-input-autocomplete .adf-start-process-button{position:absolute;right:-14px;top:10px}.adf-process-input-autocomplete mat-spinner{position:absolute;right:-1px;top:0}.adf-start-form-container .mat-mdc-card-content{margin-bottom:100px}.adf-start-form-container .mat-mdc-card-header{display:none}.adf-start-form-container .adf-start-form-card:has(.adf-start-form-header){box-shadow:none;padding:0}.adf-start-form-actions:has(.adf-start-form-actions-button){text-align:right;padding-bottom:16px}.adf-start-form-actions:has(.adf-start-form-actions-button) button{text-wrap:nowrap}.adf-start-process-definition-container{display:flex;flex-direction:row;justify-content:space-around;align-items:baseline}.adf-start-process-definition-container .adf-start-process-definition-select .mat-mdc-select-arrow-wrapper{transform:none}.adf-start-process-definition-container .adf-start-process-definition-select .mat-mdc-select-arrow-wrapper svg{fill:currentcolor}.adf-start-process-app-list{margin-right:10px}@media (max-width: 599.9px){.adf-start-process{width:90%;margin-left:auto;margin-right:auto}}.adf-start-process-loading{margin-left:calc((100% - 100px)/2);margin-right:calc((100% - 100px)/2)}\n"] }]
|
|
388
|
-
}], ctorParameters: () => [{ type: i1.ProcessService }, { type: i2.ActivitiContentService }, { type: i3.AppsProcessService }, { type: i4.AppConfigService }, { type: i4.LocalizedDatePipe }], propDecorators: { appId: [{
|
|
389
|
-
type: Input
|
|
390
|
-
}], title: [{
|
|
391
|
-
type: Input
|
|
392
|
-
}], processDefinitionName: [{
|
|
393
|
-
type: Input
|
|
394
|
-
}], variables: [{
|
|
395
|
-
type: Input
|
|
396
|
-
}], values: [{
|
|
397
|
-
type: Input
|
|
398
|
-
}], name: [{
|
|
399
|
-
type: Input
|
|
400
|
-
}], showSelectProcessDropdown: [{
|
|
401
|
-
type: Input
|
|
402
|
-
}], showSelectApplicationDropdown: [{
|
|
403
|
-
type: Input
|
|
404
|
-
}], processFilterSelector: [{
|
|
405
|
-
type: Input
|
|
406
|
-
}], start: [{
|
|
407
|
-
type: Output
|
|
408
|
-
}], cancel: [{
|
|
409
|
-
type: Output
|
|
410
|
-
}], error: [{
|
|
411
|
-
type: Output
|
|
412
|
-
}], processDefinitionSelection: [{
|
|
413
|
-
type: Output
|
|
414
|
-
}], applicationSelection: [{
|
|
415
|
-
type: Output
|
|
416
|
-
}], startForm: [{
|
|
417
|
-
type: ViewChild,
|
|
418
|
-
args: ['startForm']
|
|
419
|
-
}], inputAutocomplete: [{
|
|
420
|
-
type: ViewChild,
|
|
421
|
-
args: [MatAutocompleteTrigger]
|
|
422
|
-
}] } });
|
|
423
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnQtcHJvY2Vzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvcHJvY2Vzcy1zZXJ2aWNlcy9zcmMvbGliL3Byb2Nlc3MtbGlzdC9jb21wb25lbnRzL3N0YXJ0LXByb2Nlc3Mvc3RhcnQtcHJvY2Vzcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvcHJvY2Vzcy1zZXJ2aWNlcy9zcmMvbGliL3Byb2Nlc3MtbGlzdC9jb21wb25lbnRzL3N0YXJ0LXByb2Nlc3Mvc3RhcnQtcHJvY2Vzcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxFQUNULGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLHFCQUFxQixFQUFjLGlCQUFpQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDN0gsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDNUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBbUIsV0FBVyxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ILE9BQU8sRUFBRSxRQUFRLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDNUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQy9GLE9BQU8sRUFBbUIsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBU25ELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbkMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQUVoRSxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDdkIsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLE1BQU0sQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEUsTUFBTSxxQ0FBcUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLENBQUMsQ0FBQztBQXdCdEYsTUFBTSxPQUFPLDZCQUE2QjtJQXFGdEMsWUFDWSxjQUE4QixFQUM5QixjQUFzQyxFQUN0QyxrQkFBc0MsRUFDdEMsU0FBMkIsRUFDM0IsUUFBMkI7UUFKM0IsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLG1CQUFjLEdBQWQsY0FBYyxDQUF3QjtRQUN0Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLGFBQVEsR0FBUixRQUFRLENBQW1CO1FBL0R2Qyw2Q0FBNkM7UUFFN0MsU0FBSSxHQUFZLEVBQUUsQ0FBQztRQUVuQixtREFBbUQ7UUFFbkQsOEJBQXlCLEdBQUcsSUFBSSxDQUFDO1FBRWpDLG1EQUFtRDtRQUVuRCxrQ0FBNkIsR0FBSSxLQUFLLENBQUM7UUFFdkMsK0RBQStEO1FBRS9ELDBCQUFxQixHQUFJLElBQUksQ0FBQztRQUU5Qix1Q0FBdUM7UUFFdkMsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFpQyxDQUFDO1FBRTFELDRDQUE0QztRQUU1QyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUVsQyxvQ0FBb0M7UUFFcEMsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFaEMseURBQXlEO1FBRXpELCtCQUEwQixHQUFHLElBQUksWUFBWSxFQUFtQyxDQUFDO1FBRWpGLGtEQUFrRDtRQUVsRCx5QkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBK0IsQ0FBQztRQVF2RSx1QkFBa0IsR0FBc0MsRUFBRSxDQUFDO1FBSzNELHlCQUFvQixHQUFXLFVBQVUsQ0FBQztRQUUxQyxpQkFBWSxHQUFrQyxFQUFFLENBQUM7UUFHakQsZ0NBQTJCLEdBQUcsSUFBSSxDQUFDO1FBQ25DLGtCQUFhLEdBQUcsSUFBSSxDQUFDO1FBR0osZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQVE5QyxDQUFDO0lBRUosUUFBUTtRQUNKLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLGtCQUFrQixDQUFDLEVBQUUsRUFBRTtZQUMvQyxVQUFVLENBQUMsUUFBUTtZQUNuQixVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztZQUMvQyxVQUFVLENBQUMsT0FBTyxDQUFDLHlCQUF5QixDQUFDO1NBQ2hELENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFFdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFdEIsSUFBSSxDQUFDLDZCQUE2QixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUM5RSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFDbkMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUN0QyxDQUFDO1FBRUYsSUFBSSxDQUFDLGNBQWMsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ2pFLElBQUksUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxrQkFBa0IsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxZQUFZLGtCQUFrQixDQUFDLEVBQUUsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNqRyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQzlCLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzlCLENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0IsSUFBSSxLQUFLLEVBQUUsWUFBWSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUVELE1BQU0scUJBQXFCLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDL0QsSUFBSSxxQkFBcUIsRUFBRSxZQUFZLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsNkJBQTZCLENBQUMscUJBQXFCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDM0UsQ0FBQztJQUNMLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxlQUF1QjtRQUM5QyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssZUFBZSxDQUFDLENBQUM7SUFDckcsQ0FBQztJQUVPLElBQUksQ0FBQyxLQUFjO1FBQ3ZCLElBQUksSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3BCLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7SUFDTCxDQUFDO0lBRUQsc0JBQXNCLENBQUMsS0FBYTtRQUNoQyxJQUFJLENBQUMsMkJBQTJCLEdBQUcsSUFBSSxDQUFDO1FBQ3hDLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxDQUFDO1FBRXRDLElBQUksQ0FBQyxjQUFjO2FBQ2QscUJBQXFCLENBQUMsS0FBSyxDQUFDO2FBQzVCLElBQUksQ0FDRCxHQUFHLENBQUMsQ0FBQyxnQ0FBZ0MsRUFBRSxFQUFFO1lBQ3JDLElBQUksaUJBQWtELENBQUM7WUFFdkQsSUFBSSxnQ0FBZ0MsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2hELGlCQUFpQixHQUFHLGdDQUFnQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVELENBQUM7WUFFRCxJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2dCQUM3QixNQUFNLHlCQUF5QixHQUFHLGdDQUFnQyxDQUFDLElBQUksQ0FDbkUsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxxQkFBcUIsQ0FDL0UsQ0FBQztnQkFDRixJQUFJLHlCQUF5QixFQUFFLENBQUM7b0JBQzVCLGlCQUFpQixHQUFHLHlCQUF5QixDQUFDO2dCQUNsRCxDQUFDO1lBQ0wsQ0FBQztZQUVELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxnQ0FBZ0MsRUFBRSxDQUFDO1FBQ25FLENBQUMsQ0FBQyxDQUNMO2FBQ0EsU0FBUyxDQUNOLENBQUMsMEJBQTBCLEVBQUUsRUFBRTtZQUMzQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsMEJBQTBCLENBQUMsZ0NBQWdDLENBQUM7WUFDdEYsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLDBCQUEwQixDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDckYsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xHLElBQUksQ0FBQywyQkFBMkIsR0FBRyxLQUFLLENBQUM7UUFDN0MsQ0FBQyxFQUNELENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDTixJQUFJLENBQUMsMkJBQTJCLEdBQUcsS0FBSyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FDSixDQUFDO0lBQ1YsQ0FBQztJQUVPLDZCQUE2QixDQUFDLGNBQXNCO1FBQ3hELElBQUksY0FBYyxFQUFFLENBQUM7WUFDakIsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLElBQUksS0FBSyxjQUFjLENBQUMsQ0FBQztZQUUxSCxJQUFJLGtCQUFrQixFQUFFLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2dCQUMzRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdEcsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRU8sUUFBUTtRQUNaLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxrQkFBa0I7YUFDbEIsdUJBQXVCLEVBQUU7YUFDekIsSUFBSSxDQUNELEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ2IsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRXRELElBQUksa0JBQStDLENBQUM7WUFFcEQsSUFBSSxZQUFZLElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDNUMsa0JBQWtCLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLENBQUM7WUFFRCxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRXZFLElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQ2Qsa0JBQWtCLEdBQUcsV0FBVyxDQUFDO1lBQ3JDLENBQUM7WUFFRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQ0w7YUFDQSxTQUFTLENBQ04sQ0FBQyxZQUFZLEVBQUUsRUFBRTtZQUNiLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQztZQUM5QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsWUFBWSxDQUFDLGtCQUFrQixDQUFDO1lBQzNELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLHVDQUF1QyxFQUFFLENBQUM7WUFDL0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDM0IsSUFBSSxDQUFDLHdDQUF3QyxFQUFFLENBQUM7UUFDcEQsQ0FBQyxFQUNELENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDSixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QixDQUFDLENBQ0osQ0FBQztJQUNWLENBQUM7SUFFTyx3Q0FBd0M7UUFDNUMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0YsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsMkJBQTJCLEdBQUcsS0FBSyxDQUFDO1lBQ3pDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQ25DLENBQUM7SUFDTCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsbUJBQW9DO1FBQ3JELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUM7UUFDckQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsdUNBQXVDLEVBQUUsQ0FBQztRQUMvQyxJQUFJLENBQUMsd0NBQXdDLEVBQUUsQ0FBQztJQUNwRCxDQUFDO0lBRUQsZUFBZTtRQUNYLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxxQkFBcUI7UUFDakIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsMkJBQTJCO1FBQ3ZCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELGtCQUFrQjtRQUNkLE9BQU8sSUFBSSxDQUFDLDZCQUE2QixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZFLENBQUM7SUFFRCx5QkFBeUI7UUFDckIsSUFBSSxzQkFBc0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBUyxlQUFlLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUNsRyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUMxQixzQkFBc0IsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUM7UUFDekQsQ0FBQztRQUNELE9BQU8sc0JBQXNCLEdBQUcsVUFBVSxDQUFDO0lBQy9DLENBQUM7SUFFRCxrQkFBa0I7UUFDZCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBRTNELEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzVCLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDekQsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUM3RixNQUFNLFFBQVEsR0FBRyxZQUFZO3FCQUN4QixNQUFNLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDO3FCQUN2QyxHQUFHLENBQUMsQ0FBQyxPQUFhLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JHLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFtQyxFQUFFLEVBQUU7b0JBQ2pFLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM3QyxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVELFlBQVksQ0FBQyxPQUFnQjtRQUN6QixJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMzRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUMzRSxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FDbEksQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDSixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDZixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN6QixDQUFDLEVBQ0QsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDSixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN6QixDQUFDLENBQ0osQ0FBQztRQUNOLENBQUM7SUFDTCxDQUFDO0lBRUQsa0JBQWtCO1FBQ2QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsWUFBWTtRQUNSLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixFQUFFLFlBQVksQ0FBQztJQUNqRCxDQUFDO0lBRU8seUJBQXlCO1FBQzdCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDO1FBQ3hDLENBQUM7YUFBTSxDQUFDO1lBQ0osT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztJQUNMLENBQUM7SUFFRCxZQUFZO1FBQ1IsT0FBTyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7SUFDMUcsQ0FBQztJQUVELGNBQWMsQ0FBQyxPQUFlO1FBQzFCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELEtBQUs7UUFDRCxJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNmLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUM3QixDQUFDO0lBQ0wsQ0FBQztJQUVELFNBQVMsQ0FBQyxPQUFZO1FBQ2xCLElBQUksT0FBTyxFQUFFLENBQUM7WUFDVixJQUFJLFdBQVcsR0FBRyxPQUFPLENBQUM7WUFDMUIsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDOUIsV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDL0IsQ0FBQztZQUNELE9BQU8sV0FBVyxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQVk7UUFDeEIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdkMsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDeEMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDZCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBSSwyQkFBMkI7UUFDM0IsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUM7SUFDdkMsQ0FBQztJQUVELGlDQUFpQyxDQUFDLGlCQUFrRDtRQUNoRixJQUFJLGlCQUFpQixFQUFFLENBQUM7WUFDcEIsTUFBTSxzQkFBc0IsR0FBa0MsRUFBRSxxQkFBcUIsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNoSCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1lBQzlFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsaUJBQWlCLENBQUM7WUFDNUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNsRSxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEMsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFTO1FBQ0wsT0FBTyxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUMzRSxDQUFDO0lBRU8sYUFBYTtRQUNqQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFTyw4QkFBOEI7UUFDbEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFNBQVMsQ0FBQztRQUNwQyxJQUFJLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0MsQ0FBQztJQUNMLENBQUM7SUFFTyx1QkFBdUI7UUFDM0IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRU8sdUNBQXVDO1FBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsMkJBQTJCLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsQyxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2pDLENBQUM7SUFDTCxDQUFDO0lBRU8sT0FBTyxDQUFDLEtBQWE7UUFDekIsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN4QyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDeEMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUVwSCxJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2dCQUM3QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ25FLENBQUM7WUFDRCxPQUFPLGVBQWUsQ0FBQztRQUMzQixDQUFDO1FBRUQsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRU8saUJBQWlCLENBQUMsaUJBQXlCLEVBQUUsZUFBK0M7UUFDaEcsSUFBSSxXQUFXLEdBQUcsaUJBQWlCLENBQUM7UUFDcEMsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLDRCQUE0QixDQUFDLEVBQUUsQ0FBQztZQUNsRCxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLFdBQVcsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLDRCQUE0QixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLGVBQWUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3hILENBQUM7UUFFRCxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMscUNBQXFDLENBQUMsRUFBRSxDQUFDO1lBQzNELE1BQU0sNkJBQTZCLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNuRyxXQUFXLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxxQ0FBcUMsRUFBRSw2QkFBNkIsQ0FBQyxDQUFDO1FBQzVHLENBQUM7UUFDRCxPQUFPLFdBQVcsQ0FBQztJQUN2QixDQUFDOytHQXJiUSw2QkFBNkI7bUdBQTdCLDZCQUE2Qiw0ckJBa0UzQixzQkFBc0IscUVDdEpyQyxzK1JBb0pBLHkwRERsRlEsWUFBWSxpWEFDWix3QkFBd0IsOE5BQ3hCLGFBQWEsaURBQ2Isa0JBQWtCLHVZQUNsQixlQUFlLG1yQkFDZixXQUFXLCswQkFDWCxtQkFBbUIsa05BQ25CLHFCQUFxQix5ckJBQ3JCLGVBQWUsMFVBQ2YsYUFBYSxvTEFDYixjQUFjLDRXQUNkLHFCQUFxQixxR0FDckIsa0JBQWtCOzs0RkFNYiw2QkFBNkI7a0JBdEJ6QyxTQUFTOytCQUNJLG1CQUFtQixjQUNqQixJQUFJLFdBQ1A7d0JBQ0wsWUFBWTt3QkFDWix3QkFBd0I7d0JBQ3hCLGFBQWE7d0JBQ2Isa0JBQWtCO3dCQUNsQixlQUFlO3dCQUNmLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixxQkFBcUI7d0JBQ3JCLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixjQUFjO3dCQUNkLHFCQUFxQjt3QkFDckIsa0JBQWtCO3FCQUNyQixpQkFHYyxpQkFBaUIsQ0FBQyxJQUFJO3dOQVFyQyxLQUFLO3NCQURKLEtBQUs7Z0JBS04sS0FBSztzQkFESixLQUFLO2dCQUtOLHFCQUFxQjtzQkFEcEIsS0FBSztnQkFRTixTQUFTO3NCQURSLEtBQUs7Z0JBS04sTUFBTTtzQkFETCxLQUFLO2dCQUtOLElBQUk7c0JBREgsS0FBSztnQkFLTix5QkFBeUI7c0JBRHhCLEtBQUs7Z0JBS04sNkJBQTZCO3NCQUQ1QixLQUFLO2dCQUtOLHFCQUFxQjtzQkFEcEIsS0FBSztnQkFLTixLQUFLO3NCQURKLE1BQU07Z0JBS1AsTUFBTTtzQkFETCxNQUFNO2dCQUtQLEtBQUs7c0JBREosTUFBTTtnQkFLUCwwQkFBMEI7c0JBRHpCLE1BQU07Z0JBS1Asb0JBQW9CO3NCQURuQixNQUFNO2dCQUlQLFNBQVM7c0JBRFIsU0FBUzt1QkFBQyxXQUFXO2dCQUl0QixpQkFBaUI7c0JBRGhCLFNBQVM7dUJBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBEZXN0cm95UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBcHBDb25maWdTZXJ2aWNlLCBBcHBDb25maWdWYWx1ZXMsIEVtcHR5Q29udGVudENvbXBvbmVudCwgRm9ybVZhbHVlcywgTG9jYWxpemVkRGF0ZVBpcGUgfSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuaW1wb3J0IHsgQXBwc1Byb2Nlc3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXBwcy1wcm9jZXNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJvY2Vzc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wcm9jZXNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVW50eXBlZEZvcm1Db250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZm9ya0pvaW4sIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZU1vZHVsZSwgTWF0QXV0b2NvbXBsZXRlVHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XG5pbXBvcnQgeyBNYXRTZWxlY3RDaGFuZ2UsIE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBTdGFydEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9mb3JtJztcbmltcG9ydCB7XG4gICAgQXBwRGVmaW5pdGlvblJlcHJlc2VudGF0aW9uLFxuICAgIE5vZGUsXG4gICAgUHJvY2Vzc0RlZmluaXRpb25SZXByZXNlbnRhdGlvbixcbiAgICBQcm9jZXNzSW5zdGFuY2VSZXByZXNlbnRhdGlvbixcbiAgICBSZWxhdGVkQ29udGVudFJlcHJlc2VudGF0aW9uLFxuICAgIFJlc3RWYXJpYWJsZVxufSBmcm9tICdAYWxmcmVzY28vanMtYXBpJztcbmltcG9ydCB7IEFjdGl2aXRpQ29udGVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9mb3JtL3NlcnZpY2VzL2FjdGl2aXRpLWFsZnJlc2NvLnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0VGltZSB9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG5jb25zdCBNQVhfTEVOR1RIID0gMjU1O1xuY29uc3QgREFURV9USU1FX0lERU5USUZJRVJfUkVHX0VYUCA9IG5ldyBSZWdFeHAoJyV7ZGF0ZXRpbWV9JywgJ2knKTtcbmNvbnN0IFBST0NFU1NfREVGSU5JVElPTl9JREVOVElGSUVSX1JFR19FWFAgPSBuZXcgUmVnRXhwKCcle3Byb2Nlc3NkZWZpbml0aW9ufScsICdpJyk7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWRmLXN0YXJ0LXByb2Nlc3MnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcbiAgICAgICAgVHJhbnNsYXRlUGlwZSxcbiAgICAgICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgICAgICBNYXRTZWxlY3RNb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgICAgICBNYXRBdXRvY29tcGxldGVNb2R1bGUsXG4gICAgICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICAgICAgTWF0SWNvbk1vZHVsZSxcbiAgICAgICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgICAgIEVtcHR5Q29udGVudENvbXBvbmVudCxcbiAgICAgICAgU3RhcnRGb3JtQ29tcG9uZW50XG4gICAgXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc3RhcnQtcHJvY2Vzcy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc3RhcnQtcHJvY2Vzcy5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgU3RhcnRQcm9jZXNzSW5zdGFuY2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCB7XG4gICAgLyoqXG4gICAgICogTGltaXQgdGhlIGxpc3Qgb2YgcHJvY2Vzc2VzIHRoYXQgY2FuIGJlIHN0YXJ0ZWQgdG8gdGhvc2VcbiAgICAgKiBjb250YWluZWQgaW4gdGhlIHNwZWNpZmllZCBhcHAuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBhcHBJZD86IG51bWJlcjtcblxuICAgIC8qKiBEZWZpbmUgdGhlIGhlYWRlciBvZiB0aGUgY29tcG9uZW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGl0bGU/OiBzdHJpbmc7XG5cbiAgICAvKiogRGVmaW5pdGlvbiBuYW1lIG9mIHRoZSBwcm9jZXNzIHRvIHN0YXJ0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHJvY2Vzc0RlZmluaXRpb25OYW1lPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVmFyaWFibGVzIGluIHRoZSBpbnB1dCB0byB0aGUgcHJvY2Vzc1xuICAgICAqIFtSZXN0VmFyaWFibGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9BbGZyZXNjby9hbGZyZXNjby1qcy1hcGkvdHJlZS9tYXN0ZXIvc3JjL2FsZnJlc2NvLWFjdGl2aXRpLXJlc3QtYXBpL2RvY3MvUmVzdFZhcmlhYmxlLm1kKS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHZhcmlhYmxlczogUmVzdFZhcmlhYmxlW107XG5cbiAgICAvKiogUGFyYW1ldGVyIHRvIHBhc3MgZm9ybSBmaWVsZCB2YWx1ZXMgaW4gdGhlIHN0YXJ0IGZvcm0gaWYgb25lIGlzIGFzc29jaWF0ZWQuICovXG4gICAgQElucHV0KClcbiAgICB2YWx1ZXM6IEZvcm1WYWx1ZXM7XG5cbiAgICAvKiogTmFtZSB0byBhc3NpZ24gdG8gdGhlIGN1cnJlbnQgcHJvY2Vzcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIG5hbWU/OiBzdHJpbmcgPSAnJztcblxuICAgIC8qKiBIaWRlIG9yIHNob3cgdGhlIHByb2Nlc3Mgc2VsZWN0aW9uIGRyb3Bkb3duLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd1NlbGVjdFByb2Nlc3NEcm9wZG93biA9IHRydWU7XG5cbiAgICAvKiogSGlkZSBvciBzaG93IGFwcGxpY2F0aW9uIHNlbGVjdGlvbiBkcm9wZG93bi4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dTZWxlY3RBcHBsaWNhdGlvbkRyb3Bkb3duPyA9IGZhbHNlO1xuXG4gICAgLyoqIFBhcmFtZXRlciB0byBlbmFibGUgc2VsZWN0aW9uIG9mIHByb2Nlc3Mgd2hlbiBmaWx0ZXJpbmcuICovXG4gICAgQElucHV0KClcbiAgICBwcm9jZXNzRmlsdGVyU2VsZWN0b3I/ID0gdHJ1ZTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIHByb2Nlc3Mgc3RhcnRzLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHN0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjxQcm9jZXNzSW5zdGFuY2VSZXByZXNlbnRhdGlvbj4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIHByb2Nlc3MgaXMgY2FuY2VsZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgY2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBhbiBlcnJvciBvY2N1cnMuICovXG4gICAgQE91dHB1dCgpXG4gICAgZXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gcHJvY2VzcyBkZWZpbml0aW9uIHNlbGVjdGlvbiBjaGFuZ2VzLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHByb2Nlc3NEZWZpbml0aW9uU2VsZWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxQcm9jZXNzRGVmaW5pdGlvblJlcHJlc2VudGF0aW9uPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBhcHBsaWNhdGlvbiBzZWxlY3Rpb24gY2hhbmdlcy4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBhcHBsaWNhdGlvblNlbGVjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8QXBwRGVmaW5pdGlvblJlcHJlc2VudGF0aW9uPigpO1xuXG4gICAgQFZpZXdDaGlsZCgnc3RhcnRGb3JtJylcbiAgICBzdGFydEZvcm06IFN0YXJ0Rm9ybUNvbXBvbmVudDtcblxuICAgIEBWaWV3Q2hpbGQoTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcilcbiAgICBpbnB1dEF1dG9jb21wbGV0ZTogTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcjtcblxuICAgIHByb2Nlc3NEZWZpbml0aW9uczogUHJvY2Vzc0RlZmluaXRpb25SZXByZXNlbnRhdGlvbltdID0gW107XG4gICAgc2VsZWN0ZWRQcm9jZXNzRGVmOiBQcm9jZXNzRGVmaW5pdGlvblJlcHJlc2VudGF0aW9uO1xuICAgIHByb2Nlc3NOYW1lSW5wdXQ6IFVudHlwZWRGb3JtQ29udHJvbDtcbiAgICBwcm9jZXNzRGVmaW5pdGlvbklucHV0OiBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gICAgZmlsdGVyZWRQcm9jZXNzZXNEZWZpbml0aW9ucyQ6IE9ic2VydmFibGU8UHJvY2Vzc0RlZmluaXRpb25SZXByZXNlbnRhdGlvbltdPjtcbiAgICBtYXhQcm9jZXNzTmFtZUxlbmd0aDogbnVtYmVyID0gTUFYX0xFTkdUSDtcbiAgICBhbGZyZXNjb1JlcG9zaXRvcnlOYW1lOiBzdHJpbmc7XG4gICAgYXBwbGljYXRpb25zOiBBcHBEZWZpbml0aW9uUmVwcmVzZW50YXRpb25bXSA9IFtdO1xuICAgIHNlbGVjdGVkQXBwbGljYXRpb246IEFwcERlZmluaXRpb25SZXByZXNlbnRhdGlvbjtcblxuICAgIGlzUHJvY2Vzc0RlZmluaXRpb25zTG9hZGluZyA9IHRydWU7XG4gICAgaXNBcHBzTG9hZGluZyA9IHRydWU7XG4gICAgbW92ZWROb2RlVG9QUzogRm9ybVZhbHVlcztcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHByb2Nlc3NTZXJ2aWNlOiBQcm9jZXNzU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb250ZW50U2VydmljZTogQWN0aXZpdGlDb250ZW50U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhcHBzUHJvY2Vzc1NlcnZpY2U6IEFwcHNQcm9jZXNzU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhcHBDb25maWc6IEFwcENvbmZpZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZGF0ZVBpcGU6IExvY2FsaXplZERhdGVQaXBlXG4gICAgKSB7fVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc05hbWVJbnB1dCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycsIFtcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgICAgICBWYWxpZGF0b3JzLm1heExlbmd0aCh0aGlzLm1heFByb2Nlc3NOYW1lTGVuZ3RoKSxcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucGF0dGVybignXlteXFxcXHNdKyhcXFxccytbXlxcXFxzXSspKiQnKVxuICAgICAgICBdKTtcbiAgICAgICAgdGhpcy5wcm9jZXNzRGVmaW5pdGlvbklucHV0ID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xuXG4gICAgICAgIHRoaXMubG9hZCh0aGlzLmFwcElkKTtcblxuICAgICAgICB0aGlzLmZpbHRlcmVkUHJvY2Vzc2VzRGVmaW5pdGlvbnMkID0gdGhpcy5wcm9jZXNzRGVmaW5pdGlvbklucHV0LnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgbWFwKCh2YWx1ZSkgPT4gdGhpcy5fZmlsdGVyKHZhbHVlKSksXG4gICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuY29udGVudFNlcnZpY2UuZ2V0QWxmcmVzY29SZXBvc2l0b3JpZXMoKS5zdWJzY3JpYmUoKHJlcG9MaXN0KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVwb0xpc3Q/LlswXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFsZnJlc2NvUmVwb3NpdG9yeSA9IHJlcG9MaXN0WzBdO1xuICAgICAgICAgICAgICAgIHRoaXMuYWxmcmVzY29SZXBvc2l0b3J5TmFtZSA9IGBhbGZyZXNjby0ke2FsZnJlc2NvUmVwb3NpdG9yeS5pZH0tJHthbGZyZXNjb1JlcG9zaXRvcnkubmFtZX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGlmIChjaGFuZ2VzWyd2YWx1ZXMnXT8uY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLm1vdmVOb2RlRnJvbUNTdG9QUygpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXBwSWQgPSBjaGFuZ2VzWydhcHBJZCddO1xuICAgICAgICBpZiAoYXBwSWQ/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5sb2FkKGFwcElkLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm9jZXNzRGVmaW5pdGlvbk5hbWUgPSBjaGFuZ2VzWydwcm9jZXNzRGVmaW5pdGlvbk5hbWUnXTtcbiAgICAgICAgaWYgKHByb2Nlc3NEZWZpbml0aW9uTmFtZT8uY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlclByb2Nlc3NEZWZpbml0aW9uQnlOYW1lKHByb2Nlc3NEZWZpbml0aW9uTmFtZS5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTZWxlY3RlZFByb2Nlc3Moc2VsZWN0ZWRQcm9jZXNzOiBzdHJpbmcpOiBQcm9jZXNzRGVmaW5pdGlvblJlcHJlc2VudGF0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0RlZmluaXRpb25zLmZpbmQoKHByb2Nlc3MpID0+IHByb2Nlc3MubmFtZS50b0xvd2VyQ2FzZSgpID09PSBzZWxlY3RlZFByb2Nlc3MpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZChhcHBJZD86IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5zaG93U2VsZWN0QXBwbGljYXRpb25Ecm9wZG93bikge1xuICAgICAgICAgICAgdGhpcy5sb2FkQXBwcygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sb2FkUHJvY2Vzc0RlZmluaXRpb25zKGFwcElkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxvYWRQcm9jZXNzRGVmaW5pdGlvbnMoYXBwSWQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmlzUHJvY2Vzc0RlZmluaXRpb25zTG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMucmVzZXRTZWxlY3RlZFByb2Nlc3NEZWZpbml0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzU2VydmljZVxuICAgICAgICAgICAgLmdldFByb2Nlc3NEZWZpbml0aW9ucyhhcHBJZClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgocHJvY2Vzc0RlZmluaXRpb25SZXByZXNlbnRhdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRQcm9jZXNzRGVmOiBQcm9jZXNzRGVmaW5pdGlvblJlcHJlc2VudGF0aW9uO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzRGVmaW5pdGlvblJlcHJlc2VudGF0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQcm9jZXNzRGVmID0gcHJvY2Vzc0RlZmluaXRpb25SZXByZXNlbnRhdGlvbnNbMF07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcm9jZXNzRGVmaW5pdGlvbk5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkUHJvY2Vzc0RlZmluaXRpb24gPSBwcm9jZXNzRGVmaW5pdGlvblJlcHJlc2VudGF0aW9ucy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcm9jZXNzRGVmaW5pdGlvbikgPT4gcHJvY2Vzc0RlZmluaXRpb24ubmFtZSA9PT0gdGhpcy5wcm9jZXNzRGVmaW5pdGlvbk5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyZWRQcm9jZXNzRGVmaW5pdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQcm9jZXNzRGVmID0gZmlsdGVyZWRQcm9jZXNzRGVmaW5pdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGN1cnJlbnRQcm9jZXNzRGVmLCBwcm9jZXNzRGVmaW5pdGlvblJlcHJlc2VudGF0aW9ucyB9O1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgIChmaWx0ZXJlZFByb2Nlc3NEZWZpbml0aW9ucykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NEZWZpbml0aW9ucyA9IGZpbHRlcmVkUHJvY2Vzc0RlZmluaXRpb25zLnByb2Nlc3NEZWZpbml0aW9uUmVwcmVzZW50YXRpb25zO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NEZWZpbml0aW9uU2VsZWN0aW9uQ2hhbmdlZChmaWx0ZXJlZFByb2Nlc3NEZWZpbml0aW9ucy5jdXJyZW50UHJvY2Vzc0RlZik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0RlZmluaXRpb25JbnB1dC5zZXRWYWx1ZSh0aGlzLnNlbGVjdGVkUHJvY2Vzc0RlZiA/IHRoaXMuc2VsZWN0ZWRQcm9jZXNzRGVmLm5hbWUgOiAnJyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNQcm9jZXNzRGVmaW5pdGlvbnNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1Byb2Nlc3NEZWZpbml0aW9uc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvci5lbWl0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmlsdGVyUHJvY2Vzc0RlZmluaXRpb25CeU5hbWUoZGVmaW5pdGlvbk5hbWU6IHN0cmluZykge1xuICAgICAgICBpZiAoZGVmaW5pdGlvbk5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkUHJvY2Vzc0RlZiA9IHRoaXMucHJvY2Vzc0RlZmluaXRpb25zLmZpbmQoKHByb2Nlc3NEZWZpbml0aW9uKSA9PiBwcm9jZXNzRGVmaW5pdGlvbi5uYW1lID09PSBkZWZpbml0aW9uTmFtZSk7XG5cbiAgICAgICAgICAgIGlmIChmaWx0ZXJlZFByb2Nlc3NEZWYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NEZWZpbml0aW9uU2VsZWN0aW9uQ2hhbmdlZChmaWx0ZXJlZFByb2Nlc3NEZWYpO1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0RlZmluaXRpb25JbnB1dC5zZXRWYWx1ZSh0aGlzLnNlbGVjdGVkUHJvY2Vzc0RlZiA/IHRoaXMuc2VsZWN0ZWRQcm9jZXNzRGVmLm5hbWUgOiAnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGxvYWRBcHBzKCkge1xuICAgICAgICB0aGlzLmlzQXBwc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmFwcHNQcm9jZXNzU2VydmljZVxuICAgICAgICAgICAgLmdldERlcGxveWVkQXBwbGljYXRpb25zKClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBwbGljYXRpb25zID0gcmVzcG9uc2UuZmlsdGVyKChhcHApID0+IGFwcC5pZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRBcHBsaWNhdGlvbjogQXBwRGVmaW5pdGlvblJlcHJlc2VudGF0aW9uO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChhcHBsaWNhdGlvbnMgJiYgYXBwbGljYXRpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEFwcGxpY2F0aW9uID0gYXBwbGljYXRpb25zWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRBcHAgPSBhcHBsaWNhdGlvbnMuZmluZCgoYXBwKSA9PiBhcHAuaWQgPT09ICt0aGlzLmFwcElkKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyZWRBcHApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRBcHBsaWNhdGlvbiA9IGZpbHRlcmVkQXBwO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgY3VycmVudEFwcGxpY2F0aW9uLCBhcHBsaWNhdGlvbnMgfTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAoZmlsdGVyZWRBcHBzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwbGljYXRpb25zID0gZmlsdGVyZWRBcHBzLmFwcGxpY2F0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEFwcGxpY2F0aW9uID0gZmlsdGVyZWRBcHBzLmN1cnJlbnRBcHBsaWNhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBsaWNhdGlvblNlbGVjdGlvbi5lbWl0KHRoaXMuc2VsZWN0ZWRBcHBsaWNhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlUHJvY2Vzc05hbWVBbmREZWZpbml0aW9uc0Ryb3Bkb3duKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNBcHBzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRQcm9jZXNzRGVmaW5pdGlvbnNCYXNlZE9uU2VsZWN0ZWRBcHAoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0FwcHNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IuZW1pdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkUHJvY2Vzc0RlZmluaXRpb25zQmFzZWRPblNlbGVjdGVkQXBwKCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEFwcGxpY2F0aW9uPy5pZCkge1xuICAgICAgICAgICAgdGhpcy5sb2FkUHJvY2Vzc0RlZmluaXRpb25zKHRoaXMuc2VsZWN0ZWRBcHBsaWNhdGlvbiA/IHRoaXMuc2VsZWN0ZWRBcHBsaWNhdGlvbi5pZCA6IG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc1Byb2Nlc3NEZWZpbml0aW9uc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucmVzZXRQcm9jZXNzRGVmaW5pdGlvbnMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQXBwU2VsZWN0aW9uQ2hhbmdlKHNlbGVjdGVkQXBwbGljYXRpb246IE1hdFNlbGVjdENoYW5nZSkge1xuICAgICAgICB0aGlzLnJlc2V0UHJvY2Vzc0RlZmluaXRpb25zKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRBcHBsaWNhdGlvbiA9IHNlbGVjdGVkQXBwbGljYXRpb24udmFsdWU7XG4gICAgICAgIHRoaXMuYXBwbGljYXRpb25TZWxlY3Rpb24uZW1pdCh0aGlzLnNlbGVjdGVkQXBwbGljYXRpb24pO1xuICAgICAgICB0aGlzLnRvZ2dsZVByb2Nlc3NOYW1lQW5kRGVmaW5pdGlvbnNEcm9wZG93bigpO1xuICAgICAgICB0aGlzLmxvYWRQcm9jZXNzRGVmaW5pdGlvbnNCYXNlZE9uU2VsZWN0ZWRBcHAoKTtcbiAgICB9XG5cbiAgICBoYXNBcHBsaWNhdGlvbnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwcGxpY2F0aW9ucz8ubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBoYXNQcm9jZXNzRGVmaW5pdGlvbnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NEZWZpbml0aW9ucz8ubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBpc1Byb2Nlc3NEZWZpbml0aW9uU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuc2VsZWN0ZWRQcm9jZXNzRGVmPy5pZDtcbiAgICB9XG5cbiAgICBpc0Ryb3Bkb3duRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNob3dTZWxlY3RBcHBsaWNhdGlvbkRyb3Bkb3duICYmICF0aGlzLmlzQXBwU2VsZWN0ZWQoKTtcbiAgICB9XG5cbiAgICBnZXRBbGZyZXNjb1JlcG9zaXRvcnlOYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIGxldCBhbGZyZXNjb1JlcG9zaXRvcnlOYW1lID0gdGhpcy5hcHBDb25maWcuZ2V0PHN0cmluZz4oQXBwQ29uZmlnVmFsdWVzLkFMRlJFU0NPX1JFUE9TSVRPUllfTkFNRSk7XG4gICAgICAgIGlmICghYWxmcmVzY29SZXBvc2l0b3J5TmFtZSkge1xuICAgICAgICAgICAgYWxmcmVzY29SZXBvc2l0b3J5TmFtZSA9IHRoaXMuYWxmcmVzY29SZXBvc2l0b3J5TmFtZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWxmcmVzY29SZXBvc2l0b3J5TmFtZSArICdBbGZyZXNjbyc7XG4gICAgfVxuXG4gICAgbW92ZU5vZGVGcm9tQ1N0b1BTKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBhY2NvdW50SWRlbnRpZmllciA9IHRoaXMuZ2V0QWxmcmVzY29SZXBvc2l0b3J5TmFtZSgpO1xuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMudmFsdWVzKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMudmFsdWVzLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlc1trZXldKSA/IHRoaXMudmFsdWVzW2tleV0gOiBbdGhpcy52YWx1ZXNba2V5XV07XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGVudHMgPSBjdXJyZW50VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigodmFsdWU6IGFueSkgPT4gISF2YWx1ZT8uaXNGaWxlKVxuICAgICAgICAgICAgICAgICAgICAubWFwKChjb250ZW50OiBOb2RlKSA9PiB0aGlzLmNvbnRlbnRTZXJ2aWNlLmFwcGx5QWxmcmVzY29Ob2RlKGNvbnRlbnQsIG51bGwsIGFjY291bnRJZGVudGlmaWVyKSk7XG4gICAgICAgICAgICAgICAgZm9ya0pvaW4oY29udGVudHMpLnN1YnNjcmliZSgocmVzOiBSZWxhdGVkQ29udGVudFJlcHJlc2VudGF0aW9uW10pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3ZlZE5vZGVUb1BTID0geyBba2V5XTogWy4uLnJlc10gfTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXJ0UHJvY2VzcyhvdXRjb21lPzogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkUHJvY2Vzc0RlZj8uaWQgJiYgdGhpcy5uYW1lQ29udHJvbGxlci52YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgZm9ybVZhbHVlcyA9IHRoaXMuc3RhcnRGb3JtID8gdGhpcy5zdGFydEZvcm0uZm9ybS52YWx1ZXMgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTZXJ2aWNlLnN0YXJ0UHJvY2Vzcyh0aGlzLnNlbGVjdGVkUHJvY2Vzc0RlZi5pZCwgdGhpcy5uYW1lQ29udHJvbGxlci52YWx1ZSwgb3V0Y29tZSwgZm9ybVZhbHVlcywgdGhpcy52YXJpYWJsZXMpLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmFtZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0LmVtaXQocmVzKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvci5lbWl0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNhbmNlbFN0YXJ0UHJvY2VzcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jYW5jZWwuZW1pdCgpO1xuICAgIH1cblxuICAgIGhhc1N0YXJ0Rm9ybSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRQcm9jZXNzRGVmPy5oYXNTdGFydEZvcm07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1N0YXJ0Rm9ybU1pc3NpbmdPclZhbGlkKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5zdGFydEZvcm0pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0YXJ0Rm9ybS5mb3JtPy5pc1ZhbGlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YWxpZGF0ZUZvcm0oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkUHJvY2Vzc0RlZj8uaWQgJiYgdGhpcy5wcm9jZXNzTmFtZUlucHV0LnZhbGlkICYmIHRoaXMuaXNTdGFydEZvcm1NaXNzaW5nT3JWYWxpZCgpO1xuICAgIH1cblxuICAgIG9uT3V0Y29tZUNsaWNrKG91dGNvbWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLnN0YXJ0UHJvY2VzcyhvdXRjb21lKTtcbiAgICB9XG5cbiAgICByZXNldCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZXNldFNlbGVjdGVkUHJvY2Vzc0RlZmluaXRpb24oKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJyc7XG4gICAgICAgIGlmICh0aGlzLnN0YXJ0Rm9ybSkge1xuICAgICAgICAgICAgdGhpcy5zdGFydEZvcm0uZGF0YSA9IHt9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGlzcGxheUZuKHByb2Nlc3M6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGlmIChwcm9jZXNzKSB7XG4gICAgICAgICAgICBsZXQgcHJvY2Vzc05hbWUgPSBwcm9jZXNzO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NOYW1lID0gcHJvY2Vzcy5uYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3NOYW1lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZGlzcGxheURyb3Bkb3duKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKCF0aGlzLmlucHV0QXV0b2NvbXBsZXRlLnBhbmVsT3Blbikge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzRGVmaW5pdGlvbklucHV0LnNldFZhbHVlKCcnKTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRBdXRvY29tcGxldGUub3BlblBhbmVsKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0QXV0b2NvbXBsZXRlLmNsb3NlUGFuZWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBuYW1lQ29udHJvbGxlcigpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzTmFtZUlucHV0O1xuICAgIH1cblxuICAgIGdldCBwcm9jZXNzRGVmaW5pdGlvbkNvbnRyb2xsZXIoKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0RlZmluaXRpb25JbnB1dDtcbiAgICB9XG5cbiAgICBwcm9jZXNzRGVmaW5pdGlvblNlbGVjdGlvbkNoYW5nZWQocHJvY2Vzc0RlZmluaXRpb246IFByb2Nlc3NEZWZpbml0aW9uUmVwcmVzZW50YXRpb24pIHtcbiAgICAgICAgaWYgKHByb2Nlc3NEZWZpbml0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9jZXNzSW5zdGFuY2VEZXRhaWxzOiBQcm9jZXNzSW5zdGFuY2VSZXByZXNlbnRhdGlvbiA9IHsgcHJvY2Vzc0RlZmluaXRpb25OYW1lOiBwcm9jZXNzRGVmaW5pdGlvbi5uYW1lIH07XG4gICAgICAgICAgICBjb25zdCBwcm9jZXNzTmFtZSA9IHRoaXMuZm9ybWF0UHJvY2Vzc05hbWUodGhpcy5uYW1lLCBwcm9jZXNzSW5zdGFuY2VEZXRhaWxzKTtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc05hbWVJbnB1dC5zZXRWYWx1ZShwcm9jZXNzTmFtZSk7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NOYW1lSW5wdXQubWFya0FzRGlydHkoKTtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc05hbWVJbnB1dC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJvY2Vzc0RlZiA9IHByb2Nlc3NEZWZpbml0aW9uO1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzRGVmaW5pdGlvblNlbGVjdGlvbi5lbWl0KHRoaXMuc2VsZWN0ZWRQcm9jZXNzRGVmKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubmFtZUNvbnRyb2xsZXIucmVzZXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzTG9hZGluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hvd1NlbGVjdEFwcGxpY2F0aW9uRHJvcGRvd24gPyB0aGlzLmlzQXBwc0xvYWRpbmcgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzQXBwU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuc2VsZWN0ZWRBcHBsaWNhdGlvbj8uaWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldFNlbGVjdGVkUHJvY2Vzc0RlZmluaXRpb24oKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9jZXNzRGVmID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAodGhpcy5wcm9jZXNzRGVmaW5pdGlvbklucHV0KSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NEZWZpbml0aW9uSW5wdXQuc2V0VmFsdWUoJycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldFByb2Nlc3NEZWZpbml0aW9ucygpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzRGVmaW5pdGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5yZXNldFNlbGVjdGVkUHJvY2Vzc0RlZmluaXRpb24oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRvZ2dsZVByb2Nlc3NOYW1lQW5kRGVmaW5pdGlvbnNEcm9wZG93bigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQXBwU2VsZWN0ZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzRGVmaW5pdGlvbkNvbnRyb2xsZXIuZGlzYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5uYW1lQ29udHJvbGxlci5kaXNhYmxlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NEZWZpbml0aW9uQ29udHJvbGxlci5lbmFibGUoKTtcbiAgICAgICAgICAgIHRoaXMubmFtZUNvbnRyb2xsZXIuZW5hYmxlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9maWx0ZXIodmFsdWU6IHN0cmluZyk6IFByb2Nlc3NEZWZpbml0aW9uUmVwcmVzZW50YXRpb25bXSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZFByb2Nlc3MgPSB0aGlzLnByb2Nlc3NEZWZpbml0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4gb3B0aW9uLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXJWYWx1ZSkpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5wcm9jZXNzRmlsdGVyU2VsZWN0b3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJvY2Vzc0RlZiA9IHRoaXMuZ2V0U2VsZWN0ZWRQcm9jZXNzKGZpbHRlclZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZFByb2Nlc3M7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb3JtYXRQcm9jZXNzTmFtZShwcm9jZXNzTmFtZUZvcm1hdDogc3RyaW5nLCBwcm9jZXNzSW5zdGFuY2U/OiBQcm9jZXNzSW5zdGFuY2VSZXByZXNlbnRhdGlvbik6IHN0cmluZyB7XG4gICAgICAgIGxldCBwcm9jZXNzTmFtZSA9IHByb2Nlc3NOYW1lRm9ybWF0O1xuICAgICAgICBpZiAocHJvY2Vzc05hbWUubWF0Y2goREFURV9USU1FX0lERU5USUZJRVJfUkVHX0VYUCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXNlbnREYXRlVGltZSA9IGdldFRpbWUobmV3IERhdGUoKSk7XG4gICAgICAgICAgICBwcm9jZXNzTmFtZSA9IHByb2Nlc3NOYW1lLnJlcGxhY2UoREFURV9USU1FX0lERU5USUZJRVJfUkVHX0VYUCwgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocHJlc2VudERhdGVUaW1lLCAnbWVkaXVtJykpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb2Nlc3NOYW1lLm1hdGNoKFBST0NFU1NfREVGSU5JVElPTl9JREVOVElGSUVSX1JFR19FWFApKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZFByb2Nlc3NEZWZpbml0aW9uTmFtZSA9IHByb2Nlc3NJbnN0YW5jZSA/IHByb2Nlc3NJbnN0YW5jZS5wcm9jZXNzRGVmaW5pdGlvbk5hbWUgOiAnJztcbiAgICAgICAgICAgIHByb2Nlc3NOYW1lID0gcHJvY2Vzc05hbWUucmVwbGFjZShQUk9DRVNTX0RFRklOSVRJT05fSURFTlRJRklFUl9SRUdfRVhQLCBzZWxlY3RlZFByb2Nlc3NEZWZpbml0aW9uTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb2Nlc3NOYW1lO1xuICAgIH1cbn1cbiIsIlxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzTG9hZGluZygpOyB0aGVuIHNob3dMb2FkaW5nVGVtcGxhdGU7IGVsc2Ugc2hvd1N0YXJ0UHJvY2Vzc1RlbXBsYXRlXCIgLz5cbiAgICA8bmctdGVtcGxhdGUgI3Nob3dMb2FkaW5nVGVtcGxhdGU+XG4gICAgICAgIDxtYXQtc3Bpbm5lciBjbGFzcz1cImFkZi1zdGFydC1wcm9jZXNzLWxvYWRpbmdcIiAvPlxuICAgIDwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3Nob3dTdGFydFByb2Nlc3NUZW1wbGF0ZT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzQXBwbGljYXRpb25zKCkgfHwgaGFzUHJvY2Vzc0RlZmluaXRpb25zKCkgOyBlbHNlIHNob3dFbXB0eVRlbXBsYXRlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtc3RhcnQtcHJvY2Vzc1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi10aXRsZVwiICpuZ0lmPVwidGl0bGVcIj57eyB0aXRsZSB8IHRyYW5zbGF0ZX19PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtc3RhcnQtcHJvY2Vzcy1kZWZpbml0aW9uLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJzaG93U2VsZWN0QXBwbGljYXRpb25Ecm9wZG93blwiIFtmbG9hdExhYmVsXT1cIidhbHdheXMnXCIgY2xhc3M9XCJhZGYtc3RhcnQtcHJvY2Vzcy1hcHAtbGlzdFwiIFtzdWJzY3JpcHRTaXppbmddPVwiJ2R5bmFtaWMnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7ICdBREZfUFJPQ0VTU19MSVNULlNUQVJUX1BST0NFU1MuRk9STS5MQUJFTC5TRUxFQ1RfQVBQTElDQVRJT04nIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ0FERl9QUk9DRVNTX0xJU1QuU1RBUlRfUFJPQ0VTUy5GT1JNLkxBQkVMLlNFTEVDVF9BUFBMSUNBVElPTicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25BcHBTZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEFwcGxpY2F0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1zdGFydC1wcm9jZXNzLWRlZmluaXRpb24tc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJhZGYtc3RhcnQtcHJvY2Vzcy1hcHBzLWRyb3AtZG93blwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhcHBsaWNhdGlvbiBvZiBhcHBsaWNhdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiYXBwbGljYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwib3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidhZGYtc3RhcnQtcHJvY2Vzcy1hcHBzLW9wdGlvbi0nICsgYXBwbGljYXRpb24ubmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBhcHBsaWNhdGlvbi5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJhZGYtcHJvY2Vzcy1pbnB1dC1jb250YWluZXJcIiBbZmxvYXRMYWJlbF09XCInYWx3YXlzJ1wiIFtzdWJzY3JpcHRTaXppbmddPVwiJ2R5bmFtaWMnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7J0FERl9QUk9DRVNTX0xJU1QuU1RBUlRfUFJPQ0VTUy5GT1JNLkxBQkVMLlRZUEUnIHwgdHJhbnNsYXRlfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJwcm9jZXNzRGVmaW5pdGlvbklucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwicHJvY2Vzc0RlZmluaXRpb25OYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLXByb2Nlc3MtaW5wdXQtYXV0b2NvbXBsZXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1hdXRvY29tcGxldGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2F1dG89XCJtYXRBdXRvY29tcGxldGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInByb2Nlc3NEZWZpbml0aW9uT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNwbGF5V2l0aF09XCJkaXNwbGF5Rm5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHByb2Nlc3NEZWYgb2YgZmlsdGVyZWRQcm9jZXNzZXNEZWZpbml0aW9ucyQgfCBhc3luY1wiIFt2YWx1ZV09XCJwcm9jZXNzRGVmLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicHJvY2Vzc0RlZmluaXRpb25TZWxlY3Rpb25DaGFuZ2VkKHByb2Nlc3NEZWYpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBwcm9jZXNzRGVmLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzUHJvY2Vzc0RlZmluaXRpb25zTG9hZGluZyA7IGVsc2Ugc2hvd1Byb2Nlc3NEZWZMb2FkaW5nVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtc3RhcnQtcHJvY2Vzcy1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJhZGYtc2VsZWN0LXByb2Nlc3MtZHJvcGRvd25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93U2VsZWN0UHJvY2Vzc0Ryb3Bkb3duXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRpc3BsYXlEcm9wZG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Ryb3Bkb3duRGlzYWJsZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidBREZfUFJPQ0VTU19MSVNULlNUQVJUX1BST0NFU1MuRk9STS5MQUJFTC5UWVBFJyB8IHRyYW5zbGF0ZSB8IHVwcGVyY2FzZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmFycm93X2Ryb3BfZG93bjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2hvd1Byb2Nlc3NEZWZMb2FkaW5nVGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc3Bpbm5lciBpZD1cImFkZi1zZWxlY3QtcHJvY2Vzcy1zcGlubmVyXCIgW2RpYW1ldGVyXT1cIjIwXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiYWRmLXByb2Nlc3MtaW5wdXQtY29udGFpbmVyIGFkZi1wcm9jZXNzLWlucHV0LWNvbnRhaW5lci1wcm9jZXNzLW5hbWVcIiBbZmxvYXRMYWJlbF09XCInYWx3YXlzJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7J0FERl9QUk9DRVNTX0xJU1QuU1RBUlRfUFJPQ0VTUy5GT1JNLkxBQkVMLk5BTUUnIHwgdHJhbnNsYXRlfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cInByb2Nlc3NOYW1lSW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJwcm9jZXNzTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZC8+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJuYW1lQ29udHJvbGxlci5oYXNFcnJvcignbWF4bGVuZ3RoJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdBREZfUFJPQ0VTU19MSVNULlNUQVJUX1BST0NFU1MuRVJST1IuTUFYSU1VTV9MRU5HVEgnIHwgdHJhbnNsYXRlIDogeyBjaGFyYWN0ZXJzIDogbWF4UHJvY2Vzc05hbWVMZW5ndGggfSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cIm5hbWVDb250cm9sbGVyLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAnQURGX1BST0NFU1NfTElTVC5TVEFSVF9QUk9DRVNTLkVSUk9SLlBST0NFU1NfTkFNRV9SRVFVSVJFRCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJuYW1lQ29udHJvbGxlci5oYXNFcnJvcigncGF0dGVybicpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAnQURGX1BST0NFU1NfTElTVC5TVEFSVF9QUk9DRVNTLkVSUk9SLlNQQUNFX1ZBTElEQVRPUicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNQcm9jZXNzRGVmaW5pdGlvbnNMb2FkaW5nIDsgZWxzZSBzaG93U3RhcnRGb3JtTG9hZGluZ1RlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1Byb2Nlc3NEZWZpbml0aW9uU2VsZWN0ZWQoKSA7IGVsc2UgZW1wdHlQcm9jZXNzRGVmVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgICpuZ0lmPVwiaGFzU3RhcnRGb3JtKCk7IGVsc2Ugbm9TdGFydEZvcm1UZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhZGYtc3RhcnQtZm9ybVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjc3RhcnRGb3JtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cIm1vdmVkTm9kZVRvUFNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZVN0YXJ0UHJvY2Vzc0J1dHRvbl09XCJwcm9jZXNzTmFtZUlucHV0LmludmFsaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJvY2Vzc0RlZmluaXRpb25JZF09XCJzZWxlY3RlZFByb2Nlc3NEZWYuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3V0Y29tZUNsaWNrKT1cIm9uT3V0Y29tZUNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1JlZnJlc2hCdXR0b25dPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtc3RhcnQtcHJvY2Vzcy1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRmLWZvcm0tY3VzdG9tLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbFN0YXJ0UHJvY2VzcygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiY2FuY2VsX3Byb2Nlc3NcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J0FERl9QUk9DRVNTX0xJU1QuU1RBUlRfUFJPQ0VTUy5GT1JNLkFDVElPTi5DQU5DRUwnfCB0cmFuc2xhdGUgfCB1cHBlcmNhc2V9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FkZi1zdGFydC1mb3JtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vU3RhcnRGb3JtVGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1lbXB0eS1jb250ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLXN0YXJ0LXByb2Nlc3MtZW1wdHktdGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCInYXNzZXNzbWVudCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0FERl9QUk9DRVNTX0xJU1QuU1RBUlRfUFJPQ0VTUy5OT19TVEFSVF9GT1JNJyAgfCB0cmFuc2xhdGVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHlQcm9jZXNzRGVmVGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YWRmLWVtcHR5LWNvbnRlbnQgY2xhc3M9XCJhZGYtc3RhcnQtcHJvY2Vzcy1lbXB0eS10ZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiJ2Fzc2Vzc21lbnQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0FERl9QUk9DRVNTX0xJU1QuU1RBUlRfUFJPQ0VTUy5OT19QUk9DRVNTX0RFRl9TRUxFQ1RFRCcgIHwgdHJhbnNsYXRlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3Nob3dTdGFydEZvcm1Mb2FkaW5nVGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc3Bpbm5lciBjbGFzcz1cImFkZi1zdGFydC1wcm9jZXNzLWxvYWRpbmdcIiAvPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtc3RhcnQtcHJvY2Vzcy1jb250ZW50LWFjdGlvbnNcIiAqbmdJZj1cIiFoYXNTdGFydEZvcm0oKVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtc3RhcnQtcHJvY2Vzcy1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWhhc1N0YXJ0Rm9ybSgpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbFN0YXJ0UHJvY2VzcygpXCJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJjYW5jZWxfcHJvY2Vzc1wiPlxuICAgICAgICAgICAgICAgICAgICB7eydBREZfUFJPQ0VTU19MSVNULlNUQVJUX1BST0NFU1MuRk9STS5BQ1RJT04uQ0FOQ0VMJ3wgdHJhbnNsYXRlIHwgdXBwZXJjYXNlfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhaGFzU3RhcnRGb3JtKClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXZhbGlkYXRlRm9ybSgpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN0YXJ0UHJvY2VzcygpXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwiYnRuLXN0YXJ0XCJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJidXR0b24tc3RhcnRcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1zdGFydCBhZGYtc3RhcnQtcHJvY2Vzcy1idXR0b25cIj5cbiAgICAgICAgICAgICAgICAgICAge3snQURGX1BST0NFU1NfTElTVC5TVEFSVF9QUk9DRVNTLkZPUk0uQUNUSU9OLlNUQVJUJyB8IHRyYW5zbGF0ZSB8IHVwcGVyY2FzZX19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjc2hvd0VtcHR5VGVtcGxhdGU+XG4gICAgICAgICAgICA8YWRmLWVtcHR5LWNvbnRlbnQgY2xhc3M9XCJhZGYtc3RhcnQtcHJvY2Vzcy1lbXB0eS10ZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2ljb25dPVwiJ2Fzc2Vzc21lbnQnXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0FERl9QUk9DRVNTX0xJU1QuU1RBUlRfUFJPQ0VTUy5OT19QUk9DRVNTX0RFRklOSVRJT05TJyB8IHRyYW5zbGF0ZVwiIC8+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
@@ -1,18 +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
|
-
export * from './public-api';
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWIvcHJvY2Vzcy1zZXJ2aWNlcy9zcmMvbGliL3Byb2Nlc3MtbGlzdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
|