@koobiq/components 18.25.0 → 18.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/checkbox/checkbox-tokens.scss +0 -2
  2. package/checkbox/checkbox.scss +17 -11
  3. package/core/pop-up/pop-up-trigger.d.ts +2 -1
  4. package/core/styles/common/_select.scss +1 -2
  5. package/dropdown/_dropdown-theme.scss +6 -6
  6. package/dropdown/dropdown.scss +3 -3
  7. package/esm2022/checkbox/checkbox.mjs +2 -2
  8. package/esm2022/core/pop-up/pop-up-trigger.mjs +3 -2
  9. package/esm2022/core/version.mjs +2 -2
  10. package/esm2022/file-upload/multiple-file-upload.component.mjs +3 -4
  11. package/esm2022/file-upload/single-file-upload.component.mjs +6 -7
  12. package/esm2022/form-field/form-field.mjs +2 -2
  13. package/esm2022/list/list-selection.component.mjs +2 -2
  14. package/esm2022/list/list.component.mjs +2 -2
  15. package/esm2022/modal/modal.component.mjs +2 -2
  16. package/esm2022/popover/popover.component.mjs +20 -1
  17. package/esm2022/select/select.component.mjs +3 -3
  18. package/esm2022/sidepanel/sidepanel-container.component.mjs +2 -2
  19. package/esm2022/tags/tag-list.component.mjs +12 -6
  20. package/esm2022/timezone/timezone-select.component.mjs +2 -2
  21. package/esm2022/top-bar/top-bar.mjs +14 -6
  22. package/esm2022/tree-select/tree-select.component.mjs +3 -3
  23. package/fesm2022/koobiq-components-checkbox.mjs +2 -2
  24. package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
  25. package/fesm2022/koobiq-components-core.mjs +3 -2
  26. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  27. package/fesm2022/koobiq-components-file-upload.mjs +7 -9
  28. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  29. package/fesm2022/koobiq-components-form-field.mjs +2 -2
  30. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  31. package/fesm2022/koobiq-components-list.mjs +4 -4
  32. package/fesm2022/koobiq-components-list.mjs.map +1 -1
  33. package/fesm2022/koobiq-components-modal.mjs +2 -2
  34. package/fesm2022/koobiq-components-modal.mjs.map +1 -1
  35. package/fesm2022/koobiq-components-popover.mjs +19 -0
  36. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  37. package/fesm2022/koobiq-components-select.mjs +2 -2
  38. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  39. package/fesm2022/koobiq-components-sidepanel.mjs +2 -2
  40. package/fesm2022/koobiq-components-tags.mjs +11 -5
  41. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  42. package/fesm2022/koobiq-components-timezone.mjs +2 -2
  43. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  44. package/fesm2022/koobiq-components-top-bar.mjs +13 -5
  45. package/fesm2022/koobiq-components-top-bar.mjs.map +1 -1
  46. package/fesm2022/koobiq-components-tree-select.mjs +2 -2
  47. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  48. package/file-upload/_file-upload-theme.scss +8 -8
  49. package/file-upload/file-upload.scss +3 -3
  50. package/list/_list-theme.scss +9 -19
  51. package/list/list.scss +20 -6
  52. package/modal/modal-tokens.scss +1 -1
  53. package/modal/modal.scss +6 -3
  54. package/package.json +4 -4
  55. package/popover/popover.component.d.ts +5 -3
  56. package/schematics/ng-add/index.js +2 -2
  57. package/sidepanel/sidepanel-tokens.scss +4 -4
  58. package/textarea/textarea-tokens.scss +1 -1
  59. package/top-bar/top-bar-tokens.scss +4 -3
  60. package/top-bar/top-bar.d.ts +7 -0
  61. package/top-bar/top-bar.scss +27 -3
@@ -155,9 +155,6 @@ export class KbqMultipleFileUploadComponent extends KbqFileUploadBase {
155
155
  return;
156
156
  }
157
157
  const filesToAdd = this.mapToFileItem(target.files);
158
- /* even if the user selects the same file,
159
- the onchange event will be triggered every time user clicks on the control.*/
160
- this.renderer.setProperty(this.input.nativeElement, 'value', null);
161
158
  this.files = [
162
159
  ...this.files,
163
160
  ...filesToAdd
@@ -165,6 +162,8 @@ export class KbqMultipleFileUploadComponent extends KbqFileUploadBase {
165
162
  this.filesAdded.emit(filesToAdd);
166
163
  this.filesChange.emit(this.files);
167
164
  this.onTouched();
165
+ // allows the same file selection every time user clicks on the control.
166
+ this.renderer.setProperty(target, 'value', null);
168
167
  }
169
168
  /** @docs-private */
170
169
  onFileDropped(files) {
@@ -278,4 +277,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImpor
278
277
  type: ContentChildren,
279
278
  args: [KbqHint]
280
279
  }] } });
281
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlwbGUtZmlsZS11cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9maWxlLXVwbG9hZC9tdWx0aXBsZS1maWxlLXVwbG9hZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL2ZpbGUtdXBsb2FkL211bHRpcGxlLWZpbGUtdXBsb2FkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBRWYsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZDLE9BQU8sRUFDSCxrQkFBa0IsRUFDbEIsNkJBQTZCLEVBRzdCLGlCQUFpQixFQUlwQixNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7OztBQUV2QixJQUFJLDhCQUE4QixHQUFHLENBQUMsQ0FBQztBQWF2QyxNQUFNLENBQUMsTUFBTSw4Q0FBOEMsR0FDdkQsY0FBYyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7QUFZdkMsTUFBTSxPQUFPLDhCQUNULFNBQVEsaUJBQWlCO0lBNkJ6QixJQUFJLEtBQUs7UUFDTCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQ0ksS0FB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S0csV0FBVztzQkFBcEIsTUFBTTtnQkFHNEQsY0FBYztzQkFBaEYsWUFBWTt1QkFBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBRzdDLEtBQUs7c0JBQXhCLFNBQVM7dUJBQUMsT0FBTztnQkFHMkIsSUFBSTtzQkFBaEQsZUFBZTt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIERvQ2hlY2ssXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBFcnJvclN0YXRlTWF0Y2hlciwgcnVSVUxvY2FsZURhdGEgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvY29yZSc7XG5pbXBvcnQgeyBLYnFIaW50IH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgUHJvZ3Jlc3NTcGlubmVyTW9kZSB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy9wcm9ncmVzcy1zcGlubmVyJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgICBpc0NvcnJlY3RFeHRlbnNpb24sXG4gICAgS0JRX0ZJTEVfVVBMT0FEX0NPTkZJR1VSQVRJT04sXG4gICAgS2JxRmlsZSxcbiAgICBLYnFGaWxlSXRlbSxcbiAgICBLYnFGaWxlVXBsb2FkQmFzZSxcbiAgICBLYnFGaWxlVmFsaWRhdG9yRm4sXG4gICAgS2JxSW5wdXRGaWxlLFxuICAgIEticUlucHV0RmlsZUxhYmVsXG59IGZyb20gJy4vZmlsZS11cGxvYWQnO1xuXG5sZXQgbmV4dE11bHRpcGxlRmlsZVVwbG9hZFVuaXF1ZUlkID0gMDtcblxuZXhwb3J0IGludGVyZmFjZSBLYnFJbnB1dEZpbGVNdWx0aXBsZUxhYmVsIGV4dGVuZHMgS2JxSW5wdXRGaWxlTGFiZWwge1xuICAgIGNhcHRpb25UZXh0V2hlblNlbGVjdGVkOiBzdHJpbmc7XG4gICAgY2FwdGlvblRleHRGb3JDb21wYWN0U2l6ZTogc3RyaW5nO1xuICAgIGdyaWRIZWFkZXJzOiB7XG4gICAgICAgIGZpbGU6IHN0cmluZztcbiAgICAgICAgc2l6ZTogc3RyaW5nO1xuICAgIH07XG5cbiAgICBbazogc3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sXTogdW5rbm93bjtcbn1cblxuZXhwb3J0IGNvbnN0IEtCUV9NVUxUSVBMRV9GSUxFX1VQTE9BRF9ERUZBVUxUX0NPTkZJR1VSQVRJT046IEticUlucHV0RmlsZU11bHRpcGxlTGFiZWwgPVxuICAgIHJ1UlVMb2NhbGVEYXRhLmZpbGVVcGxvYWQubXVsdGlwbGU7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAna2JxLW11bHRpcGxlLWZpbGUtdXBsb2FkLGticS1maWxlLXVwbG9hZFttdWx0aXBsZV0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9tdWx0aXBsZS1maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZmlsZS11cGxvYWQuc2NzcycsICcuL2ZpbGUtdXBsb2FkLXRva2Vucy5zY3NzJywgJy4vbXVsdGlwbGUtZmlsZS11cGxvYWQuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdrYnEtbXVsdGlwbGUtZmlsZS11cGxvYWQnXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBLYnFNdWx0aXBsZUZpbGVVcGxvYWRDb21wb25lbnRcbiAgICBleHRlbmRzIEticUZpbGVVcGxvYWRCYXNlXG4gICAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBLYnFJbnB1dEZpbGUsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBEb0NoZWNrXG57XG4gICAgLyoqXG4gICAgICogQSB2YWx1ZSByZXNwb25zaWJsZSBmb3IgcHJvZ3Jlc3Mgc3Bpbm5lciB0eXBlLlxuICAgICAqIExvYWRpbmcgbG9naWMgZGVwZW5kcyBvbiBzZWxlY3RlZCBtb2RlICovXG4gICAgQElucHV0KCkgcHJvZ3Jlc3NNb2RlOiBQcm9ncmVzc1NwaW5uZXJNb2RlID0gJ2RldGVybWluYXRlJztcbiAgICAvKiogQXJyYXkgb2YgZmlsZSB0eXBlIHNwZWNpZmllcnMgKi9cbiAgICBASW5wdXQoKSBhY2NlcHQ/OiBzdHJpbmdbXTtcbiAgICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgYEZvcm1Db250cm9sLmVycm9yc2BcbiAgICAgKi9cbiAgICBASW5wdXQoKSBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgQElucHV0KCkgc2l6ZTogJ2NvbXBhY3QnIHwgJ2RlZmF1bHQnID0gJ2RlZmF1bHQnO1xuICAgIC8qKlxuICAgICAqIGN1c3RvbSBJRCBmb3IgdGhlIGZpbGUgaW5wdXQgZWxlbWVudC5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBpbnB1dElkOiBzdHJpbmcgPSBga2JxLW11bHRpcGxlLWZpbGUtdXBsb2FkLSR7bmV4dE11bHRpcGxlRmlsZVVwbG9hZFVuaXF1ZUlkKyt9YDtcbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgRm9ybUNvbnRyb2wgZm9yIHZhbGlkYXRpb25cbiAgICAgKi9cbiAgICBASW5wdXQoKSBjdXN0b21WYWxpZGF0aW9uPzogS2JxRmlsZVZhbGlkYXRvckZuW107XG5cbiAgICAvKiogQW4gb2JqZWN0IHVzZWQgdG8gY29udHJvbCB0aGUgZXJyb3Igc3RhdGUgb2YgdGhlIGNvbXBvbmVudC4gKi9cbiAgICBASW5wdXQoKSBlcnJvclN0YXRlTWF0Y2hlcjogRXJyb3JTdGF0ZU1hdGNoZXI7XG5cbiAgICBwcml2YXRlIF9maWxlczogS2JxRmlsZUl0ZW1bXSA9IFtdO1xuXG4gICAgZ2V0IGZpbGVzKCk6IEticUZpbGVJdGVtW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsZXM7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBzZXQgZmlsZXMoY3VycmVudEZpbGVMaXN0OiBLYnFGaWxlSXRlbVtdKSB7XG4gICAgICAgIHRoaXMuX2ZpbGVzID0gY3VycmVudEZpbGVMaXN0O1xuICAgICAgICB0aGlzLmN2YU9uQ2hhbmdlKHRoaXMuX2ZpbGVzKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEVtaXRzIGFuIGV2ZW50IGNvbnRhaW5pbmcgdXBkYXRlZCBmaWxlIGxpc3QuXG4gICAgICogcHVibGljIG91dHB1dCB3aWxsIGJlIHJlbmFtZWQgdG8gZmlsZXNDaGFuZ2UgaW4gbmV4dCBtYWpvciByZWxlYXNlICgjRFMtMzcwMCkgKi9cbiAgICBAT3V0cHV0KCdmaWxlUXVldWVDaGFuZ2VkJykgZmlsZXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxLYnFGaWxlSXRlbVtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8S2JxRmlsZUl0ZW1bXT4oKTtcbiAgICAvKipcbiAgICAgKiBFbWl0cyBhbiBldmVudCBjb250YWluaW5nIGEgY2h1bmsgb2YgZmlsZXMgYWRkZWQgdG8gdGhlIGZpbGUgbGlzdC5cbiAgICAgKiBVc2VmdWwgd2hlbiBoYW5kbGluZyBhZGRlZCBmaWxlcywgc2tpcHBpbmcgZmlsdGVyaW5nIGZpbGUgbGlzdC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgZmlsZXNBZGRlZDogRXZlbnRFbWl0dGVyPEticUZpbGVJdGVtW10+ID0gbmV3IEV2ZW50RW1pdHRlcjxLYnFGaWxlSXRlbVtdPigpO1xuICAgIC8qKlxuICAgICAqIEVtaXRzIGFuIGV2ZW50IGNvbnRhaW5pbmcgYSB0dXBsZSBvZiBmaWxlIGFuZCBmaWxlJ3MgaW5kZXggd2hlbiByZW1vdmVkIGZyb20gdGhlIGZpbGUgbGlzdC5cbiAgICAgKiBVc2VmdWwgd2hlbiBoYW5kbGUgcmVtb3ZlZCBmaWxlcywgc2tpcHBpbmcgZmlsdGVyaW5nIGZpbGUgbGlzdC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgZmlsZVJlbW92ZWQ6IEV2ZW50RW1pdHRlcjxbS2JxRmlsZUl0ZW0sIG51bWJlcl0+ID0gbmV3IEV2ZW50RW1pdHRlcjxbS2JxRmlsZUl0ZW0sIG51bWJlcl0+KCk7XG5cbiAgICAvKiogRmlsZSBJY29uIFRlbXBsYXRlICovXG4gICAgQENvbnRlbnRDaGlsZCgna2JxRmlsZUljb24nLCB7IHN0YXRpYzogZmFsc2UsIHJlYWQ6IFRlbXBsYXRlUmVmIH0pIGN1c3RvbUZpbGVJY29uOiBUZW1wbGF0ZVJlZjxIVE1MRWxlbWVudD47XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIEBWaWV3Q2hpbGQoJ2lucHV0JykgaW5wdXQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oS2JxSGludCkgcHJvdGVjdGVkIHJlYWRvbmx5IGhpbnQ6IFF1ZXJ5TGlzdDxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgaGFzRm9jdXMgPSBmYWxzZTtcbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIGNvbHVtbkRlZnM6IHsgaGVhZGVyOiBzdHJpbmc7IGNzc0NsYXNzOiBzdHJpbmcgfVtdO1xuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgY29uZmlnOiBLYnFJbnB1dEZpbGVNdWx0aXBsZUxhYmVsO1xuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBzZXBhcmF0ZWRDYXB0aW9uVGV4dDogc3RyaW5nW107XG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBzZXBhcmF0ZWRDYXB0aW9uVGV4dFdoZW5TZWxlY3RlZDogc3RyaW5nW107XG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBzZXBhcmF0ZWRDYXB0aW9uVGV4dEZvckNvbXBhY3RTaXplOiBzdHJpbmdbXTtcblxuICAgIC8qKiBjdmFPbkNoYW5nZSBmdW5jdGlvbiByZWdpc3RlcmVkIHZpYSByZWdpc3Rlck9uQ2hhbmdlIChDb250cm9sVmFsdWVBY2Nlc3NvcikuXG4gICAgICogQGRvY3MtcHJpdmF0ZVxuICAgICAqL1xuICAgIGN2YU9uQ2hhbmdlID0gKF86IEticUZpbGVJdGVtW10pID0+IHt9O1xuXG4gICAgLyoqIG9uVG91Y2ggZnVuY3Rpb24gcmVnaXN0ZXJlZCB2aWEgcmVnaXN0ZXJPblRvdWNoIChDb250cm9sVmFsdWVBY2Nlc3NvcikuXG4gICAgICogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIG9uVG91Y2hlZCA9ICgpID0+IHt9O1xuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBnZXQgYWNjZXB0ZWRGaWxlcygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5hY2NlcHQ/LmpvaW4oJywnKSB8fCAnKi8qJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgYEZvcm1Db250cm9sLmVycm9yc2BcbiAgICAgKi9cbiAgICBnZXQgaGFzRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5lcnJvcnMgJiYgISF0aGlzLmVycm9ycy5sZW5ndGg7XG4gICAgfVxuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBnZXQgaGFzSGludCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGludC5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBhbiBpbnZhbGlkIHN0YXRlIGJhc2VkIG9uIGBlcnJvclN0YXRlYCxcbiAgICAgKiBhcHBseWluZyBhIENTUyBjbGFzcyBpbiBIVE1MIGZvciB2aXN1YWwgZmVlZGJhY2suXG4gICAgICogQGRvY3MtcHJpdmF0ZVxuICAgICAqL1xuICAgIGdldCBpbnZhbGlkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5lcnJvclN0YXRlO1xuICAgIH1cblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgcmVhZG9ubHkgY29uZmlndXJhdGlvbiA9IGluamVjdDxLYnFJbnB1dEZpbGVNdWx0aXBsZUxhYmVsPihLQlFfRklMRV9VUExPQURfQ09ORklHVVJBVElPTiwge1xuICAgICAgICBvcHRpb25hbDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMubG9jYWxlU2VydmljZT8uY2hhbmdlcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUodGhpcy51cGRhdGVMb2NhbGVQYXJhbXMpO1xuXG4gICAgICAgIGlmICghdGhpcy5sb2NhbGVTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLmluaXREZWZhdWx0UGFyYW1zKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5uZ0NvbnRyb2wpIHtcbiAgICAgICAgICAgIC8vIE5vdGU6IHdlIHByb3ZpZGUgdGhlIHZhbHVlIGFjY2Vzc29yIHRocm91Z2ggaGVyZSwgaW5zdGVhZCBvZlxuICAgICAgICAgICAgLy8gdGhlIGBwcm92aWRlcnNgIHRvIGF2b2lkIHJ1bm5pbmcgaW50byBhIGNpcmN1bGFyIGltcG9ydC5cbiAgICAgICAgICAgIHRoaXMubmdDb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICAvLyBGb3JtQ29udHJvbCBzcGVjaWZpYyBlcnJvcnMgdXBkYXRlXG4gICAgICAgIHRoaXMubmdDb250cm9sPy5zdGF0dXNDaGFuZ2VzPy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5lcnJvcnMgPSBPYmplY3QudmFsdWVzKHRoaXMubmdDb250cm9sPy5lcnJvcnMgfHwge30pO1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKSk7XG4gICAgfVxuXG4gICAgbmdEb0NoZWNrKCkge1xuICAgICAgICBpZiAodGhpcy5uZ0NvbnRyb2wpIHtcbiAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gcmUtZXZhbHVhdGUgdGhpcyBvbiBldmVyeSBjaGFuZ2UgZGV0ZWN0aW9uIGN5Y2xlLCBiZWNhdXNlIHRoZXJlIGFyZSBzb21lXG4gICAgICAgICAgICAvLyBlcnJvciB0cmlnZ2VycyB0aGF0IHdlIGNhbid0IHN1YnNjcmliZSB0byAoZS5nLiBwYXJlbnQgZm9ybSBzdWJtaXNzaW9ucykuIFRoaXMgbWVhbnNcbiAgICAgICAgICAgIC8vIHRoYXQgd2hhdGV2ZXIgbG9naWMgaXMgaW4gaGVyZSBoYXMgdG8gYmUgc3VwZXIgbGVhbiBvciB3ZSByaXNrIGRlc3Ryb3lpbmcgdGhlIHBlcmZvcm1hbmNlLlxuICAgICAgICAgICAgdGhpcy51cGRhdGVFcnJvclN0YXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgICAgKiBAZG9jcy1wcml2YXRlICovXG4gICAgd3JpdGVWYWx1ZShmaWxlczogRmlsZUxpc3QgfCBLYnFGaWxlSXRlbVtdIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZpbGVzID0gZmlsZXMgaW5zdGFuY2VvZiBGaWxlTGlzdCB8fCAhZmlsZXMgPyB0aGlzLm1hcFRvRmlsZUl0ZW0oZmlsZXMpIDogZmlsZXM7XG4gICAgICAgIHRoaXMuZmlsZXNDaGFuZ2UuZW1pdCh0aGlzLmZpbGVzKTtcbiAgICB9XG5cbiAgICAvKiogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgICAgKiBAZG9jcy1wcml2YXRlICovXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3ZhT25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgICAgKiBAZG9jcy1wcml2YXRlICovXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkaXNhYmxlZCBzdGF0ZSBvZiB0aGUgY29udHJvbC4gSW1wbGVtZW50ZWQgYXMgYSBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICAgICAqIEBwYXJhbSBpc0Rpc2FibGVkIFdoZXRoZXIgdGhlIGNvbnRyb2wgc2hvdWxkIGJlIGRpc2FibGVkLlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgb25GaWxlU2VsZWN0ZWRWaWFDbGljayh7IHRhcmdldCB9OiBFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZXNUb0FkZCA9IHRoaXMubWFwVG9GaWxlSXRlbSgodGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmZpbGVzKTtcblxuICAgICAgICAvKiBldmVuIGlmIHRoZSB1c2VyIHNlbGVjdHMgdGhlIHNhbWUgZmlsZSxcbiAgICAgICAgICAgICAgICAgdGhlIG9uY2hhbmdlIGV2ZW50IHdpbGwgYmUgdHJpZ2dlcmVkIGV2ZXJ5IHRpbWUgdXNlciBjbGlja3Mgb24gdGhlIGNvbnRyb2wuKi9cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsICd2YWx1ZScsIG51bGwpO1xuXG4gICAgICAgIHRoaXMuZmlsZXMgPSBbXG4gICAgICAgICAgICAuLi50aGlzLmZpbGVzLFxuICAgICAgICAgICAgLi4uZmlsZXNUb0FkZFxuICAgICAgICBdO1xuICAgICAgICB0aGlzLmZpbGVzQWRkZWQuZW1pdChmaWxlc1RvQWRkKTtcbiAgICAgICAgdGhpcy5maWxlc0NoYW5nZS5lbWl0KHRoaXMuZmlsZXMpO1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIH1cblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgb25GaWxlRHJvcHBlZChmaWxlczogRmlsZUxpc3QgfCBLYnFGaWxlW10pIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVzVG9BZGQgPSB0aGlzLm1hcFRvRmlsZUl0ZW0oZmlsZXMpO1xuXG4gICAgICAgIHRoaXMuZmlsZXMgPSBbXG4gICAgICAgICAgICAuLi50aGlzLmZpbGVzLFxuICAgICAgICAgICAgLi4uZmlsZXNUb0FkZFxuICAgICAgICBdO1xuICAgICAgICB0aGlzLmZpbGVzQWRkZWQuZW1pdChmaWxlc1RvQWRkKTtcbiAgICAgICAgdGhpcy5maWxlc0NoYW5nZS5lbWl0KHRoaXMuZmlsZXMpO1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIH1cblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgZGVsZXRlRmlsZShpbmRleDogbnVtYmVyLCBldmVudD86IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZEZpbGUgPSB0aGlzLmZpbGVzLnNwbGljZShpbmRleCwgMSlbMF07XG5cbiAgICAgICAgdGhpcy5maWxlcyA9IFsuLi50aGlzLmZpbGVzXTtcbiAgICAgICAgdGhpcy5maWxlUmVtb3ZlZC5lbWl0KFtyZW1vdmVkRmlsZSwgaW5kZXhdKTtcbiAgICAgICAgdGhpcy5maWxlc0NoYW5nZS5lbWl0KHRoaXMuZmlsZXMpO1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlTG9jYWxlUGFyYW1zID0gKCkgPT4ge1xuICAgICAgICB0aGlzLmNvbmZpZyA9IHRoaXMuY29uZmlndXJhdGlvbiB8fCB0aGlzLmxvY2FsZVNlcnZpY2U/LmdldFBhcmFtcygnZmlsZVVwbG9hZCcpLm11bHRpcGxlO1xuXG4gICAgICAgIHRoaXMuY29sdW1uRGVmcyA9IFtcbiAgICAgICAgICAgIHsgaGVhZGVyOiB0aGlzLmNvbmZpZy5ncmlkSGVhZGVycy5maWxlLCBjc3NDbGFzczogJ2ZpbGUnIH0sXG4gICAgICAgICAgICB7IGhlYWRlcjogdGhpcy5jb25maWcuZ3JpZEhlYWRlcnMuc2l6ZSwgY3NzQ2xhc3M6ICdzaXplJyB9LFxuICAgICAgICAgICAgeyBoZWFkZXI6ICcnLCBjc3NDbGFzczogJ2FjdGlvbicgfVxuICAgICAgICBdO1xuXG4gICAgICAgIHRoaXMuZ2V0Q2FwdGlvblRleHQoKTtcblxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBtYXBUb0ZpbGVJdGVtKGZpbGVzOiBGaWxlTGlzdCB8IEticUZpbGVbXSB8IG51bGwpOiBLYnFGaWxlSXRlbVtdIHtcbiAgICAgICAgaWYgKCFmaWxlcykge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oZmlsZXMpXG4gICAgICAgICAgICAuZmlsdGVyKChmaWxlKSA9PiBpc0NvcnJlY3RFeHRlbnNpb24oZmlsZSwgdGhpcy5hY2NlcHQpKVxuICAgICAgICAgICAgLm1hcCgoZmlsZTogRmlsZSkgPT4gKHtcbiAgICAgICAgICAgICAgICBmaWxlLFxuICAgICAgICAgICAgICAgIGhhc0Vycm9yOiB0aGlzLnZhbGlkYXRlRmlsZShmaWxlKSxcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKSxcbiAgICAgICAgICAgICAgICBwcm9ncmVzczogbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApXG4gICAgICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZUZpbGUoZmlsZTogRmlsZSk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoIXRoaXMuY3VzdG9tVmFsaWRhdGlvbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlcnJvcnNQZXJGaWxlID0gdGhpcy5jdXN0b21WYWxpZGF0aW9uXG4gICAgICAgICAgICAucmVkdWNlKChlcnJvcnM6IChzdHJpbmcgfCBudWxsKVtdLCB2YWxpZGF0b3JGbjogS2JxRmlsZVZhbGlkYXRvckZuKSA9PiB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2godmFsaWRhdG9yRm4oZmlsZSkpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9ycztcbiAgICAgICAgICAgIH0sIFtdKVxuICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKSBhcyBzdHJpbmdbXTtcblxuICAgICAgICB0aGlzLmVycm9ycyA9IFtcbiAgICAgICAgICAgIC4uLnRoaXMuZXJyb3JzLFxuICAgICAgICAgICAgLi4uZXJyb3JzUGVyRmlsZVxuICAgICAgICBdO1xuXG4gICAgICAgIHJldHVybiAhIWVycm9yc1BlckZpbGUubGVuZ3RoO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdERlZmF1bHRQYXJhbXMoKSB7XG4gICAgICAgIHRoaXMuY29uZmlnID0gS0JRX01VTFRJUExFX0ZJTEVfVVBMT0FEX0RFRkFVTFRfQ09ORklHVVJBVElPTjtcblxuICAgICAgICB0aGlzLmNvbHVtbkRlZnMgPSBbXG4gICAgICAgICAgICB7IGhlYWRlcjogdGhpcy5jb25maWcuZ3JpZEhlYWRlcnMuZmlsZSwgY3NzQ2xhc3M6ICdmaWxlJyB9LFxuICAgICAgICAgICAgeyBoZWFkZXI6IHRoaXMuY29uZmlnLmdyaWRIZWFkZXJzLnNpemUsIGNzc0NsYXNzOiAnc2l6ZScgfSxcbiAgICAgICAgICAgIHsgaGVhZGVyOiAnJywgY3NzQ2xhc3M6ICdhY3Rpb24nIH1cbiAgICAgICAgXTtcblxuICAgICAgICB0aGlzLmdldENhcHRpb25UZXh0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDYXB0aW9uVGV4dCgpIHtcbiAgICAgICAgdGhpcy5zZXBhcmF0ZWRDYXB0aW9uVGV4dCA9IHRoaXMuY29uZmlnLmNhcHRpb25UZXh0LnNwbGl0KCd7eyBicm93c2VMaW5rIH19Jyk7XG4gICAgICAgIHRoaXMuc2VwYXJhdGVkQ2FwdGlvblRleHRXaGVuU2VsZWN0ZWQgPSB0aGlzLmNvbmZpZy5jYXB0aW9uVGV4dFdoZW5TZWxlY3RlZC5zcGxpdCgne3sgYnJvd3NlTGluayB9fScpO1xuICAgICAgICB0aGlzLnNlcGFyYXRlZENhcHRpb25UZXh0Rm9yQ29tcGFjdFNpemUgPSB0aGlzLmNvbmZpZy5jYXB0aW9uVGV4dEZvckNvbXBhY3RTaXplLnNwbGl0KCd7eyBicm93c2VMaW5rIH19Jyk7XG4gICAgfVxufVxuIiwiPGRpdlxuICAgIGticUZpbGVEcm9wXG4gICAgY2xhc3M9XCJrYnEtZmlsZS11cGxvYWRcIlxuICAgIFtjbGFzcy5rYnEtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFtjbGFzcy5rYnEtZXJyb3JdPVwiaW52YWxpZFwiXG4gICAgW2NsYXNzLnNlbGVjdGVkXT1cImZpbGVzPy5sZW5ndGhcIlxuICAgIFtuZ0NsYXNzXT1cInNpemVcIlxuICAgIChmaWxlc0Ryb3BwZWQpPVwib25GaWxlRHJvcHBlZCgkZXZlbnQpXCJcbj5cbiAgICBAaWYgKCFmaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImRyb3B6b25lXCI+XG4gICAgICAgICAgICBAaWYgKHNpemUgPT09ICdkZWZhdWx0Jykge1xuICAgICAgICAgICAgICAgIDxpIGNvbG9yPVwiY29udHJhc3QtZmFkZVwiIGticS1pY29uPVwia2JxLWNsb3VkLWFycm93LXVwLW9fMzJcIj48L2k+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3B6b25lX190ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXVsdGlwbGVfX2hlYWRlclwiPnt7IGNvbmZpZy50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gcHJldHRpZXItaWdub3JlIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtdWx0aXBsZV9fY2FwdGlvblwiPnt7IHNlcGFyYXRlZENhcHRpb25UZXh0WzBdIH19PGxhYmVsIGticS1saW5rIHBzZXVkbyBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbdGFiSW5kZXhdPVwiLTFcIiBbZm9yXT1cImlucHV0SWRcIj57eyBjb25maWcuYnJvd3NlTGluayB9fTxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbnB1dFRlbXBsYXRlXCIgLz48L2xhYmVsPnt7IHNlcGFyYXRlZENhcHRpb25UZXh0WzFdIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIDxpIGNvbG9yPVwiY29udHJhc3QtZmFkZVwiIGticS1pY29uPVwia2JxLWNsb3VkLWFycm93LXVwLW9fMjRcIj48L2k+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkcm9wem9uZV9fdGV4dCBtdWx0aXBsZV9fY2FwdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBzZXBhcmF0ZWRDYXB0aW9uVGV4dEZvckNvbXBhY3RTaXplWzBdIH19XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBrYnEtbGluayBwc2V1ZG8gW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW2Zvcl09XCJpbnB1dElkXCIgW3RhYkluZGV4XT1cIi0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBjb25maWcuYnJvd3NlTGluayB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlucHV0VGVtcGxhdGVcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICB7eyBzZXBhcmF0ZWRDYXB0aW9uVGV4dEZvckNvbXBhY3RTaXplWzFdIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICB9IEBlbHNlIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpbGUtdXBsb2FkX19kcm9wem9uZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImticS1maWxlLXVwbG9hZF9fZ3JpZFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrYnEtZmlsZS1tdWx0aXBsZS11cGxvYWRlZF9faGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrYnEtZmlsZS1tdWx0aXBsZS11cGxvYWRlZF9faGVhZGVyLWlubmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChjb2x1bW4gb2YgY29sdW1uRGVmczsgdHJhY2sgY29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiJ2ticS1maWxlLXVwbG9hZF9fJyArIGNvbHVtbi5jc3NDbGFzc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjb2x1bW4uaGVhZGVyIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxrYnEtbGlzdC1zZWxlY3Rpb24gW2F1dG9TZWxlY3RdPVwiZmFsc2VcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoZmlsZSBvZiBmaWxlczsgdHJhY2sgZmlsZTsgbGV0IGluZGV4ID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8a2JxLWxpc3Qtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtdWx0aXBsZV9fdXBsb2FkZWQtaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZpbGUuZmlsZS5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5iYWNrc3BhY2UpPVwiZGVsZXRlRmlsZShpbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmRlbGV0ZSk9XCJkZWxldGVGaWxlKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImticS1maWxlLXVwbG9hZF9fcm93XCIgW2NsYXNzLmVycm9yXT1cImZpbGUuaGFzRXJyb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImticS1maWxlLXVwbG9hZF9fZmlsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxvYWRpbmc6IGZpbGUubG9hZGluZyB8IGFzeW5jLCBwcm9ncmVzczogZmlsZS5wcm9ncmVzcyB8IGFzeW5jIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgYXN5bmNEYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFhc3luY0RhdGEubG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCIkYW55KGN1c3RvbUZpbGVJY29uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGZpbGUgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoYXN5bmNEYXRhLmxvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGticS1wcm9ncmVzcy1zcGlubmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImticS1maWxlLXVwbG9hZC1uYW1lLWNlbGxfX2ljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vZGVdPVwicHJvZ3Jlc3NNb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJhc3luY0RhdGEucHJvZ3Jlc3MgfHwgMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZpbGUtaXRlbV9fdGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ticUVsbGlwc2lzQ2VudGVyXT1cImZpbGUuZmlsZS5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWluVmlzaWJsZUxlbmd0aF09XCIxMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImticS1maWxlLXVwbG9hZF9fc2l6ZVwiPnt7IGZpbGUuZmlsZS5zaXplIHwga2JxRGF0YVNpemUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImticS1maWxlLXVwbG9hZF9fYWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBrYnEtaWNvbi1idXR0b249XCJrYnEteG1hcmstY2lyY2xlXzE2XCIgKGNsaWNrKT1cImRlbGV0ZUZpbGUoaW5kZXgsICRldmVudClcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9rYnEtbGlzdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2ticS1saXN0LXNlbGVjdGlvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi11cGxvYWRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcHpvbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkga2JxLWljb249XCJrYnEtY2xvdWQtYXJyb3ctdXAtb18yNFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkcm9wem9uZV9fdGV4dCBtdWx0aXBsZV9fY2FwdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgc2VwYXJhdGVkQ2FwdGlvblRleHRXaGVuU2VsZWN0ZWRbMF0gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBrYnEtbGluayBwc2V1ZG8gW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW2Zvcl09XCJpbnB1dElkXCIgW3RhYkluZGV4XT1cIi0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY29uZmlnLmJyb3dzZUxpbmsgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5wdXRUZW1wbGF0ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgc2VwYXJhdGVkQ2FwdGlvblRleHRXaGVuU2VsZWN0ZWRbMV0gfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIH1cbjwvZGl2PlxuXG5AaWYgKGhhc0hpbnQpIHtcbiAgICA8ZGl2IGNsYXNzPVwia2JxLWZpbGUtdXBsb2FkX19oaW50XCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImticS1oaW50XCIgLz5cbiAgICA8L2Rpdj5cbn1cblxuPG5nLXRlbXBsYXRlICNpbnB1dFRlbXBsYXRlPlxuICAgIDxpbnB1dFxuICAgICAgICAjaW5wdXRcbiAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICBjbGFzcz1cImNkay12aXN1YWxseS1oaWRkZW5cIlxuICAgICAgICBbYWNjZXB0XT1cImFjY2VwdGVkRmlsZXNcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbaWRdPVwiaW5wdXRJZFwiXG4gICAgICAgIChjaGFuZ2UpPVwib25GaWxlU2VsZWN0ZWRWaWFDbGljaygkZXZlbnQpXCJcbiAgICAvPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
280
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlwbGUtZmlsZS11cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9maWxlLXVwbG9hZC9tdWx0aXBsZS1maWxlLXVwbG9hZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL2ZpbGUtdXBsb2FkL211bHRpcGxlLWZpbGUtdXBsb2FkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBRWYsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZDLE9BQU8sRUFDSCxrQkFBa0IsRUFDbEIsNkJBQTZCLEVBRzdCLGlCQUFpQixFQUlwQixNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7OztBQUV2QixJQUFJLDhCQUE4QixHQUFHLENBQUMsQ0FBQztBQWF2QyxNQUFNLENBQUMsTUFBTSw4Q0FBOEMsR0FDdkQsY0FBYyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7QUFZdkMsTUFBTSxPQUFPLDhCQUNULFNBQVEsaUJBQWlCO0lBNkJ6QixJQUFJLEtBQUs7UUFDTCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQ0ksS0FB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Z0JBRzRELGNBQWM7c0JBQWhGLFlBQVk7dUJBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUc3QyxLQUFLO3NCQUF4QixTQUFTO3VCQUFDLE9BQU87Z0JBRzJCLElBQUk7c0JBQWhELGVBQWU7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBEb0NoZWNrLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRXJyb3JTdGF0ZU1hdGNoZXIsIHJ1UlVMb2NhbGVEYXRhIH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL2NvcmUnO1xuaW1wb3J0IHsgS2JxSGludCB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy9mb3JtLWZpZWxkJztcbmltcG9ydCB7IFByb2dyZXNzU3Bpbm5lck1vZGUgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvcHJvZ3Jlc3Mtc3Bpbm5lcic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gICAgaXNDb3JyZWN0RXh0ZW5zaW9uLFxuICAgIEtCUV9GSUxFX1VQTE9BRF9DT05GSUdVUkFUSU9OLFxuICAgIEticUZpbGUsXG4gICAgS2JxRmlsZUl0ZW0sXG4gICAgS2JxRmlsZVVwbG9hZEJhc2UsXG4gICAgS2JxRmlsZVZhbGlkYXRvckZuLFxuICAgIEticUlucHV0RmlsZSxcbiAgICBLYnFJbnB1dEZpbGVMYWJlbFxufSBmcm9tICcuL2ZpbGUtdXBsb2FkJztcblxubGV0IG5leHRNdWx0aXBsZUZpbGVVcGxvYWRVbmlxdWVJZCA9IDA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgS2JxSW5wdXRGaWxlTXVsdGlwbGVMYWJlbCBleHRlbmRzIEticUlucHV0RmlsZUxhYmVsIHtcbiAgICBjYXB0aW9uVGV4dFdoZW5TZWxlY3RlZDogc3RyaW5nO1xuICAgIGNhcHRpb25UZXh0Rm9yQ29tcGFjdFNpemU6IHN0cmluZztcbiAgICBncmlkSGVhZGVyczoge1xuICAgICAgICBmaWxlOiBzdHJpbmc7XG4gICAgICAgIHNpemU6IHN0cmluZztcbiAgICB9O1xuXG4gICAgW2s6IHN0cmluZyB8IG51bWJlciB8IHN5bWJvbF06IHVua25vd247XG59XG5cbmV4cG9ydCBjb25zdCBLQlFfTVVMVElQTEVfRklMRV9VUExPQURfREVGQVVMVF9DT05GSUdVUkFUSU9OOiBLYnFJbnB1dEZpbGVNdWx0aXBsZUxhYmVsID1cbiAgICBydVJVTG9jYWxlRGF0YS5maWxlVXBsb2FkLm11bHRpcGxlO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ticS1tdWx0aXBsZS1maWxlLXVwbG9hZCxrYnEtZmlsZS11cGxvYWRbbXVsdGlwbGVdJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbXVsdGlwbGUtZmlsZS11cGxvYWQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2ZpbGUtdXBsb2FkLnNjc3MnLCAnLi9maWxlLXVwbG9hZC10b2tlbnMuc2NzcycsICcuL211bHRpcGxlLWZpbGUtdXBsb2FkLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAna2JxLW11bHRpcGxlLWZpbGUtdXBsb2FkJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgS2JxTXVsdGlwbGVGaWxlVXBsb2FkQ29tcG9uZW50XG4gICAgZXh0ZW5kcyBLYnFGaWxlVXBsb2FkQmFzZVxuICAgIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgS2JxSW5wdXRGaWxlLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgRG9DaGVja1xue1xuICAgIC8qKlxuICAgICAqIEEgdmFsdWUgcmVzcG9uc2libGUgZm9yIHByb2dyZXNzIHNwaW5uZXIgdHlwZS5cbiAgICAgKiBMb2FkaW5nIGxvZ2ljIGRlcGVuZHMgb24gc2VsZWN0ZWQgbW9kZSAqL1xuICAgIEBJbnB1dCgpIHByb2dyZXNzTW9kZTogUHJvZ3Jlc3NTcGlubmVyTW9kZSA9ICdkZXRlcm1pbmF0ZSc7XG4gICAgLyoqIEFycmF5IG9mIGZpbGUgdHlwZSBzcGVjaWZpZXJzICovXG4gICAgQElucHV0KCkgYWNjZXB0Pzogc3RyaW5nW107XG4gICAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGBGb3JtQ29udHJvbC5lcnJvcnNgXG4gICAgICovXG4gICAgQElucHV0KCkgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICAgIEBJbnB1dCgpIHNpemU6ICdjb21wYWN0JyB8ICdkZWZhdWx0JyA9ICdkZWZhdWx0JztcbiAgICAvKipcbiAgICAgKiBjdXN0b20gSUQgZm9yIHRoZSBmaWxlIGlucHV0IGVsZW1lbnQuXG4gICAgICovXG4gICAgQElucHV0KCkgaW5wdXRJZDogc3RyaW5nID0gYGticS1tdWx0aXBsZS1maWxlLXVwbG9hZC0ke25leHRNdWx0aXBsZUZpbGVVcGxvYWRVbmlxdWVJZCsrfWA7XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIEZvcm1Db250cm9sIGZvciB2YWxpZGF0aW9uXG4gICAgICovXG4gICAgQElucHV0KCkgY3VzdG9tVmFsaWRhdGlvbj86IEticUZpbGVWYWxpZGF0b3JGbltdO1xuXG4gICAgLyoqIEFuIG9iamVjdCB1c2VkIHRvIGNvbnRyb2wgdGhlIGVycm9yIHN0YXRlIG9mIHRoZSBjb21wb25lbnQuICovXG4gICAgQElucHV0KCkgZXJyb3JTdGF0ZU1hdGNoZXI6IEVycm9yU3RhdGVNYXRjaGVyO1xuXG4gICAgcHJpdmF0ZSBfZmlsZXM6IEticUZpbGVJdGVtW10gPSBbXTtcblxuICAgIGdldCBmaWxlcygpOiBLYnFGaWxlSXRlbVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbGVzO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGZpbGVzKGN1cnJlbnRGaWxlTGlzdDogS2JxRmlsZUl0ZW1bXSkge1xuICAgICAgICB0aGlzLl9maWxlcyA9IGN1cnJlbnRGaWxlTGlzdDtcbiAgICAgICAgdGhpcy5jdmFPbkNoYW5nZSh0aGlzLl9maWxlcyk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBFbWl0cyBhbiBldmVudCBjb250YWluaW5nIHVwZGF0ZWQgZmlsZSBsaXN0LlxuICAgICAqIHB1YmxpYyBvdXRwdXQgd2lsbCBiZSByZW5hbWVkIHRvIGZpbGVzQ2hhbmdlIGluIG5leHQgbWFqb3IgcmVsZWFzZSAoI0RTLTM3MDApICovXG4gICAgQE91dHB1dCgnZmlsZVF1ZXVlQ2hhbmdlZCcpIGZpbGVzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8S2JxRmlsZUl0ZW1bXT4gPSBuZXcgRXZlbnRFbWl0dGVyPEticUZpbGVJdGVtW10+KCk7XG4gICAgLyoqXG4gICAgICogRW1pdHMgYW4gZXZlbnQgY29udGFpbmluZyBhIGNodW5rIG9mIGZpbGVzIGFkZGVkIHRvIHRoZSBmaWxlIGxpc3QuXG4gICAgICogVXNlZnVsIHdoZW4gaGFuZGxpbmcgYWRkZWQgZmlsZXMsIHNraXBwaW5nIGZpbHRlcmluZyBmaWxlIGxpc3QuXG4gICAgICovXG4gICAgQE91dHB1dCgpIGZpbGVzQWRkZWQ6IEV2ZW50RW1pdHRlcjxLYnFGaWxlSXRlbVtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8S2JxRmlsZUl0ZW1bXT4oKTtcbiAgICAvKipcbiAgICAgKiBFbWl0cyBhbiBldmVudCBjb250YWluaW5nIGEgdHVwbGUgb2YgZmlsZSBhbmQgZmlsZSdzIGluZGV4IHdoZW4gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGxpc3QuXG4gICAgICogVXNlZnVsIHdoZW4gaGFuZGxlIHJlbW92ZWQgZmlsZXMsIHNraXBwaW5nIGZpbHRlcmluZyBmaWxlIGxpc3QuXG4gICAgICovXG4gICAgQE91dHB1dCgpIGZpbGVSZW1vdmVkOiBFdmVudEVtaXR0ZXI8W0ticUZpbGVJdGVtLCBudW1iZXJdPiA9IG5ldyBFdmVudEVtaXR0ZXI8W0ticUZpbGVJdGVtLCBudW1iZXJdPigpO1xuXG4gICAgLyoqIEZpbGUgSWNvbiBUZW1wbGF0ZSAqL1xuICAgIEBDb250ZW50Q2hpbGQoJ2ticUZpbGVJY29uJywgeyBzdGF0aWM6IGZhbHNlLCByZWFkOiBUZW1wbGF0ZVJlZiB9KSBjdXN0b21GaWxlSWNvbjogVGVtcGxhdGVSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBAVmlld0NoaWxkKCdpbnB1dCcpIGlucHV0OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBAQ29udGVudENoaWxkcmVuKEticUhpbnQpIHByb3RlY3RlZCByZWFkb25seSBoaW50OiBRdWVyeUxpc3Q8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIGhhc0ZvY3VzID0gZmFsc2U7XG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBjb2x1bW5EZWZzOiB7IGhlYWRlcjogc3RyaW5nOyBjc3NDbGFzczogc3RyaW5nIH1bXTtcbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIGNvbmZpZzogS2JxSW5wdXRGaWxlTXVsdGlwbGVMYWJlbDtcblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgc2VwYXJhdGVkQ2FwdGlvblRleHQ6IHN0cmluZ1tdO1xuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgc2VwYXJhdGVkQ2FwdGlvblRleHRXaGVuU2VsZWN0ZWQ6IHN0cmluZ1tdO1xuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgc2VwYXJhdGVkQ2FwdGlvblRleHRGb3JDb21wYWN0U2l6ZTogc3RyaW5nW107XG5cbiAgICAvKiogY3ZhT25DaGFuZ2UgZnVuY3Rpb24gcmVnaXN0ZXJlZCB2aWEgcmVnaXN0ZXJPbkNoYW5nZSAoQ29udHJvbFZhbHVlQWNjZXNzb3IpLlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICBjdmFPbkNoYW5nZSA9IChfOiBLYnFGaWxlSXRlbVtdKSA9PiB7fTtcblxuICAgIC8qKiBvblRvdWNoIGZ1bmN0aW9uIHJlZ2lzdGVyZWQgdmlhIHJlZ2lzdGVyT25Ub3VjaCAoQ29udHJvbFZhbHVlQWNjZXNzb3IpLlxuICAgICAqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBvblRvdWNoZWQgPSAoKSA9PiB7fTtcblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgZ2V0IGFjY2VwdGVkRmlsZXMoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWNjZXB0Py5qb2luKCcsJykgfHwgJyovKic7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGBGb3JtQ29udHJvbC5lcnJvcnNgXG4gICAgICovXG4gICAgZ2V0IGhhc0Vycm9ycygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JzICYmICEhdGhpcy5lcnJvcnMubGVuZ3RoO1xuICAgIH1cblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgZ2V0IGhhc0hpbnQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmhpbnQubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgYW4gaW52YWxpZCBzdGF0ZSBiYXNlZCBvbiBgZXJyb3JTdGF0ZWAsXG4gICAgICogYXBwbHlpbmcgYSBDU1MgY2xhc3MgaW4gSFRNTCBmb3IgdmlzdWFsIGZlZWRiYWNrLlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICBnZXQgaW52YWxpZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JTdGF0ZTtcbiAgICB9XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHJlYWRvbmx5IGNvbmZpZ3VyYXRpb24gPSBpbmplY3Q8S2JxSW5wdXRGaWxlTXVsdGlwbGVMYWJlbD4oS0JRX0ZJTEVfVVBMT0FEX0NPTkZJR1VSQVRJT04sIHtcbiAgICAgICAgb3B0aW9uYWw6IHRydWVcbiAgICB9KTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmxvY2FsZVNlcnZpY2U/LmNoYW5nZXMucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSkuc3Vic2NyaWJlKHRoaXMudXBkYXRlTG9jYWxlUGFyYW1zKTtcblxuICAgICAgICBpZiAoIXRoaXMubG9jYWxlU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5pbml0RGVmYXVsdFBhcmFtcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sKSB7XG4gICAgICAgICAgICAvLyBOb3RlOiB3ZSBwcm92aWRlIHRoZSB2YWx1ZSBhY2Nlc3NvciB0aHJvdWdoIGhlcmUsIGluc3RlYWQgb2ZcbiAgICAgICAgICAgIC8vIHRoZSBgcHJvdmlkZXJzYCB0byBhdm9pZCBydW5uaW5nIGludG8gYSBjaXJjdWxhciBpbXBvcnQuXG4gICAgICAgICAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgLy8gRm9ybUNvbnRyb2wgc3BlY2lmaWMgZXJyb3JzIHVwZGF0ZVxuICAgICAgICB0aGlzLm5nQ29udHJvbD8uc3RhdHVzQ2hhbmdlcz8ucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JzID0gT2JqZWN0LnZhbHVlcyh0aGlzLm5nQ29udHJvbD8uZXJyb3JzIHx8IHt9KTtcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jZHIubWFya0ZvckNoZWNrKCkpO1xuICAgIH1cblxuICAgIG5nRG9DaGVjaygpIHtcbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sKSB7XG4gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHJlLWV2YWx1YXRlIHRoaXMgb24gZXZlcnkgY2hhbmdlIGRldGVjdGlvbiBjeWNsZSwgYmVjYXVzZSB0aGVyZSBhcmUgc29tZVxuICAgICAgICAgICAgLy8gZXJyb3IgdHJpZ2dlcnMgdGhhdCB3ZSBjYW4ndCBzdWJzY3JpYmUgdG8gKGUuZy4gcGFyZW50IGZvcm0gc3VibWlzc2lvbnMpLiBUaGlzIG1lYW5zXG4gICAgICAgICAgICAvLyB0aGF0IHdoYXRldmVyIGxvZ2ljIGlzIGluIGhlcmUgaGFzIHRvIGJlIHN1cGVyIGxlYW4gb3Igd2UgcmlzayBkZXN0cm95aW5nIHRoZSBwZXJmb3JtYW5jZS5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlRXJyb3JTdGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gICAgICogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHdyaXRlVmFsdWUoZmlsZXM6IEZpbGVMaXN0IHwgS2JxRmlsZUl0ZW1bXSB8IG51bGwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maWxlcyA9IGZpbGVzIGluc3RhbmNlb2YgRmlsZUxpc3QgfHwgIWZpbGVzID8gdGhpcy5tYXBUb0ZpbGVJdGVtKGZpbGVzKSA6IGZpbGVzO1xuICAgICAgICB0aGlzLmZpbGVzQ2hhbmdlLmVtaXQodGhpcy5maWxlcyk7XG4gICAgfVxuXG4gICAgLyoqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gICAgICogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLmN2YU9uQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gICAgICogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZGlzYWJsZWQgc3RhdGUgb2YgdGhlIGNvbnRyb2wuIEltcGxlbWVudGVkIGFzIGEgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgICAgKiBAcGFyYW0gaXNEaXNhYmxlZCBXaGV0aGVyIHRoZSBjb250cm9sIHNob3VsZCBiZSBkaXNhYmxlZC5cbiAgICAgKiBAZG9jcy1wcml2YXRlXG4gICAgICovXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIG9uRmlsZVNlbGVjdGVkVmlhQ2xpY2soeyB0YXJnZXQgfTogRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVzVG9BZGQgPSB0aGlzLm1hcFRvRmlsZUl0ZW0oKHRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5maWxlcyk7XG5cbiAgICAgICAgdGhpcy5maWxlcyA9IFtcbiAgICAgICAgICAgIC4uLnRoaXMuZmlsZXMsXG4gICAgICAgICAgICAuLi5maWxlc1RvQWRkXG4gICAgICAgIF07XG4gICAgICAgIHRoaXMuZmlsZXNBZGRlZC5lbWl0KGZpbGVzVG9BZGQpO1xuICAgICAgICB0aGlzLmZpbGVzQ2hhbmdlLmVtaXQodGhpcy5maWxlcyk7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgIC8vIGFsbG93cyB0aGUgc2FtZSBmaWxlIHNlbGVjdGlvbiBldmVyeSB0aW1lIHVzZXIgY2xpY2tzIG9uIHRoZSBjb250cm9sLlxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRhcmdldCwgJ3ZhbHVlJywgbnVsbCk7XG4gICAgfVxuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBvbkZpbGVEcm9wcGVkKGZpbGVzOiBGaWxlTGlzdCB8IEticUZpbGVbXSkge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZXNUb0FkZCA9IHRoaXMubWFwVG9GaWxlSXRlbShmaWxlcyk7XG5cbiAgICAgICAgdGhpcy5maWxlcyA9IFtcbiAgICAgICAgICAgIC4uLnRoaXMuZmlsZXMsXG4gICAgICAgICAgICAuLi5maWxlc1RvQWRkXG4gICAgICAgIF07XG4gICAgICAgIHRoaXMuZmlsZXNBZGRlZC5lbWl0KGZpbGVzVG9BZGQpO1xuICAgICAgICB0aGlzLmZpbGVzQ2hhbmdlLmVtaXQodGhpcy5maWxlcyk7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgfVxuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBkZWxldGVGaWxlKGluZGV4OiBudW1iZXIsIGV2ZW50PzogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBjb25zdCByZW1vdmVkRmlsZSA9IHRoaXMuZmlsZXMuc3BsaWNlKGluZGV4LCAxKVswXTtcblxuICAgICAgICB0aGlzLmZpbGVzID0gWy4uLnRoaXMuZmlsZXNdO1xuICAgICAgICB0aGlzLmZpbGVSZW1vdmVkLmVtaXQoW3JlbW92ZWRGaWxlLCBpbmRleF0pO1xuICAgICAgICB0aGlzLmZpbGVzQ2hhbmdlLmVtaXQodGhpcy5maWxlcyk7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVMb2NhbGVQYXJhbXMgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuY29uZmlnID0gdGhpcy5jb25maWd1cmF0aW9uIHx8IHRoaXMubG9jYWxlU2VydmljZT8uZ2V0UGFyYW1zKCdmaWxlVXBsb2FkJykubXVsdGlwbGU7XG5cbiAgICAgICAgdGhpcy5jb2x1bW5EZWZzID0gW1xuICAgICAgICAgICAgeyBoZWFkZXI6IHRoaXMuY29uZmlnLmdyaWRIZWFkZXJzLmZpbGUsIGNzc0NsYXNzOiAnZmlsZScgfSxcbiAgICAgICAgICAgIHsgaGVhZGVyOiB0aGlzLmNvbmZpZy5ncmlkSGVhZGVycy5zaXplLCBjc3NDbGFzczogJ3NpemUnIH0sXG4gICAgICAgICAgICB7IGhlYWRlcjogJycsIGNzc0NsYXNzOiAnYWN0aW9uJyB9XG4gICAgICAgIF07XG5cbiAgICAgICAgdGhpcy5nZXRDYXB0aW9uVGV4dCgpO1xuXG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIG1hcFRvRmlsZUl0ZW0oZmlsZXM6IEZpbGVMaXN0IHwgS2JxRmlsZVtdIHwgbnVsbCk6IEticUZpbGVJdGVtW10ge1xuICAgICAgICBpZiAoIWZpbGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShmaWxlcylcbiAgICAgICAgICAgIC5maWx0ZXIoKGZpbGUpID0+IGlzQ29ycmVjdEV4dGVuc2lvbihmaWxlLCB0aGlzLmFjY2VwdCkpXG4gICAgICAgICAgICAubWFwKChmaWxlOiBGaWxlKSA9PiAoe1xuICAgICAgICAgICAgICAgIGZpbGUsXG4gICAgICAgICAgICAgICAgaGFzRXJyb3I6IHRoaXMudmFsaWRhdGVGaWxlKGZpbGUpLFxuICAgICAgICAgICAgICAgIGxvYWRpbmc6IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpLFxuICAgICAgICAgICAgICAgIHByb2dyZXNzOiBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMClcbiAgICAgICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYXRlRmlsZShmaWxlOiBGaWxlKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICghdGhpcy5jdXN0b21WYWxpZGF0aW9uPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVycm9yc1BlckZpbGUgPSB0aGlzLmN1c3RvbVZhbGlkYXRpb25cbiAgICAgICAgICAgIC5yZWR1Y2UoKGVycm9yczogKHN0cmluZyB8IG51bGwpW10sIHZhbGlkYXRvckZuOiBLYnFGaWxlVmFsaWRhdG9yRm4pID0+IHtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaCh2YWxpZGF0b3JGbihmaWxlKSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JzO1xuICAgICAgICAgICAgfSwgW10pXG4gICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pIGFzIHN0cmluZ1tdO1xuXG4gICAgICAgIHRoaXMuZXJyb3JzID0gW1xuICAgICAgICAgICAgLi4udGhpcy5lcnJvcnMsXG4gICAgICAgICAgICAuLi5lcnJvcnNQZXJGaWxlXG4gICAgICAgIF07XG5cbiAgICAgICAgcmV0dXJuICEhZXJyb3JzUGVyRmlsZS5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0RGVmYXVsdFBhcmFtcygpIHtcbiAgICAgICAgdGhpcy5jb25maWcgPSBLQlFfTVVMVElQTEVfRklMRV9VUExPQURfREVGQVVMVF9DT05GSUdVUkFUSU9OO1xuXG4gICAgICAgIHRoaXMuY29sdW1uRGVmcyA9IFtcbiAgICAgICAgICAgIHsgaGVhZGVyOiB0aGlzLmNvbmZpZy5ncmlkSGVhZGVycy5maWxlLCBjc3NDbGFzczogJ2ZpbGUnIH0sXG4gICAgICAgICAgICB7IGhlYWRlcjogdGhpcy5jb25maWcuZ3JpZEhlYWRlcnMuc2l6ZSwgY3NzQ2xhc3M6ICdzaXplJyB9LFxuICAgICAgICAgICAgeyBoZWFkZXI6ICcnLCBjc3NDbGFzczogJ2FjdGlvbicgfVxuICAgICAgICBdO1xuXG4gICAgICAgIHRoaXMuZ2V0Q2FwdGlvblRleHQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENhcHRpb25UZXh0KCkge1xuICAgICAgICB0aGlzLnNlcGFyYXRlZENhcHRpb25UZXh0ID0gdGhpcy5jb25maWcuY2FwdGlvblRleHQuc3BsaXQoJ3t7IGJyb3dzZUxpbmsgfX0nKTtcbiAgICAgICAgdGhpcy5zZXBhcmF0ZWRDYXB0aW9uVGV4dFdoZW5TZWxlY3RlZCA9IHRoaXMuY29uZmlnLmNhcHRpb25UZXh0V2hlblNlbGVjdGVkLnNwbGl0KCd7eyBicm93c2VMaW5rIH19Jyk7XG4gICAgICAgIHRoaXMuc2VwYXJhdGVkQ2FwdGlvblRleHRGb3JDb21wYWN0U2l6ZSA9IHRoaXMuY29uZmlnLmNhcHRpb25UZXh0Rm9yQ29tcGFjdFNpemUuc3BsaXQoJ3t7IGJyb3dzZUxpbmsgfX0nKTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gICAga2JxRmlsZURyb3BcbiAgICBjbGFzcz1cImticS1maWxlLXVwbG9hZFwiXG4gICAgW2NsYXNzLmticS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW2NsYXNzLmticS1lcnJvcl09XCJpbnZhbGlkXCJcbiAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiZmlsZXM/Lmxlbmd0aFwiXG4gICAgW25nQ2xhc3NdPVwic2l6ZVwiXG4gICAgKGZpbGVzRHJvcHBlZCk9XCJvbkZpbGVEcm9wcGVkKCRldmVudClcIlxuPlxuICAgIEBpZiAoIWZpbGVzLmxlbmd0aCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcHpvbmVcIj5cbiAgICAgICAgICAgIEBpZiAoc2l6ZSA9PT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgICAgICAgPGkgY29sb3I9XCJjb250cmFzdC1mYWRlXCIga2JxLWljb249XCJrYnEtY2xvdWQtYXJyb3ctdXAtb18zMlwiPjwvaT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcHpvbmVfX3RleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtdWx0aXBsZV9faGVhZGVyXCI+e3sgY29uZmlnLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBwcmV0dGllci1pZ25vcmUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm11bHRpcGxlX19jYXB0aW9uXCI+e3sgc2VwYXJhdGVkQ2FwdGlvblRleHRbMF0gfX08bGFiZWwga2JxLWxpbmsgcHNldWRvIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFt0YWJJbmRleF09XCItMVwiIFtmb3JdPVwiaW5wdXRJZFwiPnt7IGNvbmZpZy5icm93c2VMaW5rIH19PG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlucHV0VGVtcGxhdGVcIiAvPjwvbGFiZWw+e3sgc2VwYXJhdGVkQ2FwdGlvblRleHRbMV0gfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPGkgY29sb3I9XCJjb250cmFzdC1mYWRlXCIga2JxLWljb249XCJrYnEtY2xvdWQtYXJyb3ctdXAtb18yNFwiPjwvaT5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRyb3B6b25lX190ZXh0IG11bHRpcGxlX19jYXB0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IHNlcGFyYXRlZENhcHRpb25UZXh0Rm9yQ29tcGFjdFNpemVbMF0gfX1cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGticS1saW5rIHBzZXVkbyBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbZm9yXT1cImlucHV0SWRcIiBbdGFiSW5kZXhdPVwiLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbmZpZy5icm93c2VMaW5rIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5wdXRUZW1wbGF0ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIHt7IHNlcGFyYXRlZENhcHRpb25UZXh0Rm9yQ29tcGFjdFNpemVbMV0gfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIH0gQGVsc2Uge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZS11cGxvYWRfX2Ryb3B6b25lXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwia2JxLWZpbGUtdXBsb2FkX19ncmlkXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImticS1maWxlLW11bHRpcGxlLXVwbG9hZGVkX19oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImticS1maWxlLW11bHRpcGxlLXVwbG9hZGVkX19oZWFkZXItaW5uZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGNvbHVtbiBvZiBjb2x1bW5EZWZzOyB0cmFjayBjb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzc109XCIna2JxLWZpbGUtdXBsb2FkX18nICsgY29sdW1uLmNzc0NsYXNzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbHVtbi5oZWFkZXIgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGticS1saXN0LXNlbGVjdGlvbiBbYXV0b1NlbGVjdF09XCJmYWxzZVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChmaWxlIG9mIGZpbGVzOyB0cmFjayBmaWxlOyBsZXQgaW5kZXggPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxrYnEtbGlzdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm11bHRpcGxlX191cGxvYWRlZC1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZmlsZS5maWxlLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmJhY2tzcGFjZSk9XCJkZWxldGVGaWxlKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZGVsZXRlKT1cImRlbGV0ZUZpbGUoaW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwia2JxLWZpbGUtdXBsb2FkX19yb3dcIiBbY2xhc3MuZXJyb3JdPVwiZmlsZS5oYXNFcnJvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwia2JxLWZpbGUtdXBsb2FkX19maWxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbG9hZGluZzogZmlsZS5sb2FkaW5nIHwgYXN5bmMsIHByb2dyZXNzOiBmaWxlLnByb2dyZXNzIHwgYXN5bmMgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBhc3luY0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIWFzeW5jRGF0YS5sb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIiRhbnkoY3VzdG9tRmlsZUljb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogZmlsZSB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChhc3luY0RhdGEubG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8a2JxLXByb2dyZXNzLXNwaW5uZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwia2JxLWZpbGUtdXBsb2FkLW5hbWUtY2VsbF9faWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9kZV09XCJwcm9ncmVzc01vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImFzeW5jRGF0YS5wcm9ncmVzcyB8fCAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmlsZS1pdGVtX190ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBba2JxRWxsaXBzaXNDZW50ZXJdPVwiZmlsZS5maWxlLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttaW5WaXNpYmxlTGVuZ3RoXT1cIjEwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwia2JxLWZpbGUtdXBsb2FkX19zaXplXCI+e3sgZmlsZS5maWxlLnNpemUgfCBrYnFEYXRhU2l6ZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwia2JxLWZpbGUtdXBsb2FkX19hY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGticS1pY29uLWJ1dHRvbj1cImticS14bWFyay1jaXJjbGVfMTZcIiAoY2xpY2spPVwiZGVsZXRlRmlsZShpbmRleCwgJGV2ZW50KVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2ticS1saXN0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwva2JxLWxpc3Qtc2VsZWN0aW9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLXVwbG9hZFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wem9uZVwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBrYnEtaWNvbj1cImticS1jbG91ZC1hcnJvdy11cC1vXzI0XCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRyb3B6b25lX190ZXh0IG11bHRpcGxlX19jYXB0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBzZXBhcmF0ZWRDYXB0aW9uVGV4dFdoZW5TZWxlY3RlZFswXSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGticS1saW5rIHBzZXVkbyBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbZm9yXT1cImlucHV0SWRcIiBbdGFiSW5kZXhdPVwiLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjb25maWcuYnJvd3NlTGluayB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbnB1dFRlbXBsYXRlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBzZXBhcmF0ZWRDYXB0aW9uVGV4dFdoZW5TZWxlY3RlZFsxXSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuPC9kaXY+XG5cbkBpZiAoaGFzSGludCkge1xuICAgIDxkaXYgY2xhc3M9XCJrYnEtZmlsZS11cGxvYWRfX2hpbnRcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwia2JxLWhpbnRcIiAvPlxuICAgIDwvZGl2PlxufVxuXG48bmctdGVtcGxhdGUgI2lucHV0VGVtcGxhdGU+XG4gICAgPGlucHV0XG4gICAgICAgICNpbnB1dFxuICAgICAgICBtdWx0aXBsZVxuICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgIGNsYXNzPVwiY2RrLXZpc3VhbGx5LWhpZGRlblwiXG4gICAgICAgIFthY2NlcHRdPVwiYWNjZXB0ZWRGaWxlc1wiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIFtpZF09XCJpbnB1dElkXCJcbiAgICAgICAgKGNoYW5nZSk9XCJvbkZpbGVTZWxlY3RlZFZpYUNsaWNrKCRldmVudClcIlxuICAgIC8+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -133,15 +133,14 @@ export class KbqSingleFileUploadComponent extends KbqFileUploadBase {
133
133
  if (this.disabled) {
134
134
  return;
135
135
  }
136
- /* even if the user selects the same file,
137
- the onchange event will be triggered every time user clicks on the control.*/
138
- this.renderer.setProperty(this.input.nativeElement, 'value', null);
139
- const files = target.files;
140
- if (files?.length) {
141
- this.file = this.mapToFileItem(files[0]);
136
+ const fileToAdd = target.files?.item(0);
137
+ if (fileToAdd) {
138
+ this.file = this.mapToFileItem(fileToAdd);
142
139
  this.fileChange.emit(this.file);
143
140
  }
144
141
  this.onTouched();
142
+ // allows the same file selection every time user clicks on the control.
143
+ this.renderer.setProperty(target, 'value', null);
145
144
  }
146
145
  /** @docs-private */
147
146
  deleteItem(event) {
@@ -226,4 +225,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImpor
226
225
  type: ContentChildren,
227
226
  args: [KbqHint]
228
227
  }] } });
229
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xlLWZpbGUtdXBsb2FkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvZmlsZS11cGxvYWQvc2luZ2xlLWZpbGUtdXBsb2FkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvZmlsZS11cGxvYWQvc2luZ2xlLWZpbGUtdXBsb2FkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULGVBQWUsRUFFZixVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRWhFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RCxPQUFPLEVBQ0gsa0JBQWtCLEVBQ2xCLDZCQUE2QixFQUc3QixpQkFBaUIsRUFJcEIsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7O0FBRXZCLElBQUksNEJBQTRCLEdBQUcsQ0FBQyxDQUFDO0FBRXJDLE1BQU0sQ0FBQyxNQUFNLDRDQUE0QyxHQUFzQixjQUFjLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztBQVloSCxNQUFNLE9BQU8sNEJBQ1QsU0FBUSxpQkFBaUI7SUF5QnpCLElBQ0ksSUFBSTtRQUNKLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN0QixD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b0JBQW9CLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDbEYsQ0FBQztpSUFqUFEsNEJBQTRCO3FIQUE1Qiw0QkFBNEIsdWFBNkNwQixPQUFPLG9KQzVGNUIsMDhEQTRDQTs7MkZER2EsNEJBQTRCO2tCQVZ4QyxTQUFTOytCQUNJLHdEQUF3RCxtQkFHakQsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxRQUMvQjt3QkFDRixLQUFLLEVBQUUsd0JBQXdCO3FCQUNsQzt3REFTUSxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUlHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBSUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUdHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFLRixJQUFJO3NCQURQLEtBQUs7Z0JBYXFCLFVBQVU7c0JBQXBDLE1BQU07dUJBQUMsaUJBQWlCO2dCQUdMLEtBQUs7c0JBQXhCLFNBQVM7dUJBQUMsT0FBTztnQkFHeUIsSUFBSTtzQkFBOUMsZUFBZTt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRG9DaGVjayxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUNvbnRyb2xTdGF0dXMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBFcnJvclN0YXRlTWF0Y2hlciwgcnVSVUxvY2FsZURhdGEgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvY29yZSc7XG5pbXBvcnQgeyBLYnFIaW50IH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgUHJvZ3Jlc3NTcGlubmVyTW9kZSB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy9wcm9ncmVzcy1zcGlubmVyJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICAgIGlzQ29ycmVjdEV4dGVuc2lvbixcbiAgICBLQlFfRklMRV9VUExPQURfQ09ORklHVVJBVElPTixcbiAgICBLYnFGaWxlLFxuICAgIEticUZpbGVJdGVtLFxuICAgIEticUZpbGVVcGxvYWRCYXNlLFxuICAgIEticUZpbGVWYWxpZGF0b3JGbixcbiAgICBLYnFJbnB1dEZpbGUsXG4gICAgS2JxSW5wdXRGaWxlTGFiZWxcbn0gZnJvbSAnLi9maWxlLXVwbG9hZCc7XG5cbmxldCBuZXh0U2luZ2xlRmlsZVVwbG9hZFVuaXF1ZUlkID0gMDtcblxuZXhwb3J0IGNvbnN0IEtCUV9TSU5HTEVfRklMRV9VUExPQURfREVGQVVMVF9DT05GSUdVUkFUSU9OOiBLYnFJbnB1dEZpbGVMYWJlbCA9IHJ1UlVMb2NhbGVEYXRhLmZpbGVVcGxvYWQuc2luZ2xlO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ticS1zaW5nbGUtZmlsZS11cGxvYWQsa2JxLWZpbGUtdXBsb2FkOm5vdChbbXVsdGlwbGVdKScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NpbmdsZS1maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZmlsZS11cGxvYWQuc2NzcycsICcuL2ZpbGUtdXBsb2FkLXRva2Vucy5zY3NzJywgJy4vc2luZ2xlLWZpbGUtdXBsb2FkLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAna2JxLXNpbmdsZS1maWxlLXVwbG9hZCdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIEticVNpbmdsZUZpbGVVcGxvYWRDb21wb25lbnRcbiAgICBleHRlbmRzIEticUZpbGVVcGxvYWRCYXNlXG4gICAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBLYnFJbnB1dEZpbGUsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBEb0NoZWNrXG57XG4gICAgLyoqXG4gICAgICogQSB2YWx1ZSByZXNwb25zaWJsZSBmb3IgcHJvZ3Jlc3Mgc3Bpbm5lciB0eXBlLlxuICAgICAqIExvYWRpbmcgbG9naWMgZGVwZW5kcyBvbiBzZWxlY3RlZCBtb2RlICovXG4gICAgQElucHV0KCkgcHJvZ3Jlc3NNb2RlOiBQcm9ncmVzc1NwaW5uZXJNb2RlID0gJ2RldGVybWluYXRlJztcbiAgICAvKiogQXJyYXkgb2YgZmlsZSB0eXBlIHNwZWNpZmllcnMgKi9cbiAgICBASW5wdXQoKSBhY2NlcHQ/OiBzdHJpbmdbXTtcbiAgICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBgRm9ybUNvbnRyb2wuZXJyb3JzYFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgICBASW5wdXQoKSBpbnB1dElkOiBzdHJpbmcgPSBga2JxLXNpbmdsZS1maWxlLXVwbG9hZC0ke25leHRTaW5nbGVGaWxlVXBsb2FkVW5pcXVlSWQrK31gO1xuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBGb3JtQ29udHJvbCBmb3IgdmFsaWRhdGlvblxuICAgICAqL1xuICAgIEBJbnB1dCgpIGN1c3RvbVZhbGlkYXRpb24/OiBLYnFGaWxlVmFsaWRhdG9yRm5bXTtcblxuICAgIC8qKiBBbiBvYmplY3QgdXNlZCB0byBjb250cm9sIHRoZSBlcnJvciBzdGF0ZSBvZiB0aGUgY29tcG9uZW50LiAqL1xuICAgIEBJbnB1dCgpIGVycm9yU3RhdGVNYXRjaGVyOiBFcnJvclN0YXRlTWF0Y2hlcjtcblxuICAgIHByaXZhdGUgX2ZpbGU6IEticUZpbGVJdGVtIHwgbnVsbCA9IG51bGw7XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBmaWxlKCk6IEticUZpbGVJdGVtIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWxlO1xuICAgIH1cblxuICAgIHNldCBmaWxlKGN1cnJlbnRGaWxlOiBLYnFGaWxlSXRlbSB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5fZmlsZSA9IGN1cnJlbnRGaWxlO1xuICAgICAgICB0aGlzLmN2YU9uQ2hhbmdlKHRoaXMuX2ZpbGUpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogRW1pdHMgYW4gZXZlbnQgY29udGFpbmluZyB1cGRhdGVkIGZpbGUuXG4gICAgICogcHVibGljIG91dHB1dCB3aWxsIGJlIHJlbmFtZWQgdG8gZmlsZUNoYW5nZSBpbiBuZXh0IG1ham9yIHJlbGVhc2UgKCNEUy0zNzAwKSAqL1xuICAgIEBPdXRwdXQoJ2ZpbGVRdWV1ZUNoYW5nZScpIGZpbGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxLYnFGaWxlSXRlbSB8IG51bGw+ID0gbmV3IEV2ZW50RW1pdHRlcjxLYnFGaWxlSXRlbSB8IG51bGw+KCk7XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIEBWaWV3Q2hpbGQoJ2lucHV0JykgaW5wdXQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oS2JxSGludCkgcHJpdmF0ZSByZWFkb25seSBoaW50OiBRdWVyeUxpc3Q8S2JxSGludD47XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIGNvbmZpZzogS2JxSW5wdXRGaWxlTGFiZWw7XG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBzZXBhcmF0ZWRDYXB0aW9uVGV4dDogc3RyaW5nW107XG5cbiAgICAvKiogY3ZhT25DaGFuZ2UgZnVuY3Rpb24gcmVnaXN0ZXJlZCB2aWEgcmVnaXN0ZXJPbkNoYW5nZSAoQ29udHJvbFZhbHVlQWNjZXNzb3IpLlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICBjdmFPbkNoYW5nZSA9IChfOiBLYnFGaWxlSXRlbSB8IG51bGwpID0+IHt9O1xuXG4gICAgLyoqIG9uVG91Y2ggZnVuY3Rpb24gcmVnaXN0ZXJlZCB2aWEgcmVnaXN0ZXJPblRvdWNoIChDb250cm9sVmFsdWVBY2Nlc3NvcikuXG4gICAgICogQGRvY3MtcHJpdmF0ZVxuICAgICAqL1xuICAgIG9uVG91Y2hlZCA9ICgpID0+IHt9O1xuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBnZXQgYWNjZXB0ZWRGaWxlcygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5hY2NlcHQ/LmpvaW4oJywnKSB8fCAnKi8qJztcbiAgICB9XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIGdldCBoYXNIaW50KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5oaW50Lmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGFuIGludmFsaWQgc3RhdGUgYmFzZWQgb24gZmlsZSBlcnJvcnMgb3IgYGVycm9yU3RhdGVgLFxuICAgICAqIGFwcGx5aW5nIGEgQ1NTIGNsYXNzIGluIEhUTUwgZm9yIHZpc3VhbCBmZWVkYmFjay5cbiAgICAgKiBAZG9jcy1wcml2YXRlXG4gICAgICovXG4gICAgZ2V0IGludmFsaWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZmlsZT8uaGFzRXJyb3IgfHwgdGhpcy5lcnJvclN0YXRlO1xuICAgIH1cblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgcmVhZG9ubHkgY29uZmlndXJhdGlvbjogS2JxSW5wdXRGaWxlTGFiZWwgfCBudWxsID0gaW5qZWN0KEtCUV9GSUxFX1VQTE9BRF9DT05GSUdVUkFUSU9OLCB7XG4gICAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgfSk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5sb2NhbGVTZXJ2aWNlPy5jaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSh0aGlzLnVwZGF0ZUxvY2FsZVBhcmFtcyk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmxvY2FsZVNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdERlZmF1bHRQYXJhbXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xuICAgICAgICAgICAgLy8gTm90ZTogd2UgcHJvdmlkZSB0aGUgdmFsdWUgYWNjZXNzb3IgdGhyb3VnaCBoZXJlLCBpbnN0ZWFkIG9mXG4gICAgICAgICAgICAvLyB0aGUgYHByb3ZpZGVyc2AgdG8gYXZvaWQgcnVubmluZyBpbnRvIGEgY2lyY3VsYXIgaW1wb3J0LlxuICAgICAgICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIC8vIEZvcm1Db250cm9sIHNwZWNpZmljIGVycm9ycyB1cGRhdGVcbiAgICAgICAgdGhpcy5uZ0NvbnRyb2w/LnN0YXR1c0NoYW5nZXNcbiAgICAgICAgICAgID8ucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHN0YXR1czogRm9ybUNvbnRyb2xTdGF0dXMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fZmlsZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9maWxlLmhhc0Vycm9yID0gc3RhdHVzID09PSAnSU5WQUxJRCc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvcnMgPSBPYmplY3QudmFsdWVzKHRoaXMubmdDb250cm9sPy5lcnJvcnMgfHwge30pO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpKTtcbiAgICB9XG5cbiAgICBuZ0RvQ2hlY2soKSB7XG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xuICAgICAgICAgICAgLy8gV2UgbmVlZCB0byByZS1ldmFsdWF0ZSB0aGlzIG9uIGV2ZXJ5IGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUsIGJlY2F1c2UgdGhlcmUgYXJlIHNvbWVcbiAgICAgICAgICAgIC8vIGVycm9yIHRyaWdnZXJzIHRoYXQgd2UgY2FuJ3Qgc3Vic2NyaWJlIHRvIChlLmcuIHBhcmVudCBmb3JtIHN1Ym1pc3Npb25zKS4gVGhpcyBtZWFuc1xuICAgICAgICAgICAgLy8gdGhhdCB3aGF0ZXZlciBsb2dpYyBpcyBpbiBoZXJlIGhhcyB0byBiZSBzdXBlciBsZWFuIG9yIHdlIHJpc2sgZGVzdHJveWluZyB0aGUgcGVyZm9ybWFuY2UuXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUVycm9yU3RhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICAgICAqIEBkb2NzLXByaXZhdGUgKi9cbiAgICB3cml0ZVZhbHVlKGZpbGU6IEZpbGUgfCBLYnFGaWxlSXRlbSB8IG51bGwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maWxlID0gZmlsZSBpbnN0YW5jZW9mIEZpbGUgPyB0aGlzLm1hcFRvRmlsZUl0ZW0oZmlsZSkgOiBmaWxlO1xuICAgICAgICB0aGlzLmZpbGVDaGFuZ2UuZW1pdCh0aGlzLmZpbGUpO1xuICAgIH1cblxuICAgIC8qKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICAgICAqIEBkb2NzLXByaXZhdGUgKi9cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdmFPbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICAgICAqIEBkb2NzLXByaXZhdGUgKi9cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZGlzYWJsZWQgc3RhdGUgb2YgdGhlIGNvbnRyb2wuIEltcGxlbWVudGVkIGFzIGEgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgICAgKiBAcGFyYW0gaXNEaXNhYmxlZCBXaGV0aGVyIHRoZSBjb250cm9sIHNob3VsZCBiZSBkaXNhYmxlZC5cbiAgICAgKiBAZG9jcy1wcml2YXRlXG4gICAgICovXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIG9uRmlsZVNlbGVjdGVkVmlhQ2xpY2soeyB0YXJnZXQgfTogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qIGV2ZW4gaWYgdGhlIHVzZXIgc2VsZWN0cyB0aGUgc2FtZSBmaWxlLFxuICAgICAgICAgdGhlIG9uY2hhbmdlIGV2ZW50IHdpbGwgYmUgdHJpZ2dlcmVkIGV2ZXJ5IHRpbWUgdXNlciBjbGlja3Mgb24gdGhlIGNvbnRyb2wuKi9cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsICd2YWx1ZScsIG51bGwpO1xuXG4gICAgICAgIGNvbnN0IGZpbGVzOiBGaWxlTGlzdCB8IG51bGwgPSAodGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmZpbGVzO1xuXG4gICAgICAgIGlmIChmaWxlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGUgPSB0aGlzLm1hcFRvRmlsZUl0ZW0oZmlsZXNbMF0pO1xuICAgICAgICAgICAgdGhpcy5maWxlQ2hhbmdlLmVtaXQodGhpcy5maWxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgfVxuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBkZWxldGVJdGVtKGV2ZW50PzogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5maWxlID0gbnVsbDtcbiAgICAgICAgdGhpcy5maWxlQ2hhbmdlLmVtaXQodGhpcy5maWxlKTtcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgICAgICAgLy8gbWFyayBhcyB0b3VjaGVkIGFmdGVyIGZpbGUgZHJvcCBldmVuIGlmIGZpbGUgd2Fzbid0IGNvcnJlY3RcbiAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICB9XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIG9uRmlsZURyb3BwZWQoZmlsZXM6IEZpbGVMaXN0IHwgS2JxRmlsZVtdKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsZXM/Lmxlbmd0aCAmJiBpc0NvcnJlY3RFeHRlbnNpb24oZmlsZXNbMF0sIHRoaXMuYWNjZXB0KSkge1xuICAgICAgICAgICAgdGhpcy5maWxlID0gdGhpcy5tYXBUb0ZpbGVJdGVtKGZpbGVzWzBdKTtcbiAgICAgICAgICAgIHRoaXMuZmlsZUNoYW5nZS5lbWl0KHRoaXMuZmlsZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBtYXJrIGFzIHRvdWNoZWQgYWZ0ZXIgZmlsZSBkcm9wIGV2ZW4gaWYgZmlsZSB3YXNuJ3QgY29ycmVjdFxuICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlTG9jYWxlUGFyYW1zID0gKCkgPT4ge1xuICAgICAgICB0aGlzLmNvbmZpZyA9IHRoaXMuY29uZmlndXJhdGlvbiB8fCB0aGlzLmxvY2FsZVNlcnZpY2U/LmdldFBhcmFtcygnZmlsZVVwbG9hZCcpLm11bHRpcGxlO1xuXG4gICAgICAgIHRoaXMuZ2V0Q2FwdGlvblRleHQoKTtcblxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBtYXBUb0ZpbGVJdGVtKGZpbGU6IEZpbGUpOiBLYnFGaWxlSXRlbSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmaWxlLFxuICAgICAgICAgICAgaGFzRXJyb3I6IHRoaXMudmFsaWRhdGVGaWxlKGZpbGUpLFxuICAgICAgICAgICAgcHJvZ3Jlc3M6IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKSxcbiAgICAgICAgICAgIGxvYWRpbmc6IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZUZpbGUoZmlsZTogRmlsZSk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoIXRoaXMuY3VzdG9tVmFsaWRhdGlvbj8ubGVuZ3RoKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5lcnJvcnMgPSB0aGlzLmN1c3RvbVZhbGlkYXRpb25cbiAgICAgICAgICAgIC5yZWR1Y2UoKGVycm9yczogKHN0cmluZyB8IG51bGwpW10sIHZhbGlkYXRvckZuOiBLYnFGaWxlVmFsaWRhdG9yRm4pID0+IHtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaCh2YWxpZGF0b3JGbihmaWxlKSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JzO1xuICAgICAgICAgICAgfSwgW10pXG4gICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pIGFzIHN0cmluZ1tdO1xuXG4gICAgICAgIHJldHVybiAhIXRoaXMuZXJyb3JzLmxlbmd0aDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXREZWZhdWx0UGFyYW1zKCkge1xuICAgICAgICB0aGlzLmNvbmZpZyA9IEtCUV9TSU5HTEVfRklMRV9VUExPQURfREVGQVVMVF9DT05GSUdVUkFUSU9OO1xuXG4gICAgICAgIHRoaXMuZ2V0Q2FwdGlvblRleHQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENhcHRpb25UZXh0KCkge1xuICAgICAgICB0aGlzLnNlcGFyYXRlZENhcHRpb25UZXh0ID0gdGhpcy5jb25maWcuY2FwdGlvblRleHQuc3BsaXQoJ3t7IGJyb3dzZUxpbmsgfX0nKTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gICAga2JxRmlsZURyb3BcbiAgICBjbGFzcz1cImticS1maWxlLXVwbG9hZFwiXG4gICAgW2NsYXNzLmticS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW2NsYXNzLmticS1lcnJvcl09XCJpbnZhbGlkXCJcbiAgICAoZmlsZXNEcm9wcGVkKT1cIm9uRmlsZURyb3BwZWQoJGV2ZW50KVwiXG4+XG4gICAgQGlmICghZmlsZSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcHpvbmVcIj5cbiAgICAgICAgICAgIDxpIGNvbG9yPVwiY29udHJhc3QtZmFkZVwiIGticS1pY29uPVwia2JxLWNsb3VkLWFycm93LXVwLW9fMjRcIj48L2k+XG4gICAgICAgICAgICA8IS0tIHByZXR0aWVyLWlnbm9yZSAtLT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHJvcHpvbmVfX3RleHRcIj57eyBzZXBhcmF0ZWRDYXB0aW9uVGV4dFswXSB9fTxsYWJlbCBrYnEtbGluayBwc2V1ZG8gW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW3RhYkluZGV4XT1cIi0xXCIgW2Zvcl09XCJpbnB1dElkXCI+e3sgY29uZmlnLmJyb3dzZUxpbmsgfX08aW5wdXQgI2lucHV0IHR5cGU9XCJmaWxlXCIgY2xhc3M9XCJjZGstdmlzdWFsbHktaGlkZGVuXCIgW2lkXT1cImlucHV0SWRcIiBbYWNjZXB0XT1cImFjY2VwdGVkRmlsZXNcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiAoY2hhbmdlKT1cIm9uRmlsZVNlbGVjdGVkVmlhQ2xpY2soJGV2ZW50KVwiPjwvbGFiZWw+e3sgc2VwYXJhdGVkQ2FwdGlvblRleHRbMV0gfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgIH0gQGVsc2Uge1xuICAgICAgICBAaWYgKGZpbGUpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWxlLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZS1pdGVtX190ZXh0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmICh7IGxvYWRpbmc6IGZpbGUubG9hZGluZyB8IGFzeW5jLCBwcm9ncmVzczogZmlsZS5wcm9ncmVzcyB8IGFzeW5jIH07IGFzIGFzeW5jRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghYXN5bmNEYXRhLmxvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJba2JxLWljb25dXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoYXN5bmNEYXRhLmxvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8a2JxLXByb2dyZXNzLXNwaW5uZXIgW21vZGVdPVwicHJvZ3Jlc3NNb2RlXCIgW3ZhbHVlXT1cImFzeW5jRGF0YS5wcm9ncmVzcyB8fCAwXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZS1pdGVtX190ZXh0XCIgW2ticUVsbGlwc2lzQ2VudGVyXT1cImZpbGUuZmlsZS5uYW1lXCIgW21pblZpc2libGVMZW5ndGhdPVwiMTBcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICBrYnEtaWNvbi1idXR0b249XCJrYnEteG1hcmstY2lyY2xlXzE2XCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUl0ZW0oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmJhY2tzcGFjZSk9XCJkZWxldGVJdGVtKClcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5kZWxldGUpPVwiZGVsZXRlSXRlbSgpXCJcbiAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICB9XG48L2Rpdj5cblxuQGlmIChoYXNIaW50KSB7XG4gICAgPGRpdiBjbGFzcz1cImticS1maWxlLXVwbG9hZF9faGludFwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJrYnEtaGludFwiIC8+XG4gICAgPC9kaXY+XG59XG4iXX0=
228
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xlLWZpbGUtdXBsb2FkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvZmlsZS11cGxvYWQvc2luZ2xlLWZpbGUtdXBsb2FkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvZmlsZS11cGxvYWQvc2luZ2xlLWZpbGUtdXBsb2FkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULGVBQWUsRUFFZixVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRWhFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RCxPQUFPLEVBQ0gsa0JBQWtCLEVBQ2xCLDZCQUE2QixFQUc3QixpQkFBaUIsRUFJcEIsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7O0FBRXZCLElBQUksNEJBQTRCLEdBQUcsQ0FBQyxDQUFDO0FBRXJDLE1BQU0sQ0FBQyxNQUFNLDRDQUE0QyxHQUFzQixjQUFjLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztBQVloSCxNQUFNLE9BQU8sNEJBQ1QsU0FBUSxpQkFBaUI7SUF5QnpCLElBQ0ksSUFBSTtRQUNKLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN0QixD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TUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNsRixDQUFDO2lJQS9PUSw0QkFBNEI7cUhBQTVCLDRCQUE0Qix1YUE2Q3BCLE9BQU8sb0pDNUY1QiwwOERBNENBOzsyRkRHYSw0QkFBNEI7a0JBVnhDLFNBQVM7K0JBQ0ksd0RBQXdELG1CQUdqRCx1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFFBQy9CO3dCQUNGLEtBQUssRUFBRSx3QkFBd0I7cUJBQ2xDO3dEQVNRLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBSUcsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFJRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBR0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUtGLElBQUk7c0JBRFAsS0FBSztnQkFhcUIsVUFBVTtzQkFBcEMsTUFBTTt1QkFBQyxpQkFBaUI7Z0JBR0wsS0FBSztzQkFBeEIsU0FBUzt1QkFBQyxPQUFPO2dCQUd5QixJQUFJO3NCQUE5QyxlQUFlO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBEb0NoZWNrLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQ29udHJvbFN0YXR1cyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEVycm9yU3RhdGVNYXRjaGVyLCBydVJVTG9jYWxlRGF0YSB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy9jb3JlJztcbmltcG9ydCB7IEticUhpbnQgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBQcm9ncmVzc1NwaW5uZXJNb2RlIH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL3Byb2dyZXNzLXNwaW5uZXInO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gICAgaXNDb3JyZWN0RXh0ZW5zaW9uLFxuICAgIEtCUV9GSUxFX1VQTE9BRF9DT05GSUdVUkFUSU9OLFxuICAgIEticUZpbGUsXG4gICAgS2JxRmlsZUl0ZW0sXG4gICAgS2JxRmlsZVVwbG9hZEJhc2UsXG4gICAgS2JxRmlsZVZhbGlkYXRvckZuLFxuICAgIEticUlucHV0RmlsZSxcbiAgICBLYnFJbnB1dEZpbGVMYWJlbFxufSBmcm9tICcuL2ZpbGUtdXBsb2FkJztcblxubGV0IG5leHRTaW5nbGVGaWxlVXBsb2FkVW5pcXVlSWQgPSAwO1xuXG5leHBvcnQgY29uc3QgS0JRX1NJTkdMRV9GSUxFX1VQTE9BRF9ERUZBVUxUX0NPTkZJR1VSQVRJT046IEticUlucHV0RmlsZUxhYmVsID0gcnVSVUxvY2FsZURhdGEuZmlsZVVwbG9hZC5zaW5nbGU7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAna2JxLXNpbmdsZS1maWxlLXVwbG9hZCxrYnEtZmlsZS11cGxvYWQ6bm90KFttdWx0aXBsZV0pJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2luZ2xlLWZpbGUtdXBsb2FkLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9maWxlLXVwbG9hZC5zY3NzJywgJy4vZmlsZS11cGxvYWQtdG9rZW5zLnNjc3MnLCAnLi9zaW5nbGUtZmlsZS11cGxvYWQuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdrYnEtc2luZ2xlLWZpbGUtdXBsb2FkJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgS2JxU2luZ2xlRmlsZVVwbG9hZENvbXBvbmVudFxuICAgIGV4dGVuZHMgS2JxRmlsZVVwbG9hZEJhc2VcbiAgICBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIEticUlucHV0RmlsZSwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIERvQ2hlY2tcbntcbiAgICAvKipcbiAgICAgKiBBIHZhbHVlIHJlc3BvbnNpYmxlIGZvciBwcm9ncmVzcyBzcGlubmVyIHR5cGUuXG4gICAgICogTG9hZGluZyBsb2dpYyBkZXBlbmRzIG9uIHNlbGVjdGVkIG1vZGUgKi9cbiAgICBASW5wdXQoKSBwcm9ncmVzc01vZGU6IFByb2dyZXNzU3Bpbm5lck1vZGUgPSAnZGV0ZXJtaW5hdGUnO1xuICAgIC8qKiBBcnJheSBvZiBmaWxlIHR5cGUgc3BlY2lmaWVycyAqL1xuICAgIEBJbnB1dCgpIGFjY2VwdD86IHN0cmluZ1tdO1xuICAgIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGBGb3JtQ29udHJvbC5lcnJvcnNgXG4gICAgICovXG4gICAgQElucHV0KCkgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICAgIEBJbnB1dCgpIGlucHV0SWQ6IHN0cmluZyA9IGBrYnEtc2luZ2xlLWZpbGUtdXBsb2FkLSR7bmV4dFNpbmdsZUZpbGVVcGxvYWRVbmlxdWVJZCsrfWA7XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIEZvcm1Db250cm9sIGZvciB2YWxpZGF0aW9uXG4gICAgICovXG4gICAgQElucHV0KCkgY3VzdG9tVmFsaWRhdGlvbj86IEticUZpbGVWYWxpZGF0b3JGbltdO1xuXG4gICAgLyoqIEFuIG9iamVjdCB1c2VkIHRvIGNvbnRyb2wgdGhlIGVycm9yIHN0YXRlIG9mIHRoZSBjb21wb25lbnQuICovXG4gICAgQElucHV0KCkgZXJyb3JTdGF0ZU1hdGNoZXI6IEVycm9yU3RhdGVNYXRjaGVyO1xuXG4gICAgcHJpdmF0ZSBfZmlsZTogS2JxRmlsZUl0ZW0gfCBudWxsID0gbnVsbDtcblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGZpbGUoKTogS2JxRmlsZUl0ZW0gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbGU7XG4gICAgfVxuXG4gICAgc2V0IGZpbGUoY3VycmVudEZpbGU6IEticUZpbGVJdGVtIHwgbnVsbCkge1xuICAgICAgICB0aGlzLl9maWxlID0gY3VycmVudEZpbGU7XG4gICAgICAgIHRoaXMuY3ZhT25DaGFuZ2UodGhpcy5fZmlsZSk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBFbWl0cyBhbiBldmVudCBjb250YWluaW5nIHVwZGF0ZWQgZmlsZS5cbiAgICAgKiBwdWJsaWMgb3V0cHV0IHdpbGwgYmUgcmVuYW1lZCB0byBmaWxlQ2hhbmdlIGluIG5leHQgbWFqb3IgcmVsZWFzZSAoI0RTLTM3MDApICovXG4gICAgQE91dHB1dCgnZmlsZVF1ZXVlQ2hhbmdlJykgZmlsZUNoYW5nZTogRXZlbnRFbWl0dGVyPEticUZpbGVJdGVtIHwgbnVsbD4gPSBuZXcgRXZlbnRFbWl0dGVyPEticUZpbGVJdGVtIHwgbnVsbD4oKTtcblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgQFZpZXdDaGlsZCgnaW5wdXQnKSBpbnB1dDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihLYnFIaW50KSBwcml2YXRlIHJlYWRvbmx5IGhpbnQ6IFF1ZXJ5TGlzdDxLYnFIaW50PjtcblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgY29uZmlnOiBLYnFJbnB1dEZpbGVMYWJlbDtcbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHNlcGFyYXRlZENhcHRpb25UZXh0OiBzdHJpbmdbXTtcblxuICAgIC8qKiBjdmFPbkNoYW5nZSBmdW5jdGlvbiByZWdpc3RlcmVkIHZpYSByZWdpc3Rlck9uQ2hhbmdlIChDb250cm9sVmFsdWVBY2Nlc3NvcikuXG4gICAgICogQGRvY3MtcHJpdmF0ZVxuICAgICAqL1xuICAgIGN2YU9uQ2hhbmdlID0gKF86IEticUZpbGVJdGVtIHwgbnVsbCkgPT4ge307XG5cbiAgICAvKiogb25Ub3VjaCBmdW5jdGlvbiByZWdpc3RlcmVkIHZpYSByZWdpc3Rlck9uVG91Y2ggKENvbnRyb2xWYWx1ZUFjY2Vzc29yKS5cbiAgICAgKiBAZG9jcy1wcml2YXRlXG4gICAgICovXG4gICAgb25Ub3VjaGVkID0gKCkgPT4ge307XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIGdldCBhY2NlcHRlZEZpbGVzKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjY2VwdD8uam9pbignLCcpIHx8ICcqLyonO1xuICAgIH1cblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgZ2V0IGhhc0hpbnQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmhpbnQubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgYW4gaW52YWxpZCBzdGF0ZSBiYXNlZCBvbiBmaWxlIGVycm9ycyBvciBgZXJyb3JTdGF0ZWAsXG4gICAgICogYXBwbHlpbmcgYSBDU1MgY2xhc3MgaW4gSFRNTCBmb3IgdmlzdWFsIGZlZWRiYWNrLlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICBnZXQgaW52YWxpZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5maWxlPy5oYXNFcnJvciB8fCB0aGlzLmVycm9yU3RhdGU7XG4gICAgfVxuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICByZWFkb25seSBjb25maWd1cmF0aW9uOiBLYnFJbnB1dEZpbGVMYWJlbCB8IG51bGwgPSBpbmplY3QoS0JRX0ZJTEVfVVBMT0FEX0NPTkZJR1VSQVRJT04sIHtcbiAgICAgICAgb3B0aW9uYWw6IHRydWVcbiAgICB9KTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmxvY2FsZVNlcnZpY2U/LmNoYW5nZXMucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSkuc3Vic2NyaWJlKHRoaXMudXBkYXRlTG9jYWxlUGFyYW1zKTtcblxuICAgICAgICBpZiAoIXRoaXMubG9jYWxlU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5pbml0RGVmYXVsdFBhcmFtcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sKSB7XG4gICAgICAgICAgICAvLyBOb3RlOiB3ZSBwcm92aWRlIHRoZSB2YWx1ZSBhY2Nlc3NvciB0aHJvdWdoIGhlcmUsIGluc3RlYWQgb2ZcbiAgICAgICAgICAgIC8vIHRoZSBgcHJvdmlkZXJzYCB0byBhdm9pZCBydW5uaW5nIGludG8gYSBjaXJjdWxhciBpbXBvcnQuXG4gICAgICAgICAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgLy8gRm9ybUNvbnRyb2wgc3BlY2lmaWMgZXJyb3JzIHVwZGF0ZVxuICAgICAgICB0aGlzLm5nQ29udHJvbD8uc3RhdHVzQ2hhbmdlc1xuICAgICAgICAgICAgPy5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoc3RhdHVzOiBGb3JtQ29udHJvbFN0YXR1cykgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9maWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpbGUuaGFzRXJyb3IgPSBzdGF0dXMgPT09ICdJTlZBTElEJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmVycm9ycyA9IE9iamVjdC52YWx1ZXModGhpcy5uZ0NvbnRyb2w/LmVycm9ycyB8fCB7fSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jZHIubWFya0ZvckNoZWNrKCkpO1xuICAgIH1cblxuICAgIG5nRG9DaGVjaygpIHtcbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sKSB7XG4gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHJlLWV2YWx1YXRlIHRoaXMgb24gZXZlcnkgY2hhbmdlIGRldGVjdGlvbiBjeWNsZSwgYmVjYXVzZSB0aGVyZSBhcmUgc29tZVxuICAgICAgICAgICAgLy8gZXJyb3IgdHJpZ2dlcnMgdGhhdCB3ZSBjYW4ndCBzdWJzY3JpYmUgdG8gKGUuZy4gcGFyZW50IGZvcm0gc3VibWlzc2lvbnMpLiBUaGlzIG1lYW5zXG4gICAgICAgICAgICAvLyB0aGF0IHdoYXRldmVyIGxvZ2ljIGlzIGluIGhlcmUgaGFzIHRvIGJlIHN1cGVyIGxlYW4gb3Igd2UgcmlzayBkZXN0cm95aW5nIHRoZSBwZXJmb3JtYW5jZS5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlRXJyb3JTdGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gICAgICogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHdyaXRlVmFsdWUoZmlsZTogRmlsZSB8IEticUZpbGVJdGVtIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZpbGUgPSBmaWxlIGluc3RhbmNlb2YgRmlsZSA/IHRoaXMubWFwVG9GaWxlSXRlbShmaWxlKSA6IGZpbGU7XG4gICAgICAgIHRoaXMuZmlsZUNoYW5nZS5lbWl0KHRoaXMuZmlsZSk7XG4gICAgfVxuXG4gICAgLyoqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gICAgICogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLmN2YU9uQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gICAgICogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkaXNhYmxlZCBzdGF0ZSBvZiB0aGUgY29udHJvbC4gSW1wbGVtZW50ZWQgYXMgYSBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICAgICAqIEBwYXJhbSBpc0Rpc2FibGVkIFdoZXRoZXIgdGhlIGNvbnRyb2wgc2hvdWxkIGJlIGRpc2FibGVkLlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgb25GaWxlU2VsZWN0ZWRWaWFDbGljayh7IHRhcmdldCB9OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZVRvQWRkID0gKHRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5maWxlcz8uaXRlbSgwKTtcblxuICAgICAgICBpZiAoZmlsZVRvQWRkKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGUgPSB0aGlzLm1hcFRvRmlsZUl0ZW0oZmlsZVRvQWRkKTtcbiAgICAgICAgICAgIHRoaXMuZmlsZUNoYW5nZS5lbWl0KHRoaXMuZmlsZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgICAvLyBhbGxvd3MgdGhlIHNhbWUgZmlsZSBzZWxlY3Rpb24gZXZlcnkgdGltZSB1c2VyIGNsaWNrcyBvbiB0aGUgY29udHJvbC5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0YXJnZXQsICd2YWx1ZScsIG51bGwpO1xuICAgIH1cblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgZGVsZXRlSXRlbShldmVudD86IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcblxuICAgICAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMuZmlsZSA9IG51bGw7XG4gICAgICAgIHRoaXMuZmlsZUNoYW5nZS5lbWl0KHRoaXMuZmlsZSk7XG4gICAgICAgIHRoaXMuZXJyb3JzID0gW107XG4gICAgICAgIC8vIG1hcmsgYXMgdG91Y2hlZCBhZnRlciBmaWxlIGRyb3AgZXZlbiBpZiBmaWxlIHdhc24ndCBjb3JyZWN0XG4gICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgfVxuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBvbkZpbGVEcm9wcGVkKGZpbGVzOiBGaWxlTGlzdCB8IEticUZpbGVbXSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVzPy5sZW5ndGggJiYgaXNDb3JyZWN0RXh0ZW5zaW9uKGZpbGVzWzBdLCB0aGlzLmFjY2VwdCkpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsZSA9IHRoaXMubWFwVG9GaWxlSXRlbShmaWxlc1swXSk7XG4gICAgICAgICAgICB0aGlzLmZpbGVDaGFuZ2UuZW1pdCh0aGlzLmZpbGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWFyayBhcyB0b3VjaGVkIGFmdGVyIGZpbGUgZHJvcCBldmVuIGlmIGZpbGUgd2Fzbid0IGNvcnJlY3RcbiAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUxvY2FsZVBhcmFtcyA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5jb25maWcgPSB0aGlzLmNvbmZpZ3VyYXRpb24gfHwgdGhpcy5sb2NhbGVTZXJ2aWNlPy5nZXRQYXJhbXMoJ2ZpbGVVcGxvYWQnKS5tdWx0aXBsZTtcblxuICAgICAgICB0aGlzLmdldENhcHRpb25UZXh0KCk7XG5cbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgbWFwVG9GaWxlSXRlbShmaWxlOiBGaWxlKTogS2JxRmlsZUl0ZW0ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZmlsZSxcbiAgICAgICAgICAgIGhhc0Vycm9yOiB0aGlzLnZhbGlkYXRlRmlsZShmaWxlKSxcbiAgICAgICAgICAgIHByb2dyZXNzOiBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCksXG4gICAgICAgICAgICBsb2FkaW5nOiBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVGaWxlKGZpbGU6IEZpbGUpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKCF0aGlzLmN1c3RvbVZhbGlkYXRpb24/Lmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuZXJyb3JzID0gdGhpcy5jdXN0b21WYWxpZGF0aW9uXG4gICAgICAgICAgICAucmVkdWNlKChlcnJvcnM6IChzdHJpbmcgfCBudWxsKVtdLCB2YWxpZGF0b3JGbjogS2JxRmlsZVZhbGlkYXRvckZuKSA9PiB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2godmFsaWRhdG9yRm4oZmlsZSkpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9ycztcbiAgICAgICAgICAgIH0sIFtdKVxuICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKSBhcyBzdHJpbmdbXTtcblxuICAgICAgICByZXR1cm4gISF0aGlzLmVycm9ycy5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0RGVmYXVsdFBhcmFtcygpIHtcbiAgICAgICAgdGhpcy5jb25maWcgPSBLQlFfU0lOR0xFX0ZJTEVfVVBMT0FEX0RFRkFVTFRfQ09ORklHVVJBVElPTjtcblxuICAgICAgICB0aGlzLmdldENhcHRpb25UZXh0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDYXB0aW9uVGV4dCgpIHtcbiAgICAgICAgdGhpcy5zZXBhcmF0ZWRDYXB0aW9uVGV4dCA9IHRoaXMuY29uZmlnLmNhcHRpb25UZXh0LnNwbGl0KCd7eyBicm93c2VMaW5rIH19Jyk7XG4gICAgfVxufVxuIiwiPGRpdlxuICAgIGticUZpbGVEcm9wXG4gICAgY2xhc3M9XCJrYnEtZmlsZS11cGxvYWRcIlxuICAgIFtjbGFzcy5rYnEtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFtjbGFzcy5rYnEtZXJyb3JdPVwiaW52YWxpZFwiXG4gICAgKGZpbGVzRHJvcHBlZCk9XCJvbkZpbGVEcm9wcGVkKCRldmVudClcIlxuPlxuICAgIEBpZiAoIWZpbGUpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImRyb3B6b25lXCI+XG4gICAgICAgICAgICA8aSBjb2xvcj1cImNvbnRyYXN0LWZhZGVcIiBrYnEtaWNvbj1cImticS1jbG91ZC1hcnJvdy11cC1vXzI0XCI+PC9pPlxuICAgICAgICAgICAgPCEtLSBwcmV0dGllci1pZ25vcmUgLS0+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRyb3B6b25lX190ZXh0XCI+e3sgc2VwYXJhdGVkQ2FwdGlvblRleHRbMF0gfX08bGFiZWwga2JxLWxpbmsgcHNldWRvIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFt0YWJJbmRleF09XCItMVwiIFtmb3JdPVwiaW5wdXRJZFwiPnt7IGNvbmZpZy5icm93c2VMaW5rIH19PGlucHV0ICNpbnB1dCB0eXBlPVwiZmlsZVwiIGNsYXNzPVwiY2RrLXZpc3VhbGx5LWhpZGRlblwiIFtpZF09XCJpbnB1dElkXCIgW2FjY2VwdF09XCJhY2NlcHRlZEZpbGVzXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgKGNoYW5nZSk9XCJvbkZpbGVTZWxlY3RlZFZpYUNsaWNrKCRldmVudClcIj48L2xhYmVsPnt7IHNlcGFyYXRlZENhcHRpb25UZXh0WzFdIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICB9IEBlbHNlIHtcbiAgICAgICAgQGlmIChmaWxlKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZS1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbGUtaXRlbV9fdGV4dC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoeyBsb2FkaW5nOiBmaWxlLmxvYWRpbmcgfCBhc3luYywgcHJvZ3Jlc3M6IGZpbGUucHJvZ3Jlc3MgfCBhc3luYyB9OyBhcyBhc3luY0RhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIWFzeW5jRGF0YS5sb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2ticS1pY29uXVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGFzeW5jRGF0YS5sb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGticS1wcm9ncmVzcy1zcGlubmVyIFttb2RlXT1cInByb2dyZXNzTW9kZVwiIFt2YWx1ZV09XCJhc3luY0RhdGEucHJvZ3Jlc3MgfHwgMFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbGUtaXRlbV9fdGV4dFwiIFtrYnFFbGxpcHNpc0NlbnRlcl09XCJmaWxlLmZpbGUubmFtZVwiIFttaW5WaXNpYmxlTGVuZ3RoXT1cIjEwXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAga2JxLWljb24tYnV0dG9uPVwia2JxLXhtYXJrLWNpcmNsZV8xNlwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVJdGVtKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5iYWNrc3BhY2UpPVwiZGVsZXRlSXRlbSgpXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZGVsZXRlKT1cImRlbGV0ZUl0ZW0oKVwiXG4gICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgfVxuPC9kaXY+XG5cbkBpZiAoaGFzSGludCkge1xuICAgIDxkaXYgY2xhc3M9XCJrYnEtZmlsZS11cGxvYWRfX2hpbnRcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwia2JxLWhpbnRcIiAvPlxuICAgIDwvZGl2PlxufVxuIl19