ngx-st-tables 17.0.115 → 17.0.117

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.
@@ -78,6 +78,7 @@ export class MaterialTableRowCellComponent {
78
78
  }
79
79
  else if (this.matSelect) {
80
80
  // Open MatSelect dropdown
81
+ this.matSelect.focus();
81
82
  this.matSelect.open();
82
83
  }
83
84
  }, 150);
@@ -131,4 +132,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
131
132
  }], rowEditing: [{
132
133
  type: Input
133
134
  }] } });
134
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwtdGFibGUtcm93LWNlbGwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbWF0ZXJpYWwtdGFibGUvbWF0ZXJpYWwtdGFibGUtcm93LWNlbGwvbWF0ZXJpYWwtdGFibGUtcm93LWNlbGwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbWF0ZXJpYWwtdGFibGUvbWF0ZXJpYWwtdGFibGUtcm93LWNlbGwvbWF0ZXJpYWwtdGFibGUtcm93LWNlbGwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsS0FBSyxFQUVMLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsR0FFVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBUXJELE1BQU0sT0FBTyw2QkFBNkI7SUF5QnhDLElBQ0ksVUFBVSxDQUFDLElBQWE7UUFDMUIsTUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBRXhCLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUU1QixxREFBcUQ7WUFDckQsSUFBSSxhQUFhLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLEVBQUUsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDakMsQ0FBQztR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QUFTO3NCQUE5QixTQUFTO3VCQUFDLFNBQVM7Z0JBd0JoQixVQUFVO3NCQURiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgaW5wdXQsXHJcbiAgb3V0cHV0LFxyXG4gIHNpZ25hbCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvc3QtbWF0ZXJpYWwtdGFibGUtY29sdW1uLm1vZGVsJztcclxuaW1wb3J0IHsgTWF0SW5wdXQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XHJcbmltcG9ydCB7IE1hdFNlbGVjdCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3N0LW1hdGVyaWFsLXRhYmxlLXJvdy1jZWxsJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbWF0ZXJpYWwtdGFibGUtcm93LWNlbGwuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL21hdGVyaWFsLXRhYmxlLXJvdy1jZWxsLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYXRlcmlhbFRhYmxlUm93Q2VsbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQFZpZXdDaGlsZChNYXRJbnB1dCkgbWF0SW5wdXQ/OiBNYXRJbnB1dDtcclxuICBAVmlld0NoaWxkKE1hdFNlbGVjdCkgbWF0U2VsZWN0PzogTWF0U2VsZWN0O1xyXG4gIGNvbHVtbiA9IGlucHV0LnJlcXVpcmVkPFN0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsPigpO1xyXG5cclxuICByb3dEYXRhID0gaW5wdXQucmVxdWlyZWQ8e1xyXG4gICAgW3Byb3A6IHN0cmluZ106IGFueTtcclxuICB9PigpO1xyXG5cclxuICByb3dJbmRleCA9IGlucHV0LnJlcXVpcmVkPG51bWJlcj4oKTtcclxuXHJcbiAgcm93RGF0YUNvcHkgPSBpbnB1dDx7XHJcbiAgICBbcHJvcDogc3RyaW5nXTogYW55O1xyXG4gIH0+KCk7XHJcblxyXG4gIGNhbkVkaXRSb3dWYWxpZGF0b3IgPSBpbnB1dDwocm93OiBhbnkpID0+IGJvb2xlYW4+KCgpID0+IHRydWUpO1xyXG5cclxuICBjYW5EZWxldGVSb3dWYWxpZGF0b3IgPSBpbnB1dDwocm93OiBhbnkpID0+IGJvb2xlYW4+KCgpID0+IHRydWUpO1xyXG5cclxuICBzZWxlY3RSb3dPbmx5T25lID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBpc0ZpcnN0RWRpdGFibGVDb2x1bW4gPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGF1dG9TYXZlT25DaGFuZ2UgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHJvd0VkaXRpbmcoZGF0YTogYm9vbGVhbikge1xyXG4gICAgY29uc3Qgd2FzTm90RWRpdGluZyA9ICF0aGlzLl9yb3dFZGl0aW5nO1xyXG4gICAgdGhpcy5fcm93RWRpdGluZyA9IGRhdGE7XHJcblxyXG4gICAgaWYgKGRhdGEpIHtcclxuICAgICAgdGhpcy5nZXREeW5hbWljU2VsZWN0RGF0YSgpO1xyXG5cclxuICAgICAgLy8gRm9jdXMgZmlyc3QgZWRpdGFibGUgZmllbGQgd2hlbiBlbnRlcmluZyBlZGl0IG1vZGVcclxuICAgICAgaWYgKHdhc05vdEVkaXRpbmcgJiYgdGhpcy5pc0ZpcnN0RWRpdGFibGVDb2x1bW4oKSkge1xyXG4gICAgICAgIHRoaXMuZm9jdXNGaXJzdEVkaXRhYmxlRmllbGQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHJvd0VkaXRpbmcoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcm93RWRpdGluZztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3Jvd0VkaXRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcm93SXNTZWxlY3RlZCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgcm93SXNFeHBhbmRlZCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgc2F2ZUVkaXRSb3dFbWl0dGVyID0gb3V0cHV0PHZvaWQ+KCk7XHJcblxyXG4gIGNhbmNlbEVkaXRSb3dFbWl0dGVyID0gb3V0cHV0PHZvaWQ+KCk7XHJcblxyXG4gIGVkaXRSb3dFbWl0dGVyID0gb3V0cHV0PHZvaWQ+KCk7XHJcblxyXG4gIGRlbGV0ZVJvd0VtaXR0ZXIgPSBvdXRwdXQ8dm9pZD4oKTtcclxuXHJcbiAgc2VsZWN0Um93Q2hhbmdlID0gb3V0cHV0PGJvb2xlYW4+KCk7XHJcblxyXG4gIGZpZWxkVmFsdWVDaGFuZ2VkID0gb3V0cHV0PHsgZmllbGQ6IHN0cmluZzsgdmFsdWU6IGFueSB9PigpO1xyXG5cclxuICBtb2JpbGVWaWV3ID0gZmFsc2U7XHJcblxyXG4gIGFjdGlvbkljb25Db2xvckRlZjoge1xyXG4gICAgW2tleTogc3RyaW5nXTogJ3ByaW1hcnknIHwgJ3dhcm4nO1xyXG4gIH0gPSB7XHJcbiAgICBlZGl0OiAncHJpbWFyeScsXHJcbiAgICBkZWxldGU6ICd3YXJuJyxcclxuICB9O1xyXG5cclxuICBkeW5hbWljU2VsZWN0T3B0aW9ucyA9IHNpZ25hbDx7IHZhbHVlOiBhbnk7IGxhYmVsOiBzdHJpbmcgfVtdPihbXSk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBldmVudCA9PiB7XHJcbiAgICAgIHRoaXMuY2hlY2tXaWR0aFNpemUoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgLy8gSWYgcm93IGlzIGFscmVhZHkgaW4gZWRpdCBtb2RlIG9uIGluaXQgKGUuZy4sIG5ld2x5IGFkZGVkIHJvdyksIGZvY3VzIHRoZSBmaWVsZFxyXG4gICAgaWYgKHRoaXMucm93RWRpdGluZyAmJiB0aGlzLmlzRmlyc3RFZGl0YWJsZUNvbHVtbigpKSB7XHJcbiAgICAgIHRoaXMuZm9jdXNGaXJzdEVkaXRhYmxlRmllbGQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9jdXNGaXJzdEVkaXRhYmxlRmllbGQoKSB7XHJcbiAgICAvLyBVc2Ugc2V0VGltZW91dCB0byBlbnN1cmUgdGhlIHZpZXcgaXMgZnVsbHkgcmVuZGVyZWRcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5tYXRJbnB1dCkge1xyXG4gICAgICAgIC8vIEZvY3VzIE1hdElucHV0XHJcbiAgICAgICAgdGhpcy5tYXRJbnB1dC5mb2N1cygpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMubWF0U2VsZWN0KSB7XHJcbiAgICAgICAgLy8gT3BlbiBNYXRTZWxlY3QgZHJvcGRvd25cclxuICAgICAgICB0aGlzLm1hdFNlbGVjdC5vcGVuKCk7XHJcbiAgICAgIH1cclxuICAgIH0sIDE1MCk7XHJcbiAgfVxyXG5cclxuICBzYXZlUm93KCkge1xyXG4gICAgdGhpcy5zYXZlRWRpdFJvd0VtaXR0ZXIuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgY2FuY2VsUm93KCkge1xyXG4gICAgdGhpcy5jYW5jZWxFZGl0Um93RW1pdHRlci5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBlZGl0Um93KCkge1xyXG4gICAgdGhpcy5lZGl0Um93RW1pdHRlci5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVSb3coKSB7XHJcbiAgICB0aGlzLmRlbGV0ZVJvd0VtaXR0ZXIuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0Um93KGV2ZW50OiB7IGNoZWNrZWQ6IGJvb2xlYW4gfSkge1xyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0Um93Q2hhbmdlLmVtaXQoZXZlbnQuY2hlY2tlZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkZpZWxkQ2hhbmdlKGZpZWxkOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmF1dG9TYXZlT25DaGFuZ2UoKSkge1xyXG4gICAgICB0aGlzLmZpZWxkVmFsdWVDaGFuZ2VkLmVtaXQoeyBmaWVsZCwgdmFsdWUgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoZWNrV2lkdGhTaXplKCkge1xyXG4gICAgdGhpcy5tb2JpbGVWaWV3ID0gZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCA8PSAxMTAwO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RHluYW1pY1NlbGVjdERhdGEoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY29sdW1uKCkgJiZcclxuICAgICAgdGhpcy5jb2x1bW4oKS5hbGxvd0VkaXRDb2x1bW4gJiZcclxuICAgICAgdGhpcy5jb2x1bW4oKS5yb3dFZGl0VHlwZSA9PT0gJ2N1c3RvbS1keW5hbWljLXNlbGVjdCcgJiZcclxuICAgICAgdGhpcy5jb2x1bW4oKS5keW5hbWljUm93RWRpdE9wdGlvbnNcclxuICAgICkge1xyXG4gICAgICB0aGlzLmR5bmFtaWNTZWxlY3RPcHRpb25zLnNldChcclxuICAgICAgICB0aGlzLmNvbHVtbigpLmR5bmFtaWNSb3dFZGl0T3B0aW9ucyEodGhpcy5yb3dEYXRhKCkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIkBzd2l0Y2ggKGNvbHVtbigpLnR5cGUgfHwgJ3N0cmluZycpIHtcclxuICBAY2FzZSAoJ2N1c3RvbS10ZW1wbGF0ZScpIHtcclxuICAgIEBpZiAocm93RWRpdGluZyAmJiBjb2x1bW4oKS5hbGxvd0VkaXRDb2x1bW4pIHtcclxuICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiYmFzZUZpZWxkQ2VsbDsgY29udGV4dDogeyAkaW1wbGljaXQ6IGNvbHVtbigpIH1cIlxyXG4gICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICB9IEBlbHNlIHtcclxuICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbHVtbigpLmN1c3RvbVRlbXBsYXRlIVwiXHJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgZGF0YTogcm93RGF0YSgpIH1cIlxyXG4gICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAY2FzZSAoJ2FjdGlvbnMnKSB7XHJcbiAgICBAaWYgKGNvbHVtbigpLmFjdGlvbnMpIHtcclxuICAgICAgQGlmIChcclxuICAgICAgICAoIWNvbHVtbigpLmFjdGlvbnNJbk1lbnUgJiYgIW1vYmlsZVZpZXcpIHx8XHJcbiAgICAgICAgKG1vYmlsZVZpZXcgJiYgY29sdW1uKCkuYWN0aW9ucyEubGVuZ3RoIDw9IDEpXHJcbiAgICAgICkge1xyXG4gICAgICAgIDxkaXYgW25nU3R5bGVdPVwieyBmbG9hdDogY29sdW1uKCkuZmxleFJpZ2h0ID8gJ3JpZ2h0JyA6ICdub25lJyB9XCI+XHJcbiAgICAgICAgICBAZm9yIChhY3Rpb24gb2YgY29sdW1uKCkuYWN0aW9uczsgdHJhY2sgYWN0aW9uKSB7XHJcbiAgICAgICAgICAgIEBpZiAoKGFjdGlvbi5zaG93ICYmIGFjdGlvbi5zaG93KHJvd0RhdGEoKSkpIHx8ICFhY3Rpb24uc2hvdykge1xyXG4gICAgICAgICAgICAgIEBpZiAoIWFjdGlvbi51cmwgJiYgYWN0aW9uLmFjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImFjdGlvbi1pY29uLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbkljb25Db2xvckRlZlthY3Rpb24uaWNvbk5hbWVdXHJcbiAgICAgICAgICAgICAgICAgICAgICA/IGFjdGlvbkljb25Db2xvckRlZlthY3Rpb24uaWNvbk5hbWVdXHJcbiAgICAgICAgICAgICAgICAgICAgICA6IGFjdGlvbi5pY29uQ29sb3JcclxuICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiYWN0aW9uLnRvb2x0aXBOYW1lIHx8ICcnXCJcclxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBEaXNhYmxlZF09XCIhYWN0aW9uLnRvb2x0aXBOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb24uYWN0aW9uIShyb3dEYXRhKCksIHJvd0luZGV4KCkpXHJcbiAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj57eyBhY3Rpb24uaWNvbk5hbWUgfX08L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIEBpZiAoYWN0aW9uLnVybCkge1xyXG4gICAgICAgICAgICAgICAgPGEgW3JvdXRlckxpbmtdPVwiYWN0aW9uLnVybFwiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb24taWNvbi1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbkljb25Db2xvckRlZlthY3Rpb24uaWNvbk5hbWVdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYWN0aW9uSWNvbkNvbG9yRGVmW2FjdGlvbi5pY29uTmFtZV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBhY3Rpb24uaWNvbkNvbG9yXHJcbiAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJhY3Rpb24udG9vbHRpcE5hbWUgfHwgJydcIlxyXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwRGlzYWJsZWRdPVwiIWFjdGlvbi50b29sdGlwTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+e3sgYWN0aW9uLmljb25OYW1lIH19PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIH1cclxuICAgICAgQGlmIChcclxuICAgICAgICBjb2x1bW4oKS5hY3Rpb25zSW5NZW51IHx8IChtb2JpbGVWaWV3ICYmIGNvbHVtbigpLmFjdGlvbnMhLmxlbmd0aCA+IDEpXHJcbiAgICAgICkge1xyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWljb24+bW9yZV92ZXJ0PC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCI+XHJcbiAgICAgICAgICBAZm9yIChhY3Rpb24gb2YgY29sdW1uKCkuYWN0aW9uczsgdHJhY2sgYWN0aW9uKSB7XHJcbiAgICAgICAgICAgIEBpZiAoKGFjdGlvbi5zaG93ICYmIGFjdGlvbi5zaG93KHJvd0RhdGEoKSkpIHx8ICFhY3Rpb24uc2hvdykge1xyXG4gICAgICAgICAgICAgIEBpZiAoIWFjdGlvbi51cmwgJiYgYWN0aW9uLmFjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBhY3Rpb24uYWN0aW9uIShyb3dEYXRhKCkpXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAge3sgYWN0aW9uLnRvb2x0aXBOYW1lIH19XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgQGlmIChhY3Rpb24udXJsKSB7XHJcbiAgICAgICAgICAgICAgICA8YSBbcm91dGVyTGlua109XCJhY3Rpb24udXJsXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1tZW51LWl0ZW0+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgYWN0aW9uLnRvb2x0aXBOYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBjYXNlICgnc3RyaW5nJykge1xyXG4gICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImJhc2VGaWVsZENlbGw7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBjb2x1bW4oKSB9XCJcclxuICAgID48L25nLWNvbnRhaW5lcj5cclxuICB9XHJcblxyXG4gIEBjYXNlICgnbnVtYmVyJykge1xyXG4gICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImJhc2VGaWVsZENlbGw7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBjb2x1bW4oKSB9XCJcclxuICAgID48L25nLWNvbnRhaW5lcj5cclxuICB9XHJcblxyXG4gIEBjYXNlICgnYm9vbGVhbicpIHtcclxuICAgIDxuZy1jb250YWluZXJcclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJiYXNlRmllbGRDZWxsOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogY29sdW1uKCkgfVwiXHJcbiAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgfVxyXG5cclxuICBAY2FzZSAoJ2RhdGUnKSB7XHJcbiAgICBAaWYgKHJvd0VkaXRpbmcgJiYgY29sdW1uKCkuYWxsb3dFZGl0Q29sdW1uKSB7XHJcbiAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImJhc2VGaWVsZENlbGw7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBjb2x1bW4oKSB9XCJcclxuICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgfSBAZWxzZSB7XHJcbiAgICAgIHt7IHJvd0RhdGEoKVtjb2x1bW4oKS5maWVsZF0gfCBzdERhdGVUaW1lRm9ybWF0UGlwZSB9fVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQGNhc2UgKCdhY3Rpb25zLXJvdy1lZGl0aW5nJykge1xyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgIEBpZiAocm93RWRpdGluZykge1xyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICBjb2xvcj1cImFjY2VudFwiXHJcbiAgICAgICAgICAoY2xpY2spPVwic2F2ZVJvdygpXCJcclxuICAgICAgICAgIFttYXRUb29sdGlwXT1cIidTYXZlIHJvdydcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxtYXQtaWNvbj5kb25lPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgY29sb3I9XCJ3YXJuXCJcclxuICAgICAgICAgIChjbGljayk9XCJjYW5jZWxSb3coKVwiXHJcbiAgICAgICAgICBbbWF0VG9vbHRpcF09XCInQ2FuY2VsIHJvdydcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImVkaXRSb3coKVwiXHJcbiAgICAgICAgICBbbWF0VG9vbHRpcF09XCInRWRpdCByb3cnXCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCJcclxuICAgICAgICAgICAgY2FuRWRpdFJvd1ZhbGlkYXRvcigpID8gIWNhbkVkaXRSb3dWYWxpZGF0b3IoKShyb3dEYXRhKCkpIDogZmFsc2VcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmVkaXQ8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICBjb2xvcj1cIndhcm5cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZVJvdygpXCJcclxuICAgICAgICAgIFttYXRUb29sdGlwXT1cIidEZWxldGUgcm93J1wiXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiXHJcbiAgICAgICAgICAgIGNhbkRlbGV0ZVJvd1ZhbGlkYXRvcigpXHJcbiAgICAgICAgICAgICAgPyAhY2FuRGVsZXRlUm93VmFsaWRhdG9yKCkocm93RGF0YSgpKVxyXG4gICAgICAgICAgICAgIDogZmFsc2VcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gIH1cclxuXHJcbiAgQGNhc2UgKCdhY3Rpb25zLXJvdy1zZWxlY3RpbmcnKSB7XHJcbiAgICA8IS0tICAgIEBpZiAoc2VsZWN0Um93T25seU9uZSgpKSB7LS0+XHJcbiAgICA8IS0tICAgICAgPG1hdC1yYWRpby1idXR0b24tLT5cclxuICAgIDwhLS0gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiLS0+XHJcbiAgICA8IS0tICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCItLT5cclxuICAgIDwhLS0gICAgICAgIChjaGFuZ2UpPVwic2VsZWN0Um93KHsgY2hlY2tlZDogdHJ1ZSB9KVwiLS0+XHJcbiAgICA8IS0tICAgICAgICBbY2hlY2tlZF09XCJyb3dJc1NlbGVjdGVkKClcIi0tPlxyXG4gICAgPCEtLSAgICAgID48L21hdC1yYWRpby1idXR0b24+LS0+XHJcbiAgICA8IS0tICAgIH0gQGVsc2Ugey0tPlxyXG4gICAgPG1hdC1jaGVja2JveFxyXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgKGNoYW5nZSk9XCJzZWxlY3RSb3coJGV2ZW50KVwiXHJcbiAgICAgIFtjaGVja2VkXT1cInJvd0lzU2VsZWN0ZWQoKVwiXHJcbiAgICA+PC9tYXQtY2hlY2tib3g+XHJcbiAgICA8IS0tICAgIH0tLT5cclxuICB9XHJcblxyXG4gIEBjYXNlICgnYWN0aW9ucy1yb3ctZXh0ZW5kaW5nJykge1xyXG4gICAgQGlmIChyb3dJc0V4cGFuZGVkKCkpIHtcclxuICAgICAgPG1hdC1pY29uPmtleWJvYXJkX2Fycm93X3VwPC9tYXQtaWNvbj5cclxuICAgIH0gQGVsc2Uge1xyXG4gICAgICA8bWF0LWljb24+a2V5Ym9hcmRfYXJyb3dfZG93bjwvbWF0LWljb24+XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG48bmctdGVtcGxhdGUgI2Jhc2VGaWVsZENlbGwgbGV0LWNvbHVtbj5cclxuICBAaWYgKChyb3dFZGl0aW5nIHx8IGF1dG9TYXZlT25DaGFuZ2UoKSkgJiYgY29sdW1uLmFsbG93RWRpdENvbHVtbikge1xyXG4gICAgQGlmIChjb2x1bW4ucm93RWRpdFR5cGUgPT09ICdzdHJpbmcnIHx8IGNvbHVtbi5yb3dFZGl0VHlwZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgPG1hdC1mb3JtLWZpZWxkXHJcbiAgICAgICAgYXBwZWFyYW5jZT1cIm91dGxpbmVcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cInsgd2lkdGg6IGNvbHVtbi53aWR0aCB8fCAnYXV0bycgfVwiXHJcbiAgICAgID5cclxuICAgICAgICA8aW5wdXRcclxuICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICBbdHlwZV09XCJjb2x1bW4ucm93RWRpdFR5cGUgPT09ICdzdHJpbmcnID8gJ3RleHQnIDogJ251bWJlcidcIlxyXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJcclxuICAgICAgICAgICAgYXV0b1NhdmVPbkNoYW5nZSgpXHJcbiAgICAgICAgICAgICAgPyByb3dEYXRhKClbY29sdW1uLmZpZWxkXVxyXG4gICAgICAgICAgICAgIDogcm93RGF0YUNvcHkoKSFbY29sdW1uLmZpZWxkXVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIlxyXG4gICAgICAgICAgICBhdXRvU2F2ZU9uQ2hhbmdlKCkgJiYgb25GaWVsZENoYW5nZShjb2x1bW4uZmllbGQsICRldmVudClcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCIhYXV0b1NhdmVPbkNoYW5nZSgpICYmIHNhdmVSb3coKVwiXHJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwiY29sdW1uLmVkaXRDb2x1bW5SZXF1aXJlZFwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIH1cclxuICAgIEBpZiAoY29sdW1uLnJvd0VkaXRUeXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgPG1hdC1mb3JtLWZpZWxkXHJcbiAgICAgICAgYXBwZWFyYW5jZT1cIm91dGxpbmVcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cInsgd2lkdGg6IGNvbHVtbi53aWR0aCB8fCAnYXV0bycgfVwiXHJcbiAgICAgID5cclxuICAgICAgICA8aW5wdXRcclxuICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXIxXCJcclxuICAgICAgICAgIFsobmdNb2RlbCldPVwiXHJcbiAgICAgICAgICAgIGF1dG9TYXZlT25DaGFuZ2UoKVxyXG4gICAgICAgICAgICAgID8gcm93RGF0YSgpW2NvbHVtbi5maWVsZF1cclxuICAgICAgICAgICAgICA6IHJvd0RhdGFDb3B5KCkhW2NvbHVtbi5maWVsZF1cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJcclxuICAgICAgICAgICAgYXV0b1NhdmVPbkNoYW5nZSgpICYmIG9uRmllbGRDaGFuZ2UoY29sdW1uLmZpZWxkLCAkZXZlbnQpXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiIWF1dG9TYXZlT25DaGFuZ2UoKSAmJiBzYXZlUm93KClcIlxyXG4gICAgICAgICAgW3JlcXVpcmVkXT1cImNvbHVtbi5lZGl0Q29sdW1uUmVxdWlyZWRcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZVxyXG4gICAgICAgICAgbWF0SWNvblN1ZmZpeFxyXG4gICAgICAgICAgW2Zvcl09XCJwaWNrZXIxXCJcclxuICAgICAgICA+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXIxPjwvbWF0LWRhdGVwaWNrZXI+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICB9XHJcbiAgICBAaWYgKGNvbHVtbi5yb3dFZGl0VHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgIDxtYXQtY2hlY2tib3hcclxuICAgICAgICBbKG5nTW9kZWwpXT1cIlxyXG4gICAgICAgICAgYXV0b1NhdmVPbkNoYW5nZSgpXHJcbiAgICAgICAgICAgID8gcm93RGF0YSgpW2NvbHVtbi5maWVsZF1cclxuICAgICAgICAgICAgOiByb3dEYXRhQ29weSgpIVtjb2x1bW4uZmllbGRdXHJcbiAgICAgICAgXCJcclxuICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJcclxuICAgICAgICAgIGF1dG9TYXZlT25DaGFuZ2UoKSAmJiBvbkZpZWxkQ2hhbmdlKGNvbHVtbi5maWVsZCwgJGV2ZW50KVxyXG4gICAgICAgIFwiXHJcbiAgICAgID48L21hdC1jaGVja2JveD5cclxuICAgIH1cclxuXHJcbiAgICBAaWYgKGNvbHVtbi5yb3dFZGl0VHlwZSA9PT0gJ2N1c3RvbScpIHtcclxuICAgICAgPG1hdC1mb3JtLWZpZWxkXHJcbiAgICAgICAgYXBwZWFyYW5jZT1cIm91dGxpbmVcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cInsgd2lkdGg6IGNvbHVtbi53aWR0aCB8fCAnYXV0bycgfVwiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LXNlbGVjdFxyXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJcclxuICAgICAgICAgICAgYXV0b1NhdmVPbkNoYW5nZSgpXHJcbiAgICAgICAgICAgICAgPyByb3dEYXRhKClbY29sdW1uLmZpZWxkXVxyXG4gICAgICAgICAgICAgIDogcm93RGF0YUNvcHkoKSFbY29sdW1uLmZpZWxkXVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIlxyXG4gICAgICAgICAgICBhdXRvU2F2ZU9uQ2hhbmdlKCkgJiYgb25GaWVsZENoYW5nZShjb2x1bW4uZmllbGQsICRldmVudClcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwiY29sdW1uLmVkaXRDb2x1bW5SZXF1aXJlZFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJcIj48L21hdC1vcHRpb24+XHJcbiAgICAgICAgICBAZm9yIChvcHRpb24gb2YgY29sdW1uLmN1c3RvbVJvd0VkaXRPcHRpb25zOyB0cmFjayBvcHRpb24pIHtcclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgIHt7IG9wdGlvbi5sYWJlbCB9fVxyXG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgfVxyXG5cclxuICAgIEBpZiAoY29sdW1uLnJvd0VkaXRUeXBlID09PSAnY3VzdG9tLWR5bmFtaWMtc2VsZWN0Jykge1xyXG4gICAgICA8bWF0LWZvcm0tZmllbGRcclxuICAgICAgICBhcHBlYXJhbmNlPVwib3V0bGluZVwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwieyB3aWR0aDogY29sdW1uLndpZHRoIHx8ICdhdXRvJyB9XCJcclxuICAgICAgPlxyXG4gICAgICAgIDxtYXQtc2VsZWN0XHJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cIlxyXG4gICAgICAgICAgICBhdXRvU2F2ZU9uQ2hhbmdlKClcclxuICAgICAgICAgICAgICA/IHJvd0RhdGEoKVtjb2x1bW4uZmllbGRdXHJcbiAgICAgICAgICAgICAgOiByb3dEYXRhQ29weSgpIVtjb2x1bW4uZmllbGRdXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiXHJcbiAgICAgICAgICAgIGF1dG9TYXZlT25DaGFuZ2UoKSAmJiBvbkZpZWxkQ2hhbmdlKGNvbHVtbi5maWVsZCwgJGV2ZW50KVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgIFtyZXF1aXJlZF09XCJjb2x1bW4uZWRpdENvbHVtblJlcXVpcmVkXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICBAaWYgKCFjb2x1bW4uZWRpdENvbHVtblJlcXVpcmVkKSB7XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiXCI+PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIEBmb3IgKG9wdGlvbiBvZiBkeW5hbWljU2VsZWN0T3B0aW9ucygpOyB0cmFjayBvcHRpb24pIHtcclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgIHt7IG9wdGlvbi5sYWJlbCB9fVxyXG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgfVxyXG4gIH0gQGVsc2Uge1xyXG4gICAgPGRpdj5cclxuICAgICAgQGlmIChjb2x1bW4udHJhbnNsYXRlVmFsdWUpIHtcclxuICAgICAgICB7eyBjb2x1bW4udHJhbnNsYXRlVmFsdWUhW3Jvd0RhdGEoKVtjb2x1bW4uZmllbGRdXSB8fCAnJyB9fVxyXG4gICAgICB9XHJcbiAgICAgIEBpZiAoY29sdW1uLmN1c3RvbVZhbHVlRGlzcGxheSkge1xyXG4gICAgICAgIHt7IGNvbHVtbi5jdXN0b21WYWx1ZURpc3BsYXkocm93RGF0YSgpW2NvbHVtbi5maWVsZF0pIH19XHJcbiAgICAgIH1cclxuICAgICAgQGlmICghY29sdW1uLnRyYW5zbGF0ZVZhbHVlICYmICFjb2x1bW4uY3VzdG9tVmFsdWVEaXNwbGF5KSB7XHJcbiAgICAgICAge3sgcm93RGF0YSgpW2NvbHVtbi5maWVsZF0gfX1cclxuICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbiAgfVxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwtdGFibGUtcm93LWNlbGwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbWF0ZXJpYWwtdGFibGUvbWF0ZXJpYWwtdGFibGUtcm93LWNlbGwvbWF0ZXJpYWwtdGFibGUtcm93LWNlbGwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbWF0ZXJpYWwtdGFibGUvbWF0ZXJpYWwtdGFibGUtcm93LWNlbGwvbWF0ZXJpYWwtdGFibGUtcm93LWNlbGwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsS0FBSyxFQUVMLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsR0FFVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBUXJELE1BQU0sT0FBTyw2QkFBNkI7SUF5QnhDLElBQ0ksVUFBVSxDQUFDLElBQWE7UUFDMUIsTUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBRXhCLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUU1QixxREFBcUQ7WUFDckQsSUFBSSxhQUFhLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLEVBQUUsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDakMsQ0FBQztR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c0ZBRzFCLFFBQVE7c0JBQTVCLFNBQVM7dUJBQUMsUUFBUTtnQkFDRyxTQUFTO3NCQUE5QixTQUFTO3VCQUFDLFNBQVM7Z0JBd0JoQixVQUFVO3NCQURiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgaW5wdXQsXHJcbiAgb3V0cHV0LFxyXG4gIHNpZ25hbCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvc3QtbWF0ZXJpYWwtdGFibGUtY29sdW1uLm1vZGVsJztcclxuaW1wb3J0IHsgTWF0SW5wdXQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XHJcbmltcG9ydCB7IE1hdFNlbGVjdCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3N0LW1hdGVyaWFsLXRhYmxlLXJvdy1jZWxsJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbWF0ZXJpYWwtdGFibGUtcm93LWNlbGwuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL21hdGVyaWFsLXRhYmxlLXJvdy1jZWxsLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYXRlcmlhbFRhYmxlUm93Q2VsbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQFZpZXdDaGlsZChNYXRJbnB1dCkgbWF0SW5wdXQ/OiBNYXRJbnB1dDtcclxuICBAVmlld0NoaWxkKE1hdFNlbGVjdCkgbWF0U2VsZWN0PzogTWF0U2VsZWN0O1xyXG4gIGNvbHVtbiA9IGlucHV0LnJlcXVpcmVkPFN0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsPigpO1xyXG5cclxuICByb3dEYXRhID0gaW5wdXQucmVxdWlyZWQ8e1xyXG4gICAgW3Byb3A6IHN0cmluZ106IGFueTtcclxuICB9PigpO1xyXG5cclxuICByb3dJbmRleCA9IGlucHV0LnJlcXVpcmVkPG51bWJlcj4oKTtcclxuXHJcbiAgcm93RGF0YUNvcHkgPSBpbnB1dDx7XHJcbiAgICBbcHJvcDogc3RyaW5nXTogYW55O1xyXG4gIH0+KCk7XHJcblxyXG4gIGNhbkVkaXRSb3dWYWxpZGF0b3IgPSBpbnB1dDwocm93OiBhbnkpID0+IGJvb2xlYW4+KCgpID0+IHRydWUpO1xyXG5cclxuICBjYW5EZWxldGVSb3dWYWxpZGF0b3IgPSBpbnB1dDwocm93OiBhbnkpID0+IGJvb2xlYW4+KCgpID0+IHRydWUpO1xyXG5cclxuICBzZWxlY3RSb3dPbmx5T25lID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBpc0ZpcnN0RWRpdGFibGVDb2x1bW4gPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGF1dG9TYXZlT25DaGFuZ2UgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHJvd0VkaXRpbmcoZGF0YTogYm9vbGVhbikge1xyXG4gICAgY29uc3Qgd2FzTm90RWRpdGluZyA9ICF0aGlzLl9yb3dFZGl0aW5nO1xyXG4gICAgdGhpcy5fcm93RWRpdGluZyA9IGRhdGE7XHJcblxyXG4gICAgaWYgKGRhdGEpIHtcclxuICAgICAgdGhpcy5nZXREeW5hbWljU2VsZWN0RGF0YSgpO1xyXG5cclxuICAgICAgLy8gRm9jdXMgZmlyc3QgZWRpdGFibGUgZmllbGQgd2hlbiBlbnRlcmluZyBlZGl0IG1vZGVcclxuICAgICAgaWYgKHdhc05vdEVkaXRpbmcgJiYgdGhpcy5pc0ZpcnN0RWRpdGFibGVDb2x1bW4oKSkge1xyXG4gICAgICAgIHRoaXMuZm9jdXNGaXJzdEVkaXRhYmxlRmllbGQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHJvd0VkaXRpbmcoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcm93RWRpdGluZztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3Jvd0VkaXRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcm93SXNTZWxlY3RlZCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgcm93SXNFeHBhbmRlZCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgc2F2ZUVkaXRSb3dFbWl0dGVyID0gb3V0cHV0PHZvaWQ+KCk7XHJcblxyXG4gIGNhbmNlbEVkaXRSb3dFbWl0dGVyID0gb3V0cHV0PHZvaWQ+KCk7XHJcblxyXG4gIGVkaXRSb3dFbWl0dGVyID0gb3V0cHV0PHZvaWQ+KCk7XHJcblxyXG4gIGRlbGV0ZVJvd0VtaXR0ZXIgPSBvdXRwdXQ8dm9pZD4oKTtcclxuXHJcbiAgc2VsZWN0Um93Q2hhbmdlID0gb3V0cHV0PGJvb2xlYW4+KCk7XHJcblxyXG4gIGZpZWxkVmFsdWVDaGFuZ2VkID0gb3V0cHV0PHsgZmllbGQ6IHN0cmluZzsgdmFsdWU6IGFueSB9PigpO1xyXG5cclxuICBtb2JpbGVWaWV3ID0gZmFsc2U7XHJcblxyXG4gIGFjdGlvbkljb25Db2xvckRlZjoge1xyXG4gICAgW2tleTogc3RyaW5nXTogJ3ByaW1hcnknIHwgJ3dhcm4nO1xyXG4gIH0gPSB7XHJcbiAgICBlZGl0OiAncHJpbWFyeScsXHJcbiAgICBkZWxldGU6ICd3YXJuJyxcclxuICB9O1xyXG5cclxuICBkeW5hbWljU2VsZWN0T3B0aW9ucyA9IHNpZ25hbDx7IHZhbHVlOiBhbnk7IGxhYmVsOiBzdHJpbmcgfVtdPihbXSk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBldmVudCA9PiB7XHJcbiAgICAgIHRoaXMuY2hlY2tXaWR0aFNpemUoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgLy8gSWYgcm93IGlzIGFscmVhZHkgaW4gZWRpdCBtb2RlIG9uIGluaXQgKGUuZy4sIG5ld2x5IGFkZGVkIHJvdyksIGZvY3VzIHRoZSBmaWVsZFxyXG4gICAgaWYgKHRoaXMucm93RWRpdGluZyAmJiB0aGlzLmlzRmlyc3RFZGl0YWJsZUNvbHVtbigpKSB7XHJcbiAgICAgIHRoaXMuZm9jdXNGaXJzdEVkaXRhYmxlRmllbGQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9jdXNGaXJzdEVkaXRhYmxlRmllbGQoKSB7XHJcbiAgICAvLyBVc2Ugc2V0VGltZW91dCB0byBlbnN1cmUgdGhlIHZpZXcgaXMgZnVsbHkgcmVuZGVyZWRcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5tYXRJbnB1dCkge1xyXG4gICAgICAgIC8vIEZvY3VzIE1hdElucHV0XHJcbiAgICAgICAgdGhpcy5tYXRJbnB1dC5mb2N1cygpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMubWF0U2VsZWN0KSB7XHJcbiAgICAgICAgLy8gT3BlbiBNYXRTZWxlY3QgZHJvcGRvd25cclxuICAgICAgICB0aGlzLm1hdFNlbGVjdC5mb2N1cygpO1xyXG4gICAgICAgIHRoaXMubWF0U2VsZWN0Lm9wZW4oKTtcclxuICAgICAgfVxyXG4gICAgfSwgMTUwKTtcclxuICB9XHJcblxyXG4gIHNhdmVSb3coKSB7XHJcbiAgICB0aGlzLnNhdmVFZGl0Um93RW1pdHRlci5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBjYW5jZWxSb3coKSB7XHJcbiAgICB0aGlzLmNhbmNlbEVkaXRSb3dFbWl0dGVyLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIGVkaXRSb3coKSB7XHJcbiAgICB0aGlzLmVkaXRSb3dFbWl0dGVyLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVJvdygpIHtcclxuICAgIHRoaXMuZGVsZXRlUm93RW1pdHRlci5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RSb3coZXZlbnQ6IHsgY2hlY2tlZDogYm9vbGVhbiB9KSB7XHJcbiAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RSb3dDaGFuZ2UuZW1pdChldmVudC5jaGVja2VkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRmllbGRDaGFuZ2UoZmllbGQ6IHN0cmluZywgdmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuYXV0b1NhdmVPbkNoYW5nZSgpKSB7XHJcbiAgICAgIHRoaXMuZmllbGRWYWx1ZUNoYW5nZWQuZW1pdCh7IGZpZWxkLCB2YWx1ZSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hlY2tXaWR0aFNpemUoKSB7XHJcbiAgICB0aGlzLm1vYmlsZVZpZXcgPSBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoIDw9IDExMDA7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXREeW5hbWljU2VsZWN0RGF0YSgpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5jb2x1bW4oKSAmJlxyXG4gICAgICB0aGlzLmNvbHVtbigpLmFsbG93RWRpdENvbHVtbiAmJlxyXG4gICAgICB0aGlzLmNvbHVtbigpLnJvd0VkaXRUeXBlID09PSAnY3VzdG9tLWR5bmFtaWMtc2VsZWN0JyAmJlxyXG4gICAgICB0aGlzLmNvbHVtbigpLmR5bmFtaWNSb3dFZGl0T3B0aW9uc1xyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZHluYW1pY1NlbGVjdE9wdGlvbnMuc2V0KFxyXG4gICAgICAgIHRoaXMuY29sdW1uKCkuZHluYW1pY1Jvd0VkaXRPcHRpb25zISh0aGlzLnJvd0RhdGEoKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiQHN3aXRjaCAoY29sdW1uKCkudHlwZSB8fCAnc3RyaW5nJykge1xyXG4gIEBjYXNlICgnY3VzdG9tLXRlbXBsYXRlJykge1xyXG4gICAgQGlmIChyb3dFZGl0aW5nICYmIGNvbHVtbigpLmFsbG93RWRpdENvbHVtbikge1xyXG4gICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJiYXNlRmllbGRDZWxsOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogY29sdW1uKCkgfVwiXHJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgIH0gQGVsc2Uge1xyXG4gICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uKCkuY3VzdG9tVGVtcGxhdGUhXCJcclxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBkYXRhOiByb3dEYXRhKCkgfVwiXHJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBjYXNlICgnYWN0aW9ucycpIHtcclxuICAgIEBpZiAoY29sdW1uKCkuYWN0aW9ucykge1xyXG4gICAgICBAaWYgKFxyXG4gICAgICAgICghY29sdW1uKCkuYWN0aW9uc0luTWVudSAmJiAhbW9iaWxlVmlldykgfHxcclxuICAgICAgICAobW9iaWxlVmlldyAmJiBjb2x1bW4oKS5hY3Rpb25zIS5sZW5ndGggPD0gMSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7IGZsb2F0OiBjb2x1bW4oKS5mbGV4UmlnaHQgPyAncmlnaHQnIDogJ25vbmUnIH1cIj5cclxuICAgICAgICAgIEBmb3IgKGFjdGlvbiBvZiBjb2x1bW4oKS5hY3Rpb25zOyB0cmFjayBhY3Rpb24pIHtcclxuICAgICAgICAgICAgQGlmICgoYWN0aW9uLnNob3cgJiYgYWN0aW9uLnNob3cocm93RGF0YSgpKSkgfHwgIWFjdGlvbi5zaG93KSB7XHJcbiAgICAgICAgICAgICAgQGlmICghYWN0aW9uLnVybCAmJiBhY3Rpb24uYWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uLWljb24tYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICBbY29sb3JdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uSWNvbkNvbG9yRGVmW2FjdGlvbi5pY29uTmFtZV1cclxuICAgICAgICAgICAgICAgICAgICAgID8gYWN0aW9uSWNvbkNvbG9yRGVmW2FjdGlvbi5pY29uTmFtZV1cclxuICAgICAgICAgICAgICAgICAgICAgIDogYWN0aW9uLmljb25Db2xvclxyXG4gICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJhY3Rpb24udG9vbHRpcE5hbWUgfHwgJydcIlxyXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcERpc2FibGVkXT1cIiFhY3Rpb24udG9vbHRpcE5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbi5hY3Rpb24hKHJvd0RhdGEoKSwgcm93SW5kZXgoKSlcclxuICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPnt7IGFjdGlvbi5pY29uTmFtZSB9fTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgQGlmIChhY3Rpb24udXJsKSB7XHJcbiAgICAgICAgICAgICAgICA8YSBbcm91dGVyTGlua109XCJhY3Rpb24udXJsXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFjdGlvbi1pY29uLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgYWN0aW9uSWNvbkNvbG9yRGVmW2FjdGlvbi5pY29uTmFtZV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBhY3Rpb25JY29uQ29sb3JEZWZbYWN0aW9uLmljb25OYW1lXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGFjdGlvbi5pY29uQ29sb3JcclxuICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImFjdGlvbi50b29sdGlwTmFtZSB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBEaXNhYmxlZF09XCIhYWN0aW9uLnRvb2x0aXBOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj57eyBhY3Rpb24uaWNvbk5hbWUgfX08L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgfVxyXG4gICAgICBAaWYgKFxyXG4gICAgICAgIGNvbHVtbigpLmFjdGlvbnNJbk1lbnUgfHwgKG1vYmlsZVZpZXcgJiYgY29sdW1uKCkuYWN0aW9ucyEubGVuZ3RoID4gMSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCJcclxuICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cclxuICAgICAgICAgIEBmb3IgKGFjdGlvbiBvZiBjb2x1bW4oKS5hY3Rpb25zOyB0cmFjayBhY3Rpb24pIHtcclxuICAgICAgICAgICAgQGlmICgoYWN0aW9uLnNob3cgJiYgYWN0aW9uLnNob3cocm93RGF0YSgpKSkgfHwgIWFjdGlvbi5zaG93KSB7XHJcbiAgICAgICAgICAgICAgQGlmICghYWN0aW9uLnVybCAmJiBhY3Rpb24uYWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGFjdGlvbi5hY3Rpb24hKHJvd0RhdGEoKSlcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICB7eyBhY3Rpb24udG9vbHRpcE5hbWUgfX1cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBAaWYgKGFjdGlvbi51cmwpIHtcclxuICAgICAgICAgICAgICAgIDxhIFtyb3V0ZXJMaW5rXT1cImFjdGlvbi51cmxcIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LW1lbnUtaXRlbT5cclxuICAgICAgICAgICAgICAgICAgICB7eyBhY3Rpb24udG9vbHRpcE5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9tYXQtbWVudT5cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQGNhc2UgKCdzdHJpbmcnKSB7XHJcbiAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiYmFzZUZpZWxkQ2VsbDsgY29udGV4dDogeyAkaW1wbGljaXQ6IGNvbHVtbigpIH1cIlxyXG4gICAgPjwvbmctY29udGFpbmVyPlxyXG4gIH1cclxuXHJcbiAgQGNhc2UgKCdudW1iZXInKSB7XHJcbiAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiYmFzZUZpZWxkQ2VsbDsgY29udGV4dDogeyAkaW1wbGljaXQ6IGNvbHVtbigpIH1cIlxyXG4gICAgPjwvbmctY29udGFpbmVyPlxyXG4gIH1cclxuXHJcbiAgQGNhc2UgKCdib29sZWFuJykge1xyXG4gICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImJhc2VGaWVsZENlbGw7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBjb2x1bW4oKSB9XCJcclxuICAgID48L25nLWNvbnRhaW5lcj5cclxuICB9XHJcblxyXG4gIEBjYXNlICgnZGF0ZScpIHtcclxuICAgIEBpZiAocm93RWRpdGluZyAmJiBjb2x1bW4oKS5hbGxvd0VkaXRDb2x1bW4pIHtcclxuICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiYmFzZUZpZWxkQ2VsbDsgY29udGV4dDogeyAkaW1wbGljaXQ6IGNvbHVtbigpIH1cIlxyXG4gICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICB9IEBlbHNlIHtcclxuICAgICAge3sgcm93RGF0YSgpW2NvbHVtbigpLmZpZWxkXSB8IHN0RGF0ZVRpbWVGb3JtYXRQaXBlIH19XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAY2FzZSAoJ2FjdGlvbnMtcm93LWVkaXRpbmcnKSB7XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgQGlmIChyb3dFZGl0aW5nKSB7XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgIGNvbG9yPVwiYWNjZW50XCJcclxuICAgICAgICAgIChjbGljayk9XCJzYXZlUm93KClcIlxyXG4gICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ1NhdmUgcm93J1wiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmRvbmU8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICBjb2xvcj1cIndhcm5cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImNhbmNlbFJvdygpXCJcclxuICAgICAgICAgIFttYXRUb29sdGlwXT1cIidDYW5jZWwgcm93J1wiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiZWRpdFJvdygpXCJcclxuICAgICAgICAgIFttYXRUb29sdGlwXT1cIidFZGl0IHJvdydcIlxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIlxyXG4gICAgICAgICAgICBjYW5FZGl0Um93VmFsaWRhdG9yKCkgPyAhY2FuRWRpdFJvd1ZhbGlkYXRvcigpKHJvd0RhdGEoKSkgOiBmYWxzZVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWljb24+ZWRpdDwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgIGNvbG9yPVwid2FyblwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlUm93KClcIlxyXG4gICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ0RlbGV0ZSByb3cnXCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCJcclxuICAgICAgICAgICAgY2FuRGVsZXRlUm93VmFsaWRhdG9yKClcclxuICAgICAgICAgICAgICA/ICFjYW5EZWxldGVSb3dWYWxpZGF0b3IoKShyb3dEYXRhKCkpXHJcbiAgICAgICAgICAgICAgOiBmYWxzZVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbiAgfVxyXG5cclxuICBAY2FzZSAoJ2FjdGlvbnMtcm93LXNlbGVjdGluZycpIHtcclxuICAgIDwhLS0gICAgQGlmIChzZWxlY3RSb3dPbmx5T25lKCkpIHstLT5cclxuICAgIDwhLS0gICAgICA8bWF0LXJhZGlvLWJ1dHRvbi0tPlxyXG4gICAgPCEtLSAgICAgICAgY29sb3I9XCJwcmltYXJ5XCItLT5cclxuICAgIDwhLS0gICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIi0tPlxyXG4gICAgPCEtLSAgICAgICAgKGNoYW5nZSk9XCJzZWxlY3RSb3coeyBjaGVja2VkOiB0cnVlIH0pXCItLT5cclxuICAgIDwhLS0gICAgICAgIFtjaGVja2VkXT1cInJvd0lzU2VsZWN0ZWQoKVwiLS0+XHJcbiAgICA8IS0tICAgICAgPjwvbWF0LXJhZGlvLWJ1dHRvbj4tLT5cclxuICAgIDwhLS0gICAgfSBAZWxzZSB7LS0+XHJcbiAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAoY2hhbmdlKT1cInNlbGVjdFJvdygkZXZlbnQpXCJcclxuICAgICAgW2NoZWNrZWRdPVwicm93SXNTZWxlY3RlZCgpXCJcclxuICAgID48L21hdC1jaGVja2JveD5cclxuICAgIDwhLS0gICAgfS0tPlxyXG4gIH1cclxuXHJcbiAgQGNhc2UgKCdhY3Rpb25zLXJvdy1leHRlbmRpbmcnKSB7XHJcbiAgICBAaWYgKHJvd0lzRXhwYW5kZWQoKSkge1xyXG4gICAgICA8bWF0LWljb24+a2V5Ym9hcmRfYXJyb3dfdXA8L21hdC1pY29uPlxyXG4gICAgfSBAZWxzZSB7XHJcbiAgICAgIDxtYXQtaWNvbj5rZXlib2FyZF9hcnJvd19kb3duPC9tYXQtaWNvbj5cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbjxuZy10ZW1wbGF0ZSAjYmFzZUZpZWxkQ2VsbCBsZXQtY29sdW1uPlxyXG4gIEBpZiAoKHJvd0VkaXRpbmcgfHwgYXV0b1NhdmVPbkNoYW5nZSgpKSAmJiBjb2x1bW4uYWxsb3dFZGl0Q29sdW1uKSB7XHJcbiAgICBAaWYgKGNvbHVtbi5yb3dFZGl0VHlwZSA9PT0gJ3N0cmluZycgfHwgY29sdW1uLnJvd0VkaXRUeXBlID09PSAnbnVtYmVyJykge1xyXG4gICAgICA8bWF0LWZvcm0tZmllbGRcclxuICAgICAgICBhcHBlYXJhbmNlPVwib3V0bGluZVwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwieyB3aWR0aDogY29sdW1uLndpZHRoIHx8ICdhdXRvJyB9XCJcclxuICAgICAgPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgIFt0eXBlXT1cImNvbHVtbi5yb3dFZGl0VHlwZSA9PT0gJ3N0cmluZycgPyAndGV4dCcgOiAnbnVtYmVyJ1wiXHJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cIlxyXG4gICAgICAgICAgICBhdXRvU2F2ZU9uQ2hhbmdlKClcclxuICAgICAgICAgICAgICA/IHJvd0RhdGEoKVtjb2x1bW4uZmllbGRdXHJcbiAgICAgICAgICAgICAgOiByb3dEYXRhQ29weSgpIVtjb2x1bW4uZmllbGRdXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiXHJcbiAgICAgICAgICAgIGF1dG9TYXZlT25DaGFuZ2UoKSAmJiBvbkZpZWxkQ2hhbmdlKGNvbHVtbi5maWVsZCwgJGV2ZW50KVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIiFhdXRvU2F2ZU9uQ2hhbmdlKCkgJiYgc2F2ZVJvdygpXCJcclxuICAgICAgICAgIFtyZXF1aXJlZF09XCJjb2x1bW4uZWRpdENvbHVtblJlcXVpcmVkXCJcclxuICAgICAgICAvPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgfVxyXG4gICAgQGlmIChjb2x1bW4ucm93RWRpdFR5cGUgPT09ICdkYXRlJykge1xyXG4gICAgICA8bWF0LWZvcm0tZmllbGRcclxuICAgICAgICBhcHBlYXJhbmNlPVwib3V0bGluZVwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwieyB3aWR0aDogY29sdW1uLndpZHRoIHx8ICdhdXRvJyB9XCJcclxuICAgICAgPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgIFttYXREYXRlcGlja2VyXT1cInBpY2tlcjFcIlxyXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJcclxuICAgICAgICAgICAgYXV0b1NhdmVPbkNoYW5nZSgpXHJcbiAgICAgICAgICAgICAgPyByb3dEYXRhKClbY29sdW1uLmZpZWxkXVxyXG4gICAgICAgICAgICAgIDogcm93RGF0YUNvcHkoKSFbY29sdW1uLmZpZWxkXVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIlxyXG4gICAgICAgICAgICBhdXRvU2F2ZU9uQ2hhbmdlKCkgJiYgb25GaWVsZENoYW5nZShjb2x1bW4uZmllbGQsICRldmVudClcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCIhYXV0b1NhdmVPbkNoYW5nZSgpICYmIHNhdmVSb3coKVwiXHJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwiY29sdW1uLmVkaXRDb2x1bW5SZXF1aXJlZFwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlXHJcbiAgICAgICAgICBtYXRJY29uU3VmZml4XHJcbiAgICAgICAgICBbZm9yXT1cInBpY2tlcjFcIlxyXG4gICAgICAgID48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI3BpY2tlcjE+PC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIH1cclxuICAgIEBpZiAoY29sdW1uLnJvd0VkaXRUeXBlID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgIFsobmdNb2RlbCldPVwiXHJcbiAgICAgICAgICBhdXRvU2F2ZU9uQ2hhbmdlKClcclxuICAgICAgICAgICAgPyByb3dEYXRhKClbY29sdW1uLmZpZWxkXVxyXG4gICAgICAgICAgICA6IHJvd0RhdGFDb3B5KCkhW2NvbHVtbi5maWVsZF1cclxuICAgICAgICBcIlxyXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIlxyXG4gICAgICAgICAgYXV0b1NhdmVPbkNoYW5nZSgpICYmIG9uRmllbGRDaGFuZ2UoY29sdW1uLmZpZWxkLCAkZXZlbnQpXHJcbiAgICAgICAgXCJcclxuICAgICAgPjwvbWF0LWNoZWNrYm94PlxyXG4gICAgfVxyXG5cclxuICAgIEBpZiAoY29sdW1uLnJvd0VkaXRUeXBlID09PSAnY3VzdG9tJykge1xyXG4gICAgICA8bWF0LWZvcm0tZmllbGRcclxuICAgICAgICBhcHBlYXJhbmNlPVwib3V0bGluZVwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwieyB3aWR0aDogY29sdW1uLndpZHRoIHx8ICdhdXRvJyB9XCJcclxuICAgICAgPlxyXG4gICAgICAgIDxtYXQtc2VsZWN0XHJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cIlxyXG4gICAgICAgICAgICBhdXRvU2F2ZU9uQ2hhbmdlKClcclxuICAgICAgICAgICAgICA/IHJvd0RhdGEoKVtjb2x1bW4uZmllbGRdXHJcbiAgICAgICAgICAgICAgOiByb3dEYXRhQ29weSgpIVtjb2x1bW4uZmllbGRdXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiXHJcbiAgICAgICAgICAgIGF1dG9TYXZlT25DaGFuZ2UoKSAmJiBvbkZpZWxkQ2hhbmdlKGNvbHVtbi5maWVsZCwgJGV2ZW50KVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgIFtyZXF1aXJlZF09XCJjb2x1bW4uZWRpdENvbHVtblJlcXVpcmVkXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlwiPjwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIEBmb3IgKG9wdGlvbiBvZiBjb2x1bW4uY3VzdG9tUm93RWRpdE9wdGlvbnM7IHRyYWNrIG9wdGlvbikge1xyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAge3sgb3B0aW9uLmxhYmVsIH19XHJcbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICB9XHJcblxyXG4gICAgQGlmIChjb2x1bW4ucm93RWRpdFR5cGUgPT09ICdjdXN0b20tZHluYW1pYy1zZWxlY3QnKSB7XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZFxyXG4gICAgICAgIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCJcclxuICAgICAgICBbbmdTdHlsZV09XCJ7IHdpZHRoOiBjb2x1bW4ud2lkdGggfHwgJ2F1dG8nIH1cIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG1hdC1zZWxlY3RcclxuICAgICAgICAgIFsobmdNb2RlbCldPVwiXHJcbiAgICAgICAgICAgIGF1dG9TYXZlT25DaGFuZ2UoKVxyXG4gICAgICAgICAgICAgID8gcm93RGF0YSgpW2NvbHVtbi5maWVsZF1cclxuICAgICAgICAgICAgICA6IHJvd0RhdGFDb3B5KCkhW2NvbHVtbi5maWVsZF1cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJcclxuICAgICAgICAgICAgYXV0b1NhdmVPbkNoYW5nZSgpICYmIG9uRmllbGRDaGFuZ2UoY29sdW1uLmZpZWxkLCAkZXZlbnQpXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgW3JlcXVpcmVkXT1cImNvbHVtbi5lZGl0Q29sdW1uUmVxdWlyZWRcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIEBpZiAoIWNvbHVtbi5lZGl0Q29sdW1uUmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJcIj48L21hdC1vcHRpb24+XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgQGZvciAob3B0aW9uIG9mIGR5bmFtaWNTZWxlY3RPcHRpb25zKCk7IHRyYWNrIG9wdGlvbikge1xyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAge3sgb3B0aW9uLmxhYmVsIH19XHJcbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICB9XHJcbiAgfSBAZWxzZSB7XHJcbiAgICA8ZGl2PlxyXG4gICAgICBAaWYgKGNvbHVtbi50cmFuc2xhdGVWYWx1ZSkge1xyXG4gICAgICAgIHt7IGNvbHVtbi50cmFuc2xhdGVWYWx1ZSFbcm93RGF0YSgpW2NvbHVtbi5maWVsZF1dIHx8ICcnIH19XHJcbiAgICAgIH1cclxuICAgICAgQGlmIChjb2x1bW4uY3VzdG9tVmFsdWVEaXNwbGF5KSB7XHJcbiAgICAgICAge3sgY29sdW1uLmN1c3RvbVZhbHVlRGlzcGxheShyb3dEYXRhKClbY29sdW1uLmZpZWxkXSkgfX1cclxuICAgICAgfVxyXG4gICAgICBAaWYgKCFjb2x1bW4udHJhbnNsYXRlVmFsdWUgJiYgIWNvbHVtbi5jdXN0b21WYWx1ZURpc3BsYXkpIHtcclxuICAgICAgICB7eyByb3dEYXRhKClbY29sdW1uLmZpZWxkXSB9fVxyXG4gICAgICB9XHJcbiAgICA8L2Rpdj5cclxuICB9XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==