ets-fe-ng-sdk 18.0.64 → 18.0.65

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.
@@ -24,6 +24,7 @@ import Papa from 'papaparse';
24
24
  import { toSignal } from '@angular/core/rxjs-interop';
25
25
  import { EVFunctions } from '../configs/base-functions';
26
26
  import { ToastNotificationsService } from '@serene-dev/toast-notifications';
27
+ import { TranslationService } from './translation.service';
27
28
  import * as i0 from "@angular/core";
28
29
  export class UtilityService {
29
30
  constructor() {
@@ -42,7 +43,8 @@ export class UtilityService {
42
43
  this.datePipe = inject(DatePipe);
43
44
  this.debouncerService = inject(DebouncerService);
44
45
  this.numberPipe = inject(DecimalPipe);
45
- this.notificationService = inject(ToastNotificationsService);
46
+ this.toastNotificationService = inject(ToastNotificationsService);
47
+ this.translationService = inject(TranslationService);
46
48
  this.downloader = jfd;
47
49
  this.eValidationType = EValidationType;
48
50
  this.config = Config;
@@ -68,9 +70,9 @@ export class UtilityService {
68
70
  this.formControl = (value, validatorOrOpts, asyncValidator) => [value, validatorOrOpts, asyncValidator];
69
71
  this.back = () => this.location.back();
70
72
  this.toast = {
71
- add: this.notificationService.addToastNotification,
72
- close: this.notificationService.closeToastNotification,
73
- update: this.notificationService.updateToastNotification,
73
+ add: this.toastNotificationService.addToastNotification,
74
+ close: this.toastNotificationService.closeToastNotification,
75
+ update: this.toastNotificationService.updateToastNotification,
74
76
  };
75
77
  this.xOrY = (x, y = '-') => `${x == null ? y : x}`;
76
78
  /**
@@ -568,6 +570,9 @@ export class UtilityService {
568
570
  (timeLeft.mins ? timeLeft.mins + 'min' : '') +
569
571
  (timeLeft.secs ? timeLeft.secs + 'sec' : ''));
570
572
  };
573
+ this.toastNotificationService.labelPipe = (val) => {
574
+ return this.translationService.pipeTransformer(val, { noLoader: true });
575
+ };
571
576
  }
572
577
  onlyOneInput(inputs) {
573
578
  const nInputs = inputs?.map((inp) => ({ id: this.genRandomID, inp })) || [];
@@ -852,4 +857,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImpor
852
857
  type: Injectable,
853
858
  args: [{ providedIn: 'root' }]
854
859
  }], ctorParameters: () => [] });
855
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0eS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXRzLWZlLW5nLXNkay9zcmMvbGliL1NlcnZpY2VzL3V0aWxpdHkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9GLE9BQU8sRUFBVSxVQUFVLEVBQVksTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFDTCxTQUFTLElBQUksU0FBUyxHQUV2QixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBRSxXQUFXLElBQUksV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDekUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxNQUFNLEVBQW9CLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNFLE9BQU8sRUFBRSwyQkFBMkIsSUFBSSxHQUFHLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRSxPQUFPLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQztBQUNuQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxNQUFNLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVuRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxlQUFlLEVBQXNDLE1BQU0sOEJBQThCLENBQUM7QUFDbkcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzdELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBSUwsV0FBVyxFQUNYLFdB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LFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsSUFBSSxTQUFTO1NBQzdELENBQUMsQ0FBQztRQUNILE9BQU8sQ0FDTCxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDekQsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3ZGLEdBQUcsQ0FDSixDQUFDO0lBQ0osQ0FBQzs4R0FoeEJVLGNBQWM7a0hBQWQsY0FBYyxjQURELE1BQU07OzJGQUNuQixjQUFjO2tCQUQxQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEN1cnJlbmN5UGlwZSwgRGF0ZVBpcGUsIERlY2ltYWxQaXBlLCBMb2NhdGlvbiwgVGl0bGVDYXNlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIGNvbXB1dGVkLCBpbmplY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgTWF0RGlhbG9nIGFzIE1hdERpYWxvZyxcbiAgTWF0RGlhbG9nQ29uZmlnIGFzIE1hdERpYWxvZ0NvbmZpZyxcbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdFNuYWNrQmFyIGFzIE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBSb3V0ZXIsIE5hdmlnYXRpb25FeHRyYXMsIEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEVUU1JlYWN0aXZlRm9ybUlucHV0U2VydmljZSBhcyBJUzEgfSBmcm9tICcuL2lucHV0LnNlcnZpY2UnO1xuaW1wb3J0IGpmZCBmcm9tICdqcy1maWxlLWRvd25sb2FkJztcbmltcG9ydCB7IFBhZ2VMb2FkZXJTZXJ2aWNlIH0gZnJvbSAnLi9wYWdlLWxvYWRlci5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpZywgQ29uZmlnIGFzIGNvbmZpZyB9IGZyb20gJy4uL2NvbmZpZ3MvaW5kZXguY29uZmlnJztcbmltcG9ydCB7IEFwcFJvdXRlQmFzZSB9IGZyb20gJy4uL1NoYXJlZC9tb2RlbHMvUm91dGVJdGVtLmNsYXNzJztcbmltcG9ydCB7IHNhdmVBcyB9IGZyb20gJ2ZpbGUtc2F2ZXInO1xuaW1wb3J0IHsgRVZhbGlkYXRpb25UeXBlLCBJU3RyaWN0Rm9ybUdyb3VwLCBTdGF0dXMsIFRhYmxlQ29sIH0gZnJvbSAnLi4vU2hhcmVkL21vZGVscy9pbmRleC5tb2RlbCc7XG5pbXBvcnQgeyBlbnZpcm9ubWVudCB9IGZyb20gJy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBQYWdlU2VydmljZSB9IGZyb20gJy4vcGFnZS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgQXN5bmNWYWxpZGF0b3JGbixcbiAgRm9ybUFycmF5LFxuICBGb3JtQnVpbGRlcixcbiAgRm9ybUNvbnRyb2wsXG4gIEZvcm1Db250cm9sT3B0aW9ucyxcbiAgRm9ybUdyb3VwLFxuICBVbnR5cGVkRm9ybUFycmF5LFxuICBWYWxpZGF0b3JGbixcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTG9nZ2VyU2VydmljZSB9IGZyb20gJy4uL1JldXNhYmxlcy9yZXVzYWJsZS1wYWdlcy9sb2dnZXIvbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7XG4gIGZpcnN0VmFsdWVGcm9tLFxuICBpc09ic2VydmFibGUsXG4gIGxhc3RWYWx1ZUZyb20sXG4gIG1lcmdlLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgUmVwbGF5U3ViamVjdCxcbiAgU3Vic2NyaXB0aW9uLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVFVFNQYWdlQnRuSUQgfSBmcm9tICcuLi9TaGFyZWQvbW9kZWxzL0lNZW51SXRlbSc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFNES0Vudmlyb25tZW50IH0gZnJvbSAnLi4vU2hhcmVkL21vZGVscy9lbnZpcm9ubWVudC5tb2RlbCc7XG5pbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXIsIEJyZWFrcG9pbnRzIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XG5pbXBvcnQgeyBEZWJvdW5jZXJTZXJ2aWNlIH0gZnJvbSAnLi9kZWJvdW5jZXIuc2VydmljZSc7XG5pbXBvcnQgeyBJRm9ybVNjaGVtYSB9IGZyb20gJy4uL1NoYXJlZC9jb21wb25lbnRzL2Zvcm0tZ2VuZXJhdG9yL2Zvcm0tZ2VuZXJhdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgUGFwYSBmcm9tICdwYXBhcGFyc2UnO1xuaW1wb3J0IHsgSUluZm9EaWFsb2dCdG4gfSBmcm9tICcuLi9TaGFyZWQvY29tcG9uZW50cy9pbmZvLWRpYWxvZy9pbmZvLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBFVkZ1bmN0aW9ucyB9IGZyb20gJy4uL2NvbmZpZ3MvYmFzZS1mdW5jdGlvbnMnO1xuaW1wb3J0IHsgVG9hc3ROb3RpZmljYXRpb25zU2VydmljZSB9IGZyb20gJ0BzZXJlbmUtZGV2L3RvYXN0LW5vdGlmaWNhdGlvbnMnO1xuZGVjbGFyZSBjb25zdCAkOiBhbnk7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgVXRpbGl0eVNlcnZpY2U8VEVudmlyb25tZW50IGV4dGVuZHMgU0RLRW52aXJvbm1lbnQgPSBTREtFbnZpcm9ubWVudD4ge1xuICBwdWJsaWMgZGlhbG9nID0gaW5qZWN0KE1hdERpYWxvZyk7XG4gIHB1YmxpYyBzbmFja0JhciA9IGluamVjdChNYXRTbmFja0Jhcik7XG4gIHB1YmxpYyByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgcHVibGljIHRpdGxlUyA9IGluamVjdChUaXRsZSk7XG4gIHB1YmxpYyBsb2NhdGlvbiA9IGluamVjdChMb2NhdGlvbik7XG4gIHB1YmxpYyBpbnB1dFNlcnZpY2UgPSBpbmplY3QoSVMxKTtcbiAgcHVibGljIHBTID0gaW5qZWN0KFBhZ2VMb2FkZXJTZXJ2aWNlKTtcbiAgcHVibGljIGN1cnJlbmN5UGlwZSA9IGluamVjdChDdXJyZW5jeVBpcGUpO1xuICBwdWJsaWMgdGl0bGVDYXNlUGlwZSA9IGluamVjdChUaXRsZUNhc2VQaXBlKTtcbiAgcHVibGljIGxvZ2dlclNlcnZpY2UgPSBpbmplY3QoTG9nZ2VyU2VydmljZSk7XG4gIHB1YmxpYyBwYWdlUyA9IGluamVjdChQYWdlU2VydmljZSk7XG4gIHB1YmxpYyByZXNwb25zaXZlID0gaW5qZWN0KEJyZWFrcG9pbnRPYnNlcnZlcik7XG4gIHB1YmxpYyBkYXRlUGlwZSA9IGluamVjdChEYXRlUGlwZSk7XG4gIHB1YmxpYyBkZWJvdW5jZXJTZXJ2aWNlID0gaW5qZWN0KERlYm91bmNlclNlcnZpY2UpO1xuICBwdWJsaWMgbnVtYmVyUGlwZSA9IGluamVjdChEZWNpbWFsUGlwZSk7XG4gIHB1YmxpYyBub3RpZmljYXRpb25TZXJ2aWNlID0gaW5qZWN0KFRvYXN0Tm90aWZpY2F0aW9uc1NlcnZpY2UpO1xuICByOiBBcHBSb3V0ZUJhc2U7XG4gIGRvd25sb2FkZXIgPSBqZmQ7XG4gIGVWYWxpZGF0aW9uVHlwZSA9IEVWYWxpZGF0aW9uVHlwZTtcbiAgY29uZmlnID0gQ29uZmlnO1xuICBlbnZpcm9ubWVudDogVEVudmlyb25tZW50ID0gZW52aXJvbm1lbnQgYXMgYW55O1xuICBwYmlkID0gRUVUU1BhZ2VCdG5JRDtcbiAgJDogYW55O1xuICBpc01vYmlsZTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEVtaXRzIHRydWUgaWYgbW9iaWxlXG4gICAqL1xuICBtb2JpbGVRdWVyeUNoYW5nZWQgPSBuZXcgUmVwbGF5U3ViamVjdDxib29sZWFuPigpO1xuICByZWFkb25seSBpc01vYmlsZVNpZ25hbCA9IHRvU2lnbmFsPGJvb2xlYW4+KFxuICAgIHRoaXMucmVzcG9uc2l2ZS5vYnNlcnZlKFtCcmVha3BvaW50cy5IYW5kc2V0XSkucGlwZShcbiAgICAgIG1hcCgoeyBtYXRjaGVzIH0pID0+IG1hdGNoZXMpLFxuICAgICAgdGFwKChyKSA9PiB7XG4gICAgICAgIHRoaXMuaXNNb2JpbGUgPSByO1xuICAgICAgICB0aGlzLm1vYmlsZVF1ZXJ5Q2hhbmdlZC5uZXh0KHIpO1xuICAgICAgfSksXG4gICAgKSxcbiAgKTtcbiAgcmVhZG9ubHkgaXNUYWJsZXRTaWduYWwgPSB0b1NpZ25hbDxib29sZWFuPihcbiAgICB0aGlzLnJlc3BvbnNpdmUub2JzZXJ2ZShbQnJlYWtwb2ludHMuVGFibGV0XSkucGlwZShtYXAoKHsgbWF0Y2hlcyB9KSA9PiBtYXRjaGVzKSksXG4gICk7XG4gIHJlYWRvbmx5IGlzRGVza3RvcFNpZ25hbCA9IHRvU2lnbmFsPGJvb2xlYW4+KFxuICAgIHRoaXMucmVzcG9uc2l2ZS5vYnNlcnZlKFtCcmVha3BvaW50cy5XZWJMYW5kc2NhcGVdKS5waXBlKG1hcCgoeyBtYXRjaGVzIH0pID0+IG1hdGNoZXMpKSxcbiAgKTtcblxuICBwYWdlU2l6ZU9wdGlvbnMgPSBbNSwgMTAsIDE1LCAyMCwgNTAsIDEwMCwgMjAwLCA1MDAsIDEwMDBdO1xuICBkYXRlUGlwZURhdGUgPSAnRUUsIE1NTU0gZCwgeSc7XG4gIGRhdGVQaXBlRGF0ZUxlYW4gPSAnRUUsIE1NTSBkLCB5JztcbiAgZGF0ZVBpcGVEYXRlVGltZUxlYW4gPSAnRUUsIE1NTSBkLCB5IGhoOm1tIGEnO1xuICByZWFkb25seSBjdXN0b21JREZpZWxkID0gJ19faWQnO1xuICByZWFkb25seSBkZWxpbWl0ZXIgPSBgfn5+Ly9+fn5gO1xuICBmb3JtQnVpbGRlciA9IG5ldyBGb3JtQnVpbGRlcigpLm5vbk51bGxhYmxlO1xuICBjb25zdHJ1Y3RvcigpIHt9XG4gIGZvcm1Db250cm9sID0gPFQ+KFxuICAgIHZhbHVlPzogVCB8IG51bGwsXG4gICAgdmFsaWRhdG9yT3JPcHRzPzogVmFsaWRhdG9yRm4gfCBWYWxpZGF0b3JGbltdIHwgRm9ybUNvbnRyb2xPcHRpb25zLFxuICAgIGFzeW5jVmFsaWRhdG9yPzogQXN5bmNWYWxpZGF0b3JGbiB8IEFzeW5jVmFsaWRhdG9yRm5bXSxcbiAgKSA9PiBbdmFsdWUgYXMgYW55IGFzIFQsIHZhbGlkYXRvck9yT3B0cyEsIGFzeW5jVmFsaWRhdG9yIV07XG5cbiAgYmFjayA9ICgpID0+IHRoaXMubG9jYXRpb24uYmFjaygpO1xuXG4gIHJlYWRvbmx5IHRvYXN0ID0ge1xuICAgIGFkZDogdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZFRvYXN0Tm90aWZpY2F0aW9uLFxuICAgIGNsb3NlOiB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuY2xvc2VUb2FzdE5vdGlmaWNhdGlvbixcbiAgICB1cGRhdGU6IHRoaXMubm90aWZpY2F0aW9uU2VydmljZS51cGRhdGVUb2FzdE5vdGlmaWNhdGlvbixcbiAgfTtcblxuICBvbmx5T25lSW5wdXQoaW5wdXRzOiBGb3JtQ29udHJvbFtdKSB7XG4gICAgY29uc3QgbklucHV0cyA9IGlucHV0cz8ubWFwKChpbnApID0+ICh7IGlkOiB0aGlzLmdlblJhbmRvbUlELCBpbnAgfSkpIHx8IFtdO1xuICAgIHJldHVybiBtZXJnZShcbiAgICAgIC4uLm5JbnB1dHMubWFwKChpKSA9PiBpLmlucC52YWx1ZUNoYW5nZXMucGlwZShtYXAoKHZhbCkgPT4gKHsgaWQ6IGkuaWQsIHZhbCB9KSkpKSxcbiAgICApLnN1YnNjcmliZSgocikgPT4ge1xuICAgICAgLy8gZGVidWdnZXJcbiAgICAgIGlmIChyLnZhbClcbiAgICAgICAgbklucHV0cy5maWx0ZXIoKHgpID0+IHguaWQgIT0gci5pZCkuZm9yRWFjaCgoeCkgPT4geC5pbnAuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSkpO1xuICAgICAgZWxzZSBuSW5wdXRzLmZpbHRlcigoeCkgPT4geC5pZCAhPSByLmlkKS5mb3JFYWNoKCh4KSA9PiB4LmlucC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGNvcHlQYXlsb2FkKHBheWxvYWQpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCg8U0RLRW52aXJvbm1lbnQ+dGhpcy5lbnZpcm9ubWVudCkuZGVidWcpIHtcbiAgICAgICAgY29uc3QgZWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XG4gICAgICAgIGVsZW0udmFsdWUgPSBKU09OLnN0cmluZ2lmeShwYXlsb2FkKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbGVtKTtcbiAgICAgICAgZWxlbS5zZWxlY3QoKTtcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChlbGVtKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIH1cbiAgfVxuICB4T3JZID0gKHgsIHkgPSAnLScpID0+IGAke3ggPT0gbnVsbCA/IHkgOiB4fWA7XG4gIHRvVGl0bGVDYXNlKHRleHQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnRpdGxlQ2FzZVBpcGUudHJhbnNmb3JtKHRleHQpO1xuICB9XG4gIC8qKlxuICAgKiBDb252ZXJ0IERhdGUgc3RyaW5nIHRvIERhdGUgVGltZSBzdHJpbmdcbiAgICogQHBhcmFtIGRhdGVTdHIgRGF0ZSBzdHJpbmdcbiAgICogQGV4YW1wbGUgJzIwMjItMDEtMjUnXG4gICAqIEBwYXJhbSBjb25maWcgQ29uZmlndXJhdGlvbiBmb3IgdGhlIGNvbnZlcnNpb25cbiAgICogQHJldHVybnMgUmV0dXJucyBhIERhdGUgVGltZSBzdHJpbmdcbiAgICogQGV4YW1wbGUgJzIwMjItMDEtMjVUMDA6MDA6MDBaJyBvciAnMjAyMi0wMS0yNSAwMDowMDowMCdcbiAgICovXG4gIGRhdGVUb0RhdGVUaW1lID0gKFxuICAgIGRhdGVTdHI6IHN0cmluZyxcbiAgICBjb25maWc/OiB7XG4gICAgICAvKipcbiAgICAgICAqIFVzZSB0aGUgeXl5eS1tbS1kZCBoaDptbTpzcyBmb3JtYXRcbiAgICAgICAqL1xuICAgICAgb21pdFQ/OiBib29sZWFuO1xuICAgICAgLyoqVGltZSB0byBhcHBlbmQgdG8gZGF0ZS4gQGV4YW1wbGUgYDEyOjAwOjAwWmAgKi9cbiAgICAgIHRpbWU/OiBzdHJpbmc7XG4gICAgfSxcbiAgKSA9PiB7XG4gICAgcmV0dXJuICFkYXRlU3RyXG4gICAgICA/IG51bGxcbiAgICAgIDogZGF0ZVN0clsxMF0gPT0gJ1QnXG4gICAgICAgID8gZGF0ZVN0clxuICAgICAgICA6IGRhdGVTdHIgK1xuICAgICAgICAgICghIWNvbmZpZz8ub21pdFQgPyBgICR7Y29uZmlnPy50aW1lIHx8ICcwMDowMDowMCd9YCA6IGBUJHtjb25maWc/LnRpbWUgfHwgJzAwOjAwOjAwWid9YCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFNldCBhbiBPYmplY3QncyBmaWVsZCBpZiB0aGUgb2JqZWN0IGV4aXN0cyBvciBkb24ndCBpZiB0aGUgb2JqZWN0IGRvZXNuJ3RcbiAgICogQHBhcmFtIG9iaiBPYmplY3QgaG9sZGluZyB0aGUgZmllbGRcbiAgICogQHBhcmFtIGZpZWxkTmFtZSBOYW1lIG9mIHRoZSBmaWVsZCB0byBzZXRcbiAgICogQHBhcmFtIHZhbCBWYWx1ZSB0byBzZXQgdGhlIGZpZWxkIHdpdGhcbiAgICogQHJldHVybnMgUmV0dXJucyB0aGUgb2JqZWN0IGhvbGRpbmcgdGhlIGRhdGFcbiAgICovXG4gIHNldHRlcldpdGhOdWxsPFQ+KG9iajogVCwga3ZwczogUGFydGlhbDxUPikge1xuICAgIGlmICghb2JqKSByZXR1cm4gbnVsbDtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBrdnBzKSB7XG4gICAgICBvYmpba2V5XSA9IGt2cHNba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIC8qKlxuICAgKiAoU2V0IGFuIE9iamVjdCdzIGZpZWxkIGlmIHRoZSBvYmplY3QgZXhpc3RzIG9yIGRvbid0IGlmIHRoZSBvYmplY3QgZG9lc24ndCkgZm9yIG11bHRpcGxlIGVudHJpZXNcbiAgICogQHBhcmFtIGl0ZW1zIEFycmF5IG9mIG9iamVjdHMgYW5kIHRoZWlyIG1vZGlmaWNhdGlvbnNcbiAgICovXG4gIHNldHRlcldpdGhOdWxsQXJyYXk8VD4oaXRlbXM6IHsgb2JqOiBUOyBrdnBzOiBQYXJ0aWFsPFQ+IH1bXSkge1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgdGhpcy5zZXR0ZXJXaXRoTnVsbChpdGVtLm9iaiwgaXRlbS5rdnBzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgZGVsZXRpb24gb2Ygcm93cyBmcm9tIGEgRm9ybUFycmF5XG4gICAqIEBwYXJhbSBpbmRleCBJbmRleCBvZiB0aGUgcm93IHRvIGRlbGV0ZVxuICAgKiBAcGFyYW0gZmEgVGhlIEZvcm1BcnJheSB0aGF0IGhvbGRzIHRoZSByb3dzXG4gICAqIEBwYXJhbSBkZWxldGVTZXJ2aWNlIFRoZSBkZWxldGlvbiBzZXJ2aWNlIHRvIGJlIGNhbGxlZCAoSXQgc2hvdWxkIGJlIGFuIGFub255bW91cyBmdW5jdGlvbilcbiAgICogQHBhcmFtIGFkZFJvd0Z1bmMgVGhlIGZ1bmN0aW9uIChhbm9ueW1vdXMpIHRoYXQgYWRkcyBhIG5ldyByb3cgdG8gdGhlIEZvcm1BcnJheVxuICAgKiBAcGFyYW0gZW1pdEV2ZW50IFNwZWNpZnkgd2hldGhlciB0byBlbWl0IGFuIGV2ZW50IHdoZW4gbWFuaXB1bGF0aW5nIHRoZSBGb3JtQXJyYXlcbiAgICogQHJldHVybnNcbiAgICovXG4gIGhhbmRsZUZvcm1Sb3dEZWxldGUgPSAoXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBmYTogVW50eXBlZEZvcm1BcnJheSxcbiAgICBkZWxldGVTZXJ2aWNlOiAoLi4uYXJncykgPT4gUHJvbWlzZTxhbnk+IHwgT2JzZXJ2YWJsZTxhbnk+LFxuICAgIGFkZFJvd0Z1bmM6ICguLi5hcmdzKSA9PiBhbnksXG4gICAgZXh0cmFDb25maWc/OiB7XG4gICAgICBkb250RW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgICAgIG9uRGVsZXRlPzogKHJlcykgPT4gYW55O1xuICAgIH0sXG4gICkgPT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCBpZCA9IGNsb25lRGVlcChmYS5jb250cm9sc1tpbmRleF0/LnZhbHVlPy5pZCk7XG4gICAgICAvLyBkZWJ1Z2dlcjtcbiAgICAgIGlmIChmYS5jb250cm9scy5sZW5ndGggPT0gMSAmJiBpZCkge1xuICAgICAgICBmYS5yZW1vdmVBdChpbmRleCwgeyBlbWl0RXZlbnQ6ICFleHRyYUNvbmZpZz8uZG9udEVtaXRFdmVudCB9KTtcbiAgICAgICAgYWRkUm93RnVuYygpO1xuICAgICAgfSBlbHNlIGlmIChmYS5jb250cm9scy5sZW5ndGggPiAxKVxuICAgICAgICBmYS5yZW1vdmVBdChpbmRleCwgeyBlbWl0RXZlbnQ6ICFleHRyYUNvbmZpZz8uZG9udEVtaXRFdmVudCB9KTtcbiAgICAgIGVsc2UgaWYgKGZhLmNvbnRyb2xzLmxlbmd0aCA9PSAxKSBmYS5jb250cm9sc1swXS5yZXNldCgpO1xuXG4gICAgICBpZiAoaWQgJiYgZGVsZXRlU2VydmljZSkge1xuICAgICAgICBjb25zdCByZXEgPSBkZWxldGVTZXJ2aWNlKGlkKTtcbiAgICAgICAgaWYgKHJlcVsndG9Qcm9taXNlJ10pIHtcbiAgICAgICAgICByZXNvbHZlKGxhc3RWYWx1ZUZyb20ocmVxIGFzIE9ic2VydmFibGU8YW55PikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUocmVxIGFzIGFueSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICB9XG4gICAgfSkudGhlbigocikgPT4ge1xuICAgICAgZXh0cmFDb25maWc/Lm9uRGVsZXRlKHIpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfSk7XG4gIH07XG5cbiAgb3BlbkhUTUxJbkZ1bGxzY3JlZW48VE1ldGFkYXRhPihcbiAgICBlbGVtOiBIVE1MRWxlbWVudCxcbiAgICBtZXRhZGF0YT86IFRNZXRhZGF0YSxcbiAgICBvbkxlYXZlPzogKG1ldGFkYXRhOiBUTWV0YWRhdGEpID0+IGFueSxcbiAgKSB7XG4gICAgaWYgKGVsZW0ucmVxdWVzdEZ1bGxzY3JlZW4pIHtcbiAgICAgIGVsZW0ub25mdWxsc2NyZWVuY2hhbmdlID0gKGUpID0+IHtcbiAgICAgICAgaWYgKG9uTGVhdmUpXG4gICAgICAgICAgZWxlbS5vbmZ1bGxzY3JlZW5jaGFuZ2UgPSAoZSkgPT4ge1xuICAgICAgICAgICAgLy8gIGRlYnVnZ2VyO1xuICAgICAgICAgICAgb25MZWF2ZShtZXRhZGF0YSk7XG4gICAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBlbGVtLnJlcXVlc3RGdWxsc2NyZWVuKCk7XG4gICAgfSBlbHNlIGlmIChlbGVtWyd3ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbiddKSB7XG4gICAgICAvKiBTYWZhcmkgKi9cbiAgICAgIGVsZW1bJ3dlYmtpdFJlcXVlc3RGdWxsc2NyZWVuJ10oKTtcbiAgICB9IGVsc2UgaWYgKGVsZW1bJ21zUmVxdWVzdEZ1bGxzY3JlZW4nXSkge1xuICAgICAgLyogSUUxMSAqL1xuICAgICAgZWxlbVsnbXNSZXF1ZXN0RnVsbHNjcmVlbiddKCk7XG4gICAgfVxuICB9XG4gIGNsb3NlRnVsbHNjcmVlbigpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKGRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKSB7XG4gICAgICAgIGRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKCk7XG4gICAgICB9IGVsc2UgaWYgKGRvY3VtZW50Wyd3ZWJraXRFeGl0RnVsbHNjcmVlbiddKSB7XG4gICAgICAgIC8qIFNhZmFyaSAqL1xuICAgICAgICBkb2N1bWVudFsnd2Via2l0RXhpdEZ1bGxzY3JlZW4nXSgpO1xuICAgICAgfSBlbHNlIGlmIChkb2N1bWVudFsnbXNFeGl0RnVsbHNjcmVlbiddKSB7XG4gICAgICAgIC8qIElFMTEgKi9cbiAgICAgICAgZG9jdW1lbnRbJ21zRXhpdEZ1bGxzY3JlZW4nXSgpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICB9XG5cbiAgYWRkVG9TdWJzVG9DbG9zZU9uUm91dGUgPSAoLi4uc3ViOiBTdWJzY3JpcHRpb25bXSkgPT4ge1xuICAgIGlmICghQ29uZmlnLnN1YnNUb0Nsb3NlT25Sb3V0ZSkgQ29uZmlnLnN1YnNUb0Nsb3NlT25Sb3V0ZSA9IFtdO1xuICAgIENvbmZpZy5zdWJzVG9DbG9zZU9uUm91dGUucHVzaCguLi5zdWIpO1xuICB9O1xuICBjbGVhclN1YnNUb0Nsb3NlT25Sb3V0ZSA9ICgpID0+IHtcbiAgICBDb25maWcuc3Vic1RvQ2xvc2VPblJvdXRlPy5mb3JFYWNoKCh4KSA9PiB4Py51bnN1YnNjcmliZSgpKTtcbiAgICBDb25maWcuc3Vic1RvQ2xvc2VPblJvdXRlID0gW107XG4gIH07XG4gIC8qKlxuICAgKiBIYW5kbGVzIHRoZSBkZWxldGlvbiBvZiByb3dzIGZyb20gYW4gYXJyYXlcbiAgICogQHBhcmFtIGluZGV4IEluZGV4IG9mIHRoZSByb3cgdG8gZGVsZXRlXG4gICAqIEBwYXJhbSBhcnIgVGhlIGFycmF5IHRoYXQgaG9sZHMgdGhlIHJvd3NcbiAgICogQHBhcmFtIGRlbGV0ZVNlcnZpY2UgVGhlIGRlbGV0aW9uIHNlcnZpY2UgdG8gYmUgY2FsbGVkIChJdCBzaG91bGQgYmUgYW4gYW5vbnltb3VzIGZ1bmN0aW9uKVxuICAgKiBAcGFyYW0gYWRkUm93RnVuYyBUaGUgZnVuY3Rpb24gKGFub255bW91cykgdGhhdCBhZGRzIGEgbmV3IHJvdyB0byB0aGUgYXJyYXlcbiAgICogQHBhcmFtIGNiIFRoZSBmdW5jdGlvbiB0byBjYWxsYmFjayB3aXRoIHRoZSByZXNwb25zZSBvZiB0aGUgZGVsZXRpb24gc2VydmljZSBhcyB0aGUgaW5wdXQgcGFyYW1ldGVyXG4gICAqL1xuICBoYW5kbGVSb3dEZWxldGUgPSBhc3luYyA8VD4oXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBhcnI6IGFueVtdLFxuICAgIGRlbGV0ZVNlcnZpY2U6ICguLi5hcmdzKSA9PiBQcm9taXNlPFQ+IHwgT2JzZXJ2YWJsZTxUPixcbiAgICBhZGRSb3dGdW5jOiAoLi4uYXJncykgPT4gYW55LFxuICAgIGNiPzogKGFueSkgPT4gYW55LFxuICApID0+IHtcbiAgICBjb25zdCBpZCA9IGFycltpbmRleF0/LmlkO1xuICAgIC8vIGRlYnVnZ2VyO1xuXG4gICAgaWYgKGlkICYmIGRlbGV0ZVNlcnZpY2UpIHtcbiAgICAgIGNvbnN0IHJlcSA9IGRlbGV0ZVNlcnZpY2UoaWQpO1xuICAgICAgaWYgKHR5cGVvZiByZXFbJ3RvUHJvbWlzZSddID09ICdmdW5jdGlvbicpXG4gICAgICAgIGNiID8gY2IoYXdhaXQgcmVxWyd0b1Byb21pc2UnXSgpKSA6IHJlcVsndG9Qcm9taXNlJ10oKTtcbiAgICAgIGVsc2UgY2IgPyBjYihhd2FpdCByZXEpIDogbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoYXJyLmxlbmd0aCA9PSAxKSB7XG4gICAgICBhcnIuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIGFkZFJvd0Z1bmMoKTtcbiAgICB9IGVsc2UgaWYgKGFyci5sZW5ndGggPiAxKSBhcnIuc3BsaWNlKGluZGV4LCAxKTtcbiAgfTtcbiAgLyoqXG4gICAqIFRvIGhhbmRsZSB0aGUgcGF0Y2hpbmcgb2YgYSBGb3JtQXJyYXlcbiAgICogQHBhcmFtIGFyciBUaGUgYXJyYXkgdGhhdCBjb250YWlucyB0aGUgZGF0YVxuICAgKiBAcGFyYW0gYWRkRnVuYyBUaGUgZnVuY3Rpb24gdGhhdCBwZXJmb3JtcyBhZGRpdGlvbiBvZiBzaW5nbGUgZW50cmllc1xuICAgKiBAcGFyYW0gZm9ybUFyciBUaGUgRm9ybUFycmF5IHRoYXQgd2lsbCBob2xkIHRoZSBhcnJheSdzIGRhdGFcbiAgICovXG4gIGluaXRQYXRjaEZvcm1BcnJheSA9IDxUPihcbiAgICBhcnI6IFRbXSxcbiAgICBhZGRGdW5jOiAoaTogbnVtYmVyLCBkYXRhPzogVCwgZm9ybUFycj86IEZvcm1BcnJheSkgPT4gdm9pZCxcbiAgICBmb3JtQXJyOiBGb3JtQXJyYXksXG4gICkgPT4ge1xuICAgIC8vIGRlYnVnZ2VyXG4gICAgZm9ybUFycj8uY2xlYXIoKTtcbiAgICBpZiAoYXJyPy5sZW5ndGgpIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBhcnIpIHtcbiAgICAgICAgYWRkRnVuYyhmb3JtQXJyLmxlbmd0aCwgaXRlbSwgZm9ybUFycik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghZm9ybUFyci5sZW5ndGgpIGFkZEZ1bmMoZm9ybUFyci5sZW5ndGgsIG51bGwsIGZvcm1BcnIpO1xuICAgIH1cbiAgfTtcbiAgcHJpdmF0ZSBpc1Byb21pc2UgPSAoZnVuYykgPT4ge1xuICAgIHJldHVybiB0eXBlb2YgZnVuYyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGZ1bmMudGhlbiA9PT0gJ2Z1bmN0aW9uJztcbiAgfTtcbiAgaXNBc3luYyA9IChmdW5jKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGZ1bmMuY29uc3RydWN0b3IubmFtZSA9PT0gJ0FzeW5jRnVuY3Rpb24nIHx8XG4gICAgICAodHlwZW9mIGZ1bmMgPT09ICdmdW5jdGlvbicgJiYgdGhpcy5pc1Byb21pc2UoZnVuYygpKSlcbiAgICApO1xuICB9O1xuXG4gIGlzT2JzZXJ2YWJsZSA9IDxUPihmdW5jKSA9PiB7XG4gICAgLy8gcmV0dXJuIHR5cGVvZiBmdW5jID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZnVuYy5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbic7XG4gICAgLy8gcmV0dXJuIHR5cGVvZiBmdW5jID09PSAnb2JqZWN0JyAmJiBmdW5jIGluc3RhbmNlb2YgT2JzZXJ2YWJsZTtcbiAgICAvLyByZXR1cm4gdHlwZW9mIGZ1bmMgPT09ICdvYmplY3QnICYmIGZ1bmMgaW5zdGFuY2VvZiBPYnNlcnZhYmxlPFQ+O1xuICAgIHJldHVybiB0eXBlb2YgZnVuYyA9PT0gJ29iamVjdCcgJiYgaXNPYnNlcnZhYmxlKGZ1bmMpO1xuICAgIHJldHVybiB0eXBlb2YgZnVuYyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGZ1bmMudG9Qcm9taXNlID09PSAnZnVuY3Rpb24nO1xuICB9O1xuICBwcm9taXNpZnlWYWwgPSA8VD4odmFsOiBUIHwgUHJvbWlzZTxUPiB8IE9ic2VydmFibGU8VD4pID0+IHtcbiAgICBpZiAodGhpcy5pc0FzeW5jKHZhbCkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsIGFzIFByb21pc2U8VD4pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc09ic2VydmFibGUodmFsKSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShsYXN0VmFsdWVGcm9tKHZhbCBhcyBPYnNlcnZhYmxlPFQ+KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsIGFzIFQpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIGFyciBBcnJheSBvZiBvYnNlcnZhYmxlcyB0byBmZXRjaFxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiB0aGUgcmVzcG9uc2VzIG1lcmdlZCB0b2dldGhlci4gSXQgZW1pdHMgdGhlIG1lcmdlZCByZXNwb25zZXMgYXMgdGhleSBhcmUgZmV0Y2hlZCBhbmQgY2xvc2VzIG9uY2UgYWxsbCB0aGUgcmVzcG9uc2VzIGhhdmUgYmVlbiBmZXRjaGVkXG4gICAqL1xuICBtZXJnZUFyck9ic2VydmFibGVzID0gPFQ+KGFycjogeyAkZnVuYzogT2JzZXJ2YWJsZTxUW10+IH1bXSkgPT4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxUW10+KChzdWIpID0+IHtcbiAgICAgIGNvbnN0IHJldDogVFtdID0gW107XG4gICAgICBsZXQgcmVzcG9uc2VDb3VudCA9IDA7XG4gICAgICBtZXJnZShcbiAgICAgICAgLi4uYXJyLm1hcCgoeCkgPT5cbiAgICAgICAgICB4LiRmdW5jPy5waXBlKFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZSkgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0YXAoKHIpID0+IHtcbiAgICAgICAgICAgICAgcmVzcG9uc2VDb3VudCsrO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgICkuc3Vic2NyaWJlKChyKSA9PiB7XG4gICAgICAgIHJldC5wdXNoKC4uLnIpO1xuICAgICAgICBzdWIubmV4dChyZXQpO1xuICAgICAgICBpZiAocmVzcG9uc2VDb3VudCA9PSBhcnIuZmlsdGVyKCh4KSA9PiB4LiRmdW5jKS5sZW5ndGgpIHtcbiAgICAgICAgICAvLyBkZWJ1Z2dlclxuICAgICAgICAgIHN1Yi5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbiAgcmVtb3ZlRHVwbGljYXRlPFQ+KGxpc3Q6IFRbXSwga2V5RmllbGQgPSAnY29kZScpIHtcbiAgICBpZiAoIWxpc3QpIHJldHVybiBudWxsO1xuICAgIGxpc3QgPSBsaXN0LmZpbHRlcigoeCkgPT4geCk7XG4gICAgY29uc3QgcmV0OiBUW10gPSBbXSxcbiAgICAgIGR1cGxpY2F0ZU1hcDogeyBbeDogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbGlzdCkge1xuICAgICAgaWYgKGR1cGxpY2F0ZU1hcFtpdGVtW2tleUZpZWxkXV0pIGNvbnRpbnVlO1xuICAgICAgcmV0LnB1c2goaXRlbSk7XG4gICAgICBkdXBsaWNhdGVNYXBbaXRlbVtrZXlGaWVsZF1dID0gaXRlbTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuICBnZXQgZ2VuUmFuZG9tSUQoKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDAwMDAwMDAwMDApO1xuICB9XG4gIHN0b3JlUGF5bG9hZCA9IHRoaXMubG9nZ2VyU2VydmljZS5hZGRMb2c7XG4gIG9iaklzRW1wdHkgPSAob2JqLCBleGNsdXNpb25GaWVsZHM/OiBzdHJpbmdbXSkgPT4ge1xuICAgIGlmICghb2JqKSByZXR1cm4gdHJ1ZTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChleGNsdXNpb25GaWVsZHM/LmluY2x1ZGVzKGtleSkpIGNvbnRpbnVlO1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgaWYgKG9ialtrZXldKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuICBkYXRhR2VuID0gPFQgPSBhbnk+KGtleXM6IHN0cmluZ1tdLCBsZW5ndGggPSAxMCkgPT4ge1xuICAgIGNvbnN0IHJldDogYW55W10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgdDogYW55ID0ge307XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgIHRba2V5XSA9IHRoaXMudGV4dEdlbigpO1xuICAgICAgfVxuICAgICAgcmV0LnB1c2godCk7XG4gICAgfVxuICAgIHJldHVybiByZXQgYXMgVFtdO1xuICB9O1xuICB0ZXh0R2VuID0gKCkgPT4gJ3JhbmRvbScgKyBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiAxMDAwKTtcbiAgdHJhY2tCeUNvZGUoaW5kZXg6IG51bWJlciwgaXRlbTogYW55KSB7XG4gICAgcmV0dXJuIGl0ZW0/LmNvZGU7XG4gIH1cbiAgdHJhY2tCeUlEKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSkge1xuICAgIHJldHVybiBpdGVtPy5pZDtcbiAgfVxuICBkaWFsb2dPcGVuZXIgPSAoY29tcDogYW55LCBjb25maWc6IE1hdERpYWxvZ0NvbmZpZywgdmFsdWVDQjogKHIpID0+IGFueSwgbm9WYWx1ZUNCPzogYW55KSA9PlxuICAgIHRoaXMuZGlhbG9nT3BlbmVyUmVmKGNvbXAsIGNvbmZpZylcbiAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAuc3Vic2NyaWJlKChyKSA9PiB7XG4gICAgICAgIGlmIChyICE9IG51bGwgJiYgciAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2YWx1ZUNCKHIpO1xuICAgICAgICB9IGVsc2UgaWYgKG5vVmFsdWVDQikge1xuICAgICAgICAgIG5vVmFsdWVDQigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgZGlhbG9nT3BlbmVyUmVmID0gKGNvbXA6IGFueSwgY29uZmlnOiBNYXREaWFsb2dDb25maWcpID0+IHRoaXMuZGlhbG9nLm9wZW4oY29tcCwgY29uZmlnKTtcbiAgZmluZExhYmVsQnlJdGVtID0gKGl0ZW0sIGFycjogYW55W10sIGxhYmVsRmllbGQ/OiBzdHJpbmcsIGtleUZpZWxkOiBzdHJpbmcgPSAnY29kZScpID0+IHtcbiAgICBpZiAoIWl0ZW0pIHJldHVybiBudWxsO1xuICAgIGNvbnN0IG9iaiA9IGFycj8uZmluZCgoeCkgPT4geFtrZXlGaWVsZF0gPT0gaXRlbSk7XG4gICAgaWYgKCFvYmopIHJldHVybiBpdGVtO1xuICAgIGVsc2UgcmV0dXJuIGAke2l0ZW19IC0gJHtvYmpbbGFiZWxGaWVsZCB8fCAndGl0bGUnXSB8fCBvYmpbbGFiZWxGaWVsZCB8fCAnZGVzY3JpcHRpb24nXX1gO1xuICB9O1xuXG4gIGZvcm1GaWVsZHNGcm9tQXJyID0gdGhpcy5pbnB1dFNlcnZpY2UuZm9ybUZpZWxkc0Zyb21GQ0lucHV0c0FycjtcbiAgb2JqVG9Gb3JtQ29udHJvbHMgPSB0aGlzLmlucHV0U2VydmljZS5mb3JtRmllbGRzRnJvbU9iajtcbiAgZm9ybVNjaGVtYVRvRm9ybUNvbnRyb2xzID0gdGhpcy5pbnB1dFNlcnZpY2UuZm9ybVNjaGVtYVRvRm9ybUNvbnRyb2xzO1xuICBhZGRGb3JtU2NoZW1hVG9Gb3JtID0gdGhpcy5pbnB1dFNlcnZpY2UuYWRkRm9ybVNjaGVtYVRvRm9ybTtcblxuICBiaW5kRm9ybUNvbnRyb2xUb0lucHV0cyA9IHRoaXMuaW5wdXRTZXJ2aWNlLmJpbmRGb3JtQ29udHJvbFRvSW5wdXRzO1xuXG4gIGdvID0gKHZhbHVlOiBzdHJpbmcsIGV4dHJhPzogTmF2aWdhdGlvbkV4dHJhcykgPT4ge1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt2YWx1ZV0sIGV4dHJhKTtcbiAgfTtcbiAgLyoqXG4gICAqIFJvdXRlIHRvIGNvbXBvbmVudFxuICAgKiBAcGFyYW0gcm91dGUgUm91dGUgb2YgcGF0aCB0byBjb21wb25lbnRcbiAgICogQHBhcmFtIGV4dHJhXG4gICAqL1xuICBnb1IgPSAocm91dGU6IHN0cmluZywgZXh0cmE/OiBOYXZpZ2F0aW9uRXh0cmFzKSA9PiB7XG4gICAgaWYgKCEoPFNES0Vudmlyb25tZW50PnRoaXMuZW52aXJvbm1lbnQpLmFjdGl2YXRlZFJvdXRlKSBkZWJ1Z2dlcjtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbcm91dGVdLCB7XG4gICAgICByZWxhdGl2ZVRvOiAoPFNES0Vudmlyb25tZW50PnRoaXMuZW52aXJvbm1lbnQpLmFjdGl2YXRlZFJvdXRlLFxuICAgICAgLi4uZXh0cmEsXG4gICAgfSk7XG4gICAgLy8gZGVidWdnZXI7XG4gIH07XG5cbiAgcmVsYXRpdmVSb3V0ZXIoKSB7XG4gICAgY29uc3Qgcm91dGVyID0gaW5qZWN0KFJvdXRlciksXG4gICAgICByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJvdXRlLFxuICAgICAgcm91dGVyLFxuICAgICAgbmF2aWdhdGU6IChsaW5rOiBzdHJpbmcsIGNvbmZpZz86IE5hdmlnYXRpb25FeHRyYXMgfCB1bmRlZmluZWQpID0+XG4gICAgICAgIHJvdXRlci5uYXZpZ2F0ZShbbGlua10sIHsgcmVsYXRpdmVUbzogcm91dGUsIC4uLmNvbmZpZyB9KSxcbiAgICAgIHF1ZXJ5UGFyYW1zOiByb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcyxcbiAgICAgIHBhdGhQYXJhbXM6IHJvdXRlLnNuYXBzaG90LnBhcmFtcyxcbiAgICB9O1xuICB9XG5cbiAgbW9uZXlQYXJzZXIgPSAoYW1vdW50OiBzdHJpbmcgfCBudW1iZXIsIGN1cnJlbmN5ID0gJyAnKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVuY3lQaXBlLnRyYW5zZm9ybShhbW91bnQsIGN1cnJlbmN5IHx8ICcgJyk7XG4gIH07XG4gIGV4dHJhY3RVcGxvYWQoZXZlbnQ6IGFueSkge1xuICAgIHJldHVybiAoZXZlbnQudGFyZ2V0LmZpbGVzIGFzIEZpbGVbXSkgfHwgW107XG4gIH1cblxuICBzZWNvbmRzVG9Ib3VyTWluU2VjID0gKHNlY29uZHM6IG51bWJlcikgPT4ge1xuICAgIGlmICghc2Vjb25kcykgcmV0dXJuIHsgc2VjczogbnVsbCwgaG91cnM6IG51bGwsIG1pbnM6IG51bGwgfTtcbiAgICBjb25zdCBob3VycyA9IE1hdGguZmxvb3Ioc2Vjb25kcyAvIDM2MDApIHx8IDAsXG4gICAgICBzZWNvbmRzRXhIb3VycyA9IHNlY29uZHMgJSAzNjAwIHx8IDAsXG4gICAgICBtaW5zID0gTWF0aC5mbG9vcihzZWNvbmRzRXhIb3VycyAvIDYwKSB8fCAwLFxuICAgICAgc2VjcyA9IHNlY29uZHNFeEhvdXJzICUgNjA7XG4gICAgcmV0dXJuIHsgaG91cnMsIG1pbnMsIHNlY3MgfTtcbiAgfTtcbiAgbWludXRlc1RvRGF5SG91ck1pbiA9IChtaW51dGVzOiBudW1iZXIpID0+IHtcbiAgICBpZiAoIW1pbnV0ZXMpIHJldHVybiB7IGRheXM6IG51bGwsIGhvdXJzOiBudWxsLCBtaW5zOiBudWxsIH07XG4gICAgY29uc3QgZGF5cyA9IE1hdGguZmxvb3IobWludXRlcyAvIDE0NDApIHx8IDAsXG4gICAgICBtaW5pdXRlc0V4RGF5cyA9IG1pbnV0ZXMgJSAxNDQwIHx8IDAsXG4gICAgICBob3VycyA9IE1hdGguZmxvb3IobWluaXV0ZXNFeERheXMgLyA2MCkgfHwgMCxcbiAgICAgIG1pbnMgPSBtaW5pdXRlc0V4RGF5cyAlIDYwIHx8IDA7XG4gICAgcmV0dXJuIHsgZGF5cywgaG91cnMsIG1pbnMgfTtcbiAgfTtcbiAgbWludXRlc1RvRGF5SG91ck1pblN0ciA9IChtaW51dGVzOiBudW1iZXIpID0+IHtcbiAgICBpZiAoIW1pbnV0ZXMpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHJldCA9IHRoaXMubWludXRlc1RvRGF5SG91ck1pbihtaW51dGVzKTtcbiAgICByZXR1cm4gYCR7cmV0LmRheXN9ICR7cmV0LmhvdXJzfToke3JldC5taW5zfWAudHJpbSgpO1xuICB9O1xuICBtaW51dGVzVG9EYXlIb3VyTWluU3RyMiA9IChtaW51dGVzOiBudW1iZXIpID0+IHtcbiAgICBpZiAoIW1pbnV0ZXMpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHJldCA9IHRoaXMubWludXRlc1RvRGF5SG91ck1pbihtaW51dGVzKTtcbiAgICByZXR1cm4gYCR7cmV0LmRheXN9ZGF5cyAke3JldC5ob3Vyc31ocnMgJHtyZXQubWluc31taW5zYC50cmltKCk7XG4gIH07XG4gIGRheUhvdXJNaW5Ub0hvdXJNaW51dGVzID0gKGR5czogbnVtYmVyLCBocnM6IG51bWJlciwgbWluczogbnVtYmVyKSA9PiB7XG4gICAgaWYgKCFkeXMgJiYgIWhycyAmJiAhbWlucykgcmV0dXJuICcnO1xuICAgIGNvbnN0IGR5c1RvSHJzID0gKGR5cyB8fCAwKSAqIDI0O1xuICAgIGhycyA9ICgraHJzIHx8IDApICsgZHlzVG9IcnM7XG4gICAgcmV0dXJuIChocnMgfHwgJzAwJykgKyAnOicgKyAobWlucyB8fCAnMDAnKTtcbiAgfTtcbiAgZGlzYWJsZU9yRW5hYmxlSW5wdXRzID0gKGNvbnRyb2xzOiBBYnN0cmFjdENvbnRyb2xbXSwgZGlzYWJsZTogYm9vbGVhbikgPT4ge1xuICAgIGlmIChkaXNhYmxlKSB0aGlzLmRpc2FibGVJbnB1dHMoY29udHJvbHMpO1xuICAgIGVsc2UgdGhpcy5lbmFibGVJbnB1dHMoY29udHJvbHMpO1xuICB9O1xuICBkaXNhYmxlSW5wdXRzID0gKGNvbnRyb2xzOiBBYnN0cmFjdENvbnRyb2xbXSkgPT4ge1xuICAgIGZvciAoY29uc3QgY29udHJvbCBvZiBjb250cm9scykge1xuICAgICAgY29udHJvbD8uZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuICB9O1xuICBlbmFibGVJbnB1dHMgPSAoY29udHJvbHM6IEFic3RyYWN0Q29udHJvbFtdKSA9PiB7XG4gICAgZm9yIChjb25zdCBjb250cm9sIG9mIGNvbnRyb2xzKSB7XG4gICAgICBjb250cm9sPy5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgfTtcbiAgZGF5SG91ck1pblRvTWludXRlcyA9IChkeXM6IG51bWJlciwgaHJzOiBudW1iZXIsIG1pbnM6IG51bWJlcikgPT4ge1xuICAgIGlmICghZHlzICYmICFocnMgJiYgIW1pbnMpIHJldHVybiAwO1xuICAgIGNvbnN0IGR5c1RvSHJzID0gKGR5cyB8fCAwKSAqIDI0O1xuICAgIGhycyA9ICgraHJzIHx8IDApICsgZHlzVG9IcnM7XG4gICAgcmV0dXJuIChocnMgfHwgMCkgKiA2MCArIG1pbnM7XG4gIH07XG4gIGhvdXJNaW5Ub01pbnV0ZXMgPSAoaHJzOiBudW1iZXIsIG1pbnM6IG51bWJlcikgPT4ge1xuICAgIGlmICghaHJzICYmICFtaW5zKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gKGhycyB8fCAwKSAqIDYwICsgbWlucztcbiAgfTtcbiAgaG91ck1pblRvTWludXRlczIgPSAoaHJzTWluczogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgW2hycywgbWluc10gPSBocnNNaW5zPy5zcGxpdCgnOicpIHx8IFswLCAwXTtcbiAgICByZXR1cm4gdGhpcy5ob3VyTWluVG9NaW51dGVzKCtocnMsICttaW5zKTtcbiAgfTtcbiAgbm90aWZ5KG1lc3NhZ2U6IHN0cmluZywgY2xzOiAwIHwgMSB8IDIgfCAzID0gMSwgZHVyYXRpb24gPSA1MDAwLCB0aXRsZT86IHN0cmluZykge1xuICAgIC8vIGlmIChjbHMgPT0gMCkgcmV0dXJuIHRoaXMuaW5mbyhtZXNzYWdlLCBjbHMpO1xuICAgIGlmICh0eXBlb2YgbWVzc2FnZSAhPSAnc3RyaW5nJykgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICBjb25zdCB0b2FzdCA9IHRoaXMudG9hc3QuYWRkKHtcbiAgICAgIGJvZHk6IHRpdGxlID8gbWVzc2FnZSA6IHVuZGVmaW5lZCxcbiAgICAgIGhlYWRlcjogdGl0bGUgfHwgbWVzc2FnZSxcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgdGFnOiBjbHMsXG4gICAgfSk7XG4gICAgcmV0dXJuIHsgY2xvc2VkOiB0b2FzdC5jbG9zZWQgfTtcbiAgICAvLyBtZXNzYWdlID0gdHlwZW9mIG1lc3NhZ2UgPT0gJ3N0cmluZycgPyBtZXNzYWdlIDogJyc7XG4gICAgLy8gY29uc3QgcmVmID0gdGhpcy5zbmFja0Jhci5vcGVuKG1lc3NhZ2UsIHRpdGxlLCB7XG4gICAgLy8gICBkdXJhdGlvbixcbiAgICAvLyAgIGhvcml6b250YWxQb3NpdGlvbjogJ2NlbnRlcicsXG4gICAgLy8gICB2ZXJ0aWNhbFBvc2l0aW9uOiAnYm90dG9tJyxcbiAgICAvLyAgIHBhbmVsQ2xhc3M6XG4gICAgLy8gICAgIGNscyA9PSAxID8gJ2JnLXN1Y2Nlc3MnIDogY2xzID09IDIgPyAnYnRuLWluZm8nIDogY2xzID09IDMgPyAnYnRuLXdhcm5pbmcnIDogJ2JnLWRhbmdlcicsXG4gICAgLy8gfSk7XG4gICAgLy8gcmV0dXJuIGZpcnN0VmFsdWVGcm9tKHJlZi5hZnRlckRpc21pc3NlZCgpLnBpcGUobWFwKChyKSA9PiByLmRpc21pc3NlZEJ5QWN0aW9uKSkpO1xuICB9XG5cbiAgc2Nyb2xsVG9Ub3AgPSAoKSA9PiB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG5cbiAgLyoqXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGRhdGUgdGltZSBsb2NhbCB0aGF0IGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgZGF0ZXRpbWUtbG9jYWwgaW5wdXRcbiAgICovXG4gIGdldExvY2FsRGF0ZVRpbWVOb3cgPSAoKSA9PiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgLTEpO1xuICAvKiogQHJldHVybnMgVGhlIGN1cnJlbnQgZGF0ZSBsb2NhbCB0aGF0IGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgZGF0ZSBpbnB1dCAqL1xuICBsb2NhbERhdGVOb3cgPSAoKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdO1xuICB9O1xuICBkYXRlRm9ybWF0ID0gKGRhdGU6IGFueSwgZm9ybWF0ID0gMSkgPT4ge1xuICAgIGlmICghZGF0ZSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgZCA9IG5ldyBEYXRlKGRhdGUpO1xuICAgIGlmIChmb3JtYXQgPT0gMSkge1xuICAgICAgcmV0dXJuIGQudG9EYXRlU3RyaW5nKCk7XG4gICAgfSBlbHNlIGlmIChmb3JtYXQgPT0gMikge1xuICAgICAgcmV0dXJuIGQuZ2V0RGF0ZSgpICsgJyAnICsgY29uZmlnLk1vbnRoc1tkLmdldE1vbnRoKCldO1xuICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09IDMpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRlLCBgRUVFIE1NTSBkZCBZWVlZLCBoaDptbSBhYWApO1xuICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09IDQpIHtcbiAgICAgIHJldHVybiBjb25maWcuTW9udGhzW2QuZ2V0TW9udGgoKV0gKyAnICcgKyBkLmdldERhdGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfTtcblxuICB0b0phdmFEYXRlU3RyaW5nID0gKGlzb0RhdGVTdHJpbmc6IHN0cmluZyA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSkgPT4ge1xuICAgIGlmICghaXNvRGF0ZVN0cmluZykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGAke2lzb0RhdGVTdHJpbmcuc2xpY2UoMCwgMTkpfWA7XG4gICAgcmV0dXJuIGAke2lzb0RhdGVTdHJpbmcuc2xpY2UoMCwgMTApfSAke2lzb0RhdGVTdHJpbmcuc2xpY2UoMTEsIDE5KX1gO1xuICB9O1xuXG4gIHRvSmF2YURhdGV0aW1lU3RyaW5nID0gKGlzb0RhdGVTdHJpbmc6IHN0cmluZykgPT4ge1xuICAgIGlmICghaXNvRGF0ZVN0cmluZykgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgZGF0ZSA9IGlzb0RhdGVTdHJpbmcuaW5jbHVkZXMoJ1QnKVxuICAgICAgPyBpc29EYXRlU3RyaW5nXG4gICAgICA6IG5ldyBEYXRlKGlzb0RhdGVTdHJpbmcpLnRvSVNPU3RyaW5nKCk7XG4gICAgcmV0dXJuIGAke2RhdGUuc2xpY2UoMCwgMTApfSAke2RhdGUuc2xpY2UoMTEsIDE5KX1gO1xuICB9O1xuXG4gIHRpbWVGb3JtYXQgPSAodGltZT86IGFueSkgPT4ge1xuICAgIGNvbnN0IHRpbWVBcnI6IGFueVtdID0gdGltZS5zcGxpdCgnICcpO1xuICAgIHRpbWVBcnJbMF0gPSB0aW1lQXJyWzBdLnNwbGl0KCc6Jykuc3BsaWNlKDAsIDIpLmpvaW4oJzonKTtcbiAgICByZXR1cm4gdGltZUFyci5qb2luKCcgJyk7XG4gIH07XG4gIGZ1bGxEYXRlVGltZSA9ICh0aW1lc3RhbXA6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuICAgIC8vIGRlYnVnZ2VyXG4gICAgcmV0dXJuIHRoaXMuZGF0ZUZvcm1hdCh0aW1lc3RhbXAsIDMpO1xuICB9O1xuICBkYXlzRm9ybWF0dGVyID0gKGRheXM6IG51bWJlcikgPT4ge1xuICAgIGlmICghZGF5cykge1xuICAgICAgcmV0dXJuICctJztcbiAgICB9XG4gICAgbGV0IHlyOiBudW1iZXIsXG4gICAgICBtdDogbnVtYmVyLFxuICAgICAgZHk6IG51bWJlcixcbiAgICAgIHJldDogc3RyaW5nLFxuICAgICAgX3lyID0gMzY1LFxuICAgICAgX210ID0gMzA7XG4gICAgaWYgKGRheXMgPiBfeXIpIHtcbiAgICAgIHlyID0gTWF0aC5mbG9vcihkYXlzIC8gX3lyKTtcbiAgICB9XG4gICAgaWYgKGRheXMgPiBfbXQpIHtcbiAgICAgIG10ID0gTWF0aC5mbG9vcigoZGF5cyAlIF95cikgLyBfbXQpO1xuICAgIH1cbiAgICBkeSA9IChkYXlzICUgX3lyKSAlIF9tdDtcbiAgICByZXQgPSBgJHt5ciA/IHRoaXMucGx1YXJsaXplcih5ciwgJ3lyJykgOiAnJ30gJHtcbiAgICAgIG10ID8gdGhpcy5wbHVhcmxpemVyKG10LCAnbXRoJykgOiAnJ1xuICAgIH0gJHt0aGlzLnBsdWFybGl6ZXIoZHksICdkeScpfWA7XG4gICAgcmV0dXJuIHJldDtcbiAgfTtcbiAgbW9udGhzRm9ybWF0dGVyID0gKG1vbnRoczogbnVtYmVyKSA9PiB7XG4gICAgaWYgKCFtb250aHMpIHtcbiAgICAgIHJldHVybiAnLSc7XG4gICAgfVxuICAgIGxldCB5cjogbnVtYmVyLFxuICAgICAgbXQ6IG51bWJlcixcbiAgICAgIHJldDogc3RyaW5nLFxuICAgICAgX3lyID0gMTI7XG4gICAgaWYgKG1vbnRocyA+IF95cikge1xuICAgICAgeXIgPSBNYXRoLmZsb29yKG1vbnRocyAvIF95cik7XG4gICAgfVxuICAgIG10ID0gbW9udGhzICUgX3lyO1xuICAgIHJldCA9IGAke3lyID8gdGhpcy5wbHVhcmxpemVyKHlyLCAneXInKSA6ICcnfSAke210ID8gdGhpcy5wbHVhcmxpemVyKG10LCAnbXRoJykgOiAnJ31gO1xuICAgIHJldHVybiByZXQ7XG4gIH07XG4gIHBsdWFybGl6ZXIgPSAodmFsOiBudW1iZXIsIHR4dDogc3RyaW5nLCBwbHVyYWw/OiBzdHJpbmcpID0+IHtcbiAgICBwbHVyYWwgPSBwbHVyYWwgfHwgdHh0ICsgJ3MnO1xuICAgIHJldHVybiB2YWwgKyAodmFsID09IDEgPyB0eHQgOiBwbHVyYWwpO1xuICB9O1xuICBkZWNpbWFsVG9QZXJjZW50YWdlID0gKGRlYzogbnVtYmVyKSA9PiB7XG4gICAgcmV0dXJuIGRlYyAqIDEwMCArICclJztcbiAgfTtcbiAgbG9nRm9ybSA9IChmb3JtKSA9PiB7XG4gICAgY29uc29sZS5sb2coJ0ZPUk0nLCBmb3JtLCAnVkFMVUVTJywgZm9ybS52YWx1ZSBhcyBhbnkpO1xuICB9O1xuXG4gIHRvQ1NWKGRhdGE6IGFueVtdLCBoZWFkZXJOYW1lczogc3RyaW5nW10sIGZpbGVuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCByZXBsYWNlciA9IChrZXksIHZhbHVlKSA9PiAodmFsdWUgPT09IG51bGwgPyAnJyA6IHZhbHVlKTsgLy8gc3BlY2lmeSBob3cgeW91IHdhbnQgdG8gaGFuZGxlIG51bGwgdmFsdWVzIGhlcmVcblxuICAgIGxldCBjc3YgPSBkYXRhLm1hcCgocm93KSA9PlxuICAgICAgaGVhZGVyTmFtZXMubWFwKChmaWVsZE5hbWUpID0+IEpTT04uc3RyaW5naWZ5KHJvd1tmaWVsZE5hbWVdLCByZXBsYWNlcikpLmpvaW4oJywnKSxcbiAgICApO1xuICAgIGNzdi51bnNoaWZ0KGhlYWRlck5hbWVzLmpvaW4oJywnKSk7XG4gICAgbGV0IGNzdkFycmF5ID0gY3N2LmpvaW4oJ1xcclxcbicpO1xuXG4gICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbY3N2QXJyYXldLCB7IHR5cGU6ICd0ZXh0L2NzdicgfSk7XG4gICAgc2F2ZUFzKGJsb2IsIGZpbGVuYW1lICsgJy5jc3YnKTtcbiAgfVxuXG4gIGlzUGljdHVyZUZvcm1hdChmaWxlTmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCFmaWxlTmFtZSkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IFBJQ1RVUkVfRk9STUFUUyA9IFsnLmpwZycsICcuanBlZycsICcucG5nJywgJy5naWYnXTtcbiAgICByZXR1cm4gUElDVFVSRV9GT1JNQVRTLnNvbWUoKGZvcm1hdCkgPT4gZmlsZU5hbWUuZW5kc1dpdGgoZm9ybWF0KSk7XG4gIH1cbiAgb2JqZWN0VG9BcnJheTxUPihvYmo6IGFueSkge1xuICAgIGNvbnN0IHJldCA9IFtdO1xuICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgcmV0LnB1c2gob2JqW2tleV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV0IGFzIFRbXTtcbiAgfVxuICBmb3JtYXRGaWVsZChmaWVsZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50b1RpdGxlQ2FzZShmaWVsZD8udG9TZW50ZW5jZUNhc2UoKSk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZXMgYSB3ZWIgd29ya2VyIHRvIHBlcmZvcm0gYSB0YXNrXG4gICAqIEBleGFtcGxlIG5ldyBXb3JrZXIobmV3IFVSTCgnLi91cGxvYWQtY3N2LndvcmtlcicsIGltcG9ydC5tZXRhLnVybCkpXG4gICAqIEBwYXJhbSB3b3JrZXIgV2ViIHdvcmtlciBvYmplY3RcbiAgICogQHBhcmFtIGlucHV0RGF0YSBEYXRhIGJlaW5nIHBhc3NlZCBpbnRvIHdlYiB3b3JrZXJcbiAgICogQHJldHVybnMgRGF0YSBnb3R0ZW4gZnJvbSB3ZWIgd29ya2VyXG4gICAqL1xuICB1c2VXZWJXb3JrZXI8VCA9IGFueT4oXG4gICAgd29ya2VyOiBXb3JrZXIsXG4gICAgaW5wdXREYXRhOiBhbnksXG4gICAgY29uZGl0aW9ucz86IHsgc3RvcDogKHJlcykgPT4gYm9vbGVhbjsgZXJyb3I6IChyZXMpID0+IGJvb2xlYW4gfSxcbiAgKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPFQ+KChzdWIpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgV29ya2VyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHdvcmtlci5wb3N0TWVzc2FnZShpbnB1dERhdGEpO1xuICAgICAgICAgIHdvcmtlci5vbm1lc3NhZ2UgPSAocikgPT4ge1xuICAgICAgICAgICAgLy8gZGVidWdnZXJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHIuZGF0YTtcbiAgICAgICAgICAgIGlmIChjb25kaXRpb25zKSB7XG4gICAgICAgICAgICAgIGlmIChjb25kaXRpb25zLmVycm9yKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgc3ViLmVycm9yKGRhdGEpO1xuICAgICAgICAgICAgICAgIHN1Yi5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb25kaXRpb25zLnN0b3AoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBzdWIubmV4dChkYXRhKTtcbiAgICAgICAgICAgICAgICBzdWIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3ViLm5leHQoZGF0YSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN1Yi5uZXh0KGRhdGEgYXMgYW55KTtcbiAgICAgICAgICAgICAgc3ViLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93ICdub1dvcmtlcic7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgIHN1Yi5lcnJvcihlKTtcbiAgICAgICAgc3ViLmNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgdHJpbSA9XG4gICAgKGxlbmd0aCA9IDE1KSA9PlxuICAgICh0ZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQpID0+XG4gICAgICB0ZXh0ICYmIHRleHQubGVuZ3RoID4gbGVuZ3RoID8gdGV4dC5zbGljZSgwLCBsZW5ndGgpICsgJy4uLicgOiB0ZXh0ITtcbiAgYXN5bmMgYXJyYXlUb0NTVihcbiAgICBkYXRhOiBhbnlbXSxcbiAgICBmaWxlbmFtZTogc3RyaW5nLFxuICAgIGhlYWRlck1hcD86IFRhYmxlQ29sW10sXG4gICAgZXh0cmFDb25maWc/OiB7IHByZWZpeD86IHN0cmluZzsgaGlkZUhlYWRlcj86IGJvb2xlYW47IGhpZGVOb3RpZmljYXRpb24/OiBib29sZWFuIH0sXG4gICkge1xuICAgIC8vIGRlYnVnZ2VyO1xuICAgIGxldCBfZGF0YTogYW55W107XG4gICAgY29uc3QgaGVhZGVyTWFwV2l0aEZvcm1hdHRlcnM6IFRhYmxlQ29sW10gPVxuICAgICAgaGVhZGVyTWFwPy5maWx0ZXIoKHgpID0+IHguZm9ybWF0dGVyIHx8IHguZm9ybWF0dGVyUm93KSB8fCB1bmRlZmluZWQ7XG4gICAgaWYgKGhlYWRlck1hcFdpdGhGb3JtYXR0ZXJzPy5sZW5ndGgpIHtcbiAgICAgIF9kYXRhID0gY2xvbmVEZWVwKGRhdGEpO1xuICAgICAgZm9yIChjb25zdCBmb3JtYXR0ZXIgb2YgaGVhZGVyTWFwV2l0aEZvcm1hdHRlcnMpIHtcbiAgICAgICAgZm9yIChjb25zdCByb3cgb2YgX2RhdGEpIHtcbiAgICAgICAgICByb3dbZm9ybWF0dGVyLmZdID0gZm9ybWF0dGVyLmZvcm1hdHRlclxuICAgICAgICAgICAgPyBhd2FpdCBmb3JtYXR0ZXIuZm9ybWF0dGVyKHJvd1tmb3JtYXR0ZXIuZl0pXG4gICAgICAgICAgICA6IGZvcm1hdHRlci5mb3JtYXR0ZXJSb3cocm93KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBfZGF0YSA9IGRhdGE7XG4gICAgfVxuICAgIGNvbnN0IHNob3dIZWFkZXIgPSAhZXh0cmFDb25maWc/LmhpZGVIZWFkZXI7XG4gICAgbGV0IGNzdiA9IFBhcGEudW5wYXJzZShfZGF0YSwge1xuICAgICAgaGVhZGVyOiBzaG93SGVhZGVyICYmICFoZWFkZXJNYXA/Lmxlbmd0aCxcbiAgICAgIGNvbHVtbnM6IGhlYWRlck1hcD8ubWFwKCh4KSA9PiB4LmY/LnRvU3RyaW5nKCkpIHx8IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgICB0aGlzLmRvd25sb2FkZXIoXG4gICAgICAoZXh0cmFDb25maWc/LnByZWZpeCA/IGV4dHJhQ29uZmlnPy5wcmVmaXggKyAnXFxyXFxuJyA6ICcnKSArXG4gICAgICAgIChoZWFkZXJNYXA/Lmxlbmd0aCA/IGhlYWRlck1hcC5tYXAoKGZpZWxkTmFtZSkgPT4gZmllbGROYW1lLnQpLmpvaW4oJywnKSArIGBcXHJcXG5gIDogJycpICtcbiAgICAgICAgY3N2LFxuICAgICAgZmlsZW5hbWU/LmVuZHNXaXRoKCcuY3N2JykgPyBmaWxlbmFtZSA6IGZpbGVuYW1lICsgJy5jc3YnLFxuICAgICk7XG5cbiAgICBpZiAoZXh0cmFDb25maWc/LmhpZGVOb3RpZmljYXRpb24gPT0gdHJ1ZSkgcmV0dXJuO1xuICAgIHRoaXMuaW5mbyhgRG93bmxvYWRlZCAke2ZpbGVuYW1lfWApO1xuICB9XG4gIHR5cGVDYXN0ZXIgPSA8VD4odmFsdWU6IFQpID0+IHZhbHVlO1xuXG4gIGpvaW5DU1ZSb3dzKC4uLkNTVnM6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIENTVnMuam9pbignXFxyXFxuJyk7XG4gIH1cbiAgYXN5bmMgYXJyYXlUb0NTVlN0cmluZzxUID0gYW55PihcbiAgICBkYXRhOiBUW10sXG4gICAgaGVhZGVyTWFwPzogVGFibGVDb2w8VD5bXSxcbiAgICBleHRyYUNvbmZpZz86IHsgcHJlZml4Pzogc3RyaW5nOyBoaWRlSGVhZGVyPzogYm9vbGVhbiB9LFxuICApIHtcbiAgICAvLyBkZWJ1Z2dlcjtcbiAgICBsZXQgX2RhdGE6IGFueVtdO1xuICAgIGNvbnN0IGhlYWRlck1hcFdpdGhGb3JtYXR0ZXJzOiBUYWJsZUNvbFtdID1cbiAgICAgIGhlYWRlck1hcD8uZmlsdGVyKCh4KSA9PiB4LmZvcm1hdHRlciB8fCB4LmZvcm1hdHRlclJvdykgfHwgdW5kZWZpbmVkO1xuICAgIGlmIChoZWFkZXJNYXBXaXRoRm9ybWF0dGVycz8ubGVuZ3RoKSB7XG4gICAgICBfZGF0YSA9IGNsb25lRGVlcChkYXRhKTtcbiAgICAgIGZvciAoY29uc3QgZm9ybWF0dGVyIG9mIGhlYWRlck1hcFdpdGhGb3JtYXR0ZXJzKSB7XG4gICAgICAgIGZvciAoY29uc3Qgcm93IG9mIF9kYXRhKSB7XG4gICAgICAgICAgcm93W2Zvcm1hdHRlci5mXSA9IGZvcm1hdHRlci5mb3JtYXR0ZXJcbiAgICAgICAgICAgID8gYXdhaXQgZm9ybWF0dGVyLmZvcm1hdHRlcihyb3dbZm9ybWF0dGVyLmZdKVxuICAgICAgICAgICAgOiBmb3JtYXR0ZXIuZm9ybWF0dGVyUm93KHJvdyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgX2RhdGEgPSBkYXRhO1xuICAgIGNvbnN0IHNob3dIZWFkZXIgPSAhZXh0cmFDb25maWc/LmhpZGVIZWFkZXI7XG4gICAgbGV0IGNzdiA9IFBhcGEudW5wYXJzZShfZGF0YSwge1xuICAgICAgaGVhZGVyOiBzaG93SGVhZGVyICYmICFoZWFkZXJNYXA/Lmxlbmd0aCxcbiAgICAgIGNvbHVtbnM6IGhlYWRlck1hcD8ubWFwKCh4KSA9PiB4LmY/LnRvU3RyaW5nKCkpIHx8IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgICByZXR1cm4gKFxuICAgICAgKGV4dHJhQ29uZmlnPy5wcmVmaXggPyBleHRyYUNvbmZpZz8ucHJlZml4ICsgJ1xcclxcbicgOiAnJykgK1xuICAgICAgKGhlYWRlck1hcD8ubGVuZ3RoID8gaGVhZGVyTWFwLm1hcCgoZmllbGROYW1lKSA9PiBmaWVsZE5hbWUudCkuam9pbignLCcpICsgYFxcclxcbmAgOiAnJykgK1xuICAgICAgY3N2XG4gICAgKTtcbiAgfVxuXG4gIGlzRGF0ZVZhbHVlID0gKHYpID0+XG4gICAgdiA/IHR5cGVvZiB2ID09ICdzdHJpbmcnICYmIHZbNF0gPT0gJy0nICYmIHZbN10gPT0gJy0nICYmIHYubGVuZ3RoID09IDEwIDogZmFsc2U7XG4gIGlzRGF0VGltZVZhbHVlID0gKHYpID0+XG4gICAgdiA/IHR5cGVvZiB2ID09ICdzdHJpbmcnICYmIHZbMTBdID09ICdUJyAmJiB2WzRdID09ICctJyAmJiB2WzddID09ICctJyA6IGZhbHNlO1xuXG4gIHllc05vQ2VsbEZvcm1hdHRlckNvbG91cmVkID0gKHYpID0+XG4gICAgYDxzcGFuIGNsYXNzPScke3YgPyAnc3VjY2Vzc0NlbGwnIDogJ2luZXJ0Q2VsbCd9Jz4ke1xuICAgICAgdiA/ICdZZXMnIDogdiA9PSBmYWxzZSA/ICdObycgOiAnLSdcbiAgICB9PC9zcGFuPmA7XG4gIHllc05vQ2VsbEZvcm1hdHRlciA9ICh2KSA9PiBgJHt2ID8gJ1llcycgOiAnTm8nfWA7XG4gIHN0YXR1c0NlbGxGb3JtYXR0ZXIgPSAoc3RhdHVzOiBTdGF0dXMpID0+XG4gICAgYDxzcGFuIGNsYXNzPScke1xuICAgICAgc3RhdHVzID09ICdDT01QTEVURUQnID8gJ3N1Y2Nlc3NDZWxsJyA6IHN0YXR1cyA9PSAnUEVORElORycgPyAncGVuZGluZ0NlbGwnIDogJ2luZXJ0Q2VsbCdcbiAgICB9Jz4ke3N0YXR1cyB8fCAnLSd9PC9zcGFuPmA7XG5cbiAgY2VsbFN0YXR1c0Zvcm1hdHRlciA9XG4gICAgPFQgPSBhbnk+KGd1aWRlOiB7IHN1Y2Nlc3NWYWw/OiBUOyBwZW5kaW5nVmFsPzogVDsgZXJyb3JWYWw/OiBUOyBpbmVydFZhbD86IFQgfSkgPT5cbiAgICAodikgPT5cbiAgICAgIGA8c3BhbiBjbGFzcz0nJHtcbiAgICAgICAgdiA9PSBndWlkZS5zdWNjZXNzVmFsXG4gICAgICAgICAgPyAnc3VjY2Vzc0NlbGwnXG4gICAgICAgICAgOiB2ID09IGd1aWRlLnBlbmRpbmdWYWxcbiAgICAgICAgICAgID8gJ3BlbmRpbmdDZWxsJ1xuICAgICAgICAgICAgOiB2ID09IGd1aWRlLmVycm9yVmFsXG4gICAgICAgICAgICAgID8gJ2Vycm9yQ2VsbCdcbiAgICAgICAgICAgICAgOiAnaW5lcnRDZWxsJ1xuICAgICAgfSc+JHt2fTwvc3Bhbj5gO1xuXG4gIGdlbmVyYXRlVVVJRCA9IEVWRnVuY3Rpb25zLmdlbmVyYXRlVVVJRDtcblxuICBpbmZvOiAoXG4gICAgdGV4dDogc3RyaW5nLFxuICAgIHN0YXR1cz86IDAgfCAyIHwgMSxcbiAgICBoZWFkaW5nPzogc3RyaW5nLFxuICAgIGJ0bnM/OiBJSW5mb0RpYWxvZ0J0bltdLFxuICAgIGRpc2FibGVDbG9zZT86IGJvb2xlYW4sXG4gICkgPT4gUHJvbWlzZTxib29sZWFuPjtcbiAgZGVib3VuY2VyID0gdGhpcy5kZWJvdW5jZXJTZXJ2aWNlLmRlYm91bmNlcjtcblxuICBhc3luY1ZhbGlkYXRpb24gPSB0aGlzLmRlYm91bmNlclNlcnZpY2UuYXN5bmNWYWxpZGF0aW9uO1xuXG4gIHN0YXJ0UGwgPSB0aGlzLnBTLnN0YXJ0UGw7XG4gIHN0b3BQbCA9IHRoaXMucFMuc3RvcFBsO1xuXG4gIGNyZWF0ZVN1YnNjcmlwdGlvbk1hbmFnZXIgPSAoLi4uc3ViczogU3Vic2NyaXB0aW9uW10pID0+IHtcbiAgICBsZXQgX3N1YnM6IFN1YnNjcmlwdGlvbltdID0gc3VicyB8fCBbXTtcblxuICAgIGNvbnN0IGNsZWFyID0gKCkgPT4ge1xuICAgICAgLy8gZGVidWdnZXI7XG4gICAgICBfc3Vicy5mb3JFYWNoKCh4KSA9PiB4LnVuc3Vic2NyaWJlKCkpO1xuICAgICAgX3N1YnMgPSBbXTtcbiAgICB9O1xuXG4gICAgY29uc3QgcHVzaCA9ICguLi5zdWJzOiBTdWJzY3JpcHRpb25bXSkgPT4gX3N1YnMucHVzaCguLi5zdWJzKTtcblxuICAgIHJldHVybiB7IGNsZWFyLCBwdXNoLCBzdWJzOiAoKSA9PiBfc3VicyB9O1xuICB9O1xuXG4gIGNyZWF0ZUNhY2hlTWFuYWdlciA9IDxURGF0YSA9IGFueSwgVEtleSA9IGFueT4oY29uZmlnOiB7XG4gICAga2V5ZXI/OiAoaXRlbTogVEtleSkgPT4gc3RyaW5nO1xuICAgIG1heFNpemU/OiBudW1iZXI7XG4gIH0pID0+IHtcbiAgICBsZXQgX2NhY2hlOiB7IFtrZXk6IHN0cmluZ106IHsgaXRlbTogVERhdGEgfSB9ID0ge30sXG4gICAgICBrZXlGdW5jdGlvbiA9IGNvbmZpZz8ua2V5ZXIsXG4gICAgICBtYXhTaXplID0gY29uZmlnPy5tYXhTaXplIHx8IDEwMDA7XG4gICAgY29uc3Qga2V5U3RhY2s6IHN0cmluZ1tdID0gW107XG5cbiAgICBjb25zdCBjbGVhciA9ICgpID0+IHtcbiAgICAgIF9jYWNoZSA9IHt9O1xuICAgIH07XG4gICAgY29uc3QgZGVzdHJveSA9ICgpID0+IHtcbiAgICAgIF9jYWNoZSA9IHVuZGVmaW5lZDtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2F2ZSA9IChrZXk6IHN0cmluZyB8IG51bWJlciB8IFRLZXksIGRhdGE6IFREYXRhKSA9PiB7XG4gICAgICBpZiAoIV9jYWNoZSkgX2NhY2hlID0ge307XG4gICAgICBjb25zdCBrZXlTdHJpbmcgPSBrZXlGdW5jdGlvbiA/IGtleUZ1bmN0aW9uKGtleSBhcyBUS2V5KSA6IChrZXkgYXMgc3RyaW5nKTtcbiAgICAgIF9jYWNoZVtrZXlTdHJpbmddID0ge1xuICAgICAgICBpdGVtOiBkYXRhLFxuICAgICAgfTtcbiAgICAgIGtleVN0YWNrLnB1c2goa2V5U3RyaW5nKTtcblxuICAgICAgaWYgKGtleVN0YWNrLmxlbmd0aCA+IG1heFNpemUpIGRlbGV0ZSBfY2FjaGVba2V5U3RhY2suc2hpZnQoKV07XG4gICAgfTtcblxuICAgIGNvbnN0IGdldCA9IChrZXk6IFRLZXkpID0+IHtcbiAgICAgIGlmICghX2NhY2hlKSBfY2FjaGUgPSB7fTtcbiAgICAgIGNvbnN0IGtleVN0cmluZyA9IGtleUZ1bmN0aW9uID8ga2V5RnVuY3Rpb24oa2V5IGFzIFRLZXkpIDogKGtleSBhcyBzdHJpbmcpO1xuICAgICAgcmV0dXJuIF9jYWNoZVtrZXlTdHJpbmddPy5pdGVtO1xuICAgIH07XG5cbiAgICByZXR1cm4geyBjbGVhciwgZGVzdHJveSwgZ2V0LCBzYXZlLCBjYWNoZTogKCkgPT4gX2NhY2hlIH07XG4gIH07XG5cbiAgdHJhY2tCeUN1c3RvbUlEID0gKGluZGV4LCBpdGVtKSA9PiB7XG4gICAgaWYgKCFpdGVtW3RoaXMuY3VzdG9tSURGaWVsZF0pIHtcbiAgICAgIGl0ZW1bdGhpcy5jdXN0b21JREZpZWxkXSA9IHRoaXMuZ2VuZXJhdGVVVUlEKCk7XG4gICAgICBjb25zb2xlLmxvZygnc2V0IGN1c3RvbSBpZCcpO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbVt0aGlzLmN1c3RvbUlERmllbGRdO1xuICB9O1xuICB0cmFja0J5Rm9yRm9ybXMgPSAoaW5kZXgsIGl0ZW06IEZvcm1Hcm91cCkgPT4ge1xuICAgIGlmICghaXRlbS5jb250cm9sc1t0aGlzLmN1c3RvbUlERmllbGRdKVxuICAgICAgaXRlbS5hZGRDb250cm9sKHRoaXMuY3VzdG9tSURGaWVsZCwgbmV3IEZvcm1Db250cm9sKHRoaXMuZ2VuZXJhdGVVVUlEKCkpKTtcbiAgICByZXR1cm4gaXRlbS5jb250cm9sc1t0aGlzLmN1c3RvbUlERmllbGRdLnZhbHVlO1xuICB9O1xuICBvYmplY3RUb0Zvcm1Hcm91cCA9IDxUPihkYXRhOiBUKSA9PiB7XG4gICAgY29uc3QgZm9ybSA9IG5ldyBGb3JtR3JvdXA8SVN0cmljdEZvcm1Hcm91cDxUPj4oe30gYXMgYW55KTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhKVxuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpKVxuICAgICAgICBmb3JtLmFkZENvbnRyb2woa2V5LCBuZXcgRm9ybUNvbnRyb2woZGF0YVtrZXldKSk7XG4gICAgcmV0dXJuIGZvcm07XG4gIH07XG5cbiAgZm9ybVNjaGVtYVRvRm9ybUdyb3VwID0gPFQgZXh0ZW5kcyB7IFt4OiBzdHJpbmddOiBhbnkgfT4oc2NoZW1hOiBJRm9ybVNjaGVtYVtdLCBkYXRhPzogVCkgPT4ge1xuICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybUdyb3VwPElTdHJpY3RGb3JtR3JvdXA8VD4+KHt9IGFzIGFueSk7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHNjaGVtYSlcbiAgICAgIGZvcm0uYWRkQ29udHJvbChpdGVtLmZpZWxkLnRvU3RyaW5nKCksIG5ldyBGb3JtQ29udHJvbChkYXRhW2l0ZW0uZmllbGQudG9TdHJpbmcoKV0pKTtcbiAgICByZXR1cm4gZm9ybTtcbiAgfTtcblxuICB0aW1lQ29kZUJsb2NrID0gPFQ+KGxhYmVsOiBzdHJpbmcsIGNiOiAoKSA9PiBUKSA9PiB7XG4gICAgY29uc3Qgc3RhcnRUSW1lID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCByZXMgPSBjYigpO1xuICAgIGNvbnN0IGVuZFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIGNvbnNvbGUubG9nKGxhYmVsLCBzdGFydFRJbWUsIGVuZFRpbWUsIChlbmRUaW1lIC0gc3RhcnRUSW1lKSAvIDEwMDAgKyAnc2VjJyk7XG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICAvKipcbiAgICogRGVsZXRlIG51bGwgb3IgdW5kZWZpbmVkIGZpZWxkcyBmcm9tIGFuIG9iamVjdFxuICAgKiBAcGFyYW0gb2JqIE9iamVjdCB0byBkZWxldGUgZnJvbVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZGVsZXRlTnVsbCA9IDxUPihvYmo6IFQpID0+IHtcbiAgICBjb25zdCByZXQ6IFQgPSB7fSBhcyBhbnk7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKVxuICAgICAgaWYgKG9ialtrZXldID09PSBudWxsIHx8IG9ialtrZXldID09PSB1bmRlZmluZWQgfHwgb2JqW2tleV0gPT09ICcnKSBjb250aW51ZTtcbiAgICAgIGVsc2UgcmV0W2tleV0gPSBvYmpba2V5XTtcblxuICAgIHJldHVybiByZXQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRpbWVzdGFtcCBpbnRvIGhyLG1pbixzZWNcbiAgICogQHBhcmFtIHRpbWVUYWtlbiBUaW1lIHRha2VuIGluIHRpbWVzdGFtcFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZm9ybWF0VGltZVRha2VuID0gKHRpbWVUYWtlbjogbnVtYmVyKSA9PiB7XG4gICAgaWYgKHRpbWVUYWtlbiA9PSBudWxsKSByZXR1cm4gJyc7XG4gICAgY29uc3QgdGltZUxlZnQgPSB0aGlzLnNlY29uZHNUb0hvdXJNaW5TZWMoTWF0aC5yb3VuZCh0aW1lVGFrZW4gLyAxMDAwKSB8fCAxKTtcbiAgICByZXR1cm4gKFxuICAgICAgKHRpbWVMZWZ0LmhvdXJzID8gdGltZUxlZnQuaG91cnMgKyAnaHInIDogJycpICtcbiAgICAgICh0aW1lTGVmdC5taW5zID8gdGltZUxlZnQubWlucyArICdtaW4nIDogJycpICtcbiAgICAgICh0aW1lTGVmdC5zZWNzID8gdGltZUxlZnQuc2VjcyArICdzZWMnIDogJycpXG4gICAgKTtcbiAgfTtcbn1cbiJdfQ==
860
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0eS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXRzLWZlLW5nLXNkay9zcmMvbGliL1NlcnZpY2VzL3V0aWxpdHkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9GLE9BQU8sRUFBVSxVQUFVLEVBQVksTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFDTCxTQUFTLElBQUksU0FBUyxHQUV2QixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBRSxXQUFXLElBQUksV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDekUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxNQUFNLEVBQW9CLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNFLE9BQU8sRUFBRSwyQkFBMkIsSUFBSSxHQUFHLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRSxPQUFPLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQztBQUNuQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxNQUFNLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVuRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxlQUFlLEVBQXNDLE1BQU0sOEJBQThCLENBQUM7QUFDbkcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzdELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBSUwsV0FBVyxFQUNYLFdB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QUFTLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNsQyxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7O1lBQU0sS0FBSyxHQUFHLElBQUksQ0FBQztRQUNwQixNQUFNLFVBQVUsR0FBRyxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUM7UUFDNUMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUU7WUFDNUIsTUFBTSxFQUFFLFVBQVUsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNO1lBQ3hDLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLElBQUksU0FBUztTQUM3RCxDQUFDLENBQUM7UUFDSCxPQUFPLENBQ0wsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3pELENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN2RixHQUFHLENBQ0osQ0FBQztJQUNKLENBQUM7OEdBcnhCVSxjQUFjO2tIQUFkLGNBQWMsY0FERCxNQUFNOzsyRkFDbkIsY0FBYztrQkFEMUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdXJyZW5jeVBpcGUsIERhdGVQaXBlLCBEZWNpbWFsUGlwZSwgTG9jYXRpb24sIFRpdGxlQ2FzZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBjb21wdXRlZCwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIE1hdERpYWxvZyBhcyBNYXREaWFsb2csXG4gIE1hdERpYWxvZ0NvbmZpZyBhcyBNYXREaWFsb2dDb25maWcsXG59IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRTbmFja0JhciBhcyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgUm91dGVyLCBOYXZpZ2F0aW9uRXh0cmFzLCBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBFVFNSZWFjdGl2ZUZvcm1JbnB1dFNlcnZpY2UgYXMgSVMxIH0gZnJvbSAnLi9pbnB1dC5zZXJ2aWNlJztcbmltcG9ydCBqZmQgZnJvbSAnanMtZmlsZS1kb3dubG9hZCc7XG5pbXBvcnQgeyBQYWdlTG9hZGVyU2VydmljZSB9IGZyb20gJy4vcGFnZS1sb2FkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBDb25maWcsIENvbmZpZyBhcyBjb25maWcgfSBmcm9tICcuLi9jb25maWdzL2luZGV4LmNvbmZpZyc7XG5pbXBvcnQgeyBBcHBSb3V0ZUJhc2UgfSBmcm9tICcuLi9TaGFyZWQvbW9kZWxzL1JvdXRlSXRlbS5jbGFzcyc7XG5pbXBvcnQgeyBzYXZlQXMgfSBmcm9tICdmaWxlLXNhdmVyJztcbmltcG9ydCB7IEVWYWxpZGF0aW9uVHlwZSwgSVN0cmljdEZvcm1Hcm91cCwgU3RhdHVzLCBUYWJsZUNvbCB9IGZyb20gJy4uL1NoYXJlZC9tb2RlbHMvaW5kZXgubW9kZWwnO1xuaW1wb3J0IHsgZW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgUGFnZVNlcnZpY2UgfSBmcm9tICcuL3BhZ2Uuc2VydmljZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIEFzeW5jVmFsaWRhdG9yRm4sXG4gIEZvcm1BcnJheSxcbiAgRm9ybUJ1aWxkZXIsXG4gIEZvcm1Db250cm9sLFxuICBGb3JtQ29udHJvbE9wdGlvbnMsXG4gIEZvcm1Hcm91cCxcbiAgVW50eXBlZEZvcm1BcnJheSxcbiAgVmFsaWRhdG9yRm4sXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IExvZ2dlclNlcnZpY2UgfSBmcm9tICcuLi9SZXVzYWJsZXMvcmV1c2FibGUtcGFnZXMvbG9nZ2VyL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge1xuICBmaXJzdFZhbHVlRnJvbSxcbiAgaXNPYnNlcnZhYmxlLFxuICBsYXN0VmFsdWVGcm9tLFxuICBtZXJnZSxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIFJlcGxheVN1YmplY3QsXG4gIFN1YnNjcmlwdGlvbixcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBFRVRTUGFnZUJ0bklEIH0gZnJvbSAnLi4vU2hhcmVkL21vZGVscy9JTWVudUl0ZW0nO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTREtFbnZpcm9ubWVudCB9IGZyb20gJy4uL1NoYXJlZC9tb2RlbHMvZW52aXJvbm1lbnQubW9kZWwnO1xuaW1wb3J0IHsgQnJlYWtwb2ludE9ic2VydmVyLCBCcmVha3BvaW50cyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xuaW1wb3J0IHsgRGVib3VuY2VyU2VydmljZSB9IGZyb20gJy4vZGVib3VuY2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgSUZvcm1TY2hlbWEgfSBmcm9tICcuLi9TaGFyZWQvY29tcG9uZW50cy9mb3JtLWdlbmVyYXRvci9mb3JtLWdlbmVyYXRvci5jb21wb25lbnQnO1xuaW1wb3J0IFBhcGEgZnJvbSAncGFwYXBhcnNlJztcbmltcG9ydCB7IElJbmZvRGlhbG9nQnRuIH0gZnJvbSAnLi4vU2hhcmVkL2NvbXBvbmVudHMvaW5mby1kaWFsb2cvaW5mby1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRVZGdW5jdGlvbnMgfSBmcm9tICcuLi9jb25maWdzL2Jhc2UtZnVuY3Rpb25zJztcbmltcG9ydCB7IFRvYXN0Tm90aWZpY2F0aW9uc1NlcnZpY2UgfSBmcm9tICdAc2VyZW5lLWRldi90b2FzdC1ub3RpZmljYXRpb25zJztcbmltcG9ydCB7IFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJy4vdHJhbnNsYXRpb24uc2VydmljZSc7XG5kZWNsYXJlIGNvbnN0ICQ6IGFueTtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBVdGlsaXR5U2VydmljZTxURW52aXJvbm1lbnQgZXh0ZW5kcyBTREtFbnZpcm9ubWVudCA9IFNES0Vudmlyb25tZW50PiB7XG4gIHB1YmxpYyBkaWFsb2cgPSBpbmplY3QoTWF0RGlhbG9nKTtcbiAgcHVibGljIHNuYWNrQmFyID0gaW5qZWN0KE1hdFNuYWNrQmFyKTtcbiAgcHVibGljIHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBwdWJsaWMgdGl0bGVTID0gaW5qZWN0KFRpdGxlKTtcbiAgcHVibGljIGxvY2F0aW9uID0gaW5qZWN0KExvY2F0aW9uKTtcbiAgcHVibGljIGlucHV0U2VydmljZSA9IGluamVjdChJUzEpO1xuICBwdWJsaWMgcFMgPSBpbmplY3QoUGFnZUxvYWRlclNlcnZpY2UpO1xuICBwdWJsaWMgY3VycmVuY3lQaXBlID0gaW5qZWN0KEN1cnJlbmN5UGlwZSk7XG4gIHB1YmxpYyB0aXRsZUNhc2VQaXBlID0gaW5qZWN0KFRpdGxlQ2FzZVBpcGUpO1xuICBwdWJsaWMgbG9nZ2VyU2VydmljZSA9IGluamVjdChMb2dnZXJTZXJ2aWNlKTtcbiAgcHVibGljIHBhZ2VTID0gaW5qZWN0KFBhZ2VTZXJ2aWNlKTtcbiAgcHVibGljIHJlc3BvbnNpdmUgPSBpbmplY3QoQnJlYWtwb2ludE9ic2VydmVyKTtcbiAgcHVibGljIGRhdGVQaXBlID0gaW5qZWN0KERhdGVQaXBlKTtcbiAgcHVibGljIGRlYm91bmNlclNlcnZpY2UgPSBpbmplY3QoRGVib3VuY2VyU2VydmljZSk7XG4gIHB1YmxpYyBudW1iZXJQaXBlID0gaW5qZWN0KERlY2ltYWxQaXBlKTtcbiAgcHVibGljIHRvYXN0Tm90aWZpY2F0aW9uU2VydmljZSA9IGluamVjdChUb2FzdE5vdGlmaWNhdGlvbnNTZXJ2aWNlKTtcbiAgcHVibGljIHRyYW5zbGF0aW9uU2VydmljZSA9IGluamVjdChUcmFuc2xhdGlvblNlcnZpY2UpO1xuICByOiBBcHBSb3V0ZUJhc2U7XG4gIGRvd25sb2FkZXIgPSBqZmQ7XG4gIGVWYWxpZGF0aW9uVHlwZSA9IEVWYWxpZGF0aW9uVHlwZTtcbiAgY29uZmlnID0gQ29uZmlnO1xuICBlbnZpcm9ubWVudDogVEVudmlyb25tZW50ID0gZW52aXJvbm1lbnQgYXMgYW55O1xuICBwYmlkID0gRUVUU1BhZ2VCdG5JRDtcbiAgJDogYW55O1xuICBpc01vYmlsZTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEVtaXRzIHRydWUgaWYgbW9iaWxlXG4gICAqL1xuICBtb2JpbGVRdWVyeUNoYW5nZWQgPSBuZXcgUmVwbGF5U3ViamVjdDxib29sZWFuPigpO1xuICByZWFkb25seSBpc01vYmlsZVNpZ25hbCA9IHRvU2lnbmFsPGJvb2xlYW4+KFxuICAgIHRoaXMucmVzcG9uc2l2ZS5vYnNlcnZlKFtCcmVha3BvaW50cy5IYW5kc2V0XSkucGlwZShcbiAgICAgIG1hcCgoeyBtYXRjaGVzIH0pID0+IG1hdGNoZXMpLFxuICAgICAgdGFwKChyKSA9PiB7XG4gICAgICAgIHRoaXMuaXNNb2JpbGUgPSByO1xuICAgICAgICB0aGlzLm1vYmlsZVF1ZXJ5Q2hhbmdlZC5uZXh0KHIpO1xuICAgICAgfSksXG4gICAgKSxcbiAgKTtcbiAgcmVhZG9ubHkgaXNUYWJsZXRTaWduYWwgPSB0b1NpZ25hbDxib29sZWFuPihcbiAgICB0aGlzLnJlc3BvbnNpdmUub2JzZXJ2ZShbQnJlYWtwb2ludHMuVGFibGV0XSkucGlwZShtYXAoKHsgbWF0Y2hlcyB9KSA9PiBtYXRjaGVzKSksXG4gICk7XG4gIHJlYWRvbmx5IGlzRGVza3RvcFNpZ25hbCA9IHRvU2lnbmFsPGJvb2xlYW4+KFxuICAgIHRoaXMucmVzcG9uc2l2ZS5vYnNlcnZlKFtCcmVha3BvaW50cy5XZWJMYW5kc2NhcGVdKS5waXBlKG1hcCgoeyBtYXRjaGVzIH0pID0+IG1hdGNoZXMpKSxcbiAgKTtcblxuICBwYWdlU2l6ZU9wdGlvbnMgPSBbNSwgMTAsIDE1LCAyMCwgNTAsIDEwMCwgMjAwLCA1MDAsIDEwMDBdO1xuICBkYXRlUGlwZURhdGUgPSAnRUUsIE1NTU0gZCwgeSc7XG4gIGRhdGVQaXBlRGF0ZUxlYW4gPSAnRUUsIE1NTSBkLCB5JztcbiAgZGF0ZVBpcGVEYXRlVGltZUxlYW4gPSAnRUUsIE1NTSBkLCB5IGhoOm1tIGEnO1xuICByZWFkb25seSBjdXN0b21JREZpZWxkID0gJ19faWQnO1xuICByZWFkb25seSBkZWxpbWl0ZXIgPSBgfn5+Ly9+fn5gO1xuICBmb3JtQnVpbGRlciA9IG5ldyBGb3JtQnVpbGRlcigpLm5vbk51bGxhYmxlO1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnRvYXN0Tm90aWZpY2F0aW9uU2VydmljZS5sYWJlbFBpcGUgPSAodmFsKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UucGlwZVRyYW5zZm9ybWVyKHZhbCwgeyBub0xvYWRlcjogdHJ1ZSB9KTtcbiAgICB9O1xuICB9XG4gIGZvcm1Db250cm9sID0gPFQ+KFxuICAgIHZhbHVlPzogVCB8IG51bGwsXG4gICAgdmFsaWRhdG9yT3JPcHRzPzogVmFsaWRhdG9yRm4gfCBWYWxpZGF0b3JGbltdIHwgRm9ybUNvbnRyb2xPcHRpb25zLFxuICAgIGFzeW5jVmFsaWRhdG9yPzogQXN5bmNWYWxpZGF0b3JGbiB8IEFzeW5jVmFsaWRhdG9yRm5bXSxcbiAgKSA9PiBbdmFsdWUgYXMgYW55IGFzIFQsIHZhbGlkYXRvck9yT3B0cyEsIGFzeW5jVmFsaWRhdG9yIV07XG5cbiAgYmFjayA9ICgpID0+IHRoaXMubG9jYXRpb24uYmFjaygpO1xuXG4gIHJlYWRvbmx5IHRvYXN0ID0ge1xuICAgIGFkZDogdGhpcy50b2FzdE5vdGlmaWNhdGlvblNlcnZpY2UuYWRkVG9hc3ROb3RpZmljYXRpb24sXG4gICAgY2xvc2U6IHRoaXMudG9hc3ROb3RpZmljYXRpb25TZXJ2aWNlLmNsb3NlVG9hc3ROb3RpZmljYXRpb24sXG4gICAgdXBkYXRlOiB0aGlzLnRvYXN0Tm90aWZpY2F0aW9uU2VydmljZS51cGRhdGVUb2FzdE5vdGlmaWNhdGlvbixcbiAgfTtcblxuICBvbmx5T25lSW5wdXQoaW5wdXRzOiBGb3JtQ29udHJvbFtdKSB7XG4gICAgY29uc3QgbklucHV0cyA9IGlucHV0cz8ubWFwKChpbnApID0+ICh7IGlkOiB0aGlzLmdlblJhbmRvbUlELCBpbnAgfSkpIHx8IFtdO1xuICAgIHJldHVybiBtZXJnZShcbiAgICAgIC4uLm5JbnB1dHMubWFwKChpKSA9PiBpLmlucC52YWx1ZUNoYW5nZXMucGlwZShtYXAoKHZhbCkgPT4gKHsgaWQ6IGkuaWQsIHZhbCB9KSkpKSxcbiAgICApLnN1YnNjcmliZSgocikgPT4ge1xuICAgICAgLy8gZGVidWdnZXJcbiAgICAgIGlmIChyLnZhbClcbiAgICAgICAgbklucHV0cy5maWx0ZXIoKHgpID0+IHguaWQgIT0gci5pZCkuZm9yRWFjaCgoeCkgPT4geC5pbnAuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSkpO1xuICAgICAgZWxzZSBuSW5wdXRzLmZpbHRlcigoeCkgPT4geC5pZCAhPSByLmlkKS5mb3JFYWNoKCh4KSA9PiB4LmlucC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGNvcHlQYXlsb2FkKHBheWxvYWQpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCg8U0RLRW52aXJvbm1lbnQ+dGhpcy5lbnZpcm9ubWVudCkuZGVidWcpIHtcbiAgICAgICAgY29uc3QgZWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XG4gICAgICAgIGVsZW0udmFsdWUgPSBKU09OLnN0cmluZ2lmeShwYXlsb2FkKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbGVtKTtcbiAgICAgICAgZWxlbS5zZWxlY3QoKTtcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChlbGVtKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIH1cbiAgfVxuICB4T3JZID0gKHgsIHkgPSAnLScpID0+IGAke3ggPT0gbnVsbCA/IHkgOiB4fWA7XG4gIHRvVGl0bGVDYXNlKHRleHQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnRpdGxlQ2FzZVBpcGUudHJhbnNmb3JtKHRleHQpO1xuICB9XG4gIC8qKlxuICAgKiBDb252ZXJ0IERhdGUgc3RyaW5nIHRvIERhdGUgVGltZSBzdHJpbmdcbiAgICogQHBhcmFtIGRhdGVTdHIgRGF0ZSBzdHJpbmdcbiAgICogQGV4YW1wbGUgJzIwMjItMDEtMjUnXG4gICAqIEBwYXJhbSBjb25maWcgQ29uZmlndXJhdGlvbiBmb3IgdGhlIGNvbnZlcnNpb25cbiAgICogQHJldHVybnMgUmV0dXJucyBhIERhdGUgVGltZSBzdHJpbmdcbiAgICogQGV4YW1wbGUgJzIwMjItMDEtMjVUMDA6MDA6MDBaJyBvciAnMjAyMi0wMS0yNSAwMDowMDowMCdcbiAgICovXG4gIGRhdGVUb0RhdGVUaW1lID0gKFxuICAgIGRhdGVTdHI6IHN0cmluZyxcbiAgICBjb25maWc/OiB7XG4gICAgICAvKipcbiAgICAgICAqIFVzZSB0aGUgeXl5eS1tbS1kZCBoaDptbTpzcyBmb3JtYXRcbiAgICAgICAqL1xuICAgICAgb21pdFQ/OiBib29sZWFuO1xuICAgICAgLyoqVGltZSB0byBhcHBlbmQgdG8gZGF0ZS4gQGV4YW1wbGUgYDEyOjAwOjAwWmAgKi9cbiAgICAgIHRpbWU/OiBzdHJpbmc7XG4gICAgfSxcbiAgKSA9PiB7XG4gICAgcmV0dXJuICFkYXRlU3RyXG4gICAgICA/IG51bGxcbiAgICAgIDogZGF0ZVN0clsxMF0gPT0gJ1QnXG4gICAgICAgID8gZGF0ZVN0clxuICAgICAgICA6IGRhdGVTdHIgK1xuICAgICAgICAgICghIWNvbmZpZz8ub21pdFQgPyBgICR7Y29uZmlnPy50aW1lIHx8ICcwMDowMDowMCd9YCA6IGBUJHtjb25maWc/LnRpbWUgfHwgJzAwOjAwOjAwWid9YCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFNldCBhbiBPYmplY3QncyBmaWVsZCBpZiB0aGUgb2JqZWN0IGV4aXN0cyBvciBkb24ndCBpZiB0aGUgb2JqZWN0IGRvZXNuJ3RcbiAgICogQHBhcmFtIG9iaiBPYmplY3QgaG9sZGluZyB0aGUgZmllbGRcbiAgICogQHBhcmFtIGZpZWxkTmFtZSBOYW1lIG9mIHRoZSBmaWVsZCB0byBzZXRcbiAgICogQHBhcmFtIHZhbCBWYWx1ZSB0byBzZXQgdGhlIGZpZWxkIHdpdGhcbiAgICogQHJldHVybnMgUmV0dXJucyB0aGUgb2JqZWN0IGhvbGRpbmcgdGhlIGRhdGFcbiAgICovXG4gIHNldHRlcldpdGhOdWxsPFQ+KG9iajogVCwga3ZwczogUGFydGlhbDxUPikge1xuICAgIGlmICghb2JqKSByZXR1cm4gbnVsbDtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBrdnBzKSB7XG4gICAgICBvYmpba2V5XSA9IGt2cHNba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIC8qKlxuICAgKiAoU2V0IGFuIE9iamVjdCdzIGZpZWxkIGlmIHRoZSBvYmplY3QgZXhpc3RzIG9yIGRvbid0IGlmIHRoZSBvYmplY3QgZG9lc24ndCkgZm9yIG11bHRpcGxlIGVudHJpZXNcbiAgICogQHBhcmFtIGl0ZW1zIEFycmF5IG9mIG9iamVjdHMgYW5kIHRoZWlyIG1vZGlmaWNhdGlvbnNcbiAgICovXG4gIHNldHRlcldpdGhOdWxsQXJyYXk8VD4oaXRlbXM6IHsgb2JqOiBUOyBrdnBzOiBQYXJ0aWFsPFQ+IH1bXSkge1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgdGhpcy5zZXR0ZXJXaXRoTnVsbChpdGVtLm9iaiwgaXRlbS5rdnBzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgZGVsZXRpb24gb2Ygcm93cyBmcm9tIGEgRm9ybUFycmF5XG4gICAqIEBwYXJhbSBpbmRleCBJbmRleCBvZiB0aGUgcm93IHRvIGRlbGV0ZVxuICAgKiBAcGFyYW0gZmEgVGhlIEZvcm1BcnJheSB0aGF0IGhvbGRzIHRoZSByb3dzXG4gICAqIEBwYXJhbSBkZWxldGVTZXJ2aWNlIFRoZSBkZWxldGlvbiBzZXJ2aWNlIHRvIGJlIGNhbGxlZCAoSXQgc2hvdWxkIGJlIGFuIGFub255bW91cyBmdW5jdGlvbilcbiAgICogQHBhcmFtIGFkZFJvd0Z1bmMgVGhlIGZ1bmN0aW9uIChhbm9ueW1vdXMpIHRoYXQgYWRkcyBhIG5ldyByb3cgdG8gdGhlIEZvcm1BcnJheVxuICAgKiBAcGFyYW0gZW1pdEV2ZW50IFNwZWNpZnkgd2hldGhlciB0byBlbWl0IGFuIGV2ZW50IHdoZW4gbWFuaXB1bGF0aW5nIHRoZSBGb3JtQXJyYXlcbiAgICogQHJldHVybnNcbiAgICovXG4gIGhhbmRsZUZvcm1Sb3dEZWxldGUgPSAoXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBmYTogVW50eXBlZEZvcm1BcnJheSxcbiAgICBkZWxldGVTZXJ2aWNlOiAoLi4uYXJncykgPT4gUHJvbWlzZTxhbnk+IHwgT2JzZXJ2YWJsZTxhbnk+LFxuICAgIGFkZFJvd0Z1bmM6ICguLi5hcmdzKSA9PiBhbnksXG4gICAgZXh0cmFDb25maWc/OiB7XG4gICAgICBkb250RW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgICAgIG9uRGVsZXRlPzogKHJlcykgPT4gYW55O1xuICAgIH0sXG4gICkgPT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCBpZCA9IGNsb25lRGVlcChmYS5jb250cm9sc1tpbmRleF0/LnZhbHVlPy5pZCk7XG4gICAgICAvLyBkZWJ1Z2dlcjtcbiAgICAgIGlmIChmYS5jb250cm9scy5sZW5ndGggPT0gMSAmJiBpZCkge1xuICAgICAgICBmYS5yZW1vdmVBdChpbmRleCwgeyBlbWl0RXZlbnQ6ICFleHRyYUNvbmZpZz8uZG9udEVtaXRFdmVudCB9KTtcbiAgICAgICAgYWRkUm93RnVuYygpO1xuICAgICAgfSBlbHNlIGlmIChmYS5jb250cm9scy5sZW5ndGggPiAxKVxuICAgICAgICBmYS5yZW1vdmVBdChpbmRleCwgeyBlbWl0RXZlbnQ6ICFleHRyYUNvbmZpZz8uZG9udEVtaXRFdmVudCB9KTtcbiAgICAgIGVsc2UgaWYgKGZhLmNvbnRyb2xzLmxlbmd0aCA9PSAxKSBmYS5jb250cm9sc1swXS5yZXNldCgpO1xuXG4gICAgICBpZiAoaWQgJiYgZGVsZXRlU2VydmljZSkge1xuICAgICAgICBjb25zdCByZXEgPSBkZWxldGVTZXJ2aWNlKGlkKTtcbiAgICAgICAgaWYgKHJlcVsndG9Qcm9taXNlJ10pIHtcbiAgICAgICAgICByZXNvbHZlKGxhc3RWYWx1ZUZyb20ocmVxIGFzIE9ic2VydmFibGU8YW55PikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUocmVxIGFzIGFueSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICB9XG4gICAgfSkudGhlbigocikgPT4ge1xuICAgICAgZXh0cmFDb25maWc/Lm9uRGVsZXRlKHIpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfSk7XG4gIH07XG5cbiAgb3BlbkhUTUxJbkZ1bGxzY3JlZW48VE1ldGFkYXRhPihcbiAgICBlbGVtOiBIVE1MRWxlbWVudCxcbiAgICBtZXRhZGF0YT86IFRNZXRhZGF0YSxcbiAgICBvbkxlYXZlPzogKG1ldGFkYXRhOiBUTWV0YWRhdGEpID0+IGFueSxcbiAgKSB7XG4gICAgaWYgKGVsZW0ucmVxdWVzdEZ1bGxzY3JlZW4pIHtcbiAgICAgIGVsZW0ub25mdWxsc2NyZWVuY2hhbmdlID0gKGUpID0+IHtcbiAgICAgICAgaWYgKG9uTGVhdmUpXG4gICAgICAgICAgZWxlbS5vbmZ1bGxzY3JlZW5jaGFuZ2UgPSAoZSkgPT4ge1xuICAgICAgICAgICAgLy8gIGRlYnVnZ2VyO1xuICAgICAgICAgICAgb25MZWF2ZShtZXRhZGF0YSk7XG4gICAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBlbGVtLnJlcXVlc3RGdWxsc2NyZWVuKCk7XG4gICAgfSBlbHNlIGlmIChlbGVtWyd3ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbiddKSB7XG4gICAgICAvKiBTYWZhcmkgKi9cbiAgICAgIGVsZW1bJ3dlYmtpdFJlcXVlc3RGdWxsc2NyZWVuJ10oKTtcbiAgICB9IGVsc2UgaWYgKGVsZW1bJ21zUmVxdWVzdEZ1bGxzY3JlZW4nXSkge1xuICAgICAgLyogSUUxMSAqL1xuICAgICAgZWxlbVsnbXNSZXF1ZXN0RnVsbHNjcmVlbiddKCk7XG4gICAgfVxuICB9XG4gIGNsb3NlRnVsbHNjcmVlbigpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKGRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKSB7XG4gICAgICAgIGRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKCk7XG4gICAgICB9IGVsc2UgaWYgKGRvY3VtZW50Wyd3ZWJraXRFeGl0RnVsbHNjcmVlbiddKSB7XG4gICAgICAgIC8qIFNhZmFyaSAqL1xuICAgICAgICBkb2N1bWVudFsnd2Via2l0RXhpdEZ1bGxzY3JlZW4nXSgpO1xuICAgICAgfSBlbHNlIGlmIChkb2N1bWVudFsnbXNFeGl0RnVsbHNjcmVlbiddKSB7XG4gICAgICAgIC8qIElFMTEgKi9cbiAgICAgICAgZG9jdW1lbnRbJ21zRXhpdEZ1bGxzY3JlZW4nXSgpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICB9XG5cbiAgYWRkVG9TdWJzVG9DbG9zZU9uUm91dGUgPSAoLi4uc3ViOiBTdWJzY3JpcHRpb25bXSkgPT4ge1xuICAgIGlmICghQ29uZmlnLnN1YnNUb0Nsb3NlT25Sb3V0ZSkgQ29uZmlnLnN1YnNUb0Nsb3NlT25Sb3V0ZSA9IFtdO1xuICAgIENvbmZpZy5zdWJzVG9DbG9zZU9uUm91dGUucHVzaCguLi5zdWIpO1xuICB9O1xuICBjbGVhclN1YnNUb0Nsb3NlT25Sb3V0ZSA9ICgpID0+IHtcbiAgICBDb25maWcuc3Vic1RvQ2xvc2VPblJvdXRlPy5mb3JFYWNoKCh4KSA9PiB4Py51bnN1YnNjcmliZSgpKTtcbiAgICBDb25maWcuc3Vic1RvQ2xvc2VPblJvdXRlID0gW107XG4gIH07XG4gIC8qKlxuICAgKiBIYW5kbGVzIHRoZSBkZWxldGlvbiBvZiByb3dzIGZyb20gYW4gYXJyYXlcbiAgICogQHBhcmFtIGluZGV4IEluZGV4IG9mIHRoZSByb3cgdG8gZGVsZXRlXG4gICAqIEBwYXJhbSBhcnIgVGhlIGFycmF5IHRoYXQgaG9sZHMgdGhlIHJvd3NcbiAgICogQHBhcmFtIGRlbGV0ZVNlcnZpY2UgVGhlIGRlbGV0aW9uIHNlcnZpY2UgdG8gYmUgY2FsbGVkIChJdCBzaG91bGQgYmUgYW4gYW5vbnltb3VzIGZ1bmN0aW9uKVxuICAgKiBAcGFyYW0gYWRkUm93RnVuYyBUaGUgZnVuY3Rpb24gKGFub255bW91cykgdGhhdCBhZGRzIGEgbmV3IHJvdyB0byB0aGUgYXJyYXlcbiAgICogQHBhcmFtIGNiIFRoZSBmdW5jdGlvbiB0byBjYWxsYmFjayB3aXRoIHRoZSByZXNwb25zZSBvZiB0aGUgZGVsZXRpb24gc2VydmljZSBhcyB0aGUgaW5wdXQgcGFyYW1ldGVyXG4gICAqL1xuICBoYW5kbGVSb3dEZWxldGUgPSBhc3luYyA8VD4oXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBhcnI6IGFueVtdLFxuICAgIGRlbGV0ZVNlcnZpY2U6ICguLi5hcmdzKSA9PiBQcm9taXNlPFQ+IHwgT2JzZXJ2YWJsZTxUPixcbiAgICBhZGRSb3dGdW5jOiAoLi4uYXJncykgPT4gYW55LFxuICAgIGNiPzogKGFueSkgPT4gYW55LFxuICApID0+IHtcbiAgICBjb25zdCBpZCA9IGFycltpbmRleF0/LmlkO1xuICAgIC8vIGRlYnVnZ2VyO1xuXG4gICAgaWYgKGlkICYmIGRlbGV0ZVNlcnZpY2UpIHtcbiAgICAgIGNvbnN0IHJlcSA9IGRlbGV0ZVNlcnZpY2UoaWQpO1xuICAgICAgaWYgKHR5cGVvZiByZXFbJ3RvUHJvbWlzZSddID09ICdmdW5jdGlvbicpXG4gICAgICAgIGNiID8gY2IoYXdhaXQgcmVxWyd0b1Byb21pc2UnXSgpKSA6IHJlcVsndG9Qcm9taXNlJ10oKTtcbiAgICAgIGVsc2UgY2IgPyBjYihhd2FpdCByZXEpIDogbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoYXJyLmxlbmd0aCA9PSAxKSB7XG4gICAgICBhcnIuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIGFkZFJvd0Z1bmMoKTtcbiAgICB9IGVsc2UgaWYgKGFyci5sZW5ndGggPiAxKSBhcnIuc3BsaWNlKGluZGV4LCAxKTtcbiAgfTtcbiAgLyoqXG4gICAqIFRvIGhhbmRsZSB0aGUgcGF0Y2hpbmcgb2YgYSBGb3JtQXJyYXlcbiAgICogQHBhcmFtIGFyciBUaGUgYXJyYXkgdGhhdCBjb250YWlucyB0aGUgZGF0YVxuICAgKiBAcGFyYW0gYWRkRnVuYyBUaGUgZnVuY3Rpb24gdGhhdCBwZXJmb3JtcyBhZGRpdGlvbiBvZiBzaW5nbGUgZW50cmllc1xuICAgKiBAcGFyYW0gZm9ybUFyciBUaGUgRm9ybUFycmF5IHRoYXQgd2lsbCBob2xkIHRoZSBhcnJheSdzIGRhdGFcbiAgICovXG4gIGluaXRQYXRjaEZvcm1BcnJheSA9IDxUPihcbiAgICBhcnI6IFRbXSxcbiAgICBhZGRGdW5jOiAoaTogbnVtYmVyLCBkYXRhPzogVCwgZm9ybUFycj86IEZvcm1BcnJheSkgPT4gdm9pZCxcbiAgICBmb3JtQXJyOiBGb3JtQXJyYXksXG4gICkgPT4ge1xuICAgIC8vIGRlYnVnZ2VyXG4gICAgZm9ybUFycj8uY2xlYXIoKTtcbiAgICBpZiAoYXJyPy5sZW5ndGgpIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBhcnIpIHtcbiAgICAgICAgYWRkRnVuYyhmb3JtQXJyLmxlbmd0aCwgaXRlbSwgZm9ybUFycik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghZm9ybUFyci5sZW5ndGgpIGFkZEZ1bmMoZm9ybUFyci5sZW5ndGgsIG51bGwsIGZvcm1BcnIpO1xuICAgIH1cbiAgfTtcbiAgcHJpdmF0ZSBpc1Byb21pc2UgPSAoZnVuYykgPT4ge1xuICAgIHJldHVybiB0eXBlb2YgZnVuYyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGZ1bmMudGhlbiA9PT0gJ2Z1bmN0aW9uJztcbiAgfTtcbiAgaXNBc3luYyA9IChmdW5jKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGZ1bmMuY29uc3RydWN0b3IubmFtZSA9PT0gJ0FzeW5jRnVuY3Rpb24nIHx8XG4gICAgICAodHlwZW9mIGZ1bmMgPT09ICdmdW5jdGlvbicgJiYgdGhpcy5pc1Byb21pc2UoZnVuYygpKSlcbiAgICApO1xuICB9O1xuXG4gIGlzT2JzZXJ2YWJsZSA9IDxUPihmdW5jKSA9PiB7XG4gICAgLy8gcmV0dXJuIHR5cGVvZiBmdW5jID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZnVuYy5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbic7XG4gICAgLy8gcmV0dXJuIHR5cGVvZiBmdW5jID09PSAnb2JqZWN0JyAmJiBmdW5jIGluc3RhbmNlb2YgT2JzZXJ2YWJsZTtcbiAgICAvLyByZXR1cm4gdHlwZW9mIGZ1bmMgPT09ICdvYmplY3QnICYmIGZ1bmMgaW5zdGFuY2VvZiBPYnNlcnZhYmxlPFQ+O1xuICAgIHJldHVybiB0eXBlb2YgZnVuYyA9PT0gJ29iamVjdCcgJiYgaXNPYnNlcnZhYmxlKGZ1bmMpO1xuICAgIHJldHVybiB0eXBlb2YgZnVuYyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGZ1bmMudG9Qcm9taXNlID09PSAnZnVuY3Rpb24nO1xuICB9O1xuICBwcm9taXNpZnlWYWwgPSA8VD4odmFsOiBUIHwgUHJvbWlzZTxUPiB8IE9ic2VydmFibGU8VD4pID0+IHtcbiAgICBpZiAodGhpcy5pc0FzeW5jKHZhbCkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsIGFzIFByb21pc2U8VD4pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc09ic2VydmFibGUodmFsKSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShsYXN0VmFsdWVGcm9tKHZhbCBhcyBPYnNlcnZhYmxlPFQ+KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsIGFzIFQpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIGFyciBBcnJheSBvZiBvYnNlcnZhYmxlcyB0byBmZXRjaFxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiB0aGUgcmVzcG9uc2VzIG1lcmdlZCB0b2dldGhlci4gSXQgZW1pdHMgdGhlIG1lcmdlZCByZXNwb25zZXMgYXMgdGhleSBhcmUgZmV0Y2hlZCBhbmQgY2xvc2VzIG9uY2UgYWxsbCB0aGUgcmVzcG9uc2VzIGhhdmUgYmVlbiBmZXRjaGVkXG4gICAqL1xuICBtZXJnZUFyck9ic2VydmFibGVzID0gPFQ+KGFycjogeyAkZnVuYzogT2JzZXJ2YWJsZTxUW10+IH1bXSkgPT4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxUW10+KChzdWIpID0+IHtcbiAgICAgIGNvbnN0IHJldDogVFtdID0gW107XG4gICAgICBsZXQgcmVzcG9uc2VDb3VudCA9IDA7XG4gICAgICBtZXJnZShcbiAgICAgICAgLi4uYXJyLm1hcCgoeCkgPT5cbiAgICAgICAgICB4LiRmdW5jPy5waXBlKFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZSkgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0YXAoKHIpID0+IHtcbiAgICAgICAgICAgICAgcmVzcG9uc2VDb3VudCsrO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgICkuc3Vic2NyaWJlKChyKSA9PiB7XG4gICAgICAgIHJldC5wdXNoKC4uLnIpO1xuICAgICAgICBzdWIubmV4dChyZXQpO1xuICAgICAgICBpZiAocmVzcG9uc2VDb3VudCA9PSBhcnIuZmlsdGVyKCh4KSA9PiB4LiRmdW5jKS5sZW5ndGgpIHtcbiAgICAgICAgICAvLyBkZWJ1Z2dlclxuICAgICAgICAgIHN1Yi5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbiAgcmVtb3ZlRHVwbGljYXRlPFQ+KGxpc3Q6IFRbXSwga2V5RmllbGQgPSAnY29kZScpIHtcbiAgICBpZiAoIWxpc3QpIHJldHVybiBudWxsO1xuICAgIGxpc3QgPSBsaXN0LmZpbHRlcigoeCkgPT4geCk7XG4gICAgY29uc3QgcmV0OiBUW10gPSBbXSxcbiAgICAgIGR1cGxpY2F0ZU1hcDogeyBbeDogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbGlzdCkge1xuICAgICAgaWYgKGR1cGxpY2F0ZU1hcFtpdGVtW2tleUZpZWxkXV0pIGNvbnRpbnVlO1xuICAgICAgcmV0LnB1c2goaXRlbSk7XG4gICAgICBkdXBsaWNhdGVNYXBbaXRlbVtrZXlGaWVsZF1dID0gaXRlbTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuICBnZXQgZ2VuUmFuZG9tSUQoKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDAwMDAwMDAwMDApO1xuICB9XG4gIHN0b3JlUGF5bG9hZCA9IHRoaXMubG9nZ2VyU2VydmljZS5hZGRMb2c7XG4gIG9iaklzRW1wdHkgPSAob2JqLCBleGNsdXNpb25GaWVsZHM/OiBzdHJpbmdbXSkgPT4ge1xuICAgIGlmICghb2JqKSByZXR1cm4gdHJ1ZTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChleGNsdXNpb25GaWVsZHM/LmluY2x1ZGVzKGtleSkpIGNvbnRpbnVlO1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgaWYgKG9ialtrZXldKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuICBkYXRhR2VuID0gPFQgPSBhbnk+KGtleXM6IHN0cmluZ1tdLCBsZW5ndGggPSAxMCkgPT4ge1xuICAgIGNvbnN0IHJldDogYW55W10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgdDogYW55ID0ge307XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgIHRba2V5XSA9IHRoaXMudGV4dEdlbigpO1xuICAgICAgfVxuICAgICAgcmV0LnB1c2godCk7XG4gICAgfVxuICAgIHJldHVybiByZXQgYXMgVFtdO1xuICB9O1xuICB0ZXh0R2VuID0gKCkgPT4gJ3JhbmRvbScgKyBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiAxMDAwKTtcbiAgdHJhY2tCeUNvZGUoaW5kZXg6IG51bWJlciwgaXRlbTogYW55KSB7XG4gICAgcmV0dXJuIGl0ZW0/LmNvZGU7XG4gIH1cbiAgdHJhY2tCeUlEKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSkge1xuICAgIHJldHVybiBpdGVtPy5pZDtcbiAgfVxuICBkaWFsb2dPcGVuZXIgPSAoY29tcDogYW55LCBjb25maWc6IE1hdERpYWxvZ0NvbmZpZywgdmFsdWVDQjogKHIpID0+IGFueSwgbm9WYWx1ZUNCPzogYW55KSA9PlxuICAgIHRoaXMuZGlhbG9nT3BlbmVyUmVmKGNvbXAsIGNvbmZpZylcbiAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAuc3Vic2NyaWJlKChyKSA9PiB7XG4gICAgICAgIGlmIChyICE9IG51bGwgJiYgciAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2YWx1ZUNCKHIpO1xuICAgICAgICB9IGVsc2UgaWYgKG5vVmFsdWVDQikge1xuICAgICAgICAgIG5vVmFsdWVDQigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgZGlhbG9nT3BlbmVyUmVmID0gKGNvbXA6IGFueSwgY29uZmlnOiBNYXREaWFsb2dDb25maWcpID0+IHRoaXMuZGlhbG9nLm9wZW4oY29tcCwgY29uZmlnKTtcbiAgZmluZExhYmVsQnlJdGVtID0gKGl0ZW0sIGFycjogYW55W10sIGxhYmVsRmllbGQ/OiBzdHJpbmcsIGtleUZpZWxkOiBzdHJpbmcgPSAnY29kZScpID0+IHtcbiAgICBpZiAoIWl0ZW0pIHJldHVybiBudWxsO1xuICAgIGNvbnN0IG9iaiA9IGFycj8uZmluZCgoeCkgPT4geFtrZXlGaWVsZF0gPT0gaXRlbSk7XG4gICAgaWYgKCFvYmopIHJldHVybiBpdGVtO1xuICAgIGVsc2UgcmV0dXJuIGAke2l0ZW19IC0gJHtvYmpbbGFiZWxGaWVsZCB8fCAndGl0bGUnXSB8fCBvYmpbbGFiZWxGaWVsZCB8fCAnZGVzY3JpcHRpb24nXX1gO1xuICB9O1xuXG4gIGZvcm1GaWVsZHNGcm9tQXJyID0gdGhpcy5pbnB1dFNlcnZpY2UuZm9ybUZpZWxkc0Zyb21GQ0lucHV0c0FycjtcbiAgb2JqVG9Gb3JtQ29udHJvbHMgPSB0aGlzLmlucHV0U2VydmljZS5mb3JtRmllbGRzRnJvbU9iajtcbiAgZm9ybVNjaGVtYVRvRm9ybUNvbnRyb2xzID0gdGhpcy5pbnB1dFNlcnZpY2UuZm9ybVNjaGVtYVRvRm9ybUNvbnRyb2xzO1xuICBhZGRGb3JtU2NoZW1hVG9Gb3JtID0gdGhpcy5pbnB1dFNlcnZpY2UuYWRkRm9ybVNjaGVtYVRvRm9ybTtcblxuICBiaW5kRm9ybUNvbnRyb2xUb0lucHV0cyA9IHRoaXMuaW5wdXRTZXJ2aWNlLmJpbmRGb3JtQ29udHJvbFRvSW5wdXRzO1xuXG4gIGdvID0gKHZhbHVlOiBzdHJpbmcsIGV4dHJhPzogTmF2aWdhdGlvbkV4dHJhcykgPT4ge1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt2YWx1ZV0sIGV4dHJhKTtcbiAgfTtcbiAgLyoqXG4gICAqIFJvdXRlIHRvIGNvbXBvbmVudFxuICAgKiBAcGFyYW0gcm91dGUgUm91dGUgb2YgcGF0aCB0byBjb21wb25lbnRcbiAgICogQHBhcmFtIGV4dHJhXG4gICAqL1xuICBnb1IgPSAocm91dGU6IHN0cmluZywgZXh0cmE/OiBOYXZpZ2F0aW9uRXh0cmFzKSA9PiB7XG4gICAgaWYgKCEoPFNES0Vudmlyb25tZW50PnRoaXMuZW52aXJvbm1lbnQpLmFjdGl2YXRlZFJvdXRlKSBkZWJ1Z2dlcjtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbcm91dGVdLCB7XG4gICAgICByZWxhdGl2ZVRvOiAoPFNES0Vudmlyb25tZW50PnRoaXMuZW52aXJvbm1lbnQpLmFjdGl2YXRlZFJvdXRlLFxuICAgICAgLi4uZXh0cmEsXG4gICAgfSk7XG4gICAgLy8gZGVidWdnZXI7XG4gIH07XG5cbiAgcmVsYXRpdmVSb3V0ZXIoKSB7XG4gICAgY29uc3Qgcm91dGVyID0gaW5qZWN0KFJvdXRlciksXG4gICAgICByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJvdXRlLFxuICAgICAgcm91dGVyLFxuICAgICAgbmF2aWdhdGU6IChsaW5rOiBzdHJpbmcsIGNvbmZpZz86IE5hdmlnYXRpb25FeHRyYXMgfCB1bmRlZmluZWQpID0+XG4gICAgICAgIHJvdXRlci5uYXZpZ2F0ZShbbGlua10sIHsgcmVsYXRpdmVUbzogcm91dGUsIC4uLmNvbmZpZyB9KSxcbiAgICAgIHF1ZXJ5UGFyYW1zOiByb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcyxcbiAgICAgIHBhdGhQYXJhbXM6IHJvdXRlLnNuYXBzaG90LnBhcmFtcyxcbiAgICB9O1xuICB9XG5cbiAgbW9uZXlQYXJzZXIgPSAoYW1vdW50OiBzdHJpbmcgfCBudW1iZXIsIGN1cnJlbmN5ID0gJyAnKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVuY3lQaXBlLnRyYW5zZm9ybShhbW91bnQsIGN1cnJlbmN5IHx8ICcgJyk7XG4gIH07XG4gIGV4dHJhY3RVcGxvYWQoZXZlbnQ6IGFueSkge1xuICAgIHJldHVybiAoZXZlbnQudGFyZ2V0LmZpbGVzIGFzIEZpbGVbXSkgfHwgW107XG4gIH1cblxuICBzZWNvbmRzVG9Ib3VyTWluU2VjID0gKHNlY29uZHM6IG51bWJlcikgPT4ge1xuICAgIGlmICghc2Vjb25kcykgcmV0dXJuIHsgc2VjczogbnVsbCwgaG91cnM6IG51bGwsIG1pbnM6IG51bGwgfTtcbiAgICBjb25zdCBob3VycyA9IE1hdGguZmxvb3Ioc2Vjb25kcyAvIDM2MDApIHx8IDAsXG4gICAgICBzZWNvbmRzRXhIb3VycyA9IHNlY29uZHMgJSAzNjAwIHx8IDAsXG4gICAgICBtaW5zID0gTWF0aC5mbG9vcihzZWNvbmRzRXhIb3VycyAvIDYwKSB8fCAwLFxuICAgICAgc2VjcyA9IHNlY29uZHNFeEhvdXJzICUgNjA7XG4gICAgcmV0dXJuIHsgaG91cnMsIG1pbnMsIHNlY3MgfTtcbiAgfTtcbiAgbWludXRlc1RvRGF5SG91ck1pbiA9IChtaW51dGVzOiBudW1iZXIpID0+IHtcbiAgICBpZiAoIW1pbnV0ZXMpIHJldHVybiB7IGRheXM6IG51bGwsIGhvdXJzOiBudWxsLCBtaW5zOiBudWxsIH07XG4gICAgY29uc3QgZGF5cyA9IE1hdGguZmxvb3IobWludXRlcyAvIDE0NDApIHx8IDAsXG4gICAgICBtaW5pdXRlc0V4RGF5cyA9IG1pbnV0ZXMgJSAxNDQwIHx8IDAsXG4gICAgICBob3VycyA9IE1hdGguZmxvb3IobWluaXV0ZXNFeERheXMgLyA2MCkgfHwgMCxcbiAgICAgIG1pbnMgPSBtaW5pdXRlc0V4RGF5cyAlIDYwIHx8IDA7XG4gICAgcmV0dXJuIHsgZGF5cywgaG91cnMsIG1pbnMgfTtcbiAgfTtcbiAgbWludXRlc1RvRGF5SG91ck1pblN0ciA9IChtaW51dGVzOiBudW1iZXIpID0+IHtcbiAgICBpZiAoIW1pbnV0ZXMpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHJldCA9IHRoaXMubWludXRlc1RvRGF5SG91ck1pbihtaW51dGVzKTtcbiAgICByZXR1cm4gYCR7cmV0LmRheXN9ICR7cmV0LmhvdXJzfToke3JldC5taW5zfWAudHJpbSgpO1xuICB9O1xuICBtaW51dGVzVG9EYXlIb3VyTWluU3RyMiA9IChtaW51dGVzOiBudW1iZXIpID0+IHtcbiAgICBpZiAoIW1pbnV0ZXMpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHJldCA9IHRoaXMubWludXRlc1RvRGF5SG91ck1pbihtaW51dGVzKTtcbiAgICByZXR1cm4gYCR7cmV0LmRheXN9ZGF5cyAke3JldC5ob3Vyc31ocnMgJHtyZXQubWluc31taW5zYC50cmltKCk7XG4gIH07XG4gIGRheUhvdXJNaW5Ub0hvdXJNaW51dGVzID0gKGR5czogbnVtYmVyLCBocnM6IG51bWJlciwgbWluczogbnVtYmVyKSA9PiB7XG4gICAgaWYgKCFkeXMgJiYgIWhycyAmJiAhbWlucykgcmV0dXJuICcnO1xuICAgIGNvbnN0IGR5c1RvSHJzID0gKGR5cyB8fCAwKSAqIDI0O1xuICAgIGhycyA9ICgraHJzIHx8IDApICsgZHlzVG9IcnM7XG4gICAgcmV0dXJuIChocnMgfHwgJzAwJykgKyAnOicgKyAobWlucyB8fCAnMDAnKTtcbiAgfTtcbiAgZGlzYWJsZU9yRW5hYmxlSW5wdXRzID0gKGNvbnRyb2xzOiBBYnN0cmFjdENvbnRyb2xbXSwgZGlzYWJsZTogYm9vbGVhbikgPT4ge1xuICAgIGlmIChkaXNhYmxlKSB0aGlzLmRpc2FibGVJbnB1dHMoY29udHJvbHMpO1xuICAgIGVsc2UgdGhpcy5lbmFibGVJbnB1dHMoY29udHJvbHMpO1xuICB9O1xuICBkaXNhYmxlSW5wdXRzID0gKGNvbnRyb2xzOiBBYnN0cmFjdENvbnRyb2xbXSkgPT4ge1xuICAgIGZvciAoY29uc3QgY29udHJvbCBvZiBjb250cm9scykge1xuICAgICAgY29udHJvbD8uZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuICB9O1xuICBlbmFibGVJbnB1dHMgPSAoY29udHJvbHM6IEFic3RyYWN0Q29udHJvbFtdKSA9PiB7XG4gICAgZm9yIChjb25zdCBjb250cm9sIG9mIGNvbnRyb2xzKSB7XG4gICAgICBjb250cm9sPy5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgfTtcbiAgZGF5SG91ck1pblRvTWludXRlcyA9IChkeXM6IG51bWJlciwgaHJzOiBudW1iZXIsIG1pbnM6IG51bWJlcikgPT4ge1xuICAgIGlmICghZHlzICYmICFocnMgJiYgIW1pbnMpIHJldHVybiAwO1xuICAgIGNvbnN0IGR5c1RvSHJzID0gKGR5cyB8fCAwKSAqIDI0O1xuICAgIGhycyA9ICgraHJzIHx8IDApICsgZHlzVG9IcnM7XG4gICAgcmV0dXJuIChocnMgfHwgMCkgKiA2MCArIG1pbnM7XG4gIH07XG4gIGhvdXJNaW5Ub01pbnV0ZXMgPSAoaHJzOiBudW1iZXIsIG1pbnM6IG51bWJlcikgPT4ge1xuICAgIGlmICghaHJzICYmICFtaW5zKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gKGhycyB8fCAwKSAqIDYwICsgbWlucztcbiAgfTtcbiAgaG91ck1pblRvTWludXRlczIgPSAoaHJzTWluczogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgW2hycywgbWluc10gPSBocnNNaW5zPy5zcGxpdCgnOicpIHx8IFswLCAwXTtcbiAgICByZXR1cm4gdGhpcy5ob3VyTWluVG9NaW51dGVzKCtocnMsICttaW5zKTtcbiAgfTtcbiAgbm90aWZ5KG1lc3NhZ2U6IHN0cmluZywgY2xzOiAwIHwgMSB8IDIgfCAzID0gMSwgZHVyYXRpb24gPSA1MDAwLCB0aXRsZT86IHN0cmluZykge1xuICAgIC8vIGlmIChjbHMgPT0gMCkgcmV0dXJuIHRoaXMuaW5mbyhtZXNzYWdlLCBjbHMpO1xuICAgIGlmICh0eXBlb2YgbWVzc2FnZSAhPSAnc3RyaW5nJykgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICBjb25zdCB0b2FzdCA9IHRoaXMudG9hc3QuYWRkKHtcbiAgICAgIGJvZHk6IHRpdGxlID8gbWVzc2FnZSA6IHVuZGVmaW5lZCxcbiAgICAgIGhlYWRlcjogdGl0bGUgfHwgbWVzc2FnZSxcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgdGFnOiBjbHMsXG4gICAgfSk7XG4gICAgcmV0dXJuIHsgY2xvc2VkOiB0b2FzdC5jbG9zZWQgfTtcbiAgICAvLyBtZXNzYWdlID0gdHlwZW9mIG1lc3NhZ2UgPT0gJ3N0cmluZycgPyBtZXNzYWdlIDogJyc7XG4gICAgLy8gY29uc3QgcmVmID0gdGhpcy5zbmFja0Jhci5vcGVuKG1lc3NhZ2UsIHRpdGxlLCB7XG4gICAgLy8gICBkdXJhdGlvbixcbiAgICAvLyAgIGhvcml6b250YWxQb3NpdGlvbjogJ2NlbnRlcicsXG4gICAgLy8gICB2ZXJ0aWNhbFBvc2l0aW9uOiAnYm90dG9tJyxcbiAgICAvLyAgIHBhbmVsQ2xhc3M6XG4gICAgLy8gICAgIGNscyA9PSAxID8gJ2JnLXN1Y2Nlc3MnIDogY2xzID09IDIgPyAnYnRuLWluZm8nIDogY2xzID09IDMgPyAnYnRuLXdhcm5pbmcnIDogJ2JnLWRhbmdlcicsXG4gICAgLy8gfSk7XG4gICAgLy8gcmV0dXJuIGZpcnN0VmFsdWVGcm9tKHJlZi5hZnRlckRpc21pc3NlZCgpLnBpcGUobWFwKChyKSA9PiByLmRpc21pc3NlZEJ5QWN0aW9uKSkpO1xuICB9XG5cbiAgc2Nyb2xsVG9Ub3AgPSAoKSA9PiB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG5cbiAgLyoqXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGRhdGUgdGltZSBsb2NhbCB0aGF0IGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgZGF0ZXRpbWUtbG9jYWwgaW5wdXRcbiAgICovXG4gIGdldExvY2FsRGF0ZVRpbWVOb3cgPSAoKSA9PiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgLTEpO1xuICAvKiogQHJldHVybnMgVGhlIGN1cnJlbnQgZGF0ZSBsb2NhbCB0aGF0IGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgZGF0ZSBpbnB1dCAqL1xuICBsb2NhbERhdGVOb3cgPSAoKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdO1xuICB9O1xuICBkYXRlRm9ybWF0ID0gKGRhdGU6IGFueSwgZm9ybWF0ID0gMSkgPT4ge1xuICAgIGlmICghZGF0ZSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgZCA9IG5ldyBEYXRlKGRhdGUpO1xuICAgIGlmIChmb3JtYXQgPT0gMSkge1xuICAgICAgcmV0dXJuIGQudG9EYXRlU3RyaW5nKCk7XG4gICAgfSBlbHNlIGlmIChmb3JtYXQgPT0gMikge1xuICAgICAgcmV0dXJuIGQuZ2V0RGF0ZSgpICsgJyAnICsgY29uZmlnLk1vbnRoc1tkLmdldE1vbnRoKCldO1xuICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09IDMpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRlLCBgRUVFIE1NTSBkZCBZWVlZLCBoaDptbSBhYWApO1xuICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09IDQpIHtcbiAgICAgIHJldHVybiBjb25maWcuTW9udGhzW2QuZ2V0TW9udGgoKV0gKyAnICcgKyBkLmdldERhdGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfTtcblxuICB0b0phdmFEYXRlU3RyaW5nID0gKGlzb0RhdGVTdHJpbmc6IHN0cmluZyA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSkgPT4ge1xuICAgIGlmICghaXNvRGF0ZVN0cmluZykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGAke2lzb0RhdGVTdHJpbmcuc2xpY2UoMCwgMTkpfWA7XG4gICAgcmV0dXJuIGAke2lzb0RhdGVTdHJpbmcuc2xpY2UoMCwgMTApfSAke2lzb0RhdGVTdHJpbmcuc2xpY2UoMTEsIDE5KX1gO1xuICB9O1xuXG4gIHRvSmF2YURhdGV0aW1lU3RyaW5nID0gKGlzb0RhdGVTdHJpbmc6IHN0cmluZykgPT4ge1xuICAgIGlmICghaXNvRGF0ZVN0cmluZykgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgZGF0ZSA9IGlzb0RhdGVTdHJpbmcuaW5jbHVkZXMoJ1QnKVxuICAgICAgPyBpc29EYXRlU3RyaW5nXG4gICAgICA6IG5ldyBEYXRlKGlzb0RhdGVTdHJpbmcpLnRvSVNPU3RyaW5nKCk7XG4gICAgcmV0dXJuIGAke2RhdGUuc2xpY2UoMCwgMTApfSAke2RhdGUuc2xpY2UoMTEsIDE5KX1gO1xuICB9O1xuXG4gIHRpbWVGb3JtYXQgPSAodGltZT86IGFueSkgPT4ge1xuICAgIGNvbnN0IHRpbWVBcnI6IGFueVtdID0gdGltZS5zcGxpdCgnICcpO1xuICAgIHRpbWVBcnJbMF0gPSB0aW1lQXJyWzBdLnNwbGl0KCc6Jykuc3BsaWNlKDAsIDIpLmpvaW4oJzonKTtcbiAgICByZXR1cm4gdGltZUFyci5qb2luKCcgJyk7XG4gIH07XG4gIGZ1bGxEYXRlVGltZSA9ICh0aW1lc3RhbXA6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuICAgIC8vIGRlYnVnZ2VyXG4gICAgcmV0dXJuIHRoaXMuZGF0ZUZvcm1hdCh0aW1lc3RhbXAsIDMpO1xuICB9O1xuICBkYXlzRm9ybWF0dGVyID0gKGRheXM6IG51bWJlcikgPT4ge1xuICAgIGlmICghZGF5cykge1xuICAgICAgcmV0dXJuICctJztcbiAgICB9XG4gICAgbGV0IHlyOiBudW1iZXIsXG4gICAgICBtdDogbnVtYmVyLFxuICAgICAgZHk6IG51bWJlcixcbiAgICAgIHJldDogc3RyaW5nLFxuICAgICAgX3lyID0gMzY1LFxuICAgICAgX210ID0gMzA7XG4gICAgaWYgKGRheXMgPiBfeXIpIHtcbiAgICAgIHlyID0gTWF0aC5mbG9vcihkYXlzIC8gX3lyKTtcbiAgICB9XG4gICAgaWYgKGRheXMgPiBfbXQpIHtcbiAgICAgIG10ID0gTWF0aC5mbG9vcigoZGF5cyAlIF95cikgLyBfbXQpO1xuICAgIH1cbiAgICBkeSA9IChkYXlzICUgX3lyKSAlIF9tdDtcbiAgICByZXQgPSBgJHt5ciA/IHRoaXMucGx1YXJsaXplcih5ciwgJ3lyJykgOiAnJ30gJHtcbiAgICAgIG10ID8gdGhpcy5wbHVhcmxpemVyKG10LCAnbXRoJykgOiAnJ1xuICAgIH0gJHt0aGlzLnBsdWFybGl6ZXIoZHksICdkeScpfWA7XG4gICAgcmV0dXJuIHJldDtcbiAgfTtcbiAgbW9udGhzRm9ybWF0dGVyID0gKG1vbnRoczogbnVtYmVyKSA9PiB7XG4gICAgaWYgKCFtb250aHMpIHtcbiAgICAgIHJldHVybiAnLSc7XG4gICAgfVxuICAgIGxldCB5cjogbnVtYmVyLFxuICAgICAgbXQ6IG51bWJlcixcbiAgICAgIHJldDogc3RyaW5nLFxuICAgICAgX3lyID0gMTI7XG4gICAgaWYgKG1vbnRocyA+IF95cikge1xuICAgICAgeXIgPSBNYXRoLmZsb29yKG1vbnRocyAvIF95cik7XG4gICAgfVxuICAgIG10ID0gbW9udGhzICUgX3lyO1xuICAgIHJldCA9IGAke3lyID8gdGhpcy5wbHVhcmxpemVyKHlyLCAneXInKSA6ICcnfSAke210ID8gdGhpcy5wbHVhcmxpemVyKG10LCAnbXRoJykgOiAnJ31gO1xuICAgIHJldHVybiByZXQ7XG4gIH07XG4gIHBsdWFybGl6ZXIgPSAodmFsOiBudW1iZXIsIHR4dDogc3RyaW5nLCBwbHVyYWw/OiBzdHJpbmcpID0+IHtcbiAgICBwbHVyYWwgPSBwbHVyYWwgfHwgdHh0ICsgJ3MnO1xuICAgIHJldHVybiB2YWwgKyAodmFsID09IDEgPyB0eHQgOiBwbHVyYWwpO1xuICB9O1xuICBkZWNpbWFsVG9QZXJjZW50YWdlID0gKGRlYzogbnVtYmVyKSA9PiB7XG4gICAgcmV0dXJuIGRlYyAqIDEwMCArICclJztcbiAgfTtcbiAgbG9nRm9ybSA9IChmb3JtKSA9PiB7XG4gICAgY29uc29sZS5sb2coJ0ZPUk0nLCBmb3JtLCAnVkFMVUVTJywgZm9ybS52YWx1ZSBhcyBhbnkpO1xuICB9O1xuXG4gIHRvQ1NWKGRhdGE6IGFueVtdLCBoZWFkZXJOYW1lczogc3RyaW5nW10sIGZpbGVuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCByZXBsYWNlciA9IChrZXksIHZhbHVlKSA9PiAodmFsdWUgPT09IG51bGwgPyAnJyA6IHZhbHVlKTsgLy8gc3BlY2lmeSBob3cgeW91IHdhbnQgdG8gaGFuZGxlIG51bGwgdmFsdWVzIGhlcmVcblxuICAgIGxldCBjc3YgPSBkYXRhLm1hcCgocm93KSA9PlxuICAgICAgaGVhZGVyTmFtZXMubWFwKChmaWVsZE5hbWUpID0+IEpTT04uc3RyaW5naWZ5KHJvd1tmaWVsZE5hbWVdLCByZXBsYWNlcikpLmpvaW4oJywnKSxcbiAgICApO1xuICAgIGNzdi51bnNoaWZ0KGhlYWRlck5hbWVzLmpvaW4oJywnKSk7XG4gICAgbGV0IGNzdkFycmF5ID0gY3N2LmpvaW4oJ1xcclxcbicpO1xuXG4gICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbY3N2QXJyYXldLCB7IHR5cGU6ICd0ZXh0L2NzdicgfSk7XG4gICAgc2F2ZUFzKGJsb2IsIGZpbGVuYW1lICsgJy5jc3YnKTtcbiAgfVxuXG4gIGlzUGljdHVyZUZvcm1hdChmaWxlTmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCFmaWxlTmFtZSkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IFBJQ1RVUkVfRk9STUFUUyA9IFsnLmpwZycsICcuanBlZycsICcucG5nJywgJy5naWYnXTtcbiAgICByZXR1cm4gUElDVFVSRV9GT1JNQVRTLnNvbWUoKGZvcm1hdCkgPT4gZmlsZU5hbWUuZW5kc1dpdGgoZm9ybWF0KSk7XG4gIH1cbiAgb2JqZWN0VG9BcnJheTxUPihvYmo6IGFueSkge1xuICAgIGNvbnN0IHJldCA9IFtdO1xuICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgcmV0LnB1c2gob2JqW2tleV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV0IGFzIFRbXTtcbiAgfVxuICBmb3JtYXRGaWVsZChmaWVsZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50b1RpdGxlQ2FzZShmaWVsZD8udG9TZW50ZW5jZUNhc2UoKSk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZXMgYSB3ZWIgd29ya2VyIHRvIHBlcmZvcm0gYSB0YXNrXG4gICAqIEBleGFtcGxlIG5ldyBXb3JrZXIobmV3IFVSTCgnLi91cGxvYWQtY3N2LndvcmtlcicsIGltcG9ydC5tZXRhLnVybCkpXG4gICAqIEBwYXJhbSB3b3JrZXIgV2ViIHdvcmtlciBvYmplY3RcbiAgICogQHBhcmFtIGlucHV0RGF0YSBEYXRhIGJlaW5nIHBhc3NlZCBpbnRvIHdlYiB3b3JrZXJcbiAgICogQHJldHVybnMgRGF0YSBnb3R0ZW4gZnJvbSB3ZWIgd29ya2VyXG4gICAqL1xuICB1c2VXZWJXb3JrZXI8VCA9IGFueT4oXG4gICAgd29ya2VyOiBXb3JrZXIsXG4gICAgaW5wdXREYXRhOiBhbnksXG4gICAgY29uZGl0aW9ucz86IHsgc3RvcDogKHJlcykgPT4gYm9vbGVhbjsgZXJyb3I6IChyZXMpID0+IGJvb2xlYW4gfSxcbiAgKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPFQ+KChzdWIpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgV29ya2VyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHdvcmtlci5wb3N0TWVzc2FnZShpbnB1dERhdGEpO1xuICAgICAgICAgIHdvcmtlci5vbm1lc3NhZ2UgPSAocikgPT4ge1xuICAgICAgICAgICAgLy8gZGVidWdnZXJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHIuZGF0YTtcbiAgICAgICAgICAgIGlmIChjb25kaXRpb25zKSB7XG4gICAgICAgICAgICAgIGlmIChjb25kaXRpb25zLmVycm9yKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgc3ViLmVycm9yKGRhdGEpO1xuICAgICAgICAgICAgICAgIHN1Yi5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb25kaXRpb25zLnN0b3AoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBzdWIubmV4dChkYXRhKTtcbiAgICAgICAgICAgICAgICBzdWIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3ViLm5leHQoZGF0YSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN1Yi5uZXh0KGRhdGEgYXMgYW55KTtcbiAgICAgICAgICAgICAgc3ViLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93ICdub1dvcmtlcic7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgIHN1Yi5lcnJvcihlKTtcbiAgICAgICAgc3ViLmNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgdHJpbSA9XG4gICAgKGxlbmd0aCA9IDE1KSA9PlxuICAgICh0ZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQpID0+XG4gICAgICB0ZXh0ICYmIHRleHQubGVuZ3RoID4gbGVuZ3RoID8gdGV4dC5zbGljZSgwLCBsZW5ndGgpICsgJy4uLicgOiB0ZXh0ITtcbiAgYXN5bmMgYXJyYXlUb0NTVihcbiAgICBkYXRhOiBhbnlbXSxcbiAgICBmaWxlbmFtZTogc3RyaW5nLFxuICAgIGhlYWRlck1hcD86IFRhYmxlQ29sW10sXG4gICAgZXh0cmFDb25maWc/OiB7IHByZWZpeD86IHN0cmluZzsgaGlkZUhlYWRlcj86IGJvb2xlYW47IGhpZGVOb3RpZmljYXRpb24/OiBib29sZWFuIH0sXG4gICkge1xuICAgIC8vIGRlYnVnZ2VyO1xuICAgIGxldCBfZGF0YTogYW55W107XG4gICAgY29uc3QgaGVhZGVyTWFwV2l0aEZvcm1hdHRlcnM6IFRhYmxlQ29sW10gPVxuICAgICAgaGVhZGVyTWFwPy5maWx0ZXIoKHgpID0+IHguZm9ybWF0dGVyIHx8IHguZm9ybWF0dGVyUm93KSB8fCB1bmRlZmluZWQ7XG4gICAgaWYgKGhlYWRlck1hcFdpdGhGb3JtYXR0ZXJzPy5sZW5ndGgpIHtcbiAgICAgIF9kYXRhID0gY2xvbmVEZWVwKGRhdGEpO1xuICAgICAgZm9yIChjb25zdCBmb3JtYXR0ZXIgb2YgaGVhZGVyTWFwV2l0aEZvcm1hdHRlcnMpIHtcbiAgICAgICAgZm9yIChjb25zdCByb3cgb2YgX2RhdGEpIHtcbiAgICAgICAgICByb3dbZm9ybWF0dGVyLmZdID0gZm9ybWF0dGVyLmZvcm1hdHRlclxuICAgICAgICAgICAgPyBhd2FpdCBmb3JtYXR0ZXIuZm9ybWF0dGVyKHJvd1tmb3JtYXR0ZXIuZl0pXG4gICAgICAgICAgICA6IGZvcm1hdHRlci5mb3JtYXR0ZXJSb3cocm93KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBfZGF0YSA9IGRhdGE7XG4gICAgfVxuICAgIGNvbnN0IHNob3dIZWFkZXIgPSAhZXh0cmFDb25maWc/LmhpZGVIZWFkZXI7XG4gICAgbGV0IGNzdiA9IFBhcGEudW5wYXJzZShfZGF0YSwge1xuICAgICAgaGVhZGVyOiBzaG93SGVhZGVyICYmICFoZWFkZXJNYXA/Lmxlbmd0aCxcbiAgICAgIGNvbHVtbnM6IGhlYWRlck1hcD8ubWFwKCh4KSA9PiB4LmY/LnRvU3RyaW5nKCkpIHx8IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgICB0aGlzLmRvd25sb2FkZXIoXG4gICAgICAoZXh0cmFDb25maWc/LnByZWZpeCA/IGV4dHJhQ29uZmlnPy5wcmVmaXggKyAnXFxyXFxuJyA6ICcnKSArXG4gICAgICAgIChoZWFkZXJNYXA/Lmxlbmd0aCA/IGhlYWRlck1hcC5tYXAoKGZpZWxkTmFtZSkgPT4gZmllbGROYW1lLnQpLmpvaW4oJywnKSArIGBcXHJcXG5gIDogJycpICtcbiAgICAgICAgY3N2LFxuICAgICAgZmlsZW5hbWU/LmVuZHNXaXRoKCcuY3N2JykgPyBmaWxlbmFtZSA6IGZpbGVuYW1lICsgJy5jc3YnLFxuICAgICk7XG5cbiAgICBpZiAoZXh0cmFDb25maWc/LmhpZGVOb3RpZmljYXRpb24gPT0gdHJ1ZSkgcmV0dXJuO1xuICAgIHRoaXMuaW5mbyhgRG93bmxvYWRlZCAke2ZpbGVuYW1lfWApO1xuICB9XG4gIHR5cGVDYXN0ZXIgPSA8VD4odmFsdWU6IFQpID0+IHZhbHVlO1xuXG4gIGpvaW5DU1ZSb3dzKC4uLkNTVnM6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIENTVnMuam9pbignXFxyXFxuJyk7XG4gIH1cbiAgYXN5bmMgYXJyYXlUb0NTVlN0cmluZzxUID0gYW55PihcbiAgICBkYXRhOiBUW10sXG4gICAgaGVhZGVyTWFwPzogVGFibGVDb2w8VD5bXSxcbiAgICBleHRyYUNvbmZpZz86IHsgcHJlZml4Pzogc3RyaW5nOyBoaWRlSGVhZGVyPzogYm9vbGVhbiB9LFxuICApIHtcbiAgICAvLyBkZWJ1Z2dlcjtcbiAgICBsZXQgX2RhdGE6IGFueVtdO1xuICAgIGNvbnN0IGhlYWRlck1hcFdpdGhGb3JtYXR0ZXJzOiBUYWJsZUNvbFtdID1cbiAgICAgIGhlYWRlck1hcD8uZmlsdGVyKCh4KSA9PiB4LmZvcm1hdHRlciB8fCB4LmZvcm1hdHRlclJvdykgfHwgdW5kZWZpbmVkO1xuICAgIGlmIChoZWFkZXJNYXBXaXRoRm9ybWF0dGVycz8ubGVuZ3RoKSB7XG4gICAgICBfZGF0YSA9IGNsb25lRGVlcChkYXRhKTtcbiAgICAgIGZvciAoY29uc3QgZm9ybWF0dGVyIG9mIGhlYWRlck1hcFdpdGhGb3JtYXR0ZXJzKSB7XG4gICAgICAgIGZvciAoY29uc3Qgcm93IG9mIF9kYXRhKSB7XG4gICAgICAgICAgcm93W2Zvcm1hdHRlci5mXSA9IGZvcm1hdHRlci5mb3JtYXR0ZXJcbiAgICAgICAgICAgID8gYXdhaXQgZm9ybWF0dGVyLmZvcm1hdHRlcihyb3dbZm9ybWF0dGVyLmZdKVxuICAgICAgICAgICAgOiBmb3JtYXR0ZXIuZm9ybWF0dGVyUm93KHJvdyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgX2RhdGEgPSBkYXRhO1xuICAgIGNvbnN0IHNob3dIZWFkZXIgPSAhZXh0cmFDb25maWc/LmhpZGVIZWFkZXI7XG4gICAgbGV0IGNzdiA9IFBhcGEudW5wYXJzZShfZGF0YSwge1xuICAgICAgaGVhZGVyOiBzaG93SGVhZGVyICYmICFoZWFkZXJNYXA/Lmxlbmd0aCxcbiAgICAgIGNvbHVtbnM6IGhlYWRlck1hcD8ubWFwKCh4KSA9PiB4LmY/LnRvU3RyaW5nKCkpIHx8IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgICByZXR1cm4gKFxuICAgICAgKGV4dHJhQ29uZmlnPy5wcmVmaXggPyBleHRyYUNvbmZpZz8ucHJlZml4ICsgJ1xcclxcbicgOiAnJykgK1xuICAgICAgKGhlYWRlck1hcD8ubGVuZ3RoID8gaGVhZGVyTWFwLm1hcCgoZmllbGROYW1lKSA9PiBmaWVsZE5hbWUudCkuam9pbignLCcpICsgYFxcclxcbmAgOiAnJykgK1xuICAgICAgY3N2XG4gICAgKTtcbiAgfVxuXG4gIGlzRGF0ZVZhbHVlID0gKHYpID0+XG4gICAgdiA/IHR5cGVvZiB2ID09ICdzdHJpbmcnICYmIHZbNF0gPT0gJy0nICYmIHZbN10gPT0gJy0nICYmIHYubGVuZ3RoID09IDEwIDogZmFsc2U7XG4gIGlzRGF0VGltZVZhbHVlID0gKHYpID0+XG4gICAgdiA/IHR5cGVvZiB2ID09ICdzdHJpbmcnICYmIHZbMTBdID09ICdUJyAmJiB2WzRdID09ICctJyAmJiB2WzddID09ICctJyA6IGZhbHNlO1xuXG4gIHllc05vQ2VsbEZvcm1hdHRlckNvbG91cmVkID0gKHYpID0+XG4gICAgYDxzcGFuIGNsYXNzPScke3YgPyAnc3VjY2Vzc0NlbGwnIDogJ2luZXJ0Q2VsbCd9Jz4ke1xuICAgICAgdiA/ICdZZXMnIDogdiA9PSBmYWxzZSA/ICdObycgOiAnLSdcbiAgICB9PC9zcGFuPmA7XG4gIHllc05vQ2VsbEZvcm1hdHRlciA9ICh2KSA9PiBgJHt2ID8gJ1llcycgOiAnTm8nfWA7XG4gIHN0YXR1c0NlbGxGb3JtYXR0ZXIgPSAoc3RhdHVzOiBTdGF0dXMpID0+XG4gICAgYDxzcGFuIGNsYXNzPScke1xuICAgICAgc3RhdHVzID09ICdDT01QTEVURUQnID8gJ3N1Y2Nlc3NDZWxsJyA6IHN0YXR1cyA9PSAnUEVORElORycgPyAncGVuZGluZ0NlbGwnIDogJ2luZXJ0Q2VsbCdcbiAgICB9Jz4ke3N0YXR1cyB8fCAnLSd9PC9zcGFuPmA7XG5cbiAgY2VsbFN0YXR1c0Zvcm1hdHRlciA9XG4gICAgPFQgPSBhbnk+KGd1aWRlOiB7IHN1Y2Nlc3NWYWw/OiBUOyBwZW5kaW5nVmFsPzogVDsgZXJyb3JWYWw/OiBUOyBpbmVydFZhbD86IFQgfSkgPT5cbiAgICAodikgPT5cbiAgICAgIGA8c3BhbiBjbGFzcz0nJHtcbiAgICAgICAgdiA9PSBndWlkZS5zdWNjZXNzVmFsXG4gICAgICAgICAgPyAnc3VjY2Vzc0NlbGwnXG4gICAgICAgICAgOiB2ID09IGd1aWRlLnBlbmRpbmdWYWxcbiAgICAgICAgICAgID8gJ3BlbmRpbmdDZWxsJ1xuICAgICAgICAgICAgOiB2ID09IGd1aWRlLmVycm9yVmFsXG4gICAgICAgICAgICAgID8gJ2Vycm9yQ2VsbCdcbiAgICAgICAgICAgICAgOiAnaW5lcnRDZWxsJ1xuICAgICAgfSc+JHt2fTwvc3Bhbj5gO1xuXG4gIGdlbmVyYXRlVVVJRCA9IEVWRnVuY3Rpb25zLmdlbmVyYXRlVVVJRDtcblxuICBpbmZvOiAoXG4gICAgdGV4dDogc3RyaW5nLFxuICAgIHN0YXR1cz86IDAgfCAyIHwgMSxcbiAgICBoZWFkaW5nPzogc3RyaW5nLFxuICAgIGJ0bnM/OiBJSW5mb0RpYWxvZ0J0bltdLFxuICAgIGRpc2FibGVDbG9zZT86IGJvb2xlYW4sXG4gICkgPT4gUHJvbWlzZTxib29sZWFuPjtcbiAgZGVib3VuY2VyID0gdGhpcy5kZWJvdW5jZXJTZXJ2aWNlLmRlYm91bmNlcjtcblxuICBhc3luY1ZhbGlkYXRpb24gPSB0aGlzLmRlYm91bmNlclNlcnZpY2UuYXN5bmNWYWxpZGF0aW9uO1xuXG4gIHN0YXJ0UGwgPSB0aGlzLnBTLnN0YXJ0UGw7XG4gIHN0b3BQbCA9IHRoaXMucFMuc3RvcFBsO1xuXG4gIGNyZWF0ZVN1YnNjcmlwdGlvbk1hbmFnZXIgPSAoLi4uc3ViczogU3Vic2NyaXB0aW9uW10pID0+IHtcbiAgICBsZXQgX3N1YnM6IFN1YnNjcmlwdGlvbltdID0gc3VicyB8fCBbXTtcblxuICAgIGNvbnN0IGNsZWFyID0gKCkgPT4ge1xuICAgICAgLy8gZGVidWdnZXI7XG4gICAgICBfc3Vicy5mb3JFYWNoKCh4KSA9PiB4LnVuc3Vic2NyaWJlKCkpO1xuICAgICAgX3N1YnMgPSBbXTtcbiAgICB9O1xuXG4gICAgY29uc3QgcHVzaCA9ICguLi5zdWJzOiBTdWJzY3JpcHRpb25bXSkgPT4gX3N1YnMucHVzaCguLi5zdWJzKTtcblxuICAgIHJldHVybiB7IGNsZWFyLCBwdXNoLCBzdWJzOiAoKSA9PiBfc3VicyB9O1xuICB9O1xuXG4gIGNyZWF0ZUNhY2hlTWFuYWdlciA9IDxURGF0YSA9IGFueSwgVEtleSA9IGFueT4oY29uZmlnOiB7XG4gICAga2V5ZXI/OiAoaXRlbTogVEtleSkgPT4gc3RyaW5nO1xuICAgIG1heFNpemU/OiBudW1iZXI7XG4gIH0pID0+IHtcbiAgICBsZXQgX2NhY2hlOiB7IFtrZXk6IHN0cmluZ106IHsgaXRlbTogVERhdGEgfSB9ID0ge30sXG4gICAgICBrZXlGdW5jdGlvbiA9IGNvbmZpZz8ua2V5ZXIsXG4gICAgICBtYXhTaXplID0gY29uZmlnPy5tYXhTaXplIHx8IDEwMDA7XG4gICAgY29uc3Qga2V5U3RhY2s6IHN0cmluZ1tdID0gW107XG5cbiAgICBjb25zdCBjbGVhciA9ICgpID0+IHtcbiAgICAgIF9jYWNoZSA9IHt9O1xuICAgIH07XG4gICAgY29uc3QgZGVzdHJveSA9ICgpID0+IHtcbiAgICAgIF9jYWNoZSA9IHVuZGVmaW5lZDtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2F2ZSA9IChrZXk6IHN0cmluZyB8IG51bWJlciB8IFRLZXksIGRhdGE6IFREYXRhKSA9PiB7XG4gICAgICBpZiAoIV9jYWNoZSkgX2NhY2hlID0ge307XG4gICAgICBjb25zdCBrZXlTdHJpbmcgPSBrZXlGdW5jdGlvbiA/IGtleUZ1bmN0aW9uKGtleSBhcyBUS2V5KSA6IChrZXkgYXMgc3RyaW5nKTtcbiAgICAgIF9jYWNoZVtrZXlTdHJpbmddID0ge1xuICAgICAgICBpdGVtOiBkYXRhLFxuICAgICAgfTtcbiAgICAgIGtleVN0YWNrLnB1c2goa2V5U3RyaW5nKTtcblxuICAgICAgaWYgKGtleVN0YWNrLmxlbmd0aCA+IG1heFNpemUpIGRlbGV0ZSBfY2FjaGVba2V5U3RhY2suc2hpZnQoKV07XG4gICAgfTtcblxuICAgIGNvbnN0IGdldCA9IChrZXk6IFRLZXkpID0+IHtcbiAgICAgIGlmICghX2NhY2hlKSBfY2FjaGUgPSB7fTtcbiAgICAgIGNvbnN0IGtleVN0cmluZyA9IGtleUZ1bmN0aW9uID8ga2V5RnVuY3Rpb24oa2V5IGFzIFRLZXkpIDogKGtleSBhcyBzdHJpbmcpO1xuICAgICAgcmV0dXJuIF9jYWNoZVtrZXlTdHJpbmddPy5pdGVtO1xuICAgIH07XG5cbiAgICByZXR1cm4geyBjbGVhciwgZGVzdHJveSwgZ2V0LCBzYXZlLCBjYWNoZTogKCkgPT4gX2NhY2hlIH07XG4gIH07XG5cbiAgdHJhY2tCeUN1c3RvbUlEID0gKGluZGV4LCBpdGVtKSA9PiB7XG4gICAgaWYgKCFpdGVtW3RoaXMuY3VzdG9tSURGaWVsZF0pIHtcbiAgICAgIGl0ZW1bdGhpcy5jdXN0b21JREZpZWxkXSA9IHRoaXMuZ2VuZXJhdGVVVUlEKCk7XG4gICAgICBjb25zb2xlLmxvZygnc2V0IGN1c3RvbSBpZCcpO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbVt0aGlzLmN1c3RvbUlERmllbGRdO1xuICB9O1xuICB0cmFja0J5Rm9yRm9ybXMgPSAoaW5kZXgsIGl0ZW06IEZvcm1Hcm91cCkgPT4ge1xuICAgIGlmICghaXRlbS5jb250cm9sc1t0aGlzLmN1c3RvbUlERmllbGRdKVxuICAgICAgaXRlbS5hZGRDb250cm9sKHRoaXMuY3VzdG9tSURGaWVsZCwgbmV3IEZvcm1Db250cm9sKHRoaXMuZ2VuZXJhdGVVVUlEKCkpKTtcbiAgICByZXR1cm4gaXRlbS5jb250cm9sc1t0aGlzLmN1c3RvbUlERmllbGRdLnZhbHVlO1xuICB9O1xuICBvYmplY3RUb0Zvcm1Hcm91cCA9IDxUPihkYXRhOiBUKSA9PiB7XG4gICAgY29uc3QgZm9ybSA9IG5ldyBGb3JtR3JvdXA8SVN0cmljdEZvcm1Hcm91cDxUPj4oe30gYXMgYW55KTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhKVxuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpKVxuICAgICAgICBmb3JtLmFkZENvbnRyb2woa2V5LCBuZXcgRm9ybUNvbnRyb2woZGF0YVtrZXldKSk7XG4gICAgcmV0dXJuIGZvcm07XG4gIH07XG5cbiAgZm9ybVNjaGVtYVRvRm9ybUdyb3VwID0gPFQgZXh0ZW5kcyB7IFt4OiBzdHJpbmddOiBhbnkgfT4oc2NoZW1hOiBJRm9ybVNjaGVtYVtdLCBkYXRhPzogVCkgPT4ge1xuICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybUdyb3VwPElTdHJpY3RGb3JtR3JvdXA8VD4+KHt9IGFzIGFueSk7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHNjaGVtYSlcbiAgICAgIGZvcm0uYWRkQ29udHJvbChpdGVtLmZpZWxkLnRvU3RyaW5nKCksIG5ldyBGb3JtQ29udHJvbChkYXRhW2l0ZW0uZmllbGQudG9TdHJpbmcoKV0pKTtcbiAgICByZXR1cm4gZm9ybTtcbiAgfTtcblxuICB0aW1lQ29kZUJsb2NrID0gPFQ+KGxhYmVsOiBzdHJpbmcsIGNiOiAoKSA9PiBUKSA9PiB7XG4gICAgY29uc3Qgc3RhcnRUSW1lID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCByZXMgPSBjYigpO1xuICAgIGNvbnN0IGVuZFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIGNvbnNvbGUubG9nKGxhYmVsLCBzdGFydFRJbWUsIGVuZFRpbWUsIChlbmRUaW1lIC0gc3RhcnRUSW1lKSAvIDEwMDAgKyAnc2VjJyk7XG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICAvKipcbiAgICogRGVsZXRlIG51bGwgb3IgdW5kZWZpbmVkIGZpZWxkcyBmcm9tIGFuIG9iamVjdFxuICAgKiBAcGFyYW0gb2JqIE9iamVjdCB0byBkZWxldGUgZnJvbVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZGVsZXRlTnVsbCA9IDxUPihvYmo6IFQpID0+IHtcbiAgICBjb25zdCByZXQ6IFQgPSB7fSBhcyBhbnk7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKVxuICAgICAgaWYgKG9ialtrZXldID09PSBudWxsIHx8IG9ialtrZXldID09PSB1bmRlZmluZWQgfHwgb2JqW2tleV0gPT09ICcnKSBjb250aW51ZTtcbiAgICAgIGVsc2UgcmV0W2tleV0gPSBvYmpba2V5XTtcblxuICAgIHJldHVybiByZXQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRpbWVzdGFtcCBpbnRvIGhyLG1pbixzZWNcbiAgICogQHBhcmFtIHRpbWVUYWtlbiBUaW1lIHRha2VuIGluIHRpbWVzdGFtcFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZm9ybWF0VGltZVRha2VuID0gKHRpbWVUYWtlbjogbnVtYmVyKSA9PiB7XG4gICAgaWYgKHRpbWVUYWtlbiA9PSBudWxsKSByZXR1cm4gJyc7XG4gICAgY29uc3QgdGltZUxlZnQgPSB0aGlzLnNlY29uZHNUb0hvdXJNaW5TZWMoTWF0aC5yb3VuZCh0aW1lVGFrZW4gLyAxMDAwKSB8fCAxKTtcbiAgICByZXR1cm4gKFxuICAgICAgKHRpbWVMZWZ0LmhvdXJzID8gdGltZUxlZnQuaG91cnMgKyAnaHInIDogJycpICtcbiAgICAgICh0aW1lTGVmdC5taW5zID8gdGltZUxlZnQubWlucyArICdtaW4nIDogJycpICtcbiAgICAgICh0aW1lTGVmdC5zZWNzID8gdGltZUxlZnQuc2VjcyArICdzZWMnIDogJycpXG4gICAgKTtcbiAgfTtcbn1cbiJdfQ==
@@ -2029,7 +2029,8 @@ class UtilityService {
2029
2029
  this.datePipe = inject(DatePipe);
2030
2030
  this.debouncerService = inject(DebouncerService);
2031
2031
  this.numberPipe = inject(DecimalPipe);
2032
- this.notificationService = inject(ToastNotificationsService);
2032
+ this.toastNotificationService = inject(ToastNotificationsService);
2033
+ this.translationService = inject(TranslationService);
2033
2034
  this.downloader = jfd;
2034
2035
  this.eValidationType = EValidationType;
2035
2036
  this.config = Config;
@@ -2055,9 +2056,9 @@ class UtilityService {
2055
2056
  this.formControl = (value, validatorOrOpts, asyncValidator) => [value, validatorOrOpts, asyncValidator];
2056
2057
  this.back = () => this.location.back();
2057
2058
  this.toast = {
2058
- add: this.notificationService.addToastNotification,
2059
- close: this.notificationService.closeToastNotification,
2060
- update: this.notificationService.updateToastNotification,
2059
+ add: this.toastNotificationService.addToastNotification,
2060
+ close: this.toastNotificationService.closeToastNotification,
2061
+ update: this.toastNotificationService.updateToastNotification,
2061
2062
  };
2062
2063
  this.xOrY = (x, y = '-') => `${x == null ? y : x}`;
2063
2064
  /**
@@ -2555,6 +2556,9 @@ class UtilityService {
2555
2556
  (timeLeft.mins ? timeLeft.mins + 'min' : '') +
2556
2557
  (timeLeft.secs ? timeLeft.secs + 'sec' : ''));
2557
2558
  };
2559
+ this.toastNotificationService.labelPipe = (val) => {
2560
+ return this.translationService.pipeTransformer(val, { noLoader: true });
2561
+ };
2558
2562
  }
2559
2563
  onlyOneInput(inputs) {
2560
2564
  const nInputs = inputs?.map((inp) => ({ id: this.genRandomID, inp })) || [];