@hmcts/ccd-case-ui-toolkit 7.2.50-remove-flag-icp-enabled → 7.2.50

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.
@@ -1,5 +1,6 @@
1
1
  import { Component } from '@angular/core';
2
2
  import { ActivatedRoute } from '@angular/router';
3
+ import { Router } from '@angular/router';
3
4
  import { CaseFieldService, FieldsUtils, MultipageComponentStateService, FormValidatorsService, OrderService, ProfileNotifier } from '../../../services';
4
5
  import { CallbackErrorsComponent } from '../../error';
5
6
  import { PaletteContext } from '../../palette';
@@ -311,6 +312,7 @@ export class CaseEditSubmitComponent {
311
312
  formValidatorsService;
312
313
  caseFlagStateService;
313
314
  linkedCasesService;
315
+ router;
314
316
  eventTrigger;
315
317
  editForm;
316
318
  triggerText;
@@ -346,7 +348,7 @@ export class CaseEditSubmitComponent {
346
348
  // not been disabled.
347
349
  return this.caseEdit.isSubmitting || this.hasErrors;
348
350
  }
349
- constructor(caseEdit, fieldsUtils, caseFieldService, route, orderService, profileNotifier, multipageComponentStateService, formValidatorsService, caseFlagStateService, linkedCasesService) {
351
+ constructor(caseEdit, fieldsUtils, caseFieldService, route, orderService, profileNotifier, multipageComponentStateService, formValidatorsService, caseFlagStateService, linkedCasesService, router) {
350
352
  this.caseEdit = caseEdit;
351
353
  this.fieldsUtils = fieldsUtils;
352
354
  this.caseFieldService = caseFieldService;
@@ -357,12 +359,14 @@ export class CaseEditSubmitComponent {
357
359
  this.formValidatorsService = formValidatorsService;
358
360
  this.caseFlagStateService = caseFlagStateService;
359
361
  this.linkedCasesService = linkedCasesService;
362
+ this.router = router;
360
363
  }
361
364
  ngOnInit() {
362
365
  this.profileSubscription = this.profileNotifier.profile.subscribe((_) => this.profile = _);
363
366
  this.eventTrigger = this.caseEdit.eventTrigger;
364
367
  this.triggerText = this.eventTrigger.end_button_label || CallbackErrorsComponent.TRIGGER_TEXT_SUBMIT;
365
368
  this.editForm = this.caseEdit.form;
369
+ this.redirectIfFormEmpty();
366
370
  this.wizard = this.caseEdit.wizard;
367
371
  this.showSummaryFields = this.sortFieldsByShowSummaryContent(this.eventTrigger.case_fields);
368
372
  this.caseEdit.isSubmitting = false;
@@ -599,7 +603,14 @@ export class CaseEditSubmitComponent {
599
603
  }
600
604
  return 'Cancel';
601
605
  }
602
- static ɵfac = function CaseEditSubmitComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CaseEditSubmitComponent)(i0.ɵɵdirectiveInject(i1.CaseEditComponent), i0.ɵɵdirectiveInject(i2.FieldsUtils), i0.ɵɵdirectiveInject(i2.CaseFieldService), i0.ɵɵdirectiveInject(i3.ActivatedRoute), i0.ɵɵdirectiveInject(i2.OrderService), i0.ɵɵdirectiveInject(i2.ProfileNotifier), i0.ɵɵdirectiveInject(i2.MultipageComponentStateService), i0.ɵɵdirectiveInject(i2.FormValidatorsService), i0.ɵɵdirectiveInject(i4.CaseFlagStateService), i0.ɵɵdirectiveInject(i5.LinkedCasesService)); };
606
+ redirectIfFormEmpty() {
607
+ const data = this.editForm?.getRawValue()?.data;
608
+ const isEmpty = !data || (typeof data === 'object' && Object.keys(data).length === 0);
609
+ if (isEmpty) {
610
+ this.router.navigate(['/cases/case-filter']);
611
+ }
612
+ }
613
+ static ɵfac = function CaseEditSubmitComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CaseEditSubmitComponent)(i0.ɵɵdirectiveInject(i1.CaseEditComponent), i0.ɵɵdirectiveInject(i2.FieldsUtils), i0.ɵɵdirectiveInject(i2.CaseFieldService), i0.ɵɵdirectiveInject(i3.ActivatedRoute), i0.ɵɵdirectiveInject(i2.OrderService), i0.ɵɵdirectiveInject(i2.ProfileNotifier), i0.ɵɵdirectiveInject(i2.MultipageComponentStateService), i0.ɵɵdirectiveInject(i2.FormValidatorsService), i0.ɵɵdirectiveInject(i4.CaseFlagStateService), i0.ɵɵdirectiveInject(i5.LinkedCasesService), i0.ɵɵdirectiveInject(i3.Router)); };
603
614
  static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CaseEditSubmitComponent, selectors: [["ccd-case-edit-submit"]], decls: 25, vars: 24, consts: [["titleBlock", ""], ["idBlock", ""], [1, "govuk-heading-l"], [4, "ngIf", "ngIfThen", "ngIfElse"], [3, "error"], [3, "callbackErrorsContext", "callbackErrorsSubject"], [1, "check-your-answers", 3, "submit", "formGroup"], [4, "ngIf"], [3, "eventCompletionParams", "eventCanBeCompleted", 4, "ngIf"], [1, "form-group", "form-group-related"], ["type", "button", 1, "button", "button-secondary", 3, "click", "disabled"], ["type", "submit", 1, "button", 3, "disabled"], [1, "cancel"], ["href", "javascript:void(0)", 3, "click"], [3, "content"], ["class", "heading-h2", 4, "ngIf"], [1, "heading-h2"], ["class", "text-16", 4, "ngIf"], ["aria-describedby", "check your answers table", 1, "form-table"], [4, "ngFor", "ngForOf"], [1, "text-16"], ["ccdLabelSubstitutor", "", 3, "caseField", "hidden", "formGroup", "contextFields"], ["class", "valign-top case-field-label", 4, "ngIf"], [1, "form-cell", "case-field-content", "text-16"], [3, "formGroup", "topLevelFormGroup", "caseField", "context", "caseFields"], [1, "valign-top", "case-field-label"], [1, "valign-top", "check-your-answers__change", "case-field-change"], ["href", "javascript:void(0)", 3, "click", 4, "ngIf"], ["aria-describedby", "summary fields table", 1, "summary-fields"], [3, "ngSwitch"], ["ccdLabelSubstitutor", "", 3, "caseField", "formGroup", "contextFields", 4, "ngSwitchCase"], ["class", "compound-field", "ccdLabelSubstitutor", "", 3, "caseField", "formGroup", "contextFields", 4, "ngSwitchCase"], ["ccdLabelSubstitutor", "", 3, "caseField", "formGroup", "contextFields"], ["id", "summary-field-label"], [1, "form-cell"], [3, "formGroup", "caseField"], ["ccdLabelSubstitutor", "", 1, "compound-field", 3, "caseField", "formGroup", "contextFields"], ["colspan", "2"], [3, "formGroup", "caseField", "caseFields"], ["id", "fieldset-event", "formGroupName", "event"], [2, "display", "none"], [1, "form-group", 3, "ngClass"], ["for", "field-trigger-summary", 1, "form-label"], [1, "form-hint"], ["class", "error-message", 4, "ngIf"], ["type", "text", "id", "field-trigger-summary", "formControlName", "summary", "maxlength", "1024", 1, "form-control", "bottom-30", "width-50", 3, "ngClass"], ["for", "field-trigger-description", 1, "form-label"], ["id", "field-trigger-description", "formControlName", "description", "maxlength", "65536", 1, "form-control", "bottom-30", "width-50", 3, "ngClass"], [1, "error-message"], [3, "eventCanBeCompleted", "eventCompletionParams"]], template: function CaseEditSubmitComponent_Template(rf, ctx) { if (rf & 1) {
604
615
  const _r1 = i0.ɵɵgetCurrentView();
605
616
  i0.ɵɵelementStart(0, "div")(1, "h1", 2);
@@ -662,6 +673,6 @@ export class CaseEditSubmitComponent {
662
673
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CaseEditSubmitComponent, [{
663
674
  type: Component,
664
675
  args: [{ selector: 'ccd-case-edit-submit', template: "<div>\n <!-- Event trigger name -->\n <h1 class=\"govuk-heading-l\">{{eventTrigger.name | rpxTranslate}}</h1>\n\n <!--Case ID or Title -->\n <div *ngIf=\"getCaseTitle(); then titleBlock; else idBlock\"></div>\n <ng-template #titleBlock>\n <ccd-markdown [content]=\"getCaseTitle() | ccdCaseTitle: contextFields : editForm.controls['data'] | rpxTranslate\"></ccd-markdown>\n </ng-template>\n <ng-template #idBlock>\n <h2 *ngIf=\"getCaseId()\" class=\"heading-h2\">#{{ getCaseId() | ccdCaseReference }}</h2>\n </ng-template>\n\n <ccd-case-edit-generic-errors [error]=\"caseEdit.error\"></ccd-case-edit-generic-errors>\n\n <ccd-callback-errors [callbackErrorsSubject]=\"caseEdit.callbackErrorsSubject\"\n (callbackErrorsContext)=\"callbackErrorsNotify($event)\"></ccd-callback-errors>\n\n <form class=\"check-your-answers\" [formGroup]=\"editForm\" (submit)=\"submit()\">\n <div *ngIf=\"!caseEdit.isEventCompletionChecksRequired\">\n <ng-container *ngIf=\"checkYourAnswerFieldsToDisplayExists()\">\n <h2 class=\"heading-h2\">{{pageTitle | rpxTranslate }}</h2>\n <span class=\"text-16\" *ngIf=\"!caseEdit.isCaseFlagSubmission\">{{'Check the information below carefully.' | rpxTranslate}}</span>\n\n <table class=\"form-table\" aria-describedby=\"check your answers table\">\n <tbody>\n <ng-container *ngFor=\"let page of wizard.pages\">\n <ng-container *ngIf=\"isShown(page)\">\n <ng-container *ngFor=\"let field of page\n | ccdPageFields: editForm\n | ccdReadFieldsFilter: false :undefined :true :allFieldsValues\n | ccdCYAPageLabelFilter\">\n <ng-container *ngIf=\"canShowFieldInCYA(field)\">\n <tr ccdLabelSubstitutor [caseField]=\"field\" [hidden]=\"field.hidden\"\n [formGroup]=\"editForm.controls['data']\" [contextFields]=\"contextFields\">\n <th *ngIf=\"!isLabel(field) && !caseEdit.isCaseFlagSubmission\" class=\"valign-top case-field-label\">\n <span class=\"text-16\">{{field.label | rpxTranslate}}</span>\n </th>\n <td class=\"form-cell case-field-content text-16\" [attr.colspan]=\"isLabel(field) ? '2' : '1'\">\n <ccd-field-read\n [formGroup]=\"editForm.controls['data']\" [topLevelFormGroup]=\"editForm.controls['data']\"\n [caseField]=\"summaryCaseField(field)\" [context]=\"paletteContext\" [caseFields]=\"contextFields\"></ccd-field-read>\n </td>\n <ng-container *ngIf=\"!caseEdit.isCaseFlagSubmission\">\n <td class=\"valign-top check-your-answers__change case-field-change\">\n <a *ngIf=\"isChangeAllowed(field)\" (click)=\"navigateToPage(page.id)\"\n href=\"javascript:void(0)\">\n <span class=\"text-16\" attr.aria-label=\"{{'Change' | rpxTranslate}} {{ field.label | rpxTranslate }}\">\n {{'Change' | rpxTranslate}}\n </span>\n </a>\n </td>\n </ng-container>\n </tr>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </tbody>\n </table>\n </ng-container>\n <ng-container *ngIf=\"readOnlySummaryFieldsToDisplayExists()\">\n\n <table class=\"summary-fields\" aria-describedby=\"summary fields table\">\n <tbody>\n <ng-container *ngFor=\"let field of showSummaryFields\">\n <ng-container [ngSwitch]=\"!(field | ccdIsCompound)\">\n <tr *ngSwitchCase=\"true\" ccdLabelSubstitutor [caseField]=\"field\" [formGroup]=\"editForm.controls['data']\" [contextFields]=\"contextFields\">\n <th id=\"summary-field-label\">{{field.label}}</th>\n <td class=\"form-cell\">\n <ccd-field-read [formGroup]=\"editForm.controls['data']\" [caseField]=\"summaryCaseField(field)\"></ccd-field-read>\n </td>\n </tr>\n <tr *ngSwitchCase=\"false\" class=\"compound-field\" ccdLabelSubstitutor [caseField]=\"field\" [formGroup]=\"editForm.controls['data']\" [contextFields]=\"contextFields\">\n <td colspan=\"2\">\n <ccd-field-read [formGroup]=\"editForm.controls['data']\" [caseField]=\"summaryCaseField(field)\" [caseFields]=\"contextFields\"></ccd-field-read>\n </td>\n </tr>\n </ng-container>\n </ng-container>\n </tbody>\n </table>\n </ng-container>\n <ng-container *ngIf=\"showEventNotes()\">\n <fieldset id=\"fieldset-event\" formGroupName=\"event\">\n <legend style=\"display: none;\"></legend>\n <div class=\"form-group\" [ngClass]=\"{'form-group-error': !!summary && !summary.valid && (summary.dirty || summary.touched)}\">\n <label for=\"field-trigger-summary\" class=\"form-label\">\n Event summary (optional)\n <span class=\"form-hint\">A few words describing the purpose of the event.</span>\n </label>\n <span class=\"error-message\" *ngIf=\"summary?.errors && (summary.dirty || summary.touched)\">\n {{summary.errors | ccdFirstError: eventSummaryLabel | rpxTranslate}}\n </span>\n <input type=\"text\" id=\"field-trigger-summary\" class=\"form-control bottom-30 width-50\"\n [ngClass]=\"{'govuk-input--error': summary?.errors && (summary.dirty || summary.touched)}\" formControlName=\"summary\" maxlength=\"1024\">\n </div>\n <div class=\"form-group\" [ngClass]=\"{'form-group-error': !!description && !description.valid && (description.dirty || description.touched)}\">\n <label for=\"field-trigger-description\" class=\"form-label\">Event description (optional)</label>\n <span class=\"error-message\" *ngIf=\"description?.errors && (description.dirty || description.touched)\">\n {{description.errors | ccdFirstError: eventDescriptionLabel | rpxTranslate}}\n </span>\n <textarea id=\"field-trigger-description\" class=\"form-control bottom-30 width-50\" formControlName=\"description\"\n [ngClass]=\"{'govuk-input--error': description?.errors && (description.dirty || description.touched)}\" maxlength=\"65536\"></textarea>\n </div>\n </fieldset>\n </ng-container>\n </div>\n <ccd-case-event-completion *ngIf=\"caseEdit.isEventCompletionChecksRequired\"\n [eventCompletionParams]=\"caseEdit.eventCompletionParams\"\n (eventCanBeCompleted)=\"onEventCanBeCompleted($event)\">\n </ccd-case-event-completion>\n <div class=\"form-group form-group-related\">\n <button class=\"button button-secondary\" type=\"button\" [disabled]=\"!hasPrevious() || caseEdit.isSubmitting\" (click)=\"previous()\">\n {{'Previous' | rpxTranslate}}\n </button>\n <button type=\"submit\" [disabled]=\"isDisabled\" class=\"button\">\n {{triggerText | rpxTranslate}}\n </button>\n </div>\n <p class=\"cancel\">\n <a (click)=\"cancel()\" href=\"javascript:void(0)\" [class.disabled]=\"caseEdit.isSubmitting\">{{getCancelText() | rpxTranslate}}</a>\n </p>\n </form>\n</div>\n\n", styles: ["#fieldset-case-data{margin-bottom:30px}#fieldset-case-data th{width:1%;white-space:nowrap;vertical-align:top}.compound-field td{padding:0}#confirmation-header{width:630px;background-color:#17958b;border:solid 1px #979797;color:#fff;text-align:center}#confirmation-body{width:630px;background-color:#fff}.valign-top{vertical-align:top}.summary-fields{margin-bottom:30px}.summary-fields tbody tr th,.summary-fields tbody tr td{border-bottom:0px}a.disabled{pointer-events:none;cursor:default}.case-field-label{width:45%}.case-field-content{width:50%}.no-bottom-border{border-bottom:none}.case-field-change{width:5%}\n"] }]
665
- }], () => [{ type: i1.CaseEditComponent }, { type: i2.FieldsUtils }, { type: i2.CaseFieldService }, { type: i3.ActivatedRoute }, { type: i2.OrderService }, { type: i2.ProfileNotifier }, { type: i2.MultipageComponentStateService }, { type: i2.FormValidatorsService }, { type: i4.CaseFlagStateService }, { type: i5.LinkedCasesService }], null); })();
666
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CaseEditSubmitComponent, { className: "CaseEditSubmitComponent", filePath: "lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.ts", lineNumber: 30 }); })();
667
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS1lZGl0LXN1Ym1pdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2QtY2FzZS11aS10b29sa2l0L3NyYy9saWIvc2hhcmVkL2NvbXBvbmVudHMvY2FzZS1lZGl0b3IvY2FzZS1lZGl0LXN1Ym1pdC9jYXNlLWVkaXQtc3VibWl0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9jYXNlLWVkaXRvci9jYXNlLWVkaXQtc3VibWl0L2Nhc2UtZWRpdC1zdWJtaXQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUU3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFJakQsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixXQUFXLEVBQ1gsOEJBQThCLEVBQzlCLHFCQUFxQixFQUNyQixZQUFZLEVBQ1osZUFBZSxFQUNoQixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSx1QkFBdUIsRUFBeUIsTUFBTSxhQUFhLENBQUM7QUFDN0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNuRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVyRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQzs7Ozs7Ozs7Ozs7SUNoQjVGLHNCQUFpRTs7O0lBRS9ELG1DQUFpSTs7Ozs7SUFBbkgsbUpBQW1HOzs7SUFHakgsOEJBQTJDO0lBQUEsWUFBcUM7O0lBQUEsaUJBQUs7OztJQUExQyxjQUFxQztJQUFyQyx3RUFBcUM7OztJQUFoRixxRkFBMkM7OztJQUF0Qyx5Q0FBaUI7OztJQVlsQixnQ0FBNkQ7SUFBQSxZQUEyRDs7SUFBQSxpQkFBTzs7SUFBbEUsY0FBMkQ7SUFBM0Qsb0ZBQTJEOzs7SUFjMUcsQUFERiw4QkFBa0csZUFDMUU7SUFBQSxZQUE4Qjs7SUFDdEQsQUFEc0QsaUJBQU8sRUFDeEQ7OztJQURtQixlQUE4QjtJQUE5QiwwREFBOEI7Ozs7SUFTbEQsNkJBQzRCO0lBRE0sNlRBQVMsaUNBQXVCLEtBQUM7SUFFakUsZ0NBQXFHOzs7SUFDbkcsWUFDRjs7SUFDRixBQURFLGlCQUFPLEVBQ0w7OztJQUhvQixjQUE4RTtJQUE5RSwySEFBOEU7SUFDbEcsZUFDRjtJQURFLCtEQUNGOzs7SUFOTiw2QkFBcUQ7SUFDbkQsOEJBQW9FO0lBQ2xFLHVLQUM0QjtJQUs5QixpQkFBSzs7Ozs7SUFOQyxlQUE0QjtJQUE1Qix1REFBNEI7OztJQWJ4Qyw2QkFBK0M7SUFDN0MsOEJBQzRFO0lBQzFFLHlKQUFrRztJQUdsRyw4QkFBNkY7SUFDM0YscUNBRWlIO0lBQ25ILGlCQUFLO0lBQ0wsNEtBQXFEO0lBVXZELGlCQUFLOzs7OztJQXBCbUIsY0FBbUI7SUFDQyxBQUF4QyxBQUR3QyxBQUFwQixvQ0FBbUIsMkJBQXdCLCtDQUN4Qix1Q0FBZ0M7SUFDcEUsY0FBdUQ7SUFBdkQseUZBQXVEO0lBR1gsY0FBMkM7O0lBRXhGLGNBQXVDO0lBQzBCLEFBQTNCLEFBQXRDLEFBRHdDLEFBQXhDLDREQUF1Qyx1REFBZ0QsZ0RBQ2xELGtDQUEyQixvQ0FBNkI7SUFFbEYsY0FBb0M7SUFBcEMsNERBQW9DOzs7SUFmekQsNkJBR3lCO0lBQ3ZCLDhKQUErQzs7Ozs7SUFBaEMsY0FBOEI7SUFBOUIseURBQThCOzs7SUFMakQsNkJBQW9DO0lBQ2xDLCtJQUd5Qjs7Ozs7Ozs7SUFITyxjQUdUO0lBSFMsMEtBR1Q7OztJQUwzQiw2QkFBZ0Q7SUFDOUMsZ0lBQW9DOzs7OztJQUFyQixjQUFtQjtJQUFuQiw4Q0FBbUI7OztJQVB4Qyw2QkFBNkQ7SUFDM0QsOEJBQXVCO0lBQUEsWUFBNkI7O0lBQUEsaUJBQUs7SUFDekQsaUdBQTZEO0lBRzNELEFBREYsaUNBQXNFLFlBQzdEO0lBQ1AsaUhBQWdEO0lBaUNsRCxBQURFLGlCQUFRLEVBQ0Y7Ozs7SUF0Q2UsZUFBNkI7SUFBN0IsNERBQTZCO0lBQzdCLGVBQW9DO0lBQXBDLDREQUFvQztJQUkxQixlQUFlO0lBQWYsNkNBQWU7OztJQTBDcEMsQUFERiw4QkFBeUksYUFDMUc7SUFBQSxZQUFlO0lBQUEsaUJBQUs7SUFDakQsOEJBQXNCO0lBQ3BCLHFDQUErRztJQUVuSCxBQURFLGlCQUFLLEVBQ0Y7Ozs7SUFMb0csQUFBeEMsQUFBcEIsb0NBQW1CLCtDQUF3Qyx1Q0FBZ0M7SUFDekcsZUFBZTtJQUFmLG9DQUFlO0lBRTFCLGVBQXVDO0lBQUMsQUFBeEMsNERBQXVDLGdEQUFzQzs7O0lBSS9GLEFBREYsOEJBQWlLLGFBQy9JO0lBQ2QscUNBQTRJO0lBRWhKLEFBREUsaUJBQUssRUFDRjs7OztJQUo0SCxBQUF4QyxBQUFwQixvQ0FBbUIsK0NBQXdDLHVDQUFnQztJQUU1SSxlQUF1QztJQUF1QyxBQUF0QyxBQUF4Qyw0REFBdUMsZ0RBQXNDLG9DQUE2Qjs7O0lBVGhJLEFBREosNkJBQXNELE9BQ0U7O0lBT2xELEFBTkEsNEdBQXlJLCtGQU13Qjs7OztJQVBySixjQUFxQztJQUFyQywwREFBcUM7SUFDNUMsZUFBa0I7SUFBbEIsbUNBQWtCO0lBTWxCLGNBQW1CO0lBQW5CLG9DQUFtQjs7O0lBWnBDLDZCQUE2RDtJQUd6RCxBQURGLGlDQUFzRSxZQUM3RDtJQUNMLGlIQUFzRDtJQWdCMUQsQUFERSxpQkFBUSxFQUNGOzs7O0lBaEI0QixlQUFvQjtJQUFwQixrREFBb0I7OztJQTBCcEQsZ0NBQTBGO0lBQ3hGLFlBQ0Y7OztJQUFBLGlCQUFPOzs7SUFETCxjQUNGO0lBREUsNEhBQ0Y7OztJQU1BLGdDQUFzRztJQUNwRyxZQUNGOzs7SUFBQSxpQkFBTzs7O0lBREwsY0FDRjtJQURFLG9JQUNGOzs7SUFsQk4sNkJBQXVDO0lBQ3JDLG9DQUFvRDtJQUNsRCw2QkFBd0M7SUFFdEMsQUFERiwrQkFBNEgsZ0JBQ3BFO0lBQ3BELDBDQUNBO0lBQUEsZ0NBQXdCO0lBQUEsZ0VBQWdEO0lBQzFFLEFBRDBFLGlCQUFPLEVBQ3pFO0lBQ1IsaUdBQTBGO0lBRzFGLDRCQUN1STtJQUN6SSxpQkFBTTtJQUVKLEFBREYsZ0NBQTRJLGlCQUNoRjtJQUFBLDZDQUE0QjtJQUFBLGlCQUFRO0lBQzlGLG1HQUFzRztJQUd0RyxnQ0FDcUk7SUFFekksQUFERSxpQkFBTSxFQUNHOzs7O0lBbkJlLGVBQW1HO0lBQW5HLG1KQUFtRztJQUs1RixlQUEyRDtJQUEzRCxrSUFBMkQ7SUFJdEYsY0FBeUY7SUFBekYsaUtBQXlGO0lBRXJFLGNBQW1IO0lBQW5ILG9LQUFtSDtJQUU1RyxlQUF1RTtJQUF2RSxrSkFBdUU7SUFJbEcsY0FBcUc7SUFBckcsa0xBQXFHOzs7SUFwRi9HLDJCQUF1RDtJQWdFckQsQUF0QkEsQUF6Q0EsaUdBQTZELG9GQXlDQSxzRkFzQnRCO0lBd0J6QyxpQkFBTTs7O0lBdkZXLGNBQTRDO0lBQTVDLG9FQUE0QztJQXlDNUMsY0FBNEM7SUFBNUMsb0VBQTRDO0lBc0I1QyxjQUFzQjtJQUF0Qiw4Q0FBc0I7Ozs7SUF5QnZDLHFEQUV3RDtJQUF0RCwrUEFBdUIsb0NBQTZCLEtBQUM7SUFDdkQsaUJBQTRCOzs7SUFGMUIsNkVBQXdEOztBRHRGOUQsV0FBVztBQU1YLE1BQU0sT0FBTyx1QkFBdUI7SUEwQ2hCO0lBQ0M7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBbERaLFlBQVksQ0FBbUI7SUFDL0IsUUFBUSxDQUFZO0lBQ3BCLFdBQVcsQ0FBUztJQUNwQixNQUFNLENBQVM7SUFDZixPQUFPLENBQVU7SUFDakIsaUJBQWlCLENBQWM7SUFDL0IsY0FBYyxHQUFtQixjQUFjLENBQUMsaUJBQWlCLENBQUM7SUFDbEUsbUJBQW1CLENBQWU7SUFDbEMsYUFBYSxDQUFjO0lBQzNCLElBQUksQ0FBTztJQUNYLFNBQVMsQ0FBUztJQUNsQixvQkFBb0IsQ0FBUztJQUM3QixlQUFlLENBQU07SUFDckIsT0FBTyxDQUFrQjtJQUN6QixXQUFXLENBQWtCO0lBQzdCLGlCQUFpQixHQUFXLGVBQWUsQ0FBQztJQUM1QyxxQkFBcUIsR0FBVyxtQkFBbUIsQ0FBQztJQUVwRCxNQUFNLENBQVUscUNBQXFDLEdBQUcsQ0FBQyxDQUFZLEVBQUUsQ0FBWSxFQUFVLEVBQUU7UUFDcEcsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDLDJCQUEyQixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsMkJBQTJCLENBQUM7UUFDeEYsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDLDJCQUEyQixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsMkJBQTJCLENBQUM7UUFFeEYsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLENBQUM7UUFFRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEIsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNaLENBQUM7UUFDRCxPQUFPLENBQUMsQ0FBQywyQkFBMkIsR0FBRyxDQUFDLENBQUMsMkJBQTJCLENBQUM7SUFDdkUsQ0FBQyxDQUFDO0lBRUYsSUFBVyxVQUFVO1FBQ25CLFlBQVk7UUFDWix5RUFBeUU7UUFDekUseUVBQXlFO1FBQ3pFLHFCQUFxQjtRQUNyQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDdEQsQ0FBQztJQUVELFlBQ2tCLFFBQTJCLEVBQzFCLFdBQXdCLEVBQ3hCLGdCQUFrQyxFQUNsQyxLQUFxQixFQUNyQixZQUEwQixFQUMxQixlQUFnQyxFQUNoQyw4QkFBOEQsRUFDOUQscUJBQTRDLEVBQzVDLG9CQUEwQyxFQUMxQyxrQkFBc0M7UUFUdkMsYUFBUSxHQUFSLFFBQVEsQ0FBbUI7UUFDMUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsbUNBQThCLEdBQTlCLDhCQUE4QixDQUFnQztRQUM5RCwwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQzVDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDMUMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtJQUV6RCxDQUFDO0lBRU0sUUFBUTtRQUNiLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDM0YsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQztRQUMvQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLElBQUksdUJBQXVCLENBQUMsbUJBQW1CLENBQUM7UUFDckcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztRQUNuQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQ25DLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsOEJBQThCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1RixJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDbkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRTtZQUN0RSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkksZ0hBQWdIO1FBQ2hILDRDQUE0QztRQUM1QyxJQUFJLENBQUMsUUFBUSxDQUFDLG9CQUFvQjtZQUNoQyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEgsSUFBSSxDQUFDLFFBQVEsQ0FBQyx1QkFBdUI7WUFDbkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25ILElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFDLENBQUM7WUFDOUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3BHLENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ2hHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUMxRyxDQUFDO0lBRU0sV0FBVztRQUNoQiwwQkFBMEI7UUFDMUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDekMsQ0FBQztJQUNILENBQUM7SUFFTSxNQUFNO1FBQ1gsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2pELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO2dCQUN2QixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7Z0JBQy9CLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDbkIsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTTtnQkFDNUIsV0FBVyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVzthQUN2QyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsb0JBQW9CLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUNwRCxDQUFDO0lBQ0gsQ0FBQztJQUVNLHFCQUFxQixDQUFDLG1CQUE0QjtRQUN2RCxJQUFJLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDO1lBQ2xDLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtZQUMvQixtQkFBbUI7WUFDbkIsV0FBVyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVztZQUN0QyxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDbkIsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTTtTQUM3QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sNkJBQTZCO1FBQ2xDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUM5QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNyRCxJQUFJLFNBQVMsRUFBRSxPQUFPLEVBQUUsQ0FBQztvQkFDdkIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDO29CQUNyRixJQUFJLFVBQVUsRUFBRSxDQUFDO3dCQUNmLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTs0QkFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQ0FDbEUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUNsQyxDQUFDO3dCQUNILENBQUMsQ0FBQyxDQUFDO3dCQUNILElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDOzRCQUNqQixLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxNQUF1QixFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDOzRCQUNyRyxJQUFJLEtBQUssQ0FBQyxlQUFlLEVBQUUsT0FBTyxFQUFFLENBQUM7Z0NBQ25DLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDOzRCQUN2RCxDQUFDOzRCQUNELElBQUksS0FBSyxDQUFDLGVBQWUsRUFBRSxVQUFVLEVBQUUsQ0FBQztnQ0FDdEMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUM7NEJBQzlELENBQUM7NEJBQ0QsSUFBSSxLQUFLLENBQUMsZUFBZSxFQUFFLE9BQU8sRUFBRSxDQUFDO2dDQUNuQyxLQUFLLENBQUMsZUFBZSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQzs0QkFDeEQsQ0FBQzs0QkFDRCxTQUFTLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBdUIsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQzt3QkFDaEcsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRU8sWUFBWTtRQUNsQixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsU0FBUyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xJLElBQUksYUFBYSxFQUFFLENBQUM7WUFDbEIsTUFBTSxzQkFBc0IsR0FBRyxhQUFhLENBQUMseUJBQXlCLEtBQUssNEJBQTRCO2dCQUNyRyxhQUFhLENBQUMseUJBQXlCLEtBQUssNEJBQTRCLENBQUM7WUFDM0UsT0FBTyxzQkFBc0I7Z0JBQzNCLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxzQkFBc0I7Z0JBQzdDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxtQkFBbUIsQ0FBQztRQUMvQyxDQUFDO1FBQ0QsT0FBTyxvQkFBb0IsQ0FBQyxrQkFBa0IsQ0FBQztJQUNqRCxDQUFDO0lBRUQsSUFBWSxTQUFTO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0sQ0FBQztJQUN0RCxDQUFDO0lBRU0sY0FBYyxDQUFDLE1BQWM7UUFDbEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVNLG9CQUFvQixDQUFDLFlBQW1DO1FBQzdELElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQyxhQUFhLENBQUM7UUFDekQsSUFBSSxDQUFDLFdBQVcsR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFDO0lBQzlDLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxLQUFnQjtRQUN0QywwQkFBMEI7UUFDMUIsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3JELHNDQUFzQztZQUN0QyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxNQUFNLFVBQVUsR0FBYyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyRSxVQUFVLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDO1FBRWpFLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFTSxNQUFNO1FBQ1gsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFDckMsQ0FBQztRQUNELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRU8sMkJBQTJCO1FBQ2pDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ2hELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQztRQUVqRSxJQUFJLGNBQWMsSUFBSSxjQUFjLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDMUUsY0FBYyxDQUFDLEtBQUssR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQzFELFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FDaEQsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUNoRCxDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQ2pELEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLFdBQVcsQ0FBQyxDQUN2RCxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztJQUN6QixDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDckMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQzNGLE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxnQkFBZ0IsQ0FBQztZQUM1SCxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7SUFFTSxPQUFPLENBQUMsS0FBZ0I7UUFDN0IsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTSxlQUFlLENBQUMsS0FBZ0I7UUFDckMsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVNLG9DQUFvQztRQUN6QywwQkFBMEI7UUFDMUIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUM5RSxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3JDLDBCQUEwQjtnQkFDMUIsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDM0MsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7d0JBQ3JDLDBCQUEwQjt3QkFDMUIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQzs0QkFDbEMsbUNBQW1DOzRCQUNuQyxPQUFPLElBQUksQ0FBQzt3QkFDZCxDQUFDO29CQUNILENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLDhDQUE4QztZQUM5QyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRU0sb0NBQW9DO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsMkJBQTJCLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDL0YsQ0FBQztJQUVNLGNBQWM7UUFDbkIsZ0ZBQWdGO1FBQ2hGLDBDQUEwQztRQUMxQyxnQ0FBZ0M7UUFDaEMsbUZBQW1GO1FBQ25GLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3ZDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRTttQkFDOUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDO1FBQzNDLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsSUFBSSxRQUFvQixDQUFDO1FBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3BDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDbEIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsa0NBQWtDO1FBQ2xDLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFTSxRQUFRO1FBQ2IsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDdkMsc0lBQXNJO1lBQ3RJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsa0JBQWtCLENBQUM7UUFDaEcsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDbkQsQ0FBQztRQUNELDBCQUEwQjtRQUMxQixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEQsQ0FBQztJQUNILENBQUM7SUFFTSxXQUFXO1FBQ2hCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFTSxPQUFPLENBQUMsSUFBZ0I7UUFDN0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVc7YUFDNUIsNEJBQTRCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xHLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRU0saUJBQWlCLENBQUMsS0FBZ0I7UUFDdkMsT0FBTyxLQUFLLENBQUMsMEJBQTBCLENBQUM7SUFDMUMsQ0FBQztJQUVPLDhCQUE4QixDQUFDLE1BQW1CO1FBQ3hELE9BQU8sSUFBSSxDQUFDLFlBQVk7YUFDckIsSUFBSSxDQUFDLE1BQU0sRUFBRSx1QkFBdUIsQ0FBQyxxQ0FBcUMsQ0FBQzthQUMzRSxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTyxhQUFhO1FBQ25CLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM5QixPQUFPLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM5RCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQztJQUN2QyxDQUFDO0lBRU0sU0FBUztRQUNkLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRU0sWUFBWTtRQUNqQixPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsS0FBSztZQUNsRSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN4RyxDQUFDO0lBRU0sYUFBYTtRQUNsQixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDckMsT0FBTyxxQkFBcUIsQ0FBQztRQUMvQixDQUFDO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztpSEF6VVUsdUJBQXVCOzZEQUF2Qix1QkFBdUI7O1lDM0JsQyxBQUZGLDJCQUFLLFlBRXlCO1lBQUEsWUFBb0M7O1lBQUEsaUJBQUs7WUFPckUsQUFIQSxBQURBLHdFQUEyRCw0R0FDbEMsNEdBR0g7WUFJdEIsa0RBQXNGO1lBRXRGLCtDQUMyRTtZQUF2RCw4TEFBeUIsZ0NBQTRCLEtBQUM7WUFBQyxpQkFBc0I7WUFFakcsZ0NBQTRFO1lBQXBCLDJJQUFVLFlBQVEsS0FBQztZQTBGekUsQUF6RkEsMEVBQXVELHlHQTJGQztZQUd0RCxBQURGLCtCQUEyQyxrQkFDdUY7WUFBckIsMklBQVMsY0FBVSxLQUFDO1lBQzdILGFBQ0Y7O1lBQUEsaUJBQVM7WUFDVCxtQ0FBNkQ7WUFDM0QsYUFDRjs7WUFDRixBQURFLGlCQUFTLEVBQ0w7WUFFSixBQURGLDhCQUFrQixhQUN5RTtZQUF0RixzSUFBUyxZQUFRLEtBQUM7WUFBb0UsYUFBa0M7O1lBR2pJLEFBREUsQUFERSxBQUQ2SCxpQkFBSSxFQUM3SCxFQUNDLEVBQ0g7Ozs7WUExSHdCLGVBQW9DO1lBQXBDLGtFQUFvQztZQUcxRCxlQUFzQjtZQUFpQixBQUFqQixBQUF0Qix5Q0FBc0IsMkJBQWlCLHdCQUFZO1lBUTNCLGVBQXdCO1lBQXhCLDBDQUF3QjtZQUVqQyxjQUF3RDtZQUF4RCwwRUFBd0Q7WUFHNUMsY0FBc0I7WUFBdEIsd0NBQXNCO1lBQy9DLGNBQStDO1lBQS9DLG9FQUErQztZQXlGekIsY0FBOEM7WUFBOUMsbUVBQThDO1lBS2xCLGVBQW9EO1lBQXBELDBFQUFvRDtZQUN4RyxjQUNGO1lBREUsbUVBQ0Y7WUFDc0IsZUFBdUI7WUFBdkIseUNBQXVCO1lBQzNDLGNBQ0Y7WUFERSx3RUFDRjtZQUdnRCxlQUF3QztZQUF4QyxxREFBd0M7WUFBQyxjQUFrQztZQUFsQyxpRUFBa0M7OztpRkQ1RnBILHVCQUF1QjtjQUxuQyxTQUFTOzJCQUNFLHNCQUFzQjs7a0ZBSXJCLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDYXNlRXZlbnRUcmlnZ2VyLCBDYXNlRmllbGQsIFByb2ZpbGUgfSBmcm9tICcuLi8uLi8uLi9kb21haW4nO1xuaW1wb3J0IHsgVGFzayB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbi93b3JrLWFsbG9jYXRpb24vVGFzayc7XG5pbXBvcnQge1xuICBDYXNlRmllbGRTZXJ2aWNlLFxuICBGaWVsZHNVdGlscyxcbiAgTXVsdGlwYWdlQ29tcG9uZW50U3RhdGVTZXJ2aWNlLFxuICBGb3JtVmFsaWRhdG9yc1NlcnZpY2UsXG4gIE9yZGVyU2VydmljZSxcbiAgUHJvZmlsZU5vdGlmaWVyXG59IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IENhbGxiYWNrRXJyb3JzQ29tcG9uZW50LCBDYWxsYmFja0Vycm9yc0NvbnRleHQgfSBmcm9tICcuLi8uLi9lcnJvcic7XG5pbXBvcnQgeyBQYWxldHRlQ29udGV4dCB9IGZyb20gJy4uLy4uL3BhbGV0dGUnO1xuaW1wb3J0IHsgQ2FzZUVkaXRQYWdlQ29tcG9uZW50IH0gZnJvbSAnLi4vY2FzZS1lZGl0LXBhZ2UvY2FzZS1lZGl0LXBhZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IENhc2VFZGl0Q29tcG9uZW50IH0gZnJvbSAnLi4vY2FzZS1lZGl0L2Nhc2UtZWRpdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgV2l6YXJkLCBXaXphcmRQYWdlIH0gZnJvbSAnLi4vZG9tYWluJztcbmltcG9ydCB7IENhc2VFZGl0U3VibWl0VGl0bGVzIH0gZnJvbSAnLi9jYXNlLWVkaXQtc3VibWl0LXRpdGxlcy5lbnVtJztcbmltcG9ydCB7IENhc2VGbGFnU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY2FzZS1mbGFnLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTGlua2VkQ2FzZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vcGFsZXR0ZS9saW5rZWQtY2FzZXMvc2VydmljZXMvbGlua2VkLWNhc2VzLnNlcnZpY2UnO1xuXG4vLyBAZHluYW1pY1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NkLWNhc2UtZWRpdC1zdWJtaXQnLFxuICB0ZW1wbGF0ZVVybDogJ2Nhc2UtZWRpdC1zdWJtaXQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuLi9jYXNlLWVkaXQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENhc2VFZGl0U3VibWl0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwdWJsaWMgZXZlbnRUcmlnZ2VyOiBDYXNlRXZlbnRUcmlnZ2VyO1xuICBwdWJsaWMgZWRpdEZvcm06IEZvcm1Hcm91cDtcbiAgcHVibGljIHRyaWdnZXJUZXh0OiBzdHJpbmc7XG4gIHB1YmxpYyB3aXphcmQ6IFdpemFyZDtcbiAgcHVibGljIHByb2ZpbGU6IFByb2ZpbGU7XG4gIHB1YmxpYyBzaG93U3VtbWFyeUZpZWxkczogQ2FzZUZpZWxkW107XG4gIHB1YmxpYyBwYWxldHRlQ29udGV4dDogUGFsZXR0ZUNvbnRleHQgPSBQYWxldHRlQ29udGV4dC5DSEVDS19ZT1VSX0FOU1dFUjtcbiAgcHVibGljIHByb2ZpbGVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIGNvbnRleHRGaWVsZHM6IENhc2VGaWVsZFtdO1xuICBwdWJsaWMgdGFzazogVGFzaztcbiAgcHVibGljIHBhZ2VUaXRsZTogc3RyaW5nO1xuICBwdWJsaWMgbWV0YWRhdGFGaWVsZHNPYmplY3Q6IG9iamVjdDtcbiAgcHVibGljIGFsbEZpZWxkc1ZhbHVlczogYW55O1xuICBwdWJsaWMgc3VtbWFyeTogQWJzdHJhY3RDb250cm9sO1xuICBwdWJsaWMgZGVzY3JpcHRpb246IEFic3RyYWN0Q29udHJvbDtcbiAgcHVibGljIGV2ZW50U3VtbWFyeUxhYmVsOiBzdHJpbmcgPSAnRXZlbnQgc3VtbWFyeSc7XG4gIHB1YmxpYyBldmVudERlc2NyaXB0aW9uTGFiZWw6IHN0cmluZyA9ICdFdmVudCBkZXNjcmlwdGlvbic7XG5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTSE9XX1NVTU1BUllfQ09OVEVOVF9DT01QQVJFX0ZVTkNUSU9OID0gKGE6IENhc2VGaWVsZCwgYjogQ2FzZUZpZWxkKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCBhQ2FzZUZpZWxkID0gYS5zaG93X3N1bW1hcnlfY29udGVudF9vcHRpb24gPT09IDAgfHwgYS5zaG93X3N1bW1hcnlfY29udGVudF9vcHRpb247XG4gICAgY29uc3QgYkNhc2VGaWVsZCA9IGIuc2hvd19zdW1tYXJ5X2NvbnRlbnRfb3B0aW9uID09PSAwIHx8IGIuc2hvd19zdW1tYXJ5X2NvbnRlbnRfb3B0aW9uO1xuXG4gICAgaWYgKCFhQ2FzZUZpZWxkKSB7XG4gICAgICByZXR1cm4gIWJDYXNlRmllbGQgPyAwIDogMTtcbiAgICB9XG5cbiAgICBpZiAoIWJDYXNlRmllbGQpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgcmV0dXJuIGEuc2hvd19zdW1tYXJ5X2NvbnRlbnRfb3B0aW9uIC0gYi5zaG93X3N1bW1hcnlfY29udGVudF9vcHRpb247XG4gIH07XG5cbiAgcHVibGljIGdldCBpc0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIC8vIEVVSS0zNDUyLlxuICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gY2hlY2sgdGhlIHZhbGlkaXR5IG9mIHRoZSBlZGl0Rm9ybSBhcyBpdCBpcyByZWFkb25seS5cbiAgICAvLyBUaGlzIHdhcyBjYXVzaW5nIGlzc3VlcyB3aXRoIGhpZGRlbiBmaWVsZHMgdGhhdCBhcmVuJ3Qgd2FudGVkIGJ1dCBoYXZlXG4gICAgLy8gbm90IGJlZW4gZGlzYWJsZWQuXG4gICAgcmV0dXJuIHRoaXMuY2FzZUVkaXQuaXNTdWJtaXR0aW5nIHx8IHRoaXMuaGFzRXJyb3JzO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGNhc2VFZGl0OiBDYXNlRWRpdENvbXBvbmVudCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZpZWxkc1V0aWxzOiBGaWVsZHNVdGlscyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhc2VGaWVsZFNlcnZpY2U6IENhc2VGaWVsZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBvcmRlclNlcnZpY2U6IE9yZGVyU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb2ZpbGVOb3RpZmllcjogUHJvZmlsZU5vdGlmaWVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbXVsdGlwYWdlQ29tcG9uZW50U3RhdGVTZXJ2aWNlOiBNdWx0aXBhZ2VDb21wb25lbnRTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBmb3JtVmFsaWRhdG9yc1NlcnZpY2U6IEZvcm1WYWxpZGF0b3JzU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhc2VGbGFnU3RhdGVTZXJ2aWNlOiBDYXNlRmxhZ1N0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxpbmtlZENhc2VzU2VydmljZTogTGlua2VkQ2FzZXNTZXJ2aWNlLFxuICApIHtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnByb2ZpbGVTdWJzY3JpcHRpb24gPSB0aGlzLnByb2ZpbGVOb3RpZmllci5wcm9maWxlLnN1YnNjcmliZSgoXykgPT4gdGhpcy5wcm9maWxlID0gXyk7XG4gICAgdGhpcy5ldmVudFRyaWdnZXIgPSB0aGlzLmNhc2VFZGl0LmV2ZW50VHJpZ2dlcjtcbiAgICB0aGlzLnRyaWdnZXJUZXh0ID0gdGhpcy5ldmVudFRyaWdnZXIuZW5kX2J1dHRvbl9sYWJlbCB8fCBDYWxsYmFja0Vycm9yc0NvbXBvbmVudC5UUklHR0VSX1RFWFRfU1VCTUlUO1xuICAgIHRoaXMuZWRpdEZvcm0gPSB0aGlzLmNhc2VFZGl0LmZvcm07XG4gICAgdGhpcy53aXphcmQgPSB0aGlzLmNhc2VFZGl0LndpemFyZDtcbiAgICB0aGlzLnNob3dTdW1tYXJ5RmllbGRzID0gdGhpcy5zb3J0RmllbGRzQnlTaG93U3VtbWFyeUNvbnRlbnQodGhpcy5ldmVudFRyaWdnZXIuY2FzZV9maWVsZHMpO1xuICAgIHRoaXMuY2FzZUVkaXQuaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5jb250ZXh0RmllbGRzID0gdGhpcy5nZXRDYXNlRmllbGRzKCk7XG4gICAgdGhpcy5tZXRhZGF0YUZpZWxkc09iamVjdCA9IHRoaXMuY2FzZUVkaXQ/LmNhc2VEZXRhaWxzPy5tZXRhZGF0YUZpZWxkcz8uXG4gICAgICByZWR1Y2UoKG8sIGtleSkgPT4gT2JqZWN0LmFzc2lnbihvLCB7IFtrZXkuaWRdOiBrZXkudmFsdWUgfSksIHt9KTtcbiAgICB0aGlzLmFsbEZpZWxkc1ZhbHVlcyA9IE9iamVjdC5hc3NpZ24odGhpcy5tZXRhZGF0YUZpZWxkc09iamVjdCA/IHRoaXMubWV0YWRhdGFGaWVsZHNPYmplY3QgOiB7fSwgdGhpcy5lZGl0Rm9ybS5nZXRSYXdWYWx1ZSgpLmRhdGEpO1xuICAgIC8vIEluZGljYXRlcyBpZiB0aGUgc3VibWlzc2lvbiBpcyBmb3IgYSBDYXNlIEZsYWcsIGFzIG9wcG9zZWQgdG8gYSBcInJlZ3VsYXJcIiBmb3JtIHN1Ym1pc3Npb24sIGJ5IHRoZSBwcmVzZW5jZSBvZlxuICAgIC8vIGEgRmxhZ0xhdW5jaGVyIGZpZWxkIGluIHRoZSBldmVudCB0cmlnZ2VyXG4gICAgdGhpcy5jYXNlRWRpdC5pc0Nhc2VGbGFnU3VibWlzc2lvbiA9XG4gICAgICB0aGlzLmV2ZW50VHJpZ2dlci5jYXNlX2ZpZWxkcy5zb21lKChjYXNlRmllbGQpID0+IEZpZWxkc1V0aWxzLmlzQ2FzZUZpZWxkT2ZUeXBlKGNhc2VGaWVsZCwgWydGbGFnTGF1bmNoZXInXSkpO1xuICAgIHRoaXMuY2FzZUVkaXQuaXNMaW5rZWRDYXNlc1N1Ym1pc3Npb24gPVxuICAgICAgdGhpcy5ldmVudFRyaWdnZXIuY2FzZV9maWVsZHMuc29tZShjYXNlRmllbGQgPT4gRmllbGRzVXRpbHMuaXNDYXNlRmllbGRPZlR5cGUoY2FzZUZpZWxkLCBbJ0NvbXBvbmVudExhdW5jaGVyJ10pKTtcbiAgICB0aGlzLnBhZ2VUaXRsZSA9IHRoaXMuZ2V0UGFnZVRpdGxlKCk7XG4gICAgaWYgKCF0aGlzLmNhc2VGbGFnU3RhdGVTZXJ2aWNlLmluaXRpYWxDYXNlRmxhZ3MgJiYgdGhpcy5jYXNlRWRpdC5pc0Nhc2VGbGFnU3VibWlzc2lvbiAmJiBPYmplY3Qua2V5cyh0aGlzLmNhc2VFZGl0LmZvcm0udmFsdWUuZGF0YSkubGVuZ3RoID4gMCl7XG4gICAgICB0aGlzLmNhc2VGbGFnU3RhdGVTZXJ2aWNlLmluaXRpYWxDYXNlRmxhZ3MgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuY2FzZUVkaXQuZm9ybS52YWx1ZSkpO1xuICAgIH1cbiAgICB0aGlzLnN1bW1hcnkgPSB0aGlzLmZvcm1WYWxpZGF0b3JzU2VydmljZS5hZGRNYXJrRG93blZhbGlkYXRvcnModGhpcy5lZGl0Rm9ybSwgJ2V2ZW50LnN1bW1hcnknKTtcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gdGhpcy5mb3JtVmFsaWRhdG9yc1NlcnZpY2UuYWRkTWFya0Rvd25WYWxpZGF0b3JzKHRoaXMuZWRpdEZvcm0sICdldmVudC5kZXNjcmlwdGlvbicpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMucHJvZmlsZVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5wcm9maWxlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHN1Ym1pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdW1tYXJ5LnZhbGlkICYmIHRoaXMuZGVzY3JpcHRpb24udmFsaWQpIHtcbiAgICAgIHRoaXMubGlua2VkQ2FzZXNTZXJ2aWNlLnJlc2V0TGlua2VkQ2FzZURhdGEoKTtcbiAgICAgIHRoaXMuY2hlY2tFeGlzdGluZ0RhdGFJblN1Ym1pc3Npb24oKTtcbiAgICAgIHRoaXMuY2FzZUVkaXQuc3VibWl0Rm9ybSh7XG4gICAgICAgIGV2ZW50VHJpZ2dlcjogdGhpcy5ldmVudFRyaWdnZXIsXG4gICAgICAgIGZvcm06IHRoaXMuZWRpdEZvcm0sXG4gICAgICAgIHN1Ym1pdDogdGhpcy5jYXNlRWRpdC5zdWJtaXQsXG4gICAgICAgIGNhc2VEZXRhaWxzOiB0aGlzLmNhc2VFZGl0LmNhc2VEZXRhaWxzXG4gICAgICB9KTtcbiAgICAgIHRoaXMuY2FzZUZsYWdTdGF0ZVNlcnZpY2UucmVzZXRJbml0aWFsQ2FzZUZsYWdzKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uRXZlbnRDYW5CZUNvbXBsZXRlZChldmVudENhbkJlQ29tcGxldGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5jYXNlRWRpdC5vbkV2ZW50Q2FuQmVDb21wbGV0ZWQoe1xuICAgICAgZXZlbnRUcmlnZ2VyOiB0aGlzLmV2ZW50VHJpZ2dlcixcbiAgICAgIGV2ZW50Q2FuQmVDb21wbGV0ZWQsXG4gICAgICBjYXNlRGV0YWlsczogdGhpcy5jYXNlRWRpdC5jYXNlRGV0YWlscyxcbiAgICAgIGZvcm06IHRoaXMuZWRpdEZvcm0sXG4gICAgICBzdWJtaXQ6IHRoaXMuY2FzZUVkaXQuc3VibWl0XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgY2hlY2tFeGlzdGluZ0RhdGFJblN1Ym1pc3Npb24oKSB7XG4gICAgaWYgKHRoaXMuY2FzZUVkaXQuaXNDYXNlRmxhZ1N1Ym1pc3Npb24pIHtcbiAgICAgIHRoaXMuZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpZWxkRGF0YSA9IHRoaXMuZWRpdEZvcm0udmFsdWUuZGF0YVtmaWVsZC5pZF07XG4gICAgICAgIGlmIChmaWVsZERhdGE/LmRldGFpbHMpIHtcbiAgICAgICAgICBjb25zdCBwcmlvckZsYWdzID0gdGhpcy5jYXNlRmxhZ1N0YXRlU2VydmljZS5pbml0aWFsQ2FzZUZsYWdzLmRhdGFbZmllbGQuaWRdLmRldGFpbHM7XG4gICAgICAgICAgaWYgKHByaW9yRmxhZ3MpIHtcbiAgICAgICAgICAgIHByaW9yRmxhZ3MuZm9yRWFjaCgoZmxhZykgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWZpZWxkLl92YWx1ZS5kZXRhaWxzLnNvbWUoKGRldGFpbCkgPT4gZGV0YWlsLmlkID09PSBmbGFnLmlkKSkge1xuICAgICAgICAgICAgICAgIGZpZWxkLl92YWx1ZS5kZXRhaWxzLnB1c2goZmxhZyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGZpZWxkLl92YWx1ZSkge1xuICAgICAgICAgICAgICBmaWVsZC5fdmFsdWUuZGV0YWlscyA9IGZpZWxkLl92YWx1ZS5kZXRhaWxzPy5maWx0ZXIoKGRldGFpbDogeyBpZD86IHN0cmluZyB9KSA9PiBkZXRhaWwuaWQgIT09IG51bGwpO1xuICAgICAgICAgICAgICBpZiAoZmllbGQuZm9ybWF0dGVkX3ZhbHVlPy5ncm91cElkKSB7XG4gICAgICAgICAgICAgICAgZmllbGQuX3ZhbHVlLmdyb3VwSWQgPSBmaWVsZC5mb3JtYXR0ZWRfdmFsdWUuZ3JvdXBJZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoZmllbGQuZm9ybWF0dGVkX3ZhbHVlPy52aXNpYmlsaXR5KSB7XG4gICAgICAgICAgICAgICAgZmllbGQuX3ZhbHVlLnZpc2liaWxpdHkgPSBmaWVsZC5mb3JtYXR0ZWRfdmFsdWU/LnZpc2liaWxpdHk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGZpZWxkLmZvcm1hdHRlZF92YWx1ZT8uZGV0YWlscykge1xuICAgICAgICAgICAgICAgIGZpZWxkLmZvcm1hdHRlZF92YWx1ZS5kZXRhaWxzID0gZmllbGQuX3ZhbHVlPy5kZXRhaWxzO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGZpZWxkRGF0YS5kZXRhaWxzID0gZmllbGREYXRhLmRldGFpbHMuZmlsdGVyKChkZXRhaWw6IHsgaWQ/OiBzdHJpbmcgfSkgPT4gZGV0YWlsLmlkICE9PSBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGFnZVRpdGxlKCk6IHN0cmluZyB7XG4gICAgY29uc3QgY2FzZUZsYWdGaWVsZCA9IHRoaXMuZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzLmZpbmQoY2FzZUZpZWxkID0+IEZpZWxkc1V0aWxzLmlzQ2FzZUZpZWxkT2ZUeXBlKGNhc2VGaWVsZCwgWydGbGFnTGF1bmNoZXInXSkpO1xuICAgIGlmIChjYXNlRmxhZ0ZpZWxkKSB7XG4gICAgICBjb25zdCBpc0Nhc2VGbGFnRXh0ZXJuYWxNb2RlID0gY2FzZUZsYWdGaWVsZC5kaXNwbGF5X2NvbnRleHRfcGFyYW1ldGVyID09PSAnI0FSR1VNRU5UKFVQREFURSxFWFRFUk5BTCknIHx8XG4gICAgICAgIGNhc2VGbGFnRmllbGQuZGlzcGxheV9jb250ZXh0X3BhcmFtZXRlciA9PT0gJyNBUkdVTUVOVChDUkVBVEUsRVhURVJOQUwpJztcbiAgICAgIHJldHVybiBpc0Nhc2VGbGFnRXh0ZXJuYWxNb2RlXG4gICAgICAgID8gQ2FzZUVkaXRTdWJtaXRUaXRsZXMuUkVWSUVXX1NVUFBPUlRfUkVRVUVTVFxuICAgICAgICA6IENhc2VFZGl0U3VibWl0VGl0bGVzLlJFVklFV19GTEFHX0RFVEFJTFM7XG4gICAgfVxuICAgIHJldHVybiBDYXNlRWRpdFN1Ym1pdFRpdGxlcy5DSEVDS19ZT1VSX0FOU1dFUlM7XG4gIH1cblxuICBwcml2YXRlIGdldCBoYXNFcnJvcnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2FzZUVkaXQ/LmVycm9yPy5jYWxsYmFja0Vycm9ycz8ubGVuZ3RoO1xuICB9XG5cbiAgcHVibGljIG5hdmlnYXRlVG9QYWdlKHBhZ2VJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jYXNlRWRpdC5uYXZpZ2F0ZVRvUGFnZShwYWdlSWQpO1xuICB9XG5cbiAgcHVibGljIGNhbGxiYWNrRXJyb3JzTm90aWZ5KGVycm9yQ29udGV4dDogQ2FsbGJhY2tFcnJvcnNDb250ZXh0KTogdm9pZCB7XG4gICAgdGhpcy5jYXNlRWRpdC5pZ25vcmVXYXJuaW5nID0gZXJyb3JDb250ZXh0Lmlnbm9yZVdhcm5pbmc7XG4gICAgdGhpcy50cmlnZ2VyVGV4dCA9IGVycm9yQ29udGV4dC50cmlnZ2VyVGV4dDtcbiAgfVxuXG4gIHB1YmxpYyBzdW1tYXJ5Q2FzZUZpZWxkKGZpZWxkOiBDYXNlRmllbGQpOiBDYXNlRmllbGQge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKG51bGwgPT09IHRoaXMuZWRpdEZvcm0uZ2V0KCdkYXRhJykuZ2V0KGZpZWxkLmlkKSkge1xuICAgICAgLy8gSWYgbm90IGluIGZvcm0sIHJldHVybiBmaWVsZCBpdHNlbGZcbiAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICBjb25zdCBjbG9uZUZpZWxkOiBDYXNlRmllbGQgPSB0aGlzLmZpZWxkc1V0aWxzLmNsb25lQ2FzZUZpZWxkKGZpZWxkKTtcbiAgICBjbG9uZUZpZWxkLnZhbHVlID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ2RhdGEnKS5nZXQoZmllbGQuaWQpLnZhbHVlO1xuXG4gICAgcmV0dXJuIGNsb25lRmllbGQ7XG4gIH1cblxuICBwdWJsaWMgY2FuY2VsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNhc2VFZGl0LmlzTGlua2VkQ2FzZXNTdWJtaXNzaW9uKSB7XG4gICAgICB0aGlzLmhhbmRsZUxpbmtlZENhc2VzU3VibWlzc2lvbigpO1xuICAgIH1cbiAgICB0aGlzLmNhc2VGbGFnU3RhdGVTZXJ2aWNlLnJlc2V0SW5pdGlhbENhc2VGbGFncygpO1xuICAgIHRoaXMuZW1pdENhbmNlbEV2ZW50KCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUxpbmtlZENhc2VzU3VibWlzc2lvbigpOiB2b2lkIHtcbiAgICBjb25zdCBsaW5rZWRDYXNlc1RhYiA9IHRoaXMuZ2V0TGlua2VkQ2FzZXNUYWIoKTtcbiAgICBjb25zdCBpbml0aWFsTGlua3MgPSB0aGlzLmxpbmtlZENhc2VzU2VydmljZS5pbml0aWFsQ2FzZUxpbmtSZWZzO1xuXG4gICAgaWYgKGxpbmtlZENhc2VzVGFiICYmIGxpbmtlZENhc2VzVGFiLnZhbHVlLmxlbmd0aCAhPT0gaW5pdGlhbExpbmtzLmxlbmd0aCkge1xuICAgICAgbGlua2VkQ2FzZXNUYWIudmFsdWUgPSBsaW5rZWRDYXNlc1RhYi52YWx1ZS5maWx0ZXIoKGl0ZW0pID0+XG4gICAgICAgIGluaXRpYWxMaW5rcy5pbmNsdWRlcyhpdGVtLnZhbHVlLkNhc2VSZWZlcmVuY2UpXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmxpbmtlZENhc2VzU2VydmljZS5yZXNldExpbmtlZENhc2VEYXRhKCk7XG4gIH1cblxuICBwcml2YXRlIGdldExpbmtlZENhc2VzVGFiKCk6IENhc2VGaWVsZCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmNhc2VFZGl0LmNhc2VEZXRhaWxzLnRhYnMuZmluZCgodGFiKSA9PlxuICAgICAgdGFiPy5maWVsZHM/LnNvbWUoKGZpZWxkKSA9PiBmaWVsZC5pZCA9PT0gJ2Nhc2VMaW5rcycpXG4gICAgKT8uZmllbGRzPy5bMF0gPz8gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdENhbmNlbEV2ZW50KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmV2ZW50VHJpZ2dlci5jYW5fc2F2ZV9kcmFmdCkge1xuICAgICAgY29uc3Qgb3JpZ2luID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwLmdldChDYXNlRWRpdENvbXBvbmVudC5PUklHSU5fUVVFUllfUEFSQU0pO1xuICAgICAgY29uc3Qgc3RhdHVzID0gb3JpZ2luID09PSAndmlld0RyYWZ0JyA/IENhc2VFZGl0UGFnZUNvbXBvbmVudC5SRVNVTUVEX0ZPUk1fRElTQ0FSRCA6IENhc2VFZGl0UGFnZUNvbXBvbmVudC5ORVdfRk9STV9ESVNDQVJEO1xuICAgICAgdGhpcy5jYXNlRWRpdC5jYW5jZWxsZWQuZW1pdCh7IHN0YXR1cyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jYXNlRWRpdC5jYW5jZWxsZWQuZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc0xhYmVsKGZpZWxkOiBDYXNlRmllbGQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jYXNlRmllbGRTZXJ2aWNlLmlzTGFiZWwoZmllbGQpO1xuICB9XG5cbiAgcHVibGljIGlzQ2hhbmdlQWxsb3dlZChmaWVsZDogQ2FzZUZpZWxkKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmNhc2VGaWVsZFNlcnZpY2UuaXNSZWFkT25seShmaWVsZCk7XG4gIH1cblxuICBwdWJsaWMgY2hlY2tZb3VyQW5zd2VyRmllbGRzVG9EaXNwbGF5RXhpc3RzKCk6IGJvb2xlYW4ge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMuZXZlbnRUcmlnZ2VyLnNob3dfc3VtbWFyeSB8fCB0aGlzLmV2ZW50VHJpZ2dlci5zaG93X3N1bW1hcnkgPT09IG51bGwpIHtcbiAgICAgIGZvciAoY29uc3QgcGFnZSBvZiB0aGlzLndpemFyZC5wYWdlcykge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAocGFnZS5jYXNlX2ZpZWxkcyAmJiB0aGlzLmlzU2hvd24ocGFnZSkpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHBhZ2UuY2FzZV9maWVsZHMpIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICBpZiAodGhpcy5jYW5TaG93RmllbGRJbkNZQShmaWVsZCkpIHtcbiAgICAgICAgICAgICAgLy8gYXQgbGVhc3Qgb25lIGZpZWxkIG5lZWRzIHNob3dpbmdcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZvdW5kIG5vIGZpZWxkcyB0byBzaG93IGluIENZQSBzdW1tYXJ5IHBhZ2VcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVhZE9ubHlTdW1tYXJ5RmllbGRzVG9EaXNwbGF5RXhpc3RzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmV2ZW50VHJpZ2dlci5jYXNlX2ZpZWxkcy5zb21lKChmaWVsZCkgPT4gZmllbGQuc2hvd19zdW1tYXJ5X2NvbnRlbnRfb3B0aW9uID49IDApO1xuICB9XG5cbiAgcHVibGljIHNob3dFdmVudE5vdGVzKCk6IGJvb2xlYW4ge1xuICAgIC8vIERpc3BsYXkgZXZlbnQgbm90ZXMgcmVsYXRlZCBjb250cm9scyBvbmx5IGlmIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0XG4gICAgLy8gMS4gc2hvd19ldmVudF9ub3RlcyBmbGFnIGlzIHNldCB0byB0cnVlXG4gICAgLy8gMi4gcHJvZmlsZSBpcyBub3QgYSBzb2xpY2l0b3JcbiAgICAvLyAzLiBpcyBub3QgYSBjYXNlIGZsYWdzIGpvdXJuZXksIGFzIGl0IHVzZXMgYSBjdXN0b20gY2hlY2sgeW91ciBhbnN3ZXJzIGNvbXBvbmVudFxuICAgIGlmICh0aGlzLmV2ZW50VHJpZ2dlci5zaG93X2V2ZW50X25vdGVzKSB7XG4gICAgICByZXR1cm4gIXRoaXMucHJvZmlsZT8uaXNTb2xpY2l0b3IoKVxuICAgICAgICAmJiAhdGhpcy5jYXNlRWRpdC5pc0Nhc2VGbGFnU3VibWlzc2lvbjtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMYXN0UGFnZVNob3duKCk6IFdpemFyZFBhZ2Uge1xuICAgIGxldCBsYXN0UGFnZTogV2l6YXJkUGFnZTtcbiAgICB0aGlzLndpemFyZC5yZXZlcnNlKCkuZm9yRWFjaCgocGFnZSkgPT4ge1xuICAgICAgaWYgKCFsYXN0UGFnZSAmJiB0aGlzLmlzU2hvd24ocGFnZSkpIHtcbiAgICAgICAgbGFzdFBhZ2UgPSBwYWdlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIG5vaW5zcGVjdGlvbiBKU1VudXNlZEFzc2lnbm1lbnRcbiAgICByZXR1cm4gbGFzdFBhZ2U7XG4gIH1cblxuICBwdWJsaWMgcHJldmlvdXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2FzZUVkaXQuaXNDYXNlRmxhZ1N1Ym1pc3Npb24pIHtcbiAgICAgIC8vIGlmIHdlIGFyZSBpbiB0aGUgY2FzZWZsYWcgam91cm5leSB3ZSBuZWVkIHRvIHN0b3JlIHRoZSBsYXN0IHBhZ2UgaW5kZXggc28gdGhhdCB0aGUgcHJldmlvdXMgYnV0dG9uIG9uIENZQSB3aWxsIHRha2UgdG8gY29ycmVjdCBwYWdlXG4gICAgICB0aGlzLmNhc2VGbGFnU3RhdGVTZXJ2aWNlLmZpZWxkU3RhdGVUb05hdmlnYXRlID0gdGhpcy5jYXNlRmxhZ1N0YXRlU2VydmljZS5sYXN0UGFnZUZpZWxkU3RhdGU7XG4gICAgfVxuICAgIGlmICh0aGlzLmNhc2VFZGl0LmlzTGlua2VkQ2FzZXNTdWJtaXNzaW9uKSB7XG4gICAgICB0aGlzLmxpbmtlZENhc2VzU2VydmljZS5jYW1lRnJvbUZpbmFsU3RlcCA9IHRydWU7XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMuaGFzUHJldmlvdXMoKSkge1xuICAgICAgdGhpcy5uYXZpZ2F0ZVRvUGFnZSh0aGlzLmdldExhc3RQYWdlU2hvd24oKS5pZCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGhhc1ByZXZpb3VzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZ2V0TGFzdFBhZ2VTaG93bigpO1xuICB9XG5cbiAgcHVibGljIGlzU2hvd24ocGFnZTogV2l6YXJkUGFnZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMuZmllbGRzVXRpbHNcbiAgICAgIC5tZXJnZUNhc2VGaWVsZHNBbmRGb3JtRmllbGRzKHRoaXMuZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzLCB0aGlzLmVkaXRGb3JtLmNvbnRyb2xzLmRhdGEudmFsdWUpO1xuICAgIHJldHVybiBwYWdlLnBhcnNlZFNob3dDb25kaXRpb24ubWF0Y2goZmllbGRzKTtcbiAgfVxuXG4gIHB1YmxpYyBjYW5TaG93RmllbGRJbkNZQShmaWVsZDogQ2FzZUZpZWxkKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZpZWxkLnNob3dfc3VtbWFyeV9jaGFuZ2Vfb3B0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBzb3J0RmllbGRzQnlTaG93U3VtbWFyeUNvbnRlbnQoZmllbGRzOiBDYXNlRmllbGRbXSk6IENhc2VGaWVsZFtdIHtcbiAgICByZXR1cm4gdGhpcy5vcmRlclNlcnZpY2VcbiAgICAgIC5zb3J0KGZpZWxkcywgQ2FzZUVkaXRTdWJtaXRDb21wb25lbnQuU0hPV19TVU1NQVJZX0NPTlRFTlRfQ09NUEFSRV9GVU5DVElPTilcbiAgICAgIC5maWx0ZXIoKGNmKSA9PiBjZi5zaG93X3N1bW1hcnlfY29udGVudF9vcHRpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDYXNlRmllbGRzKCk6IENhc2VGaWVsZFtdIHtcbiAgICBpZiAodGhpcy5jYXNlRWRpdC5jYXNlRGV0YWlscykge1xuICAgICAgcmV0dXJuIEZpZWxkc1V0aWxzLmdldENhc2VGaWVsZHModGhpcy5jYXNlRWRpdC5jYXNlRGV0YWlscyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzO1xuICB9XG5cbiAgcHVibGljIGdldENhc2VJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNhc2VFZGl0LmdldENhc2VJZCh0aGlzLmNhc2VFZGl0LmNhc2VEZXRhaWxzKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDYXNlVGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKHRoaXMuY2FzZUVkaXQuY2FzZURldGFpbHMgJiYgdGhpcy5jYXNlRWRpdC5jYXNlRGV0YWlscy5zdGF0ZSAmJlxuICAgICAgdGhpcy5jYXNlRWRpdC5jYXNlRGV0YWlscy5zdGF0ZS50aXRsZV9kaXNwbGF5ID8gdGhpcy5jYXNlRWRpdC5jYXNlRGV0YWlscy5zdGF0ZS50aXRsZV9kaXNwbGF5IDogJycpO1xuICB9XG5cbiAgcHVibGljIGdldENhbmNlbFRleHQoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5ldmVudFRyaWdnZXIuY2FuX3NhdmVfZHJhZnQpIHtcbiAgICAgIHJldHVybiAnUmV0dXJuIHRvIGNhc2UgbGlzdCc7XG4gICAgfVxuICAgIHJldHVybiAnQ2FuY2VsJztcbiAgfVxufVxuXG4iLCI8ZGl2PlxuICA8IS0tIEV2ZW50IHRyaWdnZXIgbmFtZSAtLT5cbiAgPGgxIGNsYXNzPVwiZ292dWstaGVhZGluZy1sXCI+e3tldmVudFRyaWdnZXIubmFtZSB8IHJweFRyYW5zbGF0ZX19PC9oMT5cblxuICA8IS0tQ2FzZSBJRCBvciBUaXRsZSAtLT5cbiAgPGRpdiAqbmdJZj1cImdldENhc2VUaXRsZSgpOyB0aGVuIHRpdGxlQmxvY2s7IGVsc2UgaWRCbG9ja1wiPjwvZGl2PlxuICA8bmctdGVtcGxhdGUgI3RpdGxlQmxvY2s+XG4gICAgPGNjZC1tYXJrZG93biBbY29udGVudF09XCJnZXRDYXNlVGl0bGUoKSB8IGNjZENhc2VUaXRsZTogY29udGV4dEZpZWxkcyA6IGVkaXRGb3JtLmNvbnRyb2xzWydkYXRhJ10gfCBycHhUcmFuc2xhdGVcIj48L2NjZC1tYXJrZG93bj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlICNpZEJsb2NrPlxuICAgIDxoMiAqbmdJZj1cImdldENhc2VJZCgpXCIgY2xhc3M9XCJoZWFkaW5nLWgyXCI+I3t7IGdldENhc2VJZCgpIHwgY2NkQ2FzZVJlZmVyZW5jZSB9fTwvaDI+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPGNjZC1jYXNlLWVkaXQtZ2VuZXJpYy1lcnJvcnMgW2Vycm9yXT1cImNhc2VFZGl0LmVycm9yXCI+PC9jY2QtY2FzZS1lZGl0LWdlbmVyaWMtZXJyb3JzPlxuXG4gIDxjY2QtY2FsbGJhY2stZXJyb3JzIFtjYWxsYmFja0Vycm9yc1N1YmplY3RdPVwiY2FzZUVkaXQuY2FsbGJhY2tFcnJvcnNTdWJqZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2FsbGJhY2tFcnJvcnNDb250ZXh0KT1cImNhbGxiYWNrRXJyb3JzTm90aWZ5KCRldmVudClcIj48L2NjZC1jYWxsYmFjay1lcnJvcnM+XG5cbiAgPGZvcm0gY2xhc3M9XCJjaGVjay15b3VyLWFuc3dlcnNcIiBbZm9ybUdyb3VwXT1cImVkaXRGb3JtXCIgKHN1Ym1pdCk9XCJzdWJtaXQoKVwiPlxuICAgIDxkaXYgKm5nSWY9XCIhY2FzZUVkaXQuaXNFdmVudENvbXBsZXRpb25DaGVja3NSZXF1aXJlZFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoZWNrWW91ckFuc3dlckZpZWxkc1RvRGlzcGxheUV4aXN0cygpXCI+XG4gICAgICAgIDxoMiBjbGFzcz1cImhlYWRpbmctaDJcIj57e3BhZ2VUaXRsZSB8IHJweFRyYW5zbGF0ZSB9fTwvaDI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC0xNlwiICpuZ0lmPVwiIWNhc2VFZGl0LmlzQ2FzZUZsYWdTdWJtaXNzaW9uXCI+e3snQ2hlY2sgdGhlIGluZm9ybWF0aW9uIGJlbG93IGNhcmVmdWxseS4nIHwgcnB4VHJhbnNsYXRlfX08L3NwYW4+XG5cbiAgICAgICAgPHRhYmxlIGNsYXNzPVwiZm9ybS10YWJsZVwiIGFyaWEtZGVzY3JpYmVkYnk9XCJjaGVjayB5b3VyIGFuc3dlcnMgdGFibGVcIj5cbiAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcGFnZSBvZiB3aXphcmQucGFnZXNcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1Nob3duKHBhZ2UpXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpZWxkIG9mIHBhZ2VcbiAgICAgICAgICAgICAgfCBjY2RQYWdlRmllbGRzOiBlZGl0Rm9ybVxuICAgICAgICAgICAgICB8IGNjZFJlYWRGaWVsZHNGaWx0ZXI6IGZhbHNlIDp1bmRlZmluZWQgOnRydWUgOmFsbEZpZWxkc1ZhbHVlc1xuICAgICAgICAgICAgICB8IGNjZENZQVBhZ2VMYWJlbEZpbHRlclwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjYW5TaG93RmllbGRJbkNZQShmaWVsZClcIj5cbiAgICAgICAgICAgICAgICAgIDx0ciBjY2RMYWJlbFN1YnN0aXR1dG9yIFtjYXNlRmllbGRdPVwiZmllbGRcIiBbaGlkZGVuXT1cImZpZWxkLmhpZGRlblwiXG4gICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cF09XCJlZGl0Rm9ybS5jb250cm9sc1snZGF0YSddXCIgW2NvbnRleHRGaWVsZHNdPVwiY29udGV4dEZpZWxkc1wiPlxuICAgICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCIhaXNMYWJlbChmaWVsZCkgJiYgIWNhc2VFZGl0LmlzQ2FzZUZsYWdTdWJtaXNzaW9uXCIgY2xhc3M9XCJ2YWxpZ24tdG9wIGNhc2UtZmllbGQtbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtMTZcIj57e2ZpZWxkLmxhYmVsIHwgcnB4VHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImZvcm0tY2VsbCBjYXNlLWZpZWxkLWNvbnRlbnQgdGV4dC0xNlwiIFthdHRyLmNvbHNwYW5dPVwiaXNMYWJlbChmaWVsZCkgPyAnMicgOiAnMSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8Y2NkLWZpZWxkLXJlYWRcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwiZWRpdEZvcm0uY29udHJvbHNbJ2RhdGEnXVwiIFt0b3BMZXZlbEZvcm1Hcm91cF09XCJlZGl0Rm9ybS5jb250cm9sc1snZGF0YSddXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjYXNlRmllbGRdPVwic3VtbWFyeUNhc2VGaWVsZChmaWVsZClcIiBbY29udGV4dF09XCJwYWxldHRlQ29udGV4dFwiIFtjYXNlRmllbGRzXT1cImNvbnRleHRGaWVsZHNcIj48L2NjZC1maWVsZC1yZWFkPlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNhc2VFZGl0LmlzQ2FzZUZsYWdTdWJtaXNzaW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidmFsaWduLXRvcCBjaGVjay15b3VyLWFuc3dlcnNfX2NoYW5nZSBjYXNlLWZpZWxkLWNoYW5nZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCJpc0NoYW5nZUFsbG93ZWQoZmllbGQpXCIgKGNsaWNrKT1cIm5hdmlnYXRlVG9QYWdlKHBhZ2UuaWQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtMTZcIiBhdHRyLmFyaWEtbGFiZWw9XCJ7eydDaGFuZ2UnIHwgcnB4VHJhbnNsYXRlfX0ge3sgZmllbGQubGFiZWwgfCBycHhUcmFuc2xhdGUgfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydDaGFuZ2UnIHwgcnB4VHJhbnNsYXRlfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicmVhZE9ubHlTdW1tYXJ5RmllbGRzVG9EaXNwbGF5RXhpc3RzKClcIj5cblxuICAgICAgICA8dGFibGUgY2xhc3M9XCJzdW1tYXJ5LWZpZWxkc1wiIGFyaWEtZGVzY3JpYmVkYnk9XCJzdW1tYXJ5IGZpZWxkcyB0YWJsZVwiPlxuICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpZWxkIG9mIHNob3dTdW1tYXJ5RmllbGRzXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiIShmaWVsZCB8IGNjZElzQ29tcG91bmQpXCI+XG4gICAgICAgICAgICAgICAgICA8dHIgKm5nU3dpdGNoQ2FzZT1cInRydWVcIiBjY2RMYWJlbFN1YnN0aXR1dG9yIFtjYXNlRmllbGRdPVwiZmllbGRcIiBbZm9ybUdyb3VwXT1cImVkaXRGb3JtLmNvbnRyb2xzWydkYXRhJ11cIiBbY29udGV4dEZpZWxkc109XCJjb250ZXh0RmllbGRzXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0aCBpZD1cInN1bW1hcnktZmllbGQtbGFiZWxcIj57e2ZpZWxkLmxhYmVsfX08L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJmb3JtLWNlbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8Y2NkLWZpZWxkLXJlYWQgW2Zvcm1Hcm91cF09XCJlZGl0Rm9ybS5jb250cm9sc1snZGF0YSddXCIgW2Nhc2VGaWVsZF09XCJzdW1tYXJ5Q2FzZUZpZWxkKGZpZWxkKVwiPjwvY2NkLWZpZWxkLXJlYWQ+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgPHRyICpuZ1N3aXRjaENhc2U9XCJmYWxzZVwiIGNsYXNzPVwiY29tcG91bmQtZmllbGRcIiBjY2RMYWJlbFN1YnN0aXR1dG9yIFtjYXNlRmllbGRdPVwiZmllbGRcIiBbZm9ybUdyb3VwXT1cImVkaXRGb3JtLmNvbnRyb2xzWydkYXRhJ11cIiBbY29udGV4dEZpZWxkc109XCJjb250ZXh0RmllbGRzXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiMlwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxjY2QtZmllbGQtcmVhZCBbZm9ybUdyb3VwXT1cImVkaXRGb3JtLmNvbnRyb2xzWydkYXRhJ11cIiBbY2FzZUZpZWxkXT1cInN1bW1hcnlDYXNlRmllbGQoZmllbGQpXCIgW2Nhc2VGaWVsZHNdPVwiY29udGV4dEZpZWxkc1wiPjwvY2NkLWZpZWxkLXJlYWQ+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0V2ZW50Tm90ZXMoKVwiPlxuICAgICAgICA8ZmllbGRzZXQgaWQ9XCJmaWVsZHNldC1ldmVudFwiIGZvcm1Hcm91cE5hbWU9XCJldmVudFwiPlxuICAgICAgICAgIDxsZWdlbmQgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPjwvbGVnZW5kPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgW25nQ2xhc3NdPVwieydmb3JtLWdyb3VwLWVycm9yJzogISFzdW1tYXJ5ICYmICFzdW1tYXJ5LnZhbGlkICYmIChzdW1tYXJ5LmRpcnR5IHx8IHN1bW1hcnkudG91Y2hlZCl9XCI+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwiZmllbGQtdHJpZ2dlci1zdW1tYXJ5XCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+XG4gICAgICAgICAgICAgIEV2ZW50IHN1bW1hcnkgKG9wdGlvbmFsKVxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0taGludFwiPkEgZmV3IHdvcmRzIGRlc2NyaWJpbmcgdGhlIHB1cnBvc2Ugb2YgdGhlIGV2ZW50Ljwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIiAqbmdJZj1cInN1bW1hcnk/LmVycm9ycyAmJiAoc3VtbWFyeS5kaXJ0eSB8fCBzdW1tYXJ5LnRvdWNoZWQpXCI+XG4gICAgICAgICAgICAgIHt7c3VtbWFyeS5lcnJvcnMgfCBjY2RGaXJzdEVycm9yOiBldmVudFN1bW1hcnlMYWJlbCB8IHJweFRyYW5zbGF0ZX19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImZpZWxkLXRyaWdnZXItc3VtbWFyeVwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGJvdHRvbS0zMCB3aWR0aC01MFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnZ292dWstaW5wdXQtLWVycm9yJzogc3VtbWFyeT8uZXJyb3JzICYmIChzdW1tYXJ5LmRpcnR5IHx8IHN1bW1hcnkudG91Y2hlZCl9XCIgZm9ybUNvbnRyb2xOYW1lPVwic3VtbWFyeVwiIG1heGxlbmd0aD1cIjEwMjRcIj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiIFtuZ0NsYXNzXT1cInsnZm9ybS1ncm91cC1lcnJvcic6ICEhZGVzY3JpcHRpb24gJiYgIWRlc2NyaXB0aW9uLnZhbGlkICYmIChkZXNjcmlwdGlvbi5kaXJ0eSB8fCBkZXNjcmlwdGlvbi50b3VjaGVkKX1cIj5cbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJmaWVsZC10cmlnZ2VyLWRlc2NyaXB0aW9uXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+RXZlbnQgZGVzY3JpcHRpb24gKG9wdGlvbmFsKTwvbGFiZWw+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIiAqbmdJZj1cImRlc2NyaXB0aW9uPy5lcnJvcnMgJiYgKGRlc2NyaXB0aW9uLmRpcnR5IHx8IGRlc2NyaXB0aW9uLnRvdWNoZWQpXCI+XG4gICAgICAgICAgICAgIHt7ZGVzY3JpcHRpb24uZXJyb3JzIHwgY2NkRmlyc3RFcnJvcjogZXZlbnREZXNjcmlwdGlvbkxhYmVsIHwgcnB4VHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDx0ZXh0YXJlYSBpZD1cImZpZWxkLXRyaWdnZXItZGVzY3JpcHRpb25cIiBjbGFzcz1cImZvcm0tY29udHJvbCBib3R0b20tMzAgd2lkdGgtNTBcIiBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnZ292dWstaW5wdXQtLWVycm9yJzogZGVzY3JpcHRpb24/LmVycm9ycyAmJiAoZGVzY3JpcHRpb24uZGlydHkgfHwgZGVzY3JpcHRpb24udG91Y2hlZCl9XCIgbWF4bGVuZ3RoPVwiNjU1MzZcIj48L3RleHRhcmVhPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPGNjZC1jYXNlLWV2ZW50LWNvbXBsZXRpb24gKm5nSWY9XCJjYXNlRWRpdC5pc0V2ZW50Q29tcGxldGlvbkNoZWNrc1JlcXVpcmVkXCJcbiAgICAgIFtldmVudENvbXBsZXRpb25QYXJhbXNdPVwiY2FzZUVkaXQuZXZlbnRDb21wbGV0aW9uUGFyYW1zXCJcbiAgICAgIChldmVudENhbkJlQ29tcGxldGVkKT1cIm9uRXZlbnRDYW5CZUNvbXBsZXRlZCgkZXZlbnQpXCI+XG4gICAgPC9jY2QtY2FzZS1ldmVudC1jb21wbGV0aW9uPlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGZvcm0tZ3JvdXAtcmVsYXRlZFwiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBidXR0b24tc2Vjb25kYXJ5XCIgdHlwZT1cImJ1dHRvblwiIFtkaXNhYmxlZF09XCIhaGFzUHJldmlvdXMoKSB8fCBjYXNlRWRpdC5pc1N1Ym1pdHRpbmdcIiAoY2xpY2spPVwicHJldmlvdXMoKVwiPlxuICAgICAgICB7eydQcmV2aW91cycgfCBycHhUcmFuc2xhdGV9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiIGNsYXNzPVwiYnV0dG9uXCI+XG4gICAgICAgIHt7dHJpZ2dlclRleHQgfCBycHhUcmFuc2xhdGV9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPHAgY2xhc3M9XCJjYW5jZWxcIj5cbiAgICAgIDxhIChjbGljayk9XCJjYW5jZWwoKVwiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiBbY2xhc3MuZGlzYWJsZWRdPVwiY2FzZUVkaXQuaXNTdWJtaXR0aW5nXCI+e3tnZXRDYW5jZWxUZXh0KCkgfCBycHhUcmFuc2xhdGV9fTwvYT5cbiAgICA8L3A+XG4gIDwvZm9ybT5cbjwvZGl2PlxuXG4iXX0=
676
+ }], () => [{ type: i1.CaseEditComponent }, { type: i2.FieldsUtils }, { type: i2.CaseFieldService }, { type: i3.ActivatedRoute }, { type: i2.OrderService }, { type: i2.ProfileNotifier }, { type: i2.MultipageComponentStateService }, { type: i2.FormValidatorsService }, { type: i4.CaseFlagStateService }, { type: i5.LinkedCasesService }, { type: i3.Router }], null); })();
677
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CaseEditSubmitComponent, { className: "CaseEditSubmitComponent", filePath: "lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.ts", lineNumber: 32 }); })();
678
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS1lZGl0LXN1Ym1pdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2QtY2FzZS11aS10b29sa2l0L3NyYy9saWIvc2hhcmVkL2NvbXBvbmVudHMvY2FzZS1lZGl0b3IvY2FzZS1lZGl0LXN1Ym1pdC9jYXNlLWVkaXQtc3VibWl0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9jYXNlLWVkaXRvci9jYXNlLWVkaXQtc3VibWl0L2Nhc2UtZWRpdC1zdWJtaXQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUU3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFakQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR3pDLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsV0FBVyxFQUNYLDhCQUE4QixFQUM5QixxQkFBcUIsRUFDckIsWUFBWSxFQUNaLGVBQWUsRUFDaEIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQUUsdUJBQXVCLEVBQXlCLE1BQU0sYUFBYSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFckUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1B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QXNCO1lBQXRCLHdDQUFzQjtZQUMvQyxjQUErQztZQUEvQyxvRUFBK0M7WUF5RnpCLGNBQThDO1lBQTlDLG1FQUE4QztZQUtsQixlQUFvRDtZQUFwRCwwRUFBb0Q7WUFDeEcsY0FDRjtZQURFLG1FQUNGO1lBQ3NCLGVBQXVCO1lBQXZCLHlDQUF1QjtZQUMzQyxjQUNGO1lBREUsd0VBQ0Y7WUFHZ0QsZUFBd0M7WUFBeEMscURBQXdDO1lBQUMsY0FBa0M7WUFBbEMsaUVBQWtDOzs7aUZEMUZwSCx1QkFBdUI7Y0FMbkMsU0FBUzsyQkFDRSxzQkFBc0I7O2tGQUlyQix1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IENhc2VFdmVudFRyaWdnZXIsIENhc2VGaWVsZCwgUHJvZmlsZSB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbic7XG5pbXBvcnQgeyBUYXNrIH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluL3dvcmstYWxsb2NhdGlvbi9UYXNrJztcbmltcG9ydCB7XG4gIENhc2VGaWVsZFNlcnZpY2UsXG4gIEZpZWxkc1V0aWxzLFxuICBNdWx0aXBhZ2VDb21wb25lbnRTdGF0ZVNlcnZpY2UsXG4gIEZvcm1WYWxpZGF0b3JzU2VydmljZSxcbiAgT3JkZXJTZXJ2aWNlLFxuICBQcm9maWxlTm90aWZpZXJcbn0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgQ2FsbGJhY2tFcnJvcnNDb21wb25lbnQsIENhbGxiYWNrRXJyb3JzQ29udGV4dCB9IGZyb20gJy4uLy4uL2Vycm9yJztcbmltcG9ydCB7IFBhbGV0dGVDb250ZXh0IH0gZnJvbSAnLi4vLi4vcGFsZXR0ZSc7XG5pbXBvcnQgeyBDYXNlRWRpdFBhZ2VDb21wb25lbnQgfSBmcm9tICcuLi9jYXNlLWVkaXQtcGFnZS9jYXNlLWVkaXQtcGFnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FzZUVkaXRDb21wb25lbnQgfSBmcm9tICcuLi9jYXNlLWVkaXQvY2FzZS1lZGl0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBXaXphcmQsIFdpemFyZFBhZ2UgfSBmcm9tICcuLi9kb21haW4nO1xuaW1wb3J0IHsgQ2FzZUVkaXRTdWJtaXRUaXRsZXMgfSBmcm9tICcuL2Nhc2UtZWRpdC1zdWJtaXQtdGl0bGVzLmVudW0nO1xuaW1wb3J0IHsgQ2FzZUZsYWdTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jYXNlLWZsYWctc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBMaW5rZWRDYXNlc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9wYWxldHRlL2xpbmtlZC1jYXNlcy9zZXJ2aWNlcy9saW5rZWQtY2FzZXMuc2VydmljZSc7XG5cblxuLy8gQGR5bmFtaWNcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjZC1jYXNlLWVkaXQtc3VibWl0JyxcbiAgdGVtcGxhdGVVcmw6ICdjYXNlLWVkaXQtc3VibWl0Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi4vY2FzZS1lZGl0LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBDYXNlRWRpdFN1Ym1pdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHVibGljIGV2ZW50VHJpZ2dlcjogQ2FzZUV2ZW50VHJpZ2dlcjtcbiAgcHVibGljIGVkaXRGb3JtOiBGb3JtR3JvdXA7XG4gIHB1YmxpYyB0cmlnZ2VyVGV4dDogc3RyaW5nO1xuICBwdWJsaWMgd2l6YXJkOiBXaXphcmQ7XG4gIHB1YmxpYyBwcm9maWxlOiBQcm9maWxlO1xuICBwdWJsaWMgc2hvd1N1bW1hcnlGaWVsZHM6IENhc2VGaWVsZFtdO1xuICBwdWJsaWMgcGFsZXR0ZUNvbnRleHQ6IFBhbGV0dGVDb250ZXh0ID0gUGFsZXR0ZUNvbnRleHQuQ0hFQ0tfWU9VUl9BTlNXRVI7XG4gIHB1YmxpYyBwcm9maWxlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHB1YmxpYyBjb250ZXh0RmllbGRzOiBDYXNlRmllbGRbXTtcbiAgcHVibGljIHRhc2s6IFRhc2s7XG4gIHB1YmxpYyBwYWdlVGl0bGU6IHN0cmluZztcbiAgcHVibGljIG1ldGFkYXRhRmllbGRzT2JqZWN0OiBvYmplY3Q7XG4gIHB1YmxpYyBhbGxGaWVsZHNWYWx1ZXM6IGFueTtcbiAgcHVibGljIHN1bW1hcnk6IEFic3RyYWN0Q29udHJvbDtcbiAgcHVibGljIGRlc2NyaXB0aW9uOiBBYnN0cmFjdENvbnRyb2w7XG4gIHB1YmxpYyBldmVudFN1bW1hcnlMYWJlbDogc3RyaW5nID0gJ0V2ZW50IHN1bW1hcnknO1xuICBwdWJsaWMgZXZlbnREZXNjcmlwdGlvbkxhYmVsOiBzdHJpbmcgPSAnRXZlbnQgZGVzY3JpcHRpb24nO1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU0hPV19TVU1NQVJZX0NPTlRFTlRfQ09NUEFSRV9GVU5DVElPTiA9IChhOiBDYXNlRmllbGQsIGI6IENhc2VGaWVsZCk6IG51bWJlciA9PiB7XG4gICAgY29uc3QgYUNhc2VGaWVsZCA9IGEuc2hvd19zdW1tYXJ5X2NvbnRlbnRfb3B0aW9uID09PSAwIHx8IGEuc2hvd19zdW1tYXJ5X2NvbnRlbnRfb3B0aW9uO1xuICAgIGNvbnN0IGJDYXNlRmllbGQgPSBiLnNob3dfc3VtbWFyeV9jb250ZW50X29wdGlvbiA9PT0gMCB8fCBiLnNob3dfc3VtbWFyeV9jb250ZW50X29wdGlvbjtcblxuICAgIGlmICghYUNhc2VGaWVsZCkge1xuICAgICAgcmV0dXJuICFiQ2FzZUZpZWxkID8gMCA6IDE7XG4gICAgfVxuXG4gICAgaWYgKCFiQ2FzZUZpZWxkKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIHJldHVybiBhLnNob3dfc3VtbWFyeV9jb250ZW50X29wdGlvbiAtIGIuc2hvd19zdW1tYXJ5X2NvbnRlbnRfb3B0aW9uO1xuICB9O1xuXG4gIHB1YmxpYyBnZXQgaXNEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAvLyBFVUktMzQ1Mi5cbiAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGNoZWNrIHRoZSB2YWxpZGl0eSBvZiB0aGUgZWRpdEZvcm0gYXMgaXQgaXMgcmVhZG9ubHkuXG4gICAgLy8gVGhpcyB3YXMgY2F1c2luZyBpc3N1ZXMgd2l0aCBoaWRkZW4gZmllbGRzIHRoYXQgYXJlbid0IHdhbnRlZCBidXQgaGF2ZVxuICAgIC8vIG5vdCBiZWVuIGRpc2FibGVkLlxuICAgIHJldHVybiB0aGlzLmNhc2VFZGl0LmlzU3VibWl0dGluZyB8fCB0aGlzLmhhc0Vycm9ycztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBjYXNlRWRpdDogQ2FzZUVkaXRDb21wb25lbnQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBmaWVsZHNVdGlsczogRmllbGRzVXRpbHMsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXNlRmllbGRTZXJ2aWNlOiBDYXNlRmllbGRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgb3JkZXJTZXJ2aWNlOiBPcmRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcm9maWxlTm90aWZpZXI6IFByb2ZpbGVOb3RpZmllcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IG11bHRpcGFnZUNvbXBvbmVudFN0YXRlU2VydmljZTogTXVsdGlwYWdlQ29tcG9uZW50U3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybVZhbGlkYXRvcnNTZXJ2aWNlOiBGb3JtVmFsaWRhdG9yc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXNlRmxhZ1N0YXRlU2VydmljZTogQ2FzZUZsYWdTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBsaW5rZWRDYXNlc1NlcnZpY2U6IExpbmtlZENhc2VzU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICApIHtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnByb2ZpbGVTdWJzY3JpcHRpb24gPSB0aGlzLnByb2ZpbGVOb3RpZmllci5wcm9maWxlLnN1YnNjcmliZSgoXykgPT4gdGhpcy5wcm9maWxlID0gXyk7XG4gICAgdGhpcy5ldmVudFRyaWdnZXIgPSB0aGlzLmNhc2VFZGl0LmV2ZW50VHJpZ2dlcjtcbiAgICB0aGlzLnRyaWdnZXJUZXh0ID0gdGhpcy5ldmVudFRyaWdnZXIuZW5kX2J1dHRvbl9sYWJlbCB8fCBDYWxsYmFja0Vycm9yc0NvbXBvbmVudC5UUklHR0VSX1RFWFRfU1VCTUlUO1xuICAgIHRoaXMuZWRpdEZvcm0gPSB0aGlzLmNhc2VFZGl0LmZvcm07XG4gICAgdGhpcy5yZWRpcmVjdElmRm9ybUVtcHR5KCk7XG4gICAgdGhpcy53aXphcmQgPSB0aGlzLmNhc2VFZGl0LndpemFyZDtcbiAgICB0aGlzLnNob3dTdW1tYXJ5RmllbGRzID0gdGhpcy5zb3J0RmllbGRzQnlTaG93U3VtbWFyeUNvbnRlbnQodGhpcy5ldmVudFRyaWdnZXIuY2FzZV9maWVsZHMpO1xuICAgIHRoaXMuY2FzZUVkaXQuaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5jb250ZXh0RmllbGRzID0gdGhpcy5nZXRDYXNlRmllbGRzKCk7XG4gICAgdGhpcy5tZXRhZGF0YUZpZWxkc09iamVjdCA9IHRoaXMuY2FzZUVkaXQ/LmNhc2VEZXRhaWxzPy5tZXRhZGF0YUZpZWxkcz8uXG4gICAgICByZWR1Y2UoKG8sIGtleSkgPT4gT2JqZWN0LmFzc2lnbihvLCB7IFtrZXkuaWRdOiBrZXkudmFsdWUgfSksIHt9KTtcbiAgICB0aGlzLmFsbEZpZWxkc1ZhbHVlcyA9IE9iamVjdC5hc3NpZ24odGhpcy5tZXRhZGF0YUZpZWxkc09iamVjdCA/IHRoaXMubWV0YWRhdGFGaWVsZHNPYmplY3QgOiB7fSwgdGhpcy5lZGl0Rm9ybS5nZXRSYXdWYWx1ZSgpLmRhdGEpO1xuICAgIC8vIEluZGljYXRlcyBpZiB0aGUgc3VibWlzc2lvbiBpcyBmb3IgYSBDYXNlIEZsYWcsIGFzIG9wcG9zZWQgdG8gYSBcInJlZ3VsYXJcIiBmb3JtIHN1Ym1pc3Npb24sIGJ5IHRoZSBwcmVzZW5jZSBvZlxuICAgIC8vIGEgRmxhZ0xhdW5jaGVyIGZpZWxkIGluIHRoZSBldmVudCB0cmlnZ2VyXG4gICAgdGhpcy5jYXNlRWRpdC5pc0Nhc2VGbGFnU3VibWlzc2lvbiA9XG4gICAgICB0aGlzLmV2ZW50VHJpZ2dlci5jYXNlX2ZpZWxkcy5zb21lKChjYXNlRmllbGQpID0+IEZpZWxkc1V0aWxzLmlzQ2FzZUZpZWxkT2ZUeXBlKGNhc2VGaWVsZCwgWydGbGFnTGF1bmNoZXInXSkpO1xuICAgIHRoaXMuY2FzZUVkaXQuaXNMaW5rZWRDYXNlc1N1Ym1pc3Npb24gPVxuICAgICAgdGhpcy5ldmVudFRyaWdnZXIuY2FzZV9maWVsZHMuc29tZShjYXNlRmllbGQgPT4gRmllbGRzVXRpbHMuaXNDYXNlRmllbGRPZlR5cGUoY2FzZUZpZWxkLCBbJ0NvbXBvbmVudExhdW5jaGVyJ10pKTtcbiAgICB0aGlzLnBhZ2VUaXRsZSA9IHRoaXMuZ2V0UGFnZVRpdGxlKCk7XG4gICAgaWYgKCF0aGlzLmNhc2VGbGFnU3RhdGVTZXJ2aWNlLmluaXRpYWxDYXNlRmxhZ3MgJiYgdGhpcy5jYXNlRWRpdC5pc0Nhc2VGbGFnU3VibWlzc2lvbiAmJiBPYmplY3Qua2V5cyh0aGlzLmNhc2VFZGl0LmZvcm0udmFsdWUuZGF0YSkubGVuZ3RoID4gMCl7XG4gICAgICB0aGlzLmNhc2VGbGFnU3RhdGVTZXJ2aWNlLmluaXRpYWxDYXNlRmxhZ3MgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuY2FzZUVkaXQuZm9ybS52YWx1ZSkpO1xuICAgIH1cbiAgICB0aGlzLnN1bW1hcnkgPSB0aGlzLmZvcm1WYWxpZGF0b3JzU2VydmljZS5hZGRNYXJrRG93blZhbGlkYXRvcnModGhpcy5lZGl0Rm9ybSwgJ2V2ZW50LnN1bW1hcnknKTtcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gdGhpcy5mb3JtVmFsaWRhdG9yc1NlcnZpY2UuYWRkTWFya0Rvd25WYWxpZGF0b3JzKHRoaXMuZWRpdEZvcm0sICdldmVudC5kZXNjcmlwdGlvbicpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMucHJvZmlsZVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5wcm9maWxlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHN1Ym1pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdW1tYXJ5LnZhbGlkICYmIHRoaXMuZGVzY3JpcHRpb24udmFsaWQpIHtcbiAgICAgIHRoaXMubGlua2VkQ2FzZXNTZXJ2aWNlLnJlc2V0TGlua2VkQ2FzZURhdGEoKTtcbiAgICAgIHRoaXMuY2hlY2tFeGlzdGluZ0RhdGFJblN1Ym1pc3Npb24oKTtcbiAgICAgIHRoaXMuY2FzZUVkaXQuc3VibWl0Rm9ybSh7XG4gICAgICAgIGV2ZW50VHJpZ2dlcjogdGhpcy5ldmVudFRyaWdnZXIsXG4gICAgICAgIGZvcm06IHRoaXMuZWRpdEZvcm0sXG4gICAgICAgIHN1Ym1pdDogdGhpcy5jYXNlRWRpdC5zdWJtaXQsXG4gICAgICAgIGNhc2VEZXRhaWxzOiB0aGlzLmNhc2VFZGl0LmNhc2VEZXRhaWxzXG4gICAgICB9KTtcbiAgICAgIHRoaXMuY2FzZUZsYWdTdGF0ZVNlcnZpY2UucmVzZXRJbml0aWFsQ2FzZUZsYWdzKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uRXZlbnRDYW5CZUNvbXBsZXRlZChldmVudENhbkJlQ29tcGxldGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5jYXNlRWRpdC5vbkV2ZW50Q2FuQmVDb21wbGV0ZWQoe1xuICAgICAgZXZlbnRUcmlnZ2VyOiB0aGlzLmV2ZW50VHJpZ2dlcixcbiAgICAgIGV2ZW50Q2FuQmVDb21wbGV0ZWQsXG4gICAgICBjYXNlRGV0YWlsczogdGhpcy5jYXNlRWRpdC5jYXNlRGV0YWlscyxcbiAgICAgIGZvcm06IHRoaXMuZWRpdEZvcm0sXG4gICAgICBzdWJtaXQ6IHRoaXMuY2FzZUVkaXQuc3VibWl0XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgY2hlY2tFeGlzdGluZ0RhdGFJblN1Ym1pc3Npb24oKSB7XG4gICAgaWYgKHRoaXMuY2FzZUVkaXQuaXNDYXNlRmxhZ1N1Ym1pc3Npb24pIHtcbiAgICAgIHRoaXMuZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpZWxkRGF0YSA9IHRoaXMuZWRpdEZvcm0udmFsdWUuZGF0YVtmaWVsZC5pZF07XG4gICAgICAgIGlmIChmaWVsZERhdGE/LmRldGFpbHMpIHtcbiAgICAgICAgICBjb25zdCBwcmlvckZsYWdzID0gdGhpcy5jYXNlRmxhZ1N0YXRlU2VydmljZS5pbml0aWFsQ2FzZUZsYWdzLmRhdGFbZmllbGQuaWRdLmRldGFpbHM7XG4gICAgICAgICAgaWYgKHByaW9yRmxhZ3MpIHtcbiAgICAgICAgICAgIHByaW9yRmxhZ3MuZm9yRWFjaCgoZmxhZykgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWZpZWxkLl92YWx1ZS5kZXRhaWxzLnNvbWUoKGRldGFpbCkgPT4gZGV0YWlsLmlkID09PSBmbGFnLmlkKSkge1xuICAgICAgICAgICAgICAgIGZpZWxkLl92YWx1ZS5kZXRhaWxzLnB1c2goZmxhZyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGZpZWxkLl92YWx1ZSkge1xuICAgICAgICAgICAgICBmaWVsZC5fdmFsdWUuZGV0YWlscyA9IGZpZWxkLl92YWx1ZS5kZXRhaWxzPy5maWx0ZXIoKGRldGFpbDogeyBpZD86IHN0cmluZyB9KSA9PiBkZXRhaWwuaWQgIT09IG51bGwpO1xuICAgICAgICAgICAgICBpZiAoZmllbGQuZm9ybWF0dGVkX3ZhbHVlPy5ncm91cElkKSB7XG4gICAgICAgICAgICAgICAgZmllbGQuX3ZhbHVlLmdyb3VwSWQgPSBmaWVsZC5mb3JtYXR0ZWRfdmFsdWUuZ3JvdXBJZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoZmllbGQuZm9ybWF0dGVkX3ZhbHVlPy52aXNpYmlsaXR5KSB7XG4gICAgICAgICAgICAgICAgZmllbGQuX3ZhbHVlLnZpc2liaWxpdHkgPSBmaWVsZC5mb3JtYXR0ZWRfdmFsdWU/LnZpc2liaWxpdHk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGZpZWxkLmZvcm1hdHRlZF92YWx1ZT8uZGV0YWlscykge1xuICAgICAgICAgICAgICAgIGZpZWxkLmZvcm1hdHRlZF92YWx1ZS5kZXRhaWxzID0gZmllbGQuX3ZhbHVlPy5kZXRhaWxzO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGZpZWxkRGF0YS5kZXRhaWxzID0gZmllbGREYXRhLmRldGFpbHMuZmlsdGVyKChkZXRhaWw6IHsgaWQ/OiBzdHJpbmcgfSkgPT4gZGV0YWlsLmlkICE9PSBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGFnZVRpdGxlKCk6IHN0cmluZyB7XG4gICAgY29uc3QgY2FzZUZsYWdGaWVsZCA9IHRoaXMuZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzLmZpbmQoY2FzZUZpZWxkID0+IEZpZWxkc1V0aWxzLmlzQ2FzZUZpZWxkT2ZUeXBlKGNhc2VGaWVsZCwgWydGbGFnTGF1bmNoZXInXSkpO1xuICAgIGlmIChjYXNlRmxhZ0ZpZWxkKSB7XG4gICAgICBjb25zdCBpc0Nhc2VGbGFnRXh0ZXJuYWxNb2RlID0gY2FzZUZsYWdGaWVsZC5kaXNwbGF5X2NvbnRleHRfcGFyYW1ldGVyID09PSAnI0FSR1VNRU5UKFVQREFURSxFWFRFUk5BTCknIHx8XG4gICAgICAgIGNhc2VGbGFnRmllbGQuZGlzcGxheV9jb250ZXh0X3BhcmFtZXRlciA9PT0gJyNBUkdVTUVOVChDUkVBVEUsRVhURVJOQUwpJztcbiAgICAgIHJldHVybiBpc0Nhc2VGbGFnRXh0ZXJuYWxNb2RlXG4gICAgICAgID8gQ2FzZUVkaXRTdWJtaXRUaXRsZXMuUkVWSUVXX1NVUFBPUlRfUkVRVUVTVFxuICAgICAgICA6IENhc2VFZGl0U3VibWl0VGl0bGVzLlJFVklFV19GTEFHX0RFVEFJTFM7XG4gICAgfVxuICAgIHJldHVybiBDYXNlRWRpdFN1Ym1pdFRpdGxlcy5DSEVDS19ZT1VSX0FOU1dFUlM7XG4gIH1cblxuICBwcml2YXRlIGdldCBoYXNFcnJvcnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2FzZUVkaXQ/LmVycm9yPy5jYWxsYmFja0Vycm9ycz8ubGVuZ3RoO1xuICB9XG5cbiAgcHVibGljIG5hdmlnYXRlVG9QYWdlKHBhZ2VJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jYXNlRWRpdC5uYXZpZ2F0ZVRvUGFnZShwYWdlSWQpO1xuICB9XG5cbiAgcHVibGljIGNhbGxiYWNrRXJyb3JzTm90aWZ5KGVycm9yQ29udGV4dDogQ2FsbGJhY2tFcnJvcnNDb250ZXh0KTogdm9pZCB7XG4gICAgdGhpcy5jYXNlRWRpdC5pZ25vcmVXYXJuaW5nID0gZXJyb3JDb250ZXh0Lmlnbm9yZVdhcm5pbmc7XG4gICAgdGhpcy50cmlnZ2VyVGV4dCA9IGVycm9yQ29udGV4dC50cmlnZ2VyVGV4dDtcbiAgfVxuXG4gIHB1YmxpYyBzdW1tYXJ5Q2FzZUZpZWxkKGZpZWxkOiBDYXNlRmllbGQpOiBDYXNlRmllbGQge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKG51bGwgPT09IHRoaXMuZWRpdEZvcm0uZ2V0KCdkYXRhJykuZ2V0KGZpZWxkLmlkKSkge1xuICAgICAgLy8gSWYgbm90IGluIGZvcm0sIHJldHVybiBmaWVsZCBpdHNlbGZcbiAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICBjb25zdCBjbG9uZUZpZWxkOiBDYXNlRmllbGQgPSB0aGlzLmZpZWxkc1V0aWxzLmNsb25lQ2FzZUZpZWxkKGZpZWxkKTtcbiAgICBjbG9uZUZpZWxkLnZhbHVlID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ2RhdGEnKS5nZXQoZmllbGQuaWQpLnZhbHVlO1xuXG4gICAgcmV0dXJuIGNsb25lRmllbGQ7XG4gIH1cblxuICBwdWJsaWMgY2FuY2VsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNhc2VFZGl0LmlzTGlua2VkQ2FzZXNTdWJtaXNzaW9uKSB7XG4gICAgICB0aGlzLmhhbmRsZUxpbmtlZENhc2VzU3VibWlzc2lvbigpO1xuICAgIH1cbiAgICB0aGlzLmNhc2VGbGFnU3RhdGVTZXJ2aWNlLnJlc2V0SW5pdGlhbENhc2VGbGFncygpO1xuICAgIHRoaXMuZW1pdENhbmNlbEV2ZW50KCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUxpbmtlZENhc2VzU3VibWlzc2lvbigpOiB2b2lkIHtcbiAgICBjb25zdCBsaW5rZWRDYXNlc1RhYiA9IHRoaXMuZ2V0TGlua2VkQ2FzZXNUYWIoKTtcbiAgICBjb25zdCBpbml0aWFsTGlua3MgPSB0aGlzLmxpbmtlZENhc2VzU2VydmljZS5pbml0aWFsQ2FzZUxpbmtSZWZzO1xuXG4gICAgaWYgKGxpbmtlZENhc2VzVGFiICYmIGxpbmtlZENhc2VzVGFiLnZhbHVlLmxlbmd0aCAhPT0gaW5pdGlhbExpbmtzLmxlbmd0aCkge1xuICAgICAgbGlua2VkQ2FzZXNUYWIudmFsdWUgPSBsaW5rZWRDYXNlc1RhYi52YWx1ZS5maWx0ZXIoKGl0ZW0pID0+XG4gICAgICAgIGluaXRpYWxMaW5rcy5pbmNsdWRlcyhpdGVtLnZhbHVlLkNhc2VSZWZlcmVuY2UpXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmxpbmtlZENhc2VzU2VydmljZS5yZXNldExpbmtlZENhc2VEYXRhKCk7XG4gIH1cblxuICBwcml2YXRlIGdldExpbmtlZENhc2VzVGFiKCk6IENhc2VGaWVsZCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmNhc2VFZGl0LmNhc2VEZXRhaWxzLnRhYnMuZmluZCgodGFiKSA9PlxuICAgICAgdGFiPy5maWVsZHM/LnNvbWUoKGZpZWxkKSA9PiBmaWVsZC5pZCA9PT0gJ2Nhc2VMaW5rcycpXG4gICAgKT8uZmllbGRzPy5bMF0gPz8gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdENhbmNlbEV2ZW50KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmV2ZW50VHJpZ2dlci5jYW5fc2F2ZV9kcmFmdCkge1xuICAgICAgY29uc3Qgb3JpZ2luID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwLmdldChDYXNlRWRpdENvbXBvbmVudC5PUklHSU5fUVVFUllfUEFSQU0pO1xuICAgICAgY29uc3Qgc3RhdHVzID0gb3JpZ2luID09PSAndmlld0RyYWZ0JyA/IENhc2VFZGl0UGFnZUNvbXBvbmVudC5SRVNVTUVEX0ZPUk1fRElTQ0FSRCA6IENhc2VFZGl0UGFnZUNvbXBvbmVudC5ORVdfRk9STV9ESVNDQVJEO1xuICAgICAgdGhpcy5jYXNlRWRpdC5jYW5jZWxsZWQuZW1pdCh7IHN0YXR1cyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jYXNlRWRpdC5jYW5jZWxsZWQuZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc0xhYmVsKGZpZWxkOiBDYXNlRmllbGQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jYXNlRmllbGRTZXJ2aWNlLmlzTGFiZWwoZmllbGQpO1xuICB9XG5cbiAgcHVibGljIGlzQ2hhbmdlQWxsb3dlZChmaWVsZDogQ2FzZUZpZWxkKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmNhc2VGaWVsZFNlcnZpY2UuaXNSZWFkT25seShmaWVsZCk7XG4gIH1cblxuICBwdWJsaWMgY2hlY2tZb3VyQW5zd2VyRmllbGRzVG9EaXNwbGF5RXhpc3RzKCk6IGJvb2xlYW4ge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMuZXZlbnRUcmlnZ2VyLnNob3dfc3VtbWFyeSB8fCB0aGlzLmV2ZW50VHJpZ2dlci5zaG93X3N1bW1hcnkgPT09IG51bGwpIHtcbiAgICAgIGZvciAoY29uc3QgcGFnZSBvZiB0aGlzLndpemFyZC5wYWdlcykge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAocGFnZS5jYXNlX2ZpZWxkcyAmJiB0aGlzLmlzU2hvd24ocGFnZSkpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHBhZ2UuY2FzZV9maWVsZHMpIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICBpZiAodGhpcy5jYW5TaG93RmllbGRJbkNZQShmaWVsZCkpIHtcbiAgICAgICAgICAgICAgLy8gYXQgbGVhc3Qgb25lIGZpZWxkIG5lZWRzIHNob3dpbmdcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZvdW5kIG5vIGZpZWxkcyB0byBzaG93IGluIENZQSBzdW1tYXJ5IHBhZ2VcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVhZE9ubHlTdW1tYXJ5RmllbGRzVG9EaXNwbGF5RXhpc3RzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmV2ZW50VHJpZ2dlci5jYXNlX2ZpZWxkcy5zb21lKChmaWVsZCkgPT4gZmllbGQuc2hvd19zdW1tYXJ5X2NvbnRlbnRfb3B0aW9uID49IDApO1xuICB9XG5cbiAgcHVibGljIHNob3dFdmVudE5vdGVzKCk6IGJvb2xlYW4ge1xuICAgIC8vIERpc3BsYXkgZXZlbnQgbm90ZXMgcmVsYXRlZCBjb250cm9scyBvbmx5IGlmIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0XG4gICAgLy8gMS4gc2hvd19ldmVudF9ub3RlcyBmbGFnIGlzIHNldCB0byB0cnVlXG4gICAgLy8gMi4gcHJvZmlsZSBpcyBub3QgYSBzb2xpY2l0b3JcbiAgICAvLyAzLiBpcyBub3QgYSBjYXNlIGZsYWdzIGpvdXJuZXksIGFzIGl0IHVzZXMgYSBjdXN0b20gY2hlY2sgeW91ciBhbnN3ZXJzIGNvbXBvbmVudFxuICAgIGlmICh0aGlzLmV2ZW50VHJpZ2dlci5zaG93X2V2ZW50X25vdGVzKSB7XG4gICAgICByZXR1cm4gIXRoaXMucHJvZmlsZT8uaXNTb2xpY2l0b3IoKVxuICAgICAgICAmJiAhdGhpcy5jYXNlRWRpdC5pc0Nhc2VGbGFnU3VibWlzc2lvbjtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMYXN0UGFnZVNob3duKCk6IFdpemFyZFBhZ2Uge1xuICAgIGxldCBsYXN0UGFnZTogV2l6YXJkUGFnZTtcbiAgICB0aGlzLndpemFyZC5yZXZlcnNlKCkuZm9yRWFjaCgocGFnZSkgPT4ge1xuICAgICAgaWYgKCFsYXN0UGFnZSAmJiB0aGlzLmlzU2hvd24ocGFnZSkpIHtcbiAgICAgICAgbGFzdFBhZ2UgPSBwYWdlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIG5vaW5zcGVjdGlvbiBKU1VudXNlZEFzc2lnbm1lbnRcbiAgICByZXR1cm4gbGFzdFBhZ2U7XG4gIH1cblxuICBwdWJsaWMgcHJldmlvdXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2FzZUVkaXQuaXNDYXNlRmxhZ1N1Ym1pc3Npb24pIHtcbiAgICAgIC8vIGlmIHdlIGFyZSBpbiB0aGUgY2FzZWZsYWcgam91cm5leSB3ZSBuZWVkIHRvIHN0b3JlIHRoZSBsYXN0IHBhZ2UgaW5kZXggc28gdGhhdCB0aGUgcHJldmlvdXMgYnV0dG9uIG9uIENZQSB3aWxsIHRha2UgdG8gY29ycmVjdCBwYWdlXG4gICAgICB0aGlzLmNhc2VGbGFnU3RhdGVTZXJ2aWNlLmZpZWxkU3RhdGVUb05hdmlnYXRlID0gdGhpcy5jYXNlRmxhZ1N0YXRlU2VydmljZS5sYXN0UGFnZUZpZWxkU3RhdGU7XG4gICAgfVxuICAgIGlmICh0aGlzLmNhc2VFZGl0LmlzTGlua2VkQ2FzZXNTdWJtaXNzaW9uKSB7XG4gICAgICB0aGlzLmxpbmtlZENhc2VzU2VydmljZS5jYW1lRnJvbUZpbmFsU3RlcCA9IHRydWU7XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMuaGFzUHJldmlvdXMoKSkge1xuICAgICAgdGhpcy5uYXZpZ2F0ZVRvUGFnZSh0aGlzLmdldExhc3RQYWdlU2hvd24oKS5pZCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGhhc1ByZXZpb3VzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZ2V0TGFzdFBhZ2VTaG93bigpO1xuICB9XG5cbiAgcHVibGljIGlzU2hvd24ocGFnZTogV2l6YXJkUGFnZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMuZmllbGRzVXRpbHNcbiAgICAgIC5tZXJnZUNhc2VGaWVsZHNBbmRGb3JtRmllbGRzKHRoaXMuZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzLCB0aGlzLmVkaXRGb3JtLmNvbnRyb2xzLmRhdGEudmFsdWUpO1xuICAgIHJldHVybiBwYWdlLnBhcnNlZFNob3dDb25kaXRpb24ubWF0Y2goZmllbGRzKTtcbiAgfVxuXG4gIHB1YmxpYyBjYW5TaG93RmllbGRJbkNZQShmaWVsZDogQ2FzZUZpZWxkKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZpZWxkLnNob3dfc3VtbWFyeV9jaGFuZ2Vfb3B0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBzb3J0RmllbGRzQnlTaG93U3VtbWFyeUNvbnRlbnQoZmllbGRzOiBDYXNlRmllbGRbXSk6IENhc2VGaWVsZFtdIHtcbiAgICByZXR1cm4gdGhpcy5vcmRlclNlcnZpY2VcbiAgICAgIC5zb3J0KGZpZWxkcywgQ2FzZUVkaXRTdWJtaXRDb21wb25lbnQuU0hPV19TVU1NQVJZX0NPTlRFTlRfQ09NUEFSRV9GVU5DVElPTilcbiAgICAgIC5maWx0ZXIoKGNmKSA9PiBjZi5zaG93X3N1bW1hcnlfY29udGVudF9vcHRpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDYXNlRmllbGRzKCk6IENhc2VGaWVsZFtdIHtcbiAgICBpZiAodGhpcy5jYXNlRWRpdC5jYXNlRGV0YWlscykge1xuICAgICAgcmV0dXJuIEZpZWxkc1V0aWxzLmdldENhc2VGaWVsZHModGhpcy5jYXNlRWRpdC5jYXNlRGV0YWlscyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzO1xuICB9XG5cbiAgcHVibGljIGdldENhc2VJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNhc2VFZGl0LmdldENhc2VJZCh0aGlzLmNhc2VFZGl0LmNhc2VEZXRhaWxzKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDYXNlVGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKHRoaXMuY2FzZUVkaXQuY2FzZURldGFpbHMgJiYgdGhpcy5jYXNlRWRpdC5jYXNlRGV0YWlscy5zdGF0ZSAmJlxuICAgICAgdGhpcy5jYXNlRWRpdC5jYXNlRGV0YWlscy5zdGF0ZS50aXRsZV9kaXNwbGF5ID8gdGhpcy5jYXNlRWRpdC5jYXNlRGV0YWlscy5zdGF0ZS50aXRsZV9kaXNwbGF5IDogJycpO1xuICB9XG5cbiAgcHVibGljIGdldENhbmNlbFRleHQoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5ldmVudFRyaWdnZXIuY2FuX3NhdmVfZHJhZnQpIHtcbiAgICAgIHJldHVybiAnUmV0dXJuIHRvIGNhc2UgbGlzdCc7XG4gICAgfVxuICAgIHJldHVybiAnQ2FuY2VsJztcbiAgfVxuXG4gIHByaXZhdGUgcmVkaXJlY3RJZkZvcm1FbXB0eSgpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5lZGl0Rm9ybT8uZ2V0UmF3VmFsdWUoKT8uZGF0YTtcbiAgICBjb25zdCBpc0VtcHR5ID0gIWRhdGEgfHwgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGggPT09IDApO1xuXG4gICAgaWYgKGlzRW1wdHkpIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2Nhc2VzL2Nhc2UtZmlsdGVyJ10pO1xuICAgIH1cbiAgfVxufVxuXG4iLCI8ZGl2PlxuICA8IS0tIEV2ZW50IHRyaWdnZXIgbmFtZSAtLT5cbiAgPGgxIGNsYXNzPVwiZ292dWstaGVhZGluZy1sXCI+e3tldmVudFRyaWdnZXIubmFtZSB8IHJweFRyYW5zbGF0ZX19PC9oMT5cblxuICA8IS0tQ2FzZSBJRCBvciBUaXRsZSAtLT5cbiAgPGRpdiAqbmdJZj1cImdldENhc2VUaXRsZSgpOyB0aGVuIHRpdGxlQmxvY2s7IGVsc2UgaWRCbG9ja1wiPjwvZGl2PlxuICA8bmctdGVtcGxhdGUgI3RpdGxlQmxvY2s+XG4gICAgPGNjZC1tYXJrZG93biBbY29udGVudF09XCJnZXRDYXNlVGl0bGUoKSB8IGNjZENhc2VUaXRsZTogY29udGV4dEZpZWxkcyA6IGVkaXRGb3JtLmNvbnRyb2xzWydkYXRhJ10gfCBycHhUcmFuc2xhdGVcIj48L2NjZC1tYXJrZG93bj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlICNpZEJsb2NrPlxuICAgIDxoMiAqbmdJZj1cImdldENhc2VJZCgpXCIgY2xhc3M9XCJoZWFkaW5nLWgyXCI+I3t7IGdldENhc2VJZCgpIHwgY2NkQ2FzZVJlZmVyZW5jZSB9fTwvaDI+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPGNjZC1jYXNlLWVkaXQtZ2VuZXJpYy1lcnJvcnMgW2Vycm9yXT1cImNhc2VFZGl0LmVycm9yXCI+PC9jY2QtY2FzZS1lZGl0LWdlbmVyaWMtZXJyb3JzPlxuXG4gIDxjY2QtY2FsbGJhY2stZXJyb3JzIFtjYWxsYmFja0Vycm9yc1N1YmplY3RdPVwiY2FzZUVkaXQuY2FsbGJhY2tFcnJvcnNTdWJqZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2FsbGJhY2tFcnJvcnNDb250ZXh0KT1cImNhbGxiYWNrRXJyb3JzTm90aWZ5KCRldmVudClcIj48L2NjZC1jYWxsYmFjay1lcnJvcnM+XG5cbiAgPGZvcm0gY2xhc3M9XCJjaGVjay15b3VyLWFuc3dlcnNcIiBbZm9ybUdyb3VwXT1cImVkaXRGb3JtXCIgKHN1Ym1pdCk9XCJzdWJtaXQoKVwiPlxuICAgIDxkaXYgKm5nSWY9XCIhY2FzZUVkaXQuaXNFdmVudENvbXBsZXRpb25DaGVja3NSZXF1aXJlZFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoZWNrWW91ckFuc3dlckZpZWxkc1RvRGlzcGxheUV4aXN0cygpXCI+XG4gICAgICAgIDxoMiBjbGFzcz1cImhlYWRpbmctaDJcIj57e3BhZ2VUaXRsZSB8IHJweFRyYW5zbGF0ZSB9fTwvaDI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC0xNlwiICpuZ0lmPVwiIWNhc2VFZGl0LmlzQ2FzZUZsYWdTdWJtaXNzaW9uXCI+e3snQ2hlY2sgdGhlIGluZm9ybWF0aW9uIGJlbG93IGNhcmVmdWxseS4nIHwgcnB4VHJhbnNsYXRlfX08L3NwYW4+XG5cbiAgICAgICAgPHRhYmxlIGNsYXNzPVwiZm9ybS10YWJsZVwiIGFyaWEtZGVzY3JpYmVkYnk9XCJjaGVjayB5b3VyIGFuc3dlcnMgdGFibGVcIj5cbiAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcGFnZSBvZiB3aXphcmQucGFnZXNcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1Nob3duKHBhZ2UpXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpZWxkIG9mIHBhZ2VcbiAgICAgICAgICAgICAgfCBjY2RQYWdlRmllbGRzOiBlZGl0Rm9ybVxuICAgICAgICAgICAgICB8IGNjZFJlYWRGaWVsZHNGaWx0ZXI6IGZhbHNlIDp1bmRlZmluZWQgOnRydWUgOmFsbEZpZWxkc1ZhbHVlc1xuICAgICAgICAgICAgICB8IGNjZENZQVBhZ2VMYWJlbEZpbHRlclwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjYW5TaG93RmllbGRJbkNZQShmaWVsZClcIj5cbiAgICAgICAgICAgICAgICAgIDx0ciBjY2RMYWJlbFN1YnN0aXR1dG9yIFtjYXNlRmllbGRdPVwiZmllbGRcIiBbaGlkZGVuXT1cImZpZWxkLmhpZGRlblwiXG4gICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cF09XCJlZGl0Rm9ybS5jb250cm9sc1snZGF0YSddXCIgW2NvbnRleHRGaWVsZHNdPVwiY29udGV4dEZpZWxkc1wiPlxuICAgICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCIhaXNMYWJlbChmaWVsZCkgJiYgIWNhc2VFZGl0LmlzQ2FzZUZsYWdTdWJtaXNzaW9uXCIgY2xhc3M9XCJ2YWxpZ24tdG9wIGNhc2UtZmllbGQtbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtMTZcIj57e2ZpZWxkLmxhYmVsIHwgcnB4VHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImZvcm0tY2VsbCBjYXNlLWZpZWxkLWNvbnRlbnQgdGV4dC0xNlwiIFthdHRyLmNvbHNwYW5dPVwiaXNMYWJlbChmaWVsZCkgPyAnMicgOiAnMSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8Y2NkLWZpZWxkLXJlYWRcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwiZWRpdEZvcm0uY29udHJvbHNbJ2RhdGEnXVwiIFt0b3BMZXZlbEZvcm1Hcm91cF09XCJlZGl0Rm9ybS5jb250cm9sc1snZGF0YSddXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjYXNlRmllbGRdPVwic3VtbWFyeUNhc2VGaWVsZChmaWVsZClcIiBbY29udGV4dF09XCJwYWxldHRlQ29udGV4dFwiIFtjYXNlRmllbGRzXT1cImNvbnRleHRGaWVsZHNcIj48L2NjZC1maWVsZC1yZWFkPlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNhc2VFZGl0LmlzQ2FzZUZsYWdTdWJtaXNzaW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidmFsaWduLXRvcCBjaGVjay15b3VyLWFuc3dlcnNfX2NoYW5nZSBjYXNlLWZpZWxkLWNoYW5nZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCJpc0NoYW5nZUFsbG93ZWQoZmllbGQpXCIgKGNsaWNrKT1cIm5hdmlnYXRlVG9QYWdlKHBhZ2UuaWQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtMTZcIiBhdHRyLmFyaWEtbGFiZWw9XCJ7eydDaGFuZ2UnIHwgcnB4VHJhbnNsYXRlfX0ge3sgZmllbGQubGFiZWwgfCBycHhUcmFuc2xhdGUgfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydDaGFuZ2UnIHwgcnB4VHJhbnNsYXRlfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicmVhZE9ubHlTdW1tYXJ5RmllbGRzVG9EaXNwbGF5RXhpc3RzKClcIj5cblxuICAgICAgICA8dGFibGUgY2xhc3M9XCJzdW1tYXJ5LWZpZWxkc1wiIGFyaWEtZGVzY3JpYmVkYnk9XCJzdW1tYXJ5IGZpZWxkcyB0YWJsZVwiPlxuICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpZWxkIG9mIHNob3dTdW1tYXJ5RmllbGRzXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiIShmaWVsZCB8IGNjZElzQ29tcG91bmQpXCI+XG4gICAgICAgICAgICAgICAgICA8dHIgKm5nU3dpdGNoQ2FzZT1cInRydWVcIiBjY2RMYWJlbFN1YnN0aXR1dG9yIFtjYXNlRmllbGRdPVwiZmllbGRcIiBbZm9ybUdyb3VwXT1cImVkaXRGb3JtLmNvbnRyb2xzWydkYXRhJ11cIiBbY29udGV4dEZpZWxkc109XCJjb250ZXh0RmllbGRzXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0aCBpZD1cInN1bW1hcnktZmllbGQtbGFiZWxcIj57e2ZpZWxkLmxhYmVsfX08L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJmb3JtLWNlbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8Y2NkLWZpZWxkLXJlYWQgW2Zvcm1Hcm91cF09XCJlZGl0Rm9ybS5jb250cm9sc1snZGF0YSddXCIgW2Nhc2VGaWVsZF09XCJzdW1tYXJ5Q2FzZUZpZWxkKGZpZWxkKVwiPjwvY2NkLWZpZWxkLXJlYWQ+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgPHRyICpuZ1N3aXRjaENhc2U9XCJmYWxzZVwiIGNsYXNzPVwiY29tcG91bmQtZmllbGRcIiBjY2RMYWJlbFN1YnN0aXR1dG9yIFtjYXNlRmllbGRdPVwiZmllbGRcIiBbZm9ybUdyb3VwXT1cImVkaXRGb3JtLmNvbnRyb2xzWydkYXRhJ11cIiBbY29udGV4dEZpZWxkc109XCJjb250ZXh0RmllbGRzXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiMlwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxjY2QtZmllbGQtcmVhZCBbZm9ybUdyb3VwXT1cImVkaXRGb3JtLmNvbnRyb2xzWydkYXRhJ11cIiBbY2FzZUZpZWxkXT1cInN1bW1hcnlDYXNlRmllbGQoZmllbGQpXCIgW2Nhc2VGaWVsZHNdPVwiY29udGV4dEZpZWxkc1wiPjwvY2NkLWZpZWxkLXJlYWQ+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0V2ZW50Tm90ZXMoKVwiPlxuICAgICAgICA8ZmllbGRzZXQgaWQ9XCJmaWVsZHNldC1ldmVudFwiIGZvcm1Hcm91cE5hbWU9XCJldmVudFwiPlxuICAgICAgICAgIDxsZWdlbmQgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPjwvbGVnZW5kPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgW25nQ2xhc3NdPVwieydmb3JtLWdyb3VwLWVycm9yJzogISFzdW1tYXJ5ICYmICFzdW1tYXJ5LnZhbGlkICYmIChzdW1tYXJ5LmRpcnR5IHx8IHN1bW1hcnkudG91Y2hlZCl9XCI+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwiZmllbGQtdHJpZ2dlci1zdW1tYXJ5XCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+XG4gICAgICAgICAgICAgIEV2ZW50IHN1bW1hcnkgKG9wdGlvbmFsKVxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0taGludFwiPkEgZmV3IHdvcmRzIGRlc2NyaWJpbmcgdGhlIHB1cnBvc2Ugb2YgdGhlIGV2ZW50Ljwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIiAqbmdJZj1cInN1bW1hcnk/LmVycm9ycyAmJiAoc3VtbWFyeS5kaXJ0eSB8fCBzdW1tYXJ5LnRvdWNoZWQpXCI+XG4gICAgICAgICAgICAgIHt7c3VtbWFyeS5lcnJvcnMgfCBjY2RGaXJzdEVycm9yOiBldmVudFN1bW1hcnlMYWJlbCB8IHJweFRyYW5zbGF0ZX19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImZpZWxkLXRyaWdnZXItc3VtbWFyeVwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGJvdHRvbS0zMCB3aWR0aC01MFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnZ292dWstaW5wdXQtLWVycm9yJzogc3VtbWFyeT8uZXJyb3JzICYmIChzdW1tYXJ5LmRpcnR5IHx8IHN1bW1hcnkudG91Y2hlZCl9XCIgZm9ybUNvbnRyb2xOYW1lPVwic3VtbWFyeVwiIG1heGxlbmd0aD1cIjEwMjRcIj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiIFtuZ0NsYXNzXT1cInsnZm9ybS1ncm91cC1lcnJvcic6ICEhZGVzY3JpcHRpb24gJiYgIWRlc2NyaXB0aW9uLnZhbGlkICYmIChkZXNjcmlwdGlvbi5kaXJ0eSB8fCBkZXNjcmlwdGlvbi50b3VjaGVkKX1cIj5cbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJmaWVsZC10cmlnZ2VyLWRlc2NyaXB0aW9uXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+RXZlbnQgZGVzY3JpcHRpb24gKG9wdGlvbmFsKTwvbGFiZWw+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIiAqbmdJZj1cImRlc2NyaXB0aW9uPy5lcnJvcnMgJiYgKGRlc2NyaXB0aW9uLmRpcnR5IHx8IGRlc2NyaXB0aW9uLnRvdWNoZWQpXCI+XG4gICAgICAgICAgICAgIHt7ZGVzY3JpcHRpb24uZXJyb3JzIHwgY2NkRmlyc3RFcnJvcjogZXZlbnREZXNjcmlwdGlvbkxhYmVsIHwgcnB4VHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDx0ZXh0YXJlYSBpZD1cImZpZWxkLXRyaWdnZXItZGVzY3JpcHRpb25cIiBjbGFzcz1cImZvcm0tY29udHJvbCBib3R0b20tMzAgd2lkdGgtNTBcIiBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnZ292dWstaW5wdXQtLWVycm9yJzogZGVzY3JpcHRpb24/LmVycm9ycyAmJiAoZGVzY3JpcHRpb24uZGlydHkgfHwgZGVzY3JpcHRpb24udG91Y2hlZCl9XCIgbWF4bGVuZ3RoPVwiNjU1MzZcIj48L3RleHRhcmVhPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPGNjZC1jYXNlLWV2ZW50LWNvbXBsZXRpb24gKm5nSWY9XCJjYXNlRWRpdC5pc0V2ZW50Q29tcGxldGlvbkNoZWNrc1JlcXVpcmVkXCJcbiAgICAgIFtldmVudENvbXBsZXRpb25QYXJhbXNdPVwiY2FzZUVkaXQuZXZlbnRDb21wbGV0aW9uUGFyYW1zXCJcbiAgICAgIChldmVudENhbkJlQ29tcGxldGVkKT1cIm9uRXZlbnRDYW5CZUNvbXBsZXRlZCgkZXZlbnQpXCI+XG4gICAgPC9jY2QtY2FzZS1ldmVudC1jb21wbGV0aW9uPlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGZvcm0tZ3JvdXAtcmVsYXRlZFwiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBidXR0b24tc2Vjb25kYXJ5XCIgdHlwZT1cImJ1dHRvblwiIFtkaXNhYmxlZF09XCIhaGFzUHJldmlvdXMoKSB8fCBjYXNlRWRpdC5pc1N1Ym1pdHRpbmdcIiAoY2xpY2spPVwicHJldmlvdXMoKVwiPlxuICAgICAgICB7eydQcmV2aW91cycgfCBycHhUcmFuc2xhdGV9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiIGNsYXNzPVwiYnV0dG9uXCI+XG4gICAgICAgIHt7dHJpZ2dlclRleHQgfCBycHhUcmFuc2xhdGV9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPHAgY2xhc3M9XCJjYW5jZWxcIj5cbiAgICAgIDxhIChjbGljayk9XCJjYW5jZWwoKVwiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiBbY2xhc3MuZGlzYWJsZWRdPVwiY2FzZUVkaXQuaXNTdWJtaXR0aW5nXCI+e3tnZXRDYW5jZWxUZXh0KCkgfCBycHhUcmFuc2xhdGV9fTwvYT5cbiAgICA8L3A+XG4gIDwvZm9ybT5cbjwvZGl2PlxuXG4iXX0=
@@ -116,7 +116,7 @@ export class CaseFileViewFieldComponent {
116
116
  // As there can be more than one intersecting role, if any acls are update: true
117
117
  this.allowMoving = acls.some(acl => acl.update);
118
118
  this.icp_jurisdictions = this.abstractConfig.getIcpJurisdictions();
119
- this.icpEnabled = true;
119
+ this.icpEnabled = this.abstractConfig.getIcpEnable();
120
120
  }
121
121
  ngAfterViewInit() {
122
122
  const slider = this.elementRef.nativeElement.querySelector('.slider');
@@ -194,4 +194,4 @@ export class CaseFileViewFieldComponent {
194
194
  args: [{ selector: 'ccd-case-file-view-field', template: "<ng-container *ngIf=\"errorMessages?.length\">\n <div\n id=\"case-file-view-field-errors\"\n class=\"govuk-error-summary govuk-!-margin-bottom-4\"\n data-module=\"govuk-error-summary\"\n >\n <div role=\"alert\">\n <h2 class=\"govuk-error-summary__title\">There is a problem</h2>\n <div class=\"govuk-error-summary__body\">\n <ul class=\"govuk-list govuk-error-summary__list\">\n <li *ngFor=\"let errorMessage of errorMessages\">\n <a href=\"javascript:void(0);\">{{ errorMessage }}</a>\n </li>\n </ul>\n </div>\n </div>\n </div>\n</ng-container>\n\n<div\n *ngIf=\"getCategoriesAndDocumentsError\"\n class=\"govuk-grid-column-two-thirds\"\n>\n <h1 class=\"govuk-heading-xl\">Sorry, there is a problem with the service</h1>\n <p class=\"govuk-body\">Try again later.</p>\n</div>\n<div *ngIf=\"!getCategoriesAndDocumentsError\">\n <h2 class=\"govuk-heading-l\">Case file</h2>\n <div class=\"govuk-form-group\" id=\"case-file-view\">\n <!-- Document tree -->\n <div class=\"document-tree-container\">\n <ccd-case-file-view-folder \n class=\"document-tree-container__tree\"\n [categoriesAndDocuments]=\"categoriesAndDocuments$\"\n (clickedDocument)=\"setMediaViewerFile($event); resetErrorMessages()\" \n (moveDocument)=\"moveDocument($event)\"\n [allowMoving]=\"allowMoving\">\n </ccd-case-file-view-folder>\n </div>\n <!-- Slider -->\n <div class=\"slider\"></div>\n <!-- Media viewer -->\n <div class=\"media-viewer-container\">\n <ng-container *ngIf=\"currentDocument\">\n <mv-media-viewer\n [url]=\"currentDocument.document_binary_url\"\n [downloadFileName]=\"currentDocument.document_filename\"\n [showToolbar]=\"true\"\n [contentType]=\"currentDocument.content_type\"\n [enableAnnotations]=\"true\"\n [enableRedactions]=\"true\"\n [height]=\"'94.5vh'\"\n [caseId]=\"caseId\"\n [multimediaPlayerEnabled]=\"true\"\n [enableICP]=\"isIcpEnabled()\"\n >\n </mv-media-viewer>\n </ng-container>\n </div>\n </div>\n</div>\n", styles: ["#case-file-view{display:flex;border:2px solid #C9C9C9;height:100vh;position:relative}#case-file-view .document-tree-container{background-color:#faf8f8;width:30%;min-height:400px;min-width:10%}#case-file-view .slider{width:.2%;background-color:#6b6b6b}#case-file-view .slider:hover,#case-file-view .slider:focus{cursor:col-resize}#case-file-view .media-viewer-container{background-color:#dee0e2;flex:1 1 0;overflow:hidden}\n"] }]
195
195
  }], () => [{ type: i0.ElementRef }, { type: i1.ActivatedRoute }, { type: i2.CaseFileViewService }, { type: i2.DocumentManagementService }, { type: i2.LoadingService }, { type: i2.SessionStorageService }, { type: i3.CaseNotifier }, { type: i4.AbstractAppConfig }], null); })();
196
196
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CaseFileViewFieldComponent, { className: "CaseFileViewFieldComponent", filePath: "lib/shared/components/palette/case-file-view/case-file-view-field.component.ts", lineNumber: 17 }); })();
197
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS1maWxlLXZpZXctZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvY2FzZS1maWxlLXZpZXcvY2FzZS1maWxlLXZpZXctZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvY2FzZS1maWxlLXZpZXcvY2FzZS1maWxlLXZpZXctZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsVUFBVSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUN4RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLFNBQVMsRUFBYyxFQUFFLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQy9ELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJakYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLHlCQUF5QixFQUFFLGNBQWMsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7OztJQ0U5QyxBQURGLDBCQUErQyxXQUNmO0lBQUEsWUFBa0I7SUFDbEQsQUFEa0QsaUJBQUksRUFDakQ7OztJQUQyQixlQUFrQjtJQUFsQixxQ0FBa0I7OztJQVg1RCw2QkFBNEM7SUFPdEMsQUFERixB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SSxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUNoRyxJQUFJLENBQUMsWUFBWSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDcEUsQ0FBQztvSEF4SFUsMEJBQTBCOzZEQUExQiwwQkFBMEI7WUNVdkMsQUFQQSxBQW5CQSw2RkFBNEMsOERBc0IzQyw4REFJNEM7O1lBMUI5QixrRkFBMkI7WUFvQnZDLGNBQW9DO1lBQXBDLHlEQUFvQztZQU1qQyxjQUFxQztZQUFyQywwREFBcUM7OztpRkRWOUIsMEJBQTBCO2NBTHRDLFNBQVM7MkJBQ0UsMEJBQTBCOztrRkFJekIsMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBPYnNlcnZhYmxlLCBvZiwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaW5hbGl6ZSwgbWFwLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENhc2VGaWVsZCB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbic7XG5pbXBvcnQgeyBDYXNlRmlsZVZpZXdEb2N1bWVudCwgQ2F0ZWdvcmllc0FuZERvY3VtZW50cywgRG9jdW1lbnRUcmVlTm9kZSB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbi9jYXNlLWZpbGUtdmlldyc7XG5pbXBvcnQgeyBVc2VySW5mbyB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbi91c2VyL3VzZXItaW5mby5tb2RlbCc7XG5pbXBvcnQgeyBDYXNlRmlsZVZpZXdTZXJ2aWNlLCBEb2N1bWVudE1hbmFnZW1lbnRTZXJ2aWNlLCBMb2FkaW5nU2VydmljZSwgU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgQWJzdHJhY3RBcHBDb25maWcgfSBmcm9tICcuLi8uLi8uLi8uLi9hcHAuY29uZmlnJztcbmltcG9ydCB7IENhc2VOb3RpZmllciB9IGZyb20gJy4uLy4uL2Nhc2UtZWRpdG9yL3NlcnZpY2VzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NkLWNhc2UtZmlsZS12aWV3LWZpZWxkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Nhc2UtZmlsZS12aWV3LWZpZWxkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2FzZS1maWxlLXZpZXctZmllbGQuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2FzZUZpbGVWaWV3RmllbGRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUEFSQU1fQ0FTRV9JRCA9ICdjaWQnO1xuICBwdWJsaWMgYWxsb3dNb3ZpbmcgPSB0cnVlO1xuICBwdWJsaWMgY2F0ZWdvcmllc0FuZERvY3VtZW50cyQ6IE9ic2VydmFibGU8Q2F0ZWdvcmllc0FuZERvY3VtZW50cz47XG4gIHB1YmxpYyBjYXRlZ29yaWVzQW5kRG9jdW1lbnRzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHB1YmxpYyBnZXRDYXRlZ29yaWVzQW5kRG9jdW1lbnRzRXJyb3IgPSBmYWxzZTtcbiAgcHVibGljIGN1cnJlbnREb2N1bWVudDogQ2FzZUZpbGVWaWV3RG9jdW1lbnQgfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyBlcnJvck1lc3NhZ2VzID0gW10gYXMgc3RyaW5nW107XG4gIHByaXZhdGUgY2FzZVZlcnNpb246IG51bWJlcjtcbiAgcHVibGljIGNhc2VGaWVsZDogQ2FzZUZpZWxkO1xuICBwdWJsaWMgaWNwX2p1cmlzZGljdGlvbnM6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBpY3BFbmFibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBjYXNlSWQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBjYXNlRmlsZVZpZXdTZXJ2aWNlOiBDYXNlRmlsZVZpZXdTZXJ2aWNlLFxuICAgIHByaXZhdGUgZG9jdW1lbnRNYW5hZ2VtZW50U2VydmljZTogRG9jdW1lbnRNYW5hZ2VtZW50U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvYWRpbmdTZXJ2aWNlOiBMb2FkaW5nU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb25TdG9yYWdlU2VydmljZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FzZU5vdGlmaWVyOiBDYXNlTm90aWZpZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBhYnN0cmFjdENvbmZpZzogQWJzdHJhY3RBcHBDb25maWcsXG4gICkgeyB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY2FzZUlkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoQ2FzZUZpbGVWaWV3RmllbGRDb21wb25lbnQuUEFSQU1fQ0FTRV9JRCk7XG4gICAgdGhpcy5jYXRlZ29yaWVzQW5kRG9jdW1lbnRzJCA9IHRoaXMuY2FzZUZpbGVWaWV3U2VydmljZS5nZXRDYXRlZ29yaWVzQW5kRG9jdW1lbnRzKHRoaXMuY2FzZUlkKTtcbiAgICB0aGlzLmNhdGVnb3JpZXNBbmREb2N1bWVudHNTdWJzY3JpcHRpb24gPSB0aGlzLmNhdGVnb3JpZXNBbmREb2N1bWVudHMkLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiBkYXRhID0+IHtcbiAgICAgICAgdGhpcy5jYXNlVmVyc2lvbiA9IGRhdGEuY2FzZV92ZXJzaW9uO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBfID0+IHRoaXMuZ2V0Q2F0ZWdvcmllc0FuZERvY3VtZW50c0Vycm9yID0gdHJ1ZVxuICAgIH0pO1xuXG4gICAgLy8gRVhVSS04MDAwXG4gICAgY29uc3QgdXNlckluZm86IFVzZXJJbmZvID0gSlNPTi5wYXJzZSh0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5nZXRJdGVtKCd1c2VyRGV0YWlscycpKTtcbiAgICAvLyBHZXQgYWNscyB0aGF0IGludGVyc2VjdHMgZnJvbSBhY2wgcm9sZXMgYW5kIHVzZXIgcm9sZXNcbiAgICBjb25zdCBhY2xzID0gdGhpcy5jYXNlRmllbGQuYWNscy5maWx0ZXIoYWNsID0+IHVzZXJJbmZvLnJvbGVzLmluY2x1ZGVzKGFjbC5yb2xlKSk7XG4gICAgLy8gQXMgdGhlcmUgY2FuIGJlIG1vcmUgdGhhbiBvbmUgaW50ZXJzZWN0aW5nIHJvbGUsIGlmIGFueSBhY2xzIGFyZSB1cGRhdGU6IHRydWVcbiAgICB0aGlzLmFsbG93TW92aW5nID0gYWNscy5zb21lKGFjbCA9PiBhY2wudXBkYXRlKTtcbiAgICB0aGlzLmljcF9qdXJpc2RpY3Rpb25zID0gdGhpcy5hYnN0cmFjdENvbmZpZy5nZXRJY3BKdXJpc2RpY3Rpb25zKCk7XG4gICAgdGhpcy5pY3BFbmFibGVkID0gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgY29uc3Qgc2xpZGVyID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLnNsaWRlcicpO1xuICAgIGNvbnN0IGRvY3VtZW50VHJlZUNvbnRhaW5lciA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kb2N1bWVudC10cmVlLWNvbnRhaW5lcicpO1xuXG4gICAgY29uc3QgbW91c2Vkb3duJCA9IGZyb21FdmVudDxNb3VzZUV2ZW50PihzbGlkZXIsICdtb3VzZWRvd24nKTtcbiAgICBjb25zdCBtb3VzZW1vdmUkID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGRvY3VtZW50LCAnbW91c2Vtb3ZlJyk7XG4gICAgY29uc3QgbW91c2V1cCQgPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZG9jdW1lbnQsICdtb3VzZXVwJyk7XG4gICAgY29uc3QgZHJhZyQgPSBtb3VzZWRvd24kLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoXG4gICAgICAgIChzdGFydCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHggPSBzdGFydC5jbGllbnRYO1xuICAgICAgICAgIGNvbnN0IGRvY3VtZW50VHJlZUNvbnRhaW5lcldpZHRoID0gZG9jdW1lbnRUcmVlQ29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICAgIHJldHVybiBtb3VzZW1vdmUkLnBpcGUobWFwKG1vdmUgPT4ge1xuICAgICAgICAgICAgbW92ZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZHg6IG1vdmUuY2xpZW50WCAtIHgsXG4gICAgICAgICAgICAgIGRvY3VtZW50VHJlZUNvbnRhaW5lcldpZHRoXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGFrZVVudGlsKG1vdXNldXAkKSk7XG4gICAgICAgIH1cbiAgICAgIClcbiAgICApO1xuXG4gICAgZHJhZyQuc3Vic2NyaWJlKHBvcyA9PiB7XG4gICAgICBjb25zdCBjYWxjdWxhdGVkV2lkdGggPSAoKHBvcy5kb2N1bWVudFRyZWVDb250YWluZXJXaWR0aCArIHBvcy5keCkgKiAxMDApIC8gc2xpZGVyLnBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICBkb2N1bWVudFRyZWVDb250YWluZXIuc2V0QXR0cmlidXRlKCdzdHlsZScsIGB3aWR0aDogJHtjYWxjdWxhdGVkV2lkdGh9JWApO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNldE1lZGlhVmlld2VyRmlsZShkb2N1bWVudDogRG9jdW1lbnRUcmVlTm9kZSk6IHZvaWQge1xuICAgIGNvbnN0IG1lZGlhVmlld2VySW5mbyA9IHRoaXMuZG9jdW1lbnRNYW5hZ2VtZW50U2VydmljZS5nZXRNZWRpYVZpZXdlckluZm8oe1xuICAgICAgZG9jdW1lbnRfYmluYXJ5X3VybDogZG9jdW1lbnQuZG9jdW1lbnRfYmluYXJ5X3VybCxcbiAgICAgIGRvY3VtZW50X2ZpbGVuYW1lOiBkb2N1bWVudC5kb2N1bWVudF9maWxlbmFtZVxuICAgIH0pO1xuICAgIHRoaXMuY3VycmVudERvY3VtZW50ID0gSlNPTi5wYXJzZShtZWRpYVZpZXdlckluZm8pO1xuICB9XG5cbiAgcHVibGljIG1vdmVEb2N1bWVudChkYXRhOiB7IGRvY3VtZW50OiBEb2N1bWVudFRyZWVOb2RlLCBuZXdDYXRlZ29yeTogc3RyaW5nIH0pOiB2b2lkIHtcbiAgICBjb25zdCBjaWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldChDYXNlRmlsZVZpZXdGaWVsZENvbXBvbmVudC5QQVJBTV9DQVNFX0lEKTtcbiAgICBjb25zdCBsb2FkaW5nVG9rZW4gPSB0aGlzLmxvYWRpbmdTZXJ2aWNlLnJlZ2lzdGVyKCk7XG4gICAgdGhpcy5jYXNlRmlsZVZpZXdTZXJ2aWNlLnVwZGF0ZURvY3VtZW50Q2F0ZWdvcnkoY2lkLCB0aGlzLmNhc2VWZXJzaW9uLCBkYXRhLmRvY3VtZW50LmF0dHJpYnV0ZV9wYXRoLCBkYXRhLm5ld0NhdGVnb3J5KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTZXJ2aWNlLnVucmVnaXN0ZXIobG9hZGluZ1Rva2VuKTtcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlcyA9IFsnWW91IGRvIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gbW92ZSB0aGlzIGRvY3VtZW50IHRvIHRoZSBzZWxlY3RlZCBmb2xkZXIuJ107XG4gICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgIHRoaXMucmVzZXRFcnJvck1lc3NhZ2VzKCk7XG4gICAgICAgICAgdGhpcy5yZWxvYWRQYWdlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHJlbG9hZFBhZ2UoKTogdm9pZCB7XG4gICAgbG9jYXRpb24ucmVsb2FkKCk7XG4gIH1cblxuICBwdWJsaWMgcmVzZXRFcnJvck1lc3NhZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlcyA9IFtdO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNhdGVnb3JpZXNBbmREb2N1bWVudHNTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuY2F0ZWdvcmllc0FuZERvY3VtZW50c1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc0ljcEVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaWNwRW5hYmxlZCAmJiAoKHRoaXMuaWNwX2p1cmlzZGljdGlvbnM/Lmxlbmd0aCA8IDEpIHx8IHRoaXMuaWNwX2p1cmlzZGljdGlvbnMuaW5jbHVkZXMoXG4gICAgICB0aGlzLmNhc2VOb3RpZmllcj8uY2FjaGVkQ2FzZVZpZXc/LmNhc2VfdHlwZT8uanVyaXNkaWN0aW9uLmlkKSk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJlcnJvck1lc3NhZ2VzPy5sZW5ndGhcIj5cbiAgPGRpdlxuICAgIGlkPVwiY2FzZS1maWxlLXZpZXctZmllbGQtZXJyb3JzXCJcbiAgICBjbGFzcz1cImdvdnVrLWVycm9yLXN1bW1hcnkgZ292dWstIS1tYXJnaW4tYm90dG9tLTRcIlxuICAgIGRhdGEtbW9kdWxlPVwiZ292dWstZXJyb3Itc3VtbWFyeVwiXG4gID5cbiAgICA8ZGl2IHJvbGU9XCJhbGVydFwiPlxuICAgICAgPGgyIGNsYXNzPVwiZ292dWstZXJyb3Itc3VtbWFyeV9fdGl0bGVcIj5UaGVyZSBpcyBhIHByb2JsZW08L2gyPlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWVycm9yLXN1bW1hcnlfX2JvZHlcIj5cbiAgICAgICAgPHVsIGNsYXNzPVwiZ292dWstbGlzdCBnb3Z1ay1lcnJvci1zdW1tYXJ5X19saXN0XCI+XG4gICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBlcnJvck1lc3NhZ2Ugb2YgZXJyb3JNZXNzYWdlc1wiPlxuICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIj57eyBlcnJvck1lc3NhZ2UgfX08L2E+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgPC91bD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuXG48ZGl2XG4gICpuZ0lmPVwiZ2V0Q2F0ZWdvcmllc0FuZERvY3VtZW50c0Vycm9yXCJcbiAgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi10d28tdGhpcmRzXCJcbj5cbiAgPGgxIGNsYXNzPVwiZ292dWstaGVhZGluZy14bFwiPlNvcnJ5LCB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aCB0aGUgc2VydmljZTwvaDE+XG4gIDxwIGNsYXNzPVwiZ292dWstYm9keVwiPlRyeSBhZ2FpbiBsYXRlci48L3A+XG48L2Rpdj5cbjxkaXYgKm5nSWY9XCIhZ2V0Q2F0ZWdvcmllc0FuZERvY3VtZW50c0Vycm9yXCI+XG4gIDxoMiBjbGFzcz1cImdvdnVrLWhlYWRpbmctbFwiPkNhc2UgZmlsZTwvaDI+XG4gIDxkaXYgY2xhc3M9XCJnb3Z1ay1mb3JtLWdyb3VwXCIgaWQ9XCJjYXNlLWZpbGUtdmlld1wiPlxuICAgIDwhLS0gRG9jdW1lbnQgdHJlZSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZG9jdW1lbnQtdHJlZS1jb250YWluZXJcIj5cbiAgICAgIDxjY2QtY2FzZS1maWxlLXZpZXctZm9sZGVyIFxuICAgICAgICAgIGNsYXNzPVwiZG9jdW1lbnQtdHJlZS1jb250YWluZXJfX3RyZWVcIlxuICAgICAgICAgIFtjYXRlZ29yaWVzQW5kRG9jdW1lbnRzXT1cImNhdGVnb3JpZXNBbmREb2N1bWVudHMkXCJcbiAgICAgICAgICAoY2xpY2tlZERvY3VtZW50KT1cInNldE1lZGlhVmlld2VyRmlsZSgkZXZlbnQpOyByZXNldEVycm9yTWVzc2FnZXMoKVwiIFxuICAgICAgICAgIChtb3ZlRG9jdW1lbnQpPVwibW92ZURvY3VtZW50KCRldmVudClcIlxuICAgICAgICAgIFthbGxvd01vdmluZ109XCJhbGxvd01vdmluZ1wiPlxuICAgICAgPC9jY2QtY2FzZS1maWxlLXZpZXctZm9sZGVyPlxuICAgIDwvZGl2PlxuICAgIDwhLS0gU2xpZGVyIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJzbGlkZXJcIj48L2Rpdj5cbiAgICA8IS0tIE1lZGlhIHZpZXdlciAtLT5cbiAgICA8ZGl2IGNsYXNzPVwibWVkaWEtdmlld2VyLWNvbnRhaW5lclwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1cnJlbnREb2N1bWVudFwiPlxuICAgICAgICA8bXYtbWVkaWEtdmlld2VyXG4gICAgICAgICAgW3VybF09XCJjdXJyZW50RG9jdW1lbnQuZG9jdW1lbnRfYmluYXJ5X3VybFwiXG4gICAgICAgICAgW2Rvd25sb2FkRmlsZU5hbWVdPVwiY3VycmVudERvY3VtZW50LmRvY3VtZW50X2ZpbGVuYW1lXCJcbiAgICAgICAgICBbc2hvd1Rvb2xiYXJdPVwidHJ1ZVwiXG4gICAgICAgICAgW2NvbnRlbnRUeXBlXT1cImN1cnJlbnREb2N1bWVudC5jb250ZW50X3R5cGVcIlxuICAgICAgICAgIFtlbmFibGVBbm5vdGF0aW9uc109XCJ0cnVlXCJcbiAgICAgICAgICBbZW5hYmxlUmVkYWN0aW9uc109XCJ0cnVlXCJcbiAgICAgICAgICBbaGVpZ2h0XT1cIic5NC41dmgnXCJcbiAgICAgICAgICBbY2FzZUlkXT1cImNhc2VJZFwiXG4gICAgICAgICAgW211bHRpbWVkaWFQbGF5ZXJFbmFibGVkXT1cInRydWVcIlxuICAgICAgICAgIFtlbmFibGVJQ1BdPVwiaXNJY3BFbmFibGVkKClcIlxuICAgICAgICA+XG4gICAgICAgIDwvbXYtbWVkaWEtdmlld2VyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
197
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS1maWxlLXZpZXctZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvY2FzZS1maWxlLXZpZXcvY2FzZS1maWxlLXZpZXctZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvY2FzZS1maWxlLXZpZXcvY2FzZS1maWxlLXZpZXctZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsVUFBVSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUN4RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLFNBQVMsRUFBYyxFQUFFLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQy9ELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJakYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLHlCQUF5QixFQUFFLGNBQWMsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7OztJQ0U5QyxBQURGLDBCQUErQyxXQUNmO0lBQUEsWUFBa0I7SUFDbEQsQUFEa0QsaUJBQUksRUFDakQ7OztJQUQyQixlQUFrQjtJQUFsQixxQ0FBa0I7OztJQVg1RCw2QkFBNEM7SUFPdEMsQUFERixB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QixPQUFPLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FDaEcsSUFBSSxDQUFDLFlBQVksRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7b0hBeEhVLDBCQUEwQjs2REFBMUIsMEJBQTBCO1lDVXZDLEFBUEEsQUFuQkEsNkZBQTRDLDhEQXNCM0MsOERBSTRDOztZQTFCOUIsa0ZBQTJCO1lBb0J2QyxjQUFvQztZQUFwQyx5REFBb0M7WUFNakMsY0FBcUM7WUFBckMsMERBQXFDOzs7aUZEVjlCLDBCQUEwQjtjQUx0QyxTQUFTOzJCQUNFLDBCQUEwQjs7a0ZBSXpCLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGZyb21FdmVudCwgT2JzZXJ2YWJsZSwgb2YsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmluYWxpemUsIG1hcCwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDYXNlRmllbGQgfSBmcm9tICcuLi8uLi8uLi9kb21haW4nO1xuaW1wb3J0IHsgQ2FzZUZpbGVWaWV3RG9jdW1lbnQsIENhdGVnb3JpZXNBbmREb2N1bWVudHMsIERvY3VtZW50VHJlZU5vZGUgfSBmcm9tICcuLi8uLi8uLi9kb21haW4vY2FzZS1maWxlLXZpZXcnO1xuaW1wb3J0IHsgVXNlckluZm8gfSBmcm9tICcuLi8uLi8uLi9kb21haW4vdXNlci91c2VyLWluZm8ubW9kZWwnO1xuaW1wb3J0IHsgQ2FzZUZpbGVWaWV3U2VydmljZSwgRG9jdW1lbnRNYW5hZ2VtZW50U2VydmljZSwgTG9hZGluZ1NlcnZpY2UsIFNlc3Npb25TdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEFic3RyYWN0QXBwQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vLi4vYXBwLmNvbmZpZyc7XG5pbXBvcnQgeyBDYXNlTm90aWZpZXIgfSBmcm9tICcuLi8uLi9jYXNlLWVkaXRvci9zZXJ2aWNlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjZC1jYXNlLWZpbGUtdmlldy1maWVsZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYXNlLWZpbGUtdmlldy1maWVsZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Nhc2UtZmlsZS12aWV3LWZpZWxkLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIENhc2VGaWxlVmlld0ZpZWxkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBBUkFNX0NBU0VfSUQgPSAnY2lkJztcbiAgcHVibGljIGFsbG93TW92aW5nID0gdHJ1ZTtcbiAgcHVibGljIGNhdGVnb3JpZXNBbmREb2N1bWVudHMkOiBPYnNlcnZhYmxlPENhdGVnb3JpZXNBbmREb2N1bWVudHM+O1xuICBwdWJsaWMgY2F0ZWdvcmllc0FuZERvY3VtZW50c1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgZ2V0Q2F0ZWdvcmllc0FuZERvY3VtZW50c0Vycm9yID0gZmFsc2U7XG4gIHB1YmxpYyBjdXJyZW50RG9jdW1lbnQ6IENhc2VGaWxlVmlld0RvY3VtZW50IHwgdW5kZWZpbmVkO1xuICBwdWJsaWMgZXJyb3JNZXNzYWdlcyA9IFtdIGFzIHN0cmluZ1tdO1xuICBwcml2YXRlIGNhc2VWZXJzaW9uOiBudW1iZXI7XG4gIHB1YmxpYyBjYXNlRmllbGQ6IENhc2VGaWVsZDtcbiAgcHVibGljIGljcF9qdXJpc2RpY3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgaWNwRW5hYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgY2FzZUlkOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgY2FzZUZpbGVWaWV3U2VydmljZTogQ2FzZUZpbGVWaWV3U2VydmljZSxcbiAgICBwcml2YXRlIGRvY3VtZW50TWFuYWdlbWVudFNlcnZpY2U6IERvY3VtZW50TWFuYWdlbWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2FkaW5nU2VydmljZTogTG9hZGluZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uU3RvcmFnZVNlcnZpY2U6IFNlc3Npb25TdG9yYWdlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhc2VOb3RpZmllcjogQ2FzZU5vdGlmaWVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWJzdHJhY3RDb25maWc6IEFic3RyYWN0QXBwQ29uZmlnLFxuICApIHsgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNhc2VJZCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KENhc2VGaWxlVmlld0ZpZWxkQ29tcG9uZW50LlBBUkFNX0NBU0VfSUQpO1xuICAgIHRoaXMuY2F0ZWdvcmllc0FuZERvY3VtZW50cyQgPSB0aGlzLmNhc2VGaWxlVmlld1NlcnZpY2UuZ2V0Q2F0ZWdvcmllc0FuZERvY3VtZW50cyh0aGlzLmNhc2VJZCk7XG4gICAgdGhpcy5jYXRlZ29yaWVzQW5kRG9jdW1lbnRzU3Vic2NyaXB0aW9uID0gdGhpcy5jYXRlZ29yaWVzQW5kRG9jdW1lbnRzJC5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogZGF0YSA9PiB7XG4gICAgICAgIHRoaXMuY2FzZVZlcnNpb24gPSBkYXRhLmNhc2VfdmVyc2lvbjtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogXyA9PiB0aGlzLmdldENhdGVnb3JpZXNBbmREb2N1bWVudHNFcnJvciA9IHRydWVcbiAgICB9KTtcblxuICAgIC8vIEVYVUktODAwMFxuICAgIGNvbnN0IHVzZXJJbmZvOiBVc2VySW5mbyA9IEpTT04ucGFyc2UodGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UuZ2V0SXRlbSgndXNlckRldGFpbHMnKSk7XG4gICAgLy8gR2V0IGFjbHMgdGhhdCBpbnRlcnNlY3RzIGZyb20gYWNsIHJvbGVzIGFuZCB1c2VyIHJvbGVzXG4gICAgY29uc3QgYWNscyA9IHRoaXMuY2FzZUZpZWxkLmFjbHMuZmlsdGVyKGFjbCA9PiB1c2VySW5mby5yb2xlcy5pbmNsdWRlcyhhY2wucm9sZSkpO1xuICAgIC8vIEFzIHRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIGludGVyc2VjdGluZyByb2xlLCBpZiBhbnkgYWNscyBhcmUgdXBkYXRlOiB0cnVlXG4gICAgdGhpcy5hbGxvd01vdmluZyA9IGFjbHMuc29tZShhY2wgPT4gYWNsLnVwZGF0ZSk7XG4gICAgdGhpcy5pY3BfanVyaXNkaWN0aW9ucyA9IHRoaXMuYWJzdHJhY3RDb25maWcuZ2V0SWNwSnVyaXNkaWN0aW9ucygpO1xuICAgIHRoaXMuaWNwRW5hYmxlZCA9IHRoaXMuYWJzdHJhY3RDb25maWcuZ2V0SWNwRW5hYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IHNsaWRlciA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zbGlkZXInKTtcbiAgICBjb25zdCBkb2N1bWVudFRyZWVDb250YWluZXIgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZG9jdW1lbnQtdHJlZS1jb250YWluZXInKTtcblxuICAgIGNvbnN0IG1vdXNlZG93biQgPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4oc2xpZGVyLCAnbW91c2Vkb3duJyk7XG4gICAgY29uc3QgbW91c2Vtb3ZlJCA9IGZyb21FdmVudDxNb3VzZUV2ZW50Pihkb2N1bWVudCwgJ21vdXNlbW92ZScpO1xuICAgIGNvbnN0IG1vdXNldXAkID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGRvY3VtZW50LCAnbW91c2V1cCcpO1xuICAgIGNvbnN0IGRyYWckID0gbW91c2Vkb3duJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKFxuICAgICAgICAoc3RhcnQpID0+IHtcbiAgICAgICAgICBjb25zdCB4ID0gc3RhcnQuY2xpZW50WDtcbiAgICAgICAgICBjb25zdCBkb2N1bWVudFRyZWVDb250YWluZXJXaWR0aCA9IGRvY3VtZW50VHJlZUNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgICByZXR1cm4gbW91c2Vtb3ZlJC5waXBlKG1hcChtb3ZlID0+IHtcbiAgICAgICAgICAgIG1vdmUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGR4OiBtb3ZlLmNsaWVudFggLSB4LFxuICAgICAgICAgICAgICBkb2N1bWVudFRyZWVDb250YWluZXJXaWR0aFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRha2VVbnRpbChtb3VzZXVwJCkpO1xuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcblxuICAgIGRyYWckLnN1YnNjcmliZShwb3MgPT4ge1xuICAgICAgY29uc3QgY2FsY3VsYXRlZFdpZHRoID0gKChwb3MuZG9jdW1lbnRUcmVlQ29udGFpbmVyV2lkdGggKyBwb3MuZHgpICogMTAwKSAvIHNsaWRlci5wYXJlbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgZG9jdW1lbnRUcmVlQ29udGFpbmVyLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBgd2lkdGg6ICR7Y2FsY3VsYXRlZFdpZHRofSVgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRNZWRpYVZpZXdlckZpbGUoZG9jdW1lbnQ6IERvY3VtZW50VHJlZU5vZGUpOiB2b2lkIHtcbiAgICBjb25zdCBtZWRpYVZpZXdlckluZm8gPSB0aGlzLmRvY3VtZW50TWFuYWdlbWVudFNlcnZpY2UuZ2V0TWVkaWFWaWV3ZXJJbmZvKHtcbiAgICAgIGRvY3VtZW50X2JpbmFyeV91cmw6IGRvY3VtZW50LmRvY3VtZW50X2JpbmFyeV91cmwsXG4gICAgICBkb2N1bWVudF9maWxlbmFtZTogZG9jdW1lbnQuZG9jdW1lbnRfZmlsZW5hbWVcbiAgICB9KTtcbiAgICB0aGlzLmN1cnJlbnREb2N1bWVudCA9IEpTT04ucGFyc2UobWVkaWFWaWV3ZXJJbmZvKTtcbiAgfVxuXG4gIHB1YmxpYyBtb3ZlRG9jdW1lbnQoZGF0YTogeyBkb2N1bWVudDogRG9jdW1lbnRUcmVlTm9kZSwgbmV3Q2F0ZWdvcnk6IHN0cmluZyB9KTogdm9pZCB7XG4gICAgY29uc3QgY2lkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoQ2FzZUZpbGVWaWV3RmllbGRDb21wb25lbnQuUEFSQU1fQ0FTRV9JRCk7XG4gICAgY29uc3QgbG9hZGluZ1Rva2VuID0gdGhpcy5sb2FkaW5nU2VydmljZS5yZWdpc3RlcigpO1xuICAgIHRoaXMuY2FzZUZpbGVWaWV3U2VydmljZS51cGRhdGVEb2N1bWVudENhdGVnb3J5KGNpZCwgdGhpcy5jYXNlVmVyc2lvbiwgZGF0YS5kb2N1bWVudC5hdHRyaWJ1dGVfcGF0aCwgZGF0YS5uZXdDYXRlZ29yeSlcbiAgICAgIC5waXBlKFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nU2VydmljZS51bnJlZ2lzdGVyKGxvYWRpbmdUb2tlbik7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZXMgPSBbJ1lvdSBkbyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIG1vdmUgdGhpcyBkb2N1bWVudCB0byB0aGUgc2VsZWN0ZWQgZm9sZGVyLiddO1xuICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICB0aGlzLnJlc2V0RXJyb3JNZXNzYWdlcygpO1xuICAgICAgICAgIHRoaXMucmVsb2FkUGFnZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyByZWxvYWRQYWdlKCk6IHZvaWQge1xuICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICB9XG5cbiAgcHVibGljIHJlc2V0RXJyb3JNZXNzYWdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmVycm9yTWVzc2FnZXMgPSBbXTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jYXRlZ29yaWVzQW5kRG9jdW1lbnRzU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmNhdGVnb3JpZXNBbmREb2N1bWVudHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNJY3BFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmljcEVuYWJsZWQgJiYgKCh0aGlzLmljcF9qdXJpc2RpY3Rpb25zPy5sZW5ndGggPCAxKSB8fCB0aGlzLmljcF9qdXJpc2RpY3Rpb25zLmluY2x1ZGVzKFxuICAgICAgdGhpcy5jYXNlTm90aWZpZXI/LmNhY2hlZENhc2VWaWV3Py5jYXNlX3R5cGU/Lmp1cmlzZGljdGlvbi5pZCkpO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiZXJyb3JNZXNzYWdlcz8ubGVuZ3RoXCI+XG4gIDxkaXZcbiAgICBpZD1cImNhc2UtZmlsZS12aWV3LWZpZWxkLWVycm9yc1wiXG4gICAgY2xhc3M9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5IGdvdnVrLSEtbWFyZ2luLWJvdHRvbS00XCJcbiAgICBkYXRhLW1vZHVsZT1cImdvdnVrLWVycm9yLXN1bW1hcnlcIlxuICA+XG4gICAgPGRpdiByb2xlPVwiYWxlcnRcIj5cbiAgICAgIDxoMiBjbGFzcz1cImdvdnVrLWVycm9yLXN1bW1hcnlfX3RpdGxlXCI+VGhlcmUgaXMgYSBwcm9ibGVtPC9oMj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5X19ib2R5XCI+XG4gICAgICAgIDx1bCBjbGFzcz1cImdvdnVrLWxpc3QgZ292dWstZXJyb3Itc3VtbWFyeV9fbGlzdFwiPlxuICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgZXJyb3JNZXNzYWdlIG9mIGVycm9yTWVzc2FnZXNcIj5cbiAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCI+e3sgZXJyb3JNZXNzYWdlIH19PC9hPlxuICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cblxuPGRpdlxuICAqbmdJZj1cImdldENhdGVnb3JpZXNBbmREb2N1bWVudHNFcnJvclwiXG4gIGNsYXNzPVwiZ292dWstZ3JpZC1jb2x1bW4tdHdvLXRoaXJkc1wiXG4+XG4gIDxoMSBjbGFzcz1cImdvdnVrLWhlYWRpbmcteGxcIj5Tb3JyeSwgdGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggdGhlIHNlcnZpY2U8L2gxPlxuICA8cCBjbGFzcz1cImdvdnVrLWJvZHlcIj5UcnkgYWdhaW4gbGF0ZXIuPC9wPlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwiIWdldENhdGVnb3JpZXNBbmREb2N1bWVudHNFcnJvclwiPlxuICA8aDIgY2xhc3M9XCJnb3Z1ay1oZWFkaW5nLWxcIj5DYXNlIGZpbGU8L2gyPlxuICA8ZGl2IGNsYXNzPVwiZ292dWstZm9ybS1ncm91cFwiIGlkPVwiY2FzZS1maWxlLXZpZXdcIj5cbiAgICA8IS0tIERvY3VtZW50IHRyZWUgLS0+XG4gICAgPGRpdiBjbGFzcz1cImRvY3VtZW50LXRyZWUtY29udGFpbmVyXCI+XG4gICAgICA8Y2NkLWNhc2UtZmlsZS12aWV3LWZvbGRlciBcbiAgICAgICAgICBjbGFzcz1cImRvY3VtZW50LXRyZWUtY29udGFpbmVyX190cmVlXCJcbiAgICAgICAgICBbY2F0ZWdvcmllc0FuZERvY3VtZW50c109XCJjYXRlZ29yaWVzQW5kRG9jdW1lbnRzJFwiXG4gICAgICAgICAgKGNsaWNrZWREb2N1bWVudCk9XCJzZXRNZWRpYVZpZXdlckZpbGUoJGV2ZW50KTsgcmVzZXRFcnJvck1lc3NhZ2VzKClcIiBcbiAgICAgICAgICAobW92ZURvY3VtZW50KT1cIm1vdmVEb2N1bWVudCgkZXZlbnQpXCJcbiAgICAgICAgICBbYWxsb3dNb3ZpbmddPVwiYWxsb3dNb3ZpbmdcIj5cbiAgICAgIDwvY2NkLWNhc2UtZmlsZS12aWV3LWZvbGRlcj5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIFNsaWRlciAtLT5cbiAgICA8ZGl2IGNsYXNzPVwic2xpZGVyXCI+PC9kaXY+XG4gICAgPCEtLSBNZWRpYSB2aWV3ZXIgLS0+XG4gICAgPGRpdiBjbGFzcz1cIm1lZGlhLXZpZXdlci1jb250YWluZXJcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXJyZW50RG9jdW1lbnRcIj5cbiAgICAgICAgPG12LW1lZGlhLXZpZXdlclxuICAgICAgICAgIFt1cmxdPVwiY3VycmVudERvY3VtZW50LmRvY3VtZW50X2JpbmFyeV91cmxcIlxuICAgICAgICAgIFtkb3dubG9hZEZpbGVOYW1lXT1cImN1cnJlbnREb2N1bWVudC5kb2N1bWVudF9maWxlbmFtZVwiXG4gICAgICAgICAgW3Nob3dUb29sYmFyXT1cInRydWVcIlxuICAgICAgICAgIFtjb250ZW50VHlwZV09XCJjdXJyZW50RG9jdW1lbnQuY29udGVudF90eXBlXCJcbiAgICAgICAgICBbZW5hYmxlQW5ub3RhdGlvbnNdPVwidHJ1ZVwiXG4gICAgICAgICAgW2VuYWJsZVJlZGFjdGlvbnNdPVwidHJ1ZVwiXG4gICAgICAgICAgW2hlaWdodF09XCInOTQuNXZoJ1wiXG4gICAgICAgICAgW2Nhc2VJZF09XCJjYXNlSWRcIlxuICAgICAgICAgIFttdWx0aW1lZGlhUGxheWVyRW5hYmxlZF09XCJ0cnVlXCJcbiAgICAgICAgICBbZW5hYmxlSUNQXT1cImlzSWNwRW5hYmxlZCgpXCJcbiAgICAgICAgPlxuICAgICAgICA8L212LW1lZGlhLXZpZXdlcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -13115,7 +13115,7 @@ class CaseFileViewFieldComponent {
13115
13115
  // As there can be more than one intersecting role, if any acls are update: true
13116
13116
  this.allowMoving = acls.some(acl => acl.update);
13117
13117
  this.icp_jurisdictions = this.abstractConfig.getIcpJurisdictions();
13118
- this.icpEnabled = true;
13118
+ this.icpEnabled = this.abstractConfig.getIcpEnable();
13119
13119
  }
13120
13120
  ngAfterViewInit() {
13121
13121
  const slider = this.elementRef.nativeElement.querySelector('.slider');
@@ -31843,6 +31843,7 @@ class CaseEditSubmitComponent {
31843
31843
  formValidatorsService;
31844
31844
  caseFlagStateService;
31845
31845
  linkedCasesService;
31846
+ router;
31846
31847
  eventTrigger;
31847
31848
  editForm;
31848
31849
  triggerText;
@@ -31878,7 +31879,7 @@ class CaseEditSubmitComponent {
31878
31879
  // not been disabled.
31879
31880
  return this.caseEdit.isSubmitting || this.hasErrors;
31880
31881
  }
31881
- constructor(caseEdit, fieldsUtils, caseFieldService, route, orderService, profileNotifier, multipageComponentStateService, formValidatorsService, caseFlagStateService, linkedCasesService) {
31882
+ constructor(caseEdit, fieldsUtils, caseFieldService, route, orderService, profileNotifier, multipageComponentStateService, formValidatorsService, caseFlagStateService, linkedCasesService, router) {
31882
31883
  this.caseEdit = caseEdit;
31883
31884
  this.fieldsUtils = fieldsUtils;
31884
31885
  this.caseFieldService = caseFieldService;
@@ -31889,12 +31890,14 @@ class CaseEditSubmitComponent {
31889
31890
  this.formValidatorsService = formValidatorsService;
31890
31891
  this.caseFlagStateService = caseFlagStateService;
31891
31892
  this.linkedCasesService = linkedCasesService;
31893
+ this.router = router;
31892
31894
  }
31893
31895
  ngOnInit() {
31894
31896
  this.profileSubscription = this.profileNotifier.profile.subscribe((_) => this.profile = _);
31895
31897
  this.eventTrigger = this.caseEdit.eventTrigger;
31896
31898
  this.triggerText = this.eventTrigger.end_button_label || CallbackErrorsComponent.TRIGGER_TEXT_SUBMIT;
31897
31899
  this.editForm = this.caseEdit.form;
31900
+ this.redirectIfFormEmpty();
31898
31901
  this.wizard = this.caseEdit.wizard;
31899
31902
  this.showSummaryFields = this.sortFieldsByShowSummaryContent(this.eventTrigger.case_fields);
31900
31903
  this.caseEdit.isSubmitting = false;
@@ -32131,7 +32134,14 @@ class CaseEditSubmitComponent {
32131
32134
  }
32132
32135
  return 'Cancel';
32133
32136
  }
32134
- static ɵfac = function CaseEditSubmitComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CaseEditSubmitComponent)(i0.ɵɵdirectiveInject(CaseEditComponent), i0.ɵɵdirectiveInject(FieldsUtils), i0.ɵɵdirectiveInject(CaseFieldService), i0.ɵɵdirectiveInject(i1$1.ActivatedRoute), i0.ɵɵdirectiveInject(OrderService), i0.ɵɵdirectiveInject(ProfileNotifier), i0.ɵɵdirectiveInject(MultipageComponentStateService), i0.ɵɵdirectiveInject(FormValidatorsService), i0.ɵɵdirectiveInject(CaseFlagStateService), i0.ɵɵdirectiveInject(LinkedCasesService)); };
32137
+ redirectIfFormEmpty() {
32138
+ const data = this.editForm?.getRawValue()?.data;
32139
+ const isEmpty = !data || (typeof data === 'object' && Object.keys(data).length === 0);
32140
+ if (isEmpty) {
32141
+ this.router.navigate(['/cases/case-filter']);
32142
+ }
32143
+ }
32144
+ static ɵfac = function CaseEditSubmitComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CaseEditSubmitComponent)(i0.ɵɵdirectiveInject(CaseEditComponent), i0.ɵɵdirectiveInject(FieldsUtils), i0.ɵɵdirectiveInject(CaseFieldService), i0.ɵɵdirectiveInject(i1$1.ActivatedRoute), i0.ɵɵdirectiveInject(OrderService), i0.ɵɵdirectiveInject(ProfileNotifier), i0.ɵɵdirectiveInject(MultipageComponentStateService), i0.ɵɵdirectiveInject(FormValidatorsService), i0.ɵɵdirectiveInject(CaseFlagStateService), i0.ɵɵdirectiveInject(LinkedCasesService), i0.ɵɵdirectiveInject(i1$1.Router)); };
32135
32145
  static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CaseEditSubmitComponent, selectors: [["ccd-case-edit-submit"]], decls: 25, vars: 24, consts: [["titleBlock", ""], ["idBlock", ""], [1, "govuk-heading-l"], [4, "ngIf", "ngIfThen", "ngIfElse"], [3, "error"], [3, "callbackErrorsContext", "callbackErrorsSubject"], [1, "check-your-answers", 3, "submit", "formGroup"], [4, "ngIf"], [3, "eventCompletionParams", "eventCanBeCompleted", 4, "ngIf"], [1, "form-group", "form-group-related"], ["type", "button", 1, "button", "button-secondary", 3, "click", "disabled"], ["type", "submit", 1, "button", 3, "disabled"], [1, "cancel"], ["href", "javascript:void(0)", 3, "click"], [3, "content"], ["class", "heading-h2", 4, "ngIf"], [1, "heading-h2"], ["class", "text-16", 4, "ngIf"], ["aria-describedby", "check your answers table", 1, "form-table"], [4, "ngFor", "ngForOf"], [1, "text-16"], ["ccdLabelSubstitutor", "", 3, "caseField", "hidden", "formGroup", "contextFields"], ["class", "valign-top case-field-label", 4, "ngIf"], [1, "form-cell", "case-field-content", "text-16"], [3, "formGroup", "topLevelFormGroup", "caseField", "context", "caseFields"], [1, "valign-top", "case-field-label"], [1, "valign-top", "check-your-answers__change", "case-field-change"], ["href", "javascript:void(0)", 3, "click", 4, "ngIf"], ["aria-describedby", "summary fields table", 1, "summary-fields"], [3, "ngSwitch"], ["ccdLabelSubstitutor", "", 3, "caseField", "formGroup", "contextFields", 4, "ngSwitchCase"], ["class", "compound-field", "ccdLabelSubstitutor", "", 3, "caseField", "formGroup", "contextFields", 4, "ngSwitchCase"], ["ccdLabelSubstitutor", "", 3, "caseField", "formGroup", "contextFields"], ["id", "summary-field-label"], [1, "form-cell"], [3, "formGroup", "caseField"], ["ccdLabelSubstitutor", "", 1, "compound-field", 3, "caseField", "formGroup", "contextFields"], ["colspan", "2"], [3, "formGroup", "caseField", "caseFields"], ["id", "fieldset-event", "formGroupName", "event"], [2, "display", "none"], [1, "form-group", 3, "ngClass"], ["for", "field-trigger-summary", 1, "form-label"], [1, "form-hint"], ["class", "error-message", 4, "ngIf"], ["type", "text", "id", "field-trigger-summary", "formControlName", "summary", "maxlength", "1024", 1, "form-control", "bottom-30", "width-50", 3, "ngClass"], ["for", "field-trigger-description", 1, "form-label"], ["id", "field-trigger-description", "formControlName", "description", "maxlength", "65536", 1, "form-control", "bottom-30", "width-50", 3, "ngClass"], [1, "error-message"], [3, "eventCanBeCompleted", "eventCompletionParams"]], template: function CaseEditSubmitComponent_Template(rf, ctx) { if (rf & 1) {
32136
32146
  const _r1 = i0.ɵɵgetCurrentView();
32137
32147
  i0.ɵɵelementStart(0, "div")(1, "h1", 2);
@@ -32194,8 +32204,8 @@ class CaseEditSubmitComponent {
32194
32204
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CaseEditSubmitComponent, [{
32195
32205
  type: Component,
32196
32206
  args: [{ selector: 'ccd-case-edit-submit', template: "<div>\n <!-- Event trigger name -->\n <h1 class=\"govuk-heading-l\">{{eventTrigger.name | rpxTranslate}}</h1>\n\n <!--Case ID or Title -->\n <div *ngIf=\"getCaseTitle(); then titleBlock; else idBlock\"></div>\n <ng-template #titleBlock>\n <ccd-markdown [content]=\"getCaseTitle() | ccdCaseTitle: contextFields : editForm.controls['data'] | rpxTranslate\"></ccd-markdown>\n </ng-template>\n <ng-template #idBlock>\n <h2 *ngIf=\"getCaseId()\" class=\"heading-h2\">#{{ getCaseId() | ccdCaseReference }}</h2>\n </ng-template>\n\n <ccd-case-edit-generic-errors [error]=\"caseEdit.error\"></ccd-case-edit-generic-errors>\n\n <ccd-callback-errors [callbackErrorsSubject]=\"caseEdit.callbackErrorsSubject\"\n (callbackErrorsContext)=\"callbackErrorsNotify($event)\"></ccd-callback-errors>\n\n <form class=\"check-your-answers\" [formGroup]=\"editForm\" (submit)=\"submit()\">\n <div *ngIf=\"!caseEdit.isEventCompletionChecksRequired\">\n <ng-container *ngIf=\"checkYourAnswerFieldsToDisplayExists()\">\n <h2 class=\"heading-h2\">{{pageTitle | rpxTranslate }}</h2>\n <span class=\"text-16\" *ngIf=\"!caseEdit.isCaseFlagSubmission\">{{'Check the information below carefully.' | rpxTranslate}}</span>\n\n <table class=\"form-table\" aria-describedby=\"check your answers table\">\n <tbody>\n <ng-container *ngFor=\"let page of wizard.pages\">\n <ng-container *ngIf=\"isShown(page)\">\n <ng-container *ngFor=\"let field of page\n | ccdPageFields: editForm\n | ccdReadFieldsFilter: false :undefined :true :allFieldsValues\n | ccdCYAPageLabelFilter\">\n <ng-container *ngIf=\"canShowFieldInCYA(field)\">\n <tr ccdLabelSubstitutor [caseField]=\"field\" [hidden]=\"field.hidden\"\n [formGroup]=\"editForm.controls['data']\" [contextFields]=\"contextFields\">\n <th *ngIf=\"!isLabel(field) && !caseEdit.isCaseFlagSubmission\" class=\"valign-top case-field-label\">\n <span class=\"text-16\">{{field.label | rpxTranslate}}</span>\n </th>\n <td class=\"form-cell case-field-content text-16\" [attr.colspan]=\"isLabel(field) ? '2' : '1'\">\n <ccd-field-read\n [formGroup]=\"editForm.controls['data']\" [topLevelFormGroup]=\"editForm.controls['data']\"\n [caseField]=\"summaryCaseField(field)\" [context]=\"paletteContext\" [caseFields]=\"contextFields\"></ccd-field-read>\n </td>\n <ng-container *ngIf=\"!caseEdit.isCaseFlagSubmission\">\n <td class=\"valign-top check-your-answers__change case-field-change\">\n <a *ngIf=\"isChangeAllowed(field)\" (click)=\"navigateToPage(page.id)\"\n href=\"javascript:void(0)\">\n <span class=\"text-16\" attr.aria-label=\"{{'Change' | rpxTranslate}} {{ field.label | rpxTranslate }}\">\n {{'Change' | rpxTranslate}}\n </span>\n </a>\n </td>\n </ng-container>\n </tr>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </tbody>\n </table>\n </ng-container>\n <ng-container *ngIf=\"readOnlySummaryFieldsToDisplayExists()\">\n\n <table class=\"summary-fields\" aria-describedby=\"summary fields table\">\n <tbody>\n <ng-container *ngFor=\"let field of showSummaryFields\">\n <ng-container [ngSwitch]=\"!(field | ccdIsCompound)\">\n <tr *ngSwitchCase=\"true\" ccdLabelSubstitutor [caseField]=\"field\" [formGroup]=\"editForm.controls['data']\" [contextFields]=\"contextFields\">\n <th id=\"summary-field-label\">{{field.label}}</th>\n <td class=\"form-cell\">\n <ccd-field-read [formGroup]=\"editForm.controls['data']\" [caseField]=\"summaryCaseField(field)\"></ccd-field-read>\n </td>\n </tr>\n <tr *ngSwitchCase=\"false\" class=\"compound-field\" ccdLabelSubstitutor [caseField]=\"field\" [formGroup]=\"editForm.controls['data']\" [contextFields]=\"contextFields\">\n <td colspan=\"2\">\n <ccd-field-read [formGroup]=\"editForm.controls['data']\" [caseField]=\"summaryCaseField(field)\" [caseFields]=\"contextFields\"></ccd-field-read>\n </td>\n </tr>\n </ng-container>\n </ng-container>\n </tbody>\n </table>\n </ng-container>\n <ng-container *ngIf=\"showEventNotes()\">\n <fieldset id=\"fieldset-event\" formGroupName=\"event\">\n <legend style=\"display: none;\"></legend>\n <div class=\"form-group\" [ngClass]=\"{'form-group-error': !!summary && !summary.valid && (summary.dirty || summary.touched)}\">\n <label for=\"field-trigger-summary\" class=\"form-label\">\n Event summary (optional)\n <span class=\"form-hint\">A few words describing the purpose of the event.</span>\n </label>\n <span class=\"error-message\" *ngIf=\"summary?.errors && (summary.dirty || summary.touched)\">\n {{summary.errors | ccdFirstError: eventSummaryLabel | rpxTranslate}}\n </span>\n <input type=\"text\" id=\"field-trigger-summary\" class=\"form-control bottom-30 width-50\"\n [ngClass]=\"{'govuk-input--error': summary?.errors && (summary.dirty || summary.touched)}\" formControlName=\"summary\" maxlength=\"1024\">\n </div>\n <div class=\"form-group\" [ngClass]=\"{'form-group-error': !!description && !description.valid && (description.dirty || description.touched)}\">\n <label for=\"field-trigger-description\" class=\"form-label\">Event description (optional)</label>\n <span class=\"error-message\" *ngIf=\"description?.errors && (description.dirty || description.touched)\">\n {{description.errors | ccdFirstError: eventDescriptionLabel | rpxTranslate}}\n </span>\n <textarea id=\"field-trigger-description\" class=\"form-control bottom-30 width-50\" formControlName=\"description\"\n [ngClass]=\"{'govuk-input--error': description?.errors && (description.dirty || description.touched)}\" maxlength=\"65536\"></textarea>\n </div>\n </fieldset>\n </ng-container>\n </div>\n <ccd-case-event-completion *ngIf=\"caseEdit.isEventCompletionChecksRequired\"\n [eventCompletionParams]=\"caseEdit.eventCompletionParams\"\n (eventCanBeCompleted)=\"onEventCanBeCompleted($event)\">\n </ccd-case-event-completion>\n <div class=\"form-group form-group-related\">\n <button class=\"button button-secondary\" type=\"button\" [disabled]=\"!hasPrevious() || caseEdit.isSubmitting\" (click)=\"previous()\">\n {{'Previous' | rpxTranslate}}\n </button>\n <button type=\"submit\" [disabled]=\"isDisabled\" class=\"button\">\n {{triggerText | rpxTranslate}}\n </button>\n </div>\n <p class=\"cancel\">\n <a (click)=\"cancel()\" href=\"javascript:void(0)\" [class.disabled]=\"caseEdit.isSubmitting\">{{getCancelText() | rpxTranslate}}</a>\n </p>\n </form>\n</div>\n\n", styles: ["#fieldset-case-data{margin-bottom:30px}#fieldset-case-data th{width:1%;white-space:nowrap;vertical-align:top}.compound-field td{padding:0}#confirmation-header{width:630px;background-color:#17958b;border:solid 1px #979797;color:#fff;text-align:center}#confirmation-body{width:630px;background-color:#fff}.valign-top{vertical-align:top}.summary-fields{margin-bottom:30px}.summary-fields tbody tr th,.summary-fields tbody tr td{border-bottom:0px}a.disabled{pointer-events:none;cursor:default}.case-field-label{width:45%}.case-field-content{width:50%}.no-bottom-border{border-bottom:none}.case-field-change{width:5%}\n"] }]
32197
- }], () => [{ type: CaseEditComponent }, { type: FieldsUtils }, { type: CaseFieldService }, { type: i1$1.ActivatedRoute }, { type: OrderService }, { type: ProfileNotifier }, { type: MultipageComponentStateService }, { type: FormValidatorsService }, { type: CaseFlagStateService }, { type: LinkedCasesService }], null); })();
32198
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CaseEditSubmitComponent, { className: "CaseEditSubmitComponent", filePath: "lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.ts", lineNumber: 30 }); })();
32207
+ }], () => [{ type: CaseEditComponent }, { type: FieldsUtils }, { type: CaseFieldService }, { type: i1$1.ActivatedRoute }, { type: OrderService }, { type: ProfileNotifier }, { type: MultipageComponentStateService }, { type: FormValidatorsService }, { type: CaseFlagStateService }, { type: LinkedCasesService }, { type: i1$1.Router }], null); })();
32208
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CaseEditSubmitComponent, { className: "CaseEditSubmitComponent", filePath: "lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.ts", lineNumber: 32 }); })();
32199
32209
 
32200
32210
  function CaseProgressComponent_div_0_Template(rf, ctx) { if (rf & 1) {
32201
32211
  const _r1 = i0.ɵɵgetCurrentView();