tnx-shared 5.3.311 → 5.3.313

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.
@@ -368,7 +368,8 @@ export class DataFormBase extends ComponentBaseWithButton {
368
368
  || !(control instanceof AutoCompletePickerControlSchema))
369
369
  continue;
370
370
  this.logSetting.arrValueAfterUpdate.push(new LogColumn({
371
- column: control.label,
371
+ field: control.field,
372
+ label: control.label,
372
373
  valueBefore: control._component.dataSource.map(p => p.label).join(', '),
373
374
  visible: false,
374
375
  valueAfter: ''
@@ -503,7 +504,7 @@ export class DataFormBase extends ComponentBaseWithButton {
503
504
  }
504
505
  addSinglePropertyLog(control, oldValue, newValue) {
505
506
  if (control instanceof AutoCompletePickerControlSchema) {
506
- const logColumn = this.logSetting.arrValueAfterUpdate.find(p => p.column == control.label);
507
+ const logColumn = this.logSetting.arrValueAfterUpdate.find(p => p.field == control.field);
507
508
  let dataSource = control._component.selectedValueObject;
508
509
  if (!Array.isArray(dataSource))
509
510
  dataSource = [dataSource];
@@ -513,7 +514,8 @@ export class DataFormBase extends ComponentBaseWithButton {
513
514
  else {
514
515
  const dataSource = control._component.dataSourceInternal;
515
516
  this.logSetting.arrValueAfterUpdate.push(new LogColumn({
516
- column: control.label,
517
+ field: control.field,
518
+ label: control.label,
517
519
  valueBefore: this.getSingleLabel(control, dataSource, oldValue),
518
520
  valueAfter: this.getSingleLabel(control, dataSource, newValue)
519
521
  }));
@@ -521,14 +523,15 @@ export class DataFormBase extends ComponentBaseWithButton {
521
523
  }
522
524
  addMultiplePropertyLog(control, oldValue, newValue) {
523
525
  if (control instanceof AutoCompletePickerControlSchema) {
524
- const logColumn = this.logSetting.arrValueAfterUpdate.find(p => p.column == control.label);
526
+ const logColumn = this.logSetting.arrValueAfterUpdate.find(p => p.field == control.field);
525
527
  logColumn.visible = true;
526
528
  logColumn.valueAfter = this.getMultipleLabel(control, control._component.selectedValueObject, newValue);
527
529
  }
528
530
  else {
529
531
  const dataSource = control._component.dataSourceInternal;
530
532
  this.logSetting.arrValueAfterUpdate.push(new LogColumn({
531
- column: control.label,
533
+ field: control.field,
534
+ label: control.label,
532
535
  valueBefore: this.getMultipleLabel(control, dataSource, oldValue),
533
536
  valueAfter: this.getMultipleLabel(control, dataSource, newValue)
534
537
  }));
@@ -577,7 +580,8 @@ export class DataFormBase extends ComponentBaseWithButton {
577
580
  if (oldValue != newValue) {
578
581
  const [valueBefore, valueAfter] = this.getLogValueDefault(control, oldValue, newValue);
579
582
  this.logSetting.arrValueAfterUpdate.push(new LogColumn({
580
- column: control.label,
583
+ field: control.field,
584
+ label: control.label,
581
585
  valueBefore: valueBefore,
582
586
  valueAfter: valueAfter,
583
587
  isHtml: (control instanceof EditorControlSchema || control instanceof TextAreaControlSchema)
@@ -904,4 +908,4 @@ DataFormBase.propDecorators = {
904
908
  onFormReady: [{ type: Output }],
905
909
  onDataBinded: [{ type: Output }]
906
910
  };
907
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1mb3JtLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvY2xhc3Nlcy9iYXNlL2RhdGEtZm9ybS1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUgsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osUUFBUSxFQUNSLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFELE9BQU8sRUFBbUIsaUJBQWlCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUN6RyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLDRCQUE0QixFQUFFLDJCQUEyQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUs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QVEsR0FBRyxVQUFVLENBQUM7SUFDbEUsQ0FBQztJQUVELGlCQUFpQixDQUFDLFdBQVcsRUFBRSxRQUFRO1FBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUM7SUFDOUQsQ0FBQztJQUVELGFBQWE7UUFDVCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxhQUFhO1FBQ1QsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQztJQUNqRCxDQUFDO0lBRUQsV0FBVztRQUNQLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUM7SUFDbEQsQ0FBQztJQUVELFdBQVc7UUFDUCxPQUFPLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDO0lBQ2xELENBQUM7OztZQTk2QkosU0FBUzs7O1lBeEROLFFBQVE7Ozt1QkEyRFAsU0FBUyxTQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTswQkFDOUMsU0FBUyxTQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7c0JBQ3pDLFNBQVMsU0FBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFOzRCQUVyQyxLQUFLO29CQUNMLEtBQUs7NEJBQ0wsS0FBSztxQkFFTCxNQUFNO3NCQUNOLE1BQU07dUJBQ04sTUFBTTt3QkFDTixNQUFNOzBCQUNOLE1BQU07MkJBQ04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBEaXJlY3RpdmUsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBGaWxlVXBsb2FkIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvZmlsZXVwbG9hZCc7XG5pbXBvcnQgeyBDb250cm9sVHJlZU5vZGUsIENydWRGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jcnVkL2NydWQtZm9ybS9jcnVkLWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IENPTkZJR19DQUxFTkRBUl9WSUVUTkFNRVNFIH0gZnJvbSAnLi4vLi4vY29uZmlncy9jYWxlbmRhci5jb25maWcnO1xuaW1wb3J0IHsgQ29tQ3R4Q29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vY29uZmlncy9jb21wb25lbnQtY29udGV4dC5jb25zdGFudCc7XG5pbXBvcnQgeyBEYXRhU291cmNlQm9vbGVhbiwgRmllbGREZWZpbmVJc1Rhc2tGb3JtQ29udHJvbCwgRmllbGRXb3JrZmxvd0NvZGVJbkNydWRGb3JtIH0gZnJvbSAnLi4vLi4vY29uc3QvY29tbW9uJztcbmltcG9ydCB7IFBlcm1pc3Npb25CYXNlIH0gZnJvbSAnLi4vLi4vZW51bXMvY29tbW9uJztcbmltcG9ydCB7IEZpbHRlciB9IGZyb20gJy4uLy4uL21vZGVscy9ncmlkLWluZm8nO1xuaW1wb3J0IHsgUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi8uLi9tb2RlbHMvcmVzcG9uc2UtcmVzdWx0JztcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb21tb24uc2VydmljZSc7XG5pbXBvcnQgeyBDcnVkU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NydWQuc2VydmljZSc7XG5pbXBvcnQgeyBDdXN0b21Sb3V0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY3VzdG9tLXJvdXRlci5zZXJ2aWNlJztcbmltcG9ydCB7IERvbVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kb20uc2VydmljZSc7XG5pbXBvcnQgeyBFbnRpdHlNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbnRpdHktbWV0YWRhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBNYXN0ZXJEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21hc3Rlci1kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21vZHVsZS1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmllci5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1TdGF0ZSwgS2V5Rmxhc2hTaG93IH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IGlzTGl0ZXJhbE9iamVjdCwgaXNWYWxpZERhdGUgfSBmcm9tICcuLi9lbnZpcm9ubWVudC1zY2hlbWEnO1xuaW1wb3J0IHtcbiAgICBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hLFxuICAgIENoZWNrYm94Q29udHJvbFNjaGVtYSxcbiAgICBDb250YWluZXJTY2hlbWEsXG4gICAgQ3J1ZEZvcm1EYXRhLFxuICAgIENydWRGb3JtU2V0dGluZyxcbiAgICBDcnVkTGlzdFNldHRpbmcsXG4gICAgQ3VzdG9tQ29udHJvbFNjaGVtYSxcbiAgICBEYXRlVGltZUNvbnRyb2xTY2hlbWEsXG4gICAgRHJvcGRvd25Db250cm9sU2NoZW1hLFxuICAgIEVkaXRvckNvbnRyb2xTY2hlbWEsXG4gICAgRXZlbnREYXRhLFxuICAgIEV2ZW50VHlwZSxcbiAgICBGaWxlTWFuYWdlckNvbnRyb2xTY2hlbWEsXG4gICAgRm9ybUNvbnRyb2xCYXNlLFxuICAgIExvZ0NvbHVtbixcbiAgICBMb2dTZXR0aW5nLFxuICAgIE1hc2tDb250cm9sU2NoZW1hLFxuICAgIE9wZXJhdG9yLFxuICAgIFN3aXRjaENvbnRyb2xTY2hlbWEsXG4gICAgVGFibGVTY2hlbWEsXG4gICAgVGV4dEFyZWFDb250cm9sU2NoZW1hLFxuICAgIFRpdGxlU2NoZW1hXG59IGZyb20gJy4uL2Zvcm0tc2NoZW1hJztcbmltcG9ydCB7IENvbXBvbmVudEJhc2VXaXRoQnV0dG9uIH0gZnJvbSAnLi9jb21wb25lbnQtYmFzZS13aXRoLWJ1dHRvbic7XG5pbXBvcnQgeyBSZXF1aXJlZFZhbGlkYXRvciB9IGZyb20gJy4vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBEZWNpbWFsUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERhdGFGb3JtQmFzZSBleHRlbmRzIENvbXBvbmVudEJhc2VXaXRoQnV0dG9uIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgQFZpZXdDaGlsZChDcnVkRm9ybUNvbXBvbmVudCwgeyBzdGF0aWM6IGZhbHNlIH0pIGNydWRGb3JtOiBDcnVkRm9ybUNvbXBvbmVudDtcbiAgICBAVmlld0NoaWxkKCdmb3JtRWxlbWVudCcsIHsgc3RhdGljOiB0cnVlIH0pIGZvcm1FbGVtZW50OiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ3BVcGxvYWQnLCB7IHN0YXRpYzogdHJ1ZSB9KSBwVXBsb2FkOiBGaWxlVXBsb2FkO1xuXG4gICAgQElucHV0KCkgcGFyZW50U2V0dGluZzogQ3J1ZExpc3RTZXR0aW5nO1xuICAgIEBJbnB1dCgpIG1vZGVsOiBDcnVkRm9ybURhdGEgPSBuZXcgQ3J1ZEZvcm1EYXRhKCk7XG4gICAgQElucHV0KCkgZm9yY2VPbmx5VmlldzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQE91dHB1dCgpIG9uU2F2ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25TYXZlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25DYW5jZWw6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uTWVzc2FnZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25Gb3JtUmVhZHk6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uRGF0YUJpbmRlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIGRvTm90Q2hlY2tCYXNlU2VydmljZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgbm90Q29uZmlnQmFzZVNlcnZpY2VNZXNzYWdlID0gJ0NoxrBhIGPhuqV1IGjDrG5oIENSVUQgYmFzZSBzZXJ2aWNlJztcbiAgICBtZXNzYWdlSW5zZXJ0U3VjY2VzcyA9ICcnO1xuICAgIG1lc3NhZ2VVcGRhdGVTdWNjZXNzID0gJyc7XG4gICAgc2V0dGluZzogQ3J1ZEZvcm1TZXR0aW5nID0gbmV3IENydWRGb3JtU2V0dGluZygpO1xuICAgIGxvZ1NldHRpbmc6IExvZ1NldHRpbmcgPSBuZXcgTG9nU2V0dGluZygpO1xuXG4gICAgdmkgPSBDT05GSUdfQ0FMRU5EQVJfVklFVE5BTUVTRTtcblxuICAgIGZvcm1Db250cm9sczogYW55O1xuICAgIGZvcm1Db250cm9sc0xpc3QgPSB7fTtcbiAgICBlbnZpcm9ubWVudDogYW55ID0ge307XG4gICAgbWRXaWR0aFdvcmtmbG93OiBudW1iZXI7XG5cbiAgICBhdXRvR2V0RGV0YWlsID0gdHJ1ZTtcbiAgICBhdXRvU2F2ZSA9IHRydWU7XG4gICAgaXNDbG9zZUZvcm0gPSB0cnVlO1xuICAgIG1lc3NhZ2VDb25maXJtU2F2ZTogc3RyaW5nO1xuICAgIHNhdmluZyA9IGZhbHNlO1xuICAgIGdldERldGFpbFBsdXNVcmwgPSBudWxsO1xuICAgIGluc2VydFBsdXNVcmwgPSBudWxsO1xuICAgIHVwZGF0ZVBsdXNVcmwgPSBudWxsO1xuICAgIGR5bmFtaWNDb250cm9sOiBhbnkgPSB7fTtcbiAgICBzZXRWYWxpZGF0ZUZvcm0gPSB0cnVlO1xuICAgIGhhdmVFbnRpdHlNZXRhZGF0YUFQSSA9IHRydWU7XG4gICAgaXNCYXNlTW9kZWwgPSB0cnVlO1xuICAgIGF1dG9HZW5lcmF0ZUlkID0gdHJ1ZTtcbiAgICBwdWJsaWMgX19pc0Zvcm1WaWV3OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgX25vdGlmaWVyU2VydmljZTogTm90aWZpZXJTZXJ2aWNlO1xuICAgIHB1YmxpYyBfbWFzdGVyRGF0YVNlcnZpY2U6IE1hc3RlckRhdGFTZXJ2aWNlO1xuICAgIHB1YmxpYyBfcm91dGVyOiBSb3V0ZXI7XG4gICAgcHVibGljIF9hY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGU7XG4gICAgcHVibGljIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlO1xuICAgIHB1YmxpYyBfY3VzdG9tUm91dGVyU2VydmljZTogQ3VzdG9tUm91dGVyU2VydmljZTtcbiAgICBwdWJsaWMgX2NydWRTZXJ2aWNlOiBDcnVkU2VydmljZTtcbiAgICBwdWJsaWMgX2RvbVNlcnZpY2U6IERvbVNlcnZpY2U7XG4gICAgcHVibGljIF9lbnRpdHlNZXRhZGF0YVNlcnZpY2U6IEVudGl0eU1ldGFkYXRhU2VydmljZTtcbiAgICBwdWJsaWMgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZTtcbiAgICBwdWJsaWMgX251bWJlclBpcGU6IERlY2ltYWxQaXBlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIF9pbmplY3RvcjogSW5qZWN0b3JcbiAgICApIHtcbiAgICAgICAgc3VwZXIoX2luamVjdG9yKTtcbiAgICAgICAgY29uc3QgbW9kdWxlQ29uZmlnU2VydmljZSA9IF9pbmplY3Rvci5nZXQoTW9kdWxlQ29uZmlnU2VydmljZSk7XG4gICAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSBtb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50O1xuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fbnVtYmVyUGlwZSA9IHRoaXMuX2luamVjdG9yLmdldChEZWNpbWFsUGlwZSk7XG4gICAgICAgIHRoaXMuX21hc3RlckRhdGFTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KE1hc3RlckRhdGFTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fcm91dGVyID0gdGhpcy5faW5qZWN0b3IuZ2V0KFJvdXRlcik7XG4gICAgICAgIHRoaXMuX2FjdGl2YXRlZFJvdXRlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEFjdGl2YXRlZFJvdXRlKTtcbiAgICAgICAgdGhpcy5fdHJhbnNsYXRlU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChUcmFuc2xhdGVTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fY3VzdG9tUm91dGVyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChDdXN0b21Sb3V0ZXJTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fY3J1ZFNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ3J1ZFNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9kb21TZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KERvbVNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9lbnRpdHlNZXRhZGF0YVNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoRW50aXR5TWV0YWRhdGFTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fdXNlclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoVXNlclNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KENvbW1vblNlcnZpY2UpO1xuXG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIC8vIHRoaXMuY2hlY2tQZXJtaXNzaW9uKHRoaXMubW9kZWwuZGF0YS5iYXNlUGVybWlzc2lvbik7XG5cbiAgICAgICAgY29uc3QgZGVmYXVsdFNldHRpbmcgPSBuZXcgQ3J1ZEZvcm1TZXR0aW5nKCk7XG4gICAgICAgIGNvbnN0IGNhdUhpbmhOZ2hpZXBWdSA9IHRoaXMuZW52aXJvbm1lbnQ/LmNhdUhpbmhOZ2hpZXBWdTtcbiAgICAgICAgaWYgKGNhdUhpbmhOZ2hpZXBWdSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gY2F1SGluaE5naGllcFZ1KSB7XG4gICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRTZXR0aW5nW2tleV0gPT0gdGhpcy5zZXR0aW5nW2tleV1cbiAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5zZXR0aW5nW2tleV0gIT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICYmIGNhdUhpbmhOZ2hpZXBWdVtrZXldICE9IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLnNldHRpbmdba2V5XSAhPSBjYXVIaW5oTmdoaWVwVnVba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmdba2V5XSA9IGNhdUhpbmhOZ2hpZXBWdVtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgfVxuICAgIGNoZWNrUGVybWlzc2lvbihiYXNlUGVybWlzc2lvbikge1xuICAgICAgICBpZiAodGhpcy5pc0Jhc2VNb2RlbCkge1xuICAgICAgICAgICAgaWYgKHRoaXMubW9kZWwuZm9ybVN0YXRlID09IEZvcm1TdGF0ZS5FRElUKSB7XG4gICAgICAgICAgICAgICAgaWYgKGJhc2VQZXJtaXNzaW9uICYgUGVybWlzc2lvbkJhc2UuRURJVCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmZvcm1TdGF0ZSA9IEZvcm1TdGF0ZS5FRElUO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuVklFVztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tb2RlbC5kYXRhLmlzQnVpbGRJbkFsbCAmJiAhdGhpcy5fdXNlclNlcnZpY2UuaXNTdXBlclVzZXIoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmZvcm1TdGF0ZSA9IEZvcm1TdGF0ZS5WSUVXO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX19pc0Zvcm1WaWV3ID0gdGhpcy5faXNGb3JtVmlldygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkU2NoZW1hQmFzZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3VzZXJTZXJ2aWNlLmlzU3VwZXJVc2VyKClcbiAgICAgICAgICAgICYmIHRoaXMubW9kZWxcbiAgICAgICAgICAgICYmIHRoaXMubW9kZWwuZGF0YS5oYXNCdWlsZEluXG4gICAgICAgICAgICAmJiB0aGlzLnNldHRpbmcuc2NoZW1hXG4gICAgICAgICAgICAmJiB0aGlzLnNldHRpbmcuc2NoZW1hLmxlbmd0aCA+IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuc2NoZW1hLnB1c2goXG4gICAgICAgICAgICAgICAgbmV3IFN3aXRjaENvbnRyb2xTY2hlbWEoe1xuICAgICAgICAgICAgICAgICAgICBmaWVsZDogJ2lzQnVpbGRJbicsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnS2jDs2EgbcOjJyxcbiAgICAgICAgICAgICAgICAgICAgbWRXaWR0aDogNFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLnNjaGVtYS5wdXNoKFxuICAgICAgICAgICAgICAgIG5ldyBTd2l0Y2hDb250cm9sU2NoZW1hKHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdpc0J1aWxkSW5BbGwnLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0tow7NhIGLhuqNuIGdoaScsXG4gICAgICAgICAgICAgICAgICAgIG1kV2lkdGg6IDRcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnBhcmVudFNldHRpbmdcbiAgICAgICAgICAgICYmIHRoaXMuX2lzRm9ybUFkZE5ldygpXG4gICAgICAgICkge1xuICAgICAgICAgICAgbGV0IGRhdGFTb3VyY2UgPSBbXSwgZGVmYXVsdFZhbHVlID0gbnVsbCwgaGFzV29ya2Zsb3cgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGluaXREYXRhVGFza0Zvcm06IGFueSA9IHt9O1xuICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50U2V0dGluZy53b3JrZmxvd1NldHRpbmdOZXcgJiYgdGhpcy5wYXJlbnRTZXR0aW5nLndvcmtmbG93U2V0dGluZ05ldy53b3JrZmxvd3MubGVuZ3RoID4gMFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZSA9IHRoaXMucGFyZW50U2V0dGluZy53b3JrZmxvd1NldHRpbmdOZXcud29ya2Zsb3dzO1xuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IHRoaXMucGFyZW50U2V0dGluZy53b3JrZmxvd1NldHRpbmdOZXcud29ya2Zsb3dDb2RlO1xuICAgICAgICAgICAgICAgIGhhc1dvcmtmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGEuY3JlYXRlVGFza0luc3RlYWQgPSB0aGlzLnBhcmVudFNldHRpbmcud29ya2Zsb3dTZXR0aW5nTmV3LmNyZWF0ZVRhc2tJbnN0ZWFkO1xuICAgICAgICAgICAgICAgIGluaXREYXRhVGFza0Zvcm0uaWRMb2FpQ29uZ1ZpZWMgPSB0aGlzLnBhcmVudFNldHRpbmcud29ya2Zsb3dTZXR0aW5nTmV3LmlkTG9haUNvbmdWaWVjRGVmYXVsdDtcbiAgICAgICAgICAgICAgICBpbml0RGF0YVRhc2tGb3JtLl9fdGVtcGxhdGVUYXNrTmFtZSA9IHRoaXMucGFyZW50U2V0dGluZy53b3JrZmxvd1NldHRpbmdOZXcudGVtcGxhdGVUYXNrTmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMucGFyZW50U2V0dGluZy5pc1dvcmtmbG93VHJlZSkge1xuICAgICAgICAgICAgICAgIGhhc1dvcmtmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoYXNXb3JrZmxvdykge1xuICAgICAgICAgICAgICAgIHRoaXMuZHluYW1pY0NvbnRyb2xbRmllbGREZWZpbmVJc1Rhc2tGb3JtQ29udHJvbF0gPSBuZXcgQ3VzdG9tQ29udHJvbFNjaGVtYSh7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBGaWVsZERlZmluZUlzVGFza0Zvcm1Db250cm9sLFxuICAgICAgICAgICAgICAgICAgICBtZFdpZHRoOiAxMixcbiAgICAgICAgICAgICAgICAgICAgc2hvd0xhYmVsOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6ICduby1wYWRkaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogaW5pdERhdGFUYXNrRm9ybSxcbiAgICAgICAgICAgICAgICAgICAgaGlkZGVuQ2hlY2s6IChyb290TW9kZWwpID0+ICFyb290TW9kZWwgfHwgIXJvb3RNb2RlbC5jcmVhdGVUYXNrSW5zdGVhZFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5zY2hlbWEucHVzaChcbiAgICAgICAgICAgICAgICAgICAgbmV3IERyb3Bkb3duQ29udHJvbFNjaGVtYSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogRmllbGRXb3JrZmxvd0NvZGVJbkNydWRGb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdRdXkgdHLDrG5oIHPhu60gZOG7pW5nJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUZpZWxkOiAnY29kZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5RmllbGQ6ICd0aXRsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZFdpZHRoOiB0aGlzLm1kV2lkdGhXb3JrZmxvdyB8fCAxMixcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZUNhY2hpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuQ2hlY2s6IChyb290TW9kZWwpID0+ICFyb290TW9kZWwgfHwgcm9vdE1vZGVsLmNyZWF0ZVRhc2tJbnN0ZWFkLFxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2VkOiBhc3luYyAoZXZ0OiBFdmVudERhdGEpID0+IGF3YWl0IHRoaXMuaGFuZGxlQ2hhbmdlV29ya2Zsb3dDb2RlKGV2dCksXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkFkanVzdGVkVmFsdWU6IGFzeW5jIChldnQ6IEV2ZW50RGF0YSkgPT4gYXdhaXQgdGhpcy5oYW5kbGVDaGFuZ2VXb3JrZmxvd0NvZGUoZXZ0KVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50U2V0dGluZy53b3JrZmxvd1NldHRpbmdOZXdcbiAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5wYXJlbnRTZXR0aW5nLndvcmtmbG93U2V0dGluZ05ldy50YXNrSW5zaWRlQnVzaW5lc3NGb3JtXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5zY2hlbWEucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBUaXRsZVNjaGVtYSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJ0PDtG5nIHZp4buHYycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuQ2hlY2s6IChyb290TW9kZWwpID0+ICFyb290TW9kZWwgfHwgIXJvb3RNb2RlbC5jcmVhdGVUYXNrSW5zdGVhZFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmR5bmFtaWNDb250cm9sW0ZpZWxkRGVmaW5lSXNUYXNrRm9ybUNvbnRyb2xdXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgaGFuZGxlQ2hhbmdlV29ya2Zsb3dDb2RlKGV2dDogRXZlbnREYXRhKSB7XG5cbiAgICB9XG5cbiAgICBzZXRXb3JrZmxvd0RhdGFzb3VyY2UoZXZ0OiBFdmVudERhdGEsIHdvcmtmbG93U2V0dGluZykge1xuICAgICAgICBldnQuZm9ybUNvbnRyb2xzW0ZpZWxkV29ya2Zsb3dDb2RlSW5DcnVkRm9ybV0uZGF0YVNvdXJjZSA9IHdvcmtmbG93U2V0dGluZy53b3JrZmxvd3M7XG4gICAgICAgIGlmICghZXZ0LnJvb3RNb2RlbFtGaWVsZFdvcmtmbG93Q29kZUluQ3J1ZEZvcm1dKSB7XG4gICAgICAgICAgICBldnQucm9vdE1vZGVsW0ZpZWxkV29ya2Zsb3dDb2RlSW5DcnVkRm9ybV0gPSB3b3JrZmxvd1NldHRpbmcud29ya2Zsb3dDb2RlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCF3b3JrZmxvd1NldHRpbmcud29ya2Zsb3dzLnNvbWUoeCA9PiB4LmNvZGUgPT0gZXZ0LnJvb3RNb2RlbFtGaWVsZFdvcmtmbG93Q29kZUluQ3J1ZEZvcm1dKSkge1xuICAgICAgICAgICAgZXZ0LnJvb3RNb2RlbFtGaWVsZFdvcmtmbG93Q29kZUluQ3J1ZEZvcm1dID0gd29ya2Zsb3dTZXR0aW5nLndvcmtmbG93Q29kZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIF9oYW5kbGVGb3JtUmVhZHkoZm9ybUV2ZW50OiBFdmVudERhdGEpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5fX2hhbmRsZUZvcm1SZWFkeShmb3JtRXZlbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX19oYW5kbGVGb3JtUmVhZHkoZm9ybUV2ZW50OiBFdmVudERhdGEpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRvTm90Q2hlY2tCYXNlU2VydmljZSAmJiAhdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcodGhpcy5ub3RDb25maWdCYXNlU2VydmljZU1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2xzID0gZm9ybUV2ZW50LmZvcm1Db250cm9scztcbiAgICAgICAgYXdhaXQgdGhpcy5vbkZvcm1Jbml0aWFsaXplZChmb3JtRXZlbnQpO1xuICAgICAgICB0aGlzLm9uRm9ybVJlYWR5LmVtaXQoe1xuICAgICAgICAgICAgZWxlbWVudDogdGhpcyxcbiAgICAgICAgICAgIHNldHRpbmc6IHRoaXMuc2V0dGluZyxcbiAgICAgICAgICAgIGZvcm1FdmVudFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fdHJpZ2dlckdldERldGFpbCgpO1xuICAgIH1cblxuICAgIF90cmlnZ2VyR2V0RGV0YWlsKCkge1xuICAgICAgICBpZiAodGhpcy5hdXRvR2V0RGV0YWlsKSB7XG4gICAgICAgICAgICB0aGlzLmdldERldGFpbCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuY3J1ZEZvcm0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNydWRGb3JtLmluaXRDb250cm9sRGVmYXVsdFZhbHVlRnJvbUV4dGVybmFsKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jcnVkRm9ybS5maXJlTW9kZWxDaGFuZ2VkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBvbkJlZm9yZUdldERldGFpbCgpIHtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRPYmplY3REZXRhaWwoKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmdldERldGFpbFdpdGhQZXJtaXNzaW9uKHRoaXMubW9kZWwuZGF0YS5pZCwgdGhpcy5tb2RlbC5kYXRhLnBpZCwgdGhpcy5nZXREZXRhaWxQbHVzVXJsKTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXREZXRhaWxDdXN0b20oKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdldERldGFpbCgpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0Q2hlY2sgPSBhd2FpdCB0aGlzLmdldERldGFpbEN1c3RvbSgpO1xuICAgICAgICAvLyBLaMO0bmcgb3ZlcnJpZGVcbiAgICAgICAgaWYgKHJlc3VsdENoZWNrID09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5faXNGb3JtQWRkTmV3KCkpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm9uQmVmb3JlR2V0RGV0YWlsKCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3J1ZEZvcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcnVkRm9ybS5zZXRJc0xvYWRlZERhdGFFZGl0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldE9iamVjdERldGFpbCgpO1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubW9kaWZ5RGV0YWlsRGF0YShyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcHJvY2Vzc0FmdGVyR2V0RGF0YShyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJHZXREZXRhaWwocmVzcG9uc2UuZGF0YSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubG9nU2V0dGluZy5pc0VuYWJsZUxvZykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ1NldHRpbmcudmFsdWVCZWZvcmVVcGRhdGUgPSB0aGlzLl9jb21tb25TZXJ2aWNlLmNsb25lT2JqZWN0KHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNydWRGb3JtKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEV2ZW50RGF0YSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZTogdGhpcy5jcnVkRm9ybS5fcm9vdE5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudFR5cGU6IEV2ZW50VHlwZS5GT1JNX1JFQURZLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3J1ZEZvcm06IHRoaXMuY3J1ZEZvcm1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuaW5pdERhdGFBZGQoZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXREZWZhdWx0U2V0dGluZ0ZpbGVDb250cm9sKGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcnVkRm9ybS5pbml0Q29udHJvbERlZmF1bHRWYWx1ZUZyb21FeHRlcm5hbCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNydWRGb3JtLmZpcmVNb2RlbENoYW5nZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gT3ZlcnJpZGUgY8OhY2ggbOG6pXkgZOG7ryBsaeG7h3UgZ2V0RGV0YWlsXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHJlc3VsdENoZWNrLnN1Y2Nlc3MgJiYgcmVzdWx0Q2hlY2suZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5tb2RlbC5mb3JtU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuRURJVDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3J1ZEZvcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcnVkRm9ybS5zZXRJc0xvYWRlZERhdGFFZGl0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5tb2RpZnlEZXRhaWxEYXRhKHJlc3VsdENoZWNrLmRhdGEpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3Byb2Nlc3NBZnRlckdldERhdGEocmVzdWx0Q2hlY2suZGF0YSk7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5vbkFmdGVyR2V0RGV0YWlsKHJlc3VsdENoZWNrLmRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuQUREO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNydWRGb3JtKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEV2ZW50RGF0YSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZTogdGhpcy5jcnVkRm9ybS5fcm9vdE5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudFR5cGU6ICdmb3JtUmVhZHknLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3J1ZEZvcm06IHRoaXMuY3J1ZEZvcm1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuaW5pdERhdGFBZGQoZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXREZWZhdWx0U2V0dGluZ0ZpbGVDb250cm9sKGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcnVkRm9ybS5pbml0Q29udHJvbERlZmF1bHRWYWx1ZUZyb21FeHRlcm5hbCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNydWRGb3JtLmZpcmVNb2RlbENoYW5nZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBpbml0RGF0YUFkZChldnQ6IEV2ZW50RGF0YSkgeyB9XG5cbiAgICBwcml2YXRlIGluaXREZWZhdWx0U2V0dGluZ0ZpbGVDb250cm9sKGV2dDogRXZlbnREYXRhKSB7XG4gICAgICAgIGlmICghZXZ0LnJvb3RNb2RlbC5pZCAmJiB0aGlzLnNldHRpbmcuc2NoZW1hLnNvbWUocCA9PiAocCBpbnN0YW5jZW9mIEZpbGVNYW5hZ2VyQ29udHJvbFNjaGVtYSkpKSB7XG4gICAgICAgICAgICBldnQucm9vdE1vZGVsLmlkID0gdGhpcy5fY29tbW9uU2VydmljZS5ndWlkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQaOG6o2kgZ+G7jWkgaMOgbSBuw6B5IGtoaSBvdmVycmlkZSBnZXREZXRhaWxcbiAgICAgKi9cbiAgICBhc3luYyBfcHJvY2Vzc0FmdGVyR2V0RGF0YShkYXRhKSB7XG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgZGF0YSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gRHV54buHdCBjw6FjIGNvbnRyb2wgZGF0ZXRpbWUgxJHhu4MgY29udmVydCB2YWx1ZSBzYW5nIGRhdGV0aW1lXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuc2NoZW1hLmZvckVhY2goc2NoZW1hID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpeERhdGVWYWx1ZShzY2hlbWEsIGRhdGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YS5fX2Rpc2FibGVFZGl0ID0gdGhpcy5tb2RlbC5kYXRhLl9fZGlzYWJsZUVkaXQ7XG5cbiAgICAgICAgLy8gU2V0IGJhc2VQZXJtaXNzaW9uIHThu6sgY3J1ZGxpc3RcbiAgICAgICAgaWYgKHRoaXMubW9kZWwuZGF0YS5iYXNlUGVybWlzc2lvbiAmJiB0aGlzLm1vZGVsLmRhdGEuYmFzZVBlcm1pc3Npb24gPT09IFBlcm1pc3Npb25CYXNlLkZVTEwpIHtcbiAgICAgICAgICAgIGRhdGEuYmFzZVBlcm1pc3Npb24gPSB0aGlzLm1vZGVsLmRhdGEuYmFzZVBlcm1pc3Npb247XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm1vZGVsLmRhdGEgPSBkYXRhO1xuICAgICAgICBpZiAoZGF0YS5waWQgJiYgZGF0YS5waWQgIT0gdGhpcy5ndWlkRW1wdHkgJiYgZGF0YS5iYXNlUGVybWlzc2lvbkJ5UGlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tQZXJtaXNzaW9uKGRhdGEuYmFzZVBlcm1pc3Npb25CeVBpZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrUGVybWlzc2lvbihkYXRhLmJhc2VQZXJtaXNzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5mb3JjZU9ubHlWaWV3KSB7XG4gICAgICAgICAgICB0aGlzLl9faXNGb3JtVmlldyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLmZvcm1TdGF0ZSA9IEZvcm1TdGF0ZS5WSUVXO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY3J1ZEZvcm0pIHtcbiAgICAgICAgICAgIHRoaXMuY3J1ZEZvcm0uc3dpdGNoVmlld01vZGUodGhpcy5fX2lzRm9ybVZpZXcpO1xuICAgICAgICAgICAgdGhpcy5jcnVkRm9ybS5zd2l0Y2hGb3JtU3RhdGVGb3JVc2VycGlja2VyKHRoaXMuX2lzRm9ybUFkZE5ldygpKTtcbiAgICAgICAgICAgIHRoaXMuY3J1ZEZvcm0uZGF0YSA9IGRhdGE7XG4gICAgICAgICAgICB0aGlzLmNydWRGb3JtLnNldElzTG9hZGVkRGF0YUVkaXQodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlXG4gICAgICAgICAgICAmJiB0aGlzLmhhdmVFbnRpdHlNZXRhZGF0YUFQSSAvLyBzZXR0aW5nIMSR4buDIGZpeCBs4buXaSBrIGxvYWQgZGMgZW50aXR5IG1ldGFkYXRhIGNobyBjxqEgY+G6pXUgdOG7lSBjaOG7qWMgc2VydmljZVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2VudGl0eU1ldGFkYXRhU2VydmljZS5sb2FkKHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSwgdGhpcy5jb250ZXh0LCB0cnVlKTsgLy8gZm9yY2UgbG9hZCDEkeG7gyDEkeG7jWMgdOG7qyBjc2RsXG4gICAgICAgICAgICBjb25zdCBlbmFibGVWZXJzaW9uID0gdGhpcy5fZW50aXR5TWV0YWRhdGFTZXJ2aWNlLmdldEJ5Q29kZSgnZW5hYmxlVmVyc2lvbicpO1xuICAgICAgICAgICAgaWYgKGVuYWJsZVZlcnNpb24gPT0gJzEnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmZpbHRlckNoZWNrRXhpc3RCeVZlcnNpb24gPSBbXG4gICAgICAgICAgICAgICAgICAgIG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdjb2RlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5ub3RFcXVhbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeSh0aGlzLm1vZGVsLmRhdGEuY29kZSlcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kaXNhYmxlQnVpbGRJbkZpZWxkKCk7XG4gICAgICAgIGlmICh0aGlzLmxvZ1NldHRpbmcuaXNFbmFibGVMb2cpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0TG9nVmFsdWVBZnRlckxvYWREZXRhaWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldExvZ1ZhbHVlQWZ0ZXJMb2FkRGV0YWlsKCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29udHJvbE5hbWUgb2YgT2JqZWN0LmtleXModGhpcy5mb3JtQ29udHJvbHMpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuY3J1ZEZvcm0uZm9ybUNvbnRyb2xzW2NvbnRyb2xOYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbE5hbWUuaW5jbHVkZXMoJy4nKSB8fCB0aGlzLmNydWRGb3JtLmZvcm1Db250cm9sc1tjb250cm9sTmFtZV0/LmhpZGRlbiA9PT0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB8fCAhKGNvbnRyb2wgaW5zdGFuY2VvZiBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hKSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dTZXR0aW5nLmFyclZhbHVlQWZ0ZXJVcGRhdGUucHVzaChcbiAgICAgICAgICAgICAgICAgICAgbmV3IExvZ0NvbHVtbih7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGNvbnRyb2wubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUJlZm9yZTogY29udHJvbC5fY29tcG9uZW50LmRhdGFTb3VyY2UubWFwKHAgPT4gcC5sYWJlbCkuam9pbignLCAnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVBZnRlcjogJydcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCAyMDAwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpeERhdGVWYWx1ZShjb250cm9sLCBwYXJlbnRNb2RlbCwgcGFyZW50UGF0aD8pIHtcbiAgICAgICAgbGV0IF9wYXJlbnRQYXRoID0gY29udHJvbC5maWVsZDtcbiAgICAgICAgaWYgKHBhcmVudFBhdGggIT0gbnVsbCkgX3BhcmVudFBhdGggPSBwYXJlbnRQYXRoICsgJy4nICsgX3BhcmVudFBhdGg7XG5cbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBUYWJsZVNjaGVtYSkge1xuICAgICAgICAgICAgaWYgKCFwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSB8fCAhKHBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdIGluc3RhbmNlb2YgQXJyYXkpKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc3ViQ29udHJvbCBvZiBjb250cm9sLnJvd1RlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZml4RGF0ZVZhbHVlKHN1YkNvbnRyb2wsIGl0ZW0sIF9wYXJlbnRQYXRoICsgJ1snICsgaSArICddJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgQ29udGFpbmVyU2NoZW1hKSB7XG4gICAgICAgICAgICBpZiAocGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0gPT0gbnVsbCB8fCAhaXNMaXRlcmFsT2JqZWN0KHBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdKSkge1xuICAgICAgICAgICAgICAgIHBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgc3ViQ29udHJvbCBvZiBjb250cm9sLmNvbnRyb2xzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maXhEYXRlVmFsdWUoc3ViQ29udHJvbCwgcGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0sIF9wYXJlbnRQYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRGF0ZVRpbWVDb250cm9sU2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEocGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0gaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbnRyb2wudGltZU9ubHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShTdHJpbmcocGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkRGF0ZShkYXRlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdID0gZGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdID0gdGhpcy5fY29tbW9uU2VydmljZS5nZXRUaW1lKHBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZGlzYWJsZUJ1aWxkSW5GaWVsZCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9pc0Zvcm1BZGROZXcoKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMubW9kZWwuZGF0YS5pc0J1aWxkSW5BbGwgJiYgIXRoaXMuX3VzZXJTZXJ2aWNlLmlzU3VwZXJVc2VyKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuc2NoZW1hLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2FkZFJlcXVpcmVkVmFsaWRhdG9yKHNjaGVtYTogRm9ybUNvbnRyb2xCYXNlKSB7XG4gICAgICAgIGxldCBleGlzdCA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IHZhbGlkYXRvciBvZiBzY2hlbWEudmFsaWRhdG9ycykge1xuICAgICAgICAgICAgaWYgKHZhbGlkYXRvciBpbnN0YW5jZW9mIFJlcXVpcmVkVmFsaWRhdG9yKSB7XG4gICAgICAgICAgICAgICAgZXhpc3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghZXhpc3QpIHtcbiAgICAgICAgICAgIHNjaGVtYS52YWxpZGF0b3JzLnB1c2gobmV3IFJlcXVpcmVkVmFsaWRhdG9yKCkpO1xuICAgICAgICB9XG4gICAgICAgIHNjaGVtYS5yZXF1aXJlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgX3JlbW92ZVJlcXVpcmVkVmFsaWRhdG9yKHNjaGVtYTogRm9ybUNvbnRyb2xCYXNlKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRvcnMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCB2YWxpZGF0b3Igb2Ygc2NoZW1hLnZhbGlkYXRvcnMpIHtcbiAgICAgICAgICAgIGlmICh2YWxpZGF0b3IgaW5zdGFuY2VvZiBSZXF1aXJlZFZhbGlkYXRvcikge1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2godmFsaWRhdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzY2hlbWEudmFsaWRhdG9ycyA9IHZhbGlkYXRvcnM7XG4gICAgICAgIHNjaGVtYS5yZXF1aXJlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIF9zZXRNb2RlbFZhbHVlKGZpZWxkOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuY3J1ZEZvcm0uX3Jvb3ROb2RlLmdldE5vZGVCeVBhdGgoZmllbGQpO1xuICAgICAgICB0aGlzLl9zZXRNb2RlbFZhbHVlQnlOb2RlKG5vZGUsIHZhbHVlKTtcbiAgICB9XG5cbiAgICBfc2V0TW9kZWxWYWx1ZUJ5Tm9kZShub2RlOiBDb250cm9sVHJlZU5vZGUsIHZhbHVlOiBhbnkpIHtcbiAgICAgICAgbm9kZS5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMuY3J1ZEZvcm0uZmlyZU1vZGVsQ2hhbmdlZCgpO1xuICAgIH1cblxuICAgIGFzeW5jIG1vZGlmeURldGFpbERhdGEoZGF0YSkge1xuICAgIH1cblxuICAgIF90cmlnZ2VyU2F2ZSgpIHtcbiAgICAgICAgdGhpcy5zYXZlKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgb25BZnRlckdldExvZ1ZhbHVlKCkge1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2luZ2xlTGFiZWwoY29udHJvbCwgZGF0YVNvdXJjZSwgdmFsdWVQYXJhbSkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gZGF0YVNvdXJjZS5maW5kKHAgPT4gcC52YWx1ZVtjb250cm9sLnZhbHVlRmllbGRdID09IHZhbHVlUGFyYW0pO1xuICAgICAgICBpZiAoISFyZXN1bHQpIHtcbiAgICAgICAgICAgIGNvbnN0IGZ1bmNHZXRMYWJlbCA9IGNvbnRyb2wuZnVuY0dldExhYmVsO1xuICAgICAgICAgICAgaWYgKGZ1bmNHZXRMYWJlbCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmNHZXRMYWJlbChyZXN1bHQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5sb2dTZXR0aW5nLmVtcHR5VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgcHJpdmF0ZSBnZXRNdWx0aXBsZUxhYmVsKGNvbnRyb2wsIGRhdGFTb3VyY2UsIHZhbHVlUGFyYW0pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZVBhcmFtLnNvbWUocCA9PiBwID09IE51bWJlcihwKSkpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZVBhcmFtID0gdmFsdWVQYXJhbS5tYXAocCA9PiBOdW1iZXIocCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIHsgfVxuICAgICAgICBsZXQgcmVzdWx0ID0gZGF0YVNvdXJjZVxuICAgICAgICAgICAgLmZpbHRlcihwID0+IHZhbHVlUGFyYW0uaW5jbHVkZXMocC52YWx1ZVtjb250cm9sLnZhbHVlRmllbGRdKSlcbiAgICAgICAgICAgIC5tYXAocCA9PiBjb250cm9sLmZ1bmNHZXRMYWJlbChwLnZhbHVlKSlcbiAgICAgICAgICAgIC5qb2luKCcsICcpO1xuICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5sb2dTZXR0aW5nLmVtcHR5VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBhZGRTaW5nbGVQcm9wZXJ0eUxvZyhjb250cm9sLCBvbGRWYWx1ZSwgbmV3VmFsdWUpIHtcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hKSB7XG4gICAgICAgICAgICBjb25zdCBsb2dDb2x1bW4gPSB0aGlzLmxvZ1NldHRpbmcuYXJyVmFsdWVBZnRlclVwZGF0ZS5maW5kKHAgPT4gcC5jb2x1bW4gPT0gY29udHJvbC5sYWJlbCk7XG4gICAgICAgICAgICBsZXQgZGF0YVNvdXJjZSA9IGNvbnRyb2wuX2NvbXBvbmVudC5zZWxlY3RlZFZhbHVlT2JqZWN0O1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGFTb3VyY2UpKSBkYXRhU291cmNlID0gW2RhdGFTb3VyY2VdO1xuICAgICAgICAgICAgbG9nQ29sdW1uLnZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgbG9nQ29sdW1uLnZhbHVlQWZ0ZXIgPSB0aGlzLmdldFNpbmdsZUxhYmVsKGNvbnRyb2wsIGRhdGFTb3VyY2UsIG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBjb250cm9sLl9jb21wb25lbnQuZGF0YVNvdXJjZUludGVybmFsO1xuICAgICAgICAgICAgdGhpcy5sb2dTZXR0aW5nLmFyclZhbHVlQWZ0ZXJVcGRhdGUucHVzaChcbiAgICAgICAgICAgICAgICBuZXcgTG9nQ29sdW1uKHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBjb250cm9sLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZUJlZm9yZTogdGhpcy5nZXRTaW5nbGVMYWJlbChjb250cm9sLCBkYXRhU291cmNlLCBvbGRWYWx1ZSksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlQWZ0ZXI6IHRoaXMuZ2V0U2luZ2xlTGFiZWwoY29udHJvbCwgZGF0YVNvdXJjZSwgbmV3VmFsdWUpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYWRkTXVsdGlwbGVQcm9wZXJ0eUxvZyhjb250cm9sLCBvbGRWYWx1ZSwgbmV3VmFsdWUpIHtcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hKSB7XG4gICAgICAgICAgICBjb25zdCBsb2dDb2x1bW4gPSB0aGlzLmxvZ1NldHRpbmcuYXJyVmFsdWVBZnRlclVwZGF0ZS5maW5kKHAgPT4gcC5jb2x1bW4gPT0gY29udHJvbC5sYWJlbCk7XG4gICAgICAgICAgICBsb2dDb2x1bW4udmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICBsb2dDb2x1bW4udmFsdWVBZnRlciA9IHRoaXMuZ2V0TXVsdGlwbGVMYWJlbChjb250cm9sLCBjb250cm9sLl9jb21wb25lbnQuc2VsZWN0ZWRWYWx1ZU9iamVjdCwgbmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IGNvbnRyb2wuX2NvbXBvbmVudC5kYXRhU291cmNlSW50ZXJuYWw7XG4gICAgICAgICAgICB0aGlzLmxvZ1NldHRpbmcuYXJyVmFsdWVBZnRlclVwZGF0ZS5wdXNoKFxuICAgICAgICAgICAgICAgIG5ldyBMb2dDb2x1bW4oe1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGNvbnRyb2wubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlQmVmb3JlOiB0aGlzLmdldE11bHRpcGxlTGFiZWwoY29udHJvbCwgZGF0YVNvdXJjZSwgb2xkVmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZUFmdGVyOiB0aGlzLmdldE11bHRpcGxlTGFiZWwoY29udHJvbCwgZGF0YVNvdXJjZSwgbmV3VmFsdWUpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0TG9nVmFsdWVEZWZhdWx0KGNvbnRyb2wsIG9sZFZhbHVlLCBuZXdWYWx1ZSkge1xuICAgICAgICBjb25zdCBpc051bGxPbGRWYWx1ZSA9IHRoaXMuaXNOdWxsT3JFbXB0eShvbGRWYWx1ZSk7XG4gICAgICAgIGNvbnN0IGlzTnVsbE5ld1ZhbHVlID0gdGhpcy5pc051bGxPckVtcHR5KG5ld1ZhbHVlKTtcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBEYXRlVGltZUNvbnRyb2xTY2hlbWEpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IGNvbnRyb2wuc2hvd1RpbWUgPyAnSEg6bW0gZGQvTU0veXl5eScgOiAnZGQvTU0veXl5eSc7XG4gICAgICAgICAgICBvbGRWYWx1ZSA9IGlzTnVsbE9sZFZhbHVlID8gdGhpcy5sb2dTZXR0aW5nLmVtcHR5VmFsdWUgOiB0aGlzLl9kYXRlUGlwZS50cmFuc2Zvcm0ob2xkVmFsdWUsIGZvcm1hdCk7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IGlzTnVsbE5ld1ZhbHVlID8gdGhpcy5sb2dTZXR0aW5nLmVtcHR5VmFsdWUgOiB0aGlzLl9kYXRlUGlwZS50cmFuc2Zvcm0obmV3VmFsdWUsIGZvcm1hdCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIE1hc2tDb250cm9sU2NoZW1hKSB7XG4gICAgICAgICAgICBvbGRWYWx1ZSA9IGlzTnVsbE9sZFZhbHVlID8gdGhpcy5sb2dTZXR0aW5nLmVtcHR5VmFsdWUgOiB0aGlzLl9udW1iZXJQaXBlLnRyYW5zZm9ybShvbGRWYWx1ZSwgJycsICd2aS1WTicpO1xuICAgICAgICAgICAgbmV3VmFsdWUgPSBpc051bGxOZXdWYWx1ZSA/IHRoaXMubG9nU2V0dGluZy5lbXB0eVZhbHVlIDogdGhpcy5fbnVtYmVyUGlwZS50cmFuc2Zvcm0obmV3VmFsdWUsICcnLCAndmktVk4nKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgQ2hlY2tib3hDb250cm9sU2NoZW1hIHx8IGNvbnRyb2wgaW5zdGFuY2VvZiBTd2l0Y2hDb250cm9sU2NoZW1hKSB7XG4gICAgICAgICAgICBvbGRWYWx1ZSA9IGlzTnVsbE9sZFZhbHVlID8gdGhpcy5sb2dTZXR0aW5nLmVtcHR5VmFsdWUgOiBEYXRhU291cmNlQm9vbGVhbi5maW5kKHAgPT4gcC5pZCA9PSBvbGRWYWx1ZSk/LnRlbjtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gaXNOdWxsTmV3VmFsdWUgPyB0aGlzLmxvZ1NldHRpbmcuZW1wdHlWYWx1ZSA6IERhdGFTb3VyY2VCb29sZWFuLmZpbmQocCA9PiBwLmlkID09IG5ld1ZhbHVlKT8udGVuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbb2xkVmFsdWUsIG5ld1ZhbHVlXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldExvZ1ZhbHVlKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgY2xvbmVNb2RlbCA9IHRoaXMuX2NvbW1vblNlcnZpY2UuY2xvbmVPYmplY3QodGhpcy5tb2RlbC5kYXRhKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29udHJvbE5hbWUgb2YgT2JqZWN0LmtleXModGhpcy5mb3JtQ29udHJvbHMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xOYW1lLmluY2x1ZGVzKCcuJykgfHwgdGhpcy5jcnVkRm9ybS5mb3JtQ29udHJvbHNbY29udHJvbE5hbWVdPy5oaWRkZW4gPT09IHRydWUpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm1Db250cm9sc1tjb250cm9sTmFtZV07XG4gICAgICAgICAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLmxvZ1NldHRpbmcudmFsdWVCZWZvcmVVcGRhdGVbY29udHJvbC5maWVsZF07XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBjbG9uZU1vZGVsW2NvbnRyb2wuZmllbGRdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzTXVsdGlwbGUgPSBBcnJheS5pc0FycmF5KG9sZFZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNOdWxsT3JFbXB0eShvbGRWYWx1ZSkgfHwgIXRoaXMuaXNOdWxsT3JFbXB0eShuZXdWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBEcm9wZG93bkNvbnRyb2xTY2hlbWEgfHwgY29udHJvbCBpbnN0YW5jZW9mIEF1dG9Db21wbGV0ZVBpY2tlckNvbnRyb2xTY2hlbWEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNNdWx0aXBsZSAmJiBvbGRWYWx1ZSAhPSBuZXdWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkU2luZ2xlUHJvcGVydHlMb2coY29udHJvbCwgb2xkVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzTXVsdGlwbGUgJiYgIXRoaXMuX2NvbW1vblNlcnZpY2UuaXNTYW1lQXJyYXkob2xkVmFsdWUsIG5ld1ZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkTXVsdGlwbGVQcm9wZXJ0eUxvZyhjb250cm9sLCBvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9sZFZhbHVlICE9IG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgW3ZhbHVlQmVmb3JlLCB2YWx1ZUFmdGVyXSA9IHRoaXMuZ2V0TG9nVmFsdWVEZWZhdWx0KGNvbnRyb2wsIG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dTZXR0aW5nLmFyclZhbHVlQWZ0ZXJVcGRhdGUucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IExvZ0NvbHVtbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGNvbnRyb2wubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUJlZm9yZTogdmFsdWVCZWZvcmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUFmdGVyOiB2YWx1ZUFmdGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNIdG1sOiAoY29udHJvbCBpbnN0YW5jZW9mIEVkaXRvckNvbnRyb2xTY2hlbWEgfHwgY29udHJvbCBpbnN0YW5jZW9mIFRleHRBcmVhQ29udHJvbFNjaGVtYSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignLS0tLWxvZyBkYXRhIGZhaWwtLS0tJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc051bGxPckVtcHR5KGlucHV0OiBhbnkpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9PSB1bmRlZmluZWQgJiYgaW5wdXQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dC5sZW5ndGggPyBmYWxzZSA6IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5wdXQudG9TdHJpbmcoKS50cmltKCkgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBwcml2YXRlIGFzeW5jIHNhdmUoKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlZCA9IGF3YWl0IHRoaXMudmFsaWRhdGVGb3JtQmFzZSgpO1xuICAgICAgICBpZiAodmFsaWRhdGVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5sb2dTZXR0aW5nLmlzRW5hYmxlTG9nKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmxvZ1NldHRpbmcuaXNDdXN0b21BbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRMb2dWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBj4bqldSBow6xuaCB0aMOqbVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMub25BZnRlckdldExvZ1ZhbHVlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5kYXRhLmxvZ01ldGFEYXRhID0gSlNPTi5zdHJpbmdpZnkodGhpcy5sb2dTZXR0aW5nLmFyclZhbHVlQWZ0ZXJVcGRhdGUuZmlsdGVyKHAgPT4gcC52aXNpYmxlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCB0aGlzLm9uQmVmb3JlU2F2ZSgpO1xuICAgICAgICAgICAgdGhpcy50cmlnZ2VyU2F2ZUZpbGVVcGxvYWQoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmF1dG9TYXZlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lzRm9ybUVkaXQoKSB8fCB0aGlzLl9pc0Zvcm1WaWV3KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5vblVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9pc0Zvcm1BZGROZXcoKSkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm9uSW5zZXJ0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBmb3JtIHZpZXcsIGRvIG5vdGhpbmdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZU1hbnVhbFNhdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlTWFudWFsU2F2ZSgpIHtcblxuICAgIH1cblxuICAgIHRyaWdnZXJTYXZlRmlsZVVwbG9hZCgpIHtcbiAgICAgICAgdGhpcy5yb290Q29udGV4dC5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5TQVZFX0ZJTEVfSU5fRk9STSk7XG4gICAgfVxuXG4gICAgYXN5bmMgX2dldFJlc3VsdFZhbGlkYXRlKCkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy52YWxpZGF0ZUZvcm1CYXNlKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgdmFsaWRhdGVGb3JtKHJlc3VsdFZhbGlkYXRlQmFzZTogYm9vbGVhbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHZhbGlkYXRlRm9ybUJhc2UoKSB7XG4gICAgICAgIGxldCByZXN1bHRWYWxpZGF0ZUJhc2UgPSB0cnVlO1xuICAgICAgICAvLyBDw7MgdGjhu4MgY8OzIGZvcm0gayBjw7MgY3J1ZC1mb3JtIChWw6wgbMOgIGZvcm0gbWFzdGVyIGPhu6dhIGPDoWMgZm9ybSBjb24pXG4gICAgICAgIGlmICh0aGlzLmNydWRGb3JtKSB7XG4gICAgICAgICAgICByZXN1bHRWYWxpZGF0ZUJhc2UgPSBhd2FpdCB0aGlzLmNydWRGb3JtLnZhbGlkYXRlRm9ybSh0aGlzLnNldFZhbGlkYXRlRm9ybSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0VmFsaWRhdGUgPSBhd2FpdCB0aGlzLnZhbGlkYXRlRm9ybShyZXN1bHRWYWxpZGF0ZUJhc2UpO1xuICAgICAgICAvLyBC4buPIGNoZWNrIHZhbGlkIGZvcm0gY8O0bmcgdmnhu4djLiBu4bq/dSBuaMawIGZvcm0gY8O0bmcgdmnhu4djIGtow7RuZyB2YWxpZCB0aMOsIGtow7RuZyB04buxIMSR4buZbmcgdOG6oW8gY8O0bmcgdmnhu4djXG4gICAgICAgIC8vIGlmICh0aGlzLmR5bmFtaWNDb250cm9sW0ZpZWxkRGVmaW5lSXNUYXNrRm9ybUNvbnRyb2xdXG4gICAgICAgIC8vICAgICAmJiB0aGlzLmR5bmFtaWNDb250cm9sW0ZpZWxkRGVmaW5lSXNUYXNrRm9ybUNvbnRyb2xdLl9jb21wb25lbnRcbiAgICAgICAgLy8gKSB7XG4gICAgICAgIC8vICAgICBjb25zdCB0YXNrRm9ybSA9IHRoaXMuZHluYW1pY0NvbnRyb2xbRmllbGREZWZpbmVJc1Rhc2tGb3JtQ29udHJvbF0uX2NvbXBvbmVudDtcbiAgICAgICAgLy8gICAgIGNvbnN0IHJlc3VsdFZhbGlkYXRlRm9ybVRhc2sgPSBhd2FpdCB0YXNrRm9ybS5fZ2V0UmVzdWx0VmFsaWRhdGUoKTtcbiAgICAgICAgLy8gICAgIHJlc3VsdFZhbGlkYXRlID0gcmVzdWx0VmFsaWRhdGVGb3JtVGFzayAmJiByZXN1bHRWYWxpZGF0ZTtcbiAgICAgICAgLy8gfVxuICAgICAgICByZXR1cm4gcmVzdWx0VmFsaWRhdGUgJiYgcmVzdWx0VmFsaWRhdGVCYXNlO1xuICAgIH1cblxuICAgIF92YWxpZGF0ZUZvcm1Db250cm9sKGZpZWxkUGF0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jcnVkRm9ybS52YWxpZGF0ZUZvcm1Db250cm9sKGZpZWxkUGF0aCk7XG4gICAgfVxuXG4gICAgX2NsZWFuRm9ybSgpIHtcbiAgICAgICAgdGhpcy5jcnVkRm9ybS5jbGVhbigpO1xuICAgIH1cblxuICAgIF90cmlnZ2VyQ29udHJvbENoYW5nZShmaWVsZFBhdGgpIHtcbiAgICAgICAgdGhpcy5jcnVkRm9ybS50cmlnZ2VyQ2hhbmdlKGZpZWxkUGF0aCk7XG4gICAgfVxuXG4gICAgb25CZWZvcmVTYXZlKCk6IHZvaWQgfCBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB9XG5cbiAgICBvbkFmdGVyU2F2ZShyZXNwb25zZTogUmVzcG9uc2VSZXN1bHQpOiB2b2lkIHwgUHJvbWlzZTxib29sZWFuPiB7XG4gICAgfVxuXG5cbiAgICBhc3luYyBvbkFmdGVyR2V0RGV0YWlsKGRhdGE/OiBhbnlbXSkge1xuXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBvbkluc2VydCgpIHtcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0VmFsdWUodGhpcy5tb2RlbC5kYXRhKTtcbiAgICAgICAgaWYgKHRoaXMuZHluYW1pY0NvbnRyb2xbRmllbGREZWZpbmVJc1Rhc2tGb3JtQ29udHJvbF1cbiAgICAgICAgICAgICYmIHRoaXMuZHluYW1pY0NvbnRyb2xbRmllbGREZWZpbmVJc1Rhc2tGb3JtQ29udHJvbF0uX2NvbXBvbmVudFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IHRhc2tGb3JtID0gdGhpcy5keW5hbWljQ29udHJvbFtGaWVsZERlZmluZUlzVGFza0Zvcm1Db250cm9sXS5fY29tcG9uZW50O1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0VmFsaWRhdGVGb3JtVGFzayA9IGF3YWl0IHRhc2tGb3JtLl9nZXRSZXN1bHRWYWxpZGF0ZSgpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdFZhbGlkYXRlRm9ybVRhc2spIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGEuaXRlbUNvbmdWaWVjID0gdGFza0Zvcm0ubW9kZWwuZGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tb2RlbC5kYXRhLmNyZWF0ZVRhc2tJbnN0ZWFkKSB7XG4gICAgICAgICAgICAvLyByZXNldCBmaWVsZCBfV29ya2Zsb3dDb2RlIMSR4buDIGJhY2tlbmQga2jDtG5nIGNo4bqheSBxdXkgdHLDrG5oIGLhuqNuIGdoaVxuICAgICAgICAgICAgdGhpcy5tb2RlbC5kYXRhW0ZpZWxkV29ya2Zsb3dDb2RlSW5DcnVkRm9ybV0gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0IHRoaXMuY3JlYXRlQ29uZmlybUlmUmVxdWlyZSgpO1xuICAgICAgICBpZiAoIWNvbmZpcm1lZCkgcmV0dXJuO1xuICAgICAgICBhd2FpdCB0aGlzLl9pbnNlcnQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUNvbmZpcm1JZlJlcXVpcmUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1lc3NhZ2VDb25maXJtU2F2ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93Q29uZmlybSh0aGlzLm1lc3NhZ2VDb25maXJtU2F2ZSlcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXModHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9pbnNlcnQoKSB7XG4gICAgICAgIHRoaXMuZ2V0UHJvbWlzZUFjdGlvbkluc2VydCgpXG4gICAgICAgICAgICAudGhlbihhc3luYyByZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93TWVzc2FnZUFmdGVySW5zZXJ0KHJlc3BvbnNlLnN1Y2Nlc3MsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGEuaWQgPSByZXNwb25zZS5kYXRhO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJTYXZlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vblNhdmVkLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHRoaXMubW9kZWwuZGF0YS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2xvc2VGb3JtOiB0aGlzLmlzQ2xvc2VGb3JtXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVJbnNlcnRFcnJvcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWVycm9yLmVycm9yLnN1Y2Nlc3MgJiYgZXJyb3IuZXJyb3IuZXJyb3JDaGVja0V4aXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd01lc3NhZ2VBZnRlckluc2VydChmYWxzZSwgZXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0UHJvbWlzZUFjdGlvbkluc2VydCgpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UucG9zdCh0aGlzLm1vZGVsLmRhdGEsIHRoaXMuaW5zZXJ0UGx1c1VybCk7XG4gICAgfVxuXG4gICAgaGFuZGxlSW5zZXJ0RXJyb3IoKSB7XG5cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIG9uVXBkYXRlKCkge1xuICAgICAgICB0aGlzLnNldERlZmF1bHRWYWx1ZSh0aGlzLm1vZGVsLmRhdGEpO1xuICAgICAgICB0aGlzLmdldFByb21pc2VBY3Rpb25VcGRhdGUoKVxuICAgICAgICAgICAgLnRoZW4oYXN5bmMgcmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd01lc3NhZ2VBZnRlclVwZGF0ZShyZXNwb25zZS5zdWNjZXNzLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5vbkFmdGVyU2F2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25TYXZlZC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB0aGlzLm1vZGVsLmRhdGEuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNDbG9zZUZvcm06IHRoaXMuaXNDbG9zZUZvcm1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVVwZGF0ZUVycm9yKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZXJyb3IuZXJyb3Iuc3VjY2VzcyAmJiBlcnJvci5lcnJvci5lcnJvckNoZWNrRXhpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93TWVzc2FnZUFmdGVyVXBkYXRlKGZhbHNlLCBlcnJvcik7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5sb2dTZXR0aW5nLmlzRW5hYmxlTG9nKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ1NldHRpbmcuYXJyVmFsdWVBZnRlclVwZGF0ZSA9IFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlVXBkYXRlRXJyb3IoKSB7XG5cbiAgICB9XG5cbiAgICBnZXRQcm9taXNlQWN0aW9uVXBkYXRlKCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5wdXQodGhpcy5tb2RlbC5kYXRhLmlkLnRvU3RyaW5nKCksIHRoaXMubW9kZWwuZGF0YSwgdGhpcy51cGRhdGVQbHVzVXJsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldERlZmF1bHRWYWx1ZShtb2RlbCkge1xuICAgICAgICBpZiAobW9kZWwuaXNCdWlsZEluID09PSBudWxsIHx8IG1vZGVsLmlzQnVpbGRJbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBtb2RlbC5pc0J1aWxkSW4gPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb2RlbC5pc0J1aWxkSW5BbGwgPT09IG51bGwgfHwgbW9kZWwuaXNCdWlsZEluQWxsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG1vZGVsLmlzQnVpbGRJbkFsbCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBhcmVudFNldHRpbmc/LmVuYWJsZVJlb3JkZXJSb3cgJiYgdGhpcy5wYXJlbnRTZXR0aW5nLmNvbHVtblNldHRpbmcuc29ydEZpZWxkKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGFbdGhpcy5wYXJlbnRTZXR0aW5nLmNvbHVtblNldHRpbmcuc29ydEZpZWxkXSA/Pz0gdGhpcy5wYXJlbnRNb2RlbC50b3RhbCArIDE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNob3dNZXNzYWdlQWZ0ZXJJbnNlcnQoaXNTdWNjZXNzOiBib29sZWFuID0gZmFsc2UsIGVycm9yPzogYW55KSB7XG4gICAgICAgIGlmIChpc1N1Y2Nlc3MpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5tZXNzYWdlSW5zZXJ0U3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZUluc2VydFN1Y2Nlc3MgPSB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ01FU1NBR0UuSU5TRVJUX0RBVEFfU1VDQ0VTUycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMubWVzc2FnZUluc2VydFN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1N1Y2Nlc3ModGhpcy5tZXNzYWdlSW5zZXJ0U3VjY2Vzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVJlc3BvbnNlRXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG93TWVzc2FnZUFmdGVyVXBkYXRlKGlzU3VjY2VzczogYm9vbGVhbiA9IGZhbHNlLCBlcnJvcj86IGFueSkge1xuICAgICAgICBpZiAoaXNTdWNjZXNzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMubWVzc2FnZVVwZGF0ZVN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VVcGRhdGVTdWNjZXNzID0gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdNRVNTQUdFLlVQREFURV9EQVRBX1NVQ0NFU1MnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm1lc3NhZ2VVcGRhdGVTdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKHRoaXMubWVzc2FnZVVwZGF0ZVN1Y2Nlc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVSZXNwb25zZUVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZVJlc3BvbnNlRXJyb3IoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyhlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChlcnJvci5lcnJvcikge1xuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKGVycm9yLmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQ8OzIGzhu5dpIHjhuqN5IHJhLCBsacOqbiBo4buHIHF14bqjbiB0cuG7iyB2acOqbiDEkeG7gyBiaeG6v3QgdGjDqm0gY2hpIHRp4bq/dCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgb25Gb3JtSW5pdGlhbGl6ZWQoZGF0YTogRXZlbnREYXRhKSB7XG5cbiAgICB9XG5cbiAgICBfaGFuZGxlQWZ0ZXJUcmluaEt5KGV2dCkge1xuICAgICAgICBkZWxldGUgdGhpcy5tb2RlbC5kYXRhW0tleUZsYXNoU2hvd107XG4gICAgICAgIHRoaXMuX2hhbmRsZUNhbmNlbChldnQpO1xuICAgIH1cblxuICAgIF9oYW5kbGVTYXZlKGV2dCkge1xuICAgICAgICBpZiAodGhpcy5tb2RlbC5zdWJtaXR0aW5nKSByZXR1cm47XG4gICAgICAgIHRoaXMubW9kZWwuc3VibWl0dGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2F2ZSgpO1xuICAgICAgICB0aGlzLm9uU2F2ZS5lbWl0KGV2dCk7XG4gICAgfVxuXG4gICAgX2hhbmRsZUNhbmNlbChldnQpIHtcbiAgICAgICAgdGhpcy5vbkNhbmNlbC5lbWl0KGV2dCk7XG4gICAgfVxuXG4gICAgX2hhbmRsZU1lc3NhZ2UoZXZ0KSB7XG4gICAgICAgIHRoaXMub25NZXNzYWdlLmVtaXQoZXZ0KTtcbiAgICB9XG5cbiAgICBfc2V0RGlzYWJsZUNvbnRyb2wodW5pcXVlRmllbGQsIGlzRGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5jcnVkRm9ybS5mb3JtQ29udHJvbHNbdW5pcXVlRmllbGRdLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG5cbiAgICBfc2V0SGlkZGVuQ29udHJvbCh1bmlxdWVGaWVsZCwgaXNIaWRkZW4pIHtcbiAgICAgICAgdGhpcy5jcnVkRm9ybS5mb3JtQ29udHJvbHNbdW5pcXVlRmllbGRdLmhpZGRlbiA9IGlzSGlkZGVuO1xuICAgIH1cblxuICAgIF9nZXRGb3JtU3RhdGUoKTogRm9ybVN0YXRlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwuZm9ybVN0YXRlO1xuICAgIH1cblxuICAgIF9pc0Zvcm1BZGROZXcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRGb3JtU3RhdGUoKSA9PSBGb3JtU3RhdGUuQUREO1xuICAgIH1cblxuICAgIF9pc0Zvcm1FZGl0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0Rm9ybVN0YXRlKCkgPT0gRm9ybVN0YXRlLkVESVQ7XG4gICAgfVxuXG4gICAgX2lzRm9ybVZpZXcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRGb3JtU3RhdGUoKSA9PSBGb3JtU3RhdGUuVklFVztcbiAgICB9XG59XG4iXX0=
911
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1mb3JtLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvY2xhc3Nlcy9iYXNlL2RhdGEtZm9ybS1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUgsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osUUFBUSxFQUNSLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFELE9BQU8sRUFBbUIsaUJBQWlCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUN6RyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLDRCQUE0QixFQUFFLDJCQUEyQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUs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IERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEZpbGVVcGxvYWQgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9maWxldXBsb2FkJztcbmltcG9ydCB7IENvbnRyb2xUcmVlTm9kZSwgQ3J1ZEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2NydWQvY3J1ZC1mb3JtL2NydWQtZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ09ORklHX0NBTEVOREFSX1ZJRVROQU1FU0UgfSBmcm9tICcuLi8uLi9jb25maWdzL2NhbGVuZGFyLmNvbmZpZyc7XG5pbXBvcnQgeyBDb21DdHhDb25zdGFudHMgfSBmcm9tICcuLi8uLi9jb25maWdzL2NvbXBvbmVudC1jb250ZXh0LmNvbnN0YW50JztcbmltcG9ydCB7IERhdGFTb3VyY2VCb29sZWFuLCBGaWVsZERlZmluZUlzVGFza0Zvcm1Db250cm9sLCBGaWVsZFdvcmtmbG93Q29kZUluQ3J1ZEZvcm0gfSBmcm9tICcuLi8uLi9jb25zdC9jb21tb24nO1xuaW1wb3J0IHsgUGVybWlzc2lvbkJhc2UgfSBmcm9tICcuLi8uLi9lbnVtcy9jb21tb24nO1xuaW1wb3J0IHsgRmlsdGVyIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyaWQtaW5mbyc7XG5pbXBvcnQgeyBSZXNwb25zZVJlc3VsdCB9IGZyb20gJy4uLy4uL21vZGVscy9yZXNwb25zZS1yZXN1bHQnO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbW1vbi5zZXJ2aWNlJztcbmltcG9ydCB7IENydWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY3J1ZC5zZXJ2aWNlJztcbmltcG9ydCB7IEN1c3RvbVJvdXRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jdXN0b20tcm91dGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRG9tU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RvbS5zZXJ2aWNlJztcbmltcG9ydCB7IEVudGl0eU1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VudGl0eS1tZXRhZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IE1hc3RlckRhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWFzdGVyLWRhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBNb2R1bGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbW9kdWxlLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vdGlmaWVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91c2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9ybVN0YXRlLCBLZXlGbGFzaFNob3cgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgaXNMaXRlcmFsT2JqZWN0LCBpc1ZhbGlkRGF0ZSB9IGZyb20gJy4uL2Vudmlyb25tZW50LXNjaGVtYSc7XG5pbXBvcnQge1xuICAgIEF1dG9Db21wbGV0ZVBpY2tlckNvbnRyb2xTY2hlbWEsXG4gICAgQ2hlY2tib3hDb250cm9sU2NoZW1hLFxuICAgIENvbnRhaW5lclNjaGVtYSxcbiAgICBDcnVkRm9ybURhdGEsXG4gICAgQ3J1ZEZvcm1TZXR0aW5nLFxuICAgIENydWRMaXN0U2V0dGluZyxcbiAgICBDdXN0b21Db250cm9sU2NoZW1hLFxuICAgIERhdGVUaW1lQ29udHJvbFNjaGVtYSxcbiAgICBEcm9wZG93bkNvbnRyb2xTY2hlbWEsXG4gICAgRWRpdG9yQ29udHJvbFNjaGVtYSxcbiAgICBFdmVudERhdGEsXG4gICAgRXZlbnRUeXBlLFxuICAgIEZpbGVNYW5hZ2VyQ29udHJvbFNjaGVtYSxcbiAgICBGb3JtQ29udHJvbEJhc2UsXG4gICAgTG9nQ29sdW1uLFxuICAgIExvZ1NldHRpbmcsXG4gICAgTWFza0NvbnRyb2xTY2hlbWEsXG4gICAgT3BlcmF0b3IsXG4gICAgU3dpdGNoQ29udHJvbFNjaGVtYSxcbiAgICBUYWJsZVNjaGVtYSxcbiAgICBUZXh0QXJlYUNvbnRyb2xTY2hlbWEsXG4gICAgVGl0bGVTY2hlbWFcbn0gZnJvbSAnLi4vZm9ybS1zY2hlbWEnO1xuaW1wb3J0IHsgQ29tcG9uZW50QmFzZVdpdGhCdXR0b24gfSBmcm9tICcuL2NvbXBvbmVudC1iYXNlLXdpdGgtYnV0dG9uJztcbmltcG9ydCB7IFJlcXVpcmVkVmFsaWRhdG9yIH0gZnJvbSAnLi92YWxpZGF0b3JzJztcbmltcG9ydCB7IERlY2ltYWxQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRGF0YUZvcm1CYXNlIGV4dGVuZHMgQ29tcG9uZW50QmFzZVdpdGhCdXR0b24gaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG5cbiAgICBAVmlld0NoaWxkKENydWRGb3JtQ29tcG9uZW50LCB7IHN0YXRpYzogZmFsc2UgfSkgY3J1ZEZvcm06IENydWRGb3JtQ29tcG9uZW50O1xuICAgIEBWaWV3Q2hpbGQoJ2Zvcm1FbGVtZW50JywgeyBzdGF0aWM6IHRydWUgfSkgZm9ybUVsZW1lbnQ6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgncFVwbG9hZCcsIHsgc3RhdGljOiB0cnVlIH0pIHBVcGxvYWQ6IEZpbGVVcGxvYWQ7XG5cbiAgICBASW5wdXQoKSBwYXJlbnRTZXR0aW5nOiBDcnVkTGlzdFNldHRpbmc7XG4gICAgQElucHV0KCkgbW9kZWw6IENydWRGb3JtRGF0YSA9IG5ldyBDcnVkRm9ybURhdGEoKTtcbiAgICBASW5wdXQoKSBmb3JjZU9ubHlWaWV3OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBAT3V0cHV0KCkgb25TYXZlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvblNhdmVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkNhbmNlbDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25NZXNzYWdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkZvcm1SZWFkeTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25EYXRhQmluZGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgZG9Ob3RDaGVja0Jhc2VTZXJ2aWNlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBub3RDb25maWdCYXNlU2VydmljZU1lc3NhZ2UgPSAnQ2jGsGEgY+G6pXUgaMOsbmggQ1JVRCBiYXNlIHNlcnZpY2UnO1xuICAgIG1lc3NhZ2VJbnNlcnRTdWNjZXNzID0gJyc7XG4gICAgbWVzc2FnZVVwZGF0ZVN1Y2Nlc3MgPSAnJztcbiAgICBzZXR0aW5nOiBDcnVkRm9ybVNldHRpbmcgPSBuZXcgQ3J1ZEZvcm1TZXR0aW5nKCk7XG4gICAgbG9nU2V0dGluZzogTG9nU2V0dGluZyA9IG5ldyBMb2dTZXR0aW5nKCk7XG5cbiAgICB2aSA9IENPTkZJR19DQUxFTkRBUl9WSUVUTkFNRVNFO1xuXG4gICAgZm9ybUNvbnRyb2xzOiBhbnk7XG4gICAgZm9ybUNvbnRyb2xzTGlzdCA9IHt9O1xuICAgIGVudmlyb25tZW50OiBhbnkgPSB7fTtcbiAgICBtZFdpZHRoV29ya2Zsb3c6IG51bWJlcjtcblxuICAgIGF1dG9HZXREZXRhaWwgPSB0cnVlO1xuICAgIGF1dG9TYXZlID0gdHJ1ZTtcbiAgICBpc0Nsb3NlRm9ybSA9IHRydWU7XG4gICAgbWVzc2FnZUNvbmZpcm1TYXZlOiBzdHJpbmc7XG4gICAgc2F2aW5nID0gZmFsc2U7XG4gICAgZ2V0RGV0YWlsUGx1c1VybCA9IG51bGw7XG4gICAgaW5zZXJ0UGx1c1VybCA9IG51bGw7XG4gICAgdXBkYXRlUGx1c1VybCA9IG51bGw7XG4gICAgZHluYW1pY0NvbnRyb2w6IGFueSA9IHt9O1xuICAgIHNldFZhbGlkYXRlRm9ybSA9IHRydWU7XG4gICAgaGF2ZUVudGl0eU1ldGFkYXRhQVBJID0gdHJ1ZTtcbiAgICBpc0Jhc2VNb2RlbCA9IHRydWU7XG4gICAgYXV0b0dlbmVyYXRlSWQgPSB0cnVlO1xuICAgIHB1YmxpYyBfX2lzRm9ybVZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHB1YmxpYyBfbm90aWZpZXJTZXJ2aWNlOiBOb3RpZmllclNlcnZpY2U7XG4gICAgcHVibGljIF9tYXN0ZXJEYXRhU2VydmljZTogTWFzdGVyRGF0YVNlcnZpY2U7XG4gICAgcHVibGljIF9yb3V0ZXI6IFJvdXRlcjtcbiAgICBwdWJsaWMgX2FjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZTtcbiAgICBwdWJsaWMgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2U7XG4gICAgcHVibGljIF9jdXN0b21Sb3V0ZXJTZXJ2aWNlOiBDdXN0b21Sb3V0ZXJTZXJ2aWNlO1xuICAgIHB1YmxpYyBfY3J1ZFNlcnZpY2U6IENydWRTZXJ2aWNlO1xuICAgIHB1YmxpYyBfZG9tU2VydmljZTogRG9tU2VydmljZTtcbiAgICBwdWJsaWMgX2VudGl0eU1ldGFkYXRhU2VydmljZTogRW50aXR5TWV0YWRhdGFTZXJ2aWNlO1xuICAgIHB1YmxpYyBfdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlO1xuICAgIHB1YmxpYyBfbnVtYmVyUGlwZTogRGVjaW1hbFBpcGU7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgX2luamVjdG9yOiBJbmplY3RvclxuICAgICkge1xuICAgICAgICBzdXBlcihfaW5qZWN0b3IpO1xuICAgICAgICBjb25zdCBtb2R1bGVDb25maWdTZXJ2aWNlID0gX2luamVjdG9yLmdldChNb2R1bGVDb25maWdTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5lbnZpcm9ubWVudCA9IG1vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQ7XG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9udW1iZXJQaXBlID0gdGhpcy5faW5qZWN0b3IuZ2V0KERlY2ltYWxQaXBlKTtcbiAgICAgICAgdGhpcy5fbWFzdGVyRGF0YVNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoTWFzdGVyRGF0YVNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9yb3V0ZXIgPSB0aGlzLl9pbmplY3Rvci5nZXQoUm91dGVyKTtcbiAgICAgICAgdGhpcy5fYWN0aXZhdGVkUm91dGUgPSB0aGlzLl9pbmplY3Rvci5nZXQoQWN0aXZhdGVkUm91dGUpO1xuICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9jdXN0b21Sb3V0ZXJTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEN1c3RvbVJvdXRlclNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9jcnVkU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChDcnVkU2VydmljZSk7XG4gICAgICAgIHRoaXMuX2RvbVNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoRG9tU2VydmljZSk7XG4gICAgICAgIHRoaXMuX2VudGl0eU1ldGFkYXRhU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChFbnRpdHlNZXRhZGF0YVNlcnZpY2UpO1xuICAgICAgICB0aGlzLl91c2VyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChVc2VyU2VydmljZSk7XG4gICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ29tbW9uU2VydmljZSk7XG5cbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgLy8gdGhpcy5jaGVja1Blcm1pc3Npb24odGhpcy5tb2RlbC5kYXRhLmJhc2VQZXJtaXNzaW9uKTtcblxuICAgICAgICBjb25zdCBkZWZhdWx0U2V0dGluZyA9IG5ldyBDcnVkRm9ybVNldHRpbmcoKTtcbiAgICAgICAgY29uc3QgY2F1SGluaE5naGllcFZ1ID0gdGhpcy5lbnZpcm9ubWVudD8uY2F1SGluaE5naGllcFZ1O1xuICAgICAgICBpZiAoY2F1SGluaE5naGllcFZ1KSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBjYXVIaW5oTmdoaWVwVnUpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdFNldHRpbmdba2V5XSA9PSB0aGlzLnNldHRpbmdba2V5XVxuICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLnNldHRpbmdba2V5XSAhPSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgJiYgY2F1SGluaE5naGllcFZ1W2tleV0gIT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICYmIHRoaXMuc2V0dGluZ1trZXldICE9IGNhdUhpbmhOZ2hpZXBWdVtrZXldKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ1trZXldID0gY2F1SGluaE5naGllcFZ1W2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB9XG4gICAgY2hlY2tQZXJtaXNzaW9uKGJhc2VQZXJtaXNzaW9uKSB7XG4gICAgICAgIGlmICh0aGlzLmlzQmFzZU1vZGVsKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tb2RlbC5mb3JtU3RhdGUgPT0gRm9ybVN0YXRlLkVESVQpIHtcbiAgICAgICAgICAgICAgICBpZiAoYmFzZVBlcm1pc3Npb24gJiBQZXJtaXNzaW9uQmFzZS5FRElUKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZm9ybVN0YXRlID0gRm9ybVN0YXRlLkVESVQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmZvcm1TdGF0ZSA9IEZvcm1TdGF0ZS5WSUVXO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1vZGVsLmRhdGEuaXNCdWlsZEluQWxsICYmICF0aGlzLl91c2VyU2VydmljZS5pc1N1cGVyVXNlcigpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZm9ybVN0YXRlID0gRm9ybVN0YXRlLlZJRVc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fX2lzRm9ybVZpZXcgPSB0aGlzLl9pc0Zvcm1WaWV3KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRTY2hlbWFCYXNlKCkge1xuICAgICAgICBpZiAodGhpcy5fdXNlclNlcnZpY2UuaXNTdXBlclVzZXIoKVxuICAgICAgICAgICAgJiYgdGhpcy5tb2RlbFxuICAgICAgICAgICAgJiYgdGhpcy5tb2RlbC5kYXRhLmhhc0J1aWxkSW5cbiAgICAgICAgICAgICYmIHRoaXMuc2V0dGluZy5zY2hlbWFcbiAgICAgICAgICAgICYmIHRoaXMuc2V0dGluZy5zY2hlbWEubGVuZ3RoID4gMFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5zY2hlbWEucHVzaChcbiAgICAgICAgICAgICAgICBuZXcgU3dpdGNoQ29udHJvbFNjaGVtYSh7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiAnaXNCdWlsZEluJyxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdLaMOzYSBtw6MnLFxuICAgICAgICAgICAgICAgICAgICBtZFdpZHRoOiA0XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuc2NoZW1hLnB1c2goXG4gICAgICAgICAgICAgICAgbmV3IFN3aXRjaENvbnRyb2xTY2hlbWEoe1xuICAgICAgICAgICAgICAgICAgICBmaWVsZDogJ2lzQnVpbGRJbkFsbCcsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnS2jDs2EgYuG6o24gZ2hpJyxcbiAgICAgICAgICAgICAgICAgICAgbWRXaWR0aDogNFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucGFyZW50U2V0dGluZ1xuICAgICAgICAgICAgJiYgdGhpcy5faXNGb3JtQWRkTmV3KClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBsZXQgZGF0YVNvdXJjZSA9IFtdLCBkZWZhdWx0VmFsdWUgPSBudWxsLCBoYXNXb3JrZmxvdyA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgaW5pdERhdGFUYXNrRm9ybTogYW55ID0ge307XG4gICAgICAgICAgICBpZiAodGhpcy5wYXJlbnRTZXR0aW5nLndvcmtmbG93U2V0dGluZ05ldyAmJiB0aGlzLnBhcmVudFNldHRpbmcud29ya2Zsb3dTZXR0aW5nTmV3LndvcmtmbG93cy5sZW5ndGggPiAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlID0gdGhpcy5wYXJlbnRTZXR0aW5nLndvcmtmbG93U2V0dGluZ05ldy53b3JrZmxvd3M7XG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gdGhpcy5wYXJlbnRTZXR0aW5nLndvcmtmbG93U2V0dGluZ05ldy53b3JrZmxvd0NvZGU7XG4gICAgICAgICAgICAgICAgaGFzV29ya2Zsb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZGF0YS5jcmVhdGVUYXNrSW5zdGVhZCA9IHRoaXMucGFyZW50U2V0dGluZy53b3JrZmxvd1NldHRpbmdOZXcuY3JlYXRlVGFza0luc3RlYWQ7XG4gICAgICAgICAgICAgICAgaW5pdERhdGFUYXNrRm9ybS5pZExvYWlDb25nVmllYyA9IHRoaXMucGFyZW50U2V0dGluZy53b3JrZmxvd1NldHRpbmdOZXcuaWRMb2FpQ29uZ1ZpZWNEZWZhdWx0O1xuICAgICAgICAgICAgICAgIGluaXREYXRhVGFza0Zvcm0uX190ZW1wbGF0ZVRhc2tOYW1lID0gdGhpcy5wYXJlbnRTZXR0aW5nLndvcmtmbG93U2V0dGluZ05ldy50ZW1wbGF0ZVRhc2tOYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5wYXJlbnRTZXR0aW5nLmlzV29ya2Zsb3dUcmVlKSB7XG4gICAgICAgICAgICAgICAgaGFzV29ya2Zsb3cgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGhhc1dvcmtmbG93KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5keW5hbWljQ29udHJvbFtGaWVsZERlZmluZUlzVGFza0Zvcm1Db250cm9sXSA9IG5ldyBDdXN0b21Db250cm9sU2NoZW1hKHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IEZpZWxkRGVmaW5lSXNUYXNrRm9ybUNvbnRyb2wsXG4gICAgICAgICAgICAgICAgICAgIG1kV2lkdGg6IDEyLFxuICAgICAgICAgICAgICAgICAgICBzaG93TGFiZWw6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBjbGFzczogJ25vLXBhZGRpbmcnLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBpbml0RGF0YVRhc2tGb3JtLFxuICAgICAgICAgICAgICAgICAgICBoaWRkZW5DaGVjazogKHJvb3RNb2RlbCkgPT4gIXJvb3RNb2RlbCB8fCAhcm9vdE1vZGVsLmNyZWF0ZVRhc2tJbnN0ZWFkXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLnNjaGVtYS5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBuZXcgRHJvcGRvd25Db250cm9sU2NoZW1hKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBGaWVsZFdvcmtmbG93Q29kZUluQ3J1ZEZvcm0sXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ1F1eSB0csOsbmggc+G7rSBk4bulbmcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlRmllbGQ6ICdjb2RlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogJ3RpdGxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1kV2lkdGg6IHRoaXMubWRXaWR0aFdvcmtmbG93IHx8IDEyLFxuICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlQ2FjaGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW5DaGVjazogKHJvb3RNb2RlbCkgPT4gIXJvb3RNb2RlbCB8fCByb290TW9kZWwuY3JlYXRlVGFza0luc3RlYWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZWQ6IGFzeW5jIChldnQ6IEV2ZW50RGF0YSkgPT4gYXdhaXQgdGhpcy5oYW5kbGVDaGFuZ2VXb3JrZmxvd0NvZGUoZXZ0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQWRqdXN0ZWRWYWx1ZTogYXN5bmMgKGV2dDogRXZlbnREYXRhKSA9PiBhd2FpdCB0aGlzLmhhbmRsZUNoYW5nZVdvcmtmbG93Q29kZShldnQpXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wYXJlbnRTZXR0aW5nLndvcmtmbG93U2V0dGluZ05ld1xuICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLnBhcmVudFNldHRpbmcud29ya2Zsb3dTZXR0aW5nTmV3LnRhc2tJbnNpZGVCdXNpbmVzc0Zvcm1cbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLnNjaGVtYS5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFRpdGxlU2NoZW1hKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnQ8O0bmcgdmnhu4djJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW5DaGVjazogKHJvb3RNb2RlbCkgPT4gIXJvb3RNb2RlbCB8fCAhcm9vdE1vZGVsLmNyZWF0ZVRhc2tJbnN0ZWFkXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHluYW1pY0NvbnRyb2xbRmllbGREZWZpbmVJc1Rhc2tGb3JtQ29udHJvbF1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBoYW5kbGVDaGFuZ2VXb3JrZmxvd0NvZGUoZXZ0OiBFdmVudERhdGEpIHtcblxuICAgIH1cblxuICAgIHNldFdvcmtmbG93RGF0YXNvdXJjZShldnQ6IEV2ZW50RGF0YSwgd29ya2Zsb3dTZXR0aW5nKSB7XG4gICAgICAgIGV2dC5mb3JtQ29udHJvbHNbRmllbGRXb3JrZmxvd0NvZGVJbkNydWRGb3JtXS5kYXRhU291cmNlID0gd29ya2Zsb3dTZXR0aW5nLndvcmtmbG93cztcbiAgICAgICAgaWYgKCFldnQucm9vdE1vZGVsW0ZpZWxkV29ya2Zsb3dDb2RlSW5DcnVkRm9ybV0pIHtcbiAgICAgICAgICAgIGV2dC5yb290TW9kZWxbRmllbGRXb3JrZmxvd0NvZGVJbkNydWRGb3JtXSA9IHdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIXdvcmtmbG93U2V0dGluZy53b3JrZmxvd3Muc29tZSh4ID0+IHguY29kZSA9PSBldnQucm9vdE1vZGVsW0ZpZWxkV29ya2Zsb3dDb2RlSW5DcnVkRm9ybV0pKSB7XG4gICAgICAgICAgICBldnQucm9vdE1vZGVsW0ZpZWxkV29ya2Zsb3dDb2RlSW5DcnVkRm9ybV0gPSB3b3JrZmxvd1NldHRpbmcud29ya2Zsb3dDb2RlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgX2hhbmRsZUZvcm1SZWFkeShmb3JtRXZlbnQ6IEV2ZW50RGF0YSkge1xuICAgICAgICBhd2FpdCB0aGlzLl9faGFuZGxlRm9ybVJlYWR5KGZvcm1FdmVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfX2hhbmRsZUZvcm1SZWFkeShmb3JtRXZlbnQ6IEV2ZW50RGF0YSkge1xuICAgICAgICBpZiAoIXRoaXMuZG9Ob3RDaGVja0Jhc2VTZXJ2aWNlICYmICF0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyh0aGlzLm5vdENvbmZpZ0Jhc2VTZXJ2aWNlTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbHMgPSBmb3JtRXZlbnQuZm9ybUNvbnRyb2xzO1xuICAgICAgICBhd2FpdCB0aGlzLm9uRm9ybUluaXRpYWxpemVkKGZvcm1FdmVudCk7XG4gICAgICAgIHRoaXMub25Gb3JtUmVhZHkuZW1pdCh7XG4gICAgICAgICAgICBlbGVtZW50OiB0aGlzLFxuICAgICAgICAgICAgc2V0dGluZzogdGhpcy5zZXR0aW5nLFxuICAgICAgICAgICAgZm9ybUV2ZW50XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl90cmlnZ2VyR2V0RGV0YWlsKCk7XG4gICAgfVxuXG4gICAgX3RyaWdnZXJHZXREZXRhaWwoKSB7XG4gICAgICAgIGlmICh0aGlzLmF1dG9HZXREZXRhaWwpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0RGV0YWlsKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jcnVkRm9ybSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3J1ZEZvcm0uaW5pdENvbnRyb2xEZWZhdWx0VmFsdWVGcm9tRXh0ZXJuYWwoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNydWRGb3JtLmZpcmVNb2RlbENoYW5nZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIG9uQmVmb3JlR2V0RGV0YWlsKCkge1xuICAgIH1cblxuICAgIGFzeW5jIGdldE9iamVjdERldGFpbCgpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UuZ2V0RGV0YWlsV2l0aFBlcm1pc3Npb24odGhpcy5tb2RlbC5kYXRhLmlkLCB0aGlzLm1vZGVsLmRhdGEucGlkLCB0aGlzLmdldERldGFpbFBsdXNVcmwpO1xuICAgIH1cblxuICAgIGFzeW5jIGdldERldGFpbEN1c3RvbSgpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZ2V0RGV0YWlsKCkge1xuICAgICAgICBjb25zdCByZXN1bHRDaGVjayA9IGF3YWl0IHRoaXMuZ2V0RGV0YWlsQ3VzdG9tKCk7XG4gICAgICAgIC8vIEtow7RuZyBvdmVycmlkZVxuICAgICAgICBpZiAocmVzdWx0Q2hlY2sgPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc0Zvcm1BZGROZXcoKSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMub25CZWZvcmVHZXREZXRhaWwoKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jcnVkRm9ybSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNydWRGb3JtLnNldElzTG9hZGVkRGF0YUVkaXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0T2JqZWN0RGV0YWlsKCk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5tb2RpZnlEZXRhaWxEYXRhKHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9wcm9jZXNzQWZ0ZXJHZXREYXRhKHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMub25BZnRlckdldERldGFpbChyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2dTZXR0aW5nLmlzRW5hYmxlTG9nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nU2V0dGluZy52YWx1ZUJlZm9yZVVwZGF0ZSA9IHRoaXMuX2NvbW1vblNlcnZpY2UuY2xvbmVPYmplY3QocmVzcG9uc2UuZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3J1ZEZvcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgRXZlbnREYXRhKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlOiB0aGlzLmNydWRGb3JtLl9yb290Tm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50VHlwZTogRXZlbnRUeXBlLkZPUk1fUkVBRFksXG4gICAgICAgICAgICAgICAgICAgICAgICBjcnVkRm9ybTogdGhpcy5jcnVkRm9ybVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5pbml0RGF0YUFkZChldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdERlZmF1bHRTZXR0aW5nRmlsZUNvbnRyb2woZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNydWRGb3JtLmluaXRDb250cm9sRGVmYXVsdFZhbHVlRnJvbUV4dGVybmFsKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3J1ZEZvcm0uZmlyZU1vZGVsQ2hhbmdlZCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBPdmVycmlkZSBjw6FjaCBs4bqleSBk4buvIGxp4buHdSBnZXREZXRhaWxcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0Q2hlY2suc3VjY2VzcyAmJiByZXN1bHRDaGVjay5kYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1vZGVsLmZvcm1TdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmZvcm1TdGF0ZSA9IEZvcm1TdGF0ZS5FRElUO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jcnVkRm9ybSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNydWRGb3JtLnNldElzTG9hZGVkRGF0YUVkaXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm1vZGlmeURldGFpbERhdGEocmVzdWx0Q2hlY2suZGF0YSk7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcHJvY2Vzc0FmdGVyR2V0RGF0YShyZXN1bHRDaGVjay5kYXRhKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJHZXREZXRhaWwocmVzdWx0Q2hlY2suZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmZvcm1TdGF0ZSA9IEZvcm1TdGF0ZS5BREQ7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3J1ZEZvcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgRXZlbnREYXRhKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlOiB0aGlzLmNydWRGb3JtLl9yb290Tm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50VHlwZTogJ2Zvcm1SZWFkeScsXG4gICAgICAgICAgICAgICAgICAgICAgICBjcnVkRm9ybTogdGhpcy5jcnVkRm9ybVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5pbml0RGF0YUFkZChldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdERlZmF1bHRTZXR0aW5nRmlsZUNvbnRyb2woZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNydWRGb3JtLmluaXRDb250cm9sRGVmYXVsdFZhbHVlRnJvbUV4dGVybmFsKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3J1ZEZvcm0uZmlyZU1vZGVsQ2hhbmdlZCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGluaXREYXRhQWRkKGV2dDogRXZlbnREYXRhKSB7IH1cblxuICAgIHByaXZhdGUgaW5pdERlZmF1bHRTZXR0aW5nRmlsZUNvbnRyb2woZXZ0OiBFdmVudERhdGEpIHtcbiAgICAgICAgaWYgKCFldnQucm9vdE1vZGVsLmlkICYmIHRoaXMuc2V0dGluZy5zY2hlbWEuc29tZShwID0+IChwIGluc3RhbmNlb2YgRmlsZU1hbmFnZXJDb250cm9sU2NoZW1hKSkpIHtcbiAgICAgICAgICAgIGV2dC5yb290TW9kZWwuaWQgPSB0aGlzLl9jb21tb25TZXJ2aWNlLmd1aWQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBo4bqjaSBn4buNaSBow6BtIG7DoHkga2hpIG92ZXJyaWRlIGdldERldGFpbFxuICAgICAqL1xuICAgIGFzeW5jIF9wcm9jZXNzQWZ0ZXJHZXREYXRhKGRhdGEpIHtcbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICBkYXRhID0ge307XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBEdXnhu4d0IGPDoWMgY29udHJvbCBkYXRldGltZSDEkeG7gyBjb252ZXJ0IHZhbHVlIHNhbmcgZGF0ZXRpbWVcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5zY2hlbWEuZm9yRWFjaChzY2hlbWEgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZml4RGF0ZVZhbHVlKHNjaGVtYSwgZGF0YSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhLl9fZGlzYWJsZUVkaXQgPSB0aGlzLm1vZGVsLmRhdGEuX19kaXNhYmxlRWRpdDtcblxuICAgICAgICAvLyBTZXQgYmFzZVBlcm1pc3Npb24gdOG7qyBjcnVkbGlzdFxuICAgICAgICBpZiAodGhpcy5tb2RlbC5kYXRhLmJhc2VQZXJtaXNzaW9uICYmIHRoaXMubW9kZWwuZGF0YS5iYXNlUGVybWlzc2lvbiA9PT0gUGVybWlzc2lvbkJhc2UuRlVMTCkge1xuICAgICAgICAgICAgZGF0YS5iYXNlUGVybWlzc2lvbiA9IHRoaXMubW9kZWwuZGF0YS5iYXNlUGVybWlzc2lvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubW9kZWwuZGF0YSA9IGRhdGE7XG4gICAgICAgIGlmIChkYXRhLnBpZCAmJiBkYXRhLnBpZCAhPSB0aGlzLmd1aWRFbXB0eSAmJiBkYXRhLmJhc2VQZXJtaXNzaW9uQnlQaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5jaGVja1Blcm1pc3Npb24oZGF0YS5iYXNlUGVybWlzc2lvbkJ5UGlkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tQZXJtaXNzaW9uKGRhdGEuYmFzZVBlcm1pc3Npb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZvcmNlT25seVZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMuX19pc0Zvcm1WaWV3ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuZm9ybVN0YXRlID0gRm9ybVN0YXRlLlZJRVc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jcnVkRm9ybSkge1xuICAgICAgICAgICAgdGhpcy5jcnVkRm9ybS5zd2l0Y2hWaWV3TW9kZSh0aGlzLl9faXNGb3JtVmlldyk7XG4gICAgICAgICAgICB0aGlzLmNydWRGb3JtLnN3aXRjaEZvcm1TdGF0ZUZvclVzZXJwaWNrZXIodGhpcy5faXNGb3JtQWRkTmV3KCkpO1xuICAgICAgICAgICAgdGhpcy5jcnVkRm9ybS5kYXRhID0gZGF0YTtcbiAgICAgICAgICAgIHRoaXMuY3J1ZEZvcm0uc2V0SXNMb2FkZWREYXRhRWRpdCh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2VcbiAgICAgICAgICAgICYmIHRoaXMuaGF2ZUVudGl0eU1ldGFkYXRhQVBJIC8vIHNldHRpbmcgxJHhu4MgZml4IGzhu5dpIGsgbG9hZCBkYyBlbnRpdHkgbWV0YWRhdGEgY2hvIGPGoSBj4bqldSB04buVIGNo4bupYyBzZXJ2aWNlXG4gICAgICAgICkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZW50aXR5TWV0YWRhdGFTZXJ2aWNlLmxvYWQodGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLCB0aGlzLmNvbnRleHQsIHRydWUpOyAvLyBmb3JjZSBsb2FkIMSR4buDIMSR4buNYyB04burIGNzZGxcbiAgICAgICAgICAgIGNvbnN0IGVuYWJsZVZlcnNpb24gPSB0aGlzLl9lbnRpdHlNZXRhZGF0YVNlcnZpY2UuZ2V0QnlDb2RlKCdlbmFibGVWZXJzaW9uJyk7XG4gICAgICAgICAgICBpZiAoZW5hYmxlVmVyc2lvbiA9PSAnMScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuZmlsdGVyQ2hlY2tFeGlzdEJ5VmVyc2lvbiA9IFtcbiAgICAgICAgICAgICAgICAgICAgbmV3IEZpbHRlcih7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogJ2NvZGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLm5vdEVxdWFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IEpTT04uc3RyaW5naWZ5KHRoaXMubW9kZWwuZGF0YS5jb2RlKVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRpc2FibGVCdWlsZEluRmllbGQoKTtcbiAgICAgICAgaWYgKHRoaXMubG9nU2V0dGluZy5pc0VuYWJsZUxvZykge1xuICAgICAgICAgICAgdGhpcy5nZXRMb2dWYWx1ZUFmdGVyTG9hZERldGFpbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0TG9nVmFsdWVBZnRlckxvYWREZXRhaWwoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjb250cm9sTmFtZSBvZiBPYmplY3Qua2V5cyh0aGlzLmZvcm1Db250cm9scykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jcnVkRm9ybS5mb3JtQ29udHJvbHNbY29udHJvbE5hbWVdO1xuICAgICAgICAgICAgICAgIGlmIChjb250cm9sTmFtZS5pbmNsdWRlcygnLicpIHx8IHRoaXMuY3J1ZEZvcm0uZm9ybUNvbnRyb2xzW2NvbnRyb2xOYW1lXT8uaGlkZGVuID09PSB0cnVlXG4gICAgICAgICAgICAgICAgICAgIHx8ICEoY29udHJvbCBpbnN0YW5jZW9mIEF1dG9Db21wbGV0ZVBpY2tlckNvbnRyb2xTY2hlbWEpKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ1NldHRpbmcuYXJyVmFsdWVBZnRlclVwZGF0ZS5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBuZXcgTG9nQ29sdW1uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBjb250cm9sLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGNvbnRyb2wubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUJlZm9yZTogY29udHJvbC5fY29tcG9uZW50LmRhdGFTb3VyY2UubWFwKHAgPT4gcC5sYWJlbCkuam9pbignLCAnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVBZnRlcjogJydcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCAyMDAwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpeERhdGVWYWx1ZShjb250cm9sLCBwYXJlbnRNb2RlbCwgcGFyZW50UGF0aD8pIHtcbiAgICAgICAgbGV0IF9wYXJlbnRQYXRoID0gY29udHJvbC5maWVsZDtcbiAgICAgICAgaWYgKHBhcmVudFBhdGggIT0gbnVsbCkgX3BhcmVudFBhdGggPSBwYXJlbnRQYXRoICsgJy4nICsgX3BhcmVudFBhdGg7XG5cbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBUYWJsZVNjaGVtYSkge1xuICAgICAgICAgICAgaWYgKCFwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSB8fCAhKHBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdIGluc3RhbmNlb2YgQXJyYXkpKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc3ViQ29udHJvbCBvZiBjb250cm9sLnJvd1RlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZml4RGF0ZVZhbHVlKHN1YkNvbnRyb2wsIGl0ZW0sIF9wYXJlbnRQYXRoICsgJ1snICsgaSArICddJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgQ29udGFpbmVyU2NoZW1hKSB7XG4gICAgICAgICAgICBpZiAocGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0gPT0gbnVsbCB8fCAhaXNMaXRlcmFsT2JqZWN0KHBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdKSkge1xuICAgICAgICAgICAgICAgIHBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgc3ViQ29udHJvbCBvZiBjb250cm9sLmNvbnRyb2xzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maXhEYXRlVmFsdWUoc3ViQ29udHJvbCwgcGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0sIF9wYXJlbnRQYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRGF0ZVRpbWVDb250cm9sU2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEocGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0gaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbnRyb2wudGltZU9ubHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShTdHJpbmcocGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkRGF0ZShkYXRlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdID0gZGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdID0gdGhpcy5fY29tbW9uU2VydmljZS5nZXRUaW1lKHBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZGlzYWJsZUJ1aWxkSW5GaWVsZCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9pc0Zvcm1BZGROZXcoKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMubW9kZWwuZGF0YS5pc0J1aWxkSW5BbGwgJiYgIXRoaXMuX3VzZXJTZXJ2aWNlLmlzU3VwZXJVc2VyKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuc2NoZW1hLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2FkZFJlcXVpcmVkVmFsaWRhdG9yKHNjaGVtYTogRm9ybUNvbnRyb2xCYXNlKSB7XG4gICAgICAgIGxldCBleGlzdCA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IHZhbGlkYXRvciBvZiBzY2hlbWEudmFsaWRhdG9ycykge1xuICAgICAgICAgICAgaWYgKHZhbGlkYXRvciBpbnN0YW5jZW9mIFJlcXVpcmVkVmFsaWRhdG9yKSB7XG4gICAgICAgICAgICAgICAgZXhpc3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghZXhpc3QpIHtcbiAgICAgICAgICAgIHNjaGVtYS52YWxpZGF0b3JzLnB1c2gobmV3IFJlcXVpcmVkVmFsaWRhdG9yKCkpO1xuICAgICAgICB9XG4gICAgICAgIHNjaGVtYS5yZXF1aXJlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgX3JlbW92ZVJlcXVpcmVkVmFsaWRhdG9yKHNjaGVtYTogRm9ybUNvbnRyb2xCYXNlKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRvcnMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCB2YWxpZGF0b3Igb2Ygc2NoZW1hLnZhbGlkYXRvcnMpIHtcbiAgICAgICAgICAgIGlmICh2YWxpZGF0b3IgaW5zdGFuY2VvZiBSZXF1aXJlZFZhbGlkYXRvcikge1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2godmFsaWRhdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzY2hlbWEudmFsaWRhdG9ycyA9IHZhbGlkYXRvcnM7XG4gICAgICAgIHNjaGVtYS5yZXF1aXJlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIF9zZXRNb2RlbFZhbHVlKGZpZWxkOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuY3J1ZEZvcm0uX3Jvb3ROb2RlLmdldE5vZGVCeVBhdGgoZmllbGQpO1xuICAgICAgICB0aGlzLl9zZXRNb2RlbFZhbHVlQnlOb2RlKG5vZGUsIHZhbHVlKTtcbiAgICB9XG5cbiAgICBfc2V0TW9kZWxWYWx1ZUJ5Tm9kZShub2RlOiBDb250cm9sVHJlZU5vZGUsIHZhbHVlOiBhbnkpIHtcbiAgICAgICAgbm9kZS5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMuY3J1ZEZvcm0uZmlyZU1vZGVsQ2hhbmdlZCgpO1xuICAgIH1cblxuICAgIGFzeW5jIG1vZGlmeURldGFpbERhdGEoZGF0YSkge1xuICAgIH1cblxuICAgIF90cmlnZ2VyU2F2ZSgpIHtcbiAgICAgICAgdGhpcy5zYXZlKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgb25BZnRlckdldExvZ1ZhbHVlKCkge1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2luZ2xlTGFiZWwoY29udHJvbCwgZGF0YVNvdXJjZSwgdmFsdWVQYXJhbSkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gZGF0YVNvdXJjZS5maW5kKHAgPT4gcC52YWx1ZVtjb250cm9sLnZhbHVlRmllbGRdID09IHZhbHVlUGFyYW0pO1xuICAgICAgICBpZiAoISFyZXN1bHQpIHtcbiAgICAgICAgICAgIGNvbnN0IGZ1bmNHZXRMYWJlbCA9IGNvbnRyb2wuZnVuY0dldExhYmVsO1xuICAgICAgICAgICAgaWYgKGZ1bmNHZXRMYWJlbCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmNHZXRMYWJlbChyZXN1bHQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5sb2dTZXR0aW5nLmVtcHR5VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgcHJpdmF0ZSBnZXRNdWx0aXBsZUxhYmVsKGNvbnRyb2wsIGRhdGFTb3VyY2UsIHZhbHVlUGFyYW0pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZVBhcmFtLnNvbWUocCA9PiBwID09IE51bWJlcihwKSkpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZVBhcmFtID0gdmFsdWVQYXJhbS5tYXAocCA9PiBOdW1iZXIocCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIHsgfVxuICAgICAgICBsZXQgcmVzdWx0ID0gZGF0YVNvdXJjZVxuICAgICAgICAgICAgLmZpbHRlcihwID0+IHZhbHVlUGFyYW0uaW5jbHVkZXMocC52YWx1ZVtjb250cm9sLnZhbHVlRmllbGRdKSlcbiAgICAgICAgICAgIC5tYXAocCA9PiBjb250cm9sLmZ1bmNHZXRMYWJlbChwLnZhbHVlKSlcbiAgICAgICAgICAgIC5qb2luKCcsICcpO1xuICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5sb2dTZXR0aW5nLmVtcHR5VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBhZGRTaW5nbGVQcm9wZXJ0eUxvZyhjb250cm9sLCBvbGRWYWx1ZSwgbmV3VmFsdWUpIHtcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hKSB7XG4gICAgICAgICAgICBjb25zdCBsb2dDb2x1bW4gPSB0aGlzLmxvZ1NldHRpbmcuYXJyVmFsdWVBZnRlclVwZGF0ZS5maW5kKHAgPT4gcC5maWVsZCA9PSBjb250cm9sLmZpZWxkKTtcbiAgICAgICAgICAgIGxldCBkYXRhU291cmNlID0gY29udHJvbC5fY29tcG9uZW50LnNlbGVjdGVkVmFsdWVPYmplY3Q7XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YVNvdXJjZSkpIGRhdGFTb3VyY2UgPSBbZGF0YVNvdXJjZV07XG4gICAgICAgICAgICBsb2dDb2x1bW4udmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICBsb2dDb2x1bW4udmFsdWVBZnRlciA9IHRoaXMuZ2V0U2luZ2xlTGFiZWwoY29udHJvbCwgZGF0YVNvdXJjZSwgbmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IGNvbnRyb2wuX2NvbXBvbmVudC5kYXRhU291cmNlSW50ZXJuYWw7XG4gICAgICAgICAgICB0aGlzLmxvZ1NldHRpbmcuYXJyVmFsdWVBZnRlclVwZGF0ZS5wdXNoKFxuICAgICAgICAgICAgICAgIG5ldyBMb2dDb2x1bW4oe1xuICAgICAgICAgICAgICAgICAgICBmaWVsZDogY29udHJvbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGNvbnRyb2wubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlQmVmb3JlOiB0aGlzLmdldFNpbmdsZUxhYmVsKGNvbnRyb2wsIGRhdGFTb3VyY2UsIG9sZFZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVBZnRlcjogdGhpcy5nZXRTaW5nbGVMYWJlbChjb250cm9sLCBkYXRhU291cmNlLCBuZXdWYWx1ZSlcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhZGRNdWx0aXBsZVByb3BlcnR5TG9nKGNvbnRyb2wsIG9sZFZhbHVlLCBuZXdWYWx1ZSkge1xuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEF1dG9Db21wbGV0ZVBpY2tlckNvbnRyb2xTY2hlbWEpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvZ0NvbHVtbiA9IHRoaXMubG9nU2V0dGluZy5hcnJWYWx1ZUFmdGVyVXBkYXRlLmZpbmQocCA9PiBwLmZpZWxkID09IGNvbnRyb2wuZmllbGQpO1xuICAgICAgICAgICAgbG9nQ29sdW1uLnZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgbG9nQ29sdW1uLnZhbHVlQWZ0ZXIgPSB0aGlzLmdldE11bHRpcGxlTGFiZWwoY29udHJvbCwgY29udHJvbC5fY29tcG9uZW50LnNlbGVjdGVkVmFsdWVPYmplY3QsIG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBjb250cm9sLl9jb21wb25lbnQuZGF0YVNvdXJjZUludGVybmFsO1xuICAgICAgICAgICAgdGhpcy5sb2dTZXR0aW5nLmFyclZhbHVlQWZ0ZXJVcGRhdGUucHVzaChcbiAgICAgICAgICAgICAgICBuZXcgTG9nQ29sdW1uKHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGNvbnRyb2wuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBjb250cm9sLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZUJlZm9yZTogdGhpcy5nZXRNdWx0aXBsZUxhYmVsKGNvbnRyb2wsIGRhdGFTb3VyY2UsIG9sZFZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVBZnRlcjogdGhpcy5nZXRNdWx0aXBsZUxhYmVsKGNvbnRyb2wsIGRhdGFTb3VyY2UsIG5ld1ZhbHVlKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldExvZ1ZhbHVlRGVmYXVsdChjb250cm9sLCBvbGRWYWx1ZSwgbmV3VmFsdWUpIHtcbiAgICAgICAgY29uc3QgaXNOdWxsT2xkVmFsdWUgPSB0aGlzLmlzTnVsbE9yRW1wdHkob2xkVmFsdWUpO1xuICAgICAgICBjb25zdCBpc051bGxOZXdWYWx1ZSA9IHRoaXMuaXNOdWxsT3JFbXB0eShuZXdWYWx1ZSk7XG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRGF0ZVRpbWVDb250cm9sU2NoZW1hKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXQgPSBjb250cm9sLnNob3dUaW1lID8gJ0hIOm1tIGRkL01NL3l5eXknIDogJ2RkL01NL3l5eXknO1xuICAgICAgICAgICAgb2xkVmFsdWUgPSBpc051bGxPbGRWYWx1ZSA/IHRoaXMubG9nU2V0dGluZy5lbXB0eVZhbHVlIDogdGhpcy5fZGF0ZVBpcGUudHJhbnNmb3JtKG9sZFZhbHVlLCBmb3JtYXQpO1xuICAgICAgICAgICAgbmV3VmFsdWUgPSBpc051bGxOZXdWYWx1ZSA/IHRoaXMubG9nU2V0dGluZy5lbXB0eVZhbHVlIDogdGhpcy5fZGF0ZVBpcGUudHJhbnNmb3JtKG5ld1ZhbHVlLCBmb3JtYXQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBNYXNrQ29udHJvbFNjaGVtYSkge1xuICAgICAgICAgICAgb2xkVmFsdWUgPSBpc051bGxPbGRWYWx1ZSA/IHRoaXMubG9nU2V0dGluZy5lbXB0eVZhbHVlIDogdGhpcy5fbnVtYmVyUGlwZS50cmFuc2Zvcm0ob2xkVmFsdWUsICcnLCAndmktVk4nKTtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gaXNOdWxsTmV3VmFsdWUgPyB0aGlzLmxvZ1NldHRpbmcuZW1wdHlWYWx1ZSA6IHRoaXMuX251bWJlclBpcGUudHJhbnNmb3JtKG5ld1ZhbHVlLCAnJywgJ3ZpLVZOJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIENoZWNrYm94Q29udHJvbFNjaGVtYSB8fCBjb250cm9sIGluc3RhbmNlb2YgU3dpdGNoQ29udHJvbFNjaGVtYSkge1xuICAgICAgICAgICAgb2xkVmFsdWUgPSBpc051bGxPbGRWYWx1ZSA/IHRoaXMubG9nU2V0dGluZy5lbXB0eVZhbHVlIDogRGF0YVNvdXJjZUJvb2xlYW4uZmluZChwID0+IHAuaWQgPT0gb2xkVmFsdWUpPy50ZW47XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IGlzTnVsbE5ld1ZhbHVlID8gdGhpcy5sb2dTZXR0aW5nLmVtcHR5VmFsdWUgOiBEYXRhU291cmNlQm9vbGVhbi5maW5kKHAgPT4gcC5pZCA9PSBuZXdWYWx1ZSk/LnRlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW29sZFZhbHVlLCBuZXdWYWx1ZV07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRMb2dWYWx1ZSgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGNsb25lTW9kZWwgPSB0aGlzLl9jb21tb25TZXJ2aWNlLmNsb25lT2JqZWN0KHRoaXMubW9kZWwuZGF0YSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbnRyb2xOYW1lIG9mIE9iamVjdC5rZXlzKHRoaXMuZm9ybUNvbnRyb2xzKSkge1xuICAgICAgICAgICAgICAgIGlmIChjb250cm9sTmFtZS5pbmNsdWRlcygnLicpIHx8IHRoaXMuY3J1ZEZvcm0uZm9ybUNvbnRyb2xzW2NvbnRyb2xOYW1lXT8uaGlkZGVuID09PSB0cnVlKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtQ29udHJvbHNbY29udHJvbE5hbWVdO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5sb2dTZXR0aW5nLnZhbHVlQmVmb3JlVXBkYXRlW2NvbnRyb2wuZmllbGRdO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gY2xvbmVNb2RlbFtjb250cm9sLmZpZWxkXTtcbiAgICAgICAgICAgICAgICBjb25zdCBpc011bHRpcGxlID0gQXJyYXkuaXNBcnJheShvbGRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzTnVsbE9yRW1wdHkob2xkVmFsdWUpIHx8ICF0aGlzLmlzTnVsbE9yRW1wdHkobmV3VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRHJvcGRvd25Db250cm9sU2NoZW1hIHx8IGNvbnRyb2wgaW5zdGFuY2VvZiBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzTXVsdGlwbGUgJiYgb2xkVmFsdWUgIT0gbmV3VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFNpbmdsZVByb3BlcnR5TG9nKGNvbnRyb2wsIG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpc011bHRpcGxlICYmICF0aGlzLl9jb21tb25TZXJ2aWNlLmlzU2FtZUFycmF5KG9sZFZhbHVlLCBuZXdWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZE11bHRpcGxlUHJvcGVydHlMb2coY29udHJvbCwgb2xkVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvbGRWYWx1ZSAhPSBuZXdWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFt2YWx1ZUJlZm9yZSwgdmFsdWVBZnRlcl0gPSB0aGlzLmdldExvZ1ZhbHVlRGVmYXVsdChjb250cm9sLCBvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nU2V0dGluZy5hcnJWYWx1ZUFmdGVyVXBkYXRlLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBMb2dDb2x1bW4oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGNvbnRyb2wuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29udHJvbC5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlQmVmb3JlOiB2YWx1ZUJlZm9yZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlQWZ0ZXI6IHZhbHVlQWZ0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0h0bWw6IChjb250cm9sIGluc3RhbmNlb2YgRWRpdG9yQ29udHJvbFNjaGVtYSB8fCBjb250cm9sIGluc3RhbmNlb2YgVGV4dEFyZWFDb250cm9sU2NoZW1hKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCctLS0tbG9nIGRhdGEgZmFpbC0tLS0nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzTnVsbE9yRW1wdHkoaW5wdXQ6IGFueSkge1xuICAgICAgICBpZiAoaW5wdXQgIT09IHVuZGVmaW5lZCAmJiBpbnB1dCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0Lmxlbmd0aCA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbnB1dC50b1N0cmluZygpLnRyaW0oKSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHByaXZhdGUgYXN5bmMgc2F2ZSgpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVkID0gYXdhaXQgdGhpcy52YWxpZGF0ZUZvcm1CYXNlKCk7XG4gICAgICAgIGlmICh2YWxpZGF0ZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmxvZ1NldHRpbmcuaXNFbmFibGVMb2cpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubG9nU2V0dGluZy5pc0N1c3RvbUFsbCkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmdldExvZ1ZhbHVlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGPhuqV1IGjDrG5oIHRow6ptXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5vbkFmdGVyR2V0TG9nVmFsdWUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGEubG9nTWV0YURhdGEgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmxvZ1NldHRpbmcuYXJyVmFsdWVBZnRlclVwZGF0ZS5maWx0ZXIocCA9PiBwLnZpc2libGUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IHRoaXMub25CZWZvcmVTYXZlKCk7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJTYXZlRmlsZVVwbG9hZCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuYXV0b1NhdmUpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNGb3JtRWRpdCgpIHx8IHRoaXMuX2lzRm9ybVZpZXcoKSkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm9uVXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX2lzRm9ybUFkZE5ldygpKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMub25JbnNlcnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGZvcm0gdmlldywgZG8gbm90aGluZ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlTWFudWFsU2F2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5zdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVNYW51YWxTYXZlKCkge1xuXG4gICAgfVxuXG4gICAgdHJpZ2dlclNhdmVGaWxlVXBsb2FkKCkge1xuICAgICAgICB0aGlzLnJvb3RDb250ZXh0LmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuQ09NTU9OLlNBVkVfRklMRV9JTl9GT1JNKTtcbiAgICB9XG5cbiAgICBhc3luYyBfZ2V0UmVzdWx0VmFsaWRhdGUoKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnZhbGlkYXRlRm9ybUJhc2UoKTtcbiAgICB9XG5cbiAgICBhc3luYyB2YWxpZGF0ZUZvcm0ocmVzdWx0VmFsaWRhdGVCYXNlOiBib29sZWFuKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgdmFsaWRhdGVGb3JtQmFzZSgpIHtcbiAgICAgICAgbGV0IHJlc3VsdFZhbGlkYXRlQmFzZSA9IHRydWU7XG4gICAgICAgIC8vIEPDsyB0aOG7gyBjw7MgZm9ybSBrIGPDsyBjcnVkLWZvcm0gKFbDrCBsw6AgZm9ybSBtYXN0ZXIgY+G7p2EgY8OhYyBmb3JtIGNvbilcbiAgICAgICAgaWYgKHRoaXMuY3J1ZEZvcm0pIHtcbiAgICAgICAgICAgIHJlc3VsdFZhbGlkYXRlQmFzZSA9IGF3YWl0IHRoaXMuY3J1ZEZvcm0udmFsaWRhdGVGb3JtKHRoaXMuc2V0VmFsaWRhdGVGb3JtKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHRWYWxpZGF0ZSA9IGF3YWl0IHRoaXMudmFsaWRhdGVGb3JtKHJlc3VsdFZhbGlkYXRlQmFzZSk7XG4gICAgICAgIC8vIELhu48gY2hlY2sgdmFsaWQgZm9ybSBjw7RuZyB2aeG7h2MuIG7hur91IG5oxrAgZm9ybSBjw7RuZyB2aeG7h2Mga2jDtG5nIHZhbGlkIHRow6wga2jDtG5nIHThu7EgxJHhu5luZyB04bqhbyBjw7RuZyB2aeG7h2NcbiAgICAgICAgLy8gaWYgKHRoaXMuZHluYW1pY0NvbnRyb2xbRmllbGREZWZpbmVJc1Rhc2tGb3JtQ29udHJvbF1cbiAgICAgICAgLy8gICAgICYmIHRoaXMuZHluYW1pY0NvbnRyb2xbRmllbGREZWZpbmVJc1Rhc2tGb3JtQ29udHJvbF0uX2NvbXBvbmVudFxuICAgICAgICAvLyApIHtcbiAgICAgICAgLy8gICAgIGNvbnN0IHRhc2tGb3JtID0gdGhpcy5keW5hbWljQ29udHJvbFtGaWVsZERlZmluZUlzVGFza0Zvcm1Db250cm9sXS5fY29tcG9uZW50O1xuICAgICAgICAvLyAgICAgY29uc3QgcmVzdWx0VmFsaWRhdGVGb3JtVGFzayA9IGF3YWl0IHRhc2tGb3JtLl9nZXRSZXN1bHRWYWxpZGF0ZSgpO1xuICAgICAgICAvLyAgICAgcmVzdWx0VmFsaWRhdGUgPSByZXN1bHRWYWxpZGF0ZUZvcm1UYXNrICYmIHJlc3VsdFZhbGlkYXRlO1xuICAgICAgICAvLyB9XG4gICAgICAgIHJldHVybiByZXN1bHRWYWxpZGF0ZSAmJiByZXN1bHRWYWxpZGF0ZUJhc2U7XG4gICAgfVxuXG4gICAgX3ZhbGlkYXRlRm9ybUNvbnRyb2woZmllbGRQYXRoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNydWRGb3JtLnZhbGlkYXRlRm9ybUNvbnRyb2woZmllbGRQYXRoKTtcbiAgICB9XG5cbiAgICBfY2xlYW5Gb3JtKCkge1xuICAgICAgICB0aGlzLmNydWRGb3JtLmNsZWFuKCk7XG4gICAgfVxuXG4gICAgX3RyaWdnZXJDb250cm9sQ2hhbmdlKGZpZWxkUGF0aCkge1xuICAgICAgICB0aGlzLmNydWRGb3JtLnRyaWdnZXJDaGFuZ2UoZmllbGRQYXRoKTtcbiAgICB9XG5cbiAgICBvbkJlZm9yZVNhdmUoKTogdm9pZCB8IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIH1cblxuICAgIG9uQWZ0ZXJTYXZlKHJlc3BvbnNlOiBSZXNwb25zZVJlc3VsdCk6IHZvaWQgfCBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB9XG5cblxuICAgIGFzeW5jIG9uQWZ0ZXJHZXREZXRhaWwoZGF0YT86IGFueVtdKSB7XG5cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIG9uSW5zZXJ0KCkge1xuICAgICAgICB0aGlzLnNldERlZmF1bHRWYWx1ZSh0aGlzLm1vZGVsLmRhdGEpO1xuICAgICAgICBpZiAodGhpcy5keW5hbWljQ29udHJvbFtGaWVsZERlZmluZUlzVGFza0Zvcm1Db250cm9sXVxuICAgICAgICAgICAgJiYgdGhpcy5keW5hbWljQ29udHJvbFtGaWVsZERlZmluZUlzVGFza0Zvcm1Db250cm9sXS5fY29tcG9uZW50XG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgdGFza0Zvcm0gPSB0aGlzLmR5bmFtaWNDb250cm9sW0ZpZWxkRGVmaW5lSXNUYXNrRm9ybUNvbnRyb2xdLl9jb21wb25lbnQ7XG4gICAgICAgICAgICBjb25zdCByZXN1bHRWYWxpZGF0ZUZvcm1UYXNrID0gYXdhaXQgdGFza0Zvcm0uX2dldFJlc3VsdFZhbGlkYXRlKCk7XG4gICAgICAgICAgICBpZiAocmVzdWx0VmFsaWRhdGVGb3JtVGFzaykge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZGF0YS5pdGVtQ29uZ1ZpZWMgPSB0YXNrRm9ybS5tb2RlbC5kYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmRhdGEuY3JlYXRlVGFza0luc3RlYWQpIHtcbiAgICAgICAgICAgIC8vIHJlc2V0IGZpZWxkIF9Xb3JrZmxvd0NvZGUgxJHhu4MgYmFja2VuZCBraMO0bmcgY2jhuqF5IHF1eSB0csOsbmggYuG6o24gZ2hpXG4gICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGFbRmllbGRXb3JrZmxvd0NvZGVJbkNydWRGb3JtXSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29uZmlybWVkID0gYXdhaXQgdGhpcy5jcmVhdGVDb25maXJtSWZSZXF1aXJlKCk7XG4gICAgICAgIGlmICghY29uZmlybWVkKSByZXR1cm47XG4gICAgICAgIGF3YWl0IHRoaXMuX2luc2VydCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlQ29uZmlybUlmUmVxdWlyZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMubWVzc2FnZUNvbmZpcm1TYXZlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dDb25maXJtKHRoaXMubWVzc2FnZUNvbmZpcm1TYXZlKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcyh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXModHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2luc2VydCgpIHtcbiAgICAgICAgdGhpcy5nZXRQcm9taXNlQWN0aW9uSW5zZXJ0KClcbiAgICAgICAgICAgIC50aGVuKGFzeW5jIHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnN1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dNZXNzYWdlQWZ0ZXJJbnNlcnQocmVzcG9uc2Uuc3VjY2VzcywgcmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZGF0YS5pZCA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMub25BZnRlclNhdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uU2F2ZWQuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogdGhpcy5tb2RlbC5kYXRhLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNDbG9zZUZvcm06IHRoaXMuaXNDbG9zZUZvcm1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUluc2VydEVycm9yKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZXJyb3IuZXJyb3Iuc3VjY2VzcyAmJiBlcnJvci5lcnJvci5lcnJvckNoZWNrRXhpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93TWVzc2FnZUFmdGVySW5zZXJ0KGZhbHNlLCBlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRQcm9taXNlQWN0aW9uSW5zZXJ0KCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5wb3N0KHRoaXMubW9kZWwuZGF0YSwgdGhpcy5pbnNlcnRQbHVzVXJsKTtcbiAgICB9XG5cbiAgICBoYW5kbGVJbnNlcnRFcnJvcigpIHtcblxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgb25VcGRhdGUoKSB7XG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdFZhbHVlKHRoaXMubW9kZWwuZGF0YSk7XG4gICAgICAgIHRoaXMuZ2V0UHJvbWlzZUFjdGlvblVwZGF0ZSgpXG4gICAgICAgICAgICAudGhlbihhc3luYyByZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93TWVzc2FnZUFmdGVyVXBkYXRlKHJlc3BvbnNlLnN1Y2Nlc3MsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJTYXZlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vblNhdmVkLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHRoaXMubW9kZWwuZGF0YS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0Nsb3NlRm9ybTogdGhpcy5pc0Nsb3NlRm9ybVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlVXBkYXRlRXJyb3IoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFlcnJvci5lcnJvci5zdWNjZXNzICYmIGVycm9yLmVycm9yLmVycm9yQ2hlY2tFeGlzdCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnN1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnN1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dNZXNzYWdlQWZ0ZXJVcGRhdGUoZmFsc2UsIGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmxvZ1NldHRpbmcuaXNFbmFibGVMb2cpIHtcbiAgICAgICAgICAgIHRoaXMubG9nU2V0dGluZy5hcnJWYWx1ZUFmdGVyVXBkYXRlID0gW107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVVcGRhdGVFcnJvcigpIHtcblxuICAgIH1cblxuICAgIGdldFByb21pc2VBY3Rpb25VcGRhdGUoKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnB1dCh0aGlzLm1vZGVsLmRhdGEuaWQudG9TdHJpbmcoKSwgdGhpcy5tb2RlbC5kYXRhLCB0aGlzLnVwZGF0ZVBsdXNVcmwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0RGVmYXVsdFZhbHVlKG1vZGVsKSB7XG4gICAgICAgIGlmIChtb2RlbC5pc0J1aWxkSW4gPT09IG51bGwgfHwgbW9kZWwuaXNCdWlsZEluID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG1vZGVsLmlzQnVpbGRJbiA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vZGVsLmlzQnVpbGRJbkFsbCA9PT0gbnVsbCB8fCBtb2RlbC5pc0J1aWxkSW5BbGwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbW9kZWwuaXNCdWlsZEluQWxsID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGFyZW50U2V0dGluZz8uZW5hYmxlUmVvcmRlclJvdyAmJiB0aGlzLnBhcmVudFNldHRpbmcuY29sdW1uU2V0dGluZy5zb3J0RmllbGQpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuZGF0YVt0aGlzLnBhcmVudFNldHRpbmcuY29sdW1uU2V0dGluZy5zb3J0RmllbGRdID8/PSB0aGlzLnBhcmVudE1vZGVsLnRvdGFsICsgMTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2hvd01lc3NhZ2VBZnRlckluc2VydChpc1N1Y2Nlc3M6IGJvb2xlYW4gPSBmYWxzZSwgZXJyb3I/OiBhbnkpIHtcbiAgICAgICAgaWYgKGlzU3VjY2Vzcykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLm1lc3NhZ2VJbnNlcnRTdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlSW5zZXJ0U3VjY2VzcyA9IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnTUVTU0FHRS5JTlNFUlRfREFUQV9TVUNDRVNTJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5tZXNzYWdlSW5zZXJ0U3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2Vzcyh0aGlzLm1lc3NhZ2VJbnNlcnRTdWNjZXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVzcG9uc2VFcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNob3dNZXNzYWdlQWZ0ZXJVcGRhdGUoaXNTdWNjZXNzOiBib29sZWFuID0gZmFsc2UsIGVycm9yPzogYW55KSB7XG4gICAgICAgIGlmIChpc1N1Y2Nlc3MpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5tZXNzYWdlVXBkYXRlU3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZVVwZGF0ZVN1Y2Nlc3MgPSB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ01FU1NBR0UuVVBEQVRFX0RBVEFfU1VDQ0VTUycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMubWVzc2FnZVVwZGF0ZVN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1N1Y2Nlc3ModGhpcy5tZXNzYWdlVXBkYXRlU3VjY2Vzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVJlc3BvbnNlRXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlUmVzcG9uc2VFcnJvcihlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IubWVzc2FnZSkge1xuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGVycm9yLmVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoZXJyb3IuZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdDw7MgbOG7l2kgeOG6o3kgcmEsIGxpw6puIGjhu4cgcXXhuqNuIHRy4buLIHZpw6puIMSR4buDIGJp4bq/dCB0aMOqbSBjaGkgdGnhur90Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBvbkZvcm1Jbml0aWFsaXplZChkYXRhOiBFdmVudERhdGEpIHtcblxuICAgIH1cblxuICAgIF9oYW5kbGVBZnRlclRyaW5oS3koZXZ0KSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLm1vZGVsLmRhdGFbS2V5Rmxhc2hTaG93XTtcbiAgICAgICAgdGhpcy5faGFuZGxlQ2FuY2VsKGV2dCk7XG4gICAgfVxuXG4gICAgX2hhbmRsZVNhdmUoZXZ0KSB7XG4gICAgICAgIGlmICh0aGlzLm1vZGVsLnN1Ym1pdHRpbmcpIHJldHVybjtcbiAgICAgICAgdGhpcy5tb2RlbC5zdWJtaXR0aW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zYXZlKCk7XG4gICAgICAgIHRoaXMub25TYXZlLmVtaXQoZXZ0KTtcbiAgICB9XG5cbiAgICBfaGFuZGxlQ2FuY2VsKGV2dCkge1xuICAgICAgICB0aGlzLm9uQ2FuY2VsLmVtaXQoZXZ0KTtcbiAgICB9XG5cbiAgICBfaGFuZGxlTWVzc2FnZShldnQpIHtcbiAgICAgICAgdGhpcy5vbk1lc3NhZ2UuZW1pdChldnQpO1xuICAgIH1cblxuICAgIF9zZXREaXNhYmxlQ29udHJvbCh1bmlxdWVGaWVsZCwgaXNEaXNhYmxlZCkge1xuICAgICAgICB0aGlzLmNydWRGb3JtLmZvcm1Db250cm9sc1t1bmlxdWVGaWVsZF0uZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIH1cblxuICAgIF9zZXRIaWRkZW5Db250cm9sKHVuaXF1ZUZpZWxkLCBpc0hpZGRlbikge1xuICAgICAgICB0aGlzLmNydWRGb3JtLmZvcm1Db250cm9sc1t1bmlxdWVGaWVsZF0uaGlkZGVuID0gaXNIaWRkZW47XG4gICAgfVxuXG4gICAgX2dldEZvcm1TdGF0ZSgpOiBGb3JtU3RhdGUge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5mb3JtU3RhdGU7XG4gICAgfVxuXG4gICAgX2lzRm9ybUFkZE5ldygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldEZvcm1TdGF0ZSgpID09IEZvcm1TdGF0ZS5BREQ7XG4gICAgfVxuXG4gICAgX2lzRm9ybUVkaXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRGb3JtU3RhdGUoKSA9PSBGb3JtU3RhdGUuRURJVDtcbiAgICB9XG5cbiAgICBfaXNGb3JtVmlldygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldEZvcm1TdGF0ZSgpID09IEZvcm1TdGF0ZS5WSUVXO1xuICAgIH1cbn1cbiJdfQ==