@seniorsistemas/angular-components 19.9.9 → 19.9.11-develop-1dc6275b

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 (102) hide show
  1. package/button/lib/button/button.component.d.ts +3 -1
  2. package/dynamic-form/dynamic-form/form-field/addon-config.d.ts +12 -0
  3. package/dynamic-form/dynamic-form/form-field/configurations/fields/text-field.d.ts +0 -1
  4. package/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.d.ts +1 -0
  5. package/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.d.ts +1 -0
  6. package/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.d.ts +1 -0
  7. package/dynamic-form/dynamic-form/form-field/fields/password/password-field.component.d.ts +4 -0
  8. package/dynamic-form/dynamic-form/form-field/fields/text/text-field.component.d.ts +1 -0
  9. package/esm2022/button/lib/button/button.component.mjs +7 -3
  10. package/esm2022/confirm-dialog/lib/popup-confirm-dialog/popup-confirm-dialog.component.mjs +1 -1
  11. package/esm2022/content-generator/lib/content-generator/content-generator.component.mjs +2 -2
  12. package/esm2022/datepicker/lib/datepicker/datepicker.component.mjs +3 -3
  13. package/esm2022/dynamic-form/dynamic-form/components/grid/row/row.component.mjs +2 -2
  14. package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +3 -3
  15. package/esm2022/dynamic-form/dynamic-form/form-field/addon-config.mjs +29 -2
  16. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/text-field.mjs +1 -1
  17. package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +8 -7
  18. package/esm2022/dynamic-form/dynamic-form/form-field/fields/boolean/boolean-radio-field/boolean-field.component.mjs +1 -1
  19. package/esm2022/dynamic-form/dynamic-form/form-field/fields/button-field/button-field.component.mjs +1 -1
  20. package/esm2022/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.mjs +6 -5
  21. package/esm2022/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.mjs +8 -7
  22. package/esm2022/dynamic-form/dynamic-form/form-field/fields/password/password-field.component.mjs +14 -5
  23. package/esm2022/dynamic-form/dynamic-form/form-field/fields/radio-button/radio-button-field.component.mjs +2 -2
  24. package/esm2022/dynamic-form/dynamic-form/form-field/fields/text/text-field.component.mjs +8 -7
  25. package/esm2022/editor/lib/editor/link-dialog/link-dialog.component.mjs +2 -2
  26. package/esm2022/empty-state/lib/empty-state/empty-state.component.mjs +1 -1
  27. package/esm2022/file-picker/lib/file-picker/file-picker.component.mjs +2 -2
  28. package/esm2022/global-search/lib/global-search/components/dropdown/global-search-dropdown-item.component.mjs +2 -2
  29. package/esm2022/global-search/lib/global-search/global-search.component.mjs +2 -2
  30. package/esm2022/help-popover/lib/help-popover/help-popover/help-popover.component.mjs +1 -1
  31. package/esm2022/image-cropper/lib/image-cropper/image-cropper.component.mjs +1 -1
  32. package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +2 -2
  33. package/esm2022/inline-edit/lib/inline-edit/components/inline-edit-item/inline-edit-item.component.mjs +2 -2
  34. package/esm2022/input-group/lib/input-group/input-group.component.mjs +37 -0
  35. package/esm2022/input-group/lib/input-group/input-group.module.mjs +16 -0
  36. package/esm2022/input-group/lib/input-group/types/input-group-addon.mjs +2 -0
  37. package/esm2022/input-group/public-api.mjs +3 -0
  38. package/esm2022/input-group/seniorsistemas-angular-components-input-group.mjs +5 -0
  39. package/esm2022/kanban/lib/kanban/components/kanban-column/kanban-column.component.mjs +1 -1
  40. package/esm2022/lib/locale/fallback.mjs +8 -1
  41. package/esm2022/object-card/lib/object-card/elements/field/object-card-field.component.mjs +1 -1
  42. package/esm2022/object-card/lib/object-card/elements/main/object-card-main.component.mjs +1 -1
  43. package/esm2022/picklist/lib/picklist/picklist.component.mjs +2 -2
  44. package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.mjs +2 -2
  45. package/esm2022/select/lib/select/components/select-option/select-option.component.mjs +31 -3
  46. package/esm2022/select/lib/select/select.component.mjs +240 -23
  47. package/esm2022/spotlight/lib/spotlight/spotlight.component.mjs +2 -2
  48. package/esm2022/table/lib/table/table-paging/table-paging.component.mjs +1 -1
  49. package/fesm2022/seniorsistemas-angular-components-button.mjs +6 -2
  50. package/fesm2022/seniorsistemas-angular-components-button.mjs.map +1 -1
  51. package/fesm2022/seniorsistemas-angular-components-confirm-dialog.mjs +1 -1
  52. package/fesm2022/seniorsistemas-angular-components-confirm-dialog.mjs.map +1 -1
  53. package/fesm2022/seniorsistemas-angular-components-content-generator.mjs +1 -1
  54. package/fesm2022/seniorsistemas-angular-components-content-generator.mjs.map +1 -1
  55. package/fesm2022/seniorsistemas-angular-components-datepicker.mjs +2 -2
  56. package/fesm2022/seniorsistemas-angular-components-datepicker.mjs.map +1 -1
  57. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +64 -24
  58. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
  59. package/fesm2022/seniorsistemas-angular-components-editor.mjs +1 -1
  60. package/fesm2022/seniorsistemas-angular-components-editor.mjs.map +1 -1
  61. package/fesm2022/seniorsistemas-angular-components-empty-state.mjs +1 -1
  62. package/fesm2022/seniorsistemas-angular-components-empty-state.mjs.map +1 -1
  63. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs +1 -1
  64. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs.map +1 -1
  65. package/fesm2022/seniorsistemas-angular-components-global-search.mjs +2 -2
  66. package/fesm2022/seniorsistemas-angular-components-global-search.mjs.map +1 -1
  67. package/fesm2022/seniorsistemas-angular-components-help-popover.mjs +1 -1
  68. package/fesm2022/seniorsistemas-angular-components-help-popover.mjs.map +1 -1
  69. package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs +1 -1
  70. package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs.map +1 -1
  71. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +2 -2
  72. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
  73. package/fesm2022/seniorsistemas-angular-components-input-group.mjs +57 -0
  74. package/fesm2022/seniorsistemas-angular-components-input-group.mjs.map +1 -0
  75. package/fesm2022/seniorsistemas-angular-components-kanban.mjs +1 -1
  76. package/fesm2022/seniorsistemas-angular-components-kanban.mjs.map +1 -1
  77. package/fesm2022/seniorsistemas-angular-components-object-card.mjs +2 -2
  78. package/fesm2022/seniorsistemas-angular-components-object-card.mjs.map +1 -1
  79. package/fesm2022/seniorsistemas-angular-components-picklist.mjs +1 -1
  80. package/fesm2022/seniorsistemas-angular-components-picklist.mjs.map +1 -1
  81. package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs +1 -1
  82. package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs.map +1 -1
  83. package/fesm2022/seniorsistemas-angular-components-select.mjs +269 -24
  84. package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
  85. package/fesm2022/seniorsistemas-angular-components-spotlight.mjs +1 -1
  86. package/fesm2022/seniorsistemas-angular-components-spotlight.mjs.map +1 -1
  87. package/fesm2022/seniorsistemas-angular-components-table.mjs +1 -1
  88. package/fesm2022/seniorsistemas-angular-components-table.mjs.map +1 -1
  89. package/fesm2022/seniorsistemas-angular-components.mjs +7 -0
  90. package/fesm2022/seniorsistemas-angular-components.mjs.map +1 -1
  91. package/input-group/README.md +106 -0
  92. package/input-group/index.d.ts +5 -0
  93. package/input-group/lib/input-group/input-group.component.d.ts +27 -0
  94. package/input-group/lib/input-group/input-group.module.d.ts +7 -0
  95. package/input-group/lib/input-group/types/input-group-addon.d.ts +10 -0
  96. package/input-group/package.json +3 -0
  97. package/input-group/public-api.d.ts +3 -0
  98. package/package.json +7 -1
  99. package/select/README.md +16 -3
  100. package/select/lib/select/components/select-option/select-option.component.d.ts +23 -1
  101. package/select/lib/select/select.component.d.ts +111 -17
  102. package/styles.css +1 -0
@@ -295,7 +295,7 @@ export class ProfilePicturePickerComponent {
295
295
  useExisting: forwardRef(() => ProfilePicturePickerComponent),
296
296
  multi: true,
297
297
  },
298
- ], viewQueries: [{ propertyName: "uploadPicture", first: true, predicate: ["uploadPicture"], descendants: true }, { propertyName: "info", first: true, predicate: ["info"], descendants: true }, { propertyName: "thumbnail", first: true, predicate: ["thumbnail"], descendants: true, read: ElementRef }, { propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true, read: ElementRef }], ngImport: i0, template: "<input\n #fileInput\n [accept]=\"accept\"\n [disabled]=\"disabled\"\n class=\"file-input\"\n type=\"file\"\n (change)=\"photoSelected($event)\"\n/>\n<div\n #uploadPicture\n class=\"upload-picture\"\n [class.upload-picture--disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled\"\n>\n <s-thumbnail\n #thumbnail\n iconClass=\"far fa-user\"\n [imageSource]=\"imageBase64\"\n [hasAction]=\"!image\"\n (click)=\"selectPhoto()\"\n >\n </s-thumbnail>\n <div\n #info\n class=\"info\"\n >\n @if (image) {\n <div class=\"buttons\">\n <s-button\n [label]=\"changeButtonLabel || 'platform.angular_components.change_photo' | translate\"\n priority=\"primary\"\n [disabled]=\"disabled\"\n (clicked)=\"selectPhoto()\"\n >\n </s-button>\n <s-button\n [label]=\"removeButtonLabel || 'platform.angular_components.remove' | translate\"\n priority=\"secondary\"\n [disabled]=\"disabled\"\n (clicked)=\"removePhoto()\"\n >\n </s-button>\n </div>\n } @else {\n <p class=\"title\">\n {{ simpleTitle || 'platform.angular_components.drag_your_photo_or' | translate }}\n <span\n class=\"action-title\"\n (click)=\"selectPhoto()\"\n >\n {{ actionTitle || 'platform.angular_components.select_a_file' | translate }}\n </span>\n </p>\n }\n <p class=\"subtitle\">{{ subtitle }}</p>\n </div>\n</div>\n", styles: [".file-input{display:none}.upload-picture{display:flex;flex-wrap:wrap}.upload-picture--disabled{opacity:.5;pointer-events:none}.upload-picture .info{display:flex;flex-direction:column;padding:12px 20px;align-items:flex-start}.upload-picture .info .title{font-family:Open Sans,sans-serif;font-weight:700;font-size:.875rem;line-height:150%;color:#333}.upload-picture .info .title .action-title{cursor:pointer;color:#428bca}.upload-picture .info .buttons{display:flex;gap:8px}.upload-picture .info .buttons s-button{margin:0}.upload-picture .info .subtitle{padding:6px 0;font-family:Open Sans,sans-serif;font-weight:400;font-size:.75rem;line-height:150%;color:#697882;text-align:center}.upload-picture--small .info{align-items:center}.upload-picture--small .info .title,.upload-picture--small .info .subtitle{text-align:center}.upload-picture--small .info .buttons{justify-content:center;flex-wrap:wrap}\n"], dependencies: [{ kind: "component", type: ThumbnailComponent, selector: "s-thumbnail", inputs: ["id", "size", "imageSource", "imageFallback", "imageAlt", "iconClass", "hasAction", "actionIconClass", "isTile", "isBrand"] }, { kind: "component", type: ButtonComponent, selector: "s-button", inputs: ["id", "label", "tooltip", "tooltipPosition", "iconClass", "rightIconClass", "caret", "styleClass", "baseZIndex", "disabled", "auxiliary", "type", "priority", "menuOptions", "size", "slide", "animation", "badge", "iconColor", "menuAriaLabel", "ariaLabel"], outputs: ["clicked"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
298
+ ], viewQueries: [{ propertyName: "uploadPicture", first: true, predicate: ["uploadPicture"], descendants: true }, { propertyName: "info", first: true, predicate: ["info"], descendants: true }, { propertyName: "thumbnail", first: true, predicate: ["thumbnail"], descendants: true, read: ElementRef }, { propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true, read: ElementRef }], ngImport: i0, template: "<input\n #fileInput\n [accept]=\"accept\"\n [disabled]=\"disabled\"\n class=\"file-input\"\n type=\"file\"\n (change)=\"photoSelected($event)\"\n/>\n<div\n #uploadPicture\n class=\"upload-picture\"\n [class.upload-picture--disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled\"\n>\n <s-thumbnail\n #thumbnail\n iconClass=\"far fa-user\"\n [imageSource]=\"imageBase64\"\n [hasAction]=\"!image\"\n (click)=\"selectPhoto()\"\n >\n </s-thumbnail>\n <div\n #info\n class=\"info\"\n >\n @if (image) {\n <div class=\"buttons\">\n <s-button\n [label]=\"changeButtonLabel || 'platform.angular_components.change_photo' | translate\"\n priority=\"primary\"\n [disabled]=\"disabled\"\n (clicked)=\"selectPhoto()\"\n >\n </s-button>\n <s-button\n [label]=\"removeButtonLabel || 'platform.angular_components.remove' | translate\"\n priority=\"secondary\"\n [disabled]=\"disabled\"\n (clicked)=\"removePhoto()\"\n >\n </s-button>\n </div>\n } @else {\n <p class=\"title\">\n {{ simpleTitle || 'platform.angular_components.drag_your_photo_or' | translate }}\n <span\n class=\"action-title\"\n (click)=\"selectPhoto()\"\n >\n {{ actionTitle || 'platform.angular_components.select_a_file' | translate }}\n </span>\n </p>\n }\n <p class=\"subtitle\">{{ subtitle }}</p>\n </div>\n</div>\n", styles: [".file-input{display:none}.upload-picture{display:flex;flex-wrap:wrap}.upload-picture--disabled{opacity:.5;pointer-events:none}.upload-picture .info{display:flex;flex-direction:column;padding:12px 20px;align-items:flex-start}.upload-picture .info .title{font-family:Open Sans,sans-serif;font-weight:700;font-size:.875rem;line-height:150%;color:#333}.upload-picture .info .title .action-title{cursor:pointer;color:#428bca}.upload-picture .info .buttons{display:flex;gap:8px}.upload-picture .info .buttons s-button{margin:0}.upload-picture .info .subtitle{padding:6px 0;font-family:Open Sans,sans-serif;font-weight:400;font-size:.75rem;line-height:150%;color:#697882;text-align:center}.upload-picture--small .info{align-items:center}.upload-picture--small .info .title,.upload-picture--small .info .subtitle{text-align:center}.upload-picture--small .info .buttons{justify-content:center;flex-wrap:wrap}\n"], dependencies: [{ kind: "component", type: ThumbnailComponent, selector: "s-thumbnail", inputs: ["id", "size", "imageSource", "imageFallback", "imageAlt", "iconClass", "hasAction", "actionIconClass", "isTile", "isBrand"] }, { kind: "component", type: ButtonComponent, selector: "s-button", inputs: ["id", "label", "tooltip", "tooltipPosition", "iconClass", "rightIconClass", "caret", "styleClass", "baseZIndex", "disabled", "auxiliary", "type", "priority", "menuOptions", "size", "slide", "animation", "badge", "iconColor", "menuAriaLabel", "ariaLabel"], outputs: ["clicked", "tieredMenuOpened", "tieredMenuClosed"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
299
299
  }
300
300
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProfilePicturePickerComponent, decorators: [{
301
301
  type: Component,
@@ -364,4 +364,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
364
364
  type: HostListener,
365
365
  args: ['window:resize']
366
366
  }] } });
367
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS1waWN0dXJlLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvcHJvZmlsZS1waWN0dXJlLXBpY2tlci9zcmMvbGliL3Byb2ZpbGUtcGljdHVyZS1waWNrZXIvcHJvZmlsZS1waWN0dXJlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvcHJvZmlsZS1waWN0dXJlLXBpY2tlci9zcmMvbGliL3Byb2ZpbGUtcGljdHVyZS1waWNrZXIvcHJvZmlsZS1waWN0dXJlLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDVCxNQUFNLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN2RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN6RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNsRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7O0FBRTVFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFlSCxNQUFNLE9BQU8sNkJBQTZCO0lBQ3JCLG1CQUFtQixHQUFHLE1BQU0s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QkFBQyxlQUFlO2dCQUluQixJQUFJO3NCQURWLFNBQVM7dUJBQUMsTUFBTTtnQkFJVixTQUFTO3NCQURmLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFJckMsU0FBUztzQkFEZixTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBUXJDLFlBQVk7c0JBRGxCLE1BQU07Z0JBUUEsV0FBVztzQkFEakIsTUFBTTtnQkFPQSxZQUFZO3NCQURsQixNQUFNO2dCQVNBLFdBQVc7c0JBRGpCLE1BQU07Z0JBaUNBLFVBQVU7c0JBRGhCLFlBQVk7dUJBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQU83QixXQUFXO3NCQURqQixZQUFZO3VCQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFPOUIsTUFBTTtzQkFEWixZQUFZO3VCQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkE0QnpCLFFBQVE7c0JBRGQsWUFBWTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENvbXBvbmVudCxcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBmb3J3YXJkUmVmLFxyXG4gICAgSG9zdExpc3RlbmVyLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkluaXQsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBWaWV3Q2hpbGQsXHJcbiAgICBpbmplY3QsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UsIFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uVGV4dHMsIENyb3BwZXJMYWJlbHNDb25maWcsIEZpbGVWYWxpZGF0aW9uRXJyb3JzLCBQcm9maWxlUGljdHVyZVBpY2tlckRhdGEgfSBmcm9tICcuL21vZGVscy9pbmRleCc7XHJcbmltcG9ydCB7IGlzTnVsbE9yVW5kZWZpbmVkIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy91dGlscyc7XHJcbmltcG9ydCB7IEltYWdlQ3JvcHBlclNlcnZpY2UgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL2ltYWdlLWNyb3BwZXInO1xyXG5pbXBvcnQgeyBDb25maXJtRGlhbG9nU2VydmljZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvY29uZmlybS1kaWFsb2cnO1xyXG5pbXBvcnQgeyBUaHVtYm5haWxDb21wb25lbnQgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL3RodW1ibmFpbCc7XHJcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvYnV0dG9uJztcclxuXHJcbi8qKlxyXG4gKiBAZGVzY3JpcHRpb24gQ29tcG9uZW50ZSBwYXJhIHNlbGXDp8OjbywgZWRpw6fDo28gZSByZW1vw6fDo28gZGUgZm90byBkZSBwZXJmaWwgZG8gdXN1w6FyaW8uXHJcbiAqIFBlcm1pdGUgYW8gdXN1w6FyaW8gZmF6ZXIgdXBsb2FkIGRlIHVtYSBpbWFnZW0sIHJlY29ydMOhLWxhIGNvbSBvIHtAbGluayBJbWFnZUNyb3BwZXJTZXJ2aWNlfVxyXG4gKiBlIGNvbmZpcm1hciBvdSByZW1vdmVyIGEgZm90byBhdHVhbC4gSW1wbGVtZW50YSB7QGxpbmsgQ29udHJvbFZhbHVlQWNjZXNzb3J9IHBhcmEgdXNvXHJcbiAqIGVtIGZvcm11bMOhcmlvcyByZWF0aXZvcyBlIHRlbXBsYXRlLWRyaXZlbiBkbyBBbmd1bGFyLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGBodG1sXHJcbiAqIDxzLXByb2ZpbGUtcGljdHVyZS1waWNrZXJcclxuICogICBmb3JtQ29udHJvbE5hbWU9XCJhdmF0YXJcIlxyXG4gKiAgIHN1YnRpdGxlPVwiRm9ybWF0b3MgYWNlaXRvczogSlBHIGUgUE5HXCJcclxuICogICBbbWF4RmlsZVNpemVdPVwiMjA5NzE1MlwiXHJcbiAqICAgYWNjZXB0PVwiaW1hZ2UvanBlZyxpbWFnZS9wbmdcIlxyXG4gKiAgIChpbWFnZUNoYW5nZSk9XCJvbkltYWdlQ2hhbmdlKCRldmVudClcIlxyXG4gKiAgIChyZW1vdmVkSW1hZ2UpPVwib25JbWFnZVJlbW92ZWQoKVwiIC8+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAY2F0ZWdvcnkgSW5wdXRzXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAncy1wcm9maWxlLXBpY3R1cmUtcGlja2VyJyxcclxuICAgIHRlbXBsYXRlVXJsOiAncHJvZmlsZS1waWN0dXJlLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsncHJvZmlsZS1waWN0dXJlLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUHJvZmlsZVBpY3R1cmVQaWNrZXJDb21wb25lbnQpLFxyXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcclxuICAgICAgICB9LFxyXG4gICAgXSxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBpbXBvcnRzOiBbVGh1bWJuYWlsQ29tcG9uZW50LCBCdXR0b25Db21wb25lbnQsIFRyYW5zbGF0ZVBpcGVdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJvZmlsZVBpY3R1cmVQaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW1hZ2VDcm9wcGVyU2VydmljZSA9IGluamVjdChJbWFnZUNyb3BwZXJTZXJ2aWNlKTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlybURpYWxvZ1NlcnZpY2UgPSBpbmplY3QoQ29uZmlybURpYWxvZ1NlcnZpY2UpO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFTDrXR1bG8gc2ltcGxlcyBleGliaWRvIHF1YW5kbyBuZW5odW1hIGltYWdlbSBlc3TDoSBzZWxlY2lvbmFkYS5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzaW1wbGVUaXRsZSE6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBUw610dWxvIGRlIGHDp8OjbyBleGliaWRvIGNvbW8gbGFiZWwgcHJpbmNpcGFsIGRvIGJvdMOjbyBkZSB1cGxvYWQuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgYWN0aW9uVGl0bGUhOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gTGVnZW5kYSBleGliaWRhIGFiYWl4byBkbyB0w610dWxvLCBkZXNjcmV2ZW5kbyBmb3JtYXRvcyBzdXBvcnRhZG9zXHJcbiAgICAgKiBvdSBvdXRyYXMgb3JpZW50YcOnw7VlcyBwYXJhIG8gdXN1w6FyaW8uIENhbXBvIG9icmlnYXTDs3Jpby5cclxuICAgICAqL1xyXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuICAgIHB1YmxpYyBzdWJ0aXRsZSE6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBQcm9wb3LDp8OjbyAoYXNwZWN0IHJhdGlvKSBkbyByZWNvcnRlIGRhIGltYWdlbS5cclxuICAgICAqIFBvciBleGVtcGxvLCBgMWAgcGFyYSBxdWFkcmFkbywgYDE2LzlgIHBhcmEgd2lkZXNjcmVlbi5cclxuICAgICAqXHJcbiAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgYXNwZWN0UmF0aW8gPSAxO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENvbmZpZ3VyYcOnw7VlcyBkZSByw7N0dWxvcyBleGliaWRvcyBubyBjb21wb25lbnRlIGRlIHJlY29ydGUgZGUgaW1hZ2VtIChjcm9wcGVyKS5cclxuICAgICAqIFBlcm1pdGUgc29icmVzY3JldmVyIG9zIHRleHRvcyBwYWRyw6NvIGRvcyBib3TDtWVzIGUgaW5zdHJ1w6fDtWVzIGRvIGNyb3BwZXIuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgY3JvcHBlckxhYmVsc0NvbmZpZz86IENyb3BwZXJMYWJlbHNDb25maWc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVGV4dG8gZG8gYm90w6NvIGRlIHJlbW/Dp8OjbyBkYSBmb3RvIGF0dWFsLlxyXG4gICAgICogU2UgbsOjbyBpbmZvcm1hZG8sIHV0aWxpemEgbyBsYWJlbCBwYWRyw6NvIGRlIHJlbW/Dp8Ojby5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyByZW1vdmVCdXR0b25MYWJlbD86IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBUZXh0byBkbyBib3TDo28gZGUgdHJvY2EgZGEgZm90byBhdHVhbC5cclxuICAgICAqIFNlIG7Do28gaW5mb3JtYWRvLCB1dGlsaXphIG8gbGFiZWwgcGFkcsOjbyBkZSBhbHRlcmHDp8Ojby5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBjaGFuZ2VCdXR0b25MYWJlbD86IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBUZXh0b3MgcGVyc29uYWxpemFkb3MgZXhpYmlkb3Mgbm8gZGnDoWxvZ28gZGUgY29uZmlybWHDp8Ojb1xyXG4gICAgICogYW8gcmVtb3ZlciBvdSBzdWJzdGl0dWlyIGEgZm90by4gUGVybWl0ZSBzb2JyZXNjcmV2ZXIgdMOtdHVsbywgbWVuc2FnZW0gZSBib3TDtWVzLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGNvbmZpcm1hdGlvblRleHRzPzogQ29uZmlybWF0aW9uVGV4dHM7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVGFtYW5obyBtw6F4aW1vIHBlcm1pdGlkbyBwYXJhIG8gYXJxdWl2byBkZSBpbWFnZW0sIGVtIGJ5dGVzLlxyXG4gICAgICogUXVhbmRvIG8gYXJxdWl2byBleGNlZGUgZXNzZSBsaW1pdGUsIG8gb3V0cHV0IGBpbnZhbGlkRmlsZWAgw6kgZW1pdGlkby5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBtYXhGaWxlU2l6ZT86IG51bWJlcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBUaXBvcyBNSU1FIGFjZWl0b3MgcGVsbyBpbnB1dCBkZSBhcnF1aXZvLlxyXG4gICAgICogRXhlbXBsbzogYFwiaW1hZ2UvanBlZyxpbWFnZS9wbmdcImAuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgYWNjZXB0Pzogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIExpc3RhIGRlIGV4dGVuc8O1ZXMgZGUgYXJxdWl2byBhY2VpdGFzIHBhcmEgdmFsaWRhw6fDo28uXHJcbiAgICAgKiBFeGVtcGxvOiBgWycuanBnJywgJy5qcGVnJywgJy5wbmcnXWAuXHJcbiAgICAgKlxyXG4gICAgICogQGRlZmF1bHQgW11cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzdXBwb3J0ZWRFeHRlbnNpb25zOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEltYWdlbSBhdHVhbCBkbyBjb21wb25lbnRlLiBQb2RlIHNlciB1bWEgc3RyaW5nIGJhc2U2NCwgdW0gb2JqZXRvXHJcbiAgICAgKiB7QGxpbmsgUHJvZmlsZVBpY3R1cmVQaWNrZXJEYXRhfSBjb20gbWV0YWRhZG9zLCBvdSBgbnVsbGAgcGFyYSBzZW0gaW1hZ2VtLlxyXG4gICAgICpcclxuICAgICAqIEBkZWZhdWx0IG51bGxcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBpbWFnZTogc3RyaW5nIHwgUHJvZmlsZVBpY3R1cmVQaWNrZXJEYXRhIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgndXBsb2FkUGljdHVyZScpXHJcbiAgICBwdWJsaWMgdXBsb2FkUGljdHVyZTogRWxlbWVudFJlZiB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2luZm8nKVxyXG4gICAgcHVibGljIGluZm86IEVsZW1lbnRSZWYgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICBAVmlld0NoaWxkKCd0aHVtYm5haWwnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcclxuICAgIHB1YmxpYyB0aHVtYm5haWw6IEVsZW1lbnRSZWYgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICBAVmlld0NoaWxkKCdmaWxlSW5wdXQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcclxuICAgIHB1YmxpYyBmaWxlSW5wdXQ6IEVsZW1lbnRSZWYgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXByZWNhdGVkIFVzZSBgaW1hZ2VDaGFuZ2VgIGVtIHZleiBkZXN0ZSBvdXRwdXQuXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gRW1pdGlkbyBhbyBzZWxlY2lvbmFyIG91IHJlY29ydGFyIHVtYSBub3ZhIGltYWdlbS4gRW1pdGUgYSBzdHJpbmcgYmFzZTY0IGRhIGltYWdlbS5cclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgY2hhbmdlZEltYWdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBFbWl0aWRvIGFvIHNlbGVjaW9uYXIsIHJlY29ydGFyIG91IGFsdGVyYXIgYSBpbWFnZW0uXHJcbiAgICAgKiBFbWl0ZSBhIHN0cmluZyBiYXNlNjQgb3UgdW0gb2JqZXRvIHtAbGluayBQcm9maWxlUGljdHVyZVBpY2tlckRhdGF9IGNvbSBvcyBkYWRvcyBkYSBpbWFnZW0uXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIGltYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmcgfCBQcm9maWxlUGljdHVyZVBpY2tlckRhdGE+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gRW1pdGlkbyBxdWFuZG8gbyB1c3XDoXJpbyBjb25maXJtYSBhIHJlbW/Dp8OjbyBkYSBmb3RvIGF0dWFsLlxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyByZW1vdmVkSW1hZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gRW1pdGlkbyBxdWFuZG8gbyBhcnF1aXZvIHNlbGVjaW9uYWRvIG7Do28gcGFzc2EgbmEgdmFsaWRhw6fDo28uXHJcbiAgICAgKiBFbWl0ZSB1bSBvYmpldG8ge0BsaW5rIEZpbGVWYWxpZGF0aW9uRXJyb3JzfSBkZXNjcmV2ZW5kbyBvcyBlcnJvcyBlbmNvbnRyYWRvc1xyXG4gICAgICogKGV4LjogdGFtYW5obyBleGNlZGlkbywgZXh0ZW5zw6NvIGludsOhbGlkYSkuXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIGludmFsaWRGaWxlOiBFdmVudEVtaXR0ZXI8RmlsZVZhbGlkYXRpb25FcnJvcnM+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAgIHB1YmxpYyBnZXQgaW1hZ2VCYXNlNjQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMuaW1hZ2UgPT09ICdzdHJpbmcnID8gdGhpcy5pbWFnZSA6ICh0aGlzLmltYWdlPy5iYXNlNjQgPz8gJycpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkaXNhYmxlZCA9IGZhbHNlO1xyXG5cclxuICAgIHByaXZhdGUgX29uQ2hhbmdlPzogKHZhbHVlOiBzdHJpbmcgfCBQcm9maWxlUGljdHVyZVBpY2tlckRhdGEpID0+IHZvaWQ7XHJcbiAgICBwcml2YXRlIF9vblRvdWNoZWQ/OiAoKSA9PiB2b2lkO1xyXG5cclxuICAgIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcgfCBQcm9maWxlUGljdHVyZVBpY2tlckRhdGEpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmltYWdlID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2Uob25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nIHwgUHJvZmlsZVBpY3R1cmVQaWNrZXJEYXRhKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fb25DaGFuZ2UgPSBvbkNoYW5nZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQob25Ub3VjaGVkOiAoKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fb25Ub3VjaGVkID0gb25Ub3VjaGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fbm9ybWFsaXplU3Vwb3J0ZWRFeHRlbnNpb25zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcignZHJhZ292ZXInLCBbJyRldmVudCddKVxyXG4gICAgcHVibGljIG9uRHJhZ092ZXIoZXZlbnQ6IERyYWdFdmVudCkge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcignZHJhZ2xlYXZlJywgWyckZXZlbnQnXSlcclxuICAgIHB1YmxpYyBvbkRyYWdMZWF2ZShldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCdkcm9wJywgWyckZXZlbnQnXSlcclxuICAgIHB1YmxpYyBvbkRyb3AoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX29uVG91Y2hlZD8uKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbGVzOiBGaWxlW10gPSBbXTtcclxuICAgICAgICBjb25zdCBkYXRhVHJhbnNmZXJGaWxlcyA9IGV2ZW50LmRhdGFUcmFuc2Zlcj8uZmlsZXM7XHJcblxyXG4gICAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoZGF0YVRyYW5zZmVyRmlsZXMpKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YVRyYW5zZmVyRmlsZXM/Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gZGF0YVRyYW5zZmVyRmlsZXMuaXRlbShpKTtcclxuICAgICAgICAgICAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXRlbSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zaG93SW1hZ2VDcm9wcGVyKGZpbGVzKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBWZXJpZmljYW5kbyBvIHJlZGltZW5zaW9uYW1lbnRvIHBhcmEgYWp1c3RhciBvIGRlc2lnbiBwYXJhIGZpY2FyIHJlc3BvbnNpdm8uXHJcbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcclxuICAgIHB1YmxpYyBvblJlc2l6ZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy51cGxvYWRQaWN0dXJlICYmIHRoaXMuaW5mbyAmJiB0aGlzLnRodW1ibmFpbCkge1xyXG4gICAgICAgICAgICBjb25zdCB1cGxvYWRQaWN0dXJlV2lkdGggPSB0aGlzLl9nZXRXaWR0aEVsZW1lbnQodGhpcy51cGxvYWRQaWN0dXJlKTtcclxuICAgICAgICAgICAgY29uc3QgaW5mb1dpZHRoID0gdGhpcy5fZ2V0V2lkdGhFbGVtZW50KHRoaXMuaW5mbyk7XHJcbiAgICAgICAgICAgIGNvbnN0IHRodW1ibmFpbFdpZHRoID0gdGhpcy5fZ2V0V2lkdGhFbGVtZW50KHRoaXMudGh1bWJuYWlsKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aHVtYm5haWxXaWR0aCArIGluZm9XaWR0aCA+IHVwbG9hZFBpY3R1cmVXaWR0aCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGxvYWRQaWN0dXJlLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgndXBsb2FkLXBpY3R1cmUtLXNtYWxsJyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZFBpY3R1cmUubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCd1cGxvYWQtcGljdHVyZS0tc21hbGwnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2VsZWN0UGhvdG8oKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZmlsZUlucHV0RWxlbWVudCA9IHRoaXMuZmlsZUlucHV0Py5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIGZpbGVJbnB1dEVsZW1lbnQudmFsdWUgPSAnJztcclxuICAgICAgICBmaWxlSW5wdXRFbGVtZW50LmNsaWNrKCk7XHJcblxyXG4gICAgICAgIHRoaXMuX29uVG91Y2hlZD8uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZVBob3RvKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY29uZmlybURpYWxvZ1NlcnZpY2UuY29uZmlybSh7XHJcbiAgICAgICAgICAgIG1lc3NhZ2U6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblRleHRzPy5yZW1vdmFsTWVzc2FnZSA/P1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5jb25maXJtYXRpb25fcmVtb3ZlX2ltYWdlJyksXHJcbiAgICAgICAgICAgIGFjY2VwdExhYmVsOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb25UZXh0cz8ucmVtb3ZhbEFjY2VwdExhYmVsID8/XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnJlbW92ZScpLFxyXG4gICAgICAgICAgICByZWplY3RMYWJlbDpcclxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uVGV4dHM/LnJlbW92YWxSZWplY3RMYWJlbCA/P1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5jYW5jZWwnKSxcclxuICAgICAgICAgICAgaGVhZGVyOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb25UZXh0cz8ucmVtb3ZhbEhlYWRlciA/P1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5yZW1vdmVfaW1hZ2UnKSxcclxuICAgICAgICAgICAgYWNjZXB0OiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlSW5wdXRFbGVtZW50ID0gdGhpcy5maWxlSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICBmaWxlSW5wdXRFbGVtZW50LnZhbHVlID0gJyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmltYWdlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlZEltYWdlLmVtaXQoKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcGhvdG9TZWxlY3RlZChldmVudDogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fc2hvd0ltYWdlQ3JvcHBlcihldmVudC5zcmNFbGVtZW50LmZpbGVzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9zaG93SW1hZ2VDcm9wcGVyKGZpbGVzOiBGaWxlW10pOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3ZhbGlkYXRlRGF0YShmaWxlcykpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZmlsZSA9IGZpbGVzWzBdO1xyXG5cclxuICAgICAgICBjb25zdCBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICBmaWxlUmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICAgICAgZmlsZVJlYWRlci5vbmxvYWRlbmQgPSAoZmlsZUV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pbWFnZUNyb3BwZXJTZXJ2aWNlLnNob3coe1xyXG4gICAgICAgICAgICAgICAgaW1hZ2VTb3VyY2U6IGZpbGVFdmVudC50YXJnZXQucmVzdWx0LFxyXG4gICAgICAgICAgICAgICAgY3JvcHBlZEltYWdlOiAoaW1hZ2UpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRJbWFnZS5lbWl0KGltYWdlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YTogUHJvZmlsZVBpY3R1cmVQaWNrZXJEYXRhID0geyBzb3VyY2U6IGZpbGUsIGJhc2U2NDogaW1hZ2UgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU2UgbyB0aXBvIGRvIGltYWdlIGZvciBzdHJpbmcgZXUgcHJlY2lzbyBhdHVhbGl6YXIgZSBtYW5kYXIgcGFyYSBvIGltYWdlQ2hhbmdlIHVtYSBzdHJpbmcuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU2UgZm9yIFByb2ZpbGVQaWN0dXJlUGlja2VyRGF0YSBldSBwcmVjaXNvIG1hbmRhciBvIGRhdGEgY29tcGxldG8uXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmltYWdlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmltYWdlID0gaW1hZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2VDaGFuZ2UuZW1pdChpbWFnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbWFnZSA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2VDaGFuZ2UuZW1pdChkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uQ2hhbmdlPy4odGhpcy5pbWFnZSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgY2hhbmdlSW1hZ2U6ICgpID0+IHRoaXMuc2VsZWN0UGhvdG8oKSxcclxuICAgICAgICAgICAgICAgIGFsbG93U2VsZWN0QW5vdGhlcjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBhc3BlY3RSYXRpbzogdGhpcy5hc3BlY3RSYXRpbyxcclxuICAgICAgICAgICAgICAgIC4uLnRoaXMuY3JvcHBlckxhYmVsc0NvbmZpZyxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9ub3JtYWxpemVTdXBvcnRlZEV4dGVuc2lvbnMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zdXBwb3J0ZWRFeHRlbnNpb25zID0gdGhpcy5zdXBwb3J0ZWRFeHRlbnNpb25zPy5tYXAoKGV4dGVuc2lvbikgPT5cclxuICAgICAgICAgICAgZXh0ZW5zaW9uLnJlcGxhY2UoJy4nLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3ZhbGlkYXRlRGF0YShmaWxlczogRmlsZVtdKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFmaWxlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5pbnZhbGlkRmlsZS5lbWl0KHsgZmlsZTogbnVsbCwgdmFsaWRhdGlvbjogJ21heEZpbGVMaW1pdCcgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbGUgPSBmaWxlc1swXTtcclxuXHJcbiAgICAgICAgaWYgKCFmaWxlLnR5cGUuaW5jbHVkZXMoJ2ltYWdlJykpIHtcclxuICAgICAgICAgICAgdGhpcy5pbnZhbGlkRmlsZS5lbWl0KHsgZmlsZSwgdmFsaWRhdGlvbjogJ3R5cGVJbnZhbGlkJyB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl92YWxpZGF0ZUZpbGVFeHRlbnNpb24oZmlsZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5pbnZhbGlkRmlsZS5lbWl0KHsgZmlsZSwgdmFsaWRhdGlvbjogJ3Vuc3VwcG9ydGVkRXh0ZW5zaW9uJyB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl92YWxpZGF0ZUZpbGVTaXplKGZpbGUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZEZpbGUuZW1pdCh7IGZpbGUsIHZhbGlkYXRpb246ICdtYXhGaWxlU2l6ZScgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3ZhbGlkYXRlRmlsZUV4dGVuc2lvbihmaWxlOiBGaWxlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3VwcG9ydGVkRXh0ZW5zaW9ucz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IGZpbGUubmFtZS5zcGxpdCgnLicpLnBvcCgpPy50b0xvd2VyQ2FzZSgpID8/ICcnO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdXBwb3J0ZWRFeHRlbnNpb25zLmluY2x1ZGVzKGV4dGVuc2lvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3ZhbGlkYXRlRmlsZVNpemUoZmlsZTogRmlsZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLm1heEZpbGVTaXplKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmaWxlLnNpemUgPD0gdGhpcy5tYXhGaWxlU2l6ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfZ2V0V2lkdGhFbGVtZW50KGVsZW1lbnQ6IEVsZW1lbnRSZWYpOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IHsgbGVmdCwgcmlnaHQgfSA9IGVsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICByZXR1cm4gcmlnaHQgLSBsZWZ0O1xyXG4gICAgfVxyXG59XHJcbiIsIjxpbnB1dFxuICAgICNmaWxlSW5wdXRcbiAgICBbYWNjZXB0XT1cImFjY2VwdFwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBjbGFzcz1cImZpbGUtaW5wdXRcIlxuICAgIHR5cGU9XCJmaWxlXCJcbiAgICAoY2hhbmdlKT1cInBob3RvU2VsZWN0ZWQoJGV2ZW50KVwiXG4vPlxuPGRpdlxuICAgICN1cGxvYWRQaWN0dXJlXG4gICAgY2xhc3M9XCJ1cGxvYWQtcGljdHVyZVwiXG4gICAgW2NsYXNzLnVwbG9hZC1waWN0dXJlLS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4+XG4gICAgPHMtdGh1bWJuYWlsXG4gICAgICAgICN0aHVtYm5haWxcbiAgICAgICAgaWNvbkNsYXNzPVwiZmFyIGZhLXVzZXJcIlxuICAgICAgICBbaW1hZ2VTb3VyY2VdPVwiaW1hZ2VCYXNlNjRcIlxuICAgICAgICBbaGFzQWN0aW9uXT1cIiFpbWFnZVwiXG4gICAgICAgIChjbGljayk9XCJzZWxlY3RQaG90bygpXCJcbiAgICA+XG4gICAgPC9zLXRodW1ibmFpbD5cbiAgICA8ZGl2XG4gICAgICAgICNpbmZvXG4gICAgICAgIGNsYXNzPVwiaW5mb1wiXG4gICAgPlxuICAgICAgICBAaWYgKGltYWdlKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uc1wiPlxuICAgICAgICAgICAgICAgIDxzLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY2hhbmdlQnV0dG9uTGFiZWwgfHwgJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5jaGFuZ2VfcGhvdG8nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHk9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwic2VsZWN0UGhvdG8oKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvcy1idXR0b24+XG4gICAgICAgICAgICAgICAgPHMtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJyZW1vdmVCdXR0b25MYWJlbCB8fCAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnJlbW92ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBwcmlvcml0eT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGlja2VkKT1cInJlbW92ZVBob3RvKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L3MtYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPHAgY2xhc3M9XCJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgIHt7IHNpbXBsZVRpdGxlIHx8ICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZHJhZ195b3VyX3Bob3RvX29yJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uLXRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFBob3RvKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgYWN0aW9uVGl0bGUgfHwgJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5zZWxlY3RfYV9maWxlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgfVxuICAgICAgICA8cCBjbGFzcz1cInN1YnRpdGxlXCI+e3sgc3VidGl0bGUgfX08L3A+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
367
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS1waWN0dXJlLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvcHJvZmlsZS1waWN0dXJlLXBpY2tlci9zcmMvbGliL3Byb2ZpbGUtcGljdHVyZS1waWNrZXIvcHJvZmlsZS1waWN0dXJlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvcHJvZmlsZS1waWN0dXJlLXBpY2tlci9zcmMvbGliL3Byb2ZpbGUtcGljdHVyZS1waWNrZXIvcHJvZmlsZS1waWN0dXJlLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDVCxNQUFNLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN2RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN6RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNsRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7O0FBRTVFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFlSCxNQUFNLE9BQU8sNkJBQTZCO0lBQ3JCLG1CQUFtQixHQUFHLE1BQU0s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QkFBQyxlQUFlO2dCQUluQixJQUFJO3NCQURWLFNBQVM7dUJBQUMsTUFBTTtnQkFJVixTQUFTO3NCQURmLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFJckMsU0FBUztzQkFEZixTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBUXJDLFlBQVk7c0JBRGxCLE1BQU07Z0JBUUEsV0FBVztzQkFEakIsTUFBTTtnQkFPQSxZQUFZO3NCQURsQixNQUFNO2dCQVNBLFdBQVc7c0JBRGpCLE1BQU07Z0JBaUNBLFVBQVU7c0JBRGhCLFlBQVk7dUJBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQU83QixXQUFXO3NCQURqQixZQUFZO3VCQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFPOUIsTUFBTTtzQkFEWixZQUFZO3VCQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkE0QnpCLFFBQVE7c0JBRGQsWUFBWTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENvbXBvbmVudCxcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBmb3J3YXJkUmVmLFxyXG4gICAgSG9zdExpc3RlbmVyLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkluaXQsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBWaWV3Q2hpbGQsXHJcbiAgICBpbmplY3QsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UsIFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uVGV4dHMsIENyb3BwZXJMYWJlbHNDb25maWcsIEZpbGVWYWxpZGF0aW9uRXJyb3JzLCBQcm9maWxlUGljdHVyZVBpY2tlckRhdGEgfSBmcm9tICcuL21vZGVscy9pbmRleCc7XHJcbmltcG9ydCB7IGlzTnVsbE9yVW5kZWZpbmVkIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy91dGlscyc7XHJcbmltcG9ydCB7IEltYWdlQ3JvcHBlclNlcnZpY2UgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL2ltYWdlLWNyb3BwZXInO1xyXG5pbXBvcnQgeyBDb25maXJtRGlhbG9nU2VydmljZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvY29uZmlybS1kaWFsb2cnO1xyXG5pbXBvcnQgeyBUaHVtYm5haWxDb21wb25lbnQgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL3RodW1ibmFpbCc7XHJcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvYnV0dG9uJztcclxuXHJcbi8qKlxyXG4gKiBAZGVzY3JpcHRpb24gQ29tcG9uZW50ZSBwYXJhIHNlbGXDp8OjbywgZWRpw6fDo28gZSByZW1vw6fDo28gZGUgZm90byBkZSBwZXJmaWwgZG8gdXN1w6FyaW8uXHJcbiAqIFBlcm1pdGUgYW8gdXN1w6FyaW8gZmF6ZXIgdXBsb2FkIGRlIHVtYSBpbWFnZW0sIHJlY29ydMOhLWxhIGNvbSBvIHtAbGluayBJbWFnZUNyb3BwZXJTZXJ2aWNlfVxyXG4gKiBlIGNvbmZpcm1hciBvdSByZW1vdmVyIGEgZm90byBhdHVhbC4gSW1wbGVtZW50YSB7QGxpbmsgQ29udHJvbFZhbHVlQWNjZXNzb3J9IHBhcmEgdXNvXHJcbiAqIGVtIGZvcm11bMOhcmlvcyByZWF0aXZvcyBlIHRlbXBsYXRlLWRyaXZlbiBkbyBBbmd1bGFyLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGBodG1sXHJcbiAqIDxzLXByb2ZpbGUtcGljdHVyZS1waWNrZXJcclxuICogICBmb3JtQ29udHJvbE5hbWU9XCJhdmF0YXJcIlxyXG4gKiAgIHN1YnRpdGxlPVwiRm9ybWF0b3MgYWNlaXRvczogSlBHIGUgUE5HXCJcclxuICogICBbbWF4RmlsZVNpemVdPVwiMjA5NzE1MlwiXHJcbiAqICAgYWNjZXB0PVwiaW1hZ2UvanBlZyxpbWFnZS9wbmdcIlxyXG4gKiAgIChpbWFnZUNoYW5nZSk9XCJvbkltYWdlQ2hhbmdlKCRldmVudClcIlxyXG4gKiAgIChyZW1vdmVkSW1hZ2UpPVwib25JbWFnZVJlbW92ZWQoKVwiIC8+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAY2F0ZWdvcnkgSW5wdXRzXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAncy1wcm9maWxlLXBpY3R1cmUtcGlja2VyJyxcclxuICAgIHRlbXBsYXRlVXJsOiAncHJvZmlsZS1waWN0dXJlLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsncHJvZmlsZS1waWN0dXJlLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUHJvZmlsZVBpY3R1cmVQaWNrZXJDb21wb25lbnQpLFxyXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcclxuICAgICAgICB9LFxyXG4gICAgXSxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBpbXBvcnRzOiBbVGh1bWJuYWlsQ29tcG9uZW50LCBCdXR0b25Db21wb25lbnQsIFRyYW5zbGF0ZVBpcGVdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJvZmlsZVBpY3R1cmVQaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW1hZ2VDcm9wcGVyU2VydmljZSA9IGluamVjdChJbWFnZUNyb3BwZXJTZXJ2aWNlKTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlybURpYWxvZ1NlcnZpY2UgPSBpbmplY3QoQ29uZmlybURpYWxvZ1NlcnZpY2UpO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFTDrXR1bG8gc2ltcGxlcyBleGliaWRvIHF1YW5kbyBuZW5odW1hIGltYWdlbSBlc3TDoSBzZWxlY2lvbmFkYS5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzaW1wbGVUaXRsZSE6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBUw610dWxvIGRlIGHDp8OjbyBleGliaWRvIGNvbW8gbGFiZWwgcHJpbmNpcGFsIGRvIGJvdMOjbyBkZSB1cGxvYWQuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgYWN0aW9uVGl0bGUhOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gTGVnZW5kYSBleGliaWRhIGFiYWl4byBkbyB0w610dWxvLCBkZXNjcmV2ZW5kbyBmb3JtYXRvcyBzdXBvcnRhZG9zXHJcbiAgICAgKiBvdSBvdXRyYXMgb3JpZW50YcOnw7VlcyBwYXJhIG8gdXN1w6FyaW8uIENhbXBvIG9icmlnYXTDs3Jpby5cclxuICAgICAqL1xyXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuICAgIHB1YmxpYyBzdWJ0aXRsZSE6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBQcm9wb3LDp8OjbyAoYXNwZWN0IHJhdGlvKSBkbyByZWNvcnRlIGRhIGltYWdlbS5cclxuICAgICAqIFBvciBleGVtcGxvLCBgMWAgcGFyYSBxdWFkcmFkbywgYDE2LzlgIHBhcmEgd2lkZXNjcmVlbi5cclxuICAgICAqXHJcbiAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgYXNwZWN0UmF0aW8gPSAxO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENvbmZpZ3VyYcOnw7VlcyBkZSByw7N0dWxvcyBleGliaWRvcyBubyBjb21wb25lbnRlIGRlIHJlY29ydGUgZGUgaW1hZ2VtIChjcm9wcGVyKS5cclxuICAgICAqIFBlcm1pdGUgc29icmVzY3JldmVyIG9zIHRleHRvcyBwYWRyw6NvIGRvcyBib3TDtWVzIGUgaW5zdHJ1w6fDtWVzIGRvIGNyb3BwZXIuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgY3JvcHBlckxhYmVsc0NvbmZpZz86IENyb3BwZXJMYWJlbHNDb25maWc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVGV4dG8gZG8gYm90w6NvIGRlIHJlbW/Dp8OjbyBkYSBmb3RvIGF0dWFsLlxyXG4gICAgICogU2UgbsOjbyBpbmZvcm1hZG8sIHV0aWxpemEgbyBsYWJlbCBwYWRyw6NvIGRlIHJlbW/Dp8Ojby5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyByZW1vdmVCdXR0b25MYWJlbD86IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBUZXh0byBkbyBib3TDo28gZGUgdHJvY2EgZGEgZm90byBhdHVhbC5cclxuICAgICAqIFNlIG7Do28gaW5mb3JtYWRvLCB1dGlsaXphIG8gbGFiZWwgcGFkcsOjbyBkZSBhbHRlcmHDp8Ojby5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBjaGFuZ2VCdXR0b25MYWJlbD86IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBUZXh0b3MgcGVyc29uYWxpemFkb3MgZXhpYmlkb3Mgbm8gZGnDoWxvZ28gZGUgY29uZmlybWHDp8Ojb1xyXG4gICAgICogYW8gcmVtb3ZlciBvdSBzdWJzdGl0dWlyIGEgZm90by4gUGVybWl0ZSBzb2JyZXNjcmV2ZXIgdMOtdHVsbywgbWVuc2FnZW0gZSBib3TDtWVzLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGNvbmZpcm1hdGlvblRleHRzPzogQ29uZmlybWF0aW9uVGV4dHM7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVGFtYW5obyBtw6F4aW1vIHBlcm1pdGlkbyBwYXJhIG8gYXJxdWl2byBkZSBpbWFnZW0sIGVtIGJ5dGVzLlxyXG4gICAgICogUXVhbmRvIG8gYXJxdWl2byBleGNlZGUgZXNzZSBsaW1pdGUsIG8gb3V0cHV0IGBpbnZhbGlkRmlsZWAgw6kgZW1pdGlkby5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBtYXhGaWxlU2l6ZT86IG51bWJlcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBUaXBvcyBNSU1FIGFjZWl0b3MgcGVsbyBpbnB1dCBkZSBhcnF1aXZvLlxyXG4gICAgICogRXhlbXBsbzogYFwiaW1hZ2UvanBlZyxpbWFnZS9wbmdcImAuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgYWNjZXB0Pzogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIExpc3RhIGRlIGV4dGVuc8O1ZXMgZGUgYXJxdWl2byBhY2VpdGFzIHBhcmEgdmFsaWRhw6fDo28uXHJcbiAgICAgKiBFeGVtcGxvOiBgWycuanBnJywgJy5qcGVnJywgJy5wbmcnXWAuXHJcbiAgICAgKlxyXG4gICAgICogQGRlZmF1bHQgW11cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzdXBwb3J0ZWRFeHRlbnNpb25zOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEltYWdlbSBhdHVhbCBkbyBjb21wb25lbnRlLiBQb2RlIHNlciB1bWEgc3RyaW5nIGJhc2U2NCwgdW0gb2JqZXRvXHJcbiAgICAgKiB7QGxpbmsgUHJvZmlsZVBpY3R1cmVQaWNrZXJEYXRhfSBjb20gbWV0YWRhZG9zLCBvdSBgbnVsbGAgcGFyYSBzZW0gaW1hZ2VtLlxyXG4gICAgICpcclxuICAgICAqIEBkZWZhdWx0IG51bGxcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBpbWFnZTogc3RyaW5nIHwgUHJvZmlsZVBpY3R1cmVQaWNrZXJEYXRhIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgndXBsb2FkUGljdHVyZScpXHJcbiAgICBwdWJsaWMgdXBsb2FkUGljdHVyZTogRWxlbWVudFJlZiB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2luZm8nKVxyXG4gICAgcHVibGljIGluZm86IEVsZW1lbnRSZWYgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICBAVmlld0NoaWxkKCd0aHVtYm5haWwnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcclxuICAgIHB1YmxpYyB0aHVtYm5haWw6IEVsZW1lbnRSZWYgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICBAVmlld0NoaWxkKCdmaWxlSW5wdXQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcclxuICAgIHB1YmxpYyBmaWxlSW5wdXQ6IEVsZW1lbnRSZWYgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXByZWNhdGVkIFVzZSBgaW1hZ2VDaGFuZ2VgIGVtIHZleiBkZXN0ZSBvdXRwdXQuXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gRW1pdGlkbyBhbyBzZWxlY2lvbmFyIG91IHJlY29ydGFyIHVtYSBub3ZhIGltYWdlbS4gRW1pdGUgYSBzdHJpbmcgYmFzZTY0IGRhIGltYWdlbS5cclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgY2hhbmdlZEltYWdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBFbWl0aWRvIGFvIHNlbGVjaW9uYXIsIHJlY29ydGFyIG91IGFsdGVyYXIgYSBpbWFnZW0uXHJcbiAgICAgKiBFbWl0ZSBhIHN0cmluZyBiYXNlNjQgb3UgdW0gb2JqZXRvIHtAbGluayBQcm9maWxlUGljdHVyZVBpY2tlckRhdGF9IGNvbSBvcyBkYWRvcyBkYSBpbWFnZW0uXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIGltYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmcgfCBQcm9maWxlUGljdHVyZVBpY2tlckRhdGE+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gRW1pdGlkbyBxdWFuZG8gbyB1c3XDoXJpbyBjb25maXJtYSBhIHJlbW/Dp8OjbyBkYSBmb3RvIGF0dWFsLlxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyByZW1vdmVkSW1hZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gRW1pdGlkbyBxdWFuZG8gbyBhcnF1aXZvIHNlbGVjaW9uYWRvIG7Do28gcGFzc2EgbmEgdmFsaWRhw6fDo28uXHJcbiAgICAgKiBFbWl0ZSB1bSBvYmpldG8ge0BsaW5rIEZpbGVWYWxpZGF0aW9uRXJyb3JzfSBkZXNjcmV2ZW5kbyBvcyBlcnJvcyBlbmNvbnRyYWRvc1xyXG4gICAgICogKGV4LjogdGFtYW5obyBleGNlZGlkbywgZXh0ZW5zw6NvIGludsOhbGlkYSkuXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIGludmFsaWRGaWxlOiBFdmVudEVtaXR0ZXI8RmlsZVZhbGlkYXRpb25FcnJvcnM+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAgIHB1YmxpYyBnZXQgaW1hZ2VCYXNlNjQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMuaW1hZ2UgPT09ICdzdHJpbmcnID8gdGhpcy5pbWFnZSA6ICh0aGlzLmltYWdlPy5iYXNlNjQgPz8gJycpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkaXNhYmxlZCA9IGZhbHNlO1xyXG5cclxuICAgIHByaXZhdGUgX29uQ2hhbmdlPzogKHZhbHVlOiBzdHJpbmcgfCBQcm9maWxlUGljdHVyZVBpY2tlckRhdGEpID0+IHZvaWQ7XHJcbiAgICBwcml2YXRlIF9vblRvdWNoZWQ/OiAoKSA9PiB2b2lkO1xyXG5cclxuICAgIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcgfCBQcm9maWxlUGljdHVyZVBpY2tlckRhdGEpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmltYWdlID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2Uob25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nIHwgUHJvZmlsZVBpY3R1cmVQaWNrZXJEYXRhKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fb25DaGFuZ2UgPSBvbkNoYW5nZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQob25Ub3VjaGVkOiAoKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fb25Ub3VjaGVkID0gb25Ub3VjaGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fbm9ybWFsaXplU3Vwb3J0ZWRFeHRlbnNpb25zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcignZHJhZ292ZXInLCBbJyRldmVudCddKVxyXG4gICAgcHVibGljIG9uRHJhZ092ZXIoZXZlbnQ6IERyYWdFdmVudCkge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcignZHJhZ2xlYXZlJywgWyckZXZlbnQnXSlcclxuICAgIHB1YmxpYyBvbkRyYWdMZWF2ZShldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCdkcm9wJywgWyckZXZlbnQnXSlcclxuICAgIHB1YmxpYyBvbkRyb3AoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX29uVG91Y2hlZD8uKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbGVzOiBGaWxlW10gPSBbXTtcclxuICAgICAgICBjb25zdCBkYXRhVHJhbnNmZXJGaWxlcyA9IGV2ZW50LmRhdGFUcmFuc2Zlcj8uZmlsZXM7XHJcblxyXG4gICAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoZGF0YVRyYW5zZmVyRmlsZXMpKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YVRyYW5zZmVyRmlsZXM/Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gZGF0YVRyYW5zZmVyRmlsZXMuaXRlbShpKTtcclxuICAgICAgICAgICAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXRlbSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zaG93SW1hZ2VDcm9wcGVyKGZpbGVzKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBWZXJpZmljYW5kbyBvIHJlZGltZW5zaW9uYW1lbnRvIHBhcmEgYWp1c3RhciBvIGRlc2lnbiBwYXJhIGZpY2FyIHJlc3BvbnNpdm8uXHJcbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcclxuICAgIHB1YmxpYyBvblJlc2l6ZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy51cGxvYWRQaWN0dXJlICYmIHRoaXMuaW5mbyAmJiB0aGlzLnRodW1ibmFpbCkge1xyXG4gICAgICAgICAgICBjb25zdCB1cGxvYWRQaWN0dXJlV2lkdGggPSB0aGlzLl9nZXRXaWR0aEVsZW1lbnQodGhpcy51cGxvYWRQaWN0dXJlKTtcclxuICAgICAgICAgICAgY29uc3QgaW5mb1dpZHRoID0gdGhpcy5fZ2V0V2lkdGhFbGVtZW50KHRoaXMuaW5mbyk7XHJcbiAgICAgICAgICAgIGNvbnN0IHRodW1ibmFpbFdpZHRoID0gdGhpcy5fZ2V0V2lkdGhFbGVtZW50KHRoaXMudGh1bWJuYWlsKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aHVtYm5haWxXaWR0aCArIGluZm9XaWR0aCA+IHVwbG9hZFBpY3R1cmVXaWR0aCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGxvYWRQaWN0dXJlLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgndXBsb2FkLXBpY3R1cmUtLXNtYWxsJyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZFBpY3R1cmUubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCd1cGxvYWQtcGljdHVyZS0tc21hbGwnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2VsZWN0UGhvdG8oKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZmlsZUlucHV0RWxlbWVudCA9IHRoaXMuZmlsZUlucHV0Py5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIGZpbGVJbnB1dEVsZW1lbnQudmFsdWUgPSAnJztcclxuICAgICAgICBmaWxlSW5wdXRFbGVtZW50LmNsaWNrKCk7XHJcblxyXG4gICAgICAgIHRoaXMuX29uVG91Y2hlZD8uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZVBob3RvKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY29uZmlybURpYWxvZ1NlcnZpY2UuY29uZmlybSh7XHJcbiAgICAgICAgICAgIG1lc3NhZ2U6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblRleHRzPy5yZW1vdmFsTWVzc2FnZSA/P1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5jb25maXJtYXRpb25fcmVtb3ZlX2ltYWdlJyksXHJcbiAgICAgICAgICAgIGFjY2VwdExhYmVsOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb25UZXh0cz8ucmVtb3ZhbEFjY2VwdExhYmVsID8/XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnJlbW92ZScpLFxyXG4gICAgICAgICAgICByZWplY3RMYWJlbDpcclxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uVGV4dHM/LnJlbW92YWxSZWplY3RMYWJlbCA/P1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5jYW5jZWwnKSxcclxuICAgICAgICAgICAgaGVhZGVyOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb25UZXh0cz8ucmVtb3ZhbEhlYWRlciA/P1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5yZW1vdmVfaW1hZ2UnKSxcclxuICAgICAgICAgICAgYWNjZXB0OiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlSW5wdXRFbGVtZW50ID0gdGhpcy5maWxlSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICBmaWxlSW5wdXRFbGVtZW50LnZhbHVlID0gJyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmltYWdlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlZEltYWdlLmVtaXQoKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcGhvdG9TZWxlY3RlZChldmVudDogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fc2hvd0ltYWdlQ3JvcHBlcihldmVudC5zcmNFbGVtZW50LmZpbGVzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9zaG93SW1hZ2VDcm9wcGVyKGZpbGVzOiBGaWxlW10pOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3ZhbGlkYXRlRGF0YShmaWxlcykpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZmlsZSA9IGZpbGVzWzBdO1xyXG5cclxuICAgICAgICBjb25zdCBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICBmaWxlUmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICAgICAgZmlsZVJlYWRlci5vbmxvYWRlbmQgPSAoZmlsZUV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pbWFnZUNyb3BwZXJTZXJ2aWNlLnNob3coe1xyXG4gICAgICAgICAgICAgICAgaW1hZ2VTb3VyY2U6IGZpbGVFdmVudC50YXJnZXQucmVzdWx0LFxyXG4gICAgICAgICAgICAgICAgY3JvcHBlZEltYWdlOiAoaW1hZ2UpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRJbWFnZS5lbWl0KGltYWdlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YTogUHJvZmlsZVBpY3R1cmVQaWNrZXJEYXRhID0geyBzb3VyY2U6IGZpbGUsIGJhc2U2NDogaW1hZ2UgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU2UgbyB0aXBvIGRvIGltYWdlIGZvciBzdHJpbmcgZXUgcHJlY2lzbyBhdHVhbGl6YXIgZSBtYW5kYXIgcGFyYSBvIGltYWdlQ2hhbmdlIHVtYSBzdHJpbmcuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU2UgZm9yIFByb2ZpbGVQaWN0dXJlUGlja2VyRGF0YSBldSBwcmVjaXNvIG1hbmRhciBvIGRhdGEgY29tcGxldG8uXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmltYWdlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmltYWdlID0gaW1hZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2VDaGFuZ2UuZW1pdChpbWFnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbWFnZSA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2VDaGFuZ2UuZW1pdChkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uQ2hhbmdlPy4odGhpcy5pbWFnZSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgY2hhbmdlSW1hZ2U6ICgpID0+IHRoaXMuc2VsZWN0UGhvdG8oKSxcclxuICAgICAgICAgICAgICAgIGFsbG93U2VsZWN0QW5vdGhlcjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBhc3BlY3RSYXRpbzogdGhpcy5hc3BlY3RSYXRpbyxcclxuICAgICAgICAgICAgICAgIC4uLnRoaXMuY3JvcHBlckxhYmVsc0NvbmZpZyxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9ub3JtYWxpemVTdXBvcnRlZEV4dGVuc2lvbnMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zdXBwb3J0ZWRFeHRlbnNpb25zID0gdGhpcy5zdXBwb3J0ZWRFeHRlbnNpb25zPy5tYXAoKGV4dGVuc2lvbikgPT5cclxuICAgICAgICAgICAgZXh0ZW5zaW9uLnJlcGxhY2UoJy4nLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3ZhbGlkYXRlRGF0YShmaWxlczogRmlsZVtdKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFmaWxlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5pbnZhbGlkRmlsZS5lbWl0KHsgZmlsZTogbnVsbCwgdmFsaWRhdGlvbjogJ21heEZpbGVMaW1pdCcgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbGUgPSBmaWxlc1swXTtcclxuXHJcbiAgICAgICAgaWYgKCFmaWxlLnR5cGUuaW5jbHVkZXMoJ2ltYWdlJykpIHtcclxuICAgICAgICAgICAgdGhpcy5pbnZhbGlkRmlsZS5lbWl0KHsgZmlsZSwgdmFsaWRhdGlvbjogJ3R5cGVJbnZhbGlkJyB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl92YWxpZGF0ZUZpbGVFeHRlbnNpb24oZmlsZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5pbnZhbGlkRmlsZS5lbWl0KHsgZmlsZSwgdmFsaWRhdGlvbjogJ3Vuc3VwcG9ydGVkRXh0ZW5zaW9uJyB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl92YWxpZGF0ZUZpbGVTaXplKGZpbGUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZEZpbGUuZW1pdCh7IGZpbGUsIHZhbGlkYXRpb246ICdtYXhGaWxlU2l6ZScgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3ZhbGlkYXRlRmlsZUV4dGVuc2lvbihmaWxlOiBGaWxlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3VwcG9ydGVkRXh0ZW5zaW9ucz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IGZpbGUubmFtZS5zcGxpdCgnLicpLnBvcCgpPy50b0xvd2VyQ2FzZSgpID8/ICcnO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdXBwb3J0ZWRFeHRlbnNpb25zLmluY2x1ZGVzKGV4dGVuc2lvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3ZhbGlkYXRlRmlsZVNpemUoZmlsZTogRmlsZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLm1heEZpbGVTaXplKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmaWxlLnNpemUgPD0gdGhpcy5tYXhGaWxlU2l6ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfZ2V0V2lkdGhFbGVtZW50KGVsZW1lbnQ6IEVsZW1lbnRSZWYpOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IHsgbGVmdCwgcmlnaHQgfSA9IGVsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICByZXR1cm4gcmlnaHQgLSBsZWZ0O1xyXG4gICAgfVxyXG59XHJcbiIsIjxpbnB1dFxuICAgICNmaWxlSW5wdXRcbiAgICBbYWNjZXB0XT1cImFjY2VwdFwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBjbGFzcz1cImZpbGUtaW5wdXRcIlxuICAgIHR5cGU9XCJmaWxlXCJcbiAgICAoY2hhbmdlKT1cInBob3RvU2VsZWN0ZWQoJGV2ZW50KVwiXG4vPlxuPGRpdlxuICAgICN1cGxvYWRQaWN0dXJlXG4gICAgY2xhc3M9XCJ1cGxvYWQtcGljdHVyZVwiXG4gICAgW2NsYXNzLnVwbG9hZC1waWN0dXJlLS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4+XG4gICAgPHMtdGh1bWJuYWlsXG4gICAgICAgICN0aHVtYm5haWxcbiAgICAgICAgaWNvbkNsYXNzPVwiZmFyIGZhLXVzZXJcIlxuICAgICAgICBbaW1hZ2VTb3VyY2VdPVwiaW1hZ2VCYXNlNjRcIlxuICAgICAgICBbaGFzQWN0aW9uXT1cIiFpbWFnZVwiXG4gICAgICAgIChjbGljayk9XCJzZWxlY3RQaG90bygpXCJcbiAgICA+XG4gICAgPC9zLXRodW1ibmFpbD5cbiAgICA8ZGl2XG4gICAgICAgICNpbmZvXG4gICAgICAgIGNsYXNzPVwiaW5mb1wiXG4gICAgPlxuICAgICAgICBAaWYgKGltYWdlKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uc1wiPlxuICAgICAgICAgICAgICAgIDxzLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY2hhbmdlQnV0dG9uTGFiZWwgfHwgJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5jaGFuZ2VfcGhvdG8nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHk9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwic2VsZWN0UGhvdG8oKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvcy1idXR0b24+XG4gICAgICAgICAgICAgICAgPHMtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJyZW1vdmVCdXR0b25MYWJlbCB8fCAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnJlbW92ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBwcmlvcml0eT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGlja2VkKT1cInJlbW92ZVBob3RvKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L3MtYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPHAgY2xhc3M9XCJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgIHt7IHNpbXBsZVRpdGxlIHx8ICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZHJhZ195b3VyX3Bob3RvX29yJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uLXRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFBob3RvKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgYWN0aW9uVGl0bGUgfHwgJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5zZWxlY3RfYV9maWxlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgfVxuICAgICAgICA8cCBjbGFzcz1cInN1YnRpdGxlXCI+e3sgc3VidGl0bGUgfX08L3A+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -11,6 +11,28 @@ export class SelectOptionComponent {
11
11
  isSelected = model.required();
12
12
  /** @description Classe do ícone de checkmark exibido quando a opção está selecionada. @default 'far fa-check' */
13
13
  checkIconClass = input('far fa-check');
14
+ /**
15
+ * @description Texto anunciado via `aria-describedby` informando a que grupo esta opção
16
+ * pertence. O agrupador visual tem `role="presentation"` (silencioso pro leitor de tela), e
17
+ * `select.component.ts` só passa este input na primeira opção de cada grupo, pra não repetir
18
+ * o anúncio em toda opção subsequente.
19
+ * @default null
20
+ */
21
+ groupAnnouncement = input(null);
22
+ /**
23
+ * @description Posição (1-based) desta opção dentro do conjunto navegável, exposta via
24
+ * `aria-posinset`. Necessário com `virtualScroll`, já que só uma janela de opções existe de
25
+ * fato no DOM a cada momento — sem isso, o leitor de tela tenta inferir a posição contando
26
+ * os `role="option"` irmãos presentes no DOM, o que fica errado numa lista virtualizada.
27
+ * @default null
28
+ */
29
+ posinset = input(null);
30
+ /**
31
+ * @description Tamanho total do conjunto navegável ao qual esta opção pertence, exposto via
32
+ * `aria-setsize`. Ver `posinset`.
33
+ * @default null
34
+ */
35
+ setsize = input(null);
14
36
  selected = output();
15
37
  onClick() {
16
38
  if (this.isGrouper()) {
@@ -19,10 +41,16 @@ export class SelectOptionComponent {
19
41
  this.selected.emit();
20
42
  }
21
43
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SelectOptionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
22
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: SelectOptionComponent, isStandalone: true, selector: "s-select-option", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: true, transformFunction: null }, checkmark: { classPropertyName: "checkmark", publicName: "checkmark", isSignal: true, isRequired: true, transformFunction: null }, isGrouper: { classPropertyName: "isGrouper", publicName: "isGrouper", isSignal: true, isRequired: true, transformFunction: null }, isFocused: { classPropertyName: "isFocused", publicName: "isFocused", isSignal: true, isRequired: true, transformFunction: null }, isSelected: { classPropertyName: "isSelected", publicName: "isSelected", isSignal: true, isRequired: true, transformFunction: null }, checkIconClass: { classPropertyName: "checkIconClass", publicName: "checkIconClass", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { isSelected: "isSelectedChange", selected: "selected" }, ngImport: i0, template: "<div\n [attr.id]=\"id()\"\n [attr.role]=\"isGrouper() ? 'presentation' : 'option'\"\n [attr.aria-selected]=\"isGrouper() ? null : isSelected()\"\n class=\"flex select-none items-center gap-3 px-3 py-2\"\n [class.hover:bg-grayscale-10]=\"!isGrouper()\"\n [class.bg-grayscale-10]=\"!isGrouper() && isFocused()\"\n (click)=\"onClick()\"\n (keydown.enter)=\"onClick()\"\n (keydown.space)=\"onClick(); $event.preventDefault()\"\n>\n @if (!isGrouper() && checkmark() && !multiple() && isSelected()) {\n <i\n class=\"text-grayscale-60\"\n [class]=\"checkIconClass()\"\n aria-hidden=\"true\"\n ></i>\n }\n\n @if (!isGrouper() && multiple()) {\n <s-checkbox [checked]=\"isSelected()\"></s-checkbox>\n }\n <span\n [class]=\"isSelected() ? 'text-[#428BCA]' : 'text-grayscale-90'\"\n [class.font-bold]=\"isGrouper()\"\n >\n {{ label() }}\n </span>\n</div>\n\n", dependencies: [{ kind: "component", type: CheckboxComponent, selector: "s-checkbox", inputs: ["disabled", "checked", "indeterminate", "label", "ariaLabel", "ariaLabelledBy"], outputs: ["disabledChange", "checkedChange"] }] });
44
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: SelectOptionComponent, isStandalone: true, selector: "s-select-option", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: true, transformFunction: null }, checkmark: { classPropertyName: "checkmark", publicName: "checkmark", isSignal: true, isRequired: true, transformFunction: null }, isGrouper: { classPropertyName: "isGrouper", publicName: "isGrouper", isSignal: true, isRequired: true, transformFunction: null }, isFocused: { classPropertyName: "isFocused", publicName: "isFocused", isSignal: true, isRequired: true, transformFunction: null }, isSelected: { classPropertyName: "isSelected", publicName: "isSelected", isSignal: true, isRequired: true, transformFunction: null }, checkIconClass: { classPropertyName: "checkIconClass", publicName: "checkIconClass", isSignal: true, isRequired: false, transformFunction: null }, groupAnnouncement: { classPropertyName: "groupAnnouncement", publicName: "groupAnnouncement", isSignal: true, isRequired: false, transformFunction: null }, posinset: { classPropertyName: "posinset", publicName: "posinset", isSignal: true, isRequired: false, transformFunction: null }, setsize: { classPropertyName: "setsize", publicName: "setsize", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { isSelected: "isSelectedChange", selected: "selected" }, host: { attributes: { "role": "presentation" } }, ngImport: i0, template: "<div\n [attr.id]=\"id()\"\n [attr.role]=\"isGrouper() ? 'presentation' : 'option'\"\n [attr.aria-selected]=\"isGrouper() ? null : isSelected()\"\n [attr.aria-describedby]=\"groupAnnouncement() ? id() + '-group' : null\"\n [attr.aria-posinset]=\"isGrouper() ? null : posinset()\"\n [attr.aria-setsize]=\"isGrouper() ? null : setsize()\"\n class=\"flex select-none items-center gap-3 px-3 py-2\"\n [class.hover:bg-grayscale-10]=\"!isGrouper()\"\n [class.bg-grayscale-10]=\"!isGrouper() && isFocused()\"\n (click)=\"onClick()\"\n (keydown.enter)=\"onClick()\"\n (keydown.space)=\"onClick(); $event.preventDefault()\"\n>\n @if (!isGrouper() && checkmark() && !multiple() && isSelected()) {\n <i\n class=\"text-grayscale-60\"\n [class]=\"checkIconClass()\"\n aria-hidden=\"true\"\n ></i>\n }\n\n @if (!isGrouper() && multiple()) {\n <!-- aria-hidden: puramente visual \u2014 o clique borbulha pro (click) do pr\u00F3prio option acima,\n e o estado de sele\u00E7\u00E3o j\u00E1 \u00E9 comunicado pelo aria-selected do option. Sem isso, esse\n checkbox aninhado (sem aria-label, com seu pr\u00F3prio aria-checked independente) era um\n segundo objeto de acessibilidade \"concorrente\" anunciando o mesmo estado \u2014 reportado\n via NVDA: o leitor de tela anunciava esse checkbox (sem nome/posi\u00E7\u00E3o pr\u00F3pria) antes\n da op\u00E7\u00E3o correta ser anunciada. -->\n <s-checkbox\n [checked]=\"isSelected()\"\n aria-hidden=\"true\"\n ></s-checkbox>\n }\n <span\n [class]=\"isSelected() ? 'text-[#428BCA]' : 'text-grayscale-90'\"\n [class.font-bold]=\"isGrouper()\"\n >\n {{ label() }}\n </span>\n\n @if (groupAnnouncement()) {\n <!-- aria-hidden pra n\u00E3o entrar no nome acess\u00EDvel da op\u00E7\u00E3o (computado a partir do\n conte\u00FAdo de texto vis\u00EDvel) \u2014 o `aria-describedby` acima ainda consegue ler seu\n texto normalmente, j\u00E1 que essa leitura ignora deliberadamente o aria-hidden do\n elemento referenciado. Sem isso, o texto seria anunciado duas vezes (uma como\n parte do nome, outra como descri\u00E7\u00E3o). -->\n <span\n class=\"sr-only\"\n [id]=\"id() + '-group'\"\n aria-hidden=\"true\"\n >{{ groupAnnouncement() }}</span>\n }\n</div>\n\n", dependencies: [{ kind: "component", type: CheckboxComponent, selector: "s-checkbox", inputs: ["disabled", "checked", "indeterminate", "label", "ariaLabel", "ariaLabelledBy"], outputs: ["disabledChange", "checkedChange"] }] });
23
45
  }
24
46
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SelectOptionComponent, decorators: [{
25
47
  type: Component,
26
- args: [{ selector: 's-select-option', standalone: true, imports: [CheckboxComponent], template: "<div\n [attr.id]=\"id()\"\n [attr.role]=\"isGrouper() ? 'presentation' : 'option'\"\n [attr.aria-selected]=\"isGrouper() ? null : isSelected()\"\n class=\"flex select-none items-center gap-3 px-3 py-2\"\n [class.hover:bg-grayscale-10]=\"!isGrouper()\"\n [class.bg-grayscale-10]=\"!isGrouper() && isFocused()\"\n (click)=\"onClick()\"\n (keydown.enter)=\"onClick()\"\n (keydown.space)=\"onClick(); $event.preventDefault()\"\n>\n @if (!isGrouper() && checkmark() && !multiple() && isSelected()) {\n <i\n class=\"text-grayscale-60\"\n [class]=\"checkIconClass()\"\n aria-hidden=\"true\"\n ></i>\n }\n\n @if (!isGrouper() && multiple()) {\n <s-checkbox [checked]=\"isSelected()\"></s-checkbox>\n }\n <span\n [class]=\"isSelected() ? 'text-[#428BCA]' : 'text-grayscale-90'\"\n [class.font-bold]=\"isGrouper()\"\n >\n {{ label() }}\n </span>\n</div>\n\n" }]
48
+ args: [{ selector: 's-select-option', standalone: true, imports: [CheckboxComponent], host: {
49
+ // Sem role="presentation" este elemento custom pode quebrar, em determinadas
50
+ // combinações de navegador/AT, a relação ARIA pai/filho entre o role="listbox"
51
+ // e o role="option" do template interno (ver WAI-ARIA APG: wrappers entre um
52
+ // role pai e um role filho precisam de role="presentation"/"none").
53
+ role: 'presentation',
54
+ }, template: "<div\n [attr.id]=\"id()\"\n [attr.role]=\"isGrouper() ? 'presentation' : 'option'\"\n [attr.aria-selected]=\"isGrouper() ? null : isSelected()\"\n [attr.aria-describedby]=\"groupAnnouncement() ? id() + '-group' : null\"\n [attr.aria-posinset]=\"isGrouper() ? null : posinset()\"\n [attr.aria-setsize]=\"isGrouper() ? null : setsize()\"\n class=\"flex select-none items-center gap-3 px-3 py-2\"\n [class.hover:bg-grayscale-10]=\"!isGrouper()\"\n [class.bg-grayscale-10]=\"!isGrouper() && isFocused()\"\n (click)=\"onClick()\"\n (keydown.enter)=\"onClick()\"\n (keydown.space)=\"onClick(); $event.preventDefault()\"\n>\n @if (!isGrouper() && checkmark() && !multiple() && isSelected()) {\n <i\n class=\"text-grayscale-60\"\n [class]=\"checkIconClass()\"\n aria-hidden=\"true\"\n ></i>\n }\n\n @if (!isGrouper() && multiple()) {\n <!-- aria-hidden: puramente visual \u2014 o clique borbulha pro (click) do pr\u00F3prio option acima,\n e o estado de sele\u00E7\u00E3o j\u00E1 \u00E9 comunicado pelo aria-selected do option. Sem isso, esse\n checkbox aninhado (sem aria-label, com seu pr\u00F3prio aria-checked independente) era um\n segundo objeto de acessibilidade \"concorrente\" anunciando o mesmo estado \u2014 reportado\n via NVDA: o leitor de tela anunciava esse checkbox (sem nome/posi\u00E7\u00E3o pr\u00F3pria) antes\n da op\u00E7\u00E3o correta ser anunciada. -->\n <s-checkbox\n [checked]=\"isSelected()\"\n aria-hidden=\"true\"\n ></s-checkbox>\n }\n <span\n [class]=\"isSelected() ? 'text-[#428BCA]' : 'text-grayscale-90'\"\n [class.font-bold]=\"isGrouper()\"\n >\n {{ label() }}\n </span>\n\n @if (groupAnnouncement()) {\n <!-- aria-hidden pra n\u00E3o entrar no nome acess\u00EDvel da op\u00E7\u00E3o (computado a partir do\n conte\u00FAdo de texto vis\u00EDvel) \u2014 o `aria-describedby` acima ainda consegue ler seu\n texto normalmente, j\u00E1 que essa leitura ignora deliberadamente o aria-hidden do\n elemento referenciado. Sem isso, o texto seria anunciado duas vezes (uma como\n parte do nome, outra como descri\u00E7\u00E3o). -->\n <span\n class=\"sr-only\"\n [id]=\"id() + '-group'\"\n aria-hidden=\"true\"\n >{{ groupAnnouncement() }}</span>\n }\n</div>\n\n" }]
27
55
  }] });
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LW9wdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc2VsZWN0L3NyYy9saWIvc2VsZWN0L2NvbXBvbmVudHMvc2VsZWN0LW9wdGlvbi9zZWxlY3Qtb3B0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zZWxlY3Qvc3JjL2xpYi9zZWxlY3QvY29tcG9uZW50cy9zZWxlY3Qtb3B0aW9uL3NlbGVjdC1vcHRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQzs7QUFRaEYsTUFBTSxPQUFPLHFCQUFxQjtJQUN2QixFQUFFLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVSxDQUFDO0lBQzlCLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFVLENBQUM7SUFDakMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVcsQ0FBQztJQUNyQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVyxDQUFDO0lBQ3RDLFNBQVMsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFXLENBQUM7SUFDdEMsU0FBUyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVcsQ0FBQztJQUV0QyxVQUFVLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVyxDQUFDO0lBRTlDLGlIQUFpSDtJQUMxRyxjQUFjLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRXZDLFFBQVEsR0FBRyxNQUFNLEVBQUUsQ0FBQztJQUVwQixPQUFPO1FBQ1YsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztZQUNuQixPQUFPO1FBQ1gsQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQzt3R0FyQlEscUJBQXFCOzRGQUFyQixxQkFBcUIsaXFDQ1ZsQyw0OEJBOEJBLDRDRHRCYyxpQkFBaUI7OzRGQUVsQixxQkFBcUI7a0JBTmpDLFNBQVM7K0JBQ0ksaUJBQWlCLGNBRWYsSUFBSSxXQUNQLENBQUMsaUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGlucHV0LCBtb2RlbCwgb3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBDaGVja2JveENvbXBvbmVudCB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvY2hlY2tib3gnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3Mtc2VsZWN0LW9wdGlvbicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LW9wdGlvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gICAgaW1wb3J0czogW0NoZWNrYm94Q29tcG9uZW50XSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNlbGVjdE9wdGlvbkNvbXBvbmVudCB7XHJcbiAgICBwdWJsaWMgaWQgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7XHJcbiAgICBwdWJsaWMgbGFiZWwgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7XHJcbiAgICBwdWJsaWMgbXVsdGlwbGUgPSBpbnB1dC5yZXF1aXJlZDxib29sZWFuPigpO1xyXG4gICAgcHVibGljIGNoZWNrbWFyayA9IGlucHV0LnJlcXVpcmVkPGJvb2xlYW4+KCk7XHJcbiAgICBwdWJsaWMgaXNHcm91cGVyID0gaW5wdXQucmVxdWlyZWQ8Ym9vbGVhbj4oKTtcclxuICAgIHB1YmxpYyBpc0ZvY3VzZWQgPSBpbnB1dC5yZXF1aXJlZDxib29sZWFuPigpO1xyXG5cclxuICAgIHB1YmxpYyBpc1NlbGVjdGVkID0gbW9kZWwucmVxdWlyZWQ8Ym9vbGVhbj4oKTtcclxuXHJcbiAgICAvKiogQGRlc2NyaXB0aW9uIENsYXNzZSBkbyDDrWNvbmUgZGUgY2hlY2ttYXJrIGV4aWJpZG8gcXVhbmRvIGEgb3DDp8OjbyBlc3TDoSBzZWxlY2lvbmFkYS4gQGRlZmF1bHQgJ2ZhciBmYS1jaGVjaycgKi9cclxuICAgIHB1YmxpYyBjaGVja0ljb25DbGFzcyA9IGlucHV0KCdmYXIgZmEtY2hlY2snKTtcclxuXHJcbiAgICBwdWJsaWMgc2VsZWN0ZWQgPSBvdXRwdXQoKTtcclxuXHJcbiAgICBwdWJsaWMgb25DbGljaygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5pc0dyb3VwZXIoKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkLmVtaXQoKTtcclxuICAgIH1cclxufVxyXG4iLCI8ZGl2XG4gICAgW2F0dHIuaWRdPVwiaWQoKVwiXG4gICAgW2F0dHIucm9sZV09XCJpc0dyb3VwZXIoKSA/ICdwcmVzZW50YXRpb24nIDogJ29wdGlvbidcIlxuICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiaXNHcm91cGVyKCkgPyBudWxsIDogaXNTZWxlY3RlZCgpXCJcbiAgICBjbGFzcz1cImZsZXggc2VsZWN0LW5vbmUgaXRlbXMtY2VudGVyIGdhcC0zIHB4LTMgcHktMlwiXG4gICAgW2NsYXNzLmhvdmVyOmJnLWdyYXlzY2FsZS0xMF09XCIhaXNHcm91cGVyKClcIlxuICAgIFtjbGFzcy5iZy1ncmF5c2NhbGUtMTBdPVwiIWlzR3JvdXBlcigpICYmIGlzRm9jdXNlZCgpXCJcbiAgICAoY2xpY2spPVwib25DbGljaygpXCJcbiAgICAoa2V5ZG93bi5lbnRlcik9XCJvbkNsaWNrKClcIlxuICAgIChrZXlkb3duLnNwYWNlKT1cIm9uQ2xpY2soKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuPlxuICAgIEBpZiAoIWlzR3JvdXBlcigpICYmIGNoZWNrbWFyaygpICYmICFtdWx0aXBsZSgpICYmIGlzU2VsZWN0ZWQoKSkge1xuICAgICAgICA8aVxuICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWdyYXlzY2FsZS02MFwiXG4gICAgICAgICAgICBbY2xhc3NdPVwiY2hlY2tJY29uQ2xhc3MoKVwiXG4gICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICA+PC9pPlxuICAgIH1cblxuICAgIEBpZiAoIWlzR3JvdXBlcigpICYmIG11bHRpcGxlKCkpIHtcbiAgICAgICAgPHMtY2hlY2tib3ggW2NoZWNrZWRdPVwiaXNTZWxlY3RlZCgpXCI+PC9zLWNoZWNrYm94PlxuICAgIH1cbiAgICA8c3BhblxuICAgICAgICBbY2xhc3NdPVwiaXNTZWxlY3RlZCgpID8gJ3RleHQtWyM0MjhCQ0FdJyA6ICd0ZXh0LWdyYXlzY2FsZS05MCdcIlxuICAgICAgICBbY2xhc3MuZm9udC1ib2xkXT1cImlzR3JvdXBlcigpXCJcbiAgICA+XG4gICAgICAgIHt7IGxhYmVsKCkgfX1cbiAgICA8L3NwYW4+XG48L2Rpdj5cblxuIl19
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LW9wdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc2VsZWN0L3NyYy9saWIvc2VsZWN0L2NvbXBvbmVudHMvc2VsZWN0LW9wdGlvbi9zZWxlY3Qtb3B0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zZWxlY3Qvc3JjL2xpYi9zZWxlY3QvY29tcG9uZW50cy9zZWxlY3Qtb3B0aW9uL3NlbGVjdC1vcHRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQzs7QUFlaEYsTUFBTSxPQUFPLHFCQUFxQjtJQUN2QixFQUFFLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVSxDQUFDO0lBQzlCLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFVLENBQUM7SUFDakMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVcsQ0FBQztJQUNyQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVyxDQUFDO0lBQ3RDLFNBQVMsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFXLENBQUM7SUFDdEMsU0FBUyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVcsQ0FBQztJQUV0QyxVQUFVLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVyxDQUFDO0lBRTlDLGlIQUFpSDtJQUMxRyxjQUFjLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRTlDOzs7Ozs7T0FNRztJQUNJLGlCQUFpQixHQUFHLEtBQUssQ0FBZ0IsSUFBSSxDQUFDLENBQUM7SUFFdEQ7Ozs7OztPQU1HO0lBQ0ksUUFBUSxHQUFHLEtBQUssQ0FBZ0IsSUFBSSxDQUFDLENBQUM7SUFFN0M7Ozs7T0FJRztJQUNJLE9BQU8sR0FBRyxLQUFLLENBQWdCLElBQUksQ0FBQyxDQUFDO0lBRXJDLFFBQVEsR0FBRyxNQUFNLEVBQUUsQ0FBQztJQUVwQixPQUFPO1FBQ1YsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztZQUNuQixPQUFPO1FBQ1gsQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQzt3R0E5Q1EscUJBQXFCOzRGQUFyQixxQkFBcUIsOG1EQ2pCbEMsczlFQXVEQSw0Q0QvQ2MsaUJBQWlCOzs0RkFTbEIscUJBQXFCO2tCQWJqQyxTQUFTOytCQUNJLGlCQUFpQixjQUVmLElBQUksV0FDUCxDQUFDLGlCQUFpQixDQUFDLFFBQ3RCO3dCQUNGLDZFQUE2RTt3QkFDN0UsK0VBQStFO3dCQUMvRSw2RUFBNkU7d0JBQzdFLG9FQUFvRTt3QkFDcEUsSUFBSSxFQUFFLGNBQWM7cUJBQ3ZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBpbnB1dCwgbW9kZWwsIG91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL2NoZWNrYm94JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzLXNlbGVjdC1vcHRpb24nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdC1vcHRpb24uY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIGltcG9ydHM6IFtDaGVja2JveENvbXBvbmVudF0sXHJcbiAgICBob3N0OiB7XHJcbiAgICAgICAgLy8gU2VtIHJvbGU9XCJwcmVzZW50YXRpb25cIiBlc3RlIGVsZW1lbnRvIGN1c3RvbSBwb2RlIHF1ZWJyYXIsIGVtIGRldGVybWluYWRhc1xyXG4gICAgICAgIC8vIGNvbWJpbmHDp8O1ZXMgZGUgbmF2ZWdhZG9yL0FULCBhIHJlbGHDp8OjbyBBUklBIHBhaS9maWxobyBlbnRyZSBvIHJvbGU9XCJsaXN0Ym94XCJcclxuICAgICAgICAvLyBlIG8gcm9sZT1cIm9wdGlvblwiIGRvIHRlbXBsYXRlIGludGVybm8gKHZlciBXQUktQVJJQSBBUEc6IHdyYXBwZXJzIGVudHJlIHVtXHJcbiAgICAgICAgLy8gcm9sZSBwYWkgZSB1bSByb2xlIGZpbGhvIHByZWNpc2FtIGRlIHJvbGU9XCJwcmVzZW50YXRpb25cIi9cIm5vbmVcIikuXHJcbiAgICAgICAgcm9sZTogJ3ByZXNlbnRhdGlvbicsXHJcbiAgICB9LFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2VsZWN0T3B0aW9uQ29tcG9uZW50IHtcclxuICAgIHB1YmxpYyBpZCA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcclxuICAgIHB1YmxpYyBsYWJlbCA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcclxuICAgIHB1YmxpYyBtdWx0aXBsZSA9IGlucHV0LnJlcXVpcmVkPGJvb2xlYW4+KCk7XHJcbiAgICBwdWJsaWMgY2hlY2ttYXJrID0gaW5wdXQucmVxdWlyZWQ8Ym9vbGVhbj4oKTtcclxuICAgIHB1YmxpYyBpc0dyb3VwZXIgPSBpbnB1dC5yZXF1aXJlZDxib29sZWFuPigpO1xyXG4gICAgcHVibGljIGlzRm9jdXNlZCA9IGlucHV0LnJlcXVpcmVkPGJvb2xlYW4+KCk7XHJcblxyXG4gICAgcHVibGljIGlzU2VsZWN0ZWQgPSBtb2RlbC5yZXF1aXJlZDxib29sZWFuPigpO1xyXG5cclxuICAgIC8qKiBAZGVzY3JpcHRpb24gQ2xhc3NlIGRvIMOtY29uZSBkZSBjaGVja21hcmsgZXhpYmlkbyBxdWFuZG8gYSBvcMOnw6NvIGVzdMOhIHNlbGVjaW9uYWRhLiBAZGVmYXVsdCAnZmFyIGZhLWNoZWNrJyAqL1xyXG4gICAgcHVibGljIGNoZWNrSWNvbkNsYXNzID0gaW5wdXQoJ2ZhciBmYS1jaGVjaycpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFRleHRvIGFudW5jaWFkbyB2aWEgYGFyaWEtZGVzY3JpYmVkYnlgIGluZm9ybWFuZG8gYSBxdWUgZ3J1cG8gZXN0YSBvcMOnw6NvXHJcbiAgICAgKiBwZXJ0ZW5jZS4gTyBhZ3J1cGFkb3IgdmlzdWFsIHRlbSBgcm9sZT1cInByZXNlbnRhdGlvblwiYCAoc2lsZW5jaW9zbyBwcm8gbGVpdG9yIGRlIHRlbGEpLCBlXHJcbiAgICAgKiBgc2VsZWN0LmNvbXBvbmVudC50c2Agc8OzIHBhc3NhIGVzdGUgaW5wdXQgbmEgcHJpbWVpcmEgb3DDp8OjbyBkZSBjYWRhIGdydXBvLCBwcmEgbsOjbyByZXBldGlyXHJcbiAgICAgKiBvIGFuw7puY2lvIGVtIHRvZGEgb3DDp8OjbyBzdWJzZXF1ZW50ZS5cclxuICAgICAqIEBkZWZhdWx0IG51bGxcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdyb3VwQW5ub3VuY2VtZW50ID0gaW5wdXQ8c3RyaW5nIHwgbnVsbD4obnVsbCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUG9zacOnw6NvICgxLWJhc2VkKSBkZXN0YSBvcMOnw6NvIGRlbnRybyBkbyBjb25qdW50byBuYXZlZ8OhdmVsLCBleHBvc3RhIHZpYVxyXG4gICAgICogYGFyaWEtcG9zaW5zZXRgLiBOZWNlc3PDoXJpbyBjb20gYHZpcnR1YWxTY3JvbGxgLCBqw6EgcXVlIHPDsyB1bWEgamFuZWxhIGRlIG9ww6fDtWVzIGV4aXN0ZSBkZVxyXG4gICAgICogZmF0byBubyBET00gYSBjYWRhIG1vbWVudG8g4oCUIHNlbSBpc3NvLCBvIGxlaXRvciBkZSB0ZWxhIHRlbnRhIGluZmVyaXIgYSBwb3Npw6fDo28gY29udGFuZG9cclxuICAgICAqIG9zIGByb2xlPVwib3B0aW9uXCJgIGlybcOjb3MgcHJlc2VudGVzIG5vIERPTSwgbyBxdWUgZmljYSBlcnJhZG8gbnVtYSBsaXN0YSB2aXJ0dWFsaXphZGEuXHJcbiAgICAgKiBAZGVmYXVsdCBudWxsXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBwb3NpbnNldCA9IGlucHV0PG51bWJlciB8IG51bGw+KG51bGwpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFRhbWFuaG8gdG90YWwgZG8gY29uanVudG8gbmF2ZWfDoXZlbCBhbyBxdWFsIGVzdGEgb3DDp8OjbyBwZXJ0ZW5jZSwgZXhwb3N0byB2aWFcclxuICAgICAqIGBhcmlhLXNldHNpemVgLiBWZXIgYHBvc2luc2V0YC5cclxuICAgICAqIEBkZWZhdWx0IG51bGxcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldHNpemUgPSBpbnB1dDxudW1iZXIgfCBudWxsPihudWxsKTtcclxuXHJcbiAgICBwdWJsaWMgc2VsZWN0ZWQgPSBvdXRwdXQoKTtcclxuXHJcbiAgICBwdWJsaWMgb25DbGljaygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5pc0dyb3VwZXIoKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkLmVtaXQoKTtcclxuICAgIH1cclxufVxyXG4iLCI8ZGl2XG4gICAgW2F0dHIuaWRdPVwiaWQoKVwiXG4gICAgW2F0dHIucm9sZV09XCJpc0dyb3VwZXIoKSA/ICdwcmVzZW50YXRpb24nIDogJ29wdGlvbidcIlxuICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiaXNHcm91cGVyKCkgPyBudWxsIDogaXNTZWxlY3RlZCgpXCJcbiAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImdyb3VwQW5ub3VuY2VtZW50KCkgPyBpZCgpICsgJy1ncm91cCcgOiBudWxsXCJcbiAgICBbYXR0ci5hcmlhLXBvc2luc2V0XT1cImlzR3JvdXBlcigpID8gbnVsbCA6IHBvc2luc2V0KClcIlxuICAgIFthdHRyLmFyaWEtc2V0c2l6ZV09XCJpc0dyb3VwZXIoKSA/IG51bGwgOiBzZXRzaXplKClcIlxuICAgIGNsYXNzPVwiZmxleCBzZWxlY3Qtbm9uZSBpdGVtcy1jZW50ZXIgZ2FwLTMgcHgtMyBweS0yXCJcbiAgICBbY2xhc3MuaG92ZXI6YmctZ3JheXNjYWxlLTEwXT1cIiFpc0dyb3VwZXIoKVwiXG4gICAgW2NsYXNzLmJnLWdyYXlzY2FsZS0xMF09XCIhaXNHcm91cGVyKCkgJiYgaXNGb2N1c2VkKClcIlxuICAgIChjbGljayk9XCJvbkNsaWNrKClcIlxuICAgIChrZXlkb3duLmVudGVyKT1cIm9uQ2xpY2soKVwiXG4gICAgKGtleWRvd24uc3BhY2UpPVwib25DbGljaygpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4+XG4gICAgQGlmICghaXNHcm91cGVyKCkgJiYgY2hlY2ttYXJrKCkgJiYgIW11bHRpcGxlKCkgJiYgaXNTZWxlY3RlZCgpKSB7XG4gICAgICAgIDxpXG4gICAgICAgICAgICBjbGFzcz1cInRleHQtZ3JheXNjYWxlLTYwXCJcbiAgICAgICAgICAgIFtjbGFzc109XCJjaGVja0ljb25DbGFzcygpXCJcbiAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgID48L2k+XG4gICAgfVxuXG4gICAgQGlmICghaXNHcm91cGVyKCkgJiYgbXVsdGlwbGUoKSkge1xuICAgICAgICA8IS0tIGFyaWEtaGlkZGVuOiBwdXJhbWVudGUgdmlzdWFsIOKAlCBvIGNsaXF1ZSBib3JidWxoYSBwcm8gKGNsaWNrKSBkbyBwcsOzcHJpbyBvcHRpb24gYWNpbWEsXG4gICAgICAgICAgICAgZSBvIGVzdGFkbyBkZSBzZWxlw6fDo28gasOhIMOpIGNvbXVuaWNhZG8gcGVsbyBhcmlhLXNlbGVjdGVkIGRvIG9wdGlvbi4gU2VtIGlzc28sIGVzc2VcbiAgICAgICAgICAgICBjaGVja2JveCBhbmluaGFkbyAoc2VtIGFyaWEtbGFiZWwsIGNvbSBzZXUgcHLDs3ByaW8gYXJpYS1jaGVja2VkIGluZGVwZW5kZW50ZSkgZXJhIHVtXG4gICAgICAgICAgICAgc2VndW5kbyBvYmpldG8gZGUgYWNlc3NpYmlsaWRhZGUgXCJjb25jb3JyZW50ZVwiIGFudW5jaWFuZG8gbyBtZXNtbyBlc3RhZG8g4oCUIHJlcG9ydGFkb1xuICAgICAgICAgICAgIHZpYSBOVkRBOiBvIGxlaXRvciBkZSB0ZWxhIGFudW5jaWF2YSBlc3NlIGNoZWNrYm94IChzZW0gbm9tZS9wb3Npw6fDo28gcHLDs3ByaWEpIGFudGVzXG4gICAgICAgICAgICAgZGEgb3DDp8OjbyBjb3JyZXRhIHNlciBhbnVuY2lhZGEuIC0tPlxuICAgICAgICA8cy1jaGVja2JveFxuICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgID48L3MtY2hlY2tib3g+XG4gICAgfVxuICAgIDxzcGFuXG4gICAgICAgIFtjbGFzc109XCJpc1NlbGVjdGVkKCkgPyAndGV4dC1bIzQyOEJDQV0nIDogJ3RleHQtZ3JheXNjYWxlLTkwJ1wiXG4gICAgICAgIFtjbGFzcy5mb250LWJvbGRdPVwiaXNHcm91cGVyKClcIlxuICAgID5cbiAgICAgICAge3sgbGFiZWwoKSB9fVxuICAgIDwvc3Bhbj5cblxuICAgIEBpZiAoZ3JvdXBBbm5vdW5jZW1lbnQoKSkge1xuICAgICAgICA8IS0tIGFyaWEtaGlkZGVuIHByYSBuw6NvIGVudHJhciBubyBub21lIGFjZXNzw612ZWwgZGEgb3DDp8OjbyAoY29tcHV0YWRvIGEgcGFydGlyIGRvXG4gICAgICAgICAgICAgY29udGXDumRvIGRlIHRleHRvIHZpc8OtdmVsKSDigJQgbyBgYXJpYS1kZXNjcmliZWRieWAgYWNpbWEgYWluZGEgY29uc2VndWUgbGVyIHNldVxuICAgICAgICAgICAgIHRleHRvIG5vcm1hbG1lbnRlLCBqw6EgcXVlIGVzc2EgbGVpdHVyYSBpZ25vcmEgZGVsaWJlcmFkYW1lbnRlIG8gYXJpYS1oaWRkZW4gZG9cbiAgICAgICAgICAgICBlbGVtZW50byByZWZlcmVuY2lhZG8uIFNlbSBpc3NvLCBvIHRleHRvIHNlcmlhIGFudW5jaWFkbyBkdWFzIHZlemVzICh1bWEgY29tb1xuICAgICAgICAgICAgIHBhcnRlIGRvIG5vbWUsIG91dHJhIGNvbW8gZGVzY3Jpw6fDo28pLiAtLT5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzPVwic3Itb25seVwiXG4gICAgICAgICAgICBbaWRdPVwiaWQoKSArICctZ3JvdXAnXCJcbiAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgID57eyBncm91cEFubm91bmNlbWVudCgpIH19PC9zcGFuPlxuICAgIH1cbjwvZGl2PlxuXG4iXX0=