@valtimo/dossier 12.15.1 → 12.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -13,12 +13,12 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { Component, EventEmitter, Inject, Input, Optional, Output, ViewChild, ViewContainerRef, ViewEncapsulation, } from '@angular/core';
17
- import { FormioOptionsImpl, } from '@valtimo/components';
16
+ import { Component, EventEmitter, Inject, Input, Optional, Output, signal, ViewChild, ViewContainerRef, ViewEncapsulation, } from '@angular/core';
17
+ import { CARBON_CONSTANTS, FormioOptionsImpl, } from '@valtimo/components';
18
+ import { FORM_VIEW_MODEL_TOKEN } from '@valtimo/config';
18
19
  import { FORM_CUSTOM_COMPONENT_TOKEN, } from '@valtimo/process-link';
19
20
  import { BehaviorSubject, combineLatest, Subscription, switchMap } from 'rxjs';
20
21
  import { take } from 'rxjs/operators';
21
- import { FORM_VIEW_MODEL_TOKEN } from '@valtimo/config';
22
22
  import * as i0 from "@angular/core";
23
23
  import * as i1 from "@angular/router";
24
24
  import * as i2 from "@valtimo/process";
@@ -40,23 +40,25 @@ export class DossierSupportingProcessStartModalComponent {
40
40
  this.processDefinitionKey$ = new BehaviorSubject('');
41
41
  this.documentDefinitionName$ = new BehaviorSubject('');
42
42
  this.processName$ = new BehaviorSubject('');
43
- this.formDefinition$ = new BehaviorSubject(undefined);
44
- this.formioSubmission$ = new BehaviorSubject(undefined);
43
+ this.formDefinition$ = new BehaviorSubject(null);
44
+ this.formioSubmission$ = new BehaviorSubject(null);
45
45
  this.processLinkId$ = new BehaviorSubject('');
46
- this.options$ = new BehaviorSubject(undefined);
47
- this.submission$ = new BehaviorSubject(undefined);
48
- this.processDefinitionId$ = new BehaviorSubject(undefined);
49
- this.formFlowInstanceId$ = new BehaviorSubject(undefined);
50
- this.documentId$ = new BehaviorSubject(undefined);
46
+ this.options$ = new BehaviorSubject(null);
47
+ this.submission$ = new BehaviorSubject(null);
48
+ this.processDefinitionId$ = new BehaviorSubject(null);
49
+ this.formFlowInstanceId$ = new BehaviorSubject(null);
50
+ this.documentId$ = new BehaviorSubject(null);
51
51
  this.modalOpen$ = new BehaviorSubject(false);
52
52
  this._formCustomComponentConfig$ = new BehaviorSubject({});
53
53
  this.closeModalEvent = new EventEmitter();
54
+ this.$loading = signal(true);
54
55
  this._subscriptions = new Subscription();
55
56
  this._formCustomComponentConfig$.next(formCustomComponentConfig);
56
57
  }
57
58
  loadProcessLink() {
59
+ this.$loading.set(true);
58
60
  combineLatest([this.processDefinitionId$, this.documentId$])
59
- .pipe(take(1), switchMap(([processDefinitionId, documentId]) => this.processService.getProcessDefinitionStartProcessLink(processDefinitionId, documentId, null)))
61
+ .pipe(take(1), switchMap(([processDefinitionId, documentId]) => this.processService.getProcessDefinitionStartProcessLink(processDefinitionId ?? '', documentId ?? '', '')))
60
62
  .subscribe(startProcessResult => {
61
63
  if (startProcessResult) {
62
64
  this.isUIComponent = false;
@@ -67,10 +69,10 @@ export class DossierSupportingProcessStartModalComponent {
67
69
  this.processLinkId$.next(startProcessResult.processLinkId);
68
70
  break;
69
71
  case 'form-flow':
70
- this.formFlowInstanceId$.next(startProcessResult.properties.formFlowInstanceId);
72
+ this.formFlowInstanceId$.next(startProcessResult.properties.formFlowInstanceId ?? null);
71
73
  break;
72
74
  case 'form-view-model':
73
- this.formDefinition$.next(startProcessResult.properties.formDefinition);
75
+ this.formDefinition$.next(startProcessResult.properties.formDefinition ?? null);
74
76
  this.setFormViewModelComponent(startProcessResult.properties.formName);
75
77
  break;
76
78
  case 'ui-component':
@@ -79,6 +81,7 @@ export class DossierSupportingProcessStartModalComponent {
79
81
  break;
80
82
  }
81
83
  }
84
+ this.$loading.set(false);
82
85
  });
83
86
  }
84
87
  openModal(processDocumentDefinition, documentId) {
@@ -101,7 +104,7 @@ export class DossierSupportingProcessStartModalComponent {
101
104
  this.formioSubmission$.next(submission);
102
105
  if (this.processLinkId$.getValue()) {
103
106
  combineLatest([this.processLinkId$, this.documentId$])
104
- .pipe(take(1), switchMap(([processLinkId, documentId]) => this.processLinkService.submitForm(processLinkId, submission.data, documentId)))
107
+ .pipe(take(1), switchMap(([processLinkId, documentId]) => this.processLinkService.submitForm(processLinkId, submission.data, documentId ?? '')))
105
108
  .subscribe({
106
109
  next: (formSubmissionResult) => {
107
110
  this.formSubmitted();
@@ -115,7 +118,6 @@ export class DossierSupportingProcessStartModalComponent {
115
118
  formSubmitted() {
116
119
  this.closeCdsModal();
117
120
  this.formSubmit.emit();
118
- this.formDefinition$.next(null);
119
121
  }
120
122
  gotoFormLinkScreen() {
121
123
  this.closeCdsModal();
@@ -127,7 +129,7 @@ export class DossierSupportingProcessStartModalComponent {
127
129
  this.closeCdsModal();
128
130
  }
129
131
  setFormViewModelComponent(formName) {
130
- if (!this.formViewModel.component)
132
+ if (!this.formViewModel.component || !formName)
131
133
  return;
132
134
  this.formViewModelDynamicContainer.clear();
133
135
  const formViewModelComponent = this.formViewModelDynamicContainer.createComponent(this.formViewModel.component);
@@ -158,7 +160,7 @@ export class DossierSupportingProcessStartModalComponent {
158
160
  }
159
161
  setFormCustomComponent(formCustomComponentKey) {
160
162
  this.formCustomComponentDynamicContainer.clear();
161
- if (!this.formCustomComponentConfig)
163
+ if (!this.formCustomComponentConfig || !formCustomComponentKey)
162
164
  return;
163
165
  this._formCustomComponentConfig$.pipe(take(1)).subscribe(formCustomComponentConfig => {
164
166
  const customComponent = formCustomComponentConfig[formCustomComponentKey];
@@ -180,17 +182,23 @@ export class DossierSupportingProcessStartModalComponent {
180
182
  closeCdsModal() {
181
183
  this.modalOpen$.next(false);
182
184
  this.closeModalEvent.emit();
185
+ this.reset();
183
186
  }
184
187
  openCdsModal() {
185
- this.loadProcessLink();
186
188
  this.modalOpen$.next(true);
187
189
  }
190
+ reset() {
191
+ setTimeout(() => {
192
+ this.formDefinition$.next(null);
193
+ this.formFlowInstanceId$.next(null);
194
+ }, CARBON_CONSTANTS.modalAnimationMs);
195
+ }
188
196
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DossierSupportingProcessStartModalComponent, deps: [{ token: i1.Router }, { token: i2.ProcessService }, { token: i3.ProcessLinkService }, { token: FORM_VIEW_MODEL_TOKEN, optional: true }, { token: FORM_CUSTOM_COMPONENT_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
189
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: DossierSupportingProcessStartModalComponent, selector: "valtimo-dossier-supporting-process-start-modal", inputs: { isAdmin: "isAdmin" }, outputs: { formSubmit: "formSubmit" }, viewQueries: [{ propertyName: "form", first: true, predicate: ["form"], descendants: true }, { propertyName: "formViewModelDynamicContainer", first: true, predicate: ["formViewModelComponent"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "formCustomComponentDynamicContainer", first: true, predicate: ["formCustomComponent"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal [open]=\"modalOpen$ | async\" valtimoCdsModal size=\"sm\">\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"onCloseSelect()\" [cdsLayer]=\"1\"\n ><h3 cdsModalHeaderHeading>\n {{\n (processDefinitionKey$ | async | translate) !== (processDefinitionKey$ | async)\n ? (processDefinitionKey$ | async | translate)\n : (processName$ | async)\n }}\n </h3>\n </cds-modal-header>\n\n <section cdsModalContent [cdsLayer]=\"1\">\n <ng-template #formViewModelComponent></ng-template>\n <ng-template #formCustomComponent></ng-template>\n\n @if (!isFormViewModel && !isUIComponent && (formDefinition$ | async)) {\n <valtimo-form-io\n #form\n [submission]=\"submission$ | async\"\n [form]=\"formDefinition$ | async\"\n [options]=\"options$ | async\"\n (submit)=\"onSubmit($event)\"\n ></valtimo-form-io>\n }\n\n @if (formFlowInstanceId$ | async) {\n <valtimo-form-flow\n #formFlow\n [formFlowInstanceId]=\"formFlowInstanceId$ | async\"\n (formFlowComplete)=\"formSubmitted()\"\n ></valtimo-form-flow>\n }\n\n @if (!(formDefinition$ | async) && !(formFlowInstanceId$ | async) && !isUIComponent) {\n <div class=\"bg-warning text-black mb-0 p-3 text-center\">\n {{\n isAdmin\n ? ('formManagement.noFormDefinitionFoundAdmin' | translate)\n : ('formManagement.noFormDefinitionFoundUser' | translate)\n }}\n </div>\n <div class=\"mb-0 mt-4 p-3 text-center\">\n <button\n class=\"btn btn-secondary btn-space\"\n type=\"button\"\n (click)=\"gotoFormLinkScreen()\"\n id=\"form-link-button\"\n >\n {{ 'formManagement.gotoProcessLinksButton' | translate }}\n </button>\n </div>\n }\n </section>\n</cds-modal>\n", styles: ["#supportingProcessStartModal .formio-component-submit{text-align:right}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "component", type: i4.FormioComponent, selector: "valtimo-form-io", inputs: ["options", "submission", "form", "readOnly", "formRefresh$"], outputs: ["submit", "change", "event"] }, { kind: "component", type: i3.FormFlowComponent, selector: "valtimo-form-flow", inputs: ["formIoFormData", "formFlowInstanceId"], outputs: ["formFlowComplete", "formFlowChange"] }, { kind: "component", type: i5.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i5.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "directive", type: i5.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i5.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "directive", type: i4.ValtimoCdsModalDirective, selector: "[valtimoCdsModal]", inputs: ["enableOverflow"] }, { kind: "directive", type: i5.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
197
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: DossierSupportingProcessStartModalComponent, selector: "valtimo-dossier-supporting-process-start-modal", inputs: { isAdmin: "isAdmin" }, outputs: { formSubmit: "formSubmit" }, viewQueries: [{ propertyName: "form", first: true, predicate: ["form"], descendants: true }, { propertyName: "formViewModelDynamicContainer", first: true, predicate: ["formViewModelComponent"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "formCustomComponentDynamicContainer", first: true, predicate: ["formCustomComponent"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal [open]=\"modalOpen$ | async\" valtimoCdsModal size=\"sm\">\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"onCloseSelect()\" [cdsLayer]=\"1\"\n ><h3 cdsModalHeaderHeading>\n {{\n (processDefinitionKey$ | async | translate) !== (processDefinitionKey$ | async)\n ? (processDefinitionKey$ | async | translate)\n : (processName$ | async)\n }}\n </h3>\n </cds-modal-header>\n\n <section cdsModalContent [cdsLayer]=\"1\">\n <ng-template #formViewModelComponent></ng-template>\n <ng-template #formCustomComponent></ng-template>\n\n @if ($loading()) {\n <cds-loading></cds-loading>\n } @else {\n @if (!isFormViewModel && !isUIComponent && (formDefinition$ | async)) {\n <valtimo-form-io\n #form\n [submission]=\"submission$ | async\"\n [form]=\"formDefinition$ | async\"\n [options]=\"options$ | async\"\n (submit)=\"onSubmit($event)\"\n ></valtimo-form-io>\n }\n\n @if (formFlowInstanceId$ | async) {\n <valtimo-form-flow\n #formFlow\n [formFlowInstanceId]=\"formFlowInstanceId$ | async\"\n (formFlowComplete)=\"formSubmitted()\"\n ></valtimo-form-flow>\n }\n\n @if (!(formDefinition$ | async) && !(formFlowInstanceId$ | async) && !isUIComponent) {\n <div class=\"bg-warning text-black mb-0 p-3 text-center\">\n {{\n isAdmin\n ? ('formManagement.noFormDefinitionFoundAdmin' | translate)\n : ('formManagement.noFormDefinitionFoundUser' | translate)\n }}\n </div>\n <div class=\"mb-0 mt-4 p-3 text-center\">\n <button\n class=\"btn btn-secondary btn-space\"\n type=\"button\"\n (click)=\"gotoFormLinkScreen()\"\n id=\"form-link-button\"\n >\n {{ 'formManagement.gotoProcessLinksButton' | translate }}\n </button>\n </div>\n }\n }\n </section>\n</cds-modal>\n", styles: ["#supportingProcessStartModal .formio-component-submit{text-align:right}cds-loading{display:flex;justify-content:center}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "component", type: i4.FormioComponent, selector: "valtimo-form-io", inputs: ["options", "submission", "form", "readOnly", "formRefresh$"], outputs: ["submit", "change", "event"] }, { kind: "component", type: i5.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "component", type: i3.FormFlowComponent, selector: "valtimo-form-flow", inputs: ["formIoFormData", "formFlowInstanceId"], outputs: ["formFlowComplete", "formFlowChange"] }, { kind: "component", type: i5.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i5.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "directive", type: i5.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i5.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "directive", type: i4.ValtimoCdsModalDirective, selector: "[valtimoCdsModal]", inputs: ["enableOverflow"] }, { kind: "directive", type: i5.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
190
198
  }
191
199
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DossierSupportingProcessStartModalComponent, decorators: [{
192
200
  type: Component,
193
- args: [{ selector: 'valtimo-dossier-supporting-process-start-modal', encapsulation: ViewEncapsulation.None, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal [open]=\"modalOpen$ | async\" valtimoCdsModal size=\"sm\">\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"onCloseSelect()\" [cdsLayer]=\"1\"\n ><h3 cdsModalHeaderHeading>\n {{\n (processDefinitionKey$ | async | translate) !== (processDefinitionKey$ | async)\n ? (processDefinitionKey$ | async | translate)\n : (processName$ | async)\n }}\n </h3>\n </cds-modal-header>\n\n <section cdsModalContent [cdsLayer]=\"1\">\n <ng-template #formViewModelComponent></ng-template>\n <ng-template #formCustomComponent></ng-template>\n\n @if (!isFormViewModel && !isUIComponent && (formDefinition$ | async)) {\n <valtimo-form-io\n #form\n [submission]=\"submission$ | async\"\n [form]=\"formDefinition$ | async\"\n [options]=\"options$ | async\"\n (submit)=\"onSubmit($event)\"\n ></valtimo-form-io>\n }\n\n @if (formFlowInstanceId$ | async) {\n <valtimo-form-flow\n #formFlow\n [formFlowInstanceId]=\"formFlowInstanceId$ | async\"\n (formFlowComplete)=\"formSubmitted()\"\n ></valtimo-form-flow>\n }\n\n @if (!(formDefinition$ | async) && !(formFlowInstanceId$ | async) && !isUIComponent) {\n <div class=\"bg-warning text-black mb-0 p-3 text-center\">\n {{\n isAdmin\n ? ('formManagement.noFormDefinitionFoundAdmin' | translate)\n : ('formManagement.noFormDefinitionFoundUser' | translate)\n }}\n </div>\n <div class=\"mb-0 mt-4 p-3 text-center\">\n <button\n class=\"btn btn-secondary btn-space\"\n type=\"button\"\n (click)=\"gotoFormLinkScreen()\"\n id=\"form-link-button\"\n >\n {{ 'formManagement.gotoProcessLinksButton' | translate }}\n </button>\n </div>\n }\n </section>\n</cds-modal>\n", styles: ["#supportingProcessStartModal .formio-component-submit{text-align:right}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
201
+ args: [{ selector: 'valtimo-dossier-supporting-process-start-modal', encapsulation: ViewEncapsulation.None, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal [open]=\"modalOpen$ | async\" valtimoCdsModal size=\"sm\">\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"onCloseSelect()\" [cdsLayer]=\"1\"\n ><h3 cdsModalHeaderHeading>\n {{\n (processDefinitionKey$ | async | translate) !== (processDefinitionKey$ | async)\n ? (processDefinitionKey$ | async | translate)\n : (processName$ | async)\n }}\n </h3>\n </cds-modal-header>\n\n <section cdsModalContent [cdsLayer]=\"1\">\n <ng-template #formViewModelComponent></ng-template>\n <ng-template #formCustomComponent></ng-template>\n\n @if ($loading()) {\n <cds-loading></cds-loading>\n } @else {\n @if (!isFormViewModel && !isUIComponent && (formDefinition$ | async)) {\n <valtimo-form-io\n #form\n [submission]=\"submission$ | async\"\n [form]=\"formDefinition$ | async\"\n [options]=\"options$ | async\"\n (submit)=\"onSubmit($event)\"\n ></valtimo-form-io>\n }\n\n @if (formFlowInstanceId$ | async) {\n <valtimo-form-flow\n #formFlow\n [formFlowInstanceId]=\"formFlowInstanceId$ | async\"\n (formFlowComplete)=\"formSubmitted()\"\n ></valtimo-form-flow>\n }\n\n @if (!(formDefinition$ | async) && !(formFlowInstanceId$ | async) && !isUIComponent) {\n <div class=\"bg-warning text-black mb-0 p-3 text-center\">\n {{\n isAdmin\n ? ('formManagement.noFormDefinitionFoundAdmin' | translate)\n : ('formManagement.noFormDefinitionFoundUser' | translate)\n }}\n </div>\n <div class=\"mb-0 mt-4 p-3 text-center\">\n <button\n class=\"btn btn-secondary btn-space\"\n type=\"button\"\n (click)=\"gotoFormLinkScreen()\"\n id=\"form-link-button\"\n >\n {{ 'formManagement.gotoProcessLinksButton' | translate }}\n </button>\n </div>\n }\n }\n </section>\n</cds-modal>\n", styles: ["#supportingProcessStartModal .formio-component-submit{text-align:right}cds-loading{display:flex;justify-content:center}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
194
202
  }], ctorParameters: () => [{ type: i1.Router }, { type: i2.ProcessService }, { type: i3.ProcessLinkService }, { type: undefined, decorators: [{
195
203
  type: Optional
196
204
  }, {
@@ -215,4 +223,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
215
223
  }], formSubmit: [{
216
224
  type: Output
217
225
  }] } });
218
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1zdXBwb3J0aW5nLXByb2Nlc3Mtc3RhcnQtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9kb3NzaWVyL3NyYy9saWIvY29tcG9uZW50cy9kb3NzaWVyLXN1cHBvcnRpbmctcHJvY2Vzcy1zdGFydC1tb2RhbC9kb3NzaWVyLXN1cHBvcnRpbmctcHJvY2Vzcy1zdGFydC1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2Rvc3NpZXIvc3JjL2xpYi9jb21wb25lbnRzL2Rvc3NpZXItc3VwcG9ydGluZy1wcm9jZXNzLXN0YXJ0LW1vZGFsL2Rvc3NpZXItc3VwcG9ydGluZy1wcm9jZXNzLXN0YXJ0LW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBa0IsaUJBQWlCLEdBQTBDLE1BQU0scUJBQXFCLENBQUM7QUFHaEgsT0FBTyxFQUNMLDJCQUEyQixHQUs1QixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDN0UsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3BDLE9BQU8sRUFBQyxxQkFBcUIsRUFBZ0IsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7O0FBUXJFLE1BQU0sT0FBTywyQ0FBMkM7SUFnQ3RELFlBQ21CLE1BQWMsRUFDZCxj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QUFNOzJCQUFDLDJCQUEyQjt5Q0FyQ0QsSUFBSTtzQkFBdkMsU0FBUzt1QkFBQyxNQUFNLEVBQUUsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDO2dCQUUzQiw2QkFBNkI7c0JBRG5DLFNBQVM7dUJBQUMsd0JBQXdCLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBQztnQkFHcEUsbUNBQW1DO3NCQUR6QyxTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUM7Z0JBR2hFLE9BQU87c0JBQWYsS0FBSztnQkFDSSxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge0Zvcm1pb0JlZm9yZVN1Ym1pdCwgRm9ybWlvRm9ybX0gZnJvbSAnQGZvcm1pby9hbmd1bGFyJztcbmltcG9ydCB7Rm9ybWlvQ29tcG9uZW50LCBGb3JtaW9PcHRpb25zSW1wbCwgRm9ybWlvU3VibWlzc2lvbiwgVmFsdGltb0Zvcm1pb09wdGlvbnMsfSBmcm9tICdAdmFsdGltby9jb21wb25lbnRzJztcbmltcG9ydCB7UHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbn0gZnJvbSAnQHZhbHRpbW8vZG9jdW1lbnQnO1xuaW1wb3J0IHtQcm9jZXNzU2VydmljZX0gZnJvbSAnQHZhbHRpbW8vcHJvY2Vzcyc7XG5pbXBvcnQge1xuICBGT1JNX0NVU1RPTV9DT01QT05FTlRfVE9LRU4sXG4gIEZvcm1DdXN0b21Db21wb25lbnQsXG4gIEZvcm1DdXN0b21Db21wb25lbnRDb25maWcsXG4gIEZvcm1TdWJtaXNzaW9uUmVzdWx0LFxuICBQcm9jZXNzTGlua1NlcnZpY2UsXG59IGZyb20gJ0B2YWx0aW1vL3Byb2Nlc3MtbGluayc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgU3Vic2NyaXB0aW9uLCBzd2l0Y2hNYXB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHt0YWtlfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0ZPUk1fVklFV19NT0RFTF9UT0tFTiwgRm9ybVZpZXdNb2RlbH0gZnJvbSAnQHZhbHRpbW8vY29uZmlnJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1kb3NzaWVyLXN1cHBvcnRpbmctcHJvY2Vzcy1zdGFydC1tb2RhbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kb3NzaWVyLXN1cHBvcnRpbmctcHJvY2Vzcy1zdGFydC1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Rvc3NpZXItc3VwcG9ydGluZy1wcm9jZXNzLXN0YXJ0LW1vZGFsLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIERvc3NpZXJTdXBwb3J0aW5nUHJvY2Vzc1N0YXJ0TW9kYWxDb21wb25lbnQge1xuICBAVmlld0NoaWxkKCdmb3JtJywge3N0YXRpYzogZmFsc2V9KSBmb3JtOiBGb3JtaW9Db21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ2Zvcm1WaWV3TW9kZWxDb21wb25lbnQnLCB7c3RhdGljOiB0cnVlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmfSlcbiAgcHVibGljIGZvcm1WaWV3TW9kZWxEeW5hbWljQ29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmO1xuICBAVmlld0NoaWxkKCdmb3JtQ3VzdG9tQ29tcG9uZW50Jywge3N0YXRpYzogZmFsc2UsIHJlYWQ6IFZpZXdDb250YWluZXJSZWZ9KVxuICBwdWJsaWMgZm9ybUN1c3RvbUNvbXBvbmVudER5bmFtaWNDb250YWluZXI6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgQElucHV0KCkgaXNBZG1pbjogYm9vbGVhbjtcbiAgQE91dHB1dCgpIGZvcm1TdWJtaXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHJvdGVjdGVkIGlzRm9ybVZpZXdNb2RlbCA9IGZhbHNlO1xuICBwdWJsaWMgaXNVSUNvbXBvbmVudCA9IGZhbHNlO1xuXG4gIHB1YmxpYyByZWFkb25seSBwcm9jZXNzRGVmaW5pdGlvbktleSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwdWJsaWMgcmVhZG9ubHkgZG9jdW1lbnREZWZpbml0aW9uTmFtZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvY2Vzc05hbWUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgcHVibGljIHJlYWRvbmx5IGZvcm1EZWZpbml0aW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Rm9ybWlvRm9ybT4odW5kZWZpbmVkKTtcbiAgcHVibGljIHJlYWRvbmx5IGZvcm1pb1N1Ym1pc3Npb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxGb3JtaW9TdWJtaXNzaW9uPih1bmRlZmluZWQpO1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvY2Vzc0xpbmtJZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwdWJsaWMgcmVhZG9ubHkgb3B0aW9ucyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFZhbHRpbW9Gb3JtaW9PcHRpb25zPih1bmRlZmluZWQpO1xuICBwdWJsaWMgcmVhZG9ubHkgc3VibWlzc2lvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG9iamVjdD4odW5kZWZpbmVkKTtcbiAgcHVibGljIHJlYWRvbmx5IHByb2Nlc3NEZWZpbml0aW9uSWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KHVuZGVmaW5lZCk7XG4gIHB1YmxpYyByZWFkb25seSBmb3JtRmxvd0luc3RhbmNlSWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KHVuZGVmaW5lZCk7XG4gIHB1YmxpYyByZWFkb25seSBkb2N1bWVudElkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih1bmRlZmluZWQpO1xuICBwdWJsaWMgcmVhZG9ubHkgbW9kYWxPcGVuJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9mb3JtQ3VzdG9tQ29tcG9uZW50Q29uZmlnJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgRm9ybUN1c3RvbUNvbXBvbmVudENvbmZpZyB8IHt9XG4gID4oe30pO1xuICBwdWJsaWMgcmVhZG9ubHkgY2xvc2VNb2RhbEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb2Nlc3NTZXJ2aWNlOiBQcm9jZXNzU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb2Nlc3NMaW5rU2VydmljZTogUHJvY2Vzc0xpbmtTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRk9STV9WSUVXX01PREVMX1RPS0VOKSBwcml2YXRlIHJlYWRvbmx5IGZvcm1WaWV3TW9kZWw6IEZvcm1WaWV3TW9kZWwsXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KEZPUk1fQ1VTVE9NX0NPTVBPTkVOVF9UT0tFTilcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm1DdXN0b21Db21wb25lbnRDb25maWc6IEZvcm1DdXN0b21Db21wb25lbnRDb25maWdcbiAgKSB7XG4gICAgdGhpcy5fZm9ybUN1c3RvbUNvbXBvbmVudENvbmZpZyQubmV4dChmb3JtQ3VzdG9tQ29tcG9uZW50Q29uZmlnKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFByb2Nlc3NMaW5rKCk6IHZvaWQge1xuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMucHJvY2Vzc0RlZmluaXRpb25JZCQsIHRoaXMuZG9jdW1lbnRJZCRdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHN3aXRjaE1hcCgoW3Byb2Nlc3NEZWZpbml0aW9uSWQsIGRvY3VtZW50SWRdKSA9PlxuICAgICAgICAgIHRoaXMucHJvY2Vzc1NlcnZpY2UuZ2V0UHJvY2Vzc0RlZmluaXRpb25TdGFydFByb2Nlc3NMaW5rKFxuICAgICAgICAgICAgcHJvY2Vzc0RlZmluaXRpb25JZCxcbiAgICAgICAgICAgIGRvY3VtZW50SWQsXG4gICAgICAgICAgICBudWxsXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHN0YXJ0UHJvY2Vzc1Jlc3VsdCA9PiB7XG4gICAgICAgIGlmIChzdGFydFByb2Nlc3NSZXN1bHQpIHtcbiAgICAgICAgICB0aGlzLmlzVUlDb21wb25lbnQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmlzRm9ybVZpZXdNb2RlbCA9IGZhbHNlO1xuICAgICAgICAgIHN3aXRjaCAoc3RhcnRQcm9jZXNzUmVzdWx0LnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2Zvcm0nOlxuICAgICAgICAgICAgICB0aGlzLmZvcm1EZWZpbml0aW9uJC5uZXh0KHN0YXJ0UHJvY2Vzc1Jlc3VsdC5wcm9wZXJ0aWVzLnByZWZpbGxlZEZvcm0pO1xuICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NMaW5rSWQkLm5leHQoc3RhcnRQcm9jZXNzUmVzdWx0LnByb2Nlc3NMaW5rSWQpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2Zvcm0tZmxvdyc6XG4gICAgICAgICAgICAgIHRoaXMuZm9ybUZsb3dJbnN0YW5jZUlkJC5uZXh0KHN0YXJ0UHJvY2Vzc1Jlc3VsdC5wcm9wZXJ0aWVzLmZvcm1GbG93SW5zdGFuY2VJZCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZm9ybS12aWV3LW1vZGVsJzpcbiAgICAgICAgICAgICAgdGhpcy5mb3JtRGVmaW5pdGlvbiQubmV4dChzdGFydFByb2Nlc3NSZXN1bHQucHJvcGVydGllcy5mb3JtRGVmaW5pdGlvbik7XG4gICAgICAgICAgICAgIHRoaXMuc2V0Rm9ybVZpZXdNb2RlbENvbXBvbmVudChzdGFydFByb2Nlc3NSZXN1bHQucHJvcGVydGllcy5mb3JtTmFtZSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndWktY29tcG9uZW50JzpcbiAgICAgICAgICAgICAgdGhpcy5zZXRGb3JtQ3VzdG9tQ29tcG9uZW50KHN0YXJ0UHJvY2Vzc1Jlc3VsdC5wcm9wZXJ0aWVzLmNvbXBvbmVudEtleSk7XG4gICAgICAgICAgICAgIHRoaXMuaXNVSUNvbXBvbmVudCA9IHRydWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb3Blbk1vZGFsKHByb2Nlc3NEb2N1bWVudERlZmluaXRpb246IFByb2Nlc3NEb2N1bWVudERlZmluaXRpb24sIGRvY3VtZW50SWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZG9jdW1lbnRJZCQubmV4dChkb2N1bWVudElkKTtcbiAgICB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLm5leHQocHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbi5pZC5kb2N1bWVudERlZmluaXRpb25JZC5uYW1lKTtcbiAgICB0aGlzLnByb2Nlc3NEZWZpbml0aW9uS2V5JC5uZXh0KHByb2Nlc3NEb2N1bWVudERlZmluaXRpb24uaWQucHJvY2Vzc0RlZmluaXRpb25LZXkpO1xuICAgIHRoaXMucHJvY2Vzc0RlZmluaXRpb25JZCQubmV4dChwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uLmxhdGVzdFZlcnNpb25JZCk7XG4gICAgdGhpcy5wcm9jZXNzTmFtZSQubmV4dChwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uLnByb2Nlc3NOYW1lKTtcblxuICAgIGNvbnN0IGZvcm1pb0JlZm9yZVN1Ym1pdDogRm9ybWlvQmVmb3JlU3VibWl0ID0gZnVuY3Rpb24gKHN1Ym1pc3Npb24sIGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjayhudWxsLCBzdWJtaXNzaW9uKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb3B0aW9ucyA9IG5ldyBGb3JtaW9PcHRpb25zSW1wbCgpO1xuICAgIG9wdGlvbnMuZGlzYWJsZUFsZXJ0cyA9IHRydWU7XG4gICAgb3B0aW9ucy5zZXRIb29rcyhmb3JtaW9CZWZvcmVTdWJtaXQpO1xuXG4gICAgdGhpcy5vcHRpb25zJC5uZXh0KG9wdGlvbnMpO1xuXG4gICAgdGhpcy5sb2FkUHJvY2Vzc0xpbmsoKTtcbiAgICB0aGlzLm9wZW5DZHNNb2RhbCgpO1xuICB9XG5cbiAgcHVibGljIG9uU3VibWl0KHN1Ym1pc3Npb246IEZvcm1pb1N1Ym1pc3Npb24pOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1pb1N1Ym1pc3Npb24kLm5leHQoc3VibWlzc2lvbik7XG5cbiAgICBpZiAodGhpcy5wcm9jZXNzTGlua0lkJC5nZXRWYWx1ZSgpKSB7XG4gICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLnByb2Nlc3NMaW5rSWQkLCB0aGlzLmRvY3VtZW50SWQkXSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICBzd2l0Y2hNYXAoKFtwcm9jZXNzTGlua0lkLCBkb2N1bWVudElkXSkgPT5cbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0xpbmtTZXJ2aWNlLnN1Ym1pdEZvcm0ocHJvY2Vzc0xpbmtJZCwgc3VibWlzc2lvbi5kYXRhLCBkb2N1bWVudElkKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAoZm9ybVN1Ym1pc3Npb25SZXN1bHQ6IEZvcm1TdWJtaXNzaW9uUmVzdWx0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZvcm1TdWJtaXR0ZWQoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiBlcnJvcnMgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb3JtLnNob3dFcnJvcnMoZXJyb3JzKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZm9ybVN1Ym1pdHRlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlQ2RzTW9kYWwoKTtcbiAgICB0aGlzLmZvcm1TdWJtaXQuZW1pdCgpO1xuICAgIHRoaXMuZm9ybURlZmluaXRpb24kLm5leHQobnVsbCk7XG4gIH1cblxuICBwdWJsaWMgZ290b0Zvcm1MaW5rU2NyZWVuKCk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2VDZHNNb2RhbCgpO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsncHJvY2Vzcy1saW5rcyddLCB7XG4gICAgICBxdWVyeVBhcmFtczoge3Byb2Nlc3M6IHRoaXMucHJvY2Vzc0RlZmluaXRpb25LZXkkLmdldFZhbHVlKCl9LFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uQ2xvc2VTZWxlY3QoKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZUNkc01vZGFsKCk7XG4gIH1cblxuICBwcml2YXRlIHNldEZvcm1WaWV3TW9kZWxDb21wb25lbnQoZm9ybU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5mb3JtVmlld01vZGVsLmNvbXBvbmVudCkgcmV0dXJuO1xuICAgIHRoaXMuZm9ybVZpZXdNb2RlbER5bmFtaWNDb250YWluZXIuY2xlYXIoKTtcbiAgICBjb25zdCBmb3JtVmlld01vZGVsQ29tcG9uZW50ID0gdGhpcy5mb3JtVmlld01vZGVsRHluYW1pY0NvbnRhaW5lci5jcmVhdGVDb21wb25lbnQoXG4gICAgICB0aGlzLmZvcm1WaWV3TW9kZWwuY29tcG9uZW50XG4gICAgKTtcblxuICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5mb3JtRGVmaW5pdGlvbiQsXG4gICAgICB0aGlzLnByb2Nlc3NEZWZpbml0aW9uS2V5JCxcbiAgICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQsXG4gICAgICB0aGlzLm9wdGlvbnMkLFxuICAgICAgdGhpcy5kb2N1bWVudElkJCxcbiAgICBdKVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKFtmb3JtLCBwcm9jZXNzRGVmaW5pdGlvbktleSwgZG9jdW1lbnREZWZpbml0aW9uTmFtZSwgb3B0aW9ucywgZG9jdW1lbnRJZF0pID0+IHtcbiAgICAgICAgZm9ybVZpZXdNb2RlbENvbXBvbmVudC5pbnN0YW5jZS5mb3JtTmFtZSA9IGZvcm1OYW1lO1xuICAgICAgICBmb3JtVmlld01vZGVsQ29tcG9uZW50Lmluc3RhbmNlLmZvcm0gPSBmb3JtO1xuICAgICAgICBmb3JtVmlld01vZGVsQ29tcG9uZW50Lmluc3RhbmNlLnByb2Nlc3NEZWZpbml0aW9uS2V5ID0gcHJvY2Vzc0RlZmluaXRpb25LZXk7XG4gICAgICAgIGZvcm1WaWV3TW9kZWxDb21wb25lbnQuaW5zdGFuY2UuZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9IGRvY3VtZW50RGVmaW5pdGlvbk5hbWU7XG4gICAgICAgIGZvcm1WaWV3TW9kZWxDb21wb25lbnQuaW5zdGFuY2Uub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIGZvcm1WaWV3TW9kZWxDb21wb25lbnQuaW5zdGFuY2UuaXNTdGFydEZvcm0gPSB0cnVlO1xuICAgICAgICBmb3JtVmlld01vZGVsQ29tcG9uZW50Lmluc3RhbmNlLmRvY3VtZW50SWQgPSBkb2N1bWVudElkO1xuICAgICAgfSk7XG5cbiAgICBmb3JtVmlld01vZGVsQ29tcG9uZW50Lmluc3RhbmNlLmZvcm1TdWJtaXQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5mb3JtU3VibWl0dGVkKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuY2xvc2VNb2RhbEV2ZW50LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgZm9ybVZpZXdNb2RlbENvbXBvbmVudC5kZXN0cm95KCk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmlzRm9ybVZpZXdNb2RlbCA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIHNldEZvcm1DdXN0b21Db21wb25lbnQoZm9ybUN1c3RvbUNvbXBvbmVudEtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtQ3VzdG9tQ29tcG9uZW50RHluYW1pY0NvbnRhaW5lci5jbGVhcigpO1xuICAgIGlmICghdGhpcy5mb3JtQ3VzdG9tQ29tcG9uZW50Q29uZmlnKSByZXR1cm47XG4gICAgdGhpcy5fZm9ybUN1c3RvbUNvbXBvbmVudENvbmZpZyQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoZm9ybUN1c3RvbUNvbXBvbmVudENvbmZpZyA9PiB7XG4gICAgICBjb25zdCBjdXN0b21Db21wb25lbnQgPSBmb3JtQ3VzdG9tQ29tcG9uZW50Q29uZmlnW2Zvcm1DdXN0b21Db21wb25lbnRLZXldO1xuICAgICAgY29uc3QgcmVuZGVyZWRDb21wb25lbnQgPSB0aGlzLmZvcm1DdXN0b21Db21wb25lbnREeW5hbWljQ29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChcbiAgICAgICAgY3VzdG9tQ29tcG9uZW50XG4gICAgICApIGFzIENvbXBvbmVudFJlZjxGb3JtQ3VzdG9tQ29tcG9uZW50PjtcblxuICAgICAgY29tYmluZUxhdGVzdChbdGhpcy5wcm9jZXNzRGVmaW5pdGlvbktleSQsIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSRdKVxuICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAuc3Vic2NyaWJlKChbcHJvY2Vzc0RlZmluaXRpb25LZXksIGRvY3VtZW50RGVmaW5pdGlvbk5hbWVdKSA9PiB7XG4gICAgICAgICAgcmVuZGVyZWRDb21wb25lbnQuaW5zdGFuY2UucHJvY2Vzc0RlZmluaXRpb25LZXkgPSBwcm9jZXNzRGVmaW5pdGlvbktleTtcbiAgICAgICAgICByZW5kZXJlZENvbXBvbmVudC5pbnN0YW5jZS5kb2N1bWVudERlZmluaXRpb25OYW1lID0gZG9jdW1lbnREZWZpbml0aW9uTmFtZTtcbiAgICAgICAgfSk7XG5cbiAgICAgIHJlbmRlcmVkQ29tcG9uZW50Lmluc3RhbmNlLnN1Ym1pdHRlZEV2ZW50LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuZm9ybVN1Ym1pdHRlZCgpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICB0aGlzLmNsb3NlTW9kYWxFdmVudC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHJlbmRlcmVkQ29tcG9uZW50LmRlc3Ryb3koKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNsb3NlQ2RzTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RhbE9wZW4kLm5leHQoZmFsc2UpO1xuICAgIHRoaXMuY2xvc2VNb2RhbEV2ZW50LmVtaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkNkc01vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMubG9hZFByb2Nlc3NMaW5rKCk7XG4gICAgdGhpcy5tb2RhbE9wZW4kLm5leHQodHJ1ZSk7XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+IExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgflxuICB+IGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAgflxuICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAtLT5cblxuPGNkcy1tb2RhbCBbb3Blbl09XCJtb2RhbE9wZW4kIHwgYXN5bmNcIiB2YWx0aW1vQ2RzTW9kYWwgc2l6ZT1cInNtXCI+XG4gIDxjZHMtbW9kYWwtaGVhZGVyIFtzaG93Q2xvc2VCdXR0b25dPVwidHJ1ZVwiIChjbG9zZVNlbGVjdCk9XCJvbkNsb3NlU2VsZWN0KClcIiBbY2RzTGF5ZXJdPVwiMVwiXG4gICAgPjxoMyBjZHNNb2RhbEhlYWRlckhlYWRpbmc+XG4gICAgICB7e1xuICAgICAgICAocHJvY2Vzc0RlZmluaXRpb25LZXkkIHwgYXN5bmMgfCB0cmFuc2xhdGUpICE9PSAocHJvY2Vzc0RlZmluaXRpb25LZXkkIHwgYXN5bmMpXG4gICAgICAgICAgPyAocHJvY2Vzc0RlZmluaXRpb25LZXkkIHwgYXN5bmMgfCB0cmFuc2xhdGUpXG4gICAgICAgICAgOiAocHJvY2Vzc05hbWUkIHwgYXN5bmMpXG4gICAgICB9fVxuICAgIDwvaDM+XG4gIDwvY2RzLW1vZGFsLWhlYWRlcj5cblxuICA8c2VjdGlvbiBjZHNNb2RhbENvbnRlbnQgW2Nkc0xheWVyXT1cIjFcIj5cbiAgICA8bmctdGVtcGxhdGUgI2Zvcm1WaWV3TW9kZWxDb21wb25lbnQ+PC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI2Zvcm1DdXN0b21Db21wb25lbnQ+PC9uZy10ZW1wbGF0ZT5cblxuICAgIEBpZiAoIWlzRm9ybVZpZXdNb2RlbCAmJiAhaXNVSUNvbXBvbmVudCAmJiAoZm9ybURlZmluaXRpb24kIHwgYXN5bmMpKSB7XG4gICAgICA8dmFsdGltby1mb3JtLWlvXG4gICAgICAgICNmb3JtXG4gICAgICAgIFtzdWJtaXNzaW9uXT1cInN1Ym1pc3Npb24kIHwgYXN5bmNcIlxuICAgICAgICBbZm9ybV09XCJmb3JtRGVmaW5pdGlvbiQgfCBhc3luY1wiXG4gICAgICAgIFtvcHRpb25zXT1cIm9wdGlvbnMkIHwgYXN5bmNcIlxuICAgICAgICAoc3VibWl0KT1cIm9uU3VibWl0KCRldmVudClcIlxuICAgICAgPjwvdmFsdGltby1mb3JtLWlvPlxuICAgIH1cblxuICAgIEBpZiAoZm9ybUZsb3dJbnN0YW5jZUlkJCB8IGFzeW5jKSB7XG4gICAgICA8dmFsdGltby1mb3JtLWZsb3dcbiAgICAgICAgI2Zvcm1GbG93XG4gICAgICAgIFtmb3JtRmxvd0luc3RhbmNlSWRdPVwiZm9ybUZsb3dJbnN0YW5jZUlkJCB8IGFzeW5jXCJcbiAgICAgICAgKGZvcm1GbG93Q29tcGxldGUpPVwiZm9ybVN1Ym1pdHRlZCgpXCJcbiAgICAgID48L3ZhbHRpbW8tZm9ybS1mbG93PlxuICAgIH1cblxuICAgIEBpZiAoIShmb3JtRGVmaW5pdGlvbiQgfCBhc3luYykgJiYgIShmb3JtRmxvd0luc3RhbmNlSWQkIHwgYXN5bmMpICYmICFpc1VJQ29tcG9uZW50KSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiYmctd2FybmluZyB0ZXh0LWJsYWNrIG1iLTAgcC0zIHRleHQtY2VudGVyXCI+XG4gICAgICAgIHt7XG4gICAgICAgICAgaXNBZG1pblxuICAgICAgICAgICAgPyAoJ2Zvcm1NYW5hZ2VtZW50Lm5vRm9ybURlZmluaXRpb25Gb3VuZEFkbWluJyB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICAgIDogKCdmb3JtTWFuYWdlbWVudC5ub0Zvcm1EZWZpbml0aW9uRm91bmRVc2VyJyB8IHRyYW5zbGF0ZSlcbiAgICAgICAgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTAgbXQtNCBwLTMgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgYnRuLXNwYWNlXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAoY2xpY2spPVwiZ290b0Zvcm1MaW5rU2NyZWVuKClcIlxuICAgICAgICAgIGlkPVwiZm9ybS1saW5rLWJ1dHRvblwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyAnZm9ybU1hbmFnZW1lbnQuZ290b1Byb2Nlc3NMaW5rc0J1dHRvbicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvc2VjdGlvbj5cbjwvY2RzLW1vZGFsPlxuIl19
226
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1zdXBwb3J0aW5nLXByb2Nlc3Mtc3RhcnQtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9kb3NzaWVyL3NyYy9saWIvY29tcG9uZW50cy9kb3NzaWVyLXN1cHBvcnRpbmctcHJvY2Vzcy1zdGFydC1tb2RhbC9kb3NzaWVyLXN1cHBvcnRpbmctcHJvY2Vzcy1zdGFydC1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2Rvc3NpZXIvc3JjL2xpYi9jb21wb25lbnRzL2Rvc3NpZXItc3VwcG9ydGluZy1wcm9jZXNzLXN0YXJ0LW1vZGFsL2Rvc3NpZXItc3VwcG9ydGluZy1wcm9jZXNzLXN0YXJ0LW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQ0wsZ0JBQWdCLEVBRWhCLGlCQUFpQixHQUdsQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBQyxxQkFBcUIsRUFBZ0IsTUFBTSxpQkFBaUIsQ0FBQztBQUdyRSxPQUFPLEVBQ0wsMkJBQTJCLEdBSzVCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM3RSxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7OztBQVFwQyxNQUFNLE9BQU8sMkNBQTJDO0lB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QyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7K0dBbE9VLDJDQUEyQyx3R0FxQ2hDLHFCQUFxQiw2QkFFakMsMkJBQTJCO21HQXZDMUIsMkNBQTJDLGdXQUVJLGdCQUFnQixtSkFFbEIsZ0JBQWdCLDZCQzVEMUUscW9GQTBFQTs7NEZEbEJhLDJDQUEyQztrQkFOdkQsU0FBUzsrQkFDRSxnREFBZ0QsaUJBRzNDLGlCQUFpQixDQUFDLElBQUk7OzBCQXVDbEMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxxQkFBcUI7OzBCQUN4QyxRQUFROzswQkFDUixNQUFNOzJCQUFDLDJCQUEyQjt5Q0F0Q0QsSUFBSTtzQkFBdkMsU0FBUzt1QkFBQyxNQUFNLEVBQUUsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDO2dCQUUzQiw2QkFBNkI7c0JBRG5DLFNBQVM7dUJBQUMsd0JBQXdCLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBQztnQkFHcEUsbUNBQW1DO3NCQUR6QyxTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUM7Z0JBR2hFLE9BQU87c0JBQWYsS0FBSztnQkFDSSxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIHNpZ25hbCxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7Rm9ybWlvQmVmb3JlU3VibWl0LCBGb3JtaW9Gb3JtfSBmcm9tICdAZm9ybWlvL2FuZ3VsYXInO1xuaW1wb3J0IHtcbiAgQ0FSQk9OX0NPTlNUQU5UUyxcbiAgRm9ybWlvQ29tcG9uZW50LFxuICBGb3JtaW9PcHRpb25zSW1wbCxcbiAgRm9ybWlvU3VibWlzc2lvbixcbiAgVmFsdGltb0Zvcm1pb09wdGlvbnMsXG59IGZyb20gJ0B2YWx0aW1vL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtGT1JNX1ZJRVdfTU9ERUxfVE9LRU4sIEZvcm1WaWV3TW9kZWx9IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5pbXBvcnQge1Byb2Nlc3NEb2N1bWVudERlZmluaXRpb259IGZyb20gJ0B2YWx0aW1vL2RvY3VtZW50JztcbmltcG9ydCB7UHJvY2Vzc1NlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL3Byb2Nlc3MnO1xuaW1wb3J0IHtcbiAgRk9STV9DVVNUT01fQ09NUE9ORU5UX1RPS0VOLFxuICBGb3JtQ3VzdG9tQ29tcG9uZW50LFxuICBGb3JtQ3VzdG9tQ29tcG9uZW50Q29uZmlnLFxuICBGb3JtU3VibWlzc2lvblJlc3VsdCxcbiAgUHJvY2Vzc0xpbmtTZXJ2aWNlLFxufSBmcm9tICdAdmFsdGltby9wcm9jZXNzLWxpbmsnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIFN1YnNjcmlwdGlvbiwgc3dpdGNoTWFwfSBmcm9tICdyeGpzJztcbmltcG9ydCB7dGFrZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLWRvc3NpZXItc3VwcG9ydGluZy1wcm9jZXNzLXN0YXJ0LW1vZGFsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Rvc3NpZXItc3VwcG9ydGluZy1wcm9jZXNzLXN0YXJ0LW1vZGFsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZG9zc2llci1zdXBwb3J0aW5nLXByb2Nlc3Mtc3RhcnQtbW9kYWwuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgRG9zc2llclN1cHBvcnRpbmdQcm9jZXNzU3RhcnRNb2RhbENvbXBvbmVudCB7XG4gIEBWaWV3Q2hpbGQoJ2Zvcm0nLCB7c3RhdGljOiBmYWxzZX0pIGZvcm06IEZvcm1pb0NvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnZm9ybVZpZXdNb2RlbENvbXBvbmVudCcsIHtzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWZ9KVxuICBwdWJsaWMgZm9ybVZpZXdNb2RlbER5bmFtaWNDb250YWluZXI6IFZpZXdDb250YWluZXJSZWY7XG4gIEBWaWV3Q2hpbGQoJ2Zvcm1DdXN0b21Db21wb25lbnQnLCB7c3RhdGljOiBmYWxzZSwgcmVhZDogVmlld0NvbnRhaW5lclJlZn0pXG4gIHB1YmxpYyBmb3JtQ3VzdG9tQ29tcG9uZW50RHluYW1pY0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZjtcblxuICBASW5wdXQoKSBpc0FkbWluOiBib29sZWFuO1xuICBAT3V0cHV0KCkgZm9ybVN1Ym1pdCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwcm90ZWN0ZWQgaXNGb3JtVmlld01vZGVsID0gZmFsc2U7XG4gIHB1YmxpYyBpc1VJQ29tcG9uZW50ID0gZmFsc2U7XG5cbiAgcHVibGljIHJlYWRvbmx5IHByb2Nlc3NEZWZpbml0aW9uS2V5JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHB1YmxpYyByZWFkb25seSBkb2N1bWVudERlZmluaXRpb25OYW1lJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHB1YmxpYyByZWFkb25seSBwcm9jZXNzTmFtZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwdWJsaWMgcmVhZG9ubHkgZm9ybURlZmluaXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxGb3JtaW9Gb3JtIHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSBmb3JtaW9TdWJtaXNzaW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Rm9ybWlvU3VibWlzc2lvbiB8IG51bGw+KG51bGwpO1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvY2Vzc0xpbmtJZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwdWJsaWMgcmVhZG9ubHkgb3B0aW9ucyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFZhbHRpbW9Gb3JtaW9PcHRpb25zIHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSBzdWJtaXNzaW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8b2JqZWN0IHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSBwcm9jZXNzRGVmaW5pdGlvbklkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSBmb3JtRmxvd0luc3RhbmNlSWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IGRvY3VtZW50SWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IG1vZGFsT3BlbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZm9ybUN1c3RvbUNvbXBvbmVudENvbmZpZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIEZvcm1DdXN0b21Db21wb25lbnRDb25maWcgfCB7fVxuICA+KHt9KTtcbiAgcHVibGljIHJlYWRvbmx5IGNsb3NlTW9kYWxFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcHVibGljIHJlYWRvbmx5ICRsb2FkaW5nID0gc2lnbmFsPGJvb2xlYW4+KHRydWUpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb2Nlc3NTZXJ2aWNlOiBQcm9jZXNzU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb2Nlc3NMaW5rU2VydmljZTogUHJvY2Vzc0xpbmtTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRk9STV9WSUVXX01PREVMX1RPS0VOKSBwcml2YXRlIHJlYWRvbmx5IGZvcm1WaWV3TW9kZWw6IEZvcm1WaWV3TW9kZWwsXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KEZPUk1fQ1VTVE9NX0NPTVBPTkVOVF9UT0tFTilcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm1DdXN0b21Db21wb25lbnRDb25maWc6IEZvcm1DdXN0b21Db21wb25lbnRDb25maWdcbiAgKSB7XG4gICAgdGhpcy5fZm9ybUN1c3RvbUNvbXBvbmVudENvbmZpZyQubmV4dChmb3JtQ3VzdG9tQ29tcG9uZW50Q29uZmlnKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFByb2Nlc3NMaW5rKCk6IHZvaWQge1xuICAgIHRoaXMuJGxvYWRpbmcuc2V0KHRydWUpO1xuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMucHJvY2Vzc0RlZmluaXRpb25JZCQsIHRoaXMuZG9jdW1lbnRJZCRdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHN3aXRjaE1hcCgoW3Byb2Nlc3NEZWZpbml0aW9uSWQsIGRvY3VtZW50SWRdKSA9PlxuICAgICAgICAgIHRoaXMucHJvY2Vzc1NlcnZpY2UuZ2V0UHJvY2Vzc0RlZmluaXRpb25TdGFydFByb2Nlc3NMaW5rKFxuICAgICAgICAgICAgcHJvY2Vzc0RlZmluaXRpb25JZCA/PyAnJyxcbiAgICAgICAgICAgIGRvY3VtZW50SWQgPz8gJycsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShzdGFydFByb2Nlc3NSZXN1bHQgPT4ge1xuICAgICAgICBpZiAoc3RhcnRQcm9jZXNzUmVzdWx0KSB7XG4gICAgICAgICAgdGhpcy5pc1VJQ29tcG9uZW50ID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5pc0Zvcm1WaWV3TW9kZWwgPSBmYWxzZTtcbiAgICAgICAgICBzd2l0Y2ggKHN0YXJ0UHJvY2Vzc1Jlc3VsdC50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdmb3JtJzpcbiAgICAgICAgICAgICAgdGhpcy5mb3JtRGVmaW5pdGlvbiQubmV4dChzdGFydFByb2Nlc3NSZXN1bHQucHJvcGVydGllcy5wcmVmaWxsZWRGb3JtKTtcbiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzTGlua0lkJC5uZXh0KHN0YXJ0UHJvY2Vzc1Jlc3VsdC5wcm9jZXNzTGlua0lkKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdmb3JtLWZsb3cnOlxuICAgICAgICAgICAgICB0aGlzLmZvcm1GbG93SW5zdGFuY2VJZCQubmV4dChcbiAgICAgICAgICAgICAgICBzdGFydFByb2Nlc3NSZXN1bHQucHJvcGVydGllcy5mb3JtRmxvd0luc3RhbmNlSWQgPz8gbnVsbFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2Zvcm0tdmlldy1tb2RlbCc6XG4gICAgICAgICAgICAgIHRoaXMuZm9ybURlZmluaXRpb24kLm5leHQoc3RhcnRQcm9jZXNzUmVzdWx0LnByb3BlcnRpZXMuZm9ybURlZmluaXRpb24gPz8gbnVsbCk7XG4gICAgICAgICAgICAgIHRoaXMuc2V0Rm9ybVZpZXdNb2RlbENvbXBvbmVudChzdGFydFByb2Nlc3NSZXN1bHQucHJvcGVydGllcy5mb3JtTmFtZSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndWktY29tcG9uZW50JzpcbiAgICAgICAgICAgICAgdGhpcy5zZXRGb3JtQ3VzdG9tQ29tcG9uZW50KHN0YXJ0UHJvY2Vzc1Jlc3VsdC5wcm9wZXJ0aWVzLmNvbXBvbmVudEtleSk7XG4gICAgICAgICAgICAgIHRoaXMuaXNVSUNvbXBvbmVudCA9IHRydWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLiRsb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvcGVuTW9kYWwocHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbjogUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbiwgZG9jdW1lbnRJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5kb2N1bWVudElkJC5uZXh0KGRvY3VtZW50SWQpO1xuICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQubmV4dChwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uLmlkLmRvY3VtZW50RGVmaW5pdGlvbklkLm5hbWUpO1xuICAgIHRoaXMucHJvY2Vzc0RlZmluaXRpb25LZXkkLm5leHQocHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbi5pZC5wcm9jZXNzRGVmaW5pdGlvbktleSk7XG4gICAgdGhpcy5wcm9jZXNzRGVmaW5pdGlvbklkJC5uZXh0KHByb2Nlc3NEb2N1bWVudERlZmluaXRpb24ubGF0ZXN0VmVyc2lvbklkKTtcbiAgICB0aGlzLnByb2Nlc3NOYW1lJC5uZXh0KHByb2Nlc3NEb2N1bWVudERlZmluaXRpb24ucHJvY2Vzc05hbWUpO1xuXG4gICAgY29uc3QgZm9ybWlvQmVmb3JlU3VibWl0OiBGb3JtaW9CZWZvcmVTdWJtaXQgPSBmdW5jdGlvbiAoc3VibWlzc2lvbiwgY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrKG51bGwsIHN1Ym1pc3Npb24pO1xuICAgIH07XG5cbiAgICBjb25zdCBvcHRpb25zID0gbmV3IEZvcm1pb09wdGlvbnNJbXBsKCk7XG4gICAgb3B0aW9ucy5kaXNhYmxlQWxlcnRzID0gdHJ1ZTtcbiAgICBvcHRpb25zLnNldEhvb2tzKGZvcm1pb0JlZm9yZVN1Ym1pdCk7XG5cbiAgICB0aGlzLm9wdGlvbnMkLm5leHQob3B0aW9ucyk7XG5cbiAgICB0aGlzLmxvYWRQcm9jZXNzTGluaygpO1xuICAgIHRoaXMub3BlbkNkc01vZGFsKCk7XG4gIH1cblxuICBwdWJsaWMgb25TdWJtaXQoc3VibWlzc2lvbjogRm9ybWlvU3VibWlzc2lvbik6IHZvaWQge1xuICAgIHRoaXMuZm9ybWlvU3VibWlzc2lvbiQubmV4dChzdWJtaXNzaW9uKTtcblxuICAgIGlmICh0aGlzLnByb2Nlc3NMaW5rSWQkLmdldFZhbHVlKCkpIHtcbiAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMucHJvY2Vzc0xpbmtJZCQsIHRoaXMuZG9jdW1lbnRJZCRdKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgIHN3aXRjaE1hcCgoW3Byb2Nlc3NMaW5rSWQsIGRvY3VtZW50SWRdKSA9PlxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzTGlua1NlcnZpY2Uuc3VibWl0Rm9ybShwcm9jZXNzTGlua0lkLCBzdWJtaXNzaW9uLmRhdGEsIGRvY3VtZW50SWQgPz8gJycpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChmb3JtU3VibWlzc2lvblJlc3VsdDogRm9ybVN1Ym1pc3Npb25SZXN1bHQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZm9ybVN1Ym1pdHRlZCgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6IGVycm9ycyA9PiB7XG4gICAgICAgICAgICB0aGlzLmZvcm0uc2hvd0Vycm9ycyhlcnJvcnMpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmb3JtU3VibWl0dGVkKCk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2VDZHNNb2RhbCgpO1xuICAgIHRoaXMuZm9ybVN1Ym1pdC5lbWl0KCk7XG4gIH1cblxuICBwdWJsaWMgZ290b0Zvcm1MaW5rU2NyZWVuKCk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2VDZHNNb2RhbCgpO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsncHJvY2Vzcy1saW5rcyddLCB7XG4gICAgICBxdWVyeVBhcmFtczoge3Byb2Nlc3M6IHRoaXMucHJvY2Vzc0RlZmluaXRpb25LZXkkLmdldFZhbHVlKCl9LFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uQ2xvc2VTZWxlY3QoKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZUNkc01vZGFsKCk7XG4gIH1cblxuICBwcml2YXRlIHNldEZvcm1WaWV3TW9kZWxDb21wb25lbnQoZm9ybU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5mb3JtVmlld01vZGVsLmNvbXBvbmVudCB8fCAhZm9ybU5hbWUpIHJldHVybjtcbiAgICB0aGlzLmZvcm1WaWV3TW9kZWxEeW5hbWljQ29udGFpbmVyLmNsZWFyKCk7XG4gICAgY29uc3QgZm9ybVZpZXdNb2RlbENvbXBvbmVudCA9IHRoaXMuZm9ybVZpZXdNb2RlbER5bmFtaWNDb250YWluZXIuY3JlYXRlQ29tcG9uZW50KFxuICAgICAgdGhpcy5mb3JtVmlld01vZGVsLmNvbXBvbmVudFxuICAgICk7XG5cbiAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuZm9ybURlZmluaXRpb24kLFxuICAgICAgdGhpcy5wcm9jZXNzRGVmaW5pdGlvbktleSQsXG4gICAgICB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLFxuICAgICAgdGhpcy5vcHRpb25zJCxcbiAgICAgIHRoaXMuZG9jdW1lbnRJZCQsXG4gICAgXSlcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKChbZm9ybSwgcHJvY2Vzc0RlZmluaXRpb25LZXksIGRvY3VtZW50RGVmaW5pdGlvbk5hbWUsIG9wdGlvbnMsIGRvY3VtZW50SWRdKSA9PiB7XG4gICAgICAgIGZvcm1WaWV3TW9kZWxDb21wb25lbnQuaW5zdGFuY2UuZm9ybU5hbWUgPSBmb3JtTmFtZTtcbiAgICAgICAgZm9ybVZpZXdNb2RlbENvbXBvbmVudC5pbnN0YW5jZS5mb3JtID0gZm9ybTtcbiAgICAgICAgZm9ybVZpZXdNb2RlbENvbXBvbmVudC5pbnN0YW5jZS5wcm9jZXNzRGVmaW5pdGlvbktleSA9IHByb2Nlc3NEZWZpbml0aW9uS2V5O1xuICAgICAgICBmb3JtVmlld01vZGVsQ29tcG9uZW50Lmluc3RhbmNlLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPSBkb2N1bWVudERlZmluaXRpb25OYW1lO1xuICAgICAgICBmb3JtVmlld01vZGVsQ29tcG9uZW50Lmluc3RhbmNlLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICBmb3JtVmlld01vZGVsQ29tcG9uZW50Lmluc3RhbmNlLmlzU3RhcnRGb3JtID0gdHJ1ZTtcbiAgICAgICAgZm9ybVZpZXdNb2RlbENvbXBvbmVudC5pbnN0YW5jZS5kb2N1bWVudElkID0gZG9jdW1lbnRJZDtcbiAgICAgIH0pO1xuXG4gICAgZm9ybVZpZXdNb2RlbENvbXBvbmVudC5pbnN0YW5jZS5mb3JtU3VibWl0LnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuZm9ybVN1Ym1pdHRlZCgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLmNsb3NlTW9kYWxFdmVudC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBmb3JtVmlld01vZGVsQ29tcG9uZW50LmRlc3Ryb3koKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuaXNGb3JtVmlld01vZGVsID0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Rm9ybUN1c3RvbUNvbXBvbmVudChmb3JtQ3VzdG9tQ29tcG9uZW50S2V5OiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1DdXN0b21Db21wb25lbnREeW5hbWljQ29udGFpbmVyLmNsZWFyKCk7XG4gICAgaWYgKCF0aGlzLmZvcm1DdXN0b21Db21wb25lbnRDb25maWcgfHwgIWZvcm1DdXN0b21Db21wb25lbnRLZXkpIHJldHVybjtcbiAgICB0aGlzLl9mb3JtQ3VzdG9tQ29tcG9uZW50Q29uZmlnJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShmb3JtQ3VzdG9tQ29tcG9uZW50Q29uZmlnID0+IHtcbiAgICAgIGNvbnN0IGN1c3RvbUNvbXBvbmVudCA9IGZvcm1DdXN0b21Db21wb25lbnRDb25maWdbZm9ybUN1c3RvbUNvbXBvbmVudEtleV07XG4gICAgICBjb25zdCByZW5kZXJlZENvbXBvbmVudCA9IHRoaXMuZm9ybUN1c3RvbUNvbXBvbmVudER5bmFtaWNDb250YWluZXIuY3JlYXRlQ29tcG9uZW50KFxuICAgICAgICBjdXN0b21Db21wb25lbnRcbiAgICAgICkgYXMgQ29tcG9uZW50UmVmPEZvcm1DdXN0b21Db21wb25lbnQ+O1xuXG4gICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLnByb2Nlc3NEZWZpbml0aW9uS2V5JCwgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJF0pXG4gICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKFtwcm9jZXNzRGVmaW5pdGlvbktleSwgZG9jdW1lbnREZWZpbml0aW9uTmFtZV0pID0+IHtcbiAgICAgICAgICByZW5kZXJlZENvbXBvbmVudC5pbnN0YW5jZS5wcm9jZXNzRGVmaW5pdGlvbktleSA9IHByb2Nlc3NEZWZpbml0aW9uS2V5O1xuICAgICAgICAgIHJlbmRlcmVkQ29tcG9uZW50Lmluc3RhbmNlLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPSBkb2N1bWVudERlZmluaXRpb25OYW1lO1xuICAgICAgICB9KTtcblxuICAgICAgcmVuZGVyZWRDb21wb25lbnQuaW5zdGFuY2Uuc3VibWl0dGVkRXZlbnQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5mb3JtU3VibWl0dGVkKCk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgIHRoaXMuY2xvc2VNb2RhbEV2ZW50LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgcmVuZGVyZWRDb21wb25lbnQuZGVzdHJveSgpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VDZHNNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGFsT3BlbiQubmV4dChmYWxzZSk7XG4gICAgdGhpcy5jbG9zZU1vZGFsRXZlbnQuZW1pdCgpO1xuICAgIHRoaXMucmVzZXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkNkc01vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMubW9kYWxPcGVuJC5uZXh0KHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldCgpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZm9ybURlZmluaXRpb24kLm5leHQobnVsbCk7XG4gICAgICB0aGlzLmZvcm1GbG93SW5zdGFuY2VJZCQubmV4dChudWxsKTtcbiAgICB9LCBDQVJCT05fQ09OU1RBTlRTLm1vZGFsQW5pbWF0aW9uTXMpO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxjZHMtbW9kYWwgW29wZW5dPVwibW9kYWxPcGVuJCB8IGFzeW5jXCIgdmFsdGltb0Nkc01vZGFsIHNpemU9XCJzbVwiPlxuICA8Y2RzLW1vZGFsLWhlYWRlciBbc2hvd0Nsb3NlQnV0dG9uXT1cInRydWVcIiAoY2xvc2VTZWxlY3QpPVwib25DbG9zZVNlbGVjdCgpXCIgW2Nkc0xheWVyXT1cIjFcIlxuICAgID48aDMgY2RzTW9kYWxIZWFkZXJIZWFkaW5nPlxuICAgICAge3tcbiAgICAgICAgKHByb2Nlc3NEZWZpbml0aW9uS2V5JCB8IGFzeW5jIHwgdHJhbnNsYXRlKSAhPT0gKHByb2Nlc3NEZWZpbml0aW9uS2V5JCB8IGFzeW5jKVxuICAgICAgICAgID8gKHByb2Nlc3NEZWZpbml0aW9uS2V5JCB8IGFzeW5jIHwgdHJhbnNsYXRlKVxuICAgICAgICAgIDogKHByb2Nlc3NOYW1lJCB8IGFzeW5jKVxuICAgICAgfX1cbiAgICA8L2gzPlxuICA8L2Nkcy1tb2RhbC1oZWFkZXI+XG5cbiAgPHNlY3Rpb24gY2RzTW9kYWxDb250ZW50IFtjZHNMYXllcl09XCIxXCI+XG4gICAgPG5nLXRlbXBsYXRlICNmb3JtVmlld01vZGVsQ29tcG9uZW50PjwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNmb3JtQ3VzdG9tQ29tcG9uZW50PjwvbmctdGVtcGxhdGU+XG5cbiAgICBAaWYgKCRsb2FkaW5nKCkpIHtcbiAgICAgIDxjZHMtbG9hZGluZz48L2Nkcy1sb2FkaW5nPlxuICAgIH0gQGVsc2Uge1xuICAgICAgQGlmICghaXNGb3JtVmlld01vZGVsICYmICFpc1VJQ29tcG9uZW50ICYmIChmb3JtRGVmaW5pdGlvbiQgfCBhc3luYykpIHtcbiAgICAgICAgPHZhbHRpbW8tZm9ybS1pb1xuICAgICAgICAgICNmb3JtXG4gICAgICAgICAgW3N1Ym1pc3Npb25dPVwic3VibWlzc2lvbiQgfCBhc3luY1wiXG4gICAgICAgICAgW2Zvcm1dPVwiZm9ybURlZmluaXRpb24kIHwgYXN5bmNcIlxuICAgICAgICAgIFtvcHRpb25zXT1cIm9wdGlvbnMkIHwgYXN5bmNcIlxuICAgICAgICAgIChzdWJtaXQpPVwib25TdWJtaXQoJGV2ZW50KVwiXG4gICAgICAgID48L3ZhbHRpbW8tZm9ybS1pbz5cbiAgICAgIH1cblxuICAgICAgQGlmIChmb3JtRmxvd0luc3RhbmNlSWQkIHwgYXN5bmMpIHtcbiAgICAgICAgPHZhbHRpbW8tZm9ybS1mbG93XG4gICAgICAgICAgI2Zvcm1GbG93XG4gICAgICAgICAgW2Zvcm1GbG93SW5zdGFuY2VJZF09XCJmb3JtRmxvd0luc3RhbmNlSWQkIHwgYXN5bmNcIlxuICAgICAgICAgIChmb3JtRmxvd0NvbXBsZXRlKT1cImZvcm1TdWJtaXR0ZWQoKVwiXG4gICAgICAgID48L3ZhbHRpbW8tZm9ybS1mbG93PlxuICAgICAgfVxuXG4gICAgICBAaWYgKCEoZm9ybURlZmluaXRpb24kIHwgYXN5bmMpICYmICEoZm9ybUZsb3dJbnN0YW5jZUlkJCB8IGFzeW5jKSAmJiAhaXNVSUNvbXBvbmVudCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiYmctd2FybmluZyB0ZXh0LWJsYWNrIG1iLTAgcC0zIHRleHQtY2VudGVyXCI+XG4gICAgICAgICAge3tcbiAgICAgICAgICAgIGlzQWRtaW5cbiAgICAgICAgICAgICAgPyAoJ2Zvcm1NYW5hZ2VtZW50Lm5vRm9ybURlZmluaXRpb25Gb3VuZEFkbWluJyB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICAgICAgOiAoJ2Zvcm1NYW5hZ2VtZW50Lm5vRm9ybURlZmluaXRpb25Gb3VuZFVzZXInIHwgdHJhbnNsYXRlKVxuICAgICAgICAgIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItMCBtdC00IHAtMyB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgYnRuLXNwYWNlXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImdvdG9Gb3JtTGlua1NjcmVlbigpXCJcbiAgICAgICAgICAgIGlkPVwiZm9ybS1saW5rLWJ1dHRvblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgJ2Zvcm1NYW5hZ2VtZW50LmdvdG9Qcm9jZXNzTGlua3NCdXR0b24nIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIH1cbiAgPC9zZWN0aW9uPlxuPC9jZHMtbW9kYWw+XG4iXX0=