@vgip/meta-ui 1.7.7 → 1.7.9

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.
Files changed (52) hide show
  1. package/esm2022/lib/common/fieldNormalizer/index.mjs +19 -19
  2. package/esm2022/lib/common/fieldNormalizer/number.mjs +6 -1
  3. package/esm2022/lib/common/fieldNormalizer/text.mjs +4 -1
  4. package/esm2022/lib/common/metaNormalizer.mjs +3 -2
  5. package/esm2022/lib/common/utils/templateBuilder.mjs +14 -3
  6. package/esm2022/lib/fieldAbstract.mjs +2 -2
  7. package/esm2022/lib/fieldInput/index.mjs +16 -9
  8. package/esm2022/lib/fieldSelect/index.mjs +14 -8
  9. package/esm2022/lib/services/metaContext/index.mjs +10 -1
  10. package/fesm2022/{vgip-meta-ui-fieldAbstract-9955be39.mjs → vgip-meta-ui-fieldAbstract-baeaf24d.mjs} +2 -2
  11. package/fesm2022/vgip-meta-ui-fieldAbstract-baeaf24d.mjs.map +1 -0
  12. package/fesm2022/{vgip-meta-ui-index-94c9df13.mjs → vgip-meta-ui-index-14a06a45.mjs} +18 -12
  13. package/fesm2022/vgip-meta-ui-index-14a06a45.mjs.map +1 -0
  14. package/fesm2022/{vgip-meta-ui-index-fdeb80d6.mjs → vgip-meta-ui-index-166d9e2d.mjs} +14 -14
  15. package/fesm2022/{vgip-meta-ui-index-fdeb80d6.mjs.map → vgip-meta-ui-index-166d9e2d.mjs.map} +1 -1
  16. package/fesm2022/{vgip-meta-ui-index-3cd63fdb.mjs → vgip-meta-ui-index-2c647b80.mjs} +5 -5
  17. package/fesm2022/{vgip-meta-ui-index-3cd63fdb.mjs.map → vgip-meta-ui-index-2c647b80.mjs.map} +1 -1
  18. package/fesm2022/{vgip-meta-ui-index-4e34299c.mjs → vgip-meta-ui-index-37358620.mjs} +23 -3
  19. package/fesm2022/vgip-meta-ui-index-37358620.mjs.map +1 -0
  20. package/fesm2022/{vgip-meta-ui-index-09f92f24.mjs → vgip-meta-ui-index-4ca3f70b.mjs} +32 -23
  21. package/fesm2022/vgip-meta-ui-index-4ca3f70b.mjs.map +1 -0
  22. package/fesm2022/{vgip-meta-ui-index-af0ec42f.mjs → vgip-meta-ui-index-4e9c383f.mjs} +3 -3
  23. package/fesm2022/{vgip-meta-ui-index-af0ec42f.mjs.map → vgip-meta-ui-index-4e9c383f.mjs.map} +1 -1
  24. package/fesm2022/{vgip-meta-ui-index-f98de31b.mjs → vgip-meta-ui-index-560db0ea.mjs} +3 -3
  25. package/fesm2022/{vgip-meta-ui-index-f98de31b.mjs.map → vgip-meta-ui-index-560db0ea.mjs.map} +1 -1
  26. package/fesm2022/{vgip-meta-ui-index-8b2ba164.mjs → vgip-meta-ui-index-62d1a000.mjs} +2 -2
  27. package/fesm2022/{vgip-meta-ui-index-8b2ba164.mjs.map → vgip-meta-ui-index-62d1a000.mjs.map} +1 -1
  28. package/fesm2022/{vgip-meta-ui-index-5d13f5e6.mjs → vgip-meta-ui-index-7741951a.mjs} +2 -2
  29. package/fesm2022/{vgip-meta-ui-index-5d13f5e6.mjs.map → vgip-meta-ui-index-7741951a.mjs.map} +1 -1
  30. package/fesm2022/{vgip-meta-ui-index-ee4a5a52.mjs → vgip-meta-ui-index-80ab405f.mjs} +2 -2
  31. package/fesm2022/{vgip-meta-ui-index-ee4a5a52.mjs.map → vgip-meta-ui-index-80ab405f.mjs.map} +1 -1
  32. package/fesm2022/{vgip-meta-ui-index-1b9f700a.mjs → vgip-meta-ui-index-93dadec0.mjs} +3 -3
  33. package/fesm2022/{vgip-meta-ui-index-1b9f700a.mjs.map → vgip-meta-ui-index-93dadec0.mjs.map} +1 -1
  34. package/fesm2022/{vgip-meta-ui-index-5fbb0fc8.mjs → vgip-meta-ui-index-a71ecefd.mjs} +3 -3
  35. package/fesm2022/{vgip-meta-ui-index-5fbb0fc8.mjs.map → vgip-meta-ui-index-a71ecefd.mjs.map} +1 -1
  36. package/fesm2022/{vgip-meta-ui-index-5891b8e7.mjs → vgip-meta-ui-index-c943b7c0.mjs} +2 -2
  37. package/fesm2022/{vgip-meta-ui-index-5891b8e7.mjs.map → vgip-meta-ui-index-c943b7c0.mjs.map} +1 -1
  38. package/fesm2022/{vgip-meta-ui-index-af8c0f14.mjs → vgip-meta-ui-index-cbdaa906.mjs} +18 -11
  39. package/fesm2022/vgip-meta-ui-index-cbdaa906.mjs.map +1 -0
  40. package/fesm2022/{vgip-meta-ui-index-6f2365c3.mjs → vgip-meta-ui-index-f12b4011.mjs} +2 -2
  41. package/fesm2022/{vgip-meta-ui-index-6f2365c3.mjs.map → vgip-meta-ui-index-f12b4011.mjs.map} +1 -1
  42. package/fesm2022/vgip-meta-ui.mjs +18 -18
  43. package/lib/fieldAbstract.d.ts +1 -0
  44. package/lib/fieldInput/index.d.ts +1 -0
  45. package/lib/fieldSelect/index.d.ts +2 -1
  46. package/lib/services/metaContext/index.d.ts +5 -1
  47. package/package.json +1 -1
  48. package/fesm2022/vgip-meta-ui-fieldAbstract-9955be39.mjs.map +0 -1
  49. package/fesm2022/vgip-meta-ui-index-09f92f24.mjs.map +0 -1
  50. package/fesm2022/vgip-meta-ui-index-4e34299c.mjs.map +0 -1
  51. package/fesm2022/vgip-meta-ui-index-94c9df13.mjs.map +0 -1
  52. package/fesm2022/vgip-meta-ui-index-af8c0f14.mjs.map +0 -1
@@ -113,15 +113,12 @@ export class FieldInput extends FieldAbstract {
113
113
  this.meta.suggestions = (this.meta.picklist || []).map((s) => s.label);
114
114
  }
115
115
  if (this.meta.type === 'number') {
116
- if (this.meta.subtype === 'float' && !this.meta.step) {
117
- this.meta.step = '0.01';
118
- }
119
- this.meta.subtype = 'number';
116
+ this.logicalSubtype = 'number';
120
117
  }
121
118
  if (['date', 'time', 'datetime'].indexOf(this.meta.type) !== -1) {
122
- this.meta.subtype = this.meta.type;
119
+ this.logicalSubtype = this.meta.type;
123
120
  if (this.meta.type === 'datetime') {
124
- this.meta.subtype = 'datetime-local';
121
+ this.logicalSubtype = 'datetime-local';
125
122
  }
126
123
  delete this.multiple; // no multiple support for timestamps
127
124
  }
@@ -260,6 +257,15 @@ export class FieldInput extends FieldAbstract {
260
257
  if (typeof (origValue) !== 'undefined') {
261
258
  this.parent[this.meta.name] = origValue;
262
259
  }
260
+ if (!this.isPersistedParent && typeof (this.meta.auto?.template) === 'string') {
261
+ this.metaContext.onContextChange.subscribe((context) => {
262
+ const autoValue = templateBuilder({ context }, this.meta.auto.template);
263
+ if (this.model === this.lastAutoValue && autoValue) {
264
+ this.lastAutoValue = autoValue;
265
+ this.parent[this.meta.name] = autoValue;
266
+ }
267
+ });
268
+ }
263
269
  const d = this.meta.default || this.meta.defaultValue;
264
270
  if (d && typeof (this.model) === 'undefined') {
265
271
  if (this.multiple) {
@@ -289,6 +295,7 @@ export class FieldInput extends FieldAbstract {
289
295
  }
290
296
  }
291
297
  }
298
+ this.lastAutoValue = this.model;
292
299
  }
293
300
  if (this.preview && this.metaContext.onClick2Dial && origValue) {
294
301
  this.isPhoneNumber = /^(?:00|\+)?(([01]|44|61|48|33 \d|27|30|31|34|371|380|39|41|420|52|40|90|91)(\s)?)?[-./]?\(?\d?\d{1,3}\)?[-\s./]?\d?[-\s./]?\d{1,4}\)?[-\s./]?\d{1,4}[-./]?\d{1,4}(\s\d\d($|,))?(,[,\d]+#)?$/.test(origValue);
@@ -459,10 +466,10 @@ export class FieldInput extends FieldAbstract {
459
466
  }
460
467
  }
461
468
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.11", ngImport: i0, type: FieldInput, deps: [{ token: i1.MetaContextService }], target: i0.ɵɵFactoryTarget.Component }); }
462
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.11", type: FieldInput, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div class='vgip-meta-field-preview' *ngIf='preview && model'>\n <div class='vgip-meta-field-label' [title]='meta.label || meta.name'>{{meta.label || meta.name}}</div>\n <div class='vgip-meta-field-value __gu'>\n <a *ngIf=\"isPhoneNumber; else elseBlock\" href='#' (click)=\"click2dial($event)\" class=\"Vlt-text-link\" aria-label='Dial'>\n <svg class=\"Vlt-icon Vlt-icon--smaller\" style=\"margin-top: -3px;\">\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-phone-full\" />\n </svg>\n {{model}}\n </a>\n <ng-template #elseBlock>{{model}}</ng-template>\n </div>\n</div>\n<div *ngIf='!preview' class=\"Vlt-form__element Vlt-form__element--big\" [ngClass]=\"{'Vlt-form__element--error': f.invalid && ((f | metaModel)._parent.submitted || (f | metaModel ).touched), 'multiple': multiple, 'has-value': f.value, active: keyListenerActive }\">\n <div *ngIf='multiple' class='items-container'>\n <div *ngIf='model' class='badges-container keep-focus' (click)='focus()'> <!-- eslint-disable-line -->\n <div *ngFor='let item of model' class=\"Vlt-badge Vlt-badge--app Vlt-badge--large keep-focus\">\n {{item}}\n <button class=\"Vlt-badge__dismiss keep-focus\" (click)='remove($event, item)'></button> <!-- eslint-disable-line @angular-eslint/template/elements-content -->\n </div>\n </div>\n </div>\n <div class=\"Vlt-input Vlt-dropdown\" style='display: block;' [ngClass]=\"{'vgip-disable': disabled}\">\n <label class='wrapper'>\n <input class='main model' [pattern]=\"validations.pattern ? validations.pattern.value || validations.pattern : null\" [required]='validations.required' [minlength]='validations.minlength' [maxlength]='validations.maxlength' [min]='validations.min' [max]='validations.max' [step]='validations.step' [disabled]='disabled' [readonly]=\"readonly\" [(ngModel)]='model' (ngModelChange)=\"onModelChange($event)\" #f='ngModel' [name]='name' [type]=\"multiple ? 'hidden' : (meta.subtype || 'text')\" placeholder=\" \" (click)='onActivated($event)' (focus)='onActivated($event)' (blur)='onBlur($event)'/>\n <input *ngIf='multiple' class='main' [pattern]=\"validations.pattern ? validations.pattern.value || validations.pattern : null\" [minlength]='validations.minlength' [maxlength]='validations.maxlength' [min]='validations.min' [max]='validations.max' [(ngModel)]='addText' [ngModelOptions]=\"{ standalone: true }\" [type]=\"meta.subtype || 'text'\" [disabled]='disabled' [readonly]='readonly' placeholder=\"+Add\" (keydown.enter)='onAdd($event)' (click)='onActivated($event)' (focus)='onActivated($event)' (blur)='onBlur($event)'/>\n <label class='Vlt-truncate'>{{meta.label || meta.name}}<span *ngIf='validations.required' class='Vlt-red'>*</span>&nbsp;<span class='Vlt-black' *ngIf='model && multiple'>({{model.length}})</span></label> <!-- eslint-disable-line @angular-eslint/template/label-has-associated-control -->\n </label>\n <div class='Vlt-composite__append right-actions'>\n <a href='#' *ngIf='model && showClear' class=\"Vlt-composite__append--icon\" (click)='clear($event)'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/></svg>\n </div>\n </a>\n </div>\n <!-- <div *ngIf=\"!meta.subtype || meta.subtype == 'text'\" class=\"Vlt-composite__append Vlt-composite__append--icon\" style='bottom: 7px; right: 10px; padding: 3px; width: initial; height: initial; cursor: pointer;'>\n <div *ngIf=\"!meta.type || meta.type === 'string'\" class=\"Vlt-composite__icon\" (click)='textToSpeech()'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-microphone\"/></svg>\n </div>\n </div> -->\n <div *ngIf=\"suggestions.length\" class=\"Vlt-dropdown__panel\">\n <div class=\"Vlt-dropdown__panel__content Vlt-dropdown__panel__content--scroll-area suggestions\">\n <!-- <div class=\"Vlt-dropdown__title\" style='padding-left: 13px;'>\n Suggestions\n <div class=\"Vlt-dropdown__close Vlt-white\" (click)='dismissDropdown($event)'>\n <svg class='Vlt-icon Vlt-icon--small'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/></svg>\n </div>\n </div> -->\n <div class=\"Vlt-dropdown__block\"></div>\n <div *ngIf='dropdown' class=\"Vlt-dropdown__scroll\">\n <a href='#' [ngClass]=\"{ 'Vlt-dropdown__link--selected': (activeSuggestionIndex === i) }\" (click)='onSuggestionSelect($event, suggestion)' *ngFor='let suggestion of suggestions; let i = index' class=\"Vlt-dropdown__link\" style='padding: 0;'>\n <div *ngIf='multiple' class=\"Vlt-checkbox\" style='width: 100%;'>\n <label [title]='suggestion.label || suggestion'>\n <span class=\"Vlt-checkbox__button\">\n <input type=\"checkbox\" [checked]='model && model.indexOf(suggestion) !== -1'/>\n <span class=\"Vlt-checkbox__icon\"></span>\n </span>\n {{suggestion.label || suggestion}}\n </label>\n </div>\n <div *ngIf='!multiple' style='padding: 12px 20px;'>\n {{suggestion.label || suggestion}}\n </div>\n </a>\n </div>\n <div *ngIf='!multiple' class=\"Vlt-dropdown__block\"></div>\n <div *ngIf='multiple' class=\"Vlt-dropdown__block Vlt-dropdown__block--nowrap\" style='padding: 8px 16px 16px;'>\n <button (click)='clear($event)' type='button' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--small Vlt-btn--outline\">Clear all</button>\n <button (click)='dismissDropdown($event)' type='button' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--small\">Done</button>\n </div>\n </div>\n </div>\n </div>\n <small *ngIf='f.invalid && ((f | metaModel)._parent.submitted || ((f | metaModel ).touched && keyListenerActive))' class=\"Vlt-form__element__error\">\n <span *ngIf=\"f.errors.required\">Required.&nbsp;</span>\n <span *ngIf=\"f.errors.minlength\">Must be longer than {{validations.minlength}} characters.&nbsp;</span>\n <span *ngIf=\"f.errors.maxlength\">Must be lest than {{validations.maxlength}} characters.&nbsp;</span>\n <span *ngIf=\"f.errors.pattern\">{{ validations.pattern.text || \"Should match '\"+validations.pattern+\"' pattern.\" }}.&nbsp;</span>\n <span *ngIf=\"f.errors.custom\">{{f.errors.custom}}&nbsp;</span>\n </small>\n <small *ngIf='meta.hint' class=\"Vlt-form__element__hint\">{{meta.hint}}</small>\n</div>\n", styles: [".Vlt-form__element--big .Vlt-input input{padding-right:40px;text-overflow:ellipsis}@media screen and (-webkit-min-device-pixel-ratio: 0){.Vlt-form__element--big .Vlt-input input{line-height:20px}}.Vlt-form__element--big .Vlt-input input:disabled{cursor:not-allowed}.Vlt-form__element--big:hover .items-container,.Vlt-form__element--big:hover .main,.Vlt-form__element--big:hover input,.Vlt-form__element--big.active .items-container,.Vlt-form__element--big.active .main,.Vlt-form__element--big.active input{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.multiple .Vlt-composite.Vlt-dropdown{margin-top:3px}.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .items-container,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .main,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) input,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .items-container,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .main,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) input{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.multiple .items-container{background-color:var(--vgip-meta-input-bg-color);border:1px solid var(--vgip-meta-input-border-color);border-bottom:0;border-top-left-radius:6px;border-top-right-radius:6px}.Vlt-form__element--big.multiple .items-container.creatable{margin-right:62px}.Vlt-form__element--big.multiple .items-container .badges-container{overflow:auto;max-height:140px;padding:6px 4px 0 6px}.Vlt-form__element--big.multiple .items-container .badges-container .Vlt-badge{margin-bottom:3px;margin-left:0;margin-right:3px;overflow:hidden;max-width:100%}.Vlt-form__element--big.multiple:not(.has-value) .items-container{border:0}.Vlt-form__element--big.multiple.has-value .main,.Vlt-form__element--big.multiple.has-value input{border-top:0;border-top-left-radius:0;border-top-right-radius:0;box-shadow:none}.Vlt-form__element--big.Vlt-form__element--error .items-container,.Vlt-form__element--big.Vlt-form__element--error .main,.Vlt-form__element--big.Vlt-form__element--error input{border-color:#f25a6b;background:var(--vgip-meta-input-bg-color)}label.Vlt-truncate{padding-right:42px}.Vlt-dropdown__panel{width:100%}.Vlt-dropdown__panel .Vlt-dropdown__link--selected{background:rgba(44,45,48,.05)}.Vlt-dropdown__panel label{margin-top:0;padding:12px 20px;top:0;left:0;pointer-events:initial;position:initial;color:initial;font-size:inherit;transition:none;cursor:pointer}.Vlt-dropdown__panel label input{height:0}.Vlt-composite__append.right-actions{position:absolute;top:5px;right:10px;cursor:pointer}.Vlt-composite__append.right-actions .Vlt-composite__append--icon{width:36px;outline:none;position:initial;display:inline-block}.Vlt-composite__append.right-actions .Vlt-composite__append--icon svg{height:14px;width:14px}.Vlt-composite__append.right-actions .Vlt-composite__append--icon:hover svg,.Vlt-composite__append.right-actions .Vlt-composite__append--icon:focus svg{fill:var(--vgip-meta-input-accent-color)}.vgip-disable .Vlt-composite__append{cursor:not-allowed;pointer-events:none}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i3.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i3.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i4.MetaModelPipe, name: "metaModel" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] }); }
469
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.11", type: FieldInput, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div class='vgip-meta-field-preview' *ngIf='preview && model'>\n <div class='vgip-meta-field-label' [title]='meta.label || meta.name'>{{meta.label || meta.name}}</div>\n <div class='vgip-meta-field-value __gu'>\n <a *ngIf=\"isPhoneNumber; else elseBlock\" href='#' (click)=\"click2dial($event)\" class=\"Vlt-text-link\" aria-label='Dial'>\n <svg class=\"Vlt-icon Vlt-icon--smaller\" style=\"margin-top: -3px;\">\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-phone-full\" />\n </svg>\n {{model}}\n </a>\n <ng-template #elseBlock>{{model}}</ng-template>\n </div>\n</div>\n<div *ngIf='!preview' class=\"Vlt-form__element Vlt-form__element--big\" [ngClass]=\"{'Vlt-form__element--error': f.invalid && ((f | metaModel)._parent.submitted || (f | metaModel ).touched), 'multiple': multiple, 'has-value': f.value, active: keyListenerActive }\">\n <div *ngIf='multiple' class='items-container'>\n <div *ngIf='model' class='badges-container keep-focus' (click)='focus()'> <!-- eslint-disable-line -->\n <div *ngFor='let item of model' class=\"Vlt-badge Vlt-badge--app Vlt-badge--large keep-focus\">\n {{item}}\n <button class=\"Vlt-badge__dismiss keep-focus\" (click)='remove($event, item)'></button> <!-- eslint-disable-line @angular-eslint/template/elements-content -->\n </div>\n </div>\n </div>\n <div class=\"Vlt-input Vlt-dropdown\" style='display: block;' [ngClass]=\"{'vgip-disable': disabled}\">\n <label class='wrapper'>\n <input class='main model' [pattern]=\"validations.pattern ? validations.pattern.value || validations.pattern : null\" [required]='validations.required' [minlength]='validations.minlength' [maxlength]='validations.maxlength' [min]='validations.min' [max]='validations.max' [step]='validations.step' [disabled]='disabled' [readonly]=\"readonly\" [(ngModel)]='model' (ngModelChange)=\"onModelChange($event)\" #f='ngModel' [name]='name' [type]=\"multiple ? 'hidden' : (logicalSubtype || meta.subtype || 'text')\" placeholder=\" \" (click)='onActivated($event)' (focus)='onActivated($event)' (blur)='onBlur($event)'/>\n <input *ngIf='multiple' class='main' [pattern]=\"validations.pattern ? validations.pattern.value || validations.pattern : null\" [minlength]='validations.minlength' [maxlength]='validations.maxlength' [min]='validations.min' [max]='validations.max' [(ngModel)]='addText' [ngModelOptions]=\"{ standalone: true }\" [type]=\"logicalSubtype || meta.subtype || 'text'\" [disabled]='disabled' [readonly]='readonly' placeholder=\"+Add\" (keydown.enter)='onAdd($event)' (click)='onActivated($event)' (focus)='onActivated($event)' (blur)='onBlur($event)'/>\n <label class='Vlt-truncate'>{{meta.label || meta.name}}<span *ngIf='validations.required' class='Vlt-red'>*</span>&nbsp;<span class='Vlt-black' *ngIf='model && multiple'>({{model.length}})</span></label> <!-- eslint-disable-line @angular-eslint/template/label-has-associated-control -->\n </label>\n <div class='Vlt-composite__append right-actions'>\n <a href='#' *ngIf='model && showClear' class=\"Vlt-composite__append--icon\" (click)='clear($event)'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/></svg>\n </div>\n </a>\n </div>\n <!-- <div *ngIf=\"!meta.subtype || meta.subtype == 'text'\" class=\"Vlt-composite__append Vlt-composite__append--icon\" style='bottom: 7px; right: 10px; padding: 3px; width: initial; height: initial; cursor: pointer;'>\n <div *ngIf=\"!meta.type || meta.type === 'string'\" class=\"Vlt-composite__icon\" (click)='textToSpeech()'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-microphone\"/></svg>\n </div>\n </div> -->\n <div *ngIf=\"suggestions.length\" class=\"Vlt-dropdown__panel\">\n <div class=\"Vlt-dropdown__panel__content Vlt-dropdown__panel__content--scroll-area suggestions\">\n <!-- <div class=\"Vlt-dropdown__title\" style='padding-left: 13px;'>\n Suggestions\n <div class=\"Vlt-dropdown__close Vlt-white\" (click)='dismissDropdown($event)'>\n <svg class='Vlt-icon Vlt-icon--small'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/></svg>\n </div>\n </div> -->\n <div class=\"Vlt-dropdown__block\"></div>\n <div *ngIf='dropdown' class=\"Vlt-dropdown__scroll\">\n <a href='#' [ngClass]=\"{ 'Vlt-dropdown__link--selected': (activeSuggestionIndex === i) }\" (click)='onSuggestionSelect($event, suggestion)' *ngFor='let suggestion of suggestions; let i = index' class=\"Vlt-dropdown__link\" style='padding: 0;'>\n <div *ngIf='multiple' class=\"Vlt-checkbox\" style='width: 100%;'>\n <label [title]='suggestion.label || suggestion'>\n <span class=\"Vlt-checkbox__button\">\n <input type=\"checkbox\" [checked]='model && model.indexOf(suggestion) !== -1'/>\n <span class=\"Vlt-checkbox__icon\"></span>\n </span>\n {{suggestion.label || suggestion}}\n </label>\n </div>\n <div *ngIf='!multiple' style='padding: 12px 20px;'>\n {{suggestion.label || suggestion}}\n </div>\n </a>\n </div>\n <div *ngIf='!multiple' class=\"Vlt-dropdown__block\"></div>\n <div *ngIf='multiple' class=\"Vlt-dropdown__block Vlt-dropdown__block--nowrap\" style='padding: 8px 16px 16px;'>\n <button (click)='clear($event)' type='button' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--small Vlt-btn--outline\">Clear all</button>\n <button (click)='dismissDropdown($event)' type='button' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--small\">Done</button>\n </div>\n </div>\n </div>\n </div>\n <small *ngIf='f.invalid && ((f | metaModel)._parent.submitted || ((f | metaModel ).touched && keyListenerActive))' class=\"Vlt-form__element__error\">\n <span *ngIf=\"f.errors.required\">Required.&nbsp;</span>\n <span *ngIf=\"f.errors.minlength\">Must be longer than {{validations.minlength}} characters.&nbsp;</span>\n <span *ngIf=\"f.errors.maxlength\">Must be lest than {{validations.maxlength}} characters.&nbsp;</span>\n <span *ngIf=\"f.errors.pattern\">{{ validations.pattern.text || \"Should match '\"+validations.pattern+\"' pattern.\" }}.&nbsp;</span>\n <span *ngIf=\"f.errors.custom\">{{f.errors.custom}}&nbsp;</span>\n </small>\n <small *ngIf='meta.hint' class=\"Vlt-form__element__hint\">{{meta.hint}}</small>\n</div>\n", styles: [".Vlt-form__element--big .Vlt-input input{padding-right:40px;text-overflow:ellipsis}@media screen and (-webkit-min-device-pixel-ratio: 0){.Vlt-form__element--big .Vlt-input input{line-height:20px}}.Vlt-form__element--big .Vlt-input input:disabled{cursor:not-allowed}.Vlt-form__element--big:hover .items-container,.Vlt-form__element--big:hover .main,.Vlt-form__element--big:hover input,.Vlt-form__element--big.active .items-container,.Vlt-form__element--big.active .main,.Vlt-form__element--big.active input{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.multiple .Vlt-composite.Vlt-dropdown{margin-top:3px}.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .items-container,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .main,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) input,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .items-container,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .main,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) input{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.multiple .items-container{background-color:var(--vgip-meta-input-bg-color);border:1px solid var(--vgip-meta-input-border-color);border-bottom:0;border-top-left-radius:6px;border-top-right-radius:6px}.Vlt-form__element--big.multiple .items-container.creatable{margin-right:62px}.Vlt-form__element--big.multiple .items-container .badges-container{overflow:auto;max-height:140px;padding:6px 4px 0 6px}.Vlt-form__element--big.multiple .items-container .badges-container .Vlt-badge{margin-bottom:3px;margin-left:0;margin-right:3px;overflow:hidden;max-width:100%}.Vlt-form__element--big.multiple:not(.has-value) .items-container{border:0}.Vlt-form__element--big.multiple.has-value .main,.Vlt-form__element--big.multiple.has-value input{border-top:0;border-top-left-radius:0;border-top-right-radius:0;box-shadow:none}.Vlt-form__element--big.Vlt-form__element--error .items-container,.Vlt-form__element--big.Vlt-form__element--error .main,.Vlt-form__element--big.Vlt-form__element--error input{border-color:#f25a6b;background:var(--vgip-meta-input-bg-color)}label.Vlt-truncate{padding-right:42px}.Vlt-dropdown__panel{width:100%}.Vlt-dropdown__panel .Vlt-dropdown__link--selected{background:rgba(44,45,48,.05)}.Vlt-dropdown__panel label{margin-top:0;padding:12px 20px;top:0;left:0;pointer-events:initial;position:initial;color:initial;font-size:inherit;transition:none;cursor:pointer}.Vlt-dropdown__panel label input{height:0}.Vlt-composite__append.right-actions{position:absolute;top:5px;right:10px;cursor:pointer}.Vlt-composite__append.right-actions .Vlt-composite__append--icon{width:36px;outline:none;position:initial;display:inline-block}.Vlt-composite__append.right-actions .Vlt-composite__append--icon svg{height:14px;width:14px}.Vlt-composite__append.right-actions .Vlt-composite__append--icon:hover svg,.Vlt-composite__append.right-actions .Vlt-composite__append--icon:focus svg{fill:var(--vgip-meta-input-accent-color)}.vgip-disable .Vlt-composite__append{cursor:not-allowed;pointer-events:none}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i3.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i3.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i4.MetaModelPipe, name: "metaModel" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] }); }
463
470
  }
464
471
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.11", ngImport: i0, type: FieldInput, decorators: [{
465
472
  type: Component,
466
- args: [{ viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<div class='vgip-meta-field-preview' *ngIf='preview && model'>\n <div class='vgip-meta-field-label' [title]='meta.label || meta.name'>{{meta.label || meta.name}}</div>\n <div class='vgip-meta-field-value __gu'>\n <a *ngIf=\"isPhoneNumber; else elseBlock\" href='#' (click)=\"click2dial($event)\" class=\"Vlt-text-link\" aria-label='Dial'>\n <svg class=\"Vlt-icon Vlt-icon--smaller\" style=\"margin-top: -3px;\">\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-phone-full\" />\n </svg>\n {{model}}\n </a>\n <ng-template #elseBlock>{{model}}</ng-template>\n </div>\n</div>\n<div *ngIf='!preview' class=\"Vlt-form__element Vlt-form__element--big\" [ngClass]=\"{'Vlt-form__element--error': f.invalid && ((f | metaModel)._parent.submitted || (f | metaModel ).touched), 'multiple': multiple, 'has-value': f.value, active: keyListenerActive }\">\n <div *ngIf='multiple' class='items-container'>\n <div *ngIf='model' class='badges-container keep-focus' (click)='focus()'> <!-- eslint-disable-line -->\n <div *ngFor='let item of model' class=\"Vlt-badge Vlt-badge--app Vlt-badge--large keep-focus\">\n {{item}}\n <button class=\"Vlt-badge__dismiss keep-focus\" (click)='remove($event, item)'></button> <!-- eslint-disable-line @angular-eslint/template/elements-content -->\n </div>\n </div>\n </div>\n <div class=\"Vlt-input Vlt-dropdown\" style='display: block;' [ngClass]=\"{'vgip-disable': disabled}\">\n <label class='wrapper'>\n <input class='main model' [pattern]=\"validations.pattern ? validations.pattern.value || validations.pattern : null\" [required]='validations.required' [minlength]='validations.minlength' [maxlength]='validations.maxlength' [min]='validations.min' [max]='validations.max' [step]='validations.step' [disabled]='disabled' [readonly]=\"readonly\" [(ngModel)]='model' (ngModelChange)=\"onModelChange($event)\" #f='ngModel' [name]='name' [type]=\"multiple ? 'hidden' : (meta.subtype || 'text')\" placeholder=\" \" (click)='onActivated($event)' (focus)='onActivated($event)' (blur)='onBlur($event)'/>\n <input *ngIf='multiple' class='main' [pattern]=\"validations.pattern ? validations.pattern.value || validations.pattern : null\" [minlength]='validations.minlength' [maxlength]='validations.maxlength' [min]='validations.min' [max]='validations.max' [(ngModel)]='addText' [ngModelOptions]=\"{ standalone: true }\" [type]=\"meta.subtype || 'text'\" [disabled]='disabled' [readonly]='readonly' placeholder=\"+Add\" (keydown.enter)='onAdd($event)' (click)='onActivated($event)' (focus)='onActivated($event)' (blur)='onBlur($event)'/>\n <label class='Vlt-truncate'>{{meta.label || meta.name}}<span *ngIf='validations.required' class='Vlt-red'>*</span>&nbsp;<span class='Vlt-black' *ngIf='model && multiple'>({{model.length}})</span></label> <!-- eslint-disable-line @angular-eslint/template/label-has-associated-control -->\n </label>\n <div class='Vlt-composite__append right-actions'>\n <a href='#' *ngIf='model && showClear' class=\"Vlt-composite__append--icon\" (click)='clear($event)'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/></svg>\n </div>\n </a>\n </div>\n <!-- <div *ngIf=\"!meta.subtype || meta.subtype == 'text'\" class=\"Vlt-composite__append Vlt-composite__append--icon\" style='bottom: 7px; right: 10px; padding: 3px; width: initial; height: initial; cursor: pointer;'>\n <div *ngIf=\"!meta.type || meta.type === 'string'\" class=\"Vlt-composite__icon\" (click)='textToSpeech()'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-microphone\"/></svg>\n </div>\n </div> -->\n <div *ngIf=\"suggestions.length\" class=\"Vlt-dropdown__panel\">\n <div class=\"Vlt-dropdown__panel__content Vlt-dropdown__panel__content--scroll-area suggestions\">\n <!-- <div class=\"Vlt-dropdown__title\" style='padding-left: 13px;'>\n Suggestions\n <div class=\"Vlt-dropdown__close Vlt-white\" (click)='dismissDropdown($event)'>\n <svg class='Vlt-icon Vlt-icon--small'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/></svg>\n </div>\n </div> -->\n <div class=\"Vlt-dropdown__block\"></div>\n <div *ngIf='dropdown' class=\"Vlt-dropdown__scroll\">\n <a href='#' [ngClass]=\"{ 'Vlt-dropdown__link--selected': (activeSuggestionIndex === i) }\" (click)='onSuggestionSelect($event, suggestion)' *ngFor='let suggestion of suggestions; let i = index' class=\"Vlt-dropdown__link\" style='padding: 0;'>\n <div *ngIf='multiple' class=\"Vlt-checkbox\" style='width: 100%;'>\n <label [title]='suggestion.label || suggestion'>\n <span class=\"Vlt-checkbox__button\">\n <input type=\"checkbox\" [checked]='model && model.indexOf(suggestion) !== -1'/>\n <span class=\"Vlt-checkbox__icon\"></span>\n </span>\n {{suggestion.label || suggestion}}\n </label>\n </div>\n <div *ngIf='!multiple' style='padding: 12px 20px;'>\n {{suggestion.label || suggestion}}\n </div>\n </a>\n </div>\n <div *ngIf='!multiple' class=\"Vlt-dropdown__block\"></div>\n <div *ngIf='multiple' class=\"Vlt-dropdown__block Vlt-dropdown__block--nowrap\" style='padding: 8px 16px 16px;'>\n <button (click)='clear($event)' type='button' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--small Vlt-btn--outline\">Clear all</button>\n <button (click)='dismissDropdown($event)' type='button' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--small\">Done</button>\n </div>\n </div>\n </div>\n </div>\n <small *ngIf='f.invalid && ((f | metaModel)._parent.submitted || ((f | metaModel ).touched && keyListenerActive))' class=\"Vlt-form__element__error\">\n <span *ngIf=\"f.errors.required\">Required.&nbsp;</span>\n <span *ngIf=\"f.errors.minlength\">Must be longer than {{validations.minlength}} characters.&nbsp;</span>\n <span *ngIf=\"f.errors.maxlength\">Must be lest than {{validations.maxlength}} characters.&nbsp;</span>\n <span *ngIf=\"f.errors.pattern\">{{ validations.pattern.text || \"Should match '\"+validations.pattern+\"' pattern.\" }}.&nbsp;</span>\n <span *ngIf=\"f.errors.custom\">{{f.errors.custom}}&nbsp;</span>\n </small>\n <small *ngIf='meta.hint' class=\"Vlt-form__element__hint\">{{meta.hint}}</small>\n</div>\n", styles: [".Vlt-form__element--big .Vlt-input input{padding-right:40px;text-overflow:ellipsis}@media screen and (-webkit-min-device-pixel-ratio: 0){.Vlt-form__element--big .Vlt-input input{line-height:20px}}.Vlt-form__element--big .Vlt-input input:disabled{cursor:not-allowed}.Vlt-form__element--big:hover .items-container,.Vlt-form__element--big:hover .main,.Vlt-form__element--big:hover input,.Vlt-form__element--big.active .items-container,.Vlt-form__element--big.active .main,.Vlt-form__element--big.active input{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.multiple .Vlt-composite.Vlt-dropdown{margin-top:3px}.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .items-container,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .main,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) input,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .items-container,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .main,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) input{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.multiple .items-container{background-color:var(--vgip-meta-input-bg-color);border:1px solid var(--vgip-meta-input-border-color);border-bottom:0;border-top-left-radius:6px;border-top-right-radius:6px}.Vlt-form__element--big.multiple .items-container.creatable{margin-right:62px}.Vlt-form__element--big.multiple .items-container .badges-container{overflow:auto;max-height:140px;padding:6px 4px 0 6px}.Vlt-form__element--big.multiple .items-container .badges-container .Vlt-badge{margin-bottom:3px;margin-left:0;margin-right:3px;overflow:hidden;max-width:100%}.Vlt-form__element--big.multiple:not(.has-value) .items-container{border:0}.Vlt-form__element--big.multiple.has-value .main,.Vlt-form__element--big.multiple.has-value input{border-top:0;border-top-left-radius:0;border-top-right-radius:0;box-shadow:none}.Vlt-form__element--big.Vlt-form__element--error .items-container,.Vlt-form__element--big.Vlt-form__element--error .main,.Vlt-form__element--big.Vlt-form__element--error input{border-color:#f25a6b;background:var(--vgip-meta-input-bg-color)}label.Vlt-truncate{padding-right:42px}.Vlt-dropdown__panel{width:100%}.Vlt-dropdown__panel .Vlt-dropdown__link--selected{background:rgba(44,45,48,.05)}.Vlt-dropdown__panel label{margin-top:0;padding:12px 20px;top:0;left:0;pointer-events:initial;position:initial;color:initial;font-size:inherit;transition:none;cursor:pointer}.Vlt-dropdown__panel label input{height:0}.Vlt-composite__append.right-actions{position:absolute;top:5px;right:10px;cursor:pointer}.Vlt-composite__append.right-actions .Vlt-composite__append--icon{width:36px;outline:none;position:initial;display:inline-block}.Vlt-composite__append.right-actions .Vlt-composite__append--icon svg{height:14px;width:14px}.Vlt-composite__append.right-actions .Vlt-composite__append--icon:hover svg,.Vlt-composite__append.right-actions .Vlt-composite__append--icon:focus svg{fill:var(--vgip-meta-input-accent-color)}.vgip-disable .Vlt-composite__append{cursor:not-allowed;pointer-events:none}\n"] }]
473
+ args: [{ viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<div class='vgip-meta-field-preview' *ngIf='preview && model'>\n <div class='vgip-meta-field-label' [title]='meta.label || meta.name'>{{meta.label || meta.name}}</div>\n <div class='vgip-meta-field-value __gu'>\n <a *ngIf=\"isPhoneNumber; else elseBlock\" href='#' (click)=\"click2dial($event)\" class=\"Vlt-text-link\" aria-label='Dial'>\n <svg class=\"Vlt-icon Vlt-icon--smaller\" style=\"margin-top: -3px;\">\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-phone-full\" />\n </svg>\n {{model}}\n </a>\n <ng-template #elseBlock>{{model}}</ng-template>\n </div>\n</div>\n<div *ngIf='!preview' class=\"Vlt-form__element Vlt-form__element--big\" [ngClass]=\"{'Vlt-form__element--error': f.invalid && ((f | metaModel)._parent.submitted || (f | metaModel ).touched), 'multiple': multiple, 'has-value': f.value, active: keyListenerActive }\">\n <div *ngIf='multiple' class='items-container'>\n <div *ngIf='model' class='badges-container keep-focus' (click)='focus()'> <!-- eslint-disable-line -->\n <div *ngFor='let item of model' class=\"Vlt-badge Vlt-badge--app Vlt-badge--large keep-focus\">\n {{item}}\n <button class=\"Vlt-badge__dismiss keep-focus\" (click)='remove($event, item)'></button> <!-- eslint-disable-line @angular-eslint/template/elements-content -->\n </div>\n </div>\n </div>\n <div class=\"Vlt-input Vlt-dropdown\" style='display: block;' [ngClass]=\"{'vgip-disable': disabled}\">\n <label class='wrapper'>\n <input class='main model' [pattern]=\"validations.pattern ? validations.pattern.value || validations.pattern : null\" [required]='validations.required' [minlength]='validations.minlength' [maxlength]='validations.maxlength' [min]='validations.min' [max]='validations.max' [step]='validations.step' [disabled]='disabled' [readonly]=\"readonly\" [(ngModel)]='model' (ngModelChange)=\"onModelChange($event)\" #f='ngModel' [name]='name' [type]=\"multiple ? 'hidden' : (logicalSubtype || meta.subtype || 'text')\" placeholder=\" \" (click)='onActivated($event)' (focus)='onActivated($event)' (blur)='onBlur($event)'/>\n <input *ngIf='multiple' class='main' [pattern]=\"validations.pattern ? validations.pattern.value || validations.pattern : null\" [minlength]='validations.minlength' [maxlength]='validations.maxlength' [min]='validations.min' [max]='validations.max' [(ngModel)]='addText' [ngModelOptions]=\"{ standalone: true }\" [type]=\"logicalSubtype || meta.subtype || 'text'\" [disabled]='disabled' [readonly]='readonly' placeholder=\"+Add\" (keydown.enter)='onAdd($event)' (click)='onActivated($event)' (focus)='onActivated($event)' (blur)='onBlur($event)'/>\n <label class='Vlt-truncate'>{{meta.label || meta.name}}<span *ngIf='validations.required' class='Vlt-red'>*</span>&nbsp;<span class='Vlt-black' *ngIf='model && multiple'>({{model.length}})</span></label> <!-- eslint-disable-line @angular-eslint/template/label-has-associated-control -->\n </label>\n <div class='Vlt-composite__append right-actions'>\n <a href='#' *ngIf='model && showClear' class=\"Vlt-composite__append--icon\" (click)='clear($event)'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/></svg>\n </div>\n </a>\n </div>\n <!-- <div *ngIf=\"!meta.subtype || meta.subtype == 'text'\" class=\"Vlt-composite__append Vlt-composite__append--icon\" style='bottom: 7px; right: 10px; padding: 3px; width: initial; height: initial; cursor: pointer;'>\n <div *ngIf=\"!meta.type || meta.type === 'string'\" class=\"Vlt-composite__icon\" (click)='textToSpeech()'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-microphone\"/></svg>\n </div>\n </div> -->\n <div *ngIf=\"suggestions.length\" class=\"Vlt-dropdown__panel\">\n <div class=\"Vlt-dropdown__panel__content Vlt-dropdown__panel__content--scroll-area suggestions\">\n <!-- <div class=\"Vlt-dropdown__title\" style='padding-left: 13px;'>\n Suggestions\n <div class=\"Vlt-dropdown__close Vlt-white\" (click)='dismissDropdown($event)'>\n <svg class='Vlt-icon Vlt-icon--small'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/></svg>\n </div>\n </div> -->\n <div class=\"Vlt-dropdown__block\"></div>\n <div *ngIf='dropdown' class=\"Vlt-dropdown__scroll\">\n <a href='#' [ngClass]=\"{ 'Vlt-dropdown__link--selected': (activeSuggestionIndex === i) }\" (click)='onSuggestionSelect($event, suggestion)' *ngFor='let suggestion of suggestions; let i = index' class=\"Vlt-dropdown__link\" style='padding: 0;'>\n <div *ngIf='multiple' class=\"Vlt-checkbox\" style='width: 100%;'>\n <label [title]='suggestion.label || suggestion'>\n <span class=\"Vlt-checkbox__button\">\n <input type=\"checkbox\" [checked]='model && model.indexOf(suggestion) !== -1'/>\n <span class=\"Vlt-checkbox__icon\"></span>\n </span>\n {{suggestion.label || suggestion}}\n </label>\n </div>\n <div *ngIf='!multiple' style='padding: 12px 20px;'>\n {{suggestion.label || suggestion}}\n </div>\n </a>\n </div>\n <div *ngIf='!multiple' class=\"Vlt-dropdown__block\"></div>\n <div *ngIf='multiple' class=\"Vlt-dropdown__block Vlt-dropdown__block--nowrap\" style='padding: 8px 16px 16px;'>\n <button (click)='clear($event)' type='button' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--small Vlt-btn--outline\">Clear all</button>\n <button (click)='dismissDropdown($event)' type='button' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--small\">Done</button>\n </div>\n </div>\n </div>\n </div>\n <small *ngIf='f.invalid && ((f | metaModel)._parent.submitted || ((f | metaModel ).touched && keyListenerActive))' class=\"Vlt-form__element__error\">\n <span *ngIf=\"f.errors.required\">Required.&nbsp;</span>\n <span *ngIf=\"f.errors.minlength\">Must be longer than {{validations.minlength}} characters.&nbsp;</span>\n <span *ngIf=\"f.errors.maxlength\">Must be lest than {{validations.maxlength}} characters.&nbsp;</span>\n <span *ngIf=\"f.errors.pattern\">{{ validations.pattern.text || \"Should match '\"+validations.pattern+\"' pattern.\" }}.&nbsp;</span>\n <span *ngIf=\"f.errors.custom\">{{f.errors.custom}}&nbsp;</span>\n </small>\n <small *ngIf='meta.hint' class=\"Vlt-form__element__hint\">{{meta.hint}}</small>\n</div>\n", styles: [".Vlt-form__element--big .Vlt-input input{padding-right:40px;text-overflow:ellipsis}@media screen and (-webkit-min-device-pixel-ratio: 0){.Vlt-form__element--big .Vlt-input input{line-height:20px}}.Vlt-form__element--big .Vlt-input input:disabled{cursor:not-allowed}.Vlt-form__element--big:hover .items-container,.Vlt-form__element--big:hover .main,.Vlt-form__element--big:hover input,.Vlt-form__element--big.active .items-container,.Vlt-form__element--big.active .main,.Vlt-form__element--big.active input{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.multiple .Vlt-composite.Vlt-dropdown{margin-top:3px}.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .items-container,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .main,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) input,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .items-container,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .main,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) input{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.multiple .items-container{background-color:var(--vgip-meta-input-bg-color);border:1px solid var(--vgip-meta-input-border-color);border-bottom:0;border-top-left-radius:6px;border-top-right-radius:6px}.Vlt-form__element--big.multiple .items-container.creatable{margin-right:62px}.Vlt-form__element--big.multiple .items-container .badges-container{overflow:auto;max-height:140px;padding:6px 4px 0 6px}.Vlt-form__element--big.multiple .items-container .badges-container .Vlt-badge{margin-bottom:3px;margin-left:0;margin-right:3px;overflow:hidden;max-width:100%}.Vlt-form__element--big.multiple:not(.has-value) .items-container{border:0}.Vlt-form__element--big.multiple.has-value .main,.Vlt-form__element--big.multiple.has-value input{border-top:0;border-top-left-radius:0;border-top-right-radius:0;box-shadow:none}.Vlt-form__element--big.Vlt-form__element--error .items-container,.Vlt-form__element--big.Vlt-form__element--error .main,.Vlt-form__element--big.Vlt-form__element--error input{border-color:#f25a6b;background:var(--vgip-meta-input-bg-color)}label.Vlt-truncate{padding-right:42px}.Vlt-dropdown__panel{width:100%}.Vlt-dropdown__panel .Vlt-dropdown__link--selected{background:rgba(44,45,48,.05)}.Vlt-dropdown__panel label{margin-top:0;padding:12px 20px;top:0;left:0;pointer-events:initial;position:initial;color:initial;font-size:inherit;transition:none;cursor:pointer}.Vlt-dropdown__panel label input{height:0}.Vlt-composite__append.right-actions{position:absolute;top:5px;right:10px;cursor:pointer}.Vlt-composite__append.right-actions .Vlt-composite__append--icon{width:36px;outline:none;position:initial;display:inline-block}.Vlt-composite__append.right-actions .Vlt-composite__append--icon svg{height:14px;width:14px}.Vlt-composite__append.right-actions .Vlt-composite__append--icon:hover svg,.Vlt-composite__append.right-actions .Vlt-composite__append--icon:focus svg{fill:var(--vgip-meta-input-accent-color)}.vgip-disable .Vlt-composite__append{cursor:not-allowed;pointer-events:none}\n"] }]
467
474
  }], ctorParameters: function () { return [{ type: i1.MetaContextService }]; } });
468
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvZmllbGRJbnB1dC9pbmRleC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21ldGEtdWkvc3JjL2xpYi9maWVsZElucHV0L3ZpZXcuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTFELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCwwRUFBMEU7QUFDMUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7Ozs7QUFHMUUsb0ZBQW9GO0FBT3BGLE1BQU0sT0FBTyxVQUFXLFNBQVEsYUFBYTtJQVczQyxZQUFxQixXQUErQjtRQUNsRCxLQUFLLEVBQUUsQ0FBQztRQURXLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQWtXNUMsYUFBUSxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDM0IsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsS0FBSyxvQkFBb0IsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUMzRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2IsMEJBQTBCO2dCQUMxQiwwREFBMEQ7YUFFM0Q7aUJBQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEtBQUsscUJBQXFCLEVBQUU7Z0JBQzFGLElBQUks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cUIsQ0FBQzthQUNuQztTQUNGO0lBQ0gsQ0FBQzsrR0EzV1UsVUFBVTttR0FBVixVQUFVLDJFQ3ZCdkIsdTZNQWlGQSxvekpENURpQixDQUFDLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQzs7NEZBRXhELFVBQVU7a0JBTHRCLFNBQVM7b0NBR08sQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQEF1dGhvcjogQWxleGFuZGVyLlZhbmdlbG92QHZvbmFnZS5jb21cbiAqIEBEYXRlOiAyMDE5LTA5LTE5IDE3OjM1OjA5XG4gKiBATGFzdCBNb2RpZmllZCBieTogQWxleGFuZGVyLlZhbmdlbG92QHZvbmFnZS5jb21cbiAqIEBMYXN0IE1vZGlmaWVkIHRpbWU6IDIwMjAtMDUtMTIgMTc6NDU6NDZcbiAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbENvbnRhaW5lciwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBGaWVsZEFic3RyYWN0IH0gZnJvbSAnLi4vZmllbGRBYnN0cmFjdCc7XG4vLyBpbXBvcnQgeyBJTWV0YUZpZWxkSW51dCB9IGZyb20gJy4uL2RlZmluaXRpb25zL2ZpZWxkcy9JTWV0YUZpZWxkSW5wdXQnO1xuaW1wb3J0IHsgdGVtcGxhdGVCdWlsZGVyIH0gZnJvbSAnLi4vY29tbW9uL3V0aWxzL3RlbXBsYXRlQnVpbGRlcic7XG5pbXBvcnQgeyByZWxhdGl2ZVRpbWVCdWlsZGVyIH0gZnJvbSAnLi4vY29tbW9uL3V0aWxzL3JlbGF0aXZlVGltZUJ1aWxkZXInO1xuaW1wb3J0IHsgTWV0YUNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbWV0YUNvbnRleHQnO1xuXG4vLyBpbXBvcnQgeyBNZXRhVmFsaWRhdGlvbnMgfSBmcm9tICcuLi9jb21tb24vZGVjb3JhdG9ycy9tZXRhVmFsaWRhdGlvbnMuZGVjb3JhdG9yJztcblxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnLi92aWV3Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zdHlsZS5zY3NzJ10sXG4gIHZpZXdQcm92aWRlcnM6IFt7IHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUV4aXN0aW5nOiBOZ0Zvcm0gfV1cbn0pXG5leHBvcnQgY2xhc3MgRmllbGRJbnB1dCBleHRlbmRzIEZpZWxkQWJzdHJhY3QgaW1wbGVtZW50cyBPbkluaXQge1xuICBpbnB1dDogYW55O1xuICBkcm9wZG93bjogYW55O1xuICBhY3RpdmVTdWdnZXN0aW9uSW5kZXg6IG51bWJlcjtcbiAgdmFsdWU6IGFueTtcbiAgbXVsdGlwbGU6IGJvb2xlYW47XG4gIGFkZFRleHQ7XG4gIHNob3dDbGVhcjogYm9vbGVhbjtcbiAgYXN5bmNTdWdnZXN0aW9uczogQXJyYXk8YW55PjtcbiAgaXNQaG9uZU51bWJlcjogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvciggcHJpdmF0ZSBtZXRhQ29udGV4dDogTWV0YUNvbnRleHRTZXJ2aWNlICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBnZXQgc3VnZ2VzdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXN5bmNTdWdnZXN0aW9ucyB8fCB0aGlzLm1ldGEuc3VnZ2VzdGlvbnMgfHwgW107XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm11bHRpcGxlID0gKHRoaXMubWV0YS50eXBlID09PSAnbXVsdGlzdHJpbmcnKSB8fCB0aGlzLm1ldGEubXVsdGlwbGU7XG4gICAgLy8gY29uc29sZS5sb2coJ0ZpZWxkSW5wdXQgaW5pdCcsIHRoaXMubWV0YS5uYW1lKTtcbiAgICB0aGlzLnZhbGlkYXRpb25BdHRyaWJ1dGVzID0gWydwYXR0ZXJuJywgJ3JlcXVpcmVkJywgJ21pbmxlbmd0aCcsICdtYXhsZW5ndGgnLCAnbWluJywgJ21heCcsICdzdGVwJ107XG4gICAgaWYgKHRoaXMubWV0YS5waWNrbGlzdCkgeyAvLyBqdXN0IGZvciB0ZXN0ISBhbGwgbWV0YWRhdGEgc2hvdWxkIGJlIHRyYW5zZm9ybWVkIHRvIHYzIHByb3RvY29sXG4gICAgICB0aGlzLm1ldGEuc3VnZ2VzdGlvbnMgPSAodGhpcy5tZXRhLnBpY2tsaXN0IHx8IFtdKS5tYXAoKHMpID0+IHMubGFiZWwpO1xuICAgIH1cbiAgICBpZiAodGhpcy5tZXRhLnR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAodGhpcy5tZXRhLnN1YnR5cGUgPT09ICdmbG9hdCcgJiYgIXRoaXMubWV0YS5zdGVwKSB7XG4gICAgICAgIHRoaXMubWV0YS5zdGVwID0gJzAuMDEnO1xuICAgICAgfVxuICAgICAgdGhpcy5tZXRhLnN1YnR5cGUgPSAnbnVtYmVyJztcbiAgICB9XG4gICAgaWYgKFsnZGF0ZScsICd0aW1lJywgJ2RhdGV0aW1lJ10uaW5kZXhPZih0aGlzLm1ldGEudHlwZSkgIT09IC0xKSB7XG4gICAgICB0aGlzLm1ldGEuc3VidHlwZSA9IHRoaXMubWV0YS50eXBlO1xuICAgICAgaWYgKHRoaXMubWV0YS50eXBlID09PSAnZGF0ZXRpbWUnKSB7XG4gICAgICAgIHRoaXMubWV0YS5zdWJ0eXBlID0gJ2RhdGV0aW1lLWxvY2FsJztcbiAgICAgIH1cbiAgICAgIGRlbGV0ZSB0aGlzLm11bHRpcGxlOyAvLyBubyBtdWx0aXBsZSBzdXBwb3J0IGZvciB0aW1lc3RhbXBzXG4gICAgfVxuICAgIHRoaXMuc2hvd0NsZWFyID0gIXRoaXMubXVsdGlwbGUgJiYgW1xuICAgICAgJycsICdzdHJpbmcnLCAndXJsJywgJ2VtYWlsJywgJ3Bhc3N3b3JkJywgJ3RlbCcsICdkYXRlJywgJ2RhdGV0aW1lLWxvY2FsJywgJ3RpbWUnXG4gICAgXS5pbmRleE9mKHRoaXMubWV0YS5zdWJ0eXBlIHx8ICcnKSAhPT0gLTE7XG4gICAgY29uc3Qgb3JpZ1ZhbHVlID0gdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLnBhcmVudCwgdGhpcy5tZXRhLm5hbWUsIHtcbiAgICAgIHNldDogKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZih2YWx1ZSkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSAodmFsdWUgaW5zdGFuY2VvZiBBcnJheSkgPyB2YWx1ZSA6IFt2YWx1ZV07XG4gICAgICAgICAgICB0aGlzLm1vZGVsID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCB2IG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICBpZiAoIXRoaXMubW9kZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsID0gW107XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiAodikgPT09ICdvYmplY3QnICYmIHYgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB2ID0gdi5pZCB8fCB2LnZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMubW9kZWwucHVzaCh2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm1vZGVsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mKHZhbHVlKSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgICYmICEodmFsdWUgPT09IG51bGwgJiYgKCh0eXBlb2YodGhpcy5tZXRhLnR5cGUpID09PSAndW5kZWZpbmVkJykgfHwgWydzdHJpbmcnLCAnbnVtYmVyJ10uaW5kZXhPZih0aGlzLm1ldGEudHlwZSkgIT09IC0xKSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1ldGEudHlwZSA9PT0gJ251bWJlcicgJiYgdHlwZW9mKHZhbHVlKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgKHZhbHVlKSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5pZCB8fCB2YWx1ZS52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChbJ2RhdGV0aW1lJywgJ2RhdGUnLCAnZGF0ZXRpbWUtbG9jYWwnXS5pbmRleE9mKHRoaXMubWV0YS5zdWJ0eXBlIHx8IHRoaXMubWV0YS50eXBlKSAhPT0gLTEgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBsZXQgZGF0ZTogRGF0ZTtcbiAgICAgICAgICAgICAgICBpZiAoKHR5cGVvZiAodmFsdWUpID09PSAnbnVtYmVyJykpIHtcbiAgICAgICAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShwYXJzZUludCh2YWx1ZSBhcyBhbnksIDEwKSk7XG4gICAgICAgICAgICAgICAgICBpZiAoJ2RhdGUnID09PSAodGhpcy5tZXRhLnR5cGUgfHwgdGhpcy5tZXRhLnN1YnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSArIChkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMCkpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBpZiAoJ2RhdGUnID09PSAodGhpcy5tZXRhLnN1YnR5cGUgfHwgdGhpcy5tZXRhLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShEYXRlLnBhcnNlKHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5wYXJzZShgJHt2YWx1ZX1aYCkgKyAobmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDApKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAodmFsdWUpID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLm1ldGEuc3VidHlwZSB8fCB0aGlzLm1ldGEudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdkYXRldGltZS1sb2NhbCc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RhdGV0aW1lJzoge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwgPSBgJHtkYXRlLmdldEZ1bGxZZWFyKCl9LSR7KCcwMCcgKyAoZGF0ZS5nZXRNb250aCgpICsgMSkpLnNsaWNlKC0yKX0tJHsoJzAwJyArIGRhdGUuZ2V0RGF0ZSgpKS5zbGljZSgtMil9YDtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsICs9IGBUJHsoJzAwJyArIGRhdGUuZ2V0SG91cnMoKSkuc2xpY2UoLTIpfTokeygnMDAnICsgZGF0ZS5nZXRNaW51dGVzKCkpLnNsaWNlKC0yKX1gO1xuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RhdGUnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbCA9IGRhdGUudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdO1xuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1ldGEudmFsdWVUeXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgaWYgKCh0aGlzLm1ldGEuc3VidHlwZSB8fCB0aGlzLm1ldGEudHlwZSkgPT09ICdkYXRlJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gZGF0ZS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF07XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gZGF0ZS50b0lTT1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBpZiAoKHRoaXMubWV0YS5zdWJ0eXBlIHx8IHRoaXMubWV0YS50eXBlKSA9PT0gJ2RhdGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGUuc2V0RnVsbFllYXIoZGF0ZS5nZXRVVENGdWxsWWVhcigpKTtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZS5zZXRNb250aChkYXRlLmdldFVUQ01vbnRoKCkpO1xuICAgICAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXRVVENEYXRlKCkpO1xuICAgICAgICAgICAgICAgICAgICBkYXRlLnNldE1pbnV0ZXMoMCk7XG4gICAgICAgICAgICAgICAgICAgIGRhdGUuc2V0SG91cnMoMCk7XG4gICAgICAgICAgICAgICAgICAgIGRhdGUuc2V0U2Vjb25kcygwKTtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZS5zZXRNaWxsaXNlY29uZHMoMCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSAtIChkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMCkpLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBkYXRlLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdEYXRlIHBhcnNlIGVycm9yJywgZS5tZXNzYWdlLCBgXCIke3ZhbHVlfVwiYCwgYCgke3R5cGVvZiAodmFsdWUpfSlgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICgndGltZScgPT09ICh0aGlzLm1ldGEuc3VidHlwZSB8fCB0aGlzLm1ldGEudHlwZSkpIHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBsZXQgZGF0ZTogRGF0ZTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mICh2YWx1ZSkgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICBkYXRlID0gbmV3IERhdGUocGFyc2VJbnQodmFsdWUgYXMgYW55LCAxMCkpO1xuICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlIDwgODY0MDAwMDApIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpICsgKGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwKSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgRGF0ZS5wYXJzZShuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvVC4qWi8sIGBUJHt2YWx1ZX1aYCkpICsgKG5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwKVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbCA9IGRhdGUudG9UaW1lU3RyaW5nKCkuc3BsaXQoJyAnKVswXTtcbiAgICAgICAgICAgICAgICBkYXRlLnNldEZ1bGxZZWFyKDE5NzApO1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0TW9udGgoMCk7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKDEpO1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0TWlsbGlzZWNvbmRzKDApO1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSAtIChkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMCkpLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0RhdGUgcGFyc2UgZXJyb3InLCBlLm1lc3NhZ2UsIGBcIiR7dmFsdWV9XCJgLCBgKCR7dHlwZW9mICh2YWx1ZSl9KWApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAoIXZhbHVlICYmICh0eXBlb2YodGhpcy5wcmV2TW9kZWwpID09PSAnc3RyaW5nJykgJiYgdGhpcy5pc1BlcnNpc3RlZFBhcmVudCkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gJyc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5tb2RlbCA9IHZhbHVlO1xuICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLm1vZGVsO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMudmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubWV0YS4kb3B0aW9uYWwgPSB0aGlzLmlzT3B0aW9uYWw7XG4gICAgICB9LFxuICAgICAgZ2V0OiAoKSA9PiB0aGlzLnZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdGhpcy5zZW5kVG9TZXJ2ZXIsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBpZiAodHlwZW9mKG9yaWdWYWx1ZSkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLnBhcmVudFt0aGlzLm1ldGEubmFtZV0gPSBvcmlnVmFsdWU7XG4gICAgfVxuICAgIGNvbnN0IGQgPSB0aGlzLm1ldGEuZGVmYXVsdCB8fCB0aGlzLm1ldGEuZGVmYXVsdFZhbHVlO1xuICAgIGlmIChkICYmIHR5cGVvZih0aGlzLm1vZGVsKSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIHRoaXMucGFyZW50W3RoaXMubWV0YS5uYW1lXSA9IFtdO1xuICAgICAgICBpZiAoZC5sZW5ndGgpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGR2IG9mIHRoaXMuZGVmYXVsdCkgeyAvLyBUT0RPID8/P1xuICAgICAgICAgICAgY29uc3QgZGVmYXVsdFZhbHVlSXRlbSA9ICh0eXBlb2YgKGR2KSA9PT0gJ3N0cmluZycgfHwgZHYgPT09IG51bGwpID8gZHYgOiAoZHYuaWQgfHwgZHYudmFsdWUpO1xuICAgICAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZUl0ZW0gfHwgZGVmYXVsdFZhbHVlSXRlbSA9PT0gMCkge1xuICAgICAgICAgICAgICB0aGlzLnBhcmVudFt0aGlzLm1ldGEubmFtZV0ucHVzaChkZWZhdWx0VmFsdWVJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9ICh0eXBlb2YgKGQpID09PSAnc3RyaW5nJykgPyBkIDogKGQuaWQgfHwgZC52YWx1ZSk7XG4gICAgICAgIGlmIChkZWZhdWx0VmFsdWUgfHwgZGVmYXVsdFZhbHVlID09PSAwKSB7XG4gICAgICAgICAgaWYgKC9eKGRhdGV8dGltZSkvLnRlc3QodGhpcy5tZXRhLnN1YnR5cGUpICYmIHR5cGVvZihkZWZhdWx0VmFsdWUpID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdID0gcmVsYXRpdmVUaW1lQnVpbGRlcih0aGlzLm1ldGEuc3VidHlwZSwgZGVmYXVsdFZhbHVlLCB0aGlzLnZhbGlkYXRpb25zLnN0ZXApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tZXRhLnR5cGUgPT09ICdzdHJpbmcnICYmIGRlZmF1bHRWYWx1ZSkge1xuICAgICAgICAgICAgICB0aGlzLnBhcmVudFt0aGlzLm1ldGEubmFtZV0gPSB0ZW1wbGF0ZUJ1aWxkZXIodGhpcy5tZXRhQ29udGV4dCwgZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMucGFyZW50W3RoaXMubWV0YS5uYW1lXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMucHJldmlldyAmJiB0aGlzLm1ldGFDb250ZXh0Lm9uQ2xpY2syRGlhbCAmJiBvcmlnVmFsdWUpIHtcbiAgICAgIHRoaXMuaXNQaG9uZU51bWJlciA9IC9eKD86MDB8XFwrKT8oKFswMV18NDR8NjF8NDh8MzMgXFxkfDI3fDMwfDMxfDM0fDM3MXwzODB8Mzl8NDF8NDIwfDUyfDQwfDkwfDkxKShcXHMpPyk/Wy0uL10/XFwoP1xcZD9cXGR7MSwzfVxcKT9bLVxccy4vXT9cXGQ/Wy1cXHMuL10/XFxkezEsNH1cXCk/Wy1cXHMuL10/XFxkezEsNH1bLS4vXT9cXGR7MSw0fShcXHNcXGRcXGQoJHwsKSk/KCxbLFxcZF0rIyk/JC8udGVzdChvcmlnVmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG9uQWN0aXZhdGVkKGV2KSB7XG4gICAgdGhpcy5pbnB1dCA9IGV2LnNyY0VsZW1lbnQ7XG4gICAgaWYgKCF0aGlzLmRyb3Bkb3duKSB7XG4gICAgICB0aGlzLmRyb3Bkb3duID0gZXYuc3JjRWxlbWVudC5wYXJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgfVxuICAgIHRoaXMuc2hvd0Ryb3Bkb3duKCk7XG4gIH1cblxuICBjbGVhcihldj8pIHtcbiAgICBkZWxldGUgdGhpcy5tb2RlbDtcbiAgICBkZWxldGUgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXg7XG4gICAgZGVsZXRlIHRoaXMuYXN5bmNTdWdnZXN0aW9ucztcbiAgICB0aGlzLm9uTW9kZWxDaGFuZ2UodGhpcy5tb2RlbCk7XG4gICAgaWYgKGV2KSB7XG4gICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgb25CbHVyKGV2KSB7XG4gICAgbGV0IGludGVybmFsQ29udHJvbCA9IGZhbHNlO1xuICAgIGlmIChldi5yZWxhdGVkVGFyZ2V0KSB7XG4gICAgICBpZiAoIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2LnJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgICAgIHRoaXMuZGlzbWlzc0Ryb3Bkb3duKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnRlcm5hbENvbnRyb2wgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5rZXlMaXN0ZW5lckFjdGl2ZSAmJiAhaW50ZXJuYWxDb250cm9sKSB7XG4gICAgICB0aGlzLmlucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmtleWRvd24pO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5rZXlMaXN0ZW5lckFjdGl2ZSkge1xuICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5jbGlja291dCk7XG4gICAgICAgIH1cbiAgICAgIH0sIDQwMCk7XG4gICAgICBkZWxldGUgdGhpcy5rZXlMaXN0ZW5lckFjdGl2ZTtcbiAgICB9XG4gIH1cblxuICBvbkFkZChldikge1xuICAgIGNvbnNvbGUubG9nKCdvbkFkZCcsIHRoaXMuYWRkVGV4dCk7XG4gICAgaWYgKHRoaXMuYWRkVGV4dCkge1xuICAgICAgaWYgKCh0aGlzLm1vZGVsIHx8IFtdKS5pbmRleE9mKHRoaXMuYWRkVGV4dCkgPT09IC0xKSB7XG4gICAgICAgIHRoaXMub25TdWdnZXN0aW9uU2VsZWN0KGV2LCB0aGlzLmFkZFRleHQpO1xuICAgICAgICBpZiAoIXRoaXMubWV0YS5zdWdnZXN0aW9ucykge1xuICAgICAgICAgIHRoaXMubWV0YS5zdWdnZXN0aW9ucyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWV0YS5zdWdnZXN0aW9ucy51bnNoaWZ0KHRoaXMuYWRkVGV4dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgfVxuICAgICAgZGVsZXRlIHRoaXMuYWRkVGV4dDtcbiAgICB9XG4gIH1cblxuICByZW1vdmUoZXYsIGl0ZW0pIHtcbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IG9wdGlvbkluZGV4ID0gdGhpcy5tb2RlbC5pbmRleE9mKGl0ZW0pO1xuICAgIGlmIChvcHRpb25JbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMubW9kZWwuc3BsaWNlKG9wdGlvbkluZGV4LCAxKTtcbiAgICAgIGlmICghdGhpcy5tb2RlbC5sZW5ndGgpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMubW9kZWw7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnZhbHVlO1xuICAgICAgfVxuICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHRoaXMubW9kZWwpO1xuICAgIH1cbiAgfVxuXG4gIG9uU3VnZ2VzdGlvblNlbGVjdChldiwgc3VnZ2VzdGlvbikge1xuICAgIGlmICghc3VnZ2VzdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuZm9jdXMoKTtcbiAgICBsZXQgc3VnZ2VzdGlvblZhbHVlID0gc3VnZ2VzdGlvbi5pZCB8fCBzdWdnZXN0aW9uLnZhbHVlIHx8IHN1Z2dlc3Rpb247XG4gICAgaWYgKHR5cGVvZihzdWdnZXN0aW9uVmFsdWUpID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKC9eKGRhdGV8dGltZSkvLnRlc3QodGhpcy5tZXRhLnN1YnR5cGUpKSB7XG4gICAgICAgIHN1Z2dlc3Rpb25WYWx1ZSA9IHJlbGF0aXZlVGltZUJ1aWxkZXIodGhpcy5tZXRhLnN1YnR5cGUsIHN1Z2dlc3Rpb25WYWx1ZSwgdGhpcy52YWxpZGF0aW9ucy5zdGVwKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5tZXRhLnR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHN1Z2dlc3Rpb25WYWx1ZSA9IHRlbXBsYXRlQnVpbGRlcih0aGlzLm1ldGFDb250ZXh0LCBzdWdnZXN0aW9uVmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3VnZ2VzdGlvblZhbHVlID0gc3VnZ2VzdGlvbjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIGlmICghdGhpcy5tb2RlbCkge1xuICAgICAgICB0aGlzLm1vZGVsID0gW107XG4gICAgICB9XG4gICAgICBsZXQgZXhpc3RpbmdJdGVtSW5kZXggPSB0aGlzLm1vZGVsLmluZGV4T2Yoc3VnZ2VzdGlvblZhbHVlKTtcbiAgICAgIGlmIChleGlzdGluZ0l0ZW1JbmRleCA9PT0gLTEpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5wdXNoKHN1Z2dlc3Rpb25WYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm1vZGVsLnNwbGljZShleGlzdGluZ0l0ZW1JbmRleCwgMSk7XG4gICAgICAgIGV4aXN0aW5nSXRlbUluZGV4ID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHRoaXMubW9kZWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpc21pc3NEcm9wZG93bigpO1xuICAgICAgdGhpcy5tb2RlbCA9IHN1Z2dlc3Rpb25WYWx1ZTtcbiAgICAgIHRoaXMub25Nb2RlbENoYW5nZShzdWdnZXN0aW9uVmFsdWUpO1xuICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPSB0aGlzLnN1Z2dlc3Rpb25zLmluZGV4T2Yoc3VnZ2VzdGlvbik7XG4gICAgfVxuICB9XG5cbiAgdGV4dFRvU3BlZWNoKCkgeyB9XG5cbiAgZGlzbWlzc0Ryb3Bkb3duKGV2ZW50Pykge1xuICAgIGlmIChldmVudCkge1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kcm9wZG93bikge1xuICAgICAgdGhpcy5kcm9wZG93bi5jbGFzc0xpc3QucmVtb3ZlKCdWbHQtZHJvcGRvd24tLWV4cGFuZGVkJyk7XG4gICAgfVxuICB9XG5cbiAgY2xpY2syZGlhbChldikge1xuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5tZXRhQ29udGV4dC5vbkNsaWNrMkRpYWwodGhpcy5tb2RlbCwgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xvc2VzdCgndmdpcC1tZXRhLWxheW91dFtkYXRhLXZybl0nKT8uZGF0YXNldD8udnJuKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZURyb3Bkb3duSXNWaXNpYmxlKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgaG9sZGVyID0gdGhpcy5kcm9wZG93bi5jbG9zZXN0KCcuVmx0LWNhcmRfX2NvbnRlbnQsIC5WbHQtbW9kYWxfX2NvbnRlbnQnKTtcbiAgICAgIGlmIChob2xkZXIpIHtcbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuVmx0LWRyb3Bkb3duX19wYW5lbCcpO1xuICAgICAgICBpZiAoZWwpIHtcbiAgICAgICAgICBjb25zdCBlbFJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICBjb25zdCBob2xkZXJSZWN0ID0gaG9sZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgIGlmIChob2xkZXJSZWN0LnRvcCArIGhvbGRlclJlY3QuaGVpZ2h0IDwgZWxSZWN0LnRvcCArIGVsUmVjdC5oZWlnaHQpIHtcbiAgICAgICAgICAgIGVsLnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICdlbmQnIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIDQwMCk7XG4gIH1cblxuICBwcml2YXRlIHNob3dEcm9wZG93bigpIHtcbiAgICBpZiAodGhpcy5tZXRhLnN1Z2dlc3Rpb25zPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZHJvcGRvd24uY2xhc3NMaXN0LmFkZCgnVmx0LWRyb3Bkb3duLS1leHBhbmRlZCcpO1xuICAgICAgdGhpcy5lbnN1cmVEcm9wZG93bklzVmlzaWJsZSgpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMua2V5TGlzdGVuZXJBY3RpdmUpIHtcbiAgICAgIHRoaXMuaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMua2V5ZG93bik7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmNsaWNrb3V0KTtcbiAgICAgIH0sIDIwMCk7XG4gICAgICB0aGlzLmtleUxpc3RlbmVyQWN0aXZlID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZih0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAodGhpcy5tb2RlbCAmJiB0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aCkge1xuICAgICAgICBmb3IgKGxldCBzdWdnZXN0aW9uSW5kZXggPSAwOyBzdWdnZXN0aW9uSW5kZXggPCB0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aDsgc3VnZ2VzdGlvbkluZGV4KyspIHtcbiAgICAgICAgICBpZiAodGhpcy5tb2RlbCA9PT0gdGhpcy5zdWdnZXN0aW9uc1tzdWdnZXN0aW9uSW5kZXhdKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA9IHN1Z2dlc3Rpb25JbmRleDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xpY2tvdXQgPSAoZXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQudGFyZ2V0LmNsYXNzTmFtZSA9PT0gJ1ZsdC1kcm9wZG93bl9fbGluaycgJiYgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgLy8gdGhpcy5kaXNtaXNzRHJvcGRvd24oKTtcbiAgICAgIC8vIHRoaXMucGFyZW50W3RoaXMubWV0YS5uYW1lXSA9IGV2ZW50LnRhcmdldC50ZXh0Q29udGVudDtcblxuICAgIH0gZWxzZSBpZiAoZXZlbnQudGFyZ2V0ICE9PSB0aGlzLmlucHV0ICYmIGV2ZW50LnRhcmdldC5jbGFzc05hbWUgIT09ICdWbHQtZHJvcGRvd25fX3RpdGxlJykge1xuICAgICAgdGhpcy5kaXNtaXNzRHJvcGRvd24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIGtleWRvd24gPSAoZXZlbnQpID0+IHtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnQXJyb3dEb3duJzoge1xuICAgICAgICBpZiAoWydkYXRldGltZScsICd0aW1lJywgJ2RhdGUnLCAnZGF0ZXRpbWUtbG9jYWwnXS5pbmRleE9mKHRoaXMubWV0YS5zdWJ0eXBlIHx8IHRoaXMubWV0YS50eXBlKSAhPT0gLTEpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNob3dEcm9wZG93bigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodHlwZW9mICh0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4Kys7XG4gICAgICAgICAgaWYgKHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID49IHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnQXJyb3dVcCc6IHtcbiAgICAgICAgaWYgKFsnZGF0ZXRpbWUnLCAndGltZScsICdkYXRlJywgJ2RhdGV0aW1lLWxvY2FsJ10uaW5kZXhPZih0aGlzLm1ldGEuc3VidHlwZSB8fCB0aGlzLm1ldGEudHlwZSkgIT09IC0xKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zaG93RHJvcGRvd24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHR5cGVvZiAodGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXgpID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID0gdGhpcy5zdWdnZXN0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4LS07XG4gICAgICAgICAgaWYgKHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4IDwgMCkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPSB0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aCAtIDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnU3BhY2UnOlxuICAgICAgY2FzZSAnRW50ZXInOiB7XG4gICAgICAgIGlmICh0eXBlb2YgKHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4KSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHRoaXMub25TdWdnZXN0aW9uU2VsZWN0KGV2ZW50LCB0aGlzLnN1Z2dlc3Rpb25zW3RoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4XSk7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4O1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnRXNjYXBlJzoge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5kaXNtaXNzRHJvcGRvd24oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5tb2RlbCkge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4O1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuYXN5bmNTdWdnZXN0aW9ucztcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZih0aGlzLm1vZGVsKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRoaXMuYXN5bmNTdWdnZXN0aW9ucyA9ICh0aGlzLm1ldGEuc3VnZ2VzdGlvbnMgfHwgW10pLmZpbHRlcigocykgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBzdWdnZXN0aW9uVGV4dCA9IChzLmlkIHx8IHMudmFsdWUgfHwgcyB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHN1Z2dlc3Rpb25UZXh0LmluZGV4T2YodGhpcy5tb2RlbC50b0xvd2VyQ2FzZSgpKSAhPT0gLTE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxufVxuIiwiPGRpdiBjbGFzcz0ndmdpcC1tZXRhLWZpZWxkLXByZXZpZXcnICpuZ0lmPSdwcmV2aWV3ICYmIG1vZGVsJz5cbiAgPGRpdiBjbGFzcz0ndmdpcC1tZXRhLWZpZWxkLWxhYmVsJyBbdGl0bGVdPSdtZXRhLmxhYmVsIHx8IG1ldGEubmFtZSc+e3ttZXRhLmxhYmVsIHx8IG1ldGEubmFtZX19PC9kaXY+XG4gIDxkaXYgY2xhc3M9J3ZnaXAtbWV0YS1maWVsZC12YWx1ZSBfX2d1Jz5cbiAgICA8YSAqbmdJZj1cImlzUGhvbmVOdW1iZXI7IGVsc2UgZWxzZUJsb2NrXCIgaHJlZj0nIycgKGNsaWNrKT1cImNsaWNrMmRpYWwoJGV2ZW50KVwiIGNsYXNzPVwiVmx0LXRleHQtbGlua1wiIGFyaWEtbGFiZWw9J0RpYWwnPlxuICAgICAgPHN2ZyBjbGFzcz1cIlZsdC1pY29uIFZsdC1pY29uLS1zbWFsbGVyXCIgc3R5bGU9XCJtYXJnaW4tdG9wOiAtM3B4O1wiPlxuICAgICAgICA8dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tcGhvbmUtZnVsbFwiIC8+XG4gICAgICA8L3N2Zz5cbiAgICAgIHt7bW9kZWx9fVxuICAgIDwvYT5cbiAgICA8bmctdGVtcGxhdGUgI2Vsc2VCbG9jaz57e21vZGVsfX08L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiAqbmdJZj0nIXByZXZpZXcnIGNsYXNzPVwiVmx0LWZvcm1fX2VsZW1lbnQgVmx0LWZvcm1fX2VsZW1lbnQtLWJpZ1wiIFtuZ0NsYXNzXT1cInsnVmx0LWZvcm1fX2VsZW1lbnQtLWVycm9yJzogZi5pbnZhbGlkICYmICgoZiB8IG1ldGFNb2RlbCkuX3BhcmVudC5zdWJtaXR0ZWQgfHwgKGYgfCBtZXRhTW9kZWwgKS50b3VjaGVkKSwgJ211bHRpcGxlJzogbXVsdGlwbGUsICdoYXMtdmFsdWUnOiBmLnZhbHVlLCBhY3RpdmU6IGtleUxpc3RlbmVyQWN0aXZlIH1cIj5cbiAgPGRpdiAqbmdJZj0nbXVsdGlwbGUnIGNsYXNzPSdpdGVtcy1jb250YWluZXInPlxuICAgIDxkaXYgKm5nSWY9J21vZGVsJyBjbGFzcz0nYmFkZ2VzLWNvbnRhaW5lciBrZWVwLWZvY3VzJyAoY2xpY2spPSdmb2N1cygpJz4gPCEtLSBlc2xpbnQtZGlzYWJsZS1saW5lIC0tPlxuICAgICAgPGRpdiAqbmdGb3I9J2xldCBpdGVtIG9mIG1vZGVsJyBjbGFzcz1cIlZsdC1iYWRnZSBWbHQtYmFkZ2UtLWFwcCBWbHQtYmFkZ2UtLWxhcmdlIGtlZXAtZm9jdXNcIj5cbiAgICAgICAge3tpdGVtfX1cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIlZsdC1iYWRnZV9fZGlzbWlzcyBrZWVwLWZvY3VzXCIgKGNsaWNrKT0ncmVtb3ZlKCRldmVudCwgaXRlbSknPjwvYnV0dG9uPiA8IS0tIGVzbGludC1kaXNhYmxlLWxpbmUgQGFuZ3VsYXItZXNsaW50L3RlbXBsYXRlL2VsZW1lbnRzLWNvbnRlbnQgLS0+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJWbHQtaW5wdXQgVmx0LWRyb3Bkb3duXCIgc3R5bGU9J2Rpc3BsYXk6IGJsb2NrOycgW25nQ2xhc3NdPVwieyd2Z2lwLWRpc2FibGUnOiBkaXNhYmxlZH1cIj5cbiAgICA8bGFiZWwgY2xhc3M9J3dyYXBwZXInPlxuICAgICAgPGlucHV0IGNsYXNzPSdtYWluIG1vZGVsJyBbcGF0dGVybl09XCJ2YWxpZGF0aW9ucy5wYXR0ZXJuID8gdmFsaWRhdGlvbnMucGF0dGVybi52YWx1ZSB8fCB2YWxpZGF0aW9ucy5wYXR0ZXJuIDogbnVsbFwiIFtyZXF1aXJlZF09J3ZhbGlkYXRpb25zLnJlcXVpcmVkJyBbbWlubGVuZ3RoXT0ndmFsaWRhdGlvbnMubWlubGVuZ3RoJyBbbWF4bGVuZ3RoXT0ndmFsaWRhdGlvbnMubWF4bGVuZ3RoJyBbbWluXT0ndmFsaWRhdGlvbnMubWluJyBbbWF4XT0ndmFsaWRhdGlvbnMubWF4JyBbc3RlcF09J3ZhbGlkYXRpb25zLnN0ZXAnIFtkaXNhYmxlZF09J2Rpc2FibGVkJyBbcmVhZG9ubHldPVwicmVhZG9ubHlcIiBbKG5nTW9kZWwpXT0nbW9kZWwnIChuZ01vZGVsQ2hhbmdlKT1cIm9uTW9kZWxDaGFuZ2UoJGV2ZW50KVwiICNmPSduZ01vZGVsJyBbbmFtZV09J25hbWUnIFt0eXBlXT1cIm11bHRpcGxlID8gJ2hpZGRlbicgOiAobWV0YS5zdWJ0eXBlIHx8ICd0ZXh0JylcIiBwbGFjZWhvbGRlcj1cIiBcIiAoY2xpY2spPSdvbkFjdGl2YXRlZCgkZXZlbnQpJyAoZm9jdXMpPSdvbkFjdGl2YXRlZCgkZXZlbnQpJyAoYmx1cik9J29uQmx1cigkZXZlbnQpJy8+XG4gICAgICA8aW5wdXQgKm5nSWY9J211bHRpcGxlJyBjbGFzcz0nbWFpbicgW3BhdHRlcm5dPVwidmFsaWRhdGlvbnMucGF0dGVybiA/IHZhbGlkYXRpb25zLnBhdHRlcm4udmFsdWUgfHwgdmFsaWRhdGlvbnMucGF0dGVybiA6IG51bGxcIiBbbWlubGVuZ3RoXT0ndmFsaWRhdGlvbnMubWlubGVuZ3RoJyBbbWF4bGVuZ3RoXT0ndmFsaWRhdGlvbnMubWF4bGVuZ3RoJyBbbWluXT0ndmFsaWRhdGlvbnMubWluJyBbbWF4XT0ndmFsaWRhdGlvbnMubWF4JyBbKG5nTW9kZWwpXT0nYWRkVGV4dCcgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCIgW3R5cGVdPVwibWV0YS5zdWJ0eXBlIHx8ICd0ZXh0J1wiIFtkaXNhYmxlZF09J2Rpc2FibGVkJyBbcmVhZG9ubHldPSdyZWFkb25seScgcGxhY2Vob2xkZXI9XCIrQWRkXCIgKGtleWRvd24uZW50ZXIpPSdvbkFkZCgkZXZlbnQpJyAoY2xpY2spPSdvbkFjdGl2YXRlZCgkZXZlbnQpJyAoZm9jdXMpPSdvbkFjdGl2YXRlZCgkZXZlbnQpJyAoYmx1cik9J29uQmx1cigkZXZlbnQpJy8+XG4gICAgICA8bGFiZWwgY2xhc3M9J1ZsdC10cnVuY2F0ZSc+e3ttZXRhLmxhYmVsIHx8IG1ldGEubmFtZX19PHNwYW4gKm5nSWY9J3ZhbGlkYXRpb25zLnJlcXVpcmVkJyBjbGFzcz0nVmx0LXJlZCc+Kjwvc3Bhbj4mbmJzcDs8c3BhbiBjbGFzcz0nVmx0LWJsYWNrJyAqbmdJZj0nbW9kZWwgJiYgbXVsdGlwbGUnPih7e21vZGVsLmxlbmd0aH19KTwvc3Bhbj48L2xhYmVsPiA8IS0tIGVzbGludC1kaXNhYmxlLWxpbmUgQGFuZ3VsYXItZXNsaW50L3RlbXBsYXRlL2xhYmVsLWhhcy1hc3NvY2lhdGVkLWNvbnRyb2wgLS0+XG4gICAgPC9sYWJlbD5cbiAgICA8ZGl2IGNsYXNzPSdWbHQtY29tcG9zaXRlX19hcHBlbmQgcmlnaHQtYWN0aW9ucyc+XG4gICAgICA8YSBocmVmPScjJyAqbmdJZj0nbW9kZWwgJiYgc2hvd0NsZWFyJyBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX2FwcGVuZC0taWNvblwiIChjbGljayk9J2NsZWFyKCRldmVudCknPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9faWNvblwiPlxuICAgICAgICAgIDxzdmc+PHVzZSB4bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLWNyb3NzXCIvPjwvc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvYT5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIDxkaXYgKm5nSWY9XCIhbWV0YS5zdWJ0eXBlIHx8IG1ldGEuc3VidHlwZSA9PSAndGV4dCdcIiBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX2FwcGVuZCBWbHQtY29tcG9zaXRlX19hcHBlbmQtLWljb25cIiBzdHlsZT0nYm90dG9tOiA3cHg7IHJpZ2h0OiAxMHB4OyBwYWRkaW5nOiAzcHg7IHdpZHRoOiBpbml0aWFsOyBoZWlnaHQ6IGluaXRpYWw7IGN1cnNvcjogcG9pbnRlcjsnPlxuICAgICAgPGRpdiAqbmdJZj1cIiFtZXRhLnR5cGUgfHwgbWV0YS50eXBlID09PSAnc3RyaW5nJ1wiIGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9faWNvblwiIChjbGljayk9J3RleHRUb1NwZWVjaCgpJz5cbiAgICAgICAgPHN2Zz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tbWljcm9waG9uZVwiLz48L3N2Zz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PiAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwic3VnZ2VzdGlvbnMubGVuZ3RoXCIgY2xhc3M9XCJWbHQtZHJvcGRvd25fX3BhbmVsXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiVmx0LWRyb3Bkb3duX19wYW5lbF9fY29udGVudCBWbHQtZHJvcGRvd25fX3BhbmVsX19jb250ZW50LS1zY3JvbGwtYXJlYSBzdWdnZXN0aW9uc1wiPlxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJWbHQtZHJvcGRvd25fX3RpdGxlXCIgc3R5bGU9J3BhZGRpbmctbGVmdDogMTNweDsnPlxuICAgICAgICAgIFN1Z2dlc3Rpb25zXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIlZsdC1kcm9wZG93bl9fY2xvc2UgVmx0LXdoaXRlXCIgKGNsaWNrKT0nZGlzbWlzc0Ryb3Bkb3duKCRldmVudCknPlxuICAgICAgICAgICAgPHN2ZyBjbGFzcz0nVmx0LWljb24gVmx0LWljb24tLXNtYWxsJz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tY3Jvc3NcIi8+PC9zdmc+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cIlZsdC1kcm9wZG93bl9fYmxvY2tcIj48L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj0nZHJvcGRvd24nIGNsYXNzPVwiVmx0LWRyb3Bkb3duX19zY3JvbGxcIj5cbiAgICAgICAgICA8YSBocmVmPScjJyBbbmdDbGFzc109XCJ7ICdWbHQtZHJvcGRvd25fX2xpbmstLXNlbGVjdGVkJzogKGFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA9PT0gaSkgfVwiIChjbGljayk9J29uU3VnZ2VzdGlvblNlbGVjdCgkZXZlbnQsIHN1Z2dlc3Rpb24pJyAqbmdGb3I9J2xldCBzdWdnZXN0aW9uIG9mIHN1Z2dlc3Rpb25zOyBsZXQgaSA9IGluZGV4JyBjbGFzcz1cIlZsdC1kcm9wZG93bl9fbGlua1wiIHN0eWxlPSdwYWRkaW5nOiAwOyc+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPSdtdWx0aXBsZScgY2xhc3M9XCJWbHQtY2hlY2tib3hcIiBzdHlsZT0nd2lkdGg6IDEwMCU7Jz5cbiAgICAgICAgICAgICAgPGxhYmVsIFt0aXRsZV09J3N1Z2dlc3Rpb24ubGFiZWwgfHwgc3VnZ2VzdGlvbic+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJWbHQtY2hlY2tib3hfX2J1dHRvblwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT0nbW9kZWwgJiYgbW9kZWwuaW5kZXhPZihzdWdnZXN0aW9uKSAhPT0gLTEnLz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiVmx0LWNoZWNrYm94X19pY29uXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICB7e3N1Z2dlc3Rpb24ubGFiZWwgfHwgc3VnZ2VzdGlvbn19XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9JyFtdWx0aXBsZScgc3R5bGU9J3BhZGRpbmc6IDEycHggMjBweDsnPlxuICAgICAgICAgICAgICB7e3N1Z2dlc3Rpb24ubGFiZWwgfHwgc3VnZ2VzdGlvbn19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPSchbXVsdGlwbGUnIGNsYXNzPVwiVmx0LWRyb3Bkb3duX19ibG9ja1wiPjwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPSdtdWx0aXBsZScgY2xhc3M9XCJWbHQtZHJvcGRvd25fX2Jsb2NrIFZsdC1kcm9wZG93bl9fYmxvY2stLW5vd3JhcFwiIHN0eWxlPSdwYWRkaW5nOiA4cHggMTZweCAxNnB4Oyc+XG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPSdjbGVhcigkZXZlbnQpJyB0eXBlPSdidXR0b24nIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS1zZWNvbmRhcnkgVmx0LWJ0bi0tYXBwIFZsdC1idG4tLXNtYWxsIFZsdC1idG4tLW91dGxpbmVcIj5DbGVhciBhbGw8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9J2Rpc21pc3NEcm9wZG93bigkZXZlbnQpJyB0eXBlPSdidXR0b24nIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS1zZWNvbmRhcnkgVmx0LWJ0bi0tYXBwIFZsdC1idG4tLXNtYWxsXCI+RG9uZTwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPHNtYWxsICpuZ0lmPSdmLmludmFsaWQgJiYgKChmIHwgbWV0YU1vZGVsKS5fcGFyZW50LnN1Ym1pdHRlZCB8fCAoKGYgfCBtZXRhTW9kZWwgKS50b3VjaGVkICYmIGtleUxpc3RlbmVyQWN0aXZlKSknIGNsYXNzPVwiVmx0LWZvcm1fX2VsZW1lbnRfX2Vycm9yXCI+XG4gICAgPHNwYW4gKm5nSWY9XCJmLmVycm9ycy5yZXF1aXJlZFwiPlJlcXVpcmVkLiZuYnNwOzwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cImYuZXJyb3JzLm1pbmxlbmd0aFwiPk11c3QgYmUgbG9uZ2VyIHRoYW4ge3t2YWxpZGF0aW9ucy5taW5sZW5ndGh9fSBjaGFyYWN0ZXJzLiZuYnNwOzwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cImYuZXJyb3JzLm1heGxlbmd0aFwiPk11c3QgYmUgbGVzdCB0aGFuIHt7dmFsaWRhdGlvbnMubWF4bGVuZ3RofX0gY2hhcmFjdGVycy4mbmJzcDs8L3NwYW4+XG4gICAgPHNwYW4gKm5nSWY9XCJmLmVycm9ycy5wYXR0ZXJuXCI+e3sgdmFsaWRhdGlvbnMucGF0dGVybi50ZXh0IHx8IFwiU2hvdWxkIG1hdGNoICdcIit2YWxpZGF0aW9ucy5wYXR0ZXJuK1wiJyBwYXR0ZXJuLlwiIH19LiZuYnNwOzwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cImYuZXJyb3JzLmN1c3RvbVwiPnt7Zi5lcnJvcnMuY3VzdG9tfX0mbmJzcDs8L3NwYW4+XG4gIDwvc21hbGw+XG4gIDxzbWFsbCAqbmdJZj0nbWV0YS5oaW50JyBjbGFzcz1cIlZsdC1mb3JtX19lbGVtZW50X19oaW50XCI+e3ttZXRhLmhpbnR9fTwvc21hbGw+XG48L2Rpdj5cbiJdfQ==
475
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvZmllbGRJbnB1dC9pbmRleC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21ldGEtdWkvc3JjL2xpYi9maWVsZElucHV0L3ZpZXcuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTFELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCwwRUFBMEU7QUFDMUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7Ozs7QUFHMUUsb0ZBQW9GO0FBT3BGLE1BQU0sT0FBTyxVQUFXLFNBQVEsYUFBYTtJQVkzQyxZQUFxQixXQUErQjtRQUNsRCxLQUFLLEVBQUUsQ0FBQztRQURXLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQXlXNUMsYUFBUSxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDM0IsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsS0FBSyxvQkFBb0IsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUMzRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2IsMEJBQTBCO2dCQUMxQiwwREFBMEQ7YUFFM0Q7aUJBQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEtBQUsscUJBQXFCLEVBQUU7Z0JBQzFGLElBQUks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LElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLFdBQVcsRUFBRTtZQUN0RCxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUU7Z0JBQ3pDLEtBQUssSUFBSSxlQUFlLEdBQUcsQ0FBQyxFQUFFLGVBQWUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxlQUFlLEVBQUUsRUFBRTtvQkFDMUYsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLEVBQUU7d0JBQ3BELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxlQUFlLENBQUM7d0JBQzdDLE9BQU87cUJBQ1I7aUJBQ0Y7Z0JBQ0QsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUM7YUFDbkM7U0FDRjtJQUNILENBQUM7K0dBblhVLFVBQVU7bUdBQVYsVUFBVSwyRUN2QnZCLDI4TUFpRkEsb3pKRDVEaUIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUM7OzRGQUV4RCxVQUFVO2tCQUx0QixTQUFTO29DQUdPLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIEBBdXRob3I6IEFsZXhhbmRlci5WYW5nZWxvdkB2b25hZ2UuY29tXG4gKiBARGF0ZTogMjAxOS0wOS0xOSAxNzozNTowOVxuICogQExhc3QgTW9kaWZpZWQgYnk6IEFsZXhhbmRlci5WYW5nZWxvdkB2b25hZ2UuY29tXG4gKiBATGFzdCBNb2RpZmllZCB0aW1lOiAyMDIwLTA1LTEyIDE3OjQ1OjQ2XG4gKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xDb250YWluZXIsIE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgRmllbGRBYnN0cmFjdCB9IGZyb20gJy4uL2ZpZWxkQWJzdHJhY3QnO1xuLy8gaW1wb3J0IHsgSU1ldGFGaWVsZEludXQgfSBmcm9tICcuLi9kZWZpbml0aW9ucy9maWVsZHMvSU1ldGFGaWVsZElucHV0JztcbmltcG9ydCB7IHRlbXBsYXRlQnVpbGRlciB9IGZyb20gJy4uL2NvbW1vbi91dGlscy90ZW1wbGF0ZUJ1aWxkZXInO1xuaW1wb3J0IHsgcmVsYXRpdmVUaW1lQnVpbGRlciB9IGZyb20gJy4uL2NvbW1vbi91dGlscy9yZWxhdGl2ZVRpbWVCdWlsZGVyJztcbmltcG9ydCB7IE1ldGFDb250ZXh0U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL21ldGFDb250ZXh0JztcblxuLy8gaW1wb3J0IHsgTWV0YVZhbGlkYXRpb25zIH0gZnJvbSAnLi4vY29tbW9uL2RlY29yYXRvcnMvbWV0YVZhbGlkYXRpb25zLmRlY29yYXRvcic7XG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJy4vdmlldy5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3R5bGUuc2NzcyddLFxuICB2aWV3UHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLCB1c2VFeGlzdGluZzogTmdGb3JtIH1dXG59KVxuZXhwb3J0IGNsYXNzIEZpZWxkSW5wdXQgZXh0ZW5kcyBGaWVsZEFic3RyYWN0IGltcGxlbWVudHMgT25Jbml0IHtcbiAgaW5wdXQ6IGFueTtcbiAgZHJvcGRvd246IGFueTtcbiAgYWN0aXZlU3VnZ2VzdGlvbkluZGV4OiBudW1iZXI7XG4gIHZhbHVlOiBhbnk7XG4gIG11bHRpcGxlOiBib29sZWFuO1xuICBhZGRUZXh0O1xuICBzaG93Q2xlYXI6IGJvb2xlYW47XG4gIGFzeW5jU3VnZ2VzdGlvbnM6IEFycmF5PGFueT47XG4gIGlzUGhvbmVOdW1iZXI6IGJvb2xlYW47XG4gIGxvZ2ljYWxTdWJ0eXBlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoIHByaXZhdGUgbWV0YUNvbnRleHQ6IE1ldGFDb250ZXh0U2VydmljZSApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgZ2V0IHN1Z2dlc3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmFzeW5jU3VnZ2VzdGlvbnMgfHwgdGhpcy5tZXRhLnN1Z2dlc3Rpb25zIHx8IFtdO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5tdWx0aXBsZSA9ICh0aGlzLm1ldGEudHlwZSA9PT0gJ211bHRpc3RyaW5nJykgfHwgdGhpcy5tZXRhLm11bHRpcGxlO1xuICAgIC8vIGNvbnNvbGUubG9nKCdGaWVsZElucHV0IGluaXQnLCB0aGlzLm1ldGEubmFtZSk7XG4gICAgdGhpcy52YWxpZGF0aW9uQXR0cmlidXRlcyA9IFsncGF0dGVybicsICdyZXF1aXJlZCcsICdtaW5sZW5ndGgnLCAnbWF4bGVuZ3RoJywgJ21pbicsICdtYXgnLCAnc3RlcCddO1xuICAgIGlmICh0aGlzLm1ldGEucGlja2xpc3QpIHsgLy8ganVzdCBmb3IgdGVzdCEgYWxsIG1ldGFkYXRhIHNob3VsZCBiZSB0cmFuc2Zvcm1lZCB0byB2MyBwcm90b2NvbFxuICAgICAgdGhpcy5tZXRhLnN1Z2dlc3Rpb25zID0gKHRoaXMubWV0YS5waWNrbGlzdCB8fCBbXSkubWFwKChzKSA9PiBzLmxhYmVsKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubWV0YS50eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgdGhpcy5sb2dpY2FsU3VidHlwZSA9ICdudW1iZXInO1xuICAgIH1cbiAgICBpZiAoWydkYXRlJywgJ3RpbWUnLCAnZGF0ZXRpbWUnXS5pbmRleE9mKHRoaXMubWV0YS50eXBlKSAhPT0gLTEpIHtcbiAgICAgIHRoaXMubG9naWNhbFN1YnR5cGUgPSB0aGlzLm1ldGEudHlwZTtcbiAgICAgIGlmICh0aGlzLm1ldGEudHlwZSA9PT0gJ2RhdGV0aW1lJykge1xuICAgICAgICB0aGlzLmxvZ2ljYWxTdWJ0eXBlID0gJ2RhdGV0aW1lLWxvY2FsJztcbiAgICAgIH1cbiAgICAgIGRlbGV0ZSB0aGlzLm11bHRpcGxlOyAvLyBubyBtdWx0aXBsZSBzdXBwb3J0IGZvciB0aW1lc3RhbXBzXG4gICAgfVxuICAgIHRoaXMuc2hvd0NsZWFyID0gIXRoaXMubXVsdGlwbGUgJiYgW1xuICAgICAgJycsICdzdHJpbmcnLCAndXJsJywgJ2VtYWlsJywgJ3Bhc3N3b3JkJywgJ3RlbCcsICdkYXRlJywgJ2RhdGV0aW1lLWxvY2FsJywgJ3RpbWUnXG4gICAgXS5pbmRleE9mKHRoaXMubWV0YS5zdWJ0eXBlIHx8ICcnKSAhPT0gLTE7XG4gICAgY29uc3Qgb3JpZ1ZhbHVlID0gdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLnBhcmVudCwgdGhpcy5tZXRhLm5hbWUsIHtcbiAgICAgIHNldDogKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZih2YWx1ZSkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSAodmFsdWUgaW5zdGFuY2VvZiBBcnJheSkgPyB2YWx1ZSA6IFt2YWx1ZV07XG4gICAgICAgICAgICB0aGlzLm1vZGVsID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCB2IG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICBpZiAoIXRoaXMubW9kZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsID0gW107XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiAodikgPT09ICdvYmplY3QnICYmIHYgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB2ID0gdi5pZCB8fCB2LnZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMubW9kZWwucHVzaCh2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm1vZGVsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mKHZhbHVlKSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgICYmICEodmFsdWUgPT09IG51bGwgJiYgKCh0eXBlb2YodGhpcy5tZXRhLnR5cGUpID09PSAndW5kZWZpbmVkJykgfHwgWydzdHJpbmcnLCAnbnVtYmVyJ10uaW5kZXhPZih0aGlzLm1ldGEudHlwZSkgIT09IC0xKSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1ldGEudHlwZSA9PT0gJ251bWJlcicgJiYgdHlwZW9mKHZhbHVlKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgKHZhbHVlKSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5pZCB8fCB2YWx1ZS52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChbJ2RhdGV0aW1lJywgJ2RhdGUnLCAnZGF0ZXRpbWUtbG9jYWwnXS5pbmRleE9mKHRoaXMubWV0YS5zdWJ0eXBlIHx8IHRoaXMubWV0YS50eXBlKSAhPT0gLTEgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBsZXQgZGF0ZTogRGF0ZTtcbiAgICAgICAgICAgICAgICBpZiAoKHR5cGVvZiAodmFsdWUpID09PSAnbnVtYmVyJykpIHtcbiAgICAgICAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShwYXJzZUludCh2YWx1ZSBhcyBhbnksIDEwKSk7XG4gICAgICAgICAgICAgICAgICBpZiAoJ2RhdGUnID09PSAodGhpcy5tZXRhLnR5cGUgfHwgdGhpcy5tZXRhLnN1YnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSArIChkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMCkpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBpZiAoJ2RhdGUnID09PSAodGhpcy5tZXRhLnN1YnR5cGUgfHwgdGhpcy5tZXRhLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShEYXRlLnBhcnNlKHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5wYXJzZShgJHt2YWx1ZX1aYCkgKyAobmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDApKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAodmFsdWUpID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLm1ldGEuc3VidHlwZSB8fCB0aGlzLm1ldGEudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdkYXRldGltZS1sb2NhbCc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RhdGV0aW1lJzoge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwgPSBgJHtkYXRlLmdldEZ1bGxZZWFyKCl9LSR7KCcwMCcgKyAoZGF0ZS5nZXRNb250aCgpICsgMSkpLnNsaWNlKC0yKX0tJHsoJzAwJyArIGRhdGUuZ2V0RGF0ZSgpKS5zbGljZSgtMil9YDtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsICs9IGBUJHsoJzAwJyArIGRhdGUuZ2V0SG91cnMoKSkuc2xpY2UoLTIpfTokeygnMDAnICsgZGF0ZS5nZXRNaW51dGVzKCkpLnNsaWNlKC0yKX1gO1xuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RhdGUnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbCA9IGRhdGUudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdO1xuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1ldGEudmFsdWVUeXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgaWYgKCh0aGlzLm1ldGEuc3VidHlwZSB8fCB0aGlzLm1ldGEudHlwZSkgPT09ICdkYXRlJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gZGF0ZS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF07XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gZGF0ZS50b0lTT1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBpZiAoKHRoaXMubWV0YS5zdWJ0eXBlIHx8IHRoaXMubWV0YS50eXBlKSA9PT0gJ2RhdGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGUuc2V0RnVsbFllYXIoZGF0ZS5nZXRVVENGdWxsWWVhcigpKTtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZS5zZXRNb250aChkYXRlLmdldFVUQ01vbnRoKCkpO1xuICAgICAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXRVVENEYXRlKCkpO1xuICAgICAgICAgICAgICAgICAgICBkYXRlLnNldE1pbnV0ZXMoMCk7XG4gICAgICAgICAgICAgICAgICAgIGRhdGUuc2V0SG91cnMoMCk7XG4gICAgICAgICAgICAgICAgICAgIGRhdGUuc2V0U2Vjb25kcygwKTtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZS5zZXRNaWxsaXNlY29uZHMoMCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSAtIChkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMCkpLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBkYXRlLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdEYXRlIHBhcnNlIGVycm9yJywgZS5tZXNzYWdlLCBgXCIke3ZhbHVlfVwiYCwgYCgke3R5cGVvZiAodmFsdWUpfSlgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICgndGltZScgPT09ICh0aGlzLm1ldGEuc3VidHlwZSB8fCB0aGlzLm1ldGEudHlwZSkpIHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBsZXQgZGF0ZTogRGF0ZTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mICh2YWx1ZSkgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICBkYXRlID0gbmV3IERhdGUocGFyc2VJbnQodmFsdWUgYXMgYW55LCAxMCkpO1xuICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlIDwgODY0MDAwMDApIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpICsgKGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwKSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgRGF0ZS5wYXJzZShuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvVC4qWi8sIGBUJHt2YWx1ZX1aYCkpICsgKG5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwKVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbCA9IGRhdGUudG9UaW1lU3RyaW5nKCkuc3BsaXQoJyAnKVswXTtcbiAgICAgICAgICAgICAgICBkYXRlLnNldEZ1bGxZZWFyKDE5NzApO1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0TW9udGgoMCk7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKDEpO1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0TWlsbGlzZWNvbmRzKDApO1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSAtIChkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMCkpLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0RhdGUgcGFyc2UgZXJyb3InLCBlLm1lc3NhZ2UsIGBcIiR7dmFsdWV9XCJgLCBgKCR7dHlwZW9mICh2YWx1ZSl9KWApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAoIXZhbHVlICYmICh0eXBlb2YodGhpcy5wcmV2TW9kZWwpID09PSAnc3RyaW5nJykgJiYgdGhpcy5pc1BlcnNpc3RlZFBhcmVudCkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gJyc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5tb2RlbCA9IHZhbHVlO1xuICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLm1vZGVsO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMudmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubWV0YS4kb3B0aW9uYWwgPSB0aGlzLmlzT3B0aW9uYWw7XG4gICAgICB9LFxuICAgICAgZ2V0OiAoKSA9PiB0aGlzLnZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdGhpcy5zZW5kVG9TZXJ2ZXIsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBpZiAodHlwZW9mKG9yaWdWYWx1ZSkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLnBhcmVudFt0aGlzLm1ldGEubmFtZV0gPSBvcmlnVmFsdWU7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc1BlcnNpc3RlZFBhcmVudCAmJiB0eXBlb2YodGhpcy5tZXRhLmF1dG8/LnRlbXBsYXRlKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMubWV0YUNvbnRleHQub25Db250ZXh0Q2hhbmdlLnN1YnNjcmliZSgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBhdXRvVmFsdWUgPSB0ZW1wbGF0ZUJ1aWxkZXIoeyBjb250ZXh0IH0sIHRoaXMubWV0YS5hdXRvLnRlbXBsYXRlKTtcbiAgICAgICAgaWYgKHRoaXMubW9kZWwgPT09IHRoaXMubGFzdEF1dG9WYWx1ZSAmJiBhdXRvVmFsdWUpIHtcbiAgICAgICAgICB0aGlzLmxhc3RBdXRvVmFsdWUgPSBhdXRvVmFsdWU7XG4gICAgICAgICAgdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdID0gYXV0b1ZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgZCA9IHRoaXMubWV0YS5kZWZhdWx0IHx8IHRoaXMubWV0YS5kZWZhdWx0VmFsdWU7XG4gICAgaWYgKGQgJiYgdHlwZW9mKHRoaXMubW9kZWwpID09PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdID0gW107XG4gICAgICAgIGlmIChkLmxlbmd0aCkge1xuICAgICAgICAgIGZvciAoY29uc3QgZHYgb2YgdGhpcy5kZWZhdWx0KSB7IC8vIFRPRE8gPz8/XG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWVJdGVtID0gKHR5cGVvZiAoZHYpID09PSAnc3RyaW5nJyB8fCBkdiA9PT0gbnVsbCkgPyBkdiA6IChkdi5pZCB8fCBkdi52YWx1ZSk7XG4gICAgICAgICAgICBpZiAoZGVmYXVsdFZhbHVlSXRlbSB8fCBkZWZhdWx0VmFsdWVJdGVtID09PSAwKSB7XG4gICAgICAgICAgICAgIHRoaXMucGFyZW50W3RoaXMubWV0YS5uYW1lXS5wdXNoKGRlZmF1bHRWYWx1ZUl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gKHR5cGVvZiAoZCkgPT09ICdzdHJpbmcnKSA/IGQgOiAoZC5pZCB8fCBkLnZhbHVlKTtcbiAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZSB8fCBkZWZhdWx0VmFsdWUgPT09IDApIHtcbiAgICAgICAgICBpZiAoL14oZGF0ZXx0aW1lKS8udGVzdCh0aGlzLm1ldGEuc3VidHlwZSkgJiYgdHlwZW9mKGRlZmF1bHRWYWx1ZSkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudFt0aGlzLm1ldGEubmFtZV0gPSByZWxhdGl2ZVRpbWVCdWlsZGVyKHRoaXMubWV0YS5zdWJ0eXBlLCBkZWZhdWx0VmFsdWUsIHRoaXMudmFsaWRhdGlvbnMuc3RlcCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1ldGEudHlwZSA9PT0gJ3N0cmluZycgJiYgZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMucGFyZW50W3RoaXMubWV0YS5uYW1lXSA9IHRlbXBsYXRlQnVpbGRlcih0aGlzLm1ldGFDb250ZXh0LCBkZWZhdWx0VmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5sYXN0QXV0b1ZhbHVlID0gdGhpcy5tb2RlbDtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJldmlldyAmJiB0aGlzLm1ldGFDb250ZXh0Lm9uQ2xpY2syRGlhbCAmJiBvcmlnVmFsdWUpIHtcbiAgICAgIHRoaXMuaXNQaG9uZU51bWJlciA9IC9eKD86MDB8XFwrKT8oKFswMV18NDR8NjF8NDh8MzMgXFxkfDI3fDMwfDMxfDM0fDM3MXwzODB8Mzl8NDF8NDIwfDUyfDQwfDkwfDkxKShcXHMpPyk/Wy0uL10/XFwoP1xcZD9cXGR7MSwzfVxcKT9bLVxccy4vXT9cXGQ/Wy1cXHMuL10/XFxkezEsNH1cXCk/Wy1cXHMuL10/XFxkezEsNH1bLS4vXT9cXGR7MSw0fShcXHNcXGRcXGQoJHwsKSk/KCxbLFxcZF0rIyk/JC8udGVzdChvcmlnVmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG9uQWN0aXZhdGVkKGV2KSB7XG4gICAgdGhpcy5pbnB1dCA9IGV2LnNyY0VsZW1lbnQ7XG4gICAgaWYgKCF0aGlzLmRyb3Bkb3duKSB7XG4gICAgICB0aGlzLmRyb3Bkb3duID0gZXYuc3JjRWxlbWVudC5wYXJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgfVxuICAgIHRoaXMuc2hvd0Ryb3Bkb3duKCk7XG4gIH1cblxuICBjbGVhcihldj8pIHtcbiAgICBkZWxldGUgdGhpcy5tb2RlbDtcbiAgICBkZWxldGUgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXg7XG4gICAgZGVsZXRlIHRoaXMuYXN5bmNTdWdnZXN0aW9ucztcbiAgICB0aGlzLm9uTW9kZWxDaGFuZ2UodGhpcy5tb2RlbCk7XG4gICAgaWYgKGV2KSB7XG4gICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgb25CbHVyKGV2KSB7XG4gICAgbGV0IGludGVybmFsQ29udHJvbCA9IGZhbHNlO1xuICAgIGlmIChldi5yZWxhdGVkVGFyZ2V0KSB7XG4gICAgICBpZiAoIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2LnJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgICAgIHRoaXMuZGlzbWlzc0Ryb3Bkb3duKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnRlcm5hbENvbnRyb2wgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5rZXlMaXN0ZW5lckFjdGl2ZSAmJiAhaW50ZXJuYWxDb250cm9sKSB7XG4gICAgICB0aGlzLmlucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmtleWRvd24pO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5rZXlMaXN0ZW5lckFjdGl2ZSkge1xuICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5jbGlja291dCk7XG4gICAgICAgIH1cbiAgICAgIH0sIDQwMCk7XG4gICAgICBkZWxldGUgdGhpcy5rZXlMaXN0ZW5lckFjdGl2ZTtcbiAgICB9XG4gIH1cblxuICBvbkFkZChldikge1xuICAgIGNvbnNvbGUubG9nKCdvbkFkZCcsIHRoaXMuYWRkVGV4dCk7XG4gICAgaWYgKHRoaXMuYWRkVGV4dCkge1xuICAgICAgaWYgKCh0aGlzLm1vZGVsIHx8IFtdKS5pbmRleE9mKHRoaXMuYWRkVGV4dCkgPT09IC0xKSB7XG4gICAgICAgIHRoaXMub25TdWdnZXN0aW9uU2VsZWN0KGV2LCB0aGlzLmFkZFRleHQpO1xuICAgICAgICBpZiAoIXRoaXMubWV0YS5zdWdnZXN0aW9ucykge1xuICAgICAgICAgIHRoaXMubWV0YS5zdWdnZXN0aW9ucyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWV0YS5zdWdnZXN0aW9ucy51bnNoaWZ0KHRoaXMuYWRkVGV4dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgfVxuICAgICAgZGVsZXRlIHRoaXMuYWRkVGV4dDtcbiAgICB9XG4gIH1cblxuICByZW1vdmUoZXYsIGl0ZW0pIHtcbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IG9wdGlvbkluZGV4ID0gdGhpcy5tb2RlbC5pbmRleE9mKGl0ZW0pO1xuICAgIGlmIChvcHRpb25JbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMubW9kZWwuc3BsaWNlKG9wdGlvbkluZGV4LCAxKTtcbiAgICAgIGlmICghdGhpcy5tb2RlbC5sZW5ndGgpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMubW9kZWw7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnZhbHVlO1xuICAgICAgfVxuICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHRoaXMubW9kZWwpO1xuICAgIH1cbiAgfVxuXG4gIG9uU3VnZ2VzdGlvblNlbGVjdChldiwgc3VnZ2VzdGlvbikge1xuICAgIGlmICghc3VnZ2VzdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuZm9jdXMoKTtcbiAgICBsZXQgc3VnZ2VzdGlvblZhbHVlID0gc3VnZ2VzdGlvbi5pZCB8fCBzdWdnZXN0aW9uLnZhbHVlIHx8IHN1Z2dlc3Rpb247XG4gICAgaWYgKHR5cGVvZihzdWdnZXN0aW9uVmFsdWUpID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKC9eKGRhdGV8dGltZSkvLnRlc3QodGhpcy5tZXRhLnN1YnR5cGUpKSB7XG4gICAgICAgIHN1Z2dlc3Rpb25WYWx1ZSA9IHJlbGF0aXZlVGltZUJ1aWxkZXIodGhpcy5tZXRhLnN1YnR5cGUsIHN1Z2dlc3Rpb25WYWx1ZSwgdGhpcy52YWxpZGF0aW9ucy5zdGVwKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5tZXRhLnR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHN1Z2dlc3Rpb25WYWx1ZSA9IHRlbXBsYXRlQnVpbGRlcih0aGlzLm1ldGFDb250ZXh0LCBzdWdnZXN0aW9uVmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3VnZ2VzdGlvblZhbHVlID0gc3VnZ2VzdGlvbjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIGlmICghdGhpcy5tb2RlbCkge1xuICAgICAgICB0aGlzLm1vZGVsID0gW107XG4gICAgICB9XG4gICAgICBsZXQgZXhpc3RpbmdJdGVtSW5kZXggPSB0aGlzLm1vZGVsLmluZGV4T2Yoc3VnZ2VzdGlvblZhbHVlKTtcbiAgICAgIGlmIChleGlzdGluZ0l0ZW1JbmRleCA9PT0gLTEpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5wdXNoKHN1Z2dlc3Rpb25WYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm1vZGVsLnNwbGljZShleGlzdGluZ0l0ZW1JbmRleCwgMSk7XG4gICAgICAgIGV4aXN0aW5nSXRlbUluZGV4ID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHRoaXMubW9kZWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpc21pc3NEcm9wZG93bigpO1xuICAgICAgdGhpcy5tb2RlbCA9IHN1Z2dlc3Rpb25WYWx1ZTtcbiAgICAgIHRoaXMub25Nb2RlbENoYW5nZShzdWdnZXN0aW9uVmFsdWUpO1xuICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPSB0aGlzLnN1Z2dlc3Rpb25zLmluZGV4T2Yoc3VnZ2VzdGlvbik7XG4gICAgfVxuICB9XG5cbiAgdGV4dFRvU3BlZWNoKCkgeyB9XG5cbiAgZGlzbWlzc0Ryb3Bkb3duKGV2ZW50Pykge1xuICAgIGlmIChldmVudCkge1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kcm9wZG93bikge1xuICAgICAgdGhpcy5kcm9wZG93bi5jbGFzc0xpc3QucmVtb3ZlKCdWbHQtZHJvcGRvd24tLWV4cGFuZGVkJyk7XG4gICAgfVxuICB9XG5cbiAgY2xpY2syZGlhbChldikge1xuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5tZXRhQ29udGV4dC5vbkNsaWNrMkRpYWwodGhpcy5tb2RlbCwgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xvc2VzdCgndmdpcC1tZXRhLWxheW91dFtkYXRhLXZybl0nKT8uZGF0YXNldD8udnJuKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZURyb3Bkb3duSXNWaXNpYmxlKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgaG9sZGVyID0gdGhpcy5kcm9wZG93bi5jbG9zZXN0KCcuVmx0LWNhcmRfX2NvbnRlbnQsIC5WbHQtbW9kYWxfX2NvbnRlbnQnKTtcbiAgICAgIGlmIChob2xkZXIpIHtcbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuVmx0LWRyb3Bkb3duX19wYW5lbCcpO1xuICAgICAgICBpZiAoZWwpIHtcbiAgICAgICAgICBjb25zdCBlbFJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICBjb25zdCBob2xkZXJSZWN0ID0gaG9sZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgIGlmIChob2xkZXJSZWN0LnRvcCArIGhvbGRlclJlY3QuaGVpZ2h0IDwgZWxSZWN0LnRvcCArIGVsUmVjdC5oZWlnaHQpIHtcbiAgICAgICAgICAgIGVsLnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICdlbmQnIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIDQwMCk7XG4gIH1cblxuICBwcml2YXRlIHNob3dEcm9wZG93bigpIHtcbiAgICBpZiAodGhpcy5tZXRhLnN1Z2dlc3Rpb25zPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZHJvcGRvd24uY2xhc3NMaXN0LmFkZCgnVmx0LWRyb3Bkb3duLS1leHBhbmRlZCcpO1xuICAgICAgdGhpcy5lbnN1cmVEcm9wZG93bklzVmlzaWJsZSgpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMua2V5TGlzdGVuZXJBY3RpdmUpIHtcbiAgICAgIHRoaXMuaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMua2V5ZG93bik7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmNsaWNrb3V0KTtcbiAgICAgIH0sIDIwMCk7XG4gICAgICB0aGlzLmtleUxpc3RlbmVyQWN0aXZlID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZih0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAodGhpcy5tb2RlbCAmJiB0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aCkge1xuICAgICAgICBmb3IgKGxldCBzdWdnZXN0aW9uSW5kZXggPSAwOyBzdWdnZXN0aW9uSW5kZXggPCB0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aDsgc3VnZ2VzdGlvbkluZGV4KyspIHtcbiAgICAgICAgICBpZiAodGhpcy5tb2RlbCA9PT0gdGhpcy5zdWdnZXN0aW9uc1tzdWdnZXN0aW9uSW5kZXhdKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA9IHN1Z2dlc3Rpb25JbmRleDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xpY2tvdXQgPSAoZXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQudGFyZ2V0LmNsYXNzTmFtZSA9PT0gJ1ZsdC1kcm9wZG93bl9fbGluaycgJiYgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgLy8gdGhpcy5kaXNtaXNzRHJvcGRvd24oKTtcbiAgICAgIC8vIHRoaXMucGFyZW50W3RoaXMubWV0YS5uYW1lXSA9IGV2ZW50LnRhcmdldC50ZXh0Q29udGVudDtcblxuICAgIH0gZWxzZSBpZiAoZXZlbnQudGFyZ2V0ICE9PSB0aGlzLmlucHV0ICYmIGV2ZW50LnRhcmdldC5jbGFzc05hbWUgIT09ICdWbHQtZHJvcGRvd25fX3RpdGxlJykge1xuICAgICAgdGhpcy5kaXNtaXNzRHJvcGRvd24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIGtleWRvd24gPSAoZXZlbnQpID0+IHtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnQXJyb3dEb3duJzoge1xuICAgICAgICBpZiAoWydkYXRldGltZScsICd0aW1lJywgJ2RhdGUnLCAnZGF0ZXRpbWUtbG9jYWwnXS5pbmRleE9mKHRoaXMubWV0YS5zdWJ0eXBlIHx8IHRoaXMubWV0YS50eXBlKSAhPT0gLTEpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNob3dEcm9wZG93bigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodHlwZW9mICh0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4Kys7XG4gICAgICAgICAgaWYgKHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID49IHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnQXJyb3dVcCc6IHtcbiAgICAgICAgaWYgKFsnZGF0ZXRpbWUnLCAndGltZScsICdkYXRlJywgJ2RhdGV0aW1lLWxvY2FsJ10uaW5kZXhPZih0aGlzLm1ldGEuc3VidHlwZSB8fCB0aGlzLm1ldGEudHlwZSkgIT09IC0xKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zaG93RHJvcGRvd24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHR5cGVvZiAodGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXgpID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID0gdGhpcy5zdWdnZXN0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4LS07XG4gICAgICAgICAgaWYgKHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4IDwgMCkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPSB0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aCAtIDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnU3BhY2UnOlxuICAgICAgY2FzZSAnRW50ZXInOiB7XG4gICAgICAgIGlmICh0eXBlb2YgKHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4KSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHRoaXMub25TdWdnZXN0aW9uU2VsZWN0KGV2ZW50LCB0aGlzLnN1Z2dlc3Rpb25zW3RoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4XSk7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4O1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnRXNjYXBlJzoge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5kaXNtaXNzRHJvcGRvd24oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5tb2RlbCkge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4O1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuYXN5bmNTdWdnZXN0aW9ucztcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZih0aGlzLm1vZGVsKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRoaXMuYXN5bmNTdWdnZXN0aW9ucyA9ICh0aGlzLm1ldGEuc3VnZ2VzdGlvbnMgfHwgW10pLmZpbHRlcigocykgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBzdWdnZXN0aW9uVGV4dCA9IChzLmlkIHx8IHMudmFsdWUgfHwgcyB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHN1Z2dlc3Rpb25UZXh0LmluZGV4T2YodGhpcy5tb2RlbC50b0xvd2VyQ2FzZSgpKSAhPT0gLTE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxufVxuIiwiPGRpdiBjbGFzcz0ndmdpcC1tZXRhLWZpZWxkLXByZXZpZXcnICpuZ0lmPSdwcmV2aWV3ICYmIG1vZGVsJz5cbiAgPGRpdiBjbGFzcz0ndmdpcC1tZXRhLWZpZWxkLWxhYmVsJyBbdGl0bGVdPSdtZXRhLmxhYmVsIHx8IG1ldGEubmFtZSc+e3ttZXRhLmxhYmVsIHx8IG1ldGEubmFtZX19PC9kaXY+XG4gIDxkaXYgY2xhc3M9J3ZnaXAtbWV0YS1maWVsZC12YWx1ZSBfX2d1Jz5cbiAgICA8YSAqbmdJZj1cImlzUGhvbmVOdW1iZXI7IGVsc2UgZWxzZUJsb2NrXCIgaHJlZj0nIycgKGNsaWNrKT1cImNsaWNrMmRpYWwoJGV2ZW50KVwiIGNsYXNzPVwiVmx0LXRleHQtbGlua1wiIGFyaWEtbGFiZWw9J0RpYWwnPlxuICAgICAgPHN2ZyBjbGFzcz1cIlZsdC1pY29uIFZsdC1pY29uLS1zbWFsbGVyXCIgc3R5bGU9XCJtYXJnaW4tdG9wOiAtM3B4O1wiPlxuICAgICAgICA8dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tcGhvbmUtZnVsbFwiIC8+XG4gICAgICA8L3N2Zz5cbiAgICAgIHt7bW9kZWx9fVxuICAgIDwvYT5cbiAgICA8bmctdGVtcGxhdGUgI2Vsc2VCbG9jaz57e21vZGVsfX08L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiAqbmdJZj0nIXByZXZpZXcnIGNsYXNzPVwiVmx0LWZvcm1fX2VsZW1lbnQgVmx0LWZvcm1fX2VsZW1lbnQtLWJpZ1wiIFtuZ0NsYXNzXT1cInsnVmx0LWZvcm1fX2VsZW1lbnQtLWVycm9yJzogZi5pbnZhbGlkICYmICgoZiB8IG1ldGFNb2RlbCkuX3BhcmVudC5zdWJtaXR0ZWQgfHwgKGYgfCBtZXRhTW9kZWwgKS50b3VjaGVkKSwgJ211bHRpcGxlJzogbXVsdGlwbGUsICdoYXMtdmFsdWUnOiBmLnZhbHVlLCBhY3RpdmU6IGtleUxpc3RlbmVyQWN0aXZlIH1cIj5cbiAgPGRpdiAqbmdJZj0nbXVsdGlwbGUnIGNsYXNzPSdpdGVtcy1jb250YWluZXInPlxuICAgIDxkaXYgKm5nSWY9J21vZGVsJyBjbGFzcz0nYmFkZ2VzLWNvbnRhaW5lciBrZWVwLWZvY3VzJyAoY2xpY2spPSdmb2N1cygpJz4gPCEtLSBlc2xpbnQtZGlzYWJsZS1saW5lIC0tPlxuICAgICAgPGRpdiAqbmdGb3I9J2xldCBpdGVtIG9mIG1vZGVsJyBjbGFzcz1cIlZsdC1iYWRnZSBWbHQtYmFkZ2UtLWFwcCBWbHQtYmFkZ2UtLWxhcmdlIGtlZXAtZm9jdXNcIj5cbiAgICAgICAge3tpdGVtfX1cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIlZsdC1iYWRnZV9fZGlzbWlzcyBrZWVwLWZvY3VzXCIgKGNsaWNrKT0ncmVtb3ZlKCRldmVudCwgaXRlbSknPjwvYnV0dG9uPiA8IS0tIGVzbGludC1kaXNhYmxlLWxpbmUgQGFuZ3VsYXItZXNsaW50L3RlbXBsYXRlL2VsZW1lbnRzLWNvbnRlbnQgLS0+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJWbHQtaW5wdXQgVmx0LWRyb3Bkb3duXCIgc3R5bGU9J2Rpc3BsYXk6IGJsb2NrOycgW25nQ2xhc3NdPVwieyd2Z2lwLWRpc2FibGUnOiBkaXNhYmxlZH1cIj5cbiAgICA8bGFiZWwgY2xhc3M9J3dyYXBwZXInPlxuICAgICAgPGlucHV0IGNsYXNzPSdtYWluIG1vZGVsJyBbcGF0dGVybl09XCJ2YWxpZGF0aW9ucy5wYXR0ZXJuID8gdmFsaWRhdGlvbnMucGF0dGVybi52YWx1ZSB8fCB2YWxpZGF0aW9ucy5wYXR0ZXJuIDogbnVsbFwiIFtyZXF1aXJlZF09J3ZhbGlkYXRpb25zLnJlcXVpcmVkJyBbbWlubGVuZ3RoXT0ndmFsaWRhdGlvbnMubWlubGVuZ3RoJyBbbWF4bGVuZ3RoXT0ndmFsaWRhdGlvbnMubWF4bGVuZ3RoJyBbbWluXT0ndmFsaWRhdGlvbnMubWluJyBbbWF4XT0ndmFsaWRhdGlvbnMubWF4JyBbc3RlcF09J3ZhbGlkYXRpb25zLnN0ZXAnIFtkaXNhYmxlZF09J2Rpc2FibGVkJyBbcmVhZG9ubHldPVwicmVhZG9ubHlcIiBbKG5nTW9kZWwpXT0nbW9kZWwnIChuZ01vZGVsQ2hhbmdlKT1cIm9uTW9kZWxDaGFuZ2UoJGV2ZW50KVwiICNmPSduZ01vZGVsJyBbbmFtZV09J25hbWUnIFt0eXBlXT1cIm11bHRpcGxlID8gJ2hpZGRlbicgOiAobG9naWNhbFN1YnR5cGUgfHwgbWV0YS5zdWJ0eXBlIHx8ICd0ZXh0JylcIiBwbGFjZWhvbGRlcj1cIiBcIiAoY2xpY2spPSdvbkFjdGl2YXRlZCgkZXZlbnQpJyAoZm9jdXMpPSdvbkFjdGl2YXRlZCgkZXZlbnQpJyAoYmx1cik9J29uQmx1cigkZXZlbnQpJy8+XG4gICAgICA8aW5wdXQgKm5nSWY9J211bHRpcGxlJyBjbGFzcz0nbWFpbicgW3BhdHRlcm5dPVwidmFsaWRhdGlvbnMucGF0dGVybiA/IHZhbGlkYXRpb25zLnBhdHRlcm4udmFsdWUgfHwgdmFsaWRhdGlvbnMucGF0dGVybiA6IG51bGxcIiBbbWlubGVuZ3RoXT0ndmFsaWRhdGlvbnMubWlubGVuZ3RoJyBbbWF4bGVuZ3RoXT0ndmFsaWRhdGlvbnMubWF4bGVuZ3RoJyBbbWluXT0ndmFsaWRhdGlvbnMubWluJyBbbWF4XT0ndmFsaWRhdGlvbnMubWF4JyBbKG5nTW9kZWwpXT0nYWRkVGV4dCcgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCIgW3R5cGVdPVwibG9naWNhbFN1YnR5cGUgfHwgbWV0YS5zdWJ0eXBlIHx8ICd0ZXh0J1wiIFtkaXNhYmxlZF09J2Rpc2FibGVkJyBbcmVhZG9ubHldPSdyZWFkb25seScgcGxhY2Vob2xkZXI9XCIrQWRkXCIgKGtleWRvd24uZW50ZXIpPSdvbkFkZCgkZXZlbnQpJyAoY2xpY2spPSdvbkFjdGl2YXRlZCgkZXZlbnQpJyAoZm9jdXMpPSdvbkFjdGl2YXRlZCgkZXZlbnQpJyAoYmx1cik9J29uQmx1cigkZXZlbnQpJy8+XG4gICAgICA8bGFiZWwgY2xhc3M9J1ZsdC10cnVuY2F0ZSc+e3ttZXRhLmxhYmVsIHx8IG1ldGEubmFtZX19PHNwYW4gKm5nSWY9J3ZhbGlkYXRpb25zLnJlcXVpcmVkJyBjbGFzcz0nVmx0LXJlZCc+Kjwvc3Bhbj4mbmJzcDs8c3BhbiBjbGFzcz0nVmx0LWJsYWNrJyAqbmdJZj0nbW9kZWwgJiYgbXVsdGlwbGUnPih7e21vZGVsLmxlbmd0aH19KTwvc3Bhbj48L2xhYmVsPiA8IS0tIGVzbGludC1kaXNhYmxlLWxpbmUgQGFuZ3VsYXItZXNsaW50L3RlbXBsYXRlL2xhYmVsLWhhcy1hc3NvY2lhdGVkLWNvbnRyb2wgLS0+XG4gICAgPC9sYWJlbD5cbiAgICA8ZGl2IGNsYXNzPSdWbHQtY29tcG9zaXRlX19hcHBlbmQgcmlnaHQtYWN0aW9ucyc+XG4gICAgICA8YSBocmVmPScjJyAqbmdJZj0nbW9kZWwgJiYgc2hvd0NsZWFyJyBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX2FwcGVuZC0taWNvblwiIChjbGljayk9J2NsZWFyKCRldmVudCknPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9faWNvblwiPlxuICAgICAgICAgIDxzdmc+PHVzZSB4bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLWNyb3NzXCIvPjwvc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvYT5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIDxkaXYgKm5nSWY9XCIhbWV0YS5zdWJ0eXBlIHx8IG1ldGEuc3VidHlwZSA9PSAndGV4dCdcIiBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX2FwcGVuZCBWbHQtY29tcG9zaXRlX19hcHBlbmQtLWljb25cIiBzdHlsZT0nYm90dG9tOiA3cHg7IHJpZ2h0OiAxMHB4OyBwYWRkaW5nOiAzcHg7IHdpZHRoOiBpbml0aWFsOyBoZWlnaHQ6IGluaXRpYWw7IGN1cnNvcjogcG9pbnRlcjsnPlxuICAgICAgPGRpdiAqbmdJZj1cIiFtZXRhLnR5cGUgfHwgbWV0YS50eXBlID09PSAnc3RyaW5nJ1wiIGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9faWNvblwiIChjbGljayk9J3RleHRUb1NwZWVjaCgpJz5cbiAgICAgICAgPHN2Zz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tbWljcm9waG9uZVwiLz48L3N2Zz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PiAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwic3VnZ2VzdGlvbnMubGVuZ3RoXCIgY2xhc3M9XCJWbHQtZHJvcGRvd25fX3BhbmVsXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiVmx0LWRyb3Bkb3duX19wYW5lbF9fY29udGVudCBWbHQtZHJvcGRvd25fX3BhbmVsX19jb250ZW50LS1zY3JvbGwtYXJlYSBzdWdnZXN0aW9uc1wiPlxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJWbHQtZHJvcGRvd25fX3RpdGxlXCIgc3R5bGU9J3BhZGRpbmctbGVmdDogMTNweDsnPlxuICAgICAgICAgIFN1Z2dlc3Rpb25zXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIlZsdC1kcm9wZG93bl9fY2xvc2UgVmx0LXdoaXRlXCIgKGNsaWNrKT0nZGlzbWlzc0Ryb3Bkb3duKCRldmVudCknPlxuICAgICAgICAgICAgPHN2ZyBjbGFzcz0nVmx0LWljb24gVmx0LWljb24tLXNtYWxsJz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tY3Jvc3NcIi8+PC9zdmc+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cIlZsdC1kcm9wZG93bl9fYmxvY2tcIj48L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj0nZHJvcGRvd24nIGNsYXNzPVwiVmx0LWRyb3Bkb3duX19zY3JvbGxcIj5cbiAgICAgICAgICA8YSBocmVmPScjJyBbbmdDbGFzc109XCJ7ICdWbHQtZHJvcGRvd25fX2xpbmstLXNlbGVjdGVkJzogKGFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA9PT0gaSkgfVwiIChjbGljayk9J29uU3VnZ2VzdGlvblNlbGVjdCgkZXZlbnQsIHN1Z2dlc3Rpb24pJyAqbmdGb3I9J2xldCBzdWdnZXN0aW9uIG9mIHN1Z2dlc3Rpb25zOyBsZXQgaSA9IGluZGV4JyBjbGFzcz1cIlZsdC1kcm9wZG93bl9fbGlua1wiIHN0eWxlPSdwYWRkaW5nOiAwOyc+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPSdtdWx0aXBsZScgY2xhc3M9XCJWbHQtY2hlY2tib3hcIiBzdHlsZT0nd2lkdGg6IDEwMCU7Jz5cbiAgICAgICAgICAgICAgPGxhYmVsIFt0aXRsZV09J3N1Z2dlc3Rpb24ubGFiZWwgfHwgc3VnZ2VzdGlvbic+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJWbHQtY2hlY2tib3hfX2J1dHRvblwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT0nbW9kZWwgJiYgbW9kZWwuaW5kZXhPZihzdWdnZXN0aW9uKSAhPT0gLTEnLz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiVmx0LWNoZWNrYm94X19pY29uXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICB7e3N1Z2dlc3Rpb24ubGFiZWwgfHwgc3VnZ2VzdGlvbn19XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9JyFtdWx0aXBsZScgc3R5bGU9J3BhZGRpbmc6IDEycHggMjBweDsnPlxuICAgICAgICAgICAgICB7e3N1Z2dlc3Rpb24ubGFiZWwgfHwgc3VnZ2VzdGlvbn19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPSchbXVsdGlwbGUnIGNsYXNzPVwiVmx0LWRyb3Bkb3duX19ibG9ja1wiPjwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPSdtdWx0aXBsZScgY2xhc3M9XCJWbHQtZHJvcGRvd25fX2Jsb2NrIFZsdC1kcm9wZG93bl9fYmxvY2stLW5vd3JhcFwiIHN0eWxlPSdwYWRkaW5nOiA4cHggMTZweCAxNnB4Oyc+XG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPSdjbGVhcigkZXZlbnQpJyB0eXBlPSdidXR0b24nIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS1zZWNvbmRhcnkgVmx0LWJ0bi0tYXBwIFZsdC1idG4tLXNtYWxsIFZsdC1idG4tLW91dGxpbmVcIj5DbGVhciBhbGw8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9J2Rpc21pc3NEcm9wZG93bigkZXZlbnQpJyB0eXBlPSdidXR0b24nIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS1zZWNvbmRhcnkgVmx0LWJ0bi0tYXBwIFZsdC1idG4tLXNtYWxsXCI+RG9uZTwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPHNtYWxsICpuZ0lmPSdmLmludmFsaWQgJiYgKChmIHwgbWV0YU1vZGVsKS5fcGFyZW50LnN1Ym1pdHRlZCB8fCAoKGYgfCBtZXRhTW9kZWwgKS50b3VjaGVkICYmIGtleUxpc3RlbmVyQWN0aXZlKSknIGNsYXNzPVwiVmx0LWZvcm1fX2VsZW1lbnRfX2Vycm9yXCI+XG4gICAgPHNwYW4gKm5nSWY9XCJmLmVycm9ycy5yZXF1aXJlZFwiPlJlcXVpcmVkLiZuYnNwOzwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cImYuZXJyb3JzLm1pbmxlbmd0aFwiPk11c3QgYmUgbG9uZ2VyIHRoYW4ge3t2YWxpZGF0aW9ucy5taW5sZW5ndGh9fSBjaGFyYWN0ZXJzLiZuYnNwOzwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cImYuZXJyb3JzLm1heGxlbmd0aFwiPk11c3QgYmUgbGVzdCB0aGFuIHt7dmFsaWRhdGlvbnMubWF4bGVuZ3RofX0gY2hhcmFjdGVycy4mbmJzcDs8L3NwYW4+XG4gICAgPHNwYW4gKm5nSWY9XCJmLmVycm9ycy5wYXR0ZXJuXCI+e3sgdmFsaWRhdGlvbnMucGF0dGVybi50ZXh0IHx8IFwiU2hvdWxkIG1hdGNoICdcIit2YWxpZGF0aW9ucy5wYXR0ZXJuK1wiJyBwYXR0ZXJuLlwiIH19LiZuYnNwOzwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cImYuZXJyb3JzLmN1c3RvbVwiPnt7Zi5lcnJvcnMuY3VzdG9tfX0mbmJzcDs8L3NwYW4+XG4gIDwvc21hbGw+XG4gIDxzbWFsbCAqbmdJZj0nbWV0YS5oaW50JyBjbGFzcz1cIlZsdC1mb3JtX19lbGVtZW50X19oaW50XCI+e3ttZXRhLmhpbnR9fTwvc21hbGw+XG48L2Rpdj5cbiJdfQ==