@tsi-developpement/tsi-shared-ui 1.9.8 → 1.9.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.
@@ -8,6 +8,7 @@ import { Guid } from '../../../tsi-helpers/guid.helper';
8
8
  import { TypeRegistryHelper } from '../../../tsi-helpers/type-registry.helper';
9
9
  import { BindMode } from '../../../enums/bind-mode';
10
10
  import { isNullOrEmpty } from '../../../functions';
11
+ import { TsiFormModalFooterComponent } from '../../tsi-form-modal-footer/tsi-form-modal-footer.component';
11
12
  import * as i0 from "@angular/core";
12
13
  import * as i1 from "../../../services/configuration/entity-configuration.service";
13
14
  import * as i2 from "../../../services/modal/tsi-modal.service";
@@ -345,6 +346,9 @@ export class TsiSearchComboComponent extends TsiInputBase {
345
346
  width: ModalSizeEnum.Medium.width,
346
347
  height: ModalSizeEnum.Medium.height,
347
348
  maximizable: true,
349
+ templates: {
350
+ footer: TsiFormModalFooterComponent,
351
+ }
348
352
  };
349
353
  if (!entity || !entity.formName) {
350
354
  this._messageService?.error("search_combo_component_form_name_nf");
@@ -396,6 +400,9 @@ export class TsiSearchComboComponent extends TsiInputBase {
396
400
  width: ModalSizeEnum.Medium.width,
397
401
  height: ModalSizeEnum.Medium.height,
398
402
  maximizable: true,
403
+ templates: {
404
+ footer: TsiFormModalFooterComponent,
405
+ }
399
406
  };
400
407
  this._dialogReference = this._tsiModalService?.open(TypeRegistryHelper.getType(entity.formName), conf);
401
408
  this._dialogReference?.onClose.subscribe((updatedElement) => {
@@ -439,6 +446,9 @@ export class TsiSearchComboComponent extends TsiInputBase {
439
446
  width: ModalSizeEnum.Medium.width,
440
447
  height: ModalSizeEnum.Medium.height,
441
448
  maximizable: true,
449
+ templates: {
450
+ footer: TsiFormModalFooterComponent,
451
+ }
442
452
  };
443
453
  this._dialogReference = this._tsiModalService?.open(TypeRegistryHelper.getType(entity.formName), conf);
444
454
  this._dialogReference?.onClose.subscribe((_) => {
@@ -1010,4 +1020,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1010
1020
  }], showUpdateButton: [{
1011
1021
  type: Input
1012
1022
  }] } });
1013
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLXNlYXJjaC1jb21iby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvaW5wdXQtY29tcG9uZW50cy90c2ktc2VhcmNoLWNvbWJvL3RzaS1zZWFyY2gtY29tYm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3RzaS1jb21wb25lbnRzL2lucHV0LWNvbXBvbmVudHMvdHNpLXNlYXJjaC1jb21iby90c2ktc2VhcmNoLWNvbWJvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RCxPQUFPLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNILE9BQU8sRUFBRSxPQUFPLEVBQWdCLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxjQUFjLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDN0csT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBTXBHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyREFBMkQsQ0FBQztBQUN6RixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDeEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFNL0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0Is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YztzQkFEakIsS0FBSztnQkFTTyxVQUFVO3NCQUF0QixLQUFLO2dCQWFhLElBQUk7c0JBQXRCLEtBQUs7dUJBQUMsTUFBTTtnQkF3QkosaUJBQWlCO3NCQUF6QixLQUFLO2dCQVFHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFRRyxRQUFRO3NCQUFoQixLQUFLO2dCQUlJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ3NCLGdCQUFnQjtzQkFBNUMsTUFBTTt1QkFBQyxtQkFBbUI7Z0JBQ2pCLElBQUk7c0JBQWIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFRRyxlQUFlO3NCQUF4QixNQUFNO2dCQWdHRSxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IER5bmFtaWNEaWFsb2dDb25maWcsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpcnN0VmFsdWVGcm9tLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHJ0bE1vZGVLZXlzIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RzL2xvY2Fscy5jb25zdCc7XHJcbmltcG9ydCB7IENvbXBvbmVudF9Nb2RlcywgR3JpZFNlbGVjdGlvbk1vZGUsIE1vZGFsU2l6ZUVudW0sIFRvb2x0aXBQb3NpdGlvbiB9IGZyb20gJy4uLy4uLy4uL2VudW1zJztcclxuaW1wb3J0IHsgQ29tYm9TdGF0dXNNb2RlbCB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBTdGF0dXNNZXRhZGF0YVJlc3BvbnNlLCBTdGF0dXNPcHRpb24gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvc3RhdHVzL2NvbG9yLXN0YXR1cyc7XHJcbmltcG9ydCB7IEVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY29uZmlndXJhdGlvbi9lbnRpdHktY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHNpTW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbW9kYWwvdHNpLW1vZGFsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUc2lOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uL3RzaS1ub3RpZmljYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFRzaUlucHV0QmFzZSB9IGZyb20gJy4uLy4uLy4uL3RzaS1iYXNlL3RzaS1pbnB1dC1iYXNlL3RzaS1pbnB1dC1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEd1aWQgfSBmcm9tICcuLi8uLi8uLi90c2ktaGVscGVycy9ndWlkLmhlbHBlcic7XHJcbmltcG9ydCB7IFR5cGVSZWdpc3RyeUhlbHBlciB9IGZyb20gJy4uLy4uLy4uL3RzaS1oZWxwZXJzL3R5cGUtcmVnaXN0cnkuaGVscGVyJztcclxuaW1wb3J0IHsgTXVsdGlTZWxlY3QgfSBmcm9tICdwcmltZW5nL211bHRpc2VsZWN0JztcclxuaW1wb3J0IHsgU2VsZWN0SXRlbUdyb3VwIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBMb2NhbGl6ZVBpcGUgfSBmcm9tICcuLi8uLi8uLi9waXBlcyc7XHJcbmltcG9ydCB7IEtleVZhbHVlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRHJvcGRvd25FeHRlcm5hbFNlbGVjdGlvbk91dHB1dCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9kcm9wZG93bi9kcm9wZG93bi1leHRlcm5hbC1zZWxlY3Rpb24tb3V0cHV0JztcclxuaW1wb3J0IHsgQmluZE1vZGUgfSBmcm9tICcuLi8uLi8uLi9lbnVtcy9iaW5kLW1vZGUnO1xyXG5pbXBvcnQgeyBpc051bGxPckVtcHR5IH0gZnJvbSAnLi4vLi4vLi4vZnVuY3Rpb25zJztcclxuaW1wb3J0IHsgRHJvcGRvd25DaGFuZ2VFdmVudCB9IGZyb20gJ3ByaW1lbmcvZHJvcGRvd24nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdUc2ktU2VhcmNoLUNvbWJvJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdHNpLXNlYXJjaC1jb21iby5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdHNpLXNlYXJjaC1jb21iby5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHNpU2VhcmNoQ29tYm9Db21wb25lbnQgZXh0ZW5kcyBUc2lJbnB1dEJhc2U8YW55PiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgLy8jcmVnaW9uIGxvY2FsIHZhcnNcclxuICBwcml2YXRlIF9kYXRhc291cmNlOiBhbnlbXSA9IFtdO1xyXG4gIHByaXZhdGUgX2lzSW5wdXREYXRhc291cmNlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfcmVsb2FkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBfc2VhcmNoU3ViamVjdCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICBwcml2YXRlIF9zZWFyY2hEZWJvdW5jZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgX2dvdHRlbkRhdGFzb3VyY2U6IGFueVtdID0gW107XHJcbiAgcHJpdmF0ZSBfYmluZD86IGFueTtcclxuICBwcml2YXRlIF9jdXJyZW50Um93SXRlbT86IGFueTtcclxuICBwdWJsaWMgZGF0YUxvYWRlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJpdmF0ZSBfZGlhbG9nUmVmZXJlbmNlPzogRHluYW1pY0RpYWxvZ1JlZiB8IHVuZGVmaW5lZDtcclxuICBpc0FyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGlzRmlsdGVyaW5nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gKiBHcm91cGVkIGRhdGFzb3VyY2UgZm9yIHRoZSBNdWx0aVNlbGVjdCBjb21wb25lbnQuXHJcbiAqIFR3byBncm91cHMsIHdoZXJlIGVhY2ggZ3JvdXAgY29udGFpbnMgYSBsYWJlbCwgYSB2YWx1ZSwgYW5kIGFuIGFycmF5IG9mIGl0ZW1zLlxyXG4gKiBcclxuICogU3RydWN0dXJlOlxyXG4gKiBbXHJcbiAqICAgeyBsYWJlbDogJ1NlbGVjdGVkIGl0ZW1zJywgdmFsdWU6ICdzZWxlY3RlZC1pdGVtcycsIGl0ZW1zOiBbLi4uXSB9LFxyXG4gKiAgIHsgbGFiZWw6ICdBdmFpbGFibGUgaXRlbXMnLCB2YWx1ZTogJ2F2YWlsYWJsZS1pdGVtcycsIGl0ZW1zOiBbLi4uXSB9XHJcbiAqIF1cclxuICovXHJcbiAgcHJvdGVjdGVkIGdyb3VwcGVkRGF0YVNvdXJjZTogU2VsZWN0SXRlbUdyb3VwW10gPSBbXTtcclxuICB0b29sdGlwUG9zaXRpb24gPSBUb29sdGlwUG9zaXRpb247XHJcbiAgcHJpdmF0ZSByZWFkb25seSBsYWJlbE9mRWxlbWVudE5vdEZvdW5kVGV4dEtleTogc3RyaW5nID0gJ3NoYXJlZFVpLWxhYmVsT2ZFbGVtZW50Tm90Rm91bmQnO1xyXG4gIHByaXZhdGUgbGFiZWxPZkVsZW1lbnROb3RGb3VuZFRleHQ6IHN0cmluZyA9ICcnO1xyXG5cclxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmVudGVyJywgWyckZXZlbnQnXSlcclxuICBvbkVudGVyS2V5KGV2ZW50OiBhbnkpIHtcclxuICAgIC8vIEhhbmRsZSB0aGUgZW50ZXIga2V5IGV2ZW50IGhlcmVcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxyXG4gIH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBJbnB1dHNcclxuICBASW5wdXQoKSBlbGVtZW50U291cmNlVXJsPzogc3RyaW5nIHwgKChpdGVtOiBhbnkpID0+IHN0cmluZykgfCAoKGl0ZW06IGFueSkgPT4gUHJvbWlzZTxzdHJpbmc+KTtcclxuICBASW5wdXQoKSBsaXN0U291cmNlVXJsPzogc3RyaW5nIHwgKChpdGVtOiBhbnkpID0+IHN0cmluZykgfCAoKGl0ZW06IGFueSkgPT4gUHJvbWlzZTxzdHJpbmc+KTtcclxuICBASW5wdXQoKSBsaXN0U291cmNlUGFyYW1zOiBLZXlWYWx1ZTxzdHJpbmcsIGFueT5bXSA9IFtdO1xyXG4gIEBJbnB1dChcImlkLWZpZWxkXCIpIGlkRmllbGQ6IHN0cmluZyA9IFwiXCI7XHJcbiAgQElucHV0KFwibGFiZWwtZmllbGRcIikgbGFiZWxGaWVsZDogc3RyaW5nID0gXCJcIjtcclxuICBASW5wdXQoKSBtdWx0aXBsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNvcnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgc2hvd0NsZWFyOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSByZWxvYWREYXRhU291cmNlOiBPYnNlcnZhYmxlPGFueT4gfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KCkgaXNGaWx0ZXJlZD86IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzZWxlY3RlZExhYmVsPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIG1heFdpZHRoOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBidXNpbmVzc0NsYXNzOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBzZWFyY2hEZWJvdW5jZVRpbWU6IG51bWJlciA9IDMwMDtcclxuXHJcbiAgQElucHV0KCkgY29tYm9UeXBlPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHN0YXR1c01ldGFkYXRhPzogU3RhdHVzTWV0YWRhdGFSZXNwb25zZTtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgY3VycmVudFJvd0l0ZW0oKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Um93SXRlbTtcclxuICB9XHJcblxyXG4gIHNldCBjdXJyZW50Um93SXRlbSh2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLl9jdXJyZW50Um93SXRlbSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgZ2V0IGRhdGFzb3VyY2UoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0YXNvdXJjZTtcclxuICB9XHJcblxyXG4gIHNldCBkYXRhc291cmNlKGRhdGFzb3VyY2U6IGFueVtdKSB7XHJcbiAgICB0aGlzLl9nb3R0ZW5EYXRhc291cmNlID0gZGF0YXNvdXJjZTtcclxuXHJcbiAgICBpZiAodGhpcy5fZ290dGVuRGF0YXNvdXJjZSkge1xyXG4gICAgICB0aGlzLl9tYXBHb3R0ZW5EYXRhU291cmNlVG9Mb2NhbERhdGFzb3VyY2UoKVxyXG4gICAgICB0aGlzLl9pc0lucHV0RGF0YXNvdXJjZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASW5wdXQoXCJiaW5kXCIpIGdldCBiaW5kKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2JpbmQ7XHJcbiAgfVxyXG5cclxuICBzZXQgYmluZCh2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAodGhpcy5fYmluZCA9PT0gdmFsdWUpIHJldHVybjtcclxuXHJcbiAgICBpZiAoaXNOdWxsT3JFbXB0eSh2YWx1ZSkpIHtcclxuICAgICAgdGhpcy5fYmluZCA9IG51bGw7XHJcbiAgICAgIHRoaXMuaW5wdXRGaWVsZCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5fYmluZCA9IHZhbHVlO1xyXG4gICAgICB0aGlzLmlucHV0RmllbGQgPSB2YWx1ZTtcclxuICAgICAgdGhpcy5fb25CaW5kU2V0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogTWF4aW11bSBudW1iZXIgb2Ygc2VsZWN0ZWQgaXRlbSBsYWJlbHMgdG8gZGlzcGxheSBkaXJlY3RseSBpbiB0aGUgTXVsdGlTZWxlY3QgaW5wdXQgZmllbGQuXHJcbiAqIElmIHRoZSB1c2VyIHNlbGVjdHMgbW9yZSB0aGFuIHRoaXMgbnVtYmVyLCB0aGUgY29tcG9uZW50IGNhbiBzaG93IGEgXCIrTlwiIG1lc3NhZ2UgaW5zdGVhZC5cclxuICogQHR5cGUge251bWJlcn1cclxuICogQGRlZmF1bHQgMVxyXG4gKi9cclxuICBASW5wdXQoKSBtYXhTZWxlY3RlZExhYmVsczogbnVtYmVyID0gMTtcclxuXHJcbiAgLyoqXHJcbiAqIE1heGltdW0gbnVtYmVyIG9mIHNlbGVjdGVkIGl0ZW1zIHRvIGRpc3BsYXkgaW5zaWRlIHRoZSB0b29sdGlwLlxyXG4gKiBJZiB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkIGl0ZW1zIGV4Y2VlZHMgdGhpcyBsaW1pdCwgdGhlIHRvb2x0aXAgY2FuIGRpc3BsYXkgYSBcIitOIG1vcmVcIiBtZXNzYWdlLlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKiBAZGVmYXVsdCAxMFxyXG4gKi9cclxuICBASW5wdXQoKSB0b29sdGlwTWF4RGlzcGxheWVkSXRlbXM6IG51bWJlciA9IDEwO1xyXG5cclxuICAvKipcclxuICogSW5wdXQgdG8gY29uZmlndXJlIGJpbmRpbmcgbW9kZS5cclxuICpcclxuICogQGRlcHJlY2F0ZWQg4pqg77iPICoqRmVhdHVyZSBwbGFubmVkKiog4oCTIGN1cnJlbnRseSBub3QgdXNlZC5cclxuICogSW50ZW5kZWQgZm9yIGZ1dHVyZSBlbmhhbmNlbWVudHMgdG8gYWxsb3cgYmluZGluZyBlaXRoZXIgdGhlIGZ1bGwgb2JqZWN0IG9yIGp1c3QgdGhlIGtleS5cclxuICovXHJcbiAgQElucHV0KCkgYmluZE1vZGU6IEJpbmRNb2RlID0gQmluZE1vZGUuRGVmYXVsdDtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIE91dHB1dHNcclxuICBAT3V0cHV0KCkgYmluZENoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KFwiZGF0YXNvdXJjZS1sb2FkZWRcIikgZGF0YVNvdXJjZUxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgaW5pdCA9IG5ldyBFdmVudEVtaXR0ZXI8Q29tYm9TdGF0dXNNb2RlbD4oKTtcclxuICBAT3V0cHV0KCkgaXNMb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPENvbWJvU3RhdHVzTW9kZWw+KCk7XHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkTGFiZWxDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAT3V0cHV0KCkgb25DbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgb25TZWFyY2hCdXR0b25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgLyoqXHJcbiAqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgc2VsZWN0aW9uIGNoYW5nZXMuXHJcbiAqXHJcbiAqIEBkZXByZWNhdGVkIOKaoO+4jyBUZW1wb3JhcnkgZmVhdHVyZSBmb3IgYSBzcGVjaWZpYyB1c2UgY2FzZS5cclxuICogQ3VycmVudGx5IG9ubHkgdXNlZCBpbiBbc29tZSBzY2VuYXJpb10uIFdpbGwgYmUgcmVtb3ZlZCBvciByZXBsYWNlZCBpbiBmdXR1cmUgdXBkYXRlcy5cclxuICovXHJcbiAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIGN0b3JcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBlbnRpdHlDb25maWd1cmF0aW9uU2VydmljZTogRW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF90c2lNb2RhbFNlcnZpY2U6IFRzaU1vZGFsU2VydmljZSxcclxuICAgIHByaXZhdGUgX21lc3NhZ2VTZXJ2aWNlOiBUc2lOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaHR0cENsaWVudDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgX2xvY2FsaXplOiBMb2NhbGl6ZVBpcGUsXHJcbiAgICBwcm90ZWN0ZWQgX2NkUmVmPzogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgKSB7XHJcbiAgICBzdXBlcihfY2RSZWYpO1xyXG4gICAgdGhpcy5sYWJlbE9mRWxlbWVudE5vdEZvdW5kVGV4dCA9IHRoaXMuX2xvY2FsaXplLnRyYW5zZm9ybSh0aGlzLmxhYmVsT2ZFbGVtZW50Tm90Rm91bmRUZXh0S2V5KSA/PyAnVU5LTk9XTiAhJztcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBoYW5kbGUgbGlmZWN5Y2xlIGhvb2tzXHJcbiAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xyXG4gICAgdGhpcy5fcmVsb2FkU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5fc2VhcmNoRGVib3VuY2VTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLl9zZWFyY2hTdWJqZWN0LmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNTdGF0dXNDb21ibygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNvbWJvVHlwZSA9PT0gJ3N0YXR1cyc7XHJcbiAgfVxyXG5cclxuICBsaWdodGVuQ29sb3IoaGV4OiBzdHJpbmcgfCB1bmRlZmluZWQsIHBlcmNlbnQ6IG51bWJlciA9IDcwKTogc3RyaW5nIHtcclxuICAgIGlmICghaGV4KSByZXR1cm4gJyc7XHJcbiAgICBoZXggPSBoZXgucmVwbGFjZSgvXiMvLCAnJyk7XHJcblxyXG4gICAgbGV0IHIgPSBwYXJzZUludChoZXguc3Vic3RyaW5nKDAsIDIpLCAxNik7XHJcbiAgICBsZXQgZyA9IHBhcnNlSW50KGhleC5zdWJzdHJpbmcoMiwgNCksIDE2KTtcclxuICAgIGxldCBiID0gcGFyc2VJbnQoaGV4LnN1YnN0cmluZyg0LCA2KSwgMTYpO1xyXG5cclxuICAgIHIgPSBNYXRoLm1pbigyNTUsIE1hdGguZmxvb3IociArICgyNTUgLSByKSAqIHBlcmNlbnQgLyAxMDApKTtcclxuICAgIGcgPSBNYXRoLm1pbigyNTUsIE1hdGguZmxvb3IoZyArICgyNTUgLSBnKSAqIHBlcmNlbnQgLyAxMDApKTtcclxuICAgIGIgPSBNYXRoLm1pbigyNTUsIE1hdGguZmxvb3IoYiArICgyNTUgLSBiKSAqIHBlcmNlbnQgLyAxMDApKTtcclxuXHJcbiAgICBjb25zdCBuZXdIZXggPVxyXG4gICAgICAnIycgK1xyXG4gICAgICBbciwgZywgYl1cclxuICAgICAgICAubWFwKHggPT4geC50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSlcclxuICAgICAgICAuam9pbignJyk7XHJcblxyXG4gICAgcmV0dXJuIG5ld0hleDtcclxuICB9XHJcblxyXG4gIGdldFJlYWRhYmxlVGV4dENvbG9yKGhleDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcclxuICAgIGlmICghaGV4KSByZXR1cm4gJ2JsYWNrJztcclxuXHJcbiAgICBoZXggPSBoZXgucmVwbGFjZSgvXiMvLCAnJyk7XHJcbiAgICBjb25zdCByID0gcGFyc2VJbnQoaGV4LnN1YnN0cmluZygwLCAyKSwgMTYpO1xyXG4gICAgY29uc3QgZyA9IHBhcnNlSW50KGhleC5zdWJzdHJpbmcoMiwgNCksIDE2KTtcclxuICAgIGNvbnN0IGIgPSBwYXJzZUludChoZXguc3Vic3RyaW5nKDQsIDYpLCAxNik7XHJcblxyXG4gICAgY29uc3QgYnJpZ2h0bmVzcyA9IChyICogMjk5ICsgZyAqIDU4NyArIGIgKiAxMTQpIC8gMTAwMDtcclxuXHJcbiAgICByZXR1cm4gYnJpZ2h0bmVzcyA+IDIzMCA/ICdibGFjaycgOiBgIyR7aGV4fWA7XHJcbiAgfVxyXG5cclxuICBnZXRTdGF0dXNPcHRpb24odmFsdWU6IHN0cmluZyk6IFN0YXR1c09wdGlvbiB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0dXNNZXRhZGF0YT8ub3B0aW9ucy5maW5kKG8gPT4gby50cmFuc2xhdGVkTGFiZWwgPT09IHZhbHVlKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIGFzeW5jIG5nT25Jbml0KCkge1xyXG4gICAgc3VwZXIubmdPbkluaXQoKTtcclxuXHJcbiAgICB0aGlzLl9zZWFyY2hEZWJvdW5jZVN1YnNjcmlwdGlvbiA9IHRoaXMuX3NlYXJjaFN1YmplY3QucGlwZShcclxuICAgICAgZGVib3VuY2VUaW1lKHRoaXMuc2VhcmNoRGVib3VuY2VUaW1lKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxyXG4gICAgKS5zdWJzY3JpYmUoa2V5d29yZCA9PiB7XHJcbiAgICAgIHRoaXMuX2xvYWRTZXJ2ZXJTaWRlUGFnZWREYXRhU291cmNlKGtleXdvcmQpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jaGVja0lmQWR2YW5jZWRTZWFyY2hDb21wb25lbnRFeGlzdHMoKTtcclxuICAgIGF3YWl0IHRoaXMuY2hlY2tJZkZvcm1OYW1lRXhpc3RzKCk7XHJcbiAgICB0aGlzLl9pbml0UGFyYW1ldGVyc1dpdGhEZWZhdWx0cygpO1xyXG4gICAgdGhpcy5faW5pdFJlbG9hZERhdGFTb3VyY2VTdWJzY3JpcHRpb24oKTtcclxuICAgIGF3YWl0IHRoaXMuX2luaXRpYWxMb2FkRGF0YSgpO1xyXG5cclxuICAgIGxldCBsYW5ndWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShydGxNb2RlS2V5cy5ydGxNb2RlRW5hYmxlZCk7XHJcblxyXG4gICAgaWYgKGxhbmd1ZSAmJiBKU09OLnBhcnNlKGxhbmd1ZSkpIHtcclxuICAgICAgdGhpcy5pc0FyID0gdHJ1ZVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuaXNBciA9IGZhbHNlXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5tYXhXaWR0aCA9IHRoaXMubWF4V2lkdGggKyAncmVtJztcclxuICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG4gIEBJbnB1dCgpIHNob3dTZWFyY2hCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dBZGRCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dDb25zdWx0QnV0dG9uPzogYm9vbGVhbjtcclxuICBASW5wdXQoKSBzaG93VXBkYXRlQnV0dG9uPzogYm9vbGVhbjtcclxuICBzaG93QWR2YW5jZWRTZWFyY2hCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblxyXG4gIGNoZWNrSWZBZHZhbmNlZFNlYXJjaENvbXBvbmVudEV4aXN0cygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5idXNpbmVzc0NsYXNzKSB7XHJcbiAgICAgIHRoaXMuc2hvd0FkdmFuY2VkU2VhcmNoQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuZW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UuZ2V0RW50aXR5SW5mbyh0aGlzLmJ1c2luZXNzQ2xhc3MpLnN1YnNjcmliZSh7XHJcblxyXG4gICAgICBuZXh0OiAoZW50aXR5OiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNob3dBZHZhbmNlZFNlYXJjaEJ1dHRvbiA9ICEhZW50aXR5Py5hZHZhbmNlZFNlYXJjaENvbXBvbmVudDtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgdGhpcy5zaG93QWR2YW5jZWRTZWFyY2hCdXR0b24gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjaGVja0lmRm9ybU5hbWVFeGlzdHMoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLmJ1c2luZXNzQ2xhc3MpIHtcclxuICAgICAgICBpZiAodGhpcy5zaG93QWRkQnV0dG9uID09PSB1bmRlZmluZWQpIHRoaXMuc2hvd0FkZEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLnNob3dDb25zdWx0QnV0dG9uID09PSB1bmRlZmluZWQpIHRoaXMuc2hvd0NvbnN1bHRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5zaG93VXBkYXRlQnV0dG9uID09PSB1bmRlZmluZWQpIHRoaXMuc2hvd1VwZGF0ZUJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuZW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UuZ2V0RW50aXR5SW5mbyh0aGlzLmJ1c2luZXNzQ2xhc3MpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKGVudGl0eTogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBoYXNGb3JtID0gISFlbnRpdHk/LmZvcm1OYW1lO1xyXG5cclxuICAgICAgICAgIGlmICghaGFzRm9ybSkge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dBZGRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zaG93VXBkYXRlQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0NvbnN1bHRCdXR0b24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5zaG93Q29uc3VsdEJ1dHRvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0NvbnN1bHRCdXR0b24gPSB0aGlzLnNob3dBZGRCdXR0b247XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuc2hvd1VwZGF0ZUJ1dHRvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1VwZGF0ZUJ1dHRvbiA9IHRoaXMuc2hvd0FkZEJ1dHRvbjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLnNob3dBZGRCdXR0b24gPT09IHVuZGVmaW5lZCkgdGhpcy5zaG93QWRkQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAodGhpcy5zaG93Q29uc3VsdEJ1dHRvbiA9PT0gdW5kZWZpbmVkKSB0aGlzLnNob3dDb25zdWx0QnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAodGhpcy5zaG93VXBkYXRlQnV0dG9uID09PSB1bmRlZmluZWQpIHRoaXMuc2hvd1VwZGF0ZUJ1dHRvbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgb3BlbkFkdmFuY2VkU2VhcmNoQ29tcG9uZW50KCkge1xyXG4gICAgaWYgKCF0aGlzLmJ1c2luZXNzQ2xhc3MpIHtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2U/LmVycm9yKFwic2VhcmNoX2NvbWJvX2NvbXBvbmVudF9uYW1lRW50aXR5XCIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5lbnRpdHlDb25maWd1cmF0aW9uU2VydmljZS5nZXRFbnRpdHlJbmZvKHRoaXMuYnVzaW5lc3NDbGFzcykuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiBhc3luYyAoZW50aXR5OiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2hvd0FkdmFuY2VkU2VhcmNoQnV0dG9uID0gISFlbnRpdHk/LmFkdmFuY2VkU2VhcmNoQ29tcG9uZW50O1xyXG4gICAgICAgICAgaWYgKCFlbnRpdHkgfHwgIWVudGl0eS5hZHZhbmNlZFNlYXJjaENvbXBvbmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZT8uZXJyb3IoXCJzZWFyY2hfY29tYm9fY29tcG9uZW50X2Zvcm1fbmFtZV9uZlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGxldCBjb25mOiBEeW5hbWljRGlhbG9nQ29uZmlnID0ge1xyXG4gICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgaXNBZHZhbmNlZFNlYXJjaDogdHJ1ZSxcclxuICAgICAgICAgICAgICBzZWxlY3Rpb25Nb2RlOiB0aGlzLm11bHRpcGxlID8gR3JpZFNlbGVjdGlvbk1vZGUuTXVsdGlwbGUgOiBHcmlkU2VsZWN0aW9uTW9kZS5TaW5nbGUsXHJcbiAgICAgICAgICAgICAgbW9kZTogQ29tcG9uZW50X01vZGVzLkNPTlNVTFQsXHJcbiAgICAgICAgICAgICAgY3VzdG9tRGF0YTogZW50aXR5LFxyXG4gICAgICAgICAgICAgIHNlbGVjdEtleU9ubHk6IHRoaXMubXVsdGlwbGUgPyBmYWxzZSA6IHRydWUsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHN0eWxlQ2xhc3M6ICcnLFxyXG4gICAgICAgICAgICB3aWR0aDogTW9kYWxTaXplRW51bS5NZWRpdW0ud2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogTW9kYWxTaXplRW51bS5NZWRpdW0uaGVpZ2h0LFxyXG4gICAgICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgdGhpcy5fZGlhbG9nUmVmZXJlbmNlID0gdGhpcy5fdHNpTW9kYWxTZXJ2aWNlPy5vcGVuKFR5cGVSZWdpc3RyeUhlbHBlci5nZXRUeXBlKGVudGl0eS5hZHZhbmNlZFNlYXJjaENvbXBvbmVudCksIGNvbmYpO1xyXG5cclxuICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZmVyZW5jZT8ub25DbG9zZS5zdWJzY3JpYmUoKHNlbGVjdGlvbjogYW55KSA9PiB0aGlzLmhhbmRsZUV4dGVybmFsU2VsZWN0aW9uKHNlbGVjdGlvbikpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICAgIHRoaXMuc2hvd0FkdmFuY2VkU2VhcmNoQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9wZW5TZWFyY2hEaWFsb2coKSB7XHJcbiAgICBpZiAoIXRoaXMuYnVzaW5lc3NDbGFzcykge1xyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZT8uZXJyb3IoXCJzZWFyY2hfY29tYm9fY29tcG9uZW50X25hbWVFbnRpdHlcIik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5lbnRpdHlDb25maWd1cmF0aW9uU2VydmljZS5nZXRFbnRpdHlJbmZvKHRoaXMuYnVzaW5lc3NDbGFzcykuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiBhc3luYyAoZW50aXR5OiBhbnkpID0+IHtcclxuICAgICAgICAgIGxldCBjb25mOiBEeW5hbWljRGlhbG9nQ29uZmlnID0ge1xyXG4gICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgaXNBZHZhbmNlZFNlYXJjaDogdHJ1ZSxcclxuICAgICAgICAgICAgICBzZWxlY3Rpb25Nb2RlOiB0aGlzLm11bHRpcGxlID8gR3JpZFNlbGVjdGlvbk1vZGUuTXVsdGlwbGUgOiBHcmlkU2VsZWN0aW9uTW9kZS5TaW5nbGUsXHJcbiAgICAgICAgICAgICAgbW9kZTogQ29tcG9uZW50X01vZGVzLkNPTlNVTFQsXHJcbiAgICAgICAgICAgICAgY3VzdG9tRGF0YTogZW50aXR5LFxyXG4gICAgICAgICAgICAgIHNlbGVjdEtleU9ubHk6IHRoaXMubXVsdGlwbGUgPyBmYWxzZSA6IHRydWUsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHN0eWxlQ2xhc3M6ICcnLFxyXG4gICAgICAgICAgICB3aWR0aDogTW9kYWxTaXplRW51bS5NZWRpdW0ud2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogTW9kYWxTaXplRW51bS5NZWRpdW0uaGVpZ2h0LFxyXG4gICAgICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgaWYgKCFlbnRpdHkgfHwgIWVudGl0eS5saXN0Q29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlPy5lcnJvcihcInNlYXJjaF9jb21ib19jb21wb25lbnRfZm9ybV9uYW1lX25mXCIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLl9kaWFsb2dSZWZlcmVuY2UgPSB0aGlzLl90c2lNb2RhbFNlcnZpY2U/Lm9wZW4oVHlwZVJlZ2lzdHJ5SGVscGVyLmdldFR5cGUoZW50aXR5Lmxpc3RDb21wb25lbnQpLCBjb25mKTtcclxuICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZmVyZW5jZT8ub25DbG9zZS5zdWJzY3JpYmUoKHNlbGVjdGlvbjogYW55KSA9PiB0aGlzLmhhbmRsZUV4dGVybmFsU2VsZWN0aW9uKHNlbGVjdGlvbikpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkRWxlbWVudCgpIHtcclxuICAgIGlmICghdGhpcy5idXNpbmVzc0NsYXNzKSB7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlPy5lcnJvcihcInNlYXJjaF9jb21ib19jb21wb25lbnRfbmFtZUVudGl0eVwiKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldEVudGl0eUluZm8odGhpcy5idXNpbmVzc0NsYXNzKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IGFzeW5jIChlbnRpdHk6IGFueSkgPT4ge1xyXG4gICAgICAgICAgbGV0IGNvbmY6IER5bmFtaWNEaWFsb2dDb25maWcgPSB7XHJcbiAgICAgICAgICAgIGRhdGE6IHsgbW9kZTogQ29tcG9uZW50X01vZGVzLkNSRUFURSwgY3VzdG9tRGF0YTogZW50aXR5IH0sXHJcbiAgICAgICAgICAgIHN0eWxlQ2xhc3M6ICcnLFxyXG4gICAgICAgICAgICB3aWR0aDogTW9kYWxTaXplRW51bS5NZWRpdW0ud2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogTW9kYWxTaXplRW51bS5NZWRpdW0uaGVpZ2h0LFxyXG4gICAgICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgaWYgKCFlbnRpdHkgfHwgIWVudGl0eS5mb3JtTmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZT8uZXJyb3IoXCJzZWFyY2hfY29tYm9fY29tcG9uZW50X2Zvcm1fbmFtZV9uZlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5fZGlhbG9nUmVmZXJlbmNlID0gdGhpcy5fdHNpTW9kYWxTZXJ2aWNlPy5vcGVuKFR5cGVSZWdpc3RyeUhlbHBlci5nZXRUeXBlKGVudGl0eS5mb3JtTmFtZSksIGNvbmYpO1xyXG4gICAgICAgICAgdGhpcy5fZGlhbG9nUmVmZXJlbmNlPy5vbkNsb3NlLnN1YnNjcmliZSgoc2F2ZWRFbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHNhdmVkRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2F2ZWRFbGVtZW50ID09PSAnb2JqZWN0JyAmJiBzYXZlZEVsZW1lbnQgIT09IG51bGwgJiYgJ3VpZCcgaW4gc2F2ZWRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJpbmRWYWx1ZUNoYW5nZWQoc2F2ZWRFbGVtZW50Py51aWQpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygc2F2ZWRFbGVtZW50ID09PSAnc3RyaW5nJyAmJiBHdWlkLmlzVmFsaWQoc2F2ZWRFbGVtZW50KSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kVmFsdWVDaGFuZ2VkKHNhdmVkRWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBpc0RhdGFzb3VyY2VFbXB0eSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGFMb2FkZWQgJiYgKCF0aGlzLmRhdGFzb3VyY2UgfHwgdGhpcy5kYXRhc291cmNlLmxlbmd0aCA9PT0gMCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFzTG9hZEVycm9yOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cclxuICB1cGRhdGVFbGVtZW50KCkge1xyXG4gICAgaWYgKCF0aGlzLmJ1c2luZXNzQ2xhc3MpIHtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2U/LmVycm9yKFwic2VhcmNoX2NvbWJvX2NvbXBvbmVudF9uYW1lRW50aXR5XCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmJpbmQpIHtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2U/LmVycm9yKFwiQXVjdW4gw6lsw6ltZW50IHPDqWxlY3Rpb25uw6kgcG91ciBsYSBtaXNlIMOgIGpvdXIuXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5lbnRpdHlDb25maWd1cmF0aW9uU2VydmljZS5nZXRFbnRpdHlJbmZvKHRoaXMuYnVzaW5lc3NDbGFzcykuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogYXN5bmMgKGVudGl0eTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKCFlbnRpdHkgfHwgIWVudGl0eS5mb3JtTmFtZSkge1xyXG4gICAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2U/LmVycm9yKFwic2VhcmNoX2NvbWJvX2NvbXBvbmVudF9mb3JtX25hbWVfbmZcIik7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBjb25mOiBEeW5hbWljRGlhbG9nQ29uZmlnID0ge1xyXG4gICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBtb2RlOiBDb21wb25lbnRfTW9kZXMuRURJVCxcclxuICAgICAgICAgICAgY3VzdG9tRGF0YTogZW50aXR5LFxyXG4gICAgICAgICAgICBpZDogdGhpcy5iaW5kXHJcbiAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgIHN0eWxlQ2xhc3M6ICcnLFxyXG4gICAgICAgICAgd2lkdGg6IE1vZGFsU2l6ZUVudW0uTWVkaXVtLndpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiBNb2RhbFNpemVFbnVtLk1lZGl1bS5oZWlnaHQsXHJcbiAgICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLl9kaWFsb2dSZWZlcmVuY2UgPSB0aGlzLl90c2lNb2RhbFNlcnZpY2U/Lm9wZW4oVHlwZVJlZ2lzdHJ5SGVscGVyLmdldFR5cGUoZW50aXR5LmZvcm1OYW1lKSwgY29uZik7XHJcblxyXG4gICAgICAgIHRoaXMuX2RpYWxvZ1JlZmVyZW5jZT8ub25DbG9zZS5zdWJzY3JpYmUoKHVwZGF0ZWRFbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmICh1cGRhdGVkRWxlbWVudCkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHVwZGF0ZWRFbGVtZW50ID09PSAnb2JqZWN0JyAmJiB1cGRhdGVkRWxlbWVudCAhPT0gbnVsbCAmJiAndWlkJyBpbiB1cGRhdGVkRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYmluZFZhbHVlQ2hhbmdlZCh1cGRhdGVkRWxlbWVudD8udWlkKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdXBkYXRlZEVsZW1lbnQgPT09ICdzdHJpbmcnICYmIEd1aWQuaXNWYWxpZCh1cGRhdGVkRWxlbWVudCkpIHtcclxuICAgICAgICAgICAgICB0aGlzLmJpbmRWYWx1ZUNoYW5nZWQodXBkYXRlZEVsZW1lbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNvbnN1bHRFbGVtZW50KCkge1xyXG4gICAgaWYgKCF0aGlzLmJ1c2luZXNzQ2xhc3MpIHtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2U/LmVycm9yKFwic2VhcmNoX2NvbWJvX2NvbXBvbmVudF9uYW1lRW50aXR5XCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmJpbmQpIHtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2U/LmVycm9yKFwiQXVjdW4gw6lsw6ltZW50IHPDqWxlY3Rpb25uw6kgcG91ciBsYSBjb25zdWx0YXRpb24uXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5lbnRpdHlDb25maWd1cmF0aW9uU2VydmljZS5nZXRFbnRpdHlJbmZvKHRoaXMuYnVzaW5lc3NDbGFzcykuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogYXN5bmMgKGVudGl0eTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKCFlbnRpdHkgfHwgIWVudGl0eS5mb3JtTmFtZSkge1xyXG4gICAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2U/LmVycm9yKFwic2VhcmNoX2NvbWJvX2NvbXBvbmVudF9mb3JtX25hbWVfbmZcIik7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjb25mOiBEeW5hbWljRGlhbG9nQ29uZmlnID0ge1xyXG4gICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBtb2RlOiBDb21wb25lbnRfTW9kZXMuQ09OU1VMVCxcclxuICAgICAgICAgICAgY3VzdG9tRGF0YTogZW50aXR5LFxyXG4gICAgICAgICAgICBpZDogdGhpcy5iaW5kXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgc3R5bGVDbGFzczogJycsXHJcbiAgICAgICAgICB3aWR0aDogTW9kYWxTaXplRW51bS5NZWRpdW0ud2lkdGgsXHJcbiAgICAgICAgICBoZWlnaHQ6IE1vZGFsU2l6ZUVudW0uTWVkaXVtLmhlaWdodCxcclxuICAgICAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuX2RpYWxvZ1JlZmVyZW5jZSA9IHRoaXMuX3RzaU1vZGFsU2VydmljZT8ub3BlbihcclxuICAgICAgICAgIFR5cGVSZWdpc3RyeUhlbHBlci5nZXRUeXBlKGVudGl0eS5mb3JtTmFtZSksXHJcbiAgICAgICAgICBjb25mXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5fZGlhbG9nUmVmZXJlbmNlPy5vbkNsb3NlLnN1YnNjcmliZSgoXykgPT4ge1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJldXIgbG9ycyBkZSBsYSByw6ljdXDDqXJhdGlvbiBkZXMgaW5mb3MgZCdlbnRpdMOpIDpcIiwgZXJyKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gaGFuZGxlIGV2ZW50c1xyXG4gIGhhbmRsZUNoYW5nZUV2ZW50KGRyb3Bkb3duQ2hhbmdlRXZlbnQ6IERyb3Bkb3duQ2hhbmdlRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuYmluZFZhbHVlQ2hhbmdlZChkcm9wZG93bkNoYW5nZUV2ZW50LnZhbHVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYmluZFZhbHVlQ2hhbmdlZChuZXdWYWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLmJpbmQgPSBuZXdWYWx1ZTtcclxuICAgIHRoaXMuaXNEaXJ0eSA9IHRydWVcclxuICAgIHRoaXMuYmluZENoYW5nZS5lbWl0KHRoaXMuYmluZCk7XHJcbiAgICB0aGlzLl9oYW5kbGVTZWxlY3RlZEVsZW1lbnRzTGFiZWxDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIHNlYXJjaFZhbHVlQ2hhbmdlZChzZWFyY2hWYWx1ZTogYW55KSB7XHJcbiAgICBpZiAodGhpcy5pc0ZpbHRlcmVkICYmICF0aGlzLl9pc0lucHV0RGF0YXNvdXJjZSkge1xyXG4gICAgICB0aGlzLmlzRmlsdGVyaW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5fc2VhcmNoU3ViamVjdC5uZXh0KHNlYXJjaFZhbHVlLmZpbHRlciA/PyAnJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbk9wZW4oKSB7XHJcbiAgICB0aGlzLmlzRmlsdGVyaW5nID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNGaWx0ZXJlZCB8fCB0eXBlb2YgdGhpcy5saXN0U291cmNlVXJsID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICB0aGlzLl9sb2FkRGF0YVNvdXJjZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGlzTm9SZXN1bHRBZnRlckZpbHRlcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuZGF0YUxvYWRlZCAmJlxyXG4gICAgICB0aGlzLmRhdGFzb3VyY2UubGVuZ3RoID09PSAwICYmXHJcbiAgICAgIHRoaXMuaXNGaWx0ZXJpbmcgJiZcclxuICAgICAgIXRoaXMuaGFzTG9hZEVycm9yXHJcbiAgICApO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIHByaXZhdGUgbWV0aG9kc1xyXG4gIHByaXZhdGUgX2xvYWREYXRhU291cmNlKCkge1xyXG4gICAgaWYgKCF0aGlzLl9pc0lucHV0RGF0YXNvdXJjZSkge1xyXG4gICAgICBpZiAodGhpcy5pc0ZpbHRlcmVkKSB7XHJcbiAgICAgICAgdGhpcy5fbG9hZFNlcnZlclNpZGVQYWdlZERhdGFTb3VyY2UoKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9sb2FkTm90U2VydmVyU2lkZVBhZ2VkRGF0YVNvdXJjZSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9sb2FkU2VydmVyU2lkZVBhZ2VkRGF0YVNvdXJjZShrZXl3b3JkOiBzdHJpbmcgPSBcIlwiKSB7XHJcbiAgICBjb25zdCB1cmwgPSBhd2FpdCB0aGlzLl9pbml0TGlzdERhdGFTb3VyY2VFbmRwb2ludCgpO1xyXG4gICAgaWYgKCF1cmwpIHtcclxuICAgICAgdGhpcy5kYXRhTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubG9hZERhdGEodXJsLCB0aGlzLl9nZW5lcmF0ZUh0dHBQYXJhbXMoa2V5d29yZCkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfbG9hZE5vdFNlcnZlclNpZGVQYWdlZERhdGFTb3VyY2UoKSB7XHJcbiAgICBjb25zdCB1cmwgPSBhd2FpdCB0aGlzLl9pbml0TGlzdERhdGFTb3VyY2VFbmRwb2ludCgpO1xyXG4gICAgaWYgKCF1cmwpIHtcclxuICAgICAgdGhpcy5kYXRhTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubG9hZERhdGEodXJsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZERhdGEodXJsOiBzdHJpbmcsIHBhcmFtcz86IGFueSkge1xyXG4gICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgIHRoaXMuX2RhdGFzb3VyY2UgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRhdGFMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaGFzTG9hZEVycm9yID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5faHR0cENsaWVudC5nZXQodXJsLCBwYXJhbXMpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLl9nb3R0ZW5EYXRhc291cmNlID0gZGF0YTtcclxuICAgICAgICB0aGlzLl9tYXBHb3R0ZW5EYXRhU291cmNlVG9Mb2NhbERhdGFzb3VyY2UoKTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIGRhdGFzb3VyY2UnLCBlcnJvcik7XHJcbiAgICAgICAgdGhpcy5oYXNMb2FkRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZGF0YUxvYWRlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzQXBpRXJyb3IoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhTG9hZGVkICYmIHRoaXMuaGFzTG9hZEVycm9yO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfZW5zdXJlU2VsZWN0ZWRPcHRpb25FeGlzdHMoKSB7XHJcbiAgICAvLyBubyBfZW5zdXJlU2VsZWN0ZWRPcHRpb25FeGlzdHMgZm9yIG11bHRpLXNlbGVjdFxyXG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHJldHVybjtcclxuXHJcbiAgICBpZiAodGhpcy5iaW5kID09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBleGlzdHMgPSB0aGlzLmRhdGFzb3VyY2Uuc29tZSh4ID0+IHguaWQgPT0gdGhpcy5iaW5kKTtcclxuXHJcbiAgICBpZiAoIWV4aXN0cykge1xyXG4gICAgICBhd2FpdCB0aGlzLl9sb2FkQmluZEVsZW1lbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBmaW5kU2VsZWN0ZWRPcHRpb24gPSB0aGlzLmRhdGFzb3VyY2UuZmluZCgoaTogYW55KSA9PiBpLmlkID09IHRoaXMuYmluZCk7XHJcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KGZpbmRTZWxlY3RlZE9wdGlvbik7XHJcbiAgICBpZiAoZmluZFNlbGVjdGVkT3B0aW9uPy5sYWJlbCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTGFiZWxDaGFuZ2UuZW1pdChmaW5kU2VsZWN0ZWRPcHRpb24ubGFiZWwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfbG9hZEJpbmRFbGVtZW50KCkge1xyXG4gICAgLy8gbm8gX2xvYWRCaW5kRWxlbWVudCBmb3IgbXVsdGktc2VsZWN0XHJcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkgcmV0dXJuO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuZGF0YUxvYWRlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgaWYgKCF0aGlzLmlzRWxlbWVudFNvdXJjZVVybFZhbGlkKCkgfHwgIXRoaXMuYmluZCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgZGF0YTogYW55ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5faHR0cENsaWVudC5nZXQoYXdhaXQgdGhpcy5faW5pdEVsZW1lbnRFbmRwb2ludCgpKSk7XHJcblxyXG4gICAgICBpZiAoIWRhdGEpIHJldHVybjtcclxuXHJcbiAgICAgIGNvbnN0IG9wdGlvbiA9IHtcclxuICAgICAgICBpZDogZGF0YVt0aGlzLmlkRmllbGRdLFxyXG4gICAgICAgIGxhYmVsOiBkYXRhW3RoaXMubGFiZWxGaWVsZF1cclxuICAgICAgfTtcclxuXHJcbiAgICAgIGlmICghdGhpcy5kYXRhc291cmNlLnNvbWUoeCA9PiB4LmlkID09PSBvcHRpb24uaWQpKSB7XHJcbiAgICAgICAgdGhpcy5fZGF0YXNvdXJjZSA9IFsuLi50aGlzLmRhdGFzb3VyY2UsIG9wdGlvbl07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRMYWJlbENoYW5nZS5lbWl0KG9wdGlvbi5sYWJlbCk7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZUxvYWRlZC5lbWl0KCk7XHJcblxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgc2VsZWN0ZWQgZWxlbWVudCcsIGVycm9yKTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHRoaXMuZGF0YUxvYWRlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jb21wYXJlRnVuY3Rpb24oKTogKGE6IGFueSwgYjogYW55KSA9PiBudW1iZXIge1xyXG4gICAgcmV0dXJuIChhLCBiKSA9PiB7XHJcbiAgICAgIGlmIChhLmxhYmVsID4gYi5sYWJlbCkgeyByZXR1cm4gMTsgfVxyXG4gICAgICBpZiAoYS5sYWJlbCA8IGIubGFiZWwpIHsgcmV0dXJuIC0xOyB9XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNMaXN0U291cmNlVXJsVmFsaWQoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMubGlzdFNvdXJjZVVybCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ2xpc3RTb3VyY2VVcmwgdXJsIG5vdCBwcm92aWRlZCcpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNFbGVtZW50U291cmNlVXJsVmFsaWQoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodHlwZW9mIHRoaXMuZWxlbWVudFNvdXJjZVVybCA9PSBcInN0cmluZ1wiICYmICF0aGlzLmVsZW1lbnRTb3VyY2VVcmwpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdlbGVtZW50U291cmNlVXJsIG5vdCBkZWZpbmVkJyk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXRQYXJhbWV0ZXJzV2l0aERlZmF1bHRzKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaWRGaWVsZCA9PSB1bmRlZmluZWQgfHwgdGhpcy5pZEZpZWxkID09PSBcIlwiKSB7XHJcbiAgICAgIHRoaXMuaWRGaWVsZCA9IFwiaWRcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5sYWJlbEZpZWxkID09IHVuZGVmaW5lZCB8fCB0aGlzLmxhYmVsRmllbGQgPT09IFwiXCIpIHtcclxuICAgICAgdGhpcy5sYWJlbEZpZWxkID0gXCJsaWJlbGxlXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9pbml0RWxlbWVudEVuZHBvaW50KCk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICBpZiAodGhpcy5iaW5kKSB7XHJcblxyXG4gICAgICBpZiAodHlwZW9mIHRoaXMuZWxlbWVudFNvdXJjZVVybCA9PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgcmV0dXJuIGVuY29kZVVSSShgJHt0aGlzLmVsZW1lbnRTb3VyY2VVcmx9LyR7dGhpcy5iaW5kfWApO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5lbGVtZW50U291cmNlVXJsID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgIGxldCB0ZW1wVXJsID0gYXdhaXQgdGhpcy5lbGVtZW50U291cmNlVXJsKHRoaXMuY3VycmVudFJvd0l0ZW0pXHJcbiAgICAgICAgcmV0dXJuIGVuY29kZVVSSShgJHt0ZW1wVXJsfS8ke3RoaXMuYmluZH1gKVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoJ25vIGJpbmQgaW5wdXQgd2FzIHByb3ZpZGVkLCBjYW5ub3QgY3JlYXRlIGJpbmRFbGVtZW50VXJsJylcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2luaXRMaXN0RGF0YVNvdXJjZUVuZHBvaW50KCk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xyXG4gICAgaWYgKCF0aGlzLmxpc3RTb3VyY2VVcmwpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdMaXN0IHNvdXJjZSBVUkwgbm90IHByb3ZpZGVkJyk7XHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgdGhpcy5saXN0U291cmNlVXJsID09IFwic3RyaW5nXCIpIHtcclxuICAgICAgcmV0dXJuIGVuY29kZVVSSShgJHt0aGlzLmxpc3RTb3VyY2VVcmx9YCk7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHRoaXMubGlzdFNvdXJjZVVybCA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgbGV0IHRlbXBVcmwgPSBhd2FpdCB0aGlzLmxpc3RTb3VyY2VVcmwodGhpcy5jdXJyZW50Um93SXRlbSlcclxuICAgICAgcmV0dXJuIGVuY29kZVVSSShgJHt0ZW1wVXJsfWApXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9pbml0aWFsTG9hZERhdGEoKSB7XHJcbiAgICBpZiAodGhpcy5faXNJbnB1dERhdGFzb3VyY2UpIHtcclxuICAgICAgdGhpcy5fbWFwR290dGVuRGF0YVNvdXJjZVRvTG9jYWxEYXRhc291cmNlKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuaXNGaWx0ZXJlZCkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX2xvYWRCaW5kRWxlbWVudCgpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2xvYWROb3RTZXJ2ZXJTaWRlUGFnZWREYXRhU291cmNlKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX29uQmluZFNldCgpIHtcclxuICAgIGlmICh0aGlzLl9pc0lucHV0RGF0YXNvdXJjZSkge1xyXG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgY29uc3QgZm91bmQgPSB0aGlzLmRhdGFzb3VyY2UuZmluZCgoaTogYW55KSA9PiBpLmlkID09IHRoaXMuYmluZCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoZm91bmQpO1xyXG4gICAgICBpZiAoZm91bmQ/LmxhYmVsKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZExhYmVsQ2hhbmdlLmVtaXQoZm91bmQubGFiZWwpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBhd2FpdCB0aGlzLl9lbnN1cmVTZWxlY3RlZE9wdGlvbkV4aXN0cygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkQWxsRGF0YSgpIHtcclxuICAgIGlmICh0aGlzLmlzRmlsdGVyZWQpIHtcclxuICAgICAgdGhpcy5fbG9hZFNlcnZlclNpZGVQYWdlZERhdGFTb3VyY2UoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLl9sb2FkTm90U2VydmVyU2lkZVBhZ2VkRGF0YVNvdXJjZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5pdFJlbG9hZERhdGFTb3VyY2VTdWJzY3JpcHRpb24oKSB7XHJcbiAgICBpZiAodGhpcy5yZWxvYWREYXRhU291cmNlKSB7XHJcbiAgICAgIHRoaXMuX3JlbG9hZFN1YnNjcmlwdGlvbiA9IHRoaXMucmVsb2FkRGF0YVNvdXJjZS5zdWJzY3JpYmUoXHJcbiAgICAgICAgKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiAoZGF0YSkgPT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgaWYgKGRhdGEgIT0gdW5kZWZpbmVkICYmIGRhdGEgIT0gbnVsbCAmJiBkYXRhICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5saXN0U291cmNlVXJsID0gZGF0YTtcclxuICAgICAgICAgICAgICB0aGlzLmxvYWRBbGxEYXRhKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlID0gZGF0YVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX21hcEdvdHRlbkRhdGFTb3VyY2VUb0xvY2FsRGF0YXNvdXJjZSgpOiB2b2lkIHtcclxuXHJcbiAgICBsZXQgdGVtcEFycmF5OiBhbnlbXSA9IFtdO1xyXG5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuX2dvdHRlbkRhdGFzb3VyY2UpKSB7XHJcblxyXG4gICAgICB0aGlzLl9nb3R0ZW5EYXRhc291cmNlLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGxldCBvYmogPSB7XHJcbiAgICAgICAgICBpZDogZWxlbWVudFt0aGlzLmlkRmllbGRdLFxyXG4gICAgICAgICAgbGFiZWw6IGVsZW1lbnRbdGhpcy5sYWJlbEZpZWxkXVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRlbXBBcnJheS5wdXNoKG9iaik7XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgIHRoaXMuX2RhdGFzb3VyY2UgPSB0ZW1wQXJyYXk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5fZGF0YXNvdXJjZSA9IHRoaXMuX2Rpc3RpbmN0QnlJZChbLi4udGhpcy5kYXRhc291cmNlLCAuLi50ZW1wQXJyYXldKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zb3J0KSB7XHJcbiAgICAgIHRoaXMuX2RhdGFzb3VyY2Uuc29ydCh0aGlzLl9jb21wYXJlRnVuY3Rpb24oKSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kYXRhTG9hZGVkID0gdHJ1ZTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZUxvYWRlZC5lbWl0KCk7XHJcblxyXG4gICAgaWYgKCF0aGlzLl9pc0lucHV0RGF0YXNvdXJjZSkge1xyXG4gICAgICB0aGlzLl9lbnN1cmVTZWxlY3RlZE9wdGlvbkV4aXN0cygpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgIHRoaXMuY2FsY3VsYXRlR3JvdXBwZWREYXRhU291cmNlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZW5lcmF0ZUh0dHBQYXJhbXMoa2V5d29yZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogYW55IHtcclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgndmFsdWUnLCBrZXl3b3JkID8/ICcnKTtcclxuXHJcbiAgICBpZiAoIXRoaXMubGlzdFNvdXJjZVBhcmFtcyB8fCAhQXJyYXkuaXNBcnJheSh0aGlzLmxpc3RTb3VyY2VQYXJhbXMpIHx8IHRoaXMubGlzdFNvdXJjZVBhcmFtcy5sZW5ndGggPCAxKSB7XHJcbiAgICAgIHJldHVybiB7IHBhcmFtczogcGFyYW1zIH07XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5saXN0U291cmNlUGFyYW1zLmZpbHRlcigocDogS2V5VmFsdWU8c3RyaW5nLCBhbnk+KSA9PiBwLnZhbHVlICE9IG51bGwgJiYgcC52YWx1ZSAhPSB1bmRlZmluZWQpXHJcbiAgICAgIC5mb3JFYWNoKChwOiBLZXlWYWx1ZTxzdHJpbmcsIGFueT4pID0+IHtcclxuICAgICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKHAua2V5LCBwLnZhbHVlKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHsgcGFyYW1zOiBwYXJhbXMgfTtcclxuICB9XHJcblxyXG4gIG9uU2VhcmNoQ29tYm9DbGljayhldmVudDogYW55KSB7XHJcbiAgICB0aGlzLm9uQ2xpY2suZW1pdChldmVudCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogRXZlbnQgaGFuZGxlciBjYWxsZWQgd2hlbiB0aGUgTXVsdGlTZWxlY3QgbW9kZWwgY2hhbmdlcy5cclxuICogVXBkYXRlcyB0aGUgYm91bmQgdmFsdWUgYW5kIHJlY2FsY3VsYXRlcyB0aGUgZ3JvdXBlZCBkYXRhc291cmNlIGZvciBwcm9wZXIgcmVuZGVyaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0ge29iamVjdH0gbmV3VmFsdWUgLSBUaGUgbmV3IHZhbHVlIGVtaXR0ZWQgYnkgdGhlIE11bHRpU2VsZWN0IGNvbXBvbmVudC5cclxuICovXHJcbiAgb25NdWx0aVNlbGVjdE1vZGVsQ2hhbmdlKG5ld1ZhbHVlOiBvYmplY3QpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLmJpbmRWYWx1ZUNoYW5nZWQobmV3VmFsdWUpO1xyXG5cclxuICAgIHRoaXMuY2FsY3VsYXRlR3JvdXBwZWREYXRhU291cmNlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogUmV0dXJucyBhIGRpc3RpbmN0IGFycmF5IG9mIGl0ZW1zIGJhc2VkIG9uIHRoZWlyIGBpZGAgcHJvcGVydHkuXHJcbiAqIFVzZWZ1bCB0byByZW1vdmUgZHVwbGljYXRlcyBmcm9tIHRoZSBkYXRhc291cmNlIG9yIHNlbGVjdGVkIGl0ZW1zIGxpc3QuXHJcbiAqXHJcbiAqIEBwYXJhbSB7YW55W119IGFycmF5IC0gQXJyYXkgb2Ygb2JqZWN0cyBjb250YWluaW5nIGFuIGBpZGAgcHJvcGVydHkuXHJcbiAqIEByZXR1cm5zIHthbnlbXX0gQXJyYXkgb2YgdW5pcXVlIGl0ZW1zIGJ5IGBpZGAuXHJcbiAqL1xyXG4gIHByaXZhdGUgX2Rpc3RpbmN0QnlJZChhcnJheTogYW55W10pOiBhbnlbXSB7XHJcbiAgICBpZiAoIWFycmF5KSByZXR1cm4gW107XHJcblxyXG4gICAgY29uc3QgZGlzdGluY3QgPSBBcnJheS5mcm9tKFxyXG4gICAgICBuZXcgTWFwKGFycmF5Lm1hcChpdGVtID0+IFtpdGVtLmlkLCBpdGVtXSkpLnZhbHVlcygpXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiBkaXN0aW5jdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBUcmFja0J5IGZ1bmN0aW9uIGZvciBBbmd1bGFyIG5nRm9yIGxvb3BzLlxyXG4gKiBIZWxwcyBBbmd1bGFyIGVmZmljaWVudGx5IHRyYWNrIGxpc3QgaXRlbXMgYnkgYSB1bmlxdWUgaWRlbnRpZmllciwgYXZvaWRpbmcgdW5uZWNlc3NhcnkgcmUtcmVuZGVyaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggLSBJbmRleCBvZiB0aGUgaXRlbSBpbiB0aGUgYXJyYXkuXHJcbiAqIEBwYXJhbSB7YW55fSBpdGVtIC0gSXRlbSBvYmplY3QgY29udGFpbmluZyBhbiBgaWRgLlxyXG4gKiBAcmV0dXJucyB7YW55fSBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGl0ZW0gKGl0ZW0uaWQpLlxyXG4gKi9cclxuICB0cmFja0J5SWQoaW5kZXg6IG51bWJlciwgaXRlbTogYW55KTogYW55IHtcclxuICAgIHJldHVybiBpdGVtLmlkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIFJldHVybnMgdGhlIHRvcCBOIHNlbGVjdGVkIG9wdGlvbnMgdG8gZGlzcGxheSBpbiB0aGUgdG9vbHRpcC5cclxuICogTGltaXRzIHRoZSBudW1iZXIgb2YgaXRlbXMgc2hvd24gdG8gYHRvb2x0aXBNYXhEaXNwbGF5ZWRJdGVtc2AgZm9yIHJlYWRhYmlsaXR5LlxyXG4gKlxyXG4gKiBAcGFyYW0ge011bHRpU2VsZWN0fSBtdWx0aVNlbGVjdCAtIFJlZmVyZW5jZSB0byB0aGUgUHJpbWVORyBNdWx0aVNlbGVjdCBjb21wb25lbnQuXHJcbiAqIEByZXR1cm5zIHthbnlbXX0gQXJyYXkgb2Ygc2VsZWN0ZWQgaXRlbXMsIGxpbWl0ZWQgdG8gYHRvb2x0aXBNYXhEaXNwbGF5ZWRJdGVtc2AuXHJcbiAqL1xyXG4gIGdldFRvcFNlbGVjdGVkT3B0aW9ucyhtdWx0aVNlbGVjdDogTXVsdGlTZWxlY3QpOiBhbnlbXSB7XHJcbiAgICBpZiAoIW11bHRpU2VsZWN0IHx8ICFBcnJheS5pc0FycmF5KG11bHRpU2VsZWN0LnNlbGVjdGVkT3B0aW9ucykgfHwgbXVsdGlTZWxlY3Quc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA8IDEpIHJldHVybiBbXTtcclxuXHJcbiAgICByZXR1cm4gbXVsdGlTZWxlY3Quc2VsZWN0ZWRPcHRpb25zLnNsaWNlKDAsIHRoaXMudG9vbHRpcE1heERpc3BsYXllZEl0ZW1zKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBncm91cGVkIGRhdGFzb3VyY2UgZm9yIHRoZSBNdWx0aVNlbGVjdCBkcm9wZG93bi5cclxuICogQ3JlYXRlcyB0d28gZ3JvdXBzOlxyXG4gKiAxLiBcIlNlbGVjdGVkIGl0ZW1zXCIg4oCUIGl0ZW1zIGN1cnJlbnRseSBzZWxlY3RlZCBieSB0aGUgdXNlci5cclxuICogMi4gXCJBdmFpbGFibGUgaXRlbXNcIiDigJQgaXRlbXMgbm90IHNlbGVjdGVkIHlldC5cclxuICpcclxuICogVGhlIGdyb3VwZWQgZGF0YXNvdXJjZSBhbGxvd3M6XHJcbiAqIC0gU2VsZWN0ZWQgaXRlbXMgdG8gYmUgcGlubmVkIG9uIHRvcCBmb3IgZWFzeSBtYW5hZ2VtZW50LlxyXG4gKiAtIEF2YWlsYWJsZSBpdGVtcyB0byByZW1haW4gaW4gdGhlaXIgb3JpZ2luYWwgb3JkZXIuXHJcbiAqIC0gTXVsdGktbGFuZ3VhZ2Ugc3VwcG9ydCB1c2luZyB0aGUgYF9sb2NhbGl6ZWAgc2VydmljZS5cclxuICpcclxuICogQHJlbWFya3NcclxuICogVXBkYXRlcyBgdGhpcy5ncm91cHBlZERhdGFTb3VyY2VgIHdpdGggdGhlIGxhdGVzdCBncm91cGVkIHN0cnVjdHVyZS5cclxuICovXHJcbiAgcHJpdmF0ZSBjYWxjdWxhdGVHcm91cHBlZERhdGFTb3VyY2UoKTogdm9pZCB7XHJcbiAgICBsZXQgZ3JvdXBzOiBTZWxlY3RJdGVtR3JvdXBbXSA9IFtdO1xyXG5cclxuICAgIGxldCBpc0JpbmRWYWxpZEFycmF5OiBib29sZWFuID0gdGhpcy5iaW5kICYmIEFycmF5LmlzQXJyYXkodGhpcy5iaW5kKSAmJiB0aGlzLmJpbmQubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IHNlbGVjdGVkSWRzID0gbmV3IFNldChpc0JpbmRWYWxpZEFycmF5ID8gdGhpcy5iaW5kIDogW10pO1xyXG5cclxuICAgIC8vIFNlbGVjdGVkIGl0ZW1zXHJcbiAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gdGhpcy5kYXRhc291cmNlLmZpbHRlcihpdGVtID0+IHNlbGVjdGVkSWRzLmhhcyhpdGVtLmlkKSk7XHJcbiAgICBpZiAoc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGdyb3Vwcy5wdXNoKHtcclxuICAgICAgICBsYWJlbDogdGhpcy5fbG9jYWxpemUudHJhbnNmb3JtKCdzaGFyZWRfY29tcG9uZW50X211bHRpc2VsZWN0X3NlbGVjdGVkX2dyb3VwJyksXHJcbiAgICAgICAgdmFsdWU6ICdzZWxlY3RlZC1pdGVtcycsXHJcbiAgICAgICAgaXRlbXM6IHNlbGVjdGVkSXRlbXNcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQXZhaWxhYmxlIChub3Qgc2VsZWN0ZWQpIGl0ZW1zXHJcbiAgICBjb25zdCBhdmFpbGFibGVJdGVtcyA9IHRoaXMuZGF0YXNvdXJjZS5maWx0ZXIoaXRlbSA9PiAhc2VsZWN0ZWRJZHMuaGFzKGl0ZW0uaWQpKTtcclxuICAgIGlmIChhdmFpbGFibGVJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGdyb3Vwcy5wdXNoKFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGxhYmVsOiB0aGlzLl9sb2NhbGl6ZS50cmFuc2Zvcm0oJ3NoYXJlZF9jb21wb25lbnRfbXVsdGlzZWxlY3RfYXZhaWxhYmxlX2dyb3VwJyksXHJcbiAgICAgICAgICB2YWx1ZTogJ2F2YWlsYWJsZS1pdGVtcycsXHJcbiAgICAgICAgICBpdGVtczogYXZhaWxhYmxlSXRlbXNcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmdyb3VwcGVkRGF0YVNvdXJjZSA9IGdyb3VwcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVsZW1lbnQncyBjb250ZW50IG92ZXJmbG93cyBpdHMgdmlzaWJsZSB3aWR0aC5cclxuICogVXNlZCB0byBjb25kaXRpb25hbGx5IGVuYWJsZSB0b29sdGlwIG9ubHkgd2hlbiBlbGxpcHNpcyBpcyBhcHBsaWVkLlxyXG4gKi9cclxuICBpc1RleHRPdmVyZmxvd2luZyhlbGVtZW50OiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFlbGVtZW50KSByZXR1cm4gZmFsc2U7XHJcbiAgICByZXR1cm4gZWxlbWVudC5zY3JvbGxXaWR0aCA+IGVsZW1lbnQuY2xpZW50V2lkdGg7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogQ29tcHV0ZXMgYW5kIGVtaXRzIHRoZSBsYWJlbCBjb3JyZXNwb25kaW5nIHRvIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZWxlbWVudChzKS5cclxuICpcclxuICogVGhpcyBtZXRob2QgaW5zcGVjdHMgdGhlIGN1cnJlbnQgYGJpbmRgIHZhbHVlIGFuZCB0aGUgYGRhdGFzb3VyY2VgIHRvIGRldGVybWluZVxyXG4gKiB0aGUgbGFiZWwocykgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnQocykuIFRoZSBiZWhhdmlvciBkaWZmZXJzIGRlcGVuZGluZyBvbiB3aGV0aGVyXHJcbiAqIHRoZSBjb21wb25lbnQgaXMgaW4gc2luZ2xlIG9yIG11bHRpcGxlIHNlbGVjdGlvbiBtb2RlOlxyXG4gKlxyXG4gKiAtICoqTXVsdGlwbGUgc2VsZWN0aW9uIChgbXVsdGlwbGUgPSB0cnVlYCkqKlxyXG4gKiAgIC0gSWYgZXhhY3RseSBvbmUgZWxlbWVudCBpcyBzZWxlY3RlZCwgaXRzIGxhYmVsIGlzIGVtaXR0ZWQuXHJcbiAqICAgLSBJZiBtdWx0aXBsZSBlbGVtZW50cyBhcmUgc2VsZWN0ZWQsIHRoZWlyIGxhYmVscyBhcmUgZm9ybWF0dGVkIGFzIGEgc3RyaW5nXHJcbiAqICAgICBhcnJheSByZXByZXNlbnRhdGlvbjogYFtcIkxhYmVsMVwiLCBcIkxhYmVsMlwiLCAuLi5dYC5cclxuICpcclxuICogLSAqKlNpbmdsZSBzZWxlY3Rpb24gKGBtdWx0aXBsZSA9IGZhbHNlYCkqKlxyXG4gKiAgIC0gVGhlIGxhYmVsIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50IGlzIGVtaXR0ZWQgaWYgaXQgZXhpc3RzIGluIHRoZSBkYXRhc291cmNlLlxyXG4gKlxyXG4gKiBJZiBhIHZhbGlkIGxhYmVsIGlzIHJlc29sdmVkLCB0aGUgbWV0aG9kIGVtaXRzIHRoZSByZXN1bHQgdGhyb3VnaFxyXG4gKiB0aGUgYHNlbGVjdGVkTGFiZWxDaGFuZ2VgIGV2ZW50IGVtaXR0ZXIuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIC0gYGJpbmRgIHJlcHJlc2VudHMgdGhlIHNlbGVjdGVkIGlkIChzaW5nbGUgbW9kZSkgb3IgYW4gYXJyYXkgb2YgaWRzIChtdWx0aXBsZSBtb2RlKS5cclxuICogLSBgZGF0YXNvdXJjZWAgaXMgZXhwZWN0ZWQgdG8gY29udGFpbiBlbGVtZW50cyB3aXRoIGF0IGxlYXN0IGBpZGAgYW5kIGBsYWJlbGAgcHJvcGVydGllcy5cclxuICpcclxuICogQHByaXZhdGVcclxuICovXHJcbiAgcHJpdmF0ZSBfaGFuZGxlU2VsZWN0ZWRFbGVtZW50c0xhYmVsQ2hhbmdlKCk6IHZvaWQge1xyXG4gICAgbGV0IHNlbGVjdGlvbkxhYmVsOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiBBcnJheS5pc0FycmF5KHRoaXMuYmluZCkpIHtcclxuICAgICAgbGV0IHNlbGVjdGVkRWxlbWVudHMgPSB0aGlzLmRhdGFzb3VyY2UuZmlsdGVyKGUgPT4gdGhpcy5iaW5kLmluY2x1ZGVzKGUuaWQpKTtcclxuXHJcbiAgICAgIGlmIChzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgc2VsZWN0aW9uTGFiZWwgPSBzZWxlY3RlZEVsZW1lbnRzWzBdLmxhYmVsO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHNlbGVjdGVkRWxlbWVudHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIHNlbGVjdGlvbkxhYmVsID0gYFske3NlbGVjdGVkRWxlbWVudHMubWFwKGUgPT4gYFwiJHtlLmxhYmVsfVwiYCkuam9pbignLCAnKX1dYDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBzZWxlY3RlZEVsZW1lbnQ6IGFueSA9IHRoaXMuZGF0YXNvdXJjZS5maW5kKGUgPT4gZS5pZCA9PSB0aGlzLmJpbmQpO1xyXG5cclxuICAgICAgaWYgKHNlbGVjdGVkRWxlbWVudCkge1xyXG4gICAgICAgIHNlbGVjdGlvbkxhYmVsID0gc2VsZWN0ZWRFbGVtZW50LmxhYmVsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNlbGVjdGlvbkxhYmVsKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRMYWJlbENoYW5nZS5lbWl0KHNlbGVjdGlvbkxhYmVsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRpc3RpbmN0KHZhbHVlczogc3RyaW5nW10pOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gWy4uLm5ldyBTZXQodmFsdWVzKV07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUV4dGVybmFsU2VsZWN0aW9uKGRyb3Bkb3duRXh0ZXJuYWxTZWxlY3Rpb25PdXRwdXQ6IERyb3Bkb3duRXh0ZXJuYWxTZWxlY3Rpb25PdXRwdXQpOiB2b2lkIHtcclxuICAgIGlmICghZHJvcGRvd25FeHRlcm5hbFNlbGVjdGlvbk91dHB1dCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBzZWxlY3Rpb24gPSBkcm9wZG93bkV4dGVybmFsU2VsZWN0aW9uT3V0cHV0Lml0ZW1zO1xyXG4gICAgbGV0IHNlbGVjdGlvbktleSA9IGRyb3Bkb3duRXh0ZXJuYWxTZWxlY3Rpb25PdXRwdXQuaXRlbUtleVByb3BlcnR5TmFtZTtcclxuXHJcbiAgICAvLyBIYW5kbGUgbXVsdGlwbGUgbW9kZSBzZWxlY3Rpb25cclxuICAgIGlmICh0aGlzLm11bHRpcGxlICYmIEFycmF5LmlzQXJyYXkoc2VsZWN0aW9uKSAmJiBzZWxlY3Rpb24ubGVuZ3RoID4gMCkge1xyXG5cclxuICAgICAgbGV0IG5ld0l0ZW1zOiBhbnlbXSA9IHNlbGVjdGlvblxyXG4gICAgICAgIC5maWx0ZXIoaSA9PiAhdGhpcy5kYXRhc291cmNlLnNvbWUocyA9PiBzLmlkID09IGlbc2VsZWN0aW9uS2V5XSkpO1xyXG5cclxuICAgICAgaWYgKG5ld0l0ZW1zICYmIG5ld0l0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAvLyBmb3JtYXQgc2VsZWN0ZWQgaXRlbXNcclxuICAgICAgICBsZXQgbGFiZWxQcm9wTmFtZSA9IHRoaXMuZ2V0QmVzdExhYmVsUHJvcGVydHlOYW1lKHNlbGVjdGlvblswXSk7XHJcbiAgICAgICAgbGV0IHRlbXBBcnJheTogYW55W10gPSBuZXdJdGVtcy5tYXAoKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaWQ6IGVsZW1lbnRbc2VsZWN0aW9uS2V5XSxcclxuICAgICAgICAgICAgbGFiZWw6IChsYWJlbFByb3BOYW1lIGluIGVsZW1lbnQpID8gZWxlbWVudFtsYWJlbFByb3BOYW1lXSA6IHRoaXMubGFiZWxPZkVsZW1lbnROb3RGb3VuZFRleHRcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gYXBlbmQgc2VsZWN0ZWQgaXRlbXMgdG8gRGF0YXNvdXJjZVxyXG4gICAgICAgIHRoaXMuX2RhdGFzb3VyY2UgPSB0aGlzLl9kaXN0aW5jdEJ5SWQoWy4uLnRoaXMuZGF0YXNvdXJjZSwgLi4udGVtcEFycmF5XSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNvcnQpIHtcclxuICAgICAgICAgIHRoaXMuX2RhdGFzb3VyY2Uuc29ydCh0aGlzLl9jb21wYXJlRnVuY3Rpb24oKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgbmV3U2VsZWN0ZWRJdGVtc0lkczogYW55W10gPSBzZWxlY3Rpb24ubWFwKGkgPT4gaVtzZWxlY3Rpb25LZXldKTtcclxuICAgICAgbGV0IHNlbGVjdGVkSXRlbXNJZHM6IGFueVtdID0gdGhpcy5kaXN0aW5jdChbLi4uKHRoaXMuYmluZCA/IHRoaXMuYmluZCA6IFtdKSwgLi4ubmV3U2VsZWN0ZWRJdGVtc0lkc10pO1xyXG4gICAgICB0aGlzLm9uTXVsdGlTZWxlY3RNb2RlbENoYW5nZShzZWxlY3RlZEl0ZW1zSWRzKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAvLyBIYW5kbGUgc2lnbmxlIG1vZGUgc2VsZWN0aW9uXHJcbiAgICAgIHRoaXMuYmluZFZhbHVlQ2hhbmdlZChzZWxlY3Rpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBsYWJlbFByb3BlcnR5TmFtZVJvb3RTZWdtZW50OiBzdHJpbmcgPSAnbGliZWxsZSc7XHJcbiAgLyoqXHJcbiAqIFJldHJpZXZlcyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IHByb3BlcnR5IChhbHBoYWJldGljYWxseSkgXHJcbiAqIHdob3NlIG5hbWUgY29udGFpbnMgJ2xhYmVsJyAoY2FzZS1pbnNlbnNpdGl2ZSkgZnJvbSBhIGdpdmVuIG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIG9iaiAtIFRoZSBzb3VyY2Ugb2JqZWN0IChjYW4gYmUgb2YgdHlwZSBhbnkpXHJcbiAqIEByZXR1cm5zIFRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgbWF0Y2hpbmcgcHJvcGVydHksIG9yIHVuZGVmaW5lZCBpZiBub25lIGZvdW5kXHJcbiAqL1xyXG4gIHByaXZhdGUgZ2V0Rmlyc3RMYWJlbFByb3BlcnR5TmFtZShvYmo6IGFueSk6IGFueSB7XHJcbiAgICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopXHJcbiAgICAgIC5maWx0ZXIoa2V5ID0+IGtleS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMubGFiZWxQcm9wZXJ0eU5hbWVSb290U2VnbWVudCkpXHJcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpXHJcbiAgICAgIC5tYXAoa2V5ID0+IG9ialtrZXldKVswXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QmVzdExhYmVsUHJvcGVydHlOYW1lKG9iamVjdDogYW55KTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmxhYmVsRmllbGQ7XHJcblxyXG4gICAgLy8gVE9ETywgQEhhc3Nlbiwgw6AgcmV2b2lyIHBsdXMgdGFyZC5cclxuICAgIGxldCBiZXN0TGFiZWxQcm9wZXJ0eU5hbWU6IHN0cmluZyA9ICcnO1xyXG5cclxuICAgIGlmICh0aGlzLmxhYmVsRmllbGQgaW4gb2JqZWN0KSBiZXN0TGFiZWxQcm9wZXJ0eU5hbWUgPSB0aGlzLmxhYmVsRmllbGQ7XHJcbiAgICBlbHNlIGlmICh0aGlzLmxhYmVsUHJvcGVydHlOYW1lUm9vdFNlZ21lbnQgaW4gb2JqZWN0KSBiZXN0TGFiZWxQcm9wZXJ0eU5hbWUgPSB0aGlzLmxhYmVsUHJvcGVydHlOYW1lUm9vdFNlZ21lbnQ7XHJcbiAgICBlbHNlIGJlc3RMYWJlbFByb3BlcnR5TmFtZSA9IHRoaXMuZ2V0Rmlyc3RMYWJlbFByb3BlcnR5TmFtZShvYmplY3QpO1xyXG5cclxuICAgIGNvbnNvbGUubG9nKGBbTGFiZWxGaWVsZCA6ICR7dGhpcy5sYWJlbEZpZWxkfV0gVlMgW0Jlc3RMYWJlbFByb3BlcnR5TmFtZSA6ICR7YmVzdExhYmVsUHJvcGVydHlOYW1lfV1gKTtcclxuICAgIHJldHVybiBiZXN0TGFiZWxQcm9wZXJ0eU5hbWU7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG59IiwiPGRpdiAqbmdJZj1cIiFtdWx0aXBsZTsgZWxzZSBtdWx0aVNlbGVjdFwiIGNsYXNzPVwiZmxleFwiPlxyXG4gIDxwLWRyb3Bkb3duIFxyXG4gICAgW29wdGlvbnNdPVwiZGF0YXNvdXJjZVwiXHJcbiAgICBbbmdNb2RlbF09XCJiaW5kXCJcclxuICAgIG9wdGlvbkxhYmVsPVwibGFiZWxcIlxyXG4gICAgb3B0aW9uVmFsdWU9XCJpZFwiXHJcbiAgICBbbG9hZGluZ109XCIhZGF0YUxvYWRlZFwiXHJcbiAgICBmaWx0ZXJCeT1cImxhYmVsXCIgXHJcbiAgICBbZmlsdGVyXT1cInRydWVcIiBcclxuICAgIFthdXRvRGlzcGxheUZpcnN0XT1cImZhbHNlXCJcclxuICAgIFtyZXF1aXJlZF09XCJpc1JlcXVpcmVkXCJcclxuICAgIFtzaG93Q2xlYXJdPVwic2hvd0NsZWFyXCIgXHJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgKG9uQ2hhbmdlKT1cImhhbmRsZUNoYW5nZUV2ZW50KCRldmVudClcIlxyXG4gICAgKG9uU2hvdyk9XCJvbk9wZW4oKVwiIChvbkZpbHRlcik9XCJzZWFyY2hWYWx1ZUNoYW5nZWQoJGV2ZW50KVwiIChvbkNsaWNrKT1cIm9uU2VhcmNoQ29tYm9DbGljaygkZXZlbnQpXCJcclxuICAgIFtzdHlsZV09XCJ7J21heC13aWR0aCc6IG1heFdpZHRoLCAnd2lkdGgnOicxMDAlJywgJ2hlaWdodCc6ICcxLjdyZW0nfVwiXHJcbiAgICBbbmdDbGFzc109XCJpc0FyID8gJ3AtZHJvcGRvd24tY2xlYXItaWNvbkFSJzogJ3AtZHJvcGRvd24tY2xlYXItaWNvbkZSJ1wiXHJcbiAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2VIb2xkZXJcIiBcclxuICAgIGNsYXNzPVwie3tteVN0eWxlQ2xhc3N9fVwiIFxyXG4gICAgc3R5bGVDbGFzcz1cInt7bXlTdHlsZUNsYXNzfX0gYm9yZGVyLXJhZGl1cy03IHt7dmFsaWRhdGlvblN0YXR1c0Nzc0NsYXNzfX1cIiBcclxuICAgIGFwcGVuZFRvPVwiYm9keVwiPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWhlYWRlciBmbGV4IGdhcC0xIHB0LTIgcHgtMlwiPlxyXG4gICAgICAgIDxUc2ktQnV0dG9uICpuZ0lmPVwic2hvd1NlYXJjaEJ1dHRvblwiIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktc2VhcmNoXCIgdG9vbHRpcFRleHQ9XCJzaGFyZWRVaS1zZWFyY2hDb21iby1hY3Rpb24tc2VhcmNoXCJcclxuICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uLkJvdHRvbVwiIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1wcmltYXJ5IGhvdmVyOnNoYWRvdy02IGgtMnJlbSBwLWJ1dHRvbi1pY29uLW9ubHlcIiAoY2xpY2spPVwib3BlblNlYXJjaERpYWxvZygpXCI+XHJcbiAgICAgICAgPC9Uc2ktQnV0dG9uPlxyXG5cclxuICAgICAgICA8VHNpLUJ1dHRvbiAqbmdJZj1cInNob3dBZHZhbmNlZFNlYXJjaEJ1dHRvblwiIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktc29ydC1hbW91bnQtZG93blwiIHRvb2x0aXBUZXh0PVwic2hhcmVkVWktc2VhcmNoQ29tYm8tYWN0aW9uLWFkdmFuY2VkU2VhcmNoXCJcclxuICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uLkJvdHRvbVwiIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1zZWNvbmRhcnkgaG92ZXI6c2hhZG93LTYgaC0ycmVtIHAtYnV0dG9uLWljb24tb25seVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib3BlbkFkdmFuY2VkU2VhcmNoQ29tcG9uZW50KClcIj5cclxuICAgICAgICA8L1RzaS1CdXR0b24+XHJcblxyXG4gICAgICAgIDxUc2ktQnV0dG9uICpuZ0lmPVwic2hvd0FkZEJ1dHRvblwiIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktcGx1c1wiIHRvb2x0aXBUZXh0PVwic2hhcmVkVWktc2VhcmNoQ29tYm8tYWN0aW9uLWFkZFwiXHJcbiAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbi5Cb3R0b21cIiBzdHlsZUNsYXNzPVwicC1idXR0b24tc3VjY2VzcyBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCIgKGNsaWNrKT1cImFkZEVsZW1lbnQoKVwiPlxyXG4gICAgICAgIDwvVHNpLUJ1dHRvbj5cclxuXHJcbiAgICAgICAgPFRzaS1CdXR0b24gKm5nSWY9XCJzaG93VXBkYXRlQnV0dG9uXCIgdHlwZT1cImJ1dHRvblwiIGljb249XCJwaSBwaS1wZW5jaWxcIiB0b29sdGlwVGV4dD1cInNoYXJlZFVpLXNlYXJjaENvbWJvLWFjdGlvbi1lZGl0XCJcclxuICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uLkJvdHRvbVwiIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1wcmltYXJ5IGhvdmVyOnNoYWRvdy02IGgtMnJlbSBwLWJ1dHRvbi1pY29uLW9ubHlcIiAoY2xpY2spPVwidXBkYXRlRWxlbWVudCgpXCI+XHJcbiAgICAgICAgPC9Uc2ktQnV0dG9uPlxyXG5cclxuICAgICAgICA8VHNpLUJ1dHRvbiAqbmdJZj1cInNob3dDb25zdWx0QnV0dG9uXCIgdHlwZT1cImJ1dHRvblwiIGljb249XCJwaSBwaS1leWVcIiB0b29sdGlwVGV4dD1cInNoYXJlZFVpLXNlYXJjaENvbWJvLWFjdGlvbi1jb25zdWx0XCJcclxuICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uLkJvdHRvbVwiIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1wcmltYXJ5IGhvdmVyOnNoYWRvdy02IGgtMnJlbSBwLWJ1dHRvbi1pY29uLW9ubHlcIiAoY2xpY2spPVwiY29uc3VsdEVsZW1lbnQoKVwiPlxyXG4gICAgICAgIDwvVHNpLUJ1dHRvbj5cclxuXHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIFxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJlbXB0eVwiPlxyXG4gICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgcHktMyBnYXAtMlwiPlxyXG4gICAgICAgIFxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0FwaUVycm9yOyBlbHNlIGFwaUVycm9yXCI+XHJcblxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJpc0RhdGFzb3VyY2VFbXB0eSAmJiAhaXNGaWx0ZXJpbmdcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1ncmF5LTUwMFwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktaW5mby1jaXJjbGVcIj48L2k+XHJcbiAgICAgICAgICAgICAgPHNwYW4+e3sgJ3NlYXJjaF9jb21ib19ub19lbGVtZW50JyB8IGxvY2FsaXplIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAqbmdJZj1cImlzTm9SZXN1bHRBZnRlckZpbHRlclwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWdyYXktNTAwXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1pbmZvLWNpcmNsZVwiPjwvaT5cclxuICAgICAgICAgICAgICA8c3Bhbj57eyAnc2VhcmNoX2NvbWJvX25vX3Jlc3VsdCcgfCBsb2NhbGl6ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNhcGlFcnJvcj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1leGNsYW1hdGlvbi10cmlhbmdsZSB0ZXh0LW9yYW5nZS01MDBcIj48L2k+XHJcbiAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgIHt7ICdzZWFyY2hfY29tYm9fbG9hZF9lcnJvcicgfCBsb2NhbGl6ZSB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cInNlbGVjdGVkSXRlbVwiIGxldC1zZWxlY3RlZE9wdGlvbj5cclxuICAgICAgPGRpdiBwVG9vbHRpcD1cInt7c2VsZWN0ZWRPcHRpb24ubGFiZWx9fVwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiIHRvb2x0aXBTdHlsZUNsYXNzPVwiY3VzdG9tLXRvb2x0aXBcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNTdGF0dXNDb21ibyAmJiBzdGF0dXNNZXRhZGF0YTsgZWxzZSBub3JtYWxTZWxlY3RlZFwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkT3B0aW9uICYmIGdldFN0YXR1c09wdGlvbihzZWxlY3RlZE9wdGlvbi5sYWJlbCkgYXMgb3B0XCI+XHJcbiAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb250LWJvbGQgc3RhdHVzLWJhZGdlXCJcclxuICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJsaWdodGVuQ29sb3Iob3B0LmNvbG9ySGV4KVwiXHJcbiAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImdldFJlYWRhYmxlVGV4dENvbG9yKG9wdC5jb2xvckhleClcIj5cclxuICAgICAgICAgICAgICB7eyBzZWxlY3RlZE9wdGlvbi5sYWJlbCB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNub3JtYWxTZWxlY3RlZD5cclxuICAgICAgICAgIDxzcGFuPnt7IHNlbGVjdGVkT3B0aW9uLmxhYmVsIH19PC9zcGFuPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgbGV0LXRhcmdldCBwVGVtcGxhdGU9XCJpdGVtXCI+XHJcbiAgICAgIDxkaXYgcFRvb2x0aXA9XCJ7e3RhcmdldC5sYWJlbH19XCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgdG9vbHRpcFN0eWxlQ2xhc3M9XCJjdXN0b20tdG9vbHRpcFwiPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNTdGF0dXNDb21ibyAmJiBzdGF0dXNNZXRhZGF0YTsgZWxzZSBub3JtYWxPcHRpb25cIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRTdGF0dXNPcHRpb24odGFyZ2V0LmxhYmVsKSBhcyBvcHRcIj5cclxuICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9udC1ib2xkIHN0YXR1cy1iYWRnZVwiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJsaWdodGVuQ29sb3Iob3B0LmNvbG9ySGV4KVwiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiZ2V0UmVhZGFibGVUZXh0Q29sb3Iob3B0LmNvbG9ySGV4KVwiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUucGFkZGluZy10b3BdPVwiJzAuMXJlbSdcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLnBhZGRpbmctYm90dG9tXT1cIicwLjFyZW0nXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt7dGFyZ2V0LmxhYmVsfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9ybWFsT3B0aW9uPlxyXG4gICAgICAgICAgPHNwYW4+e3t0YXJnZXQubGFiZWx9fTwvc3Bhbj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gIDwvcC1kcm9wZG93bj5cclxuXHJcbiAgPCEtLSBCdWJibGUgSW5mbyAtLT5cclxuICA8VHNpLUJ1YmJsZS1JbmZvIFtpbmZvVGV4dF09XCJpbmZvVGV4dFwiPjwvVHNpLUJ1YmJsZS1JbmZvPlxyXG5cclxuPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI211bHRpU2VsZWN0PlxyXG4gIDxwLW11bHRpU2VsZWN0XHJcbiAgICAjbXVsdGlTZWxlY3RFbGVtZW50XHJcbiAgICBbb3B0aW9uc109XCJncm91cHBlZERhdGFTb3VyY2VcIlxyXG4gICAgW2dyb3VwXT1cInRydWVcIiBcclxuICAgIFtuZ01vZGVsXT1cImJpbmRcIlxyXG4gICAgW29wdGlvbkxhYmVsXT1cIidsYWJlbCdcIlxyXG4gICAgW29wdGlvblZhbHVlXT1cIidpZCdcIlxyXG4gICAgW2xvYWRpbmddPVwiIWRhdGFMb2FkZWRcIlxyXG4gICAgW2ZpbHRlckJ5XT1cIidsYWJlbCdcIlxyXG4gICAgW2ZpbHRlcl09XCJ0cnVlXCJcclxuICAgIFtyZXF1aXJlZF09XCJpc1JlcXVpcmVkXCJcclxuICAgIFtzaG93Q2xlYXJdPVwic2hvd0NsZWFyXCJcclxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICBbc2VsZWN0ZWRJdGVtc0xhYmVsXT1cIidzaGFyZWRfY29tcG9uZW50X211bHRpc2VsZWN0X3NlbGVjdGVkX2l0ZW1zX2NvdW50JyB8IGxvY2FsaXplXCJcclxuICAgIFttYXhTZWxlY3RlZExhYmVsc109XCJtYXhTZWxlY3RlZExhYmVsc1wiXHJcbiAgICBbc2hvd1RvZ2dsZUFsbF09XCJmYWxzZVwiXHJcbiAgICBbc3R5bGVdPVwieydtYXgtd2lkdGgnOiBtYXhXaWR0aCwgJ3dpZHRoJzonMTAwJScsICdoZWlnaHQnOiAnMS43cmVtJ31cIlxyXG4gICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlSG9sZGVyXCJcclxuICAgIFtuZ0NsYXNzXT1cImlzQXIgPyAncC1kcm9wZG93bi1jbGVhci1pY29uQVInOiAncC1kcm9wZG93bi1jbGVhci1pY29uRlInXCJcclxuICAgIGNsYXNzPVwie3tteVN0eWxlQ2xhc3N9fVwiIFxyXG4gICAgc3R5bGVDbGFzcz1cInt7bXlTdHlsZUNsYXNzfX0gYm9yZGVyLXJhZGl1cy03IHt7dmFsaWRhdGlvblN0YXR1c0Nzc0NsYXNzfX1cIlxyXG4gICAgcGFuZWxTdHlsZUNsYXNzPVwidHNpLW11bHRpc2VsZWN0LXBhbmVsXCJcclxuICAgIGFwcGVuZFRvPVwiYm9keVwiXHJcbiAgICAobmdNb2RlbENoYW5nZSk9XCJvbk11bHRpU2VsZWN0TW9kZWxDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAob25QYW5lbFNob3cpPVwib25PcGVuKClcIlxyXG4gICAgKG9uRmlsdGVyKT1cInNlYXJjaFZhbHVlQ2hhbmdlZCgkZXZlbnQpXCJcclxuICAgIChvbkNsaWNrKT1cIm9uU2VhcmNoQ29tYm9DbGljaygkZXZlbnQpXCJcclxuICAgIFtwVG9vbHRpcF09XCJtdWx0aVNlbGVjdEVsZW1lbnQ/LnNlbGVjdGVkT3B0aW9ucz8ubGVuZ3RoID8gbXVsdGlTZWxlY3RUb29sdGlwQ29udGVudCA6IHVuZGVmaW5lZFwiIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpdGVtXCIgbGV0LW9wdGlvbj5cclxuICAgICAgPGRpdiAjbGFiZWxSZWYgY2xhc3M9XCJ0c2ktbXVsdGlzZWxlY3Qtb3B0aW9uLWxhYmVsXCIgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCIgdG9vbHRpcEFwcGVuZFRvPVwiYm9keVwiIFtwVG9vbHRpcF09XCJpc1RleHRPdmVyZmxvd2luZyhsYWJlbFJlZikgPyBvcHRpb24ubGFiZWwgOiBudWxsXCI+XHJcbiAgICAgICAge3sgb3B0aW9uLmxhYmVsIH19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWhlYWRlciBmbGV4IGdhcC0xIHAtMVwiPlxyXG4gICAgICAgIDxUc2ktQnV0dG9uICpuZ0lmPVwic2hvd1NlYXJjaEJ1dHRvblwiIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktc2VhcmNoXCIgdG9vbHRpcFRleHQ9XCJzaGFyZWRVaS1tdWx0aXNlbGVjdC1hY3Rpb24tc2VhcmNoXCJcclxuICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uLkJvdHRvbVwiIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1wcmltYXJ5IGhvdmVyOnNoYWRvdy02IGgtMnJlbSBwLWJ1dHRvbi1pY29uLW9ubHlcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm9wZW5TZWFyY2hEaWFsb2coKVwiPlxyXG4gICAgICAgIDwvVHNpLUJ1dHRvbj5cclxuXHJcbiAgICAgICAgPFRzaS1CdXR0b24gKm5nSWY9XCJzaG93QWR2YW5jZWRTZWFyY2hCdXR0b25cIiB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLXNvcnQtYW1vdW50LWRvd25cIiB0b29sdGlwVGV4dD1cInNoYXJlZFVpLW11bHRpc2VsZWN0LWFjdGlvbi1hZHZhbmNlZFNlYXJjaFwiXHJcbiAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb24uQm90dG9tXCIgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXNlY29uZGFyeSBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCJcclxuICAgICAgICAoY2xpY2spPVwib3BlbkFkdmFuY2VkU2VhcmNoQ29tcG9uZW50KClcIj5cclxuICAgICAgICA8L1RzaS1CdXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L3AtbXVsdGlTZWxlY3Q+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjbXVsdGlTZWxlY3RUb29sdGlwQ29udGVudD5cclxuICAgIDxkaXYgY2xhc3M9XCJwLTJcIj5cclxuICAgICAgPCEtLSBJZiB0aGVyZSBhcmUgc2VsZWN0ZWQgaXRlbXMgLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtdWx0aVNlbGVjdEVsZW1lbnQ/LnNlbGVjdGVkT3B0aW9ucz8ubGVuZ3RoOyBlbHNlIG5vSXRlbXNcIj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWItMVwiPlxyXG4gICAgICAgICAge3sgJ3NoYXJlZF9jb21wb25lbnRfbXVsdGlzZWxlY3Rfc2VsZWN0ZWRfaXRlbXNfdGl0bGUnIHwgbG9jYWxpemUgfX1cclxuICAgICAgICAgICh7eyBtdWx0aVNlbGVjdEVsZW1lbnQuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCB9fSlcclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPHVsIGNsYXNzPVwibS0wIHBsLTNcIj5cclxuICAgICAgICAgIDwhLS0gU2hvdyBvbmx5IGZpcnN0IDEwIGl0ZW1zIC0tPlxyXG4gICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZ2V0VG9wU2VsZWN0ZWRPcHRpb25zKG11bHRpU2VsZWN0RWxlbWVudClcIj5cclxuICAgICAgICAgICAge3sgb3B0aW9uLmxhYmVsIH19XHJcbiAgICAgICAgICA8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcblxyXG4gICAgICAgIDwhLS0gU2hvdyBtZXNzYWdlIGlmIG1vcmUgdGhhbiAxMCAtLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwibXVsdGlTZWxlY3RFbGVtZW50LnNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPiAxMFwiIGNsYXNzPVwidGV4dC1zbSBtdC0xIHRleHQtZ3JheS01MDBcIj5cclxuICAgICAgICAgIHt7IG11bHRpU2VsZWN0RWxlbWVudC5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoIC0gMTAgfX1cclxuICAgICAgICAgIHt7ICdzaGFyZWRfY29tcG9uZW50X211bHRpc2VsZWN0X3NlbGVjdGVkX2l0ZW1zX21vcmVfbWVzc2FnZScgfCBsb2NhbGl6ZSB9fVxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8IS0tIElmIG5vIGl0ZW1zIHNlbGVjdGVkIC0tPlxyXG4gICAgICA8bmctdGVtcGxhdGUgI25vSXRlbXM+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNtIHRleHQtNTAwXCI+XHJcbiAgICAgICAgICB7eyAnc2hhcmVkX2NvbXBvbmVudF9tdWx0aXNlbGVjdF9zZWxlY3RlZF9pdGVtc19lbXB0eScgfCBsb2NhbGl6ZSB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8L2Rpdj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
1023
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLXNlYXJjaC1jb21iby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvaW5wdXQtY29tcG9uZW50cy90c2ktc2VhcmNoLWNvbWJvL3RzaS1zZWFyY2gtY29tYm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3RzaS1jb21wb25lbnRzL2lucHV0LWNvbXBvbmVudHMvdHNpLXNlYXJjaC1jb21iby90c2ktc2VhcmNoLWNvbWJvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RCxPQUFPLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNILE9BQU8sRUFBRSxPQUFPLEVBQWdCLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxjQUFjLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDN0csT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBTXBHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyREFBMkQsQ0FBQztBQUN6RixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDeEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFNL0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0Is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QkFBeEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBR0YsY0FBYztzQkFEakIsS0FBSztnQkFTTyxVQUFVO3NCQUF0QixLQUFLO2dCQWFhLElBQUk7c0JBQXRCLEtBQUs7dUJBQUMsTUFBTTtnQkF3QkosaUJBQWlCO3NCQUF6QixLQUFLO2dCQVFHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFRRyxRQUFRO3NCQUFoQixLQUFLO2dCQUlJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ3NCLGdCQUFnQjtzQkFBNUMsTUFBTTt1QkFBQyxtQkFBbUI7Z0JBQ2pCLElBQUk7c0JBQWIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFRRyxlQUFlO3NCQUF4QixNQUFNO2dCQWdHRSxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IER5bmFtaWNEaWFsb2dDb25maWcsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpcnN0VmFsdWVGcm9tLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHJ0bE1vZGVLZXlzIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RzL2xvY2Fscy5jb25zdCc7XHJcbmltcG9ydCB7IENvbXBvbmVudF9Nb2RlcywgR3JpZFNlbGVjdGlvbk1vZGUsIE1vZGFsU2l6ZUVudW0sIFRvb2x0aXBQb3NpdGlvbiB9IGZyb20gJy4uLy4uLy4uL2VudW1zJztcclxuaW1wb3J0IHsgQ29tYm9TdGF0dXNNb2RlbCB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBTdGF0dXNNZXRhZGF0YVJlc3BvbnNlLCBTdGF0dXNPcHRpb24gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvc3RhdHVzL2NvbG9yLXN0YXR1cyc7XHJcbmltcG9ydCB7IEVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY29uZmlndXJhdGlvbi9lbnRpdHktY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHNpTW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbW9kYWwvdHNpLW1vZGFsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUc2lOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uL3RzaS1ub3RpZmljYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFRzaUlucHV0QmFzZSB9IGZyb20gJy4uLy4uLy4uL3RzaS1iYXNlL3RzaS1pbnB1dC1iYXNlL3RzaS1pbnB1dC1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEd1aWQgfSBmcm9tICcuLi8uLi8uLi90c2ktaGVscGVycy9ndWlkLmhlbHBlcic7XHJcbmltcG9ydCB7IFR5cGVSZWdpc3RyeUhlbHBlciB9IGZyb20gJy4uLy4uLy4uL3RzaS1oZWxwZXJzL3R5cGUtcmVnaXN0cnkuaGVscGVyJztcclxuaW1wb3J0IHsgTXVsdGlTZWxlY3QgfSBmcm9tICdwcmltZW5nL211bHRpc2VsZWN0JztcclxuaW1wb3J0IHsgU2VsZWN0SXRlbUdyb3VwIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBMb2NhbGl6ZVBpcGUgfSBmcm9tICcuLi8uLi8uLi9waXBlcyc7XHJcbmltcG9ydCB7IEtleVZhbHVlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRHJvcGRvd25FeHRlcm5hbFNlbGVjdGlvbk91dHB1dCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9kcm9wZG93bi9kcm9wZG93bi1leHRlcm5hbC1zZWxlY3Rpb24tb3V0cHV0JztcclxuaW1wb3J0IHsgQmluZE1vZGUgfSBmcm9tICcuLi8uLi8uLi9lbnVtcy9iaW5kLW1vZGUnO1xyXG5pbXBvcnQgeyBpc051bGxPckVtcHR5IH0gZnJvbSAnLi4vLi4vLi4vZnVuY3Rpb25zJztcclxuaW1wb3J0IHsgRHJvcGRvd25DaGFuZ2VFdmVudCB9IGZyb20gJ3ByaW1lbmcvZHJvcGRvd24nO1xyXG5pbXBvcnQgeyBUc2lGb3JtTW9kYWxGb290ZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi90c2ktZm9ybS1tb2RhbC1mb290ZXIvdHNpLWZvcm0tbW9kYWwtZm9vdGVyLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ1RzaS1TZWFyY2gtQ29tYm8nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90c2ktc2VhcmNoLWNvbWJvLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90c2ktc2VhcmNoLWNvbWJvLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUc2lTZWFyY2hDb21ib0NvbXBvbmVudCBleHRlbmRzIFRzaUlucHV0QmFzZTxhbnk+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICAvLyNyZWdpb24gbG9jYWwgdmFyc1xyXG4gIHByaXZhdGUgX2RhdGFzb3VyY2U6IGFueVtdID0gW107XHJcbiAgcHJpdmF0ZSBfaXNJbnB1dERhdGFzb3VyY2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9yZWxvYWRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcclxuICBwcml2YXRlIF9zZWFyY2hTdWJqZWN0ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gIHByaXZhdGUgX3NlYXJjaERlYm91bmNlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBfZ290dGVuRGF0YXNvdXJjZTogYW55W10gPSBbXTtcclxuICBwcml2YXRlIF9iaW5kPzogYW55O1xyXG4gIHByaXZhdGUgX2N1cnJlbnRSb3dJdGVtPzogYW55O1xyXG4gIHB1YmxpYyBkYXRhTG9hZGVkOiBib29sZWFuID0gdHJ1ZTtcclxuICBwcml2YXRlIF9kaWFsb2dSZWZlcmVuY2U/OiBEeW5hbWljRGlhbG9nUmVmIHwgdW5kZWZpbmVkO1xyXG4gIGlzQXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaXNGaWx0ZXJpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAqIEdyb3VwZWQgZGF0YXNvdXJjZSBmb3IgdGhlIE11bHRpU2VsZWN0IGNvbXBvbmVudC5cclxuICogVHdvIGdyb3Vwcywgd2hlcmUgZWFjaCBncm91cCBjb250YWlucyBhIGxhYmVsLCBhIHZhbHVlLCBhbmQgYW4gYXJyYXkgb2YgaXRlbXMuXHJcbiAqIFxyXG4gKiBTdHJ1Y3R1cmU6XHJcbiAqIFtcclxuICogICB7IGxhYmVsOiAnU2VsZWN0ZWQgaXRlbXMnLCB2YWx1ZTogJ3NlbGVjdGVkLWl0ZW1zJywgaXRlbXM6IFsuLi5dIH0sXHJcbiAqICAgeyBsYWJlbDogJ0F2YWlsYWJsZSBpdGVtcycsIHZhbHVlOiAnYXZhaWxhYmxlLWl0ZW1zJywgaXRlbXM6IFsuLi5dIH1cclxuICogXVxyXG4gKi9cclxuICBwcm90ZWN0ZWQgZ3JvdXBwZWREYXRhU291cmNlOiBTZWxlY3RJdGVtR3JvdXBbXSA9IFtdO1xyXG4gIHRvb2x0aXBQb3NpdGlvbiA9IFRvb2x0aXBQb3NpdGlvbjtcclxuICBwcml2YXRlIHJlYWRvbmx5IGxhYmVsT2ZFbGVtZW50Tm90Rm91bmRUZXh0S2V5OiBzdHJpbmcgPSAnc2hhcmVkVWktbGFiZWxPZkVsZW1lbnROb3RGb3VuZCc7XHJcbiAgcHJpdmF0ZSBsYWJlbE9mRWxlbWVudE5vdEZvdW5kVGV4dDogc3RyaW5nID0gJyc7XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZW50ZXInLCBbJyRldmVudCddKVxyXG4gIG9uRW50ZXJLZXkoZXZlbnQ6IGFueSkge1xyXG4gICAgLy8gSGFuZGxlIHRoZSBlbnRlciBrZXkgZXZlbnQgaGVyZVxyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIElucHV0c1xyXG4gIEBJbnB1dCgpIGVsZW1lbnRTb3VyY2VVcmw/OiBzdHJpbmcgfCAoKGl0ZW06IGFueSkgPT4gc3RyaW5nKSB8ICgoaXRlbTogYW55KSA9PiBQcm9taXNlPHN0cmluZz4pO1xyXG4gIEBJbnB1dCgpIGxpc3RTb3VyY2VVcmw/OiBzdHJpbmcgfCAoKGl0ZW06IGFueSkgPT4gc3RyaW5nKSB8ICgoaXRlbTogYW55KSA9PiBQcm9taXNlPHN0cmluZz4pO1xyXG4gIEBJbnB1dCgpIGxpc3RTb3VyY2VQYXJhbXM6IEtleVZhbHVlPHN0cmluZywgYW55PltdID0gW107XHJcbiAgQElucHV0KFwiaWQtZmllbGRcIikgaWRGaWVsZDogc3RyaW5nID0gXCJcIjtcclxuICBASW5wdXQoXCJsYWJlbC1maWVsZFwiKSBsYWJlbEZpZWxkOiBzdHJpbmcgPSBcIlwiO1xyXG4gIEBJbnB1dCgpIG11bHRpcGxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc29ydDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBzaG93Q2xlYXI6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHJlbG9hZERhdGFTb3VyY2U6IE9ic2VydmFibGU8YW55PiB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBpc0ZpbHRlcmVkPzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkTGFiZWw/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgbWF4V2lkdGg6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIGJ1c2luZXNzQ2xhc3M6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIHNlYXJjaERlYm91bmNlVGltZTogbnVtYmVyID0gMzAwO1xyXG5cclxuICBASW5wdXQoKSBjb21ib1R5cGU/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc3RhdHVzTWV0YWRhdGE/OiBTdGF0dXNNZXRhZGF0YVJlc3BvbnNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBjdXJyZW50Um93SXRlbSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRSb3dJdGVtO1xyXG4gIH1cclxuXHJcbiAgc2V0IGN1cnJlbnRSb3dJdGVtKHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMuX2N1cnJlbnRSb3dJdGVtID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBnZXQgZGF0YXNvdXJjZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRhc291cmNlO1xyXG4gIH1cclxuXHJcbiAgc2V0IGRhdGFzb3VyY2UoZGF0YXNvdXJjZTogYW55W10pIHtcclxuICAgIHRoaXMuX2dvdHRlbkRhdGFzb3VyY2UgPSBkYXRhc291cmNlO1xyXG5cclxuICAgIGlmICh0aGlzLl9nb3R0ZW5EYXRhc291cmNlKSB7XHJcbiAgICAgIHRoaXMuX21hcEdvdHRlbkRhdGFTb3VyY2VUb0xvY2FsRGF0YXNvdXJjZSgpXHJcbiAgICAgIHRoaXMuX2lzSW5wdXREYXRhc291cmNlID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBJbnB1dChcImJpbmRcIikgZ2V0IGJpbmQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYmluZDtcclxuICB9XHJcblxyXG4gIHNldCBiaW5kKHZhbHVlOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLl9iaW5kID09PSB2YWx1ZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChpc051bGxPckVtcHR5KHZhbHVlKSkge1xyXG4gICAgICB0aGlzLl9iaW5kID0gbnVsbDtcclxuICAgICAgdGhpcy5pbnB1dEZpZWxkID0gbnVsbDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLl9iaW5kID0gdmFsdWU7XHJcbiAgICAgIHRoaXMuaW5wdXRGaWVsZCA9IHZhbHVlO1xyXG4gICAgICB0aGlzLl9vbkJpbmRTZXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBNYXhpbXVtIG51bWJlciBvZiBzZWxlY3RlZCBpdGVtIGxhYmVscyB0byBkaXNwbGF5IGRpcmVjdGx5IGluIHRoZSBNdWx0aVNlbGVjdCBpbnB1dCBmaWVsZC5cclxuICogSWYgdGhlIHVzZXIgc2VsZWN0cyBtb3JlIHRoYW4gdGhpcyBudW1iZXIsIHRoZSBjb21wb25lbnQgY2FuIHNob3cgYSBcIitOXCIgbWVzc2FnZSBpbnN0ZWFkLlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKiBAZGVmYXVsdCAxXHJcbiAqL1xyXG4gIEBJbnB1dCgpIG1heFNlbGVjdGVkTGFiZWxzOiBudW1iZXIgPSAxO1xyXG5cclxuICAvKipcclxuICogTWF4aW11bSBudW1iZXIgb2Ygc2VsZWN0ZWQgaXRlbXMgdG8gZGlzcGxheSBpbnNpZGUgdGhlIHRvb2x0aXAuXHJcbiAqIElmIHRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgaXRlbXMgZXhjZWVkcyB0aGlzIGxpbWl0LCB0aGUgdG9vbHRpcCBjYW4gZGlzcGxheSBhIFwiK04gbW9yZVwiIG1lc3NhZ2UuXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqIEBkZWZhdWx0IDEwXHJcbiAqL1xyXG4gIEBJbnB1dCgpIHRvb2x0aXBNYXhEaXNwbGF5ZWRJdGVtczogbnVtYmVyID0gMTA7XHJcblxyXG4gIC8qKlxyXG4gKiBJbnB1dCB0byBjb25maWd1cmUgYmluZGluZyBtb2RlLlxyXG4gKlxyXG4gKiBAZGVwcmVjYXRlZCDimqDvuI8gKipGZWF0dXJlIHBsYW5uZWQqKiDigJMgY3VycmVudGx5IG5vdCB1c2VkLlxyXG4gKiBJbnRlbmRlZCBmb3IgZnV0dXJlIGVuaGFuY2VtZW50cyB0byBhbGxvdyBiaW5kaW5nIGVpdGhlciB0aGUgZnVsbCBvYmplY3Qgb3IganVzdCB0aGUga2V5LlxyXG4gKi9cclxuICBASW5wdXQoKSBiaW5kTW9kZTogQmluZE1vZGUgPSBCaW5kTW9kZS5EZWZhdWx0O1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gT3V0cHV0c1xyXG4gIEBPdXRwdXQoKSBiaW5kQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoXCJkYXRhc291cmNlLWxvYWRlZFwiKSBkYXRhU291cmNlTG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBpbml0ID0gbmV3IEV2ZW50RW1pdHRlcjxDb21ib1N0YXR1c01vZGVsPigpO1xyXG4gIEBPdXRwdXQoKSBpc0xvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q29tYm9TdGF0dXNNb2RlbD4oKTtcclxuICBAT3V0cHV0KCkgc2VsZWN0ZWRMYWJlbENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBPdXRwdXQoKSBvbkNsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBvblNlYXJjaEJ1dHRvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAvKipcclxuICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBzZWxlY3Rpb24gY2hhbmdlcy5cclxuICpcclxuICogQGRlcHJlY2F0ZWQg4pqg77iPIFRlbXBvcmFyeSBmZWF0dXJlIGZvciBhIHNwZWNpZmljIHVzZSBjYXNlLlxyXG4gKiBDdXJyZW50bHkgb25seSB1c2VkIGluIFtzb21lIHNjZW5hcmlvXS4gV2lsbCBiZSByZW1vdmVkIG9yIHJlcGxhY2VkIGluIGZ1dHVyZSB1cGRhdGVzLlxyXG4gKi9cclxuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gY3RvclxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlOiBFbnRpdHlDb25maWd1cmF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX3RzaU1vZGFsU2VydmljZTogVHNpTW9kYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbWVzc2FnZVNlcnZpY2U6IFRzaU5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9odHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBfbG9jYWxpemU6IExvY2FsaXplUGlwZSxcclxuICAgIHByb3RlY3RlZCBfY2RSZWY/OiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICApIHtcclxuICAgIHN1cGVyKF9jZFJlZik7XHJcbiAgICB0aGlzLmxhYmVsT2ZFbGVtZW50Tm90Rm91bmRUZXh0ID0gdGhpcy5fbG9jYWxpemUudHJhbnNmb3JtKHRoaXMubGFiZWxPZkVsZW1lbnROb3RGb3VuZFRleHRLZXkpID8/ICdVTktOT1dOICEnO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIGhhbmRsZSBsaWZlY3ljbGUgaG9va3NcclxuICBvdmVycmlkZSBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcbiAgICB0aGlzLl9yZWxvYWRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLl9zZWFyY2hEZWJvdW5jZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuX3NlYXJjaFN1YmplY3QuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIGdldCBpc1N0YXR1c0NvbWJvKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29tYm9UeXBlID09PSAnc3RhdHVzJztcclxuICB9XHJcblxyXG4gIGxpZ2h0ZW5Db2xvcihoZXg6IHN0cmluZyB8IHVuZGVmaW5lZCwgcGVyY2VudDogbnVtYmVyID0gNzApOiBzdHJpbmcge1xyXG4gICAgaWYgKCFoZXgpIHJldHVybiAnJztcclxuICAgIGhleCA9IGhleC5yZXBsYWNlKC9eIy8sICcnKTtcclxuXHJcbiAgICBsZXQgciA9IHBhcnNlSW50KGhleC5zdWJzdHJpbmcoMCwgMiksIDE2KTtcclxuICAgIGxldCBnID0gcGFyc2VJbnQoaGV4LnN1YnN0cmluZygyLCA0KSwgMTYpO1xyXG4gICAgbGV0IGIgPSBwYXJzZUludChoZXguc3Vic3RyaW5nKDQsIDYpLCAxNik7XHJcblxyXG4gICAgciA9IE1hdGgubWluKDI1NSwgTWF0aC5mbG9vcihyICsgKDI1NSAtIHIpICogcGVyY2VudCAvIDEwMCkpO1xyXG4gICAgZyA9IE1hdGgubWluKDI1NSwgTWF0aC5mbG9vcihnICsgKDI1NSAtIGcpICogcGVyY2VudCAvIDEwMCkpO1xyXG4gICAgYiA9IE1hdGgubWluKDI1NSwgTWF0aC5mbG9vcihiICsgKDI1NSAtIGIpICogcGVyY2VudCAvIDEwMCkpO1xyXG5cclxuICAgIGNvbnN0IG5ld0hleCA9XHJcbiAgICAgICcjJyArXHJcbiAgICAgIFtyLCBnLCBiXVxyXG4gICAgICAgIC5tYXAoeCA9PiB4LnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKVxyXG4gICAgICAgIC5qb2luKCcnKTtcclxuXHJcbiAgICByZXR1cm4gbmV3SGV4O1xyXG4gIH1cclxuXHJcbiAgZ2V0UmVhZGFibGVUZXh0Q29sb3IoaGV4OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFoZXgpIHJldHVybiAnYmxhY2snO1xyXG5cclxuICAgIGhleCA9IGhleC5yZXBsYWNlKC9eIy8sICcnKTtcclxuICAgIGNvbnN0IHIgPSBwYXJzZUludChoZXguc3Vic3RyaW5nKDAsIDIpLCAxNik7XHJcbiAgICBjb25zdCBnID0gcGFyc2VJbnQoaGV4LnN1YnN0cmluZygyLCA0KSwgMTYpO1xyXG4gICAgY29uc3QgYiA9IHBhcnNlSW50KGhleC5zdWJzdHJpbmcoNCwgNiksIDE2KTtcclxuXHJcbiAgICBjb25zdCBicmlnaHRuZXNzID0gKHIgKiAyOTkgKyBnICogNTg3ICsgYiAqIDExNCkgLyAxMDAwO1xyXG5cclxuICAgIHJldHVybiBicmlnaHRuZXNzID4gMjMwID8gJ2JsYWNrJyA6IGAjJHtoZXh9YDtcclxuICB9XHJcblxyXG4gIGdldFN0YXR1c09wdGlvbih2YWx1ZTogc3RyaW5nKTogU3RhdHVzT3B0aW9uIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLnN0YXR1c01ldGFkYXRhPy5vcHRpb25zLmZpbmQobyA9PiBvLnRyYW5zbGF0ZWRMYWJlbCA9PT0gdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgYXN5bmMgbmdPbkluaXQoKSB7XHJcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG5cclxuICAgIHRoaXMuX3NlYXJjaERlYm91bmNlU3Vic2NyaXB0aW9uID0gdGhpcy5fc2VhcmNoU3ViamVjdC5waXBlKFxyXG4gICAgICBkZWJvdW5jZVRpbWUodGhpcy5zZWFyY2hEZWJvdW5jZVRpbWUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXHJcbiAgICApLnN1YnNjcmliZShrZXl3b3JkID0+IHtcclxuICAgICAgdGhpcy5fbG9hZFNlcnZlclNpZGVQYWdlZERhdGFTb3VyY2Uoa2V5d29yZCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNoZWNrSWZBZHZhbmNlZFNlYXJjaENvbXBvbmVudEV4aXN0cygpO1xyXG4gICAgYXdhaXQgdGhpcy5jaGVja0lmRm9ybU5hbWVFeGlzdHMoKTtcclxuICAgIHRoaXMuX2luaXRQYXJhbWV0ZXJzV2l0aERlZmF1bHRzKCk7XHJcbiAgICB0aGlzLl9pbml0UmVsb2FkRGF0YVNvdXJjZVN1YnNjcmlwdGlvbigpO1xyXG4gICAgYXdhaXQgdGhpcy5faW5pdGlhbExvYWREYXRhKCk7XHJcblxyXG4gICAgbGV0IGxhbmd1ZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHJ0bE1vZGVLZXlzLnJ0bE1vZGVFbmFibGVkKTtcclxuXHJcbiAgICBpZiAobGFuZ3VlICYmIEpTT04ucGFyc2UobGFuZ3VlKSkge1xyXG4gICAgICB0aGlzLmlzQXIgPSB0cnVlXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5pc0FyID0gZmFsc2VcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm1heFdpZHRoID0gdGhpcy5tYXhXaWR0aCArICdyZW0nO1xyXG4gIH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcbiAgQElucHV0KCkgc2hvd1NlYXJjaEJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0FkZEJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0NvbnN1bHRCdXR0b24/OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHNob3dVcGRhdGVCdXR0b24/OiBib29sZWFuO1xyXG4gIHNob3dBZHZhbmNlZFNlYXJjaEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHJcbiAgY2hlY2tJZkFkdmFuY2VkU2VhcmNoQ29tcG9uZW50RXhpc3RzKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmJ1c2luZXNzQ2xhc3MpIHtcclxuICAgICAgdGhpcy5zaG93QWR2YW5jZWRTZWFyY2hCdXR0b24gPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lbnRpdHlDb25maWd1cmF0aW9uU2VydmljZS5nZXRFbnRpdHlJbmZvKHRoaXMuYnVzaW5lc3NDbGFzcykuc3Vic2NyaWJlKHtcclxuXHJcbiAgICAgIG5leHQ6IChlbnRpdHk6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2hvd0FkdmFuY2VkU2VhcmNoQnV0dG9uID0gISFlbnRpdHk/LmFkdmFuY2VkU2VhcmNoQ29tcG9uZW50O1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICB0aGlzLnNob3dBZHZhbmNlZFNlYXJjaEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNoZWNrSWZGb3JtTmFtZUV4aXN0cygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuYnVzaW5lc3NDbGFzcykge1xyXG4gICAgICAgIGlmICh0aGlzLnNob3dBZGRCdXR0b24gPT09IHVuZGVmaW5lZCkgdGhpcy5zaG93QWRkQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuc2hvd0NvbnN1bHRCdXR0b24gPT09IHVuZGVmaW5lZCkgdGhpcy5zaG93Q29uc3VsdEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLnNob3dVcGRhdGVCdXR0b24gPT09IHVuZGVmaW5lZCkgdGhpcy5zaG93VXBkYXRlQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5lbnRpdHlDb25maWd1cmF0aW9uU2VydmljZS5nZXRFbnRpdHlJbmZvKHRoaXMuYnVzaW5lc3NDbGFzcykuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoZW50aXR5OiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGhhc0Zvcm0gPSAhIWVudGl0eT8uZm9ybU5hbWU7XHJcblxyXG4gICAgICAgICAgaWYgKCFoYXNGb3JtKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0FkZEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dVcGRhdGVCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zaG93Q29uc3VsdEJ1dHRvbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICh0aGlzLnNob3dDb25zdWx0QnV0dG9uID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93Q29uc3VsdEJ1dHRvbiA9IHRoaXMuc2hvd0FkZEJ1dHRvbjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5zaG93VXBkYXRlQnV0dG9uID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93VXBkYXRlQnV0dG9uID0gdGhpcy5zaG93QWRkQnV0dG9uO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuc2hvd0FkZEJ1dHRvbiA9PT0gdW5kZWZpbmVkKSB0aGlzLnNob3dBZGRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgIGlmICh0aGlzLnNob3dDb25zdWx0QnV0dG9uID09PSB1bmRlZmluZWQpIHRoaXMuc2hvd0NvbnN1bHRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAgIGlmICh0aGlzLnNob3dVcGRhdGVCdXR0b24gPT09IHVuZGVmaW5lZCkgdGhpcy5zaG93VXBkYXRlQnV0dG9uID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICBvcGVuQWR2YW5jZWRTZWFyY2hDb21wb25lbnQoKSB7XHJcbiAgICBpZiAoIXRoaXMuYnVzaW5lc3NDbGFzcykge1xyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZT8uZXJyb3IoXCJzZWFyY2hfY29tYm9fY29tcG9uZW50X25hbWVFbnRpdHlcIik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldEVudGl0eUluZm8odGhpcy5idXNpbmVzc0NsYXNzKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IGFzeW5jIChlbnRpdHk6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zaG93QWR2YW5jZWRTZWFyY2hCdXR0b24gPSAhIWVudGl0eT8uYWR2YW5jZWRTZWFyY2hDb21wb25lbnQ7XHJcbiAgICAgICAgICBpZiAoIWVudGl0eSB8fCAhZW50aXR5LmFkdmFuY2VkU2VhcmNoQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlPy5lcnJvcihcInNlYXJjaF9jb21ib19jb21wb25lbnRfZm9ybV9uYW1lX25mXCIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgbGV0IGNvbmY6IER5bmFtaWNEaWFsb2dDb25maWcgPSB7XHJcbiAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICBpc0FkdmFuY2VkU2VhcmNoOiB0cnVlLFxyXG4gICAgICAgICAgICAgIHNlbGVjdGlvbk1vZGU6IHRoaXMubXVsdGlwbGUgPyBHcmlkU2VsZWN0aW9uTW9kZS5NdWx0aXBsZSA6IEdyaWRTZWxlY3Rpb25Nb2RlLlNpbmdsZSxcclxuICAgICAgICAgICAgICBtb2RlOiBDb21wb25lbnRfTW9kZXMuQ09OU1VMVCxcclxuICAgICAgICAgICAgICBjdXN0b21EYXRhOiBlbnRpdHksXHJcbiAgICAgICAgICAgICAgc2VsZWN0S2V5T25seTogdGhpcy5tdWx0aXBsZSA/IGZhbHNlIDogdHJ1ZSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3R5bGVDbGFzczogJycsXHJcbiAgICAgICAgICAgIHdpZHRoOiBNb2RhbFNpemVFbnVtLk1lZGl1bS53aWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBNb2RhbFNpemVFbnVtLk1lZGl1bS5oZWlnaHQsXHJcbiAgICAgICAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICB0aGlzLl9kaWFsb2dSZWZlcmVuY2UgPSB0aGlzLl90c2lNb2RhbFNlcnZpY2U/Lm9wZW4oVHlwZVJlZ2lzdHJ5SGVscGVyLmdldFR5cGUoZW50aXR5LmFkdmFuY2VkU2VhcmNoQ29tcG9uZW50KSwgY29uZik7XHJcblxyXG4gICAgICAgICAgdGhpcy5fZGlhbG9nUmVmZXJlbmNlPy5vbkNsb3NlLnN1YnNjcmliZSgoc2VsZWN0aW9uOiBhbnkpID0+IHRoaXMuaGFuZGxlRXh0ZXJuYWxTZWxlY3Rpb24oc2VsZWN0aW9uKSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgdGhpcy5zaG93QWR2YW5jZWRTZWFyY2hCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3BlblNlYXJjaERpYWxvZygpIHtcclxuICAgIGlmICghdGhpcy5idXNpbmVzc0NsYXNzKSB7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlPy5lcnJvcihcInNlYXJjaF9jb21ib19jb21wb25lbnRfbmFtZUVudGl0eVwiKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldEVudGl0eUluZm8odGhpcy5idXNpbmVzc0NsYXNzKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IGFzeW5jIChlbnRpdHk6IGFueSkgPT4ge1xyXG4gICAgICAgICAgbGV0IGNvbmY6IER5bmFtaWNEaWFsb2dDb25maWcgPSB7XHJcbiAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICBpc0FkdmFuY2VkU2VhcmNoOiB0cnVlLFxyXG4gICAgICAgICAgICAgIHNlbGVjdGlvbk1vZGU6IHRoaXMubXVsdGlwbGUgPyBHcmlkU2VsZWN0aW9uTW9kZS5NdWx0aXBsZSA6IEdyaWRTZWxlY3Rpb25Nb2RlLlNpbmdsZSxcclxuICAgICAgICAgICAgICBtb2RlOiBDb21wb25lbnRfTW9kZXMuQ09OU1VMVCxcclxuICAgICAgICAgICAgICBjdXN0b21EYXRhOiBlbnRpdHksXHJcbiAgICAgICAgICAgICAgc2VsZWN0S2V5T25seTogdGhpcy5tdWx0aXBsZSA/IGZhbHNlIDogdHJ1ZSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3R5bGVDbGFzczogJycsXHJcbiAgICAgICAgICAgIHdpZHRoOiBNb2RhbFNpemVFbnVtLk1lZGl1bS53aWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBNb2RhbFNpemVFbnVtLk1lZGl1bS5oZWlnaHQsXHJcbiAgICAgICAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICBpZiAoIWVudGl0eSB8fCAhZW50aXR5Lmxpc3RDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2U/LmVycm9yKFwic2VhcmNoX2NvbWJvX2NvbXBvbmVudF9mb3JtX25hbWVfbmZcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZmVyZW5jZSA9IHRoaXMuX3RzaU1vZGFsU2VydmljZT8ub3BlbihUeXBlUmVnaXN0cnlIZWxwZXIuZ2V0VHlwZShlbnRpdHkubGlzdENvbXBvbmVudCksIGNvbmYpO1xyXG4gICAgICAgICAgdGhpcy5fZGlhbG9nUmVmZXJlbmNlPy5vbkNsb3NlLnN1YnNjcmliZSgoc2VsZWN0aW9uOiBhbnkpID0+IHRoaXMuaGFuZGxlRXh0ZXJuYWxTZWxlY3Rpb24oc2VsZWN0aW9uKSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRFbGVtZW50KCkge1xyXG4gICAgaWYgKCF0aGlzLmJ1c2luZXNzQ2xhc3MpIHtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2U/LmVycm9yKFwic2VhcmNoX2NvbWJvX2NvbXBvbmVudF9uYW1lRW50aXR5XCIpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuZW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UuZ2V0RW50aXR5SW5mbyh0aGlzLmJ1c2luZXNzQ2xhc3MpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogYXN5bmMgKGVudGl0eTogYW55KSA9PiB7XHJcbiAgICAgICAgICBsZXQgY29uZjogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgICAgICAgZGF0YTogeyBtb2RlOiBDb21wb25lbnRfTW9kZXMuQ1JFQVRFLCBjdXN0b21EYXRhOiBlbnRpdHkgfSxcclxuICAgICAgICAgICAgc3R5bGVDbGFzczogJycsXHJcbiAgICAgICAgICAgIHdpZHRoOiBNb2RhbFNpemVFbnVtLk1lZGl1bS53aWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBNb2RhbFNpemVFbnVtLk1lZGl1bS5oZWlnaHQsXHJcbiAgICAgICAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZXM6IHtcclxuICAgICAgICAgICAgZm9vdGVyOiBUc2lGb3JtTW9kYWxGb290ZXJDb21wb25lbnQsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIGlmICghZW50aXR5IHx8ICFlbnRpdHkuZm9ybU5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2U/LmVycm9yKFwic2VhcmNoX2NvbWJvX2NvbXBvbmVudF9mb3JtX25hbWVfbmZcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZmVyZW5jZSA9IHRoaXMuX3RzaU1vZGFsU2VydmljZT8ub3BlbihUeXBlUmVnaXN0cnlIZWxwZXIuZ2V0VHlwZShlbnRpdHkuZm9ybU5hbWUpLCBjb25mKTtcclxuICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZmVyZW5jZT8ub25DbG9zZS5zdWJzY3JpYmUoKHNhdmVkRWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChzYXZlZEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICBpZiAodHlwZW9mIHNhdmVkRWxlbWVudCA9PT0gJ29iamVjdCcgJiYgc2F2ZWRFbGVtZW50ICE9PSBudWxsICYmICd1aWQnIGluIHNhdmVkRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kVmFsdWVDaGFuZ2VkKHNhdmVkRWxlbWVudD8udWlkKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHNhdmVkRWxlbWVudCA9PT0gJ3N0cmluZycgJiYgR3VpZC5pc1ZhbGlkKHNhdmVkRWxlbWVudCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmluZFZhbHVlQ2hhbmdlZChzYXZlZEVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgaXNEYXRhc291cmNlRW1wdHkoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhTG9hZGVkICYmICghdGhpcy5kYXRhc291cmNlIHx8IHRoaXMuZGF0YXNvdXJjZS5sZW5ndGggPT09IDApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhc0xvYWRFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHJcbiAgdXBkYXRlRWxlbWVudCgpIHtcclxuICAgIGlmICghdGhpcy5idXNpbmVzc0NsYXNzKSB7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlPy5lcnJvcihcInNlYXJjaF9jb21ib19jb21wb25lbnRfbmFtZUVudGl0eVwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5iaW5kKSB7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlPy5lcnJvcihcIkF1Y3VuIMOpbMOpbWVudCBzw6lsZWN0aW9ubsOpIHBvdXIgbGEgbWlzZSDDoCBqb3VyLlwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UuZ2V0RW50aXR5SW5mbyh0aGlzLmJ1c2luZXNzQ2xhc3MpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IGFzeW5jIChlbnRpdHk6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICghZW50aXR5IHx8ICFlbnRpdHkuZm9ybU5hbWUpIHtcclxuICAgICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlPy5lcnJvcihcInNlYXJjaF9jb21ib19jb21wb25lbnRfZm9ybV9uYW1lX25mXCIpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgY29uZjogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgbW9kZTogQ29tcG9uZW50X01vZGVzLkVESVQsXHJcbiAgICAgICAgICAgIGN1c3RvbURhdGE6IGVudGl0eSxcclxuICAgICAgICAgICAgaWQ6IHRoaXMuYmluZFxyXG4gICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICBzdHlsZUNsYXNzOiAnJyxcclxuICAgICAgICAgIHdpZHRoOiBNb2RhbFNpemVFbnVtLk1lZGl1bS53aWR0aCxcclxuICAgICAgICAgIGhlaWdodDogTW9kYWxTaXplRW51bS5NZWRpdW0uaGVpZ2h0LFxyXG4gICAgICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICAgICAgICB0ZW1wbGF0ZXM6IHtcclxuICAgICAgICAgICAgZm9vdGVyOiBUc2lGb3JtTW9kYWxGb290ZXJDb21wb25lbnQsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5fZGlhbG9nUmVmZXJlbmNlID0gdGhpcy5fdHNpTW9kYWxTZXJ2aWNlPy5vcGVuKFR5cGVSZWdpc3RyeUhlbHBlci5nZXRUeXBlKGVudGl0eS5mb3JtTmFtZSksIGNvbmYpO1xyXG5cclxuICAgICAgICB0aGlzLl9kaWFsb2dSZWZlcmVuY2U/Lm9uQ2xvc2Uuc3Vic2NyaWJlKCh1cGRhdGVkRWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAodXBkYXRlZEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB1cGRhdGVkRWxlbWVudCA9PT0gJ29iamVjdCcgJiYgdXBkYXRlZEVsZW1lbnQgIT09IG51bGwgJiYgJ3VpZCcgaW4gdXBkYXRlZEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICB0aGlzLmJpbmRWYWx1ZUNoYW5nZWQodXBkYXRlZEVsZW1lbnQ/LnVpZCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHVwZGF0ZWRFbGVtZW50ID09PSAnc3RyaW5nJyAmJiBHdWlkLmlzVmFsaWQodXBkYXRlZEVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5iaW5kVmFsdWVDaGFuZ2VkKHVwZGF0ZWRFbGVtZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjb25zdWx0RWxlbWVudCgpIHtcclxuICAgIGlmICghdGhpcy5idXNpbmVzc0NsYXNzKSB7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlPy5lcnJvcihcInNlYXJjaF9jb21ib19jb21wb25lbnRfbmFtZUVudGl0eVwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5iaW5kKSB7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlPy5lcnJvcihcIkF1Y3VuIMOpbMOpbWVudCBzw6lsZWN0aW9ubsOpIHBvdXIgbGEgY29uc3VsdGF0aW9uLlwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UuZ2V0RW50aXR5SW5mbyh0aGlzLmJ1c2luZXNzQ2xhc3MpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IGFzeW5jIChlbnRpdHk6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICghZW50aXR5IHx8ICFlbnRpdHkuZm9ybU5hbWUpIHtcclxuICAgICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlPy5lcnJvcihcInNlYXJjaF9jb21ib19jb21wb25lbnRfZm9ybV9uYW1lX25mXCIpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgY29uZjogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgbW9kZTogQ29tcG9uZW50X01vZGVzLkNPTlNVTFQsXHJcbiAgICAgICAgICAgIGN1c3RvbURhdGE6IGVudGl0eSxcclxuICAgICAgICAgICAgaWQ6IHRoaXMuYmluZFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHN0eWxlQ2xhc3M6ICcnLFxyXG4gICAgICAgICAgd2lkdGg6IE1vZGFsU2l6ZUVudW0uTWVkaXVtLndpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiBNb2RhbFNpemVFbnVtLk1lZGl1bS5oZWlnaHQsXHJcbiAgICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgICAgIHRlbXBsYXRlczoge1xyXG4gICAgICAgICAgICBmb290ZXI6IFRzaUZvcm1Nb2RhbEZvb3RlckNvbXBvbmVudCxcclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLl9kaWFsb2dSZWZlcmVuY2UgPSB0aGlzLl90c2lNb2RhbFNlcnZpY2U/Lm9wZW4oXHJcbiAgICAgICAgICBUeXBlUmVnaXN0cnlIZWxwZXIuZ2V0VHlwZShlbnRpdHkuZm9ybU5hbWUpLFxyXG4gICAgICAgICAgY29uZlxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuX2RpYWxvZ1JlZmVyZW5jZT8ub25DbG9zZS5zdWJzY3JpYmUoKF8pID0+IHtcclxuICAgICAgICB9KTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyZXVyIGxvcnMgZGUgbGEgcsOpY3Vww6lyYXRpb24gZGVzIGluZm9zIGQnZW50aXTDqSA6XCIsIGVycik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIGhhbmRsZSBldmVudHNcclxuICBoYW5kbGVDaGFuZ2VFdmVudChkcm9wZG93bkNoYW5nZUV2ZW50OiBEcm9wZG93bkNoYW5nZUV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLmJpbmRWYWx1ZUNoYW5nZWQoZHJvcGRvd25DaGFuZ2VFdmVudC52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJpbmRWYWx1ZUNoYW5nZWQobmV3VmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5iaW5kID0gbmV3VmFsdWU7XHJcbiAgICB0aGlzLmlzRGlydHkgPSB0cnVlXHJcbiAgICB0aGlzLmJpbmRDaGFuZ2UuZW1pdCh0aGlzLmJpbmQpO1xyXG4gICAgdGhpcy5faGFuZGxlU2VsZWN0ZWRFbGVtZW50c0xhYmVsQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICBzZWFyY2hWYWx1ZUNoYW5nZWQoc2VhcmNoVmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuaXNGaWx0ZXJlZCAmJiAhdGhpcy5faXNJbnB1dERhdGFzb3VyY2UpIHtcclxuICAgICAgdGhpcy5pc0ZpbHRlcmluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMuX3NlYXJjaFN1YmplY3QubmV4dChzZWFyY2hWYWx1ZS5maWx0ZXIgPz8gJycpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25PcGVuKCkge1xyXG4gICAgdGhpcy5pc0ZpbHRlcmluZyA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLmlzRmlsdGVyZWQgfHwgdHlwZW9mIHRoaXMubGlzdFNvdXJjZVVybCA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgdGhpcy5fbG9hZERhdGFTb3VyY2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBpc05vUmVzdWx0QWZ0ZXJGaWx0ZXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLmRhdGFMb2FkZWQgJiZcclxuICAgICAgdGhpcy5kYXRhc291cmNlLmxlbmd0aCA9PT0gMCAmJlxyXG4gICAgICB0aGlzLmlzRmlsdGVyaW5nICYmXHJcbiAgICAgICF0aGlzLmhhc0xvYWRFcnJvclxyXG4gICAgKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBwcml2YXRlIG1ldGhvZHNcclxuICBwcml2YXRlIF9sb2FkRGF0YVNvdXJjZSgpIHtcclxuICAgIGlmICghdGhpcy5faXNJbnB1dERhdGFzb3VyY2UpIHtcclxuICAgICAgaWYgKHRoaXMuaXNGaWx0ZXJlZCkge1xyXG4gICAgICAgIHRoaXMuX2xvYWRTZXJ2ZXJTaWRlUGFnZWREYXRhU291cmNlKCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fbG9hZE5vdFNlcnZlclNpZGVQYWdlZERhdGFTb3VyY2UoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfbG9hZFNlcnZlclNpZGVQYWdlZERhdGFTb3VyY2Uoa2V5d29yZDogc3RyaW5nID0gXCJcIikge1xyXG4gICAgY29uc3QgdXJsID0gYXdhaXQgdGhpcy5faW5pdExpc3REYXRhU291cmNlRW5kcG9pbnQoKTtcclxuICAgIGlmICghdXJsKSB7XHJcbiAgICAgIHRoaXMuZGF0YUxvYWRlZCA9IHRydWU7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvYWREYXRhKHVybCwgdGhpcy5fZ2VuZXJhdGVIdHRwUGFyYW1zKGtleXdvcmQpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2xvYWROb3RTZXJ2ZXJTaWRlUGFnZWREYXRhU291cmNlKCkge1xyXG4gICAgY29uc3QgdXJsID0gYXdhaXQgdGhpcy5faW5pdExpc3REYXRhU291cmNlRW5kcG9pbnQoKTtcclxuICAgIGlmICghdXJsKSB7XHJcbiAgICAgIHRoaXMuZGF0YUxvYWRlZCA9IHRydWU7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvYWREYXRhKHVybCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWREYXRhKHVybDogc3RyaW5nLCBwYXJhbXM/OiBhbnkpIHtcclxuICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICB0aGlzLl9kYXRhc291cmNlID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kYXRhTG9hZGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLmhhc0xvYWRFcnJvciA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuX2h0dHBDbGllbnQuZ2V0KHVybCwgcGFyYW1zKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5fZ290dGVuRGF0YXNvdXJjZSA9IGRhdGE7XHJcbiAgICAgICAgdGhpcy5fbWFwR290dGVuRGF0YVNvdXJjZVRvTG9jYWxEYXRhc291cmNlKCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gbG9hZCBkYXRhc291cmNlJywgZXJyb3IpO1xyXG4gICAgICAgIHRoaXMuaGFzTG9hZEVycm9yID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmRhdGFMb2FkZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldCBpc0FwaUVycm9yKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YUxvYWRlZCAmJiB0aGlzLmhhc0xvYWRFcnJvcjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2Vuc3VyZVNlbGVjdGVkT3B0aW9uRXhpc3RzKCkge1xyXG4gICAgLy8gbm8gX2Vuc3VyZVNlbGVjdGVkT3B0aW9uRXhpc3RzIGZvciBtdWx0aS1zZWxlY3RcclxuICAgIGlmICh0aGlzLm11bHRpcGxlKSByZXR1cm47XHJcblxyXG4gICAgaWYgKHRoaXMuYmluZCA9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgZXhpc3RzID0gdGhpcy5kYXRhc291cmNlLnNvbWUoeCA9PiB4LmlkID09IHRoaXMuYmluZCk7XHJcblxyXG4gICAgaWYgKCFleGlzdHMpIHtcclxuICAgICAgYXdhaXQgdGhpcy5fbG9hZEJpbmRFbGVtZW50KCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZmluZFNlbGVjdGVkT3B0aW9uID0gdGhpcy5kYXRhc291cmNlLmZpbmQoKGk6IGFueSkgPT4gaS5pZCA9PSB0aGlzLmJpbmQpO1xyXG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChmaW5kU2VsZWN0ZWRPcHRpb24pO1xyXG4gICAgaWYgKGZpbmRTZWxlY3RlZE9wdGlvbj8ubGFiZWwpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZExhYmVsQ2hhbmdlLmVtaXQoZmluZFNlbGVjdGVkT3B0aW9uLmxhYmVsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2xvYWRCaW5kRWxlbWVudCgpIHtcclxuICAgIC8vIG5vIF9sb2FkQmluZEVsZW1lbnQgZm9yIG11bHRpLXNlbGVjdFxyXG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHJldHVybjtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLmRhdGFMb2FkZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgIGlmICghdGhpcy5pc0VsZW1lbnRTb3VyY2VVcmxWYWxpZCgpIHx8ICF0aGlzLmJpbmQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGRhdGE6IGFueSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuX2h0dHBDbGllbnQuZ2V0KGF3YWl0IHRoaXMuX2luaXRFbGVtZW50RW5kcG9pbnQoKSkpO1xyXG5cclxuICAgICAgaWYgKCFkYXRhKSByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCBvcHRpb24gPSB7XHJcbiAgICAgICAgaWQ6IGRhdGFbdGhpcy5pZEZpZWxkXSxcclxuICAgICAgICBsYWJlbDogZGF0YVt0aGlzLmxhYmVsRmllbGRdXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBpZiAoIXRoaXMuZGF0YXNvdXJjZS5zb21lKHggPT4geC5pZCA9PT0gb3B0aW9uLmlkKSkge1xyXG4gICAgICAgIHRoaXMuX2RhdGFzb3VyY2UgPSBbLi4udGhpcy5kYXRhc291cmNlLCBvcHRpb25dO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnNlbGVjdGVkTGFiZWxDaGFuZ2UuZW1pdChvcHRpb24ubGFiZWwpO1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2VMb2FkZWQuZW1pdCgpO1xyXG5cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIHNlbGVjdGVkIGVsZW1lbnQnLCBlcnJvcik7XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICB0aGlzLmRhdGFMb2FkZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY29tcGFyZUZ1bmN0aW9uKCk6IChhOiBhbnksIGI6IGFueSkgPT4gbnVtYmVyIHtcclxuICAgIHJldHVybiAoYSwgYikgPT4ge1xyXG4gICAgICBpZiAoYS5sYWJlbCA+IGIubGFiZWwpIHsgcmV0dXJuIDE7IH1cclxuICAgICAgaWYgKGEubGFiZWwgPCBiLmxhYmVsKSB7IHJldHVybiAtMTsgfVxyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzTGlzdFNvdXJjZVVybFZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmxpc3RTb3VyY2VVcmwpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdsaXN0U291cmNlVXJsIHVybCBub3QgcHJvdmlkZWQnKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzRWxlbWVudFNvdXJjZVVybFZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHR5cGVvZiB0aGlzLmVsZW1lbnRTb3VyY2VVcmwgPT0gXCJzdHJpbmdcIiAmJiAhdGhpcy5lbGVtZW50U291cmNlVXJsKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignZWxlbWVudFNvdXJjZVVybCBub3QgZGVmaW5lZCcpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0UGFyYW1ldGVyc1dpdGhEZWZhdWx0cygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlkRmllbGQgPT0gdW5kZWZpbmVkIHx8IHRoaXMuaWRGaWVsZCA9PT0gXCJcIikge1xyXG4gICAgICB0aGlzLmlkRmllbGQgPSBcImlkXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMubGFiZWxGaWVsZCA9PSB1bmRlZmluZWQgfHwgdGhpcy5sYWJlbEZpZWxkID09PSBcIlwiKSB7XHJcbiAgICAgIHRoaXMubGFiZWxGaWVsZCA9IFwibGliZWxsZVwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfaW5pdEVsZW1lbnRFbmRwb2ludCgpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgaWYgKHRoaXMuYmluZCkge1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiB0aGlzLmVsZW1lbnRTb3VyY2VVcmwgPT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIHJldHVybiBlbmNvZGVVUkkoYCR7dGhpcy5lbGVtZW50U291cmNlVXJsfS8ke3RoaXMuYmluZH1gKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodHlwZW9mIHRoaXMuZWxlbWVudFNvdXJjZVVybCA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICBsZXQgdGVtcFVybCA9IGF3YWl0IHRoaXMuZWxlbWVudFNvdXJjZVVybCh0aGlzLmN1cnJlbnRSb3dJdGVtKVxyXG4gICAgICAgIHJldHVybiBlbmNvZGVVUkkoYCR7dGVtcFVybH0vJHt0aGlzLmJpbmR9YClcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICAgIGVsc2UgdGhyb3cgbmV3IEVycm9yKCdubyBiaW5kIGlucHV0IHdhcyBwcm92aWRlZCwgY2Fubm90IGNyZWF0ZSBiaW5kRWxlbWVudFVybCcpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9pbml0TGlzdERhdGFTb3VyY2VFbmRwb2ludCgpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcclxuICAgIGlmICghdGhpcy5saXN0U291cmNlVXJsKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignTGlzdCBzb3VyY2UgVVJMIG5vdCBwcm92aWRlZCcpO1xyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIHRoaXMubGlzdFNvdXJjZVVybCA9PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIHJldHVybiBlbmNvZGVVUkkoYCR7dGhpcy5saXN0U291cmNlVXJsfWApO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiB0aGlzLmxpc3RTb3VyY2VVcmwgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgIGxldCB0ZW1wVXJsID0gYXdhaXQgdGhpcy5saXN0U291cmNlVXJsKHRoaXMuY3VycmVudFJvd0l0ZW0pXHJcbiAgICAgIHJldHVybiBlbmNvZGVVUkkoYCR7dGVtcFVybH1gKVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfaW5pdGlhbExvYWREYXRhKCkge1xyXG4gICAgaWYgKHRoaXMuX2lzSW5wdXREYXRhc291cmNlKSB7XHJcbiAgICAgIHRoaXMuX21hcEdvdHRlbkRhdGFTb3VyY2VUb0xvY2FsRGF0YXNvdXJjZSgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlzRmlsdGVyZWQpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLl9sb2FkQmluZEVsZW1lbnQoKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9sb2FkTm90U2VydmVyU2lkZVBhZ2VkRGF0YVNvdXJjZSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9vbkJpbmRTZXQoKSB7XHJcbiAgICBpZiAodGhpcy5faXNJbnB1dERhdGFzb3VyY2UpIHtcclxuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHJldHVybjtcclxuXHJcbiAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5kYXRhc291cmNlLmZpbmQoKGk6IGFueSkgPT4gaS5pZCA9PSB0aGlzLmJpbmQpO1xyXG4gICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KGZvdW5kKTtcclxuICAgICAgaWYgKGZvdW5kPy5sYWJlbCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMYWJlbENoYW5nZS5lbWl0KGZvdW5kLmxhYmVsKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgYXdhaXQgdGhpcy5fZW5zdXJlU2VsZWN0ZWRPcHRpb25FeGlzdHMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZEFsbERhdGEoKSB7XHJcbiAgICBpZiAodGhpcy5pc0ZpbHRlcmVkKSB7XHJcbiAgICAgIHRoaXMuX2xvYWRTZXJ2ZXJTaWRlUGFnZWREYXRhU291cmNlKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5fbG9hZE5vdFNlcnZlclNpZGVQYWdlZERhdGFTb3VyY2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXRSZWxvYWREYXRhU291cmNlU3Vic2NyaXB0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMucmVsb2FkRGF0YVNvdXJjZSkge1xyXG4gICAgICB0aGlzLl9yZWxvYWRTdWJzY3JpcHRpb24gPSB0aGlzLnJlbG9hZERhdGFTb3VyY2Uuc3Vic2NyaWJlKFxyXG4gICAgICAgIChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmICh0eXBlb2YgKGRhdGEpID09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhICE9IHVuZGVmaW5lZCAmJiBkYXRhICE9IG51bGwgJiYgZGF0YSAhPSAnJykge1xyXG4gICAgICAgICAgICAgIHRoaXMubGlzdFNvdXJjZVVybCA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2FkQWxsRGF0YSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZSA9IGRhdGFcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9tYXBHb3R0ZW5EYXRhU291cmNlVG9Mb2NhbERhdGFzb3VyY2UoKTogdm9pZCB7XHJcblxyXG4gICAgbGV0IHRlbXBBcnJheTogYW55W10gPSBbXTtcclxuXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLl9nb3R0ZW5EYXRhc291cmNlKSkge1xyXG5cclxuICAgICAgdGhpcy5fZ290dGVuRGF0YXNvdXJjZS5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgb2JqID0ge1xyXG4gICAgICAgICAgaWQ6IGVsZW1lbnRbdGhpcy5pZEZpZWxkXSxcclxuICAgICAgICAgIGxhYmVsOiBlbGVtZW50W3RoaXMubGFiZWxGaWVsZF1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0ZW1wQXJyYXkucHVzaChvYmopO1xyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICB0aGlzLl9kYXRhc291cmNlID0gdGVtcEFycmF5O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuX2RhdGFzb3VyY2UgPSB0aGlzLl9kaXN0aW5jdEJ5SWQoWy4uLnRoaXMuZGF0YXNvdXJjZSwgLi4udGVtcEFycmF5XSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc29ydCkge1xyXG4gICAgICB0aGlzLl9kYXRhc291cmNlLnNvcnQodGhpcy5fY29tcGFyZUZ1bmN0aW9uKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGF0YUxvYWRlZCA9IHRydWU7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2VMb2FkZWQuZW1pdCgpO1xyXG5cclxuICAgIGlmICghdGhpcy5faXNJbnB1dERhdGFzb3VyY2UpIHtcclxuICAgICAgdGhpcy5fZW5zdXJlU2VsZWN0ZWRPcHRpb25FeGlzdHMoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICB0aGlzLmNhbGN1bGF0ZUdyb3VwcGVkRGF0YVNvdXJjZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2VuZXJhdGVIdHRwUGFyYW1zKGtleXdvcmQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGFueSB7XHJcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3ZhbHVlJywga2V5d29yZCA/PyAnJyk7XHJcblxyXG4gICAgaWYgKCF0aGlzLmxpc3RTb3VyY2VQYXJhbXMgfHwgIUFycmF5LmlzQXJyYXkodGhpcy5saXN0U291cmNlUGFyYW1zKSB8fCB0aGlzLmxpc3RTb3VyY2VQYXJhbXMubGVuZ3RoIDwgMSkge1xyXG4gICAgICByZXR1cm4geyBwYXJhbXM6IHBhcmFtcyB9O1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubGlzdFNvdXJjZVBhcmFtcy5maWx0ZXIoKHA6IEtleVZhbHVlPHN0cmluZywgYW55PikgPT4gcC52YWx1ZSAhPSBudWxsICYmIHAudmFsdWUgIT0gdW5kZWZpbmVkKVxyXG4gICAgICAuZm9yRWFjaCgocDogS2V5VmFsdWU8c3RyaW5nLCBhbnk+KSA9PiB7XHJcbiAgICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZChwLmtleSwgcC52YWx1ZSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB7IHBhcmFtczogcGFyYW1zIH07XHJcbiAgfVxyXG5cclxuICBvblNlYXJjaENvbWJvQ2xpY2soZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5vbkNsaWNrLmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIEV2ZW50IGhhbmRsZXIgY2FsbGVkIHdoZW4gdGhlIE11bHRpU2VsZWN0IG1vZGVsIGNoYW5nZXMuXHJcbiAqIFVwZGF0ZXMgdGhlIGJvdW5kIHZhbHVlIGFuZCByZWNhbGN1bGF0ZXMgdGhlIGdyb3VwZWQgZGF0YXNvdXJjZSBmb3IgcHJvcGVyIHJlbmRlcmluZy5cclxuICpcclxuICogQHBhcmFtIHtvYmplY3R9IG5ld1ZhbHVlIC0gVGhlIG5ldyB2YWx1ZSBlbWl0dGVkIGJ5IHRoZSBNdWx0aVNlbGVjdCBjb21wb25lbnQuXHJcbiAqL1xyXG4gIG9uTXVsdGlTZWxlY3RNb2RlbENoYW5nZShuZXdWYWx1ZTogb2JqZWN0KTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5iaW5kVmFsdWVDaGFuZ2VkKG5ld1ZhbHVlKTtcclxuXHJcbiAgICB0aGlzLmNhbGN1bGF0ZUdyb3VwcGVkRGF0YVNvdXJjZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIFJldHVybnMgYSBkaXN0aW5jdCBhcnJheSBvZiBpdGVtcyBiYXNlZCBvbiB0aGVpciBgaWRgIHByb3BlcnR5LlxyXG4gKiBVc2VmdWwgdG8gcmVtb3ZlIGR1cGxpY2F0ZXMgZnJvbSB0aGUgZGF0YXNvdXJjZSBvciBzZWxlY3RlZCBpdGVtcyBsaXN0LlxyXG4gKlxyXG4gKiBAcGFyYW0ge2FueVtdfSBhcnJheSAtIEFycmF5IG9mIG9iamVjdHMgY29udGFpbmluZyBhbiBgaWRgIHByb3BlcnR5LlxyXG4gKiBAcmV0dXJucyB7YW55W119IEFycmF5IG9mIHVuaXF1ZSBpdGVtcyBieSBgaWRgLlxyXG4gKi9cclxuICBwcml2YXRlIF9kaXN0aW5jdEJ5SWQoYXJyYXk6IGFueVtdKTogYW55W10ge1xyXG4gICAgaWYgKCFhcnJheSkgcmV0dXJuIFtdO1xyXG5cclxuICAgIGNvbnN0IGRpc3RpbmN0ID0gQXJyYXkuZnJvbShcclxuICAgICAgbmV3IE1hcChhcnJheS5tYXAoaXRlbSA9PiBbaXRlbS5pZCwgaXRlbV0pKS52YWx1ZXMoKVxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gZGlzdGluY3Q7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogVHJhY2tCeSBmdW5jdGlvbiBmb3IgQW5ndWxhciBuZ0ZvciBsb29wcy5cclxuICogSGVscHMgQW5ndWxhciBlZmZpY2llbnRseSB0cmFjayBsaXN0IGl0ZW1zIGJ5IGEgdW5pcXVlIGlkZW50aWZpZXIsIGF2b2lkaW5nIHVubmVjZXNzYXJ5IHJlLXJlbmRlcmluZy5cclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IC0gSW5kZXggb2YgdGhlIGl0ZW0gaW4gdGhlIGFycmF5LlxyXG4gKiBAcGFyYW0ge2FueX0gaXRlbSAtIEl0ZW0gb2JqZWN0IGNvbnRhaW5pbmcgYW4gYGlkYC5cclxuICogQHJldHVybnMge2FueX0gVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBpdGVtIChpdGVtLmlkKS5cclxuICovXHJcbiAgdHJhY2tCeUlkKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSk6IGFueSB7XHJcbiAgICByZXR1cm4gaXRlbS5pZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBSZXR1cm5zIHRoZSB0b3AgTiBzZWxlY3RlZCBvcHRpb25zIHRvIGRpc3BsYXkgaW4gdGhlIHRvb2x0aXAuXHJcbiAqIExpbWl0cyB0aGUgbnVtYmVyIG9mIGl0ZW1zIHNob3duIHRvIGB0b29sdGlwTWF4RGlzcGxheWVkSXRlbXNgIGZvciByZWFkYWJpbGl0eS5cclxuICpcclxuICogQHBhcmFtIHtNdWx0aVNlbGVjdH0gbXVsdGlTZWxlY3QgLSBSZWZlcmVuY2UgdG8gdGhlIFByaW1lTkcgTXVsdGlTZWxlY3QgY29tcG9uZW50LlxyXG4gKiBAcmV0dXJucyB7YW55W119IEFycmF5IG9mIHNlbGVjdGVkIGl0ZW1zLCBsaW1pdGVkIHRvIGB0b29sdGlwTWF4RGlzcGxheWVkSXRlbXNgLlxyXG4gKi9cclxuICBnZXRUb3BTZWxlY3RlZE9wdGlvbnMobXVsdGlTZWxlY3Q6IE11bHRpU2VsZWN0KTogYW55W10ge1xyXG4gICAgaWYgKCFtdWx0aVNlbGVjdCB8fCAhQXJyYXkuaXNBcnJheShtdWx0aVNlbGVjdC5zZWxlY3RlZE9wdGlvbnMpIHx8IG11bHRpU2VsZWN0LnNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPCAxKSByZXR1cm4gW107XHJcblxyXG4gICAgcmV0dXJuIG11bHRpU2VsZWN0LnNlbGVjdGVkT3B0aW9ucy5zbGljZSgwLCB0aGlzLnRvb2x0aXBNYXhEaXNwbGF5ZWRJdGVtcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZ3JvdXBlZCBkYXRhc291cmNlIGZvciB0aGUgTXVsdGlTZWxlY3QgZHJvcGRvd24uXHJcbiAqIENyZWF0ZXMgdHdvIGdyb3VwczpcclxuICogMS4gXCJTZWxlY3RlZCBpdGVtc1wiIOKAlCBpdGVtcyBjdXJyZW50bHkgc2VsZWN0ZWQgYnkgdGhlIHVzZXIuXHJcbiAqIDIuIFwiQXZhaWxhYmxlIGl0ZW1zXCIg4oCUIGl0ZW1zIG5vdCBzZWxlY3RlZCB5ZXQuXHJcbiAqXHJcbiAqIFRoZSBncm91cGVkIGRhdGFzb3VyY2UgYWxsb3dzOlxyXG4gKiAtIFNlbGVjdGVkIGl0ZW1zIHRvIGJlIHBpbm5lZCBvbiB0b3AgZm9yIGVhc3kgbWFuYWdlbWVudC5cclxuICogLSBBdmFpbGFibGUgaXRlbXMgdG8gcmVtYWluIGluIHRoZWlyIG9yaWdpbmFsIG9yZGVyLlxyXG4gKiAtIE11bHRpLWxhbmd1YWdlIHN1cHBvcnQgdXNpbmcgdGhlIGBfbG9jYWxpemVgIHNlcnZpY2UuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIFVwZGF0ZXMgYHRoaXMuZ3JvdXBwZWREYXRhU291cmNlYCB3aXRoIHRoZSBsYXRlc3QgZ3JvdXBlZCBzdHJ1Y3R1cmUuXHJcbiAqL1xyXG4gIHByaXZhdGUgY2FsY3VsYXRlR3JvdXBwZWREYXRhU291cmNlKCk6IHZvaWQge1xyXG4gICAgbGV0IGdyb3VwczogU2VsZWN0SXRlbUdyb3VwW10gPSBbXTtcclxuXHJcbiAgICBsZXQgaXNCaW5kVmFsaWRBcnJheTogYm9vbGVhbiA9IHRoaXMuYmluZCAmJiBBcnJheS5pc0FycmF5KHRoaXMuYmluZCkgJiYgdGhpcy5iaW5kLmxlbmd0aCA+IDA7XHJcbiAgICBjb25zdCBzZWxlY3RlZElkcyA9IG5ldyBTZXQoaXNCaW5kVmFsaWRBcnJheSA/IHRoaXMuYmluZCA6IFtdKTtcclxuXHJcbiAgICAvLyBTZWxlY3RlZCBpdGVtc1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHRoaXMuZGF0YXNvdXJjZS5maWx0ZXIoaXRlbSA9PiBzZWxlY3RlZElkcy5oYXMoaXRlbS5pZCkpO1xyXG4gICAgaWYgKHNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBncm91cHMucHVzaCh7XHJcbiAgICAgICAgbGFiZWw6IHRoaXMuX2xvY2FsaXplLnRyYW5zZm9ybSgnc2hhcmVkX2NvbXBvbmVudF9tdWx0aXNlbGVjdF9zZWxlY3RlZF9ncm91cCcpLFxyXG4gICAgICAgIHZhbHVlOiAnc2VsZWN0ZWQtaXRlbXMnLFxyXG4gICAgICAgIGl0ZW1zOiBzZWxlY3RlZEl0ZW1zXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEF2YWlsYWJsZSAobm90IHNlbGVjdGVkKSBpdGVtc1xyXG4gICAgY29uc3QgYXZhaWxhYmxlSXRlbXMgPSB0aGlzLmRhdGFzb3VyY2UuZmlsdGVyKGl0ZW0gPT4gIXNlbGVjdGVkSWRzLmhhcyhpdGVtLmlkKSk7XHJcbiAgICBpZiAoYXZhaWxhYmxlSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBncm91cHMucHVzaChcclxuICAgICAgICB7XHJcbiAgICAgICAgICBsYWJlbDogdGhpcy5fbG9jYWxpemUudHJhbnNmb3JtKCdzaGFyZWRfY29tcG9uZW50X211bHRpc2VsZWN0X2F2YWlsYWJsZV9ncm91cCcpLFxyXG4gICAgICAgICAgdmFsdWU6ICdhdmFpbGFibGUtaXRlbXMnLFxyXG4gICAgICAgICAgaXRlbXM6IGF2YWlsYWJsZUl0ZW1zXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5ncm91cHBlZERhdGFTb3VyY2UgPSBncm91cHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbGVtZW50J3MgY29udGVudCBvdmVyZmxvd3MgaXRzIHZpc2libGUgd2lkdGguXHJcbiAqIFVzZWQgdG8gY29uZGl0aW9uYWxseSBlbmFibGUgdG9vbHRpcCBvbmx5IHdoZW4gZWxsaXBzaXMgaXMgYXBwbGllZC5cclxuICovXHJcbiAgaXNUZXh0T3ZlcmZsb3dpbmcoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcclxuICAgIGlmICghZWxlbWVudCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuIGVsZW1lbnQuc2Nyb2xsV2lkdGggPiBlbGVtZW50LmNsaWVudFdpZHRoO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIENvbXB1dGVzIGFuZCBlbWl0cyB0aGUgbGFiZWwgY29ycmVzcG9uZGluZyB0byB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGVsZW1lbnQocykuXHJcbiAqXHJcbiAqIFRoaXMgbWV0aG9kIGluc3BlY3RzIHRoZSBjdXJyZW50IGBiaW5kYCB2YWx1ZSBhbmQgdGhlIGBkYXRhc291cmNlYCB0byBkZXRlcm1pbmVcclxuICogdGhlIGxhYmVsKHMpIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50KHMpLiBUaGUgYmVoYXZpb3IgZGlmZmVycyBkZXBlbmRpbmcgb24gd2hldGhlclxyXG4gKiB0aGUgY29tcG9uZW50IGlzIGluIHNpbmdsZSBvciBtdWx0aXBsZSBzZWxlY3Rpb24gbW9kZTpcclxuICpcclxuICogLSAqKk11bHRpcGxlIHNlbGVjdGlvbiAoYG11bHRpcGxlID0gdHJ1ZWApKipcclxuICogICAtIElmIGV4YWN0bHkgb25lIGVsZW1lbnQgaXMgc2VsZWN0ZWQsIGl0cyBsYWJlbCBpcyBlbWl0dGVkLlxyXG4gKiAgIC0gSWYgbXVsdGlwbGUgZWxlbWVudHMgYXJlIHNlbGVjdGVkLCB0aGVpciBsYWJlbHMgYXJlIGZvcm1hdHRlZCBhcyBhIHN0cmluZ1xyXG4gKiAgICAgYXJyYXkgcmVwcmVzZW50YXRpb246IGBbXCJMYWJlbDFcIiwgXCJMYWJlbDJcIiwgLi4uXWAuXHJcbiAqXHJcbiAqIC0gKipTaW5nbGUgc2VsZWN0aW9uIChgbXVsdGlwbGUgPSBmYWxzZWApKipcclxuICogICAtIFRoZSBsYWJlbCBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudCBpcyBlbWl0dGVkIGlmIGl0IGV4aXN0cyBpbiB0aGUgZGF0YXNvdXJjZS5cclxuICpcclxuICogSWYgYSB2YWxpZCBsYWJlbCBpcyByZXNvbHZlZCwgdGhlIG1ldGhvZCBlbWl0cyB0aGUgcmVzdWx0IHRocm91Z2hcclxuICogdGhlIGBzZWxlY3RlZExhYmVsQ2hhbmdlYCBldmVudCBlbWl0dGVyLlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiAtIGBiaW5kYCByZXByZXNlbnRzIHRoZSBzZWxlY3RlZCBpZCAoc2luZ2xlIG1vZGUpIG9yIGFuIGFycmF5IG9mIGlkcyAobXVsdGlwbGUgbW9kZSkuXHJcbiAqIC0gYGRhdGFzb3VyY2VgIGlzIGV4cGVjdGVkIHRvIGNvbnRhaW4gZWxlbWVudHMgd2l0aCBhdCBsZWFzdCBgaWRgIGFuZCBgbGFiZWxgIHByb3BlcnRpZXMuXHJcbiAqXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG4gIHByaXZhdGUgX2hhbmRsZVNlbGVjdGVkRWxlbWVudHNMYWJlbENoYW5nZSgpOiB2b2lkIHtcclxuICAgIGxldCBzZWxlY3Rpb25MYWJlbDogc3RyaW5nID0gJyc7XHJcblxyXG4gICAgaWYgKHRoaXMubXVsdGlwbGUgJiYgQXJyYXkuaXNBcnJheSh0aGlzLmJpbmQpKSB7XHJcbiAgICAgIGxldCBzZWxlY3RlZEVsZW1lbnRzID0gdGhpcy5kYXRhc291cmNlLmZpbHRlcihlID0+IHRoaXMuYmluZC5pbmNsdWRlcyhlLmlkKSk7XHJcblxyXG4gICAgICBpZiAoc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgIHNlbGVjdGlvbkxhYmVsID0gc2VsZWN0ZWRFbGVtZW50c1swXS5sYWJlbDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICBzZWxlY3Rpb25MYWJlbCA9IGBbJHtzZWxlY3RlZEVsZW1lbnRzLm1hcChlID0+IGBcIiR7ZS5sYWJlbH1cImApLmpvaW4oJywgJyl9XWA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgc2VsZWN0ZWRFbGVtZW50OiBhbnkgPSB0aGlzLmRhdGFzb3VyY2UuZmluZChlID0+IGUuaWQgPT0gdGhpcy5iaW5kKTtcclxuXHJcbiAgICAgIGlmIChzZWxlY3RlZEVsZW1lbnQpIHtcclxuICAgICAgICBzZWxlY3Rpb25MYWJlbCA9IHNlbGVjdGVkRWxlbWVudC5sYWJlbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChzZWxlY3Rpb25MYWJlbCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTGFiZWxDaGFuZ2UuZW1pdChzZWxlY3Rpb25MYWJlbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkaXN0aW5jdCh2YWx1ZXM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIFsuLi5uZXcgU2V0KHZhbHVlcyldO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVFeHRlcm5hbFNlbGVjdGlvbihkcm9wZG93bkV4dGVybmFsU2VsZWN0aW9uT3V0cHV0OiBEcm9wZG93bkV4dGVybmFsU2VsZWN0aW9uT3V0cHV0KTogdm9pZCB7XHJcbiAgICBpZiAoIWRyb3Bkb3duRXh0ZXJuYWxTZWxlY3Rpb25PdXRwdXQpIHJldHVybjtcclxuXHJcbiAgICBsZXQgc2VsZWN0aW9uID0gZHJvcGRvd25FeHRlcm5hbFNlbGVjdGlvbk91dHB1dC5pdGVtcztcclxuICAgIGxldCBzZWxlY3Rpb25LZXkgPSBkcm9wZG93bkV4dGVybmFsU2VsZWN0aW9uT3V0cHV0Lml0ZW1LZXlQcm9wZXJ0eU5hbWU7XHJcblxyXG4gICAgLy8gSGFuZGxlIG11bHRpcGxlIG1vZGUgc2VsZWN0aW9uXHJcbiAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiBBcnJheS5pc0FycmF5KHNlbGVjdGlvbikgJiYgc2VsZWN0aW9uLmxlbmd0aCA+IDApIHtcclxuXHJcbiAgICAgIGxldCBuZXdJdGVtczogYW55W10gPSBzZWxlY3Rpb25cclxuICAgICAgICAuZmlsdGVyKGkgPT4gIXRoaXMuZGF0YXNvdXJjZS5zb21lKHMgPT4gcy5pZCA9PSBpW3NlbGVjdGlvbktleV0pKTtcclxuXHJcbiAgICAgIGlmIChuZXdJdGVtcyAmJiBuZXdJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgLy8gZm9ybWF0IHNlbGVjdGVkIGl0ZW1zXHJcbiAgICAgICAgbGV0IGxhYmVsUHJvcE5hbWUgPSB0aGlzLmdldEJlc3RMYWJlbFByb3BlcnR5TmFtZShzZWxlY3Rpb25bMF0pO1xyXG4gICAgICAgIGxldCB0ZW1wQXJyYXk6IGFueVtdID0gbmV3SXRlbXMubWFwKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGlkOiBlbGVtZW50W3NlbGVjdGlvbktleV0sXHJcbiAgICAgICAgICAgIGxhYmVsOiAobGFiZWxQcm9wTmFtZSBpbiBlbGVtZW50KSA/IGVsZW1lbnRbbGFiZWxQcm9wTmFtZV0gOiB0aGlzLmxhYmVsT2ZFbGVtZW50Tm90Rm91bmRUZXh0XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIGFwZW5kIHNlbGVjdGVkIGl0ZW1zIHRvIERhdGFzb3VyY2VcclxuICAgICAgICB0aGlzLl9kYXRhc291cmNlID0gdGhpcy5fZGlzdGluY3RCeUlkKFsuLi50aGlzLmRhdGFzb3VyY2UsIC4uLnRlbXBBcnJheV0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zb3J0KSB7XHJcbiAgICAgICAgICB0aGlzLl9kYXRhc291cmNlLnNvcnQodGhpcy5fY29tcGFyZUZ1bmN0aW9uKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IG5ld1NlbGVjdGVkSXRlbXNJZHM6IGFueVtdID0gc2VsZWN0aW9uLm1hcChpID0+IGlbc2VsZWN0aW9uS2V5XSk7XHJcbiAgICAgIGxldCBzZWxlY3RlZEl0ZW1zSWRzOiBhbnlbXSA9IHRoaXMuZGlzdGluY3QoWy4uLih0aGlzLmJpbmQgPyB0aGlzLmJpbmQgOiBbXSksIC4uLm5ld1NlbGVjdGVkSXRlbXNJZHNdKTtcclxuICAgICAgdGhpcy5vbk11bHRpU2VsZWN0TW9kZWxDaGFuZ2Uoc2VsZWN0ZWRJdGVtc0lkcyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy8gSGFuZGxlIHNpZ25sZSBtb2RlIHNlbGVjdGlvblxyXG4gICAgICB0aGlzLmJpbmRWYWx1ZUNoYW5nZWQoc2VsZWN0aW9uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgbGFiZWxQcm9wZXJ0eU5hbWVSb290U2VnbWVudDogc3RyaW5nID0gJ2xpYmVsbGUnO1xyXG4gIC8qKlxyXG4gKiBSZXRyaWV2ZXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBwcm9wZXJ0eSAoYWxwaGFiZXRpY2FsbHkpIFxyXG4gKiB3aG9zZSBuYW1lIGNvbnRhaW5zICdsYWJlbCcgKGNhc2UtaW5zZW5zaXRpdmUpIGZyb20gYSBnaXZlbiBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSBvYmogLSBUaGUgc291cmNlIG9iamVjdCAoY2FuIGJlIG9mIHR5cGUgYW55KVxyXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUgb2YgdGhlIGZpcnN0IG1hdGNoaW5nIHByb3BlcnR5LCBvciB1bmRlZmluZWQgaWYgbm9uZSBmb3VuZFxyXG4gKi9cclxuICBwcml2YXRlIGdldEZpcnN0TGFiZWxQcm9wZXJ0eU5hbWUob2JqOiBhbnkpOiBhbnkge1xyXG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKVxyXG4gICAgICAuZmlsdGVyKGtleSA9PiBrZXkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmxhYmVsUHJvcGVydHlOYW1lUm9vdFNlZ21lbnQpKVxyXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS5sb2NhbGVDb21wYXJlKGIpKVxyXG4gICAgICAubWFwKGtleSA9PiBvYmpba2V5XSlbMF07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEJlc3RMYWJlbFByb3BlcnR5TmFtZShvYmplY3Q6IGFueSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5sYWJlbEZpZWxkO1xyXG5cclxuICAgIC8vIFRPRE8sIEBIYXNzZW4sIMOgIHJldm9pciBwbHVzIHRhcmQuXHJcbiAgICBsZXQgYmVzdExhYmVsUHJvcGVydHlOYW1lOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgICBpZiAodGhpcy5sYWJlbEZpZWxkIGluIG9iamVjdCkgYmVzdExhYmVsUHJvcGVydHlOYW1lID0gdGhpcy5sYWJlbEZpZWxkO1xyXG4gICAgZWxzZSBpZiAodGhpcy5sYWJlbFByb3BlcnR5TmFtZVJvb3RTZWdtZW50IGluIG9iamVjdCkgYmVzdExhYmVsUHJvcGVydHlOYW1lID0gdGhpcy5sYWJlbFByb3BlcnR5TmFtZVJvb3RTZWdtZW50O1xyXG4gICAgZWxzZSBiZXN0TGFiZWxQcm9wZXJ0eU5hbWUgPSB0aGlzLmdldEZpcnN0TGFiZWxQcm9wZXJ0eU5hbWUob2JqZWN0KTtcclxuXHJcbiAgICBjb25zb2xlLmxvZyhgW0xhYmVsRmllbGQgOiAke3RoaXMubGFiZWxGaWVsZH1dIFZTIFtCZXN0TGFiZWxQcm9wZXJ0eU5hbWUgOiAke2Jlc3RMYWJlbFByb3BlcnR5TmFtZX1dYCk7XHJcbiAgICByZXR1cm4gYmVzdExhYmVsUHJvcGVydHlOYW1lO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxufSIsIjxkaXYgKm5nSWY9XCIhbXVsdGlwbGU7IGVsc2UgbXVsdGlTZWxlY3RcIiBjbGFzcz1cImZsZXhcIj5cclxuICA8cC1kcm9wZG93biBcclxuICAgIFtvcHRpb25zXT1cImRhdGFzb3VyY2VcIlxyXG4gICAgW25nTW9kZWxdPVwiYmluZFwiXHJcbiAgICBvcHRpb25MYWJlbD1cImxhYmVsXCJcclxuICAgIG9wdGlvblZhbHVlPVwiaWRcIlxyXG4gICAgW2xvYWRpbmddPVwiIWRhdGFMb2FkZWRcIlxyXG4gICAgZmlsdGVyQnk9XCJsYWJlbFwiIFxyXG4gICAgW2ZpbHRlcl09XCJ0cnVlXCIgXHJcbiAgICBbYXV0b0Rpc3BsYXlGaXJzdF09XCJmYWxzZVwiXHJcbiAgICBbcmVxdWlyZWRdPVwiaXNSZXF1aXJlZFwiXHJcbiAgICBbc2hvd0NsZWFyXT1cInNob3dDbGVhclwiIFxyXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgIChvbkNoYW5nZSk9XCJoYW5kbGVDaGFuZ2VFdmVudCgkZXZlbnQpXCJcclxuICAgIChvblNob3cpPVwib25PcGVuKClcIiAob25GaWx0ZXIpPVwic2VhcmNoVmFsdWVDaGFuZ2VkKCRldmVudClcIiAob25DbGljayk9XCJvblNlYXJjaENvbWJvQ2xpY2soJGV2ZW50KVwiXHJcbiAgICBbc3R5bGVdPVwieydtYXgtd2lkdGgnOiBtYXhXaWR0aCwgJ3dpZHRoJzonMTAwJScsICdoZWlnaHQnOiAnMS43cmVtJ31cIlxyXG4gICAgW25nQ2xhc3NdPVwiaXNBciA/ICdwLWRyb3Bkb3duLWNsZWFyLWljb25BUic6ICdwLWRyb3Bkb3duLWNsZWFyLWljb25GUidcIlxyXG4gICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlSG9sZGVyXCIgXHJcbiAgICBjbGFzcz1cInt7bXlTdHlsZUNsYXNzfX1cIiBcclxuICAgIHN0eWxlQ2xhc3M9XCJ7e215U3R5bGVDbGFzc319IGJvcmRlci1yYWRpdXMtNyB7e3ZhbGlkYXRpb25TdGF0dXNDc3NDbGFzc319XCIgXHJcbiAgICBhcHBlbmRUbz1cImJvZHlcIj5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1oZWFkZXIgZmxleCBnYXAtMSBwdC0yIHB4LTJcIj5cclxuICAgICAgICA8VHNpLUJ1dHRvbiAqbmdJZj1cInNob3dTZWFyY2hCdXR0b25cIiB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLXNlYXJjaFwiIHRvb2x0aXBUZXh0PVwic2hhcmVkVWktc2VhcmNoQ29tYm8tYWN0aW9uLXNlYXJjaFwiXHJcbiAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbi5Cb3R0b21cIiBzdHlsZUNsYXNzPVwicC1idXR0b24tcHJpbWFyeSBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCIgKGNsaWNrKT1cIm9wZW5TZWFyY2hEaWFsb2coKVwiPlxyXG4gICAgICAgIDwvVHNpLUJ1dHRvbj5cclxuXHJcbiAgICAgICAgPFRzaS1CdXR0b24gKm5nSWY9XCJzaG93QWR2YW5jZWRTZWFyY2hCdXR0b25cIiB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLXNvcnQtYW1vdW50LWRvd25cIiB0b29sdGlwVGV4dD1cInNoYXJlZFVpLXNlYXJjaENvbWJvLWFjdGlvbi1hZHZhbmNlZFNlYXJjaFwiXHJcbiAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbi5Cb3R0b21cIiBzdHlsZUNsYXNzPVwicC1idXR0b24tc2Vjb25kYXJ5IGhvdmVyOnNoYWRvdy02IGgtMnJlbSBwLWJ1dHRvbi1pY29uLW9ubHlcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm9wZW5BZHZhbmNlZFNlYXJjaENvbXBvbmVudCgpXCI+XHJcbiAgICAgICAgPC9Uc2ktQnV0dG9uPlxyXG5cclxuICAgICAgICA8VHNpLUJ1dHRvbiAqbmdJZj1cInNob3dBZGRCdXR0b25cIiB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLXBsdXNcIiB0b29sdGlwVGV4dD1cInNoYXJlZFVpLXNlYXJjaENvbWJvLWFjdGlvbi1hZGRcIlxyXG4gICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb24uQm90dG9tXCIgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXN1Y2Nlc3MgaG92ZXI6c2hhZG93LTYgaC0ycmVtIHAtYnV0dG9uLWljb24tb25seVwiIChjbGljayk9XCJhZGRFbGVtZW50KClcIj5cclxuICAgICAgICA8L1RzaS1CdXR0b24+XHJcblxyXG4gICAgICAgIDxUc2ktQnV0dG9uICpuZ0lmPVwic2hvd1VwZGF0ZUJ1dHRvblwiIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktcGVuY2lsXCIgdG9vbHRpcFRleHQ9XCJzaGFyZWRVaS1zZWFyY2hDb21iby1hY3Rpb24tZWRpdFwiXHJcbiAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbi5Cb3R0b21cIiBzdHlsZUNsYXNzPVwicC1idXR0b24tcHJpbWFyeSBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCIgKGNsaWNrKT1cInVwZGF0ZUVsZW1lbnQoKVwiPlxyXG4gICAgICAgIDwvVHNpLUJ1dHRvbj5cclxuXHJcbiAgICAgICAgPFRzaS1CdXR0b24gKm5nSWY9XCJzaG93Q29uc3VsdEJ1dHRvblwiIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktZXllXCIgdG9vbHRpcFRleHQ9XCJzaGFyZWRVaS1zZWFyY2hDb21iby1hY3Rpb24tY29uc3VsdFwiXHJcbiAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbi5Cb3R0b21cIiBzdHlsZUNsYXNzPVwicC1idXR0b24tcHJpbWFyeSBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCIgKGNsaWNrKT1cImNvbnN1bHRFbGVtZW50KClcIj5cclxuICAgICAgICA8L1RzaS1CdXR0b24+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICBcclxuXHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHlcIj5cclxuICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHB5LTMgZ2FwLTJcIj5cclxuICAgICAgICBcclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNBcGlFcnJvcjsgZWxzZSBhcGlFcnJvclwiPlxyXG5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiaXNEYXRhc291cmNlRW1wdHkgJiYgIWlzRmlsdGVyaW5nXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHRleHQtZ3JheS01MDBcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWluZm8tY2lyY2xlXCI+PC9pPlxyXG4gICAgICAgICAgICAgIDxzcGFuPnt7ICdzZWFyY2hfY29tYm9fbm9fZWxlbWVudCcgfCBsb2NhbGl6ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJpc05vUmVzdWx0QWZ0ZXJGaWx0ZXJcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1ncmF5LTUwMFwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktaW5mby1jaXJjbGVcIj48L2k+XHJcbiAgICAgICAgICAgICAgPHNwYW4+e3sgJ3NlYXJjaF9jb21ib19ub19yZXN1bHQnIHwgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYXBpRXJyb3I+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktZXhjbGFtYXRpb24tdHJpYW5nbGUgdGV4dC1vcmFuZ2UtNTAwXCI+PC9pPlxyXG4gICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICB7eyAnc2VhcmNoX2NvbWJvX2xvYWRfZXJyb3InIHwgbG9jYWxpemUgfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJzZWxlY3RlZEl0ZW1cIiBsZXQtc2VsZWN0ZWRPcHRpb24+XHJcbiAgICAgIDxkaXYgcFRvb2x0aXA9XCJ7e3NlbGVjdGVkT3B0aW9uLmxhYmVsfX1cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIiB0b29sdGlwU3R5bGVDbGFzcz1cImN1c3RvbS10b29sdGlwXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzU3RhdHVzQ29tYm8gJiYgc3RhdHVzTWV0YWRhdGE7IGVsc2Ugbm9ybWFsU2VsZWN0ZWRcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZE9wdGlvbiAmJiBnZXRTdGF0dXNPcHRpb24oc2VsZWN0ZWRPcHRpb24ubGFiZWwpIGFzIG9wdFwiPlxyXG4gICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9udC1ib2xkIHN0YXR1cy1iYWRnZVwiXHJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwibGlnaHRlbkNvbG9yKG9wdC5jb2xvckhleClcIlxyXG4gICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJnZXRSZWFkYWJsZVRleHRDb2xvcihvcHQuY29sb3JIZXgpXCI+XHJcbiAgICAgICAgICAgICAge3sgc2VsZWN0ZWRPcHRpb24ubGFiZWwgfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9ybWFsU2VsZWN0ZWQ+XHJcbiAgICAgICAgICA8c3Bhbj57eyBzZWxlY3RlZE9wdGlvbi5sYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIGxldC10YXJnZXQgcFRlbXBsYXRlPVwiaXRlbVwiPlxyXG4gICAgICA8ZGl2IHBUb29sdGlwPVwie3t0YXJnZXQubGFiZWx9fVwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiIHRvb2x0aXBTdHlsZUNsYXNzPVwiY3VzdG9tLXRvb2x0aXBcIj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzU3RhdHVzQ29tYm8gJiYgc3RhdHVzTWV0YWRhdGE7IGVsc2Ugbm9ybWFsT3B0aW9uXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0U3RhdHVzT3B0aW9uKHRhcmdldC5sYWJlbCkgYXMgb3B0XCI+XHJcbiAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvbnQtYm9sZCBzdGF0dXMtYmFkZ2VcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwibGlnaHRlbkNvbG9yKG9wdC5jb2xvckhleClcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImdldFJlYWRhYmxlVGV4dENvbG9yKG9wdC5jb2xvckhleClcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLnBhZGRpbmctdG9wXT1cIicwLjFyZW0nXCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5wYWRkaW5nLWJvdHRvbV09XCInMC4xcmVtJ1wiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7e3RhcmdldC5sYWJlbH19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI25vcm1hbE9wdGlvbj5cclxuICAgICAgICAgIDxzcGFuPnt7dGFyZ2V0LmxhYmVsfX08L3NwYW4+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8L3AtZHJvcGRvd24+XHJcblxyXG4gIDwhLS0gQnViYmxlIEluZm8gLS0+XHJcbiAgPFRzaS1CdWJibGUtSW5mbyBbaW5mb1RleHRdPVwiaW5mb1RleHRcIj48L1RzaS1CdWJibGUtSW5mbz5cclxuXHJcbjwvZGl2PlxyXG5cclxuPG5nLXRlbXBsYXRlICNtdWx0aVNlbGVjdD5cclxuICA8cC1tdWx0aVNlbGVjdFxyXG4gICAgI211bHRpU2VsZWN0RWxlbWVudFxyXG4gICAgW29wdGlvbnNdPVwiZ3JvdXBwZWREYXRhU291cmNlXCJcclxuICAgIFtncm91cF09XCJ0cnVlXCIgXHJcbiAgICBbbmdNb2RlbF09XCJiaW5kXCJcclxuICAgIFtvcHRpb25MYWJlbF09XCInbGFiZWwnXCJcclxuICAgIFtvcHRpb25WYWx1ZV09XCInaWQnXCJcclxuICAgIFtsb2FkaW5nXT1cIiFkYXRhTG9hZGVkXCJcclxuICAgIFtmaWx0ZXJCeV09XCInbGFiZWwnXCJcclxuICAgIFtmaWx0ZXJdPVwidHJ1ZVwiXHJcbiAgICBbcmVxdWlyZWRdPVwiaXNSZXF1aXJlZFwiXHJcbiAgICBbc2hvd0NsZWFyXT1cInNob3dDbGVhclwiXHJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgW3NlbGVjdGVkSXRlbXNMYWJlbF09XCInc2hhcmVkX2NvbXBvbmVudF9tdWx0aXNlbGVjdF9zZWxlY3RlZF9pdGVtc19jb3VudCcgfCBsb2NhbGl6ZVwiXHJcbiAgICBbbWF4U2VsZWN0ZWRMYWJlbHNdPVwibWF4U2VsZWN0ZWRMYWJlbHNcIlxyXG4gICAgW3Nob3dUb2dnbGVBbGxdPVwiZmFsc2VcIlxyXG4gICAgW3N0eWxlXT1cInsnbWF4LXdpZHRoJzogbWF4V2lkdGgsICd3aWR0aCc6JzEwMCUnLCAnaGVpZ2h0JzogJzEuN3JlbSd9XCJcclxuICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZUhvbGRlclwiXHJcbiAgICBbbmdDbGFzc109XCJpc0FyID8gJ3AtZHJvcGRvd24tY2xlYXItaWNvbkFSJzogJ3AtZHJvcGRvd24tY2xlYXItaWNvbkZSJ1wiXHJcbiAgICBjbGFzcz1cInt7bXlTdHlsZUNsYXNzfX1cIiBcclxuICAgIHN0eWxlQ2xhc3M9XCJ7e215U3R5bGVDbGFzc319IGJvcmRlci1yYWRpdXMtNyB7e3ZhbGlkYXRpb25TdGF0dXNDc3NDbGFzc319XCJcclxuICAgIHBhbmVsU3R5bGVDbGFzcz1cInRzaS1tdWx0aXNlbGVjdC1wYW5lbFwiXHJcbiAgICBhcHBlbmRUbz1cImJvZHlcIlxyXG4gICAgKG5nTW9kZWxDaGFuZ2UpPVwib25NdWx0aVNlbGVjdE1vZGVsQ2hhbmdlKCRldmVudClcIlxyXG4gICAgKG9uUGFuZWxTaG93KT1cIm9uT3BlbigpXCJcclxuICAgIChvbkZpbHRlcik9XCJzZWFyY2hWYWx1ZUNoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICAob25DbGljayk9XCJvblNlYXJjaENvbWJvQ2xpY2soJGV2ZW50KVwiXHJcbiAgICBbcFRvb2x0aXBdPVwibXVsdGlTZWxlY3RFbGVtZW50Py5zZWxlY3RlZE9wdGlvbnM/Lmxlbmd0aCA/IG11bHRpU2VsZWN0VG9vbHRpcENvbnRlbnQgOiB1bmRlZmluZWRcIiB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIj5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaXRlbVwiIGxldC1vcHRpb24+XHJcbiAgICAgIDxkaXYgI2xhYmVsUmVmIGNsYXNzPVwidHNpLW11bHRpc2VsZWN0LW9wdGlvbi1sYWJlbFwiIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiIHRvb2x0aXBBcHBlbmRUbz1cImJvZHlcIiBbcFRvb2x0aXBdPVwiaXNUZXh0T3ZlcmZsb3dpbmcobGFiZWxSZWYpID8gb3B0aW9uLmxhYmVsIDogbnVsbFwiPlxyXG4gICAgICAgIHt7IG9wdGlvbi5sYWJlbCB9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1oZWFkZXIgZmxleCBnYXAtMSBwLTFcIj5cclxuICAgICAgICA8VHNpLUJ1dHRvbiAqbmdJZj1cInNob3dTZWFyY2hCdXR0b25cIiB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLXNlYXJjaFwiIHRvb2x0aXBUZXh0PVwic2hhcmVkVWktbXVsdGlzZWxlY3QtYWN0aW9uLXNlYXJjaFwiXHJcbiAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbi5Cb3R0b21cIiBzdHlsZUNsYXNzPVwicC1idXR0b24tcHJpbWFyeSBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCJcclxuICAgICAgICAgIChjbGljayk9XCJvcGVuU2VhcmNoRGlhbG9nKClcIj5cclxuICAgICAgICA8L1RzaS1CdXR0b24+XHJcblxyXG4gICAgICAgIDxUc2ktQnV0dG9uICpuZ0lmPVwic2hvd0FkdmFuY2VkU2VhcmNoQnV0dG9uXCIgdHlwZT1cImJ1dHRvblwiIGljb249XCJwaSBwaS1zb3J0LWFtb3VudC1kb3duXCIgdG9vbHRpcFRleHQ9XCJzaGFyZWRVaS1tdWx0aXNlbGVjdC1hY3Rpb24tYWR2YW5jZWRTZWFyY2hcIlxyXG4gICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uLkJvdHRvbVwiIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1zZWNvbmRhcnkgaG92ZXI6c2hhZG93LTYgaC0ycmVtIHAtYnV0dG9uLWljb24tb25seVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9wZW5BZHZhbmNlZFNlYXJjaENvbXBvbmVudCgpXCI+XHJcbiAgICAgICAgPC9Uc2ktQnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9wLW11bHRpU2VsZWN0PlxyXG5cclxuICA8bmctdGVtcGxhdGUgI211bHRpU2VsZWN0VG9vbHRpcENvbnRlbnQ+XHJcbiAgICA8ZGl2IGNsYXNzPVwicC0yXCI+XHJcbiAgICAgIDwhLS0gSWYgdGhlcmUgYXJlIHNlbGVjdGVkIGl0ZW1zIC0tPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibXVsdGlTZWxlY3RFbGVtZW50Py5zZWxlY3RlZE9wdGlvbnM/Lmxlbmd0aDsgZWxzZSBub0l0ZW1zXCI+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXNlbWlib2xkIG1iLTFcIj5cclxuICAgICAgICAgIHt7ICdzaGFyZWRfY29tcG9uZW50X211bHRpc2VsZWN0X3NlbGVjdGVkX2l0ZW1zX3RpdGxlJyB8IGxvY2FsaXplIH19XHJcbiAgICAgICAgICAoe3sgbXVsdGlTZWxlY3RFbGVtZW50LnNlbGVjdGVkT3B0aW9ucy5sZW5ndGggfX0pXHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDx1bCBjbGFzcz1cIm0tMCBwbC0zXCI+XHJcbiAgICAgICAgICA8IS0tIFNob3cgb25seSBmaXJzdCAxMCBpdGVtcyAtLT5cclxuICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGdldFRvcFNlbGVjdGVkT3B0aW9ucyhtdWx0aVNlbGVjdEVsZW1lbnQpXCI+XHJcbiAgICAgICAgICAgIHt7IG9wdGlvbi5sYWJlbCB9fVxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICA8L3VsPlxyXG5cclxuICAgICAgICA8IS0tIFNob3cgbWVzc2FnZSBpZiBtb3JlIHRoYW4gMTAgLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIm11bHRpU2VsZWN0RWxlbWVudC5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoID4gMTBcIiBjbGFzcz1cInRleHQtc20gbXQtMSB0ZXh0LWdyYXktNTAwXCI+XHJcbiAgICAgICAgICB7eyBtdWx0aVNlbGVjdEVsZW1lbnQuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCAtIDEwIH19XHJcbiAgICAgICAgICB7eyAnc2hhcmVkX2NvbXBvbmVudF9tdWx0aXNlbGVjdF9zZWxlY3RlZF9pdGVtc19tb3JlX21lc3NhZ2UnIHwgbG9jYWxpemUgfX1cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPCEtLSBJZiBubyBpdGVtcyBzZWxlY3RlZCAtLT5cclxuICAgICAgPG5nLXRlbXBsYXRlICNub0l0ZW1zPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zbSB0ZXh0LTUwMFwiPlxyXG4gICAgICAgICAge3sgJ3NoYXJlZF9jb21wb25lbnRfbXVsdGlzZWxlY3Rfc2VsZWN0ZWRfaXRlbXNfZW1wdHknIHwgbG9jYWxpemUgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
@@ -5853,6 +5853,19 @@ var BindMode;
5853
5853
  BindMode["Default"] = "key";
5854
5854
  })(BindMode || (BindMode = {}));
5855
5855
 
5856
+ class TsiFormModalFooterComponent {
5857
+ constructor() {
5858
+ }
5859
+ ngOnInit() {
5860
+ }
5861
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiFormModalFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5862
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiFormModalFooterComponent, selector: "tsi-form-modal-footer", ngImport: i0, template: "", styles: [""] }); }
5863
+ }
5864
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiFormModalFooterComponent, decorators: [{
5865
+ type: Component,
5866
+ args: [{ selector: 'tsi-form-modal-footer', template: "" }]
5867
+ }], ctorParameters: () => [] });
5868
+
5856
5869
  class TsiBubbleInfoComponent {
5857
5870
  constructor() {
5858
5871
  this.infoText = '';
@@ -6191,6 +6204,9 @@ class TsiSearchComboComponent extends TsiInputBase {
6191
6204
  width: ModalSizeEnum.Medium.width,
6192
6205
  height: ModalSizeEnum.Medium.height,
6193
6206
  maximizable: true,
6207
+ templates: {
6208
+ footer: TsiFormModalFooterComponent,
6209
+ }
6194
6210
  };
6195
6211
  if (!entity || !entity.formName) {
6196
6212
  this._messageService?.error("search_combo_component_form_name_nf");
@@ -6242,6 +6258,9 @@ class TsiSearchComboComponent extends TsiInputBase {
6242
6258
  width: ModalSizeEnum.Medium.width,
6243
6259
  height: ModalSizeEnum.Medium.height,
6244
6260
  maximizable: true,
6261
+ templates: {
6262
+ footer: TsiFormModalFooterComponent,
6263
+ }
6245
6264
  };
6246
6265
  this._dialogReference = this._tsiModalService?.open(TypeRegistryHelper.getType(entity.formName), conf);
6247
6266
  this._dialogReference?.onClose.subscribe((updatedElement) => {
@@ -6285,6 +6304,9 @@ class TsiSearchComboComponent extends TsiInputBase {
6285
6304
  width: ModalSizeEnum.Medium.width,
6286
6305
  height: ModalSizeEnum.Medium.height,
6287
6306
  maximizable: true,
6307
+ templates: {
6308
+ footer: TsiFormModalFooterComponent,
6309
+ }
6288
6310
  };
6289
6311
  this._dialogReference = this._tsiModalService?.open(TypeRegistryHelper.getType(entity.formName), conf);
6290
6312
  this._dialogReference?.onClose.subscribe((_) => {
@@ -13356,19 +13378,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
13356
13378
  type: Output
13357
13379
  }] } });
13358
13380
 
13359
- class TsiFormModalFooterComponent {
13360
- constructor() {
13361
- }
13362
- ngOnInit() {
13363
- }
13364
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiFormModalFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
13365
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiFormModalFooterComponent, selector: "tsi-form-modal-footer", ngImport: i0, template: "", styles: [""] }); }
13366
- }
13367
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiFormModalFooterComponent, decorators: [{
13368
- type: Component,
13369
- args: [{ selector: 'tsi-form-modal-footer', template: "" }]
13370
- }], ctorParameters: () => [] });
13371
-
13372
13381
  class DynamicFormService {
13373
13382
  constructor() {
13374
13383
  this.colonnesPersonnaliseeData = [];