igniteui-angular 13.1.0-rc.1 → 13.1.0-rc.2

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 (62) hide show
  1. package/esm2020/lib/action-strip/grid-actions/grid-editing-actions.component.mjs +2 -2
  2. package/esm2020/lib/data-operations/pivot-sort-strategy.mjs +44 -0
  3. package/esm2020/lib/data-operations/pivot-strategy.mjs +2 -43
  4. package/esm2020/lib/grids/cell.component.mjs +1 -2
  5. package/esm2020/lib/grids/common/grid.interface.mjs +1 -1
  6. package/esm2020/lib/grids/filtering/excel-style/excel-style-search.component.mjs +6 -3
  7. package/esm2020/lib/grids/grid-base.directive.mjs +11 -11
  8. package/esm2020/lib/grids/hierarchical-grid/hierarchical-cell.component.mjs +2 -2
  9. package/esm2020/lib/grids/hierarchical-grid/hierarchical-grid-api.service.mjs +3 -3
  10. package/esm2020/lib/grids/hierarchical-grid/hierarchical-grid-base.directive.mjs +10 -10
  11. package/esm2020/lib/grids/hierarchical-grid/hierarchical-grid-navigation.service.mjs +3 -3
  12. package/esm2020/lib/grids/hierarchical-grid/hierarchical-grid.component.mjs +31 -30
  13. package/esm2020/lib/grids/hierarchical-grid/hierarchical-grid.module.mjs +1 -1
  14. package/esm2020/lib/grids/hierarchical-grid/hierarchical-row.component.mjs +2 -2
  15. package/esm2020/lib/grids/hierarchical-grid/row-island.component.mjs +12 -13
  16. package/esm2020/lib/grids/pivot-grid/pivot-data-selector.component.mjs +2 -5
  17. package/esm2020/lib/grids/pivot-grid/pivot-grid-dimensions.mjs +2 -2
  18. package/esm2020/lib/grids/pivot-grid/pivot-grid.component.mjs +13 -13
  19. package/esm2020/lib/grids/pivot-grid/pivot-grid.pipes.mjs +7 -9
  20. package/esm2020/lib/grids/pivot-grid/pivot-header-row.component.mjs +6 -9
  21. package/esm2020/lib/grids/pivot-grid/pivot-row-dimension-content.component.mjs +9 -10
  22. package/esm2020/lib/grids/pivot-grid/pivot-row-dimension-header-group.component.mjs +1 -1
  23. package/esm2020/lib/grids/pivot-grid/pivot-row.component.mjs +1 -1
  24. package/esm2020/lib/grids/pivot-grid/pivot-sort-util.mjs +26 -0
  25. package/esm2020/lib/grids/pivot-grid/pivot-util.mjs +1 -23
  26. package/esm2020/lib/grids/resizing/pivot-grid/pivot-resize-handle.directive.mjs +1 -1
  27. package/esm2020/lib/grids/resizing/resize-handle.directive.mjs +1 -1
  28. package/esm2020/lib/grids/resizing/resizer.component.mjs +1 -1
  29. package/esm2020/lib/grids/resizing/resizing.service.mjs +1 -1
  30. package/esm2020/lib/grids/row.directive.mjs +1 -1
  31. package/esm2020/lib/grids/state.directive.mjs +2 -2
  32. package/esm2020/lib/grids/toolbar/grid-toolbar.base.mjs +1 -1
  33. package/esm2020/lib/grids/tree-grid/tree-grid.component.mjs +5 -7
  34. package/esm2020/lib/progressbar/progressbar.component.mjs +1 -2
  35. package/esm2020/lib/services/exporter-common/base-export-service.mjs +3 -3
  36. package/esm2020/public_api.mjs +2 -1
  37. package/fesm2015/igniteui-angular.mjs +276 -290
  38. package/fesm2015/igniteui-angular.mjs.map +1 -1
  39. package/fesm2020/igniteui-angular.mjs +276 -289
  40. package/fesm2020/igniteui-angular.mjs.map +1 -1
  41. package/lib/data-operations/pivot-sort-strategy.d.ts +16 -0
  42. package/lib/data-operations/pivot-strategy.d.ts +0 -14
  43. package/lib/grids/cell.component.d.ts +2 -2
  44. package/lib/grids/common/grid.interface.d.ts +3 -3
  45. package/lib/grids/grid-base.directive.d.ts +6 -7
  46. package/lib/grids/hierarchical-grid/hierarchical-grid-api.service.d.ts +1 -1
  47. package/lib/grids/hierarchical-grid/hierarchical-grid-base.directive.d.ts +4 -8
  48. package/lib/grids/hierarchical-grid/hierarchical-grid.component.d.ts +11 -6
  49. package/lib/grids/hierarchical-grid/row-island.component.d.ts +5 -5
  50. package/lib/grids/pivot-grid/pivot-grid-dimensions.d.ts +1 -1
  51. package/lib/grids/pivot-grid/pivot-grid.component.d.ts +4 -2
  52. package/lib/grids/pivot-grid/pivot-grid.pipes.d.ts +2 -2
  53. package/lib/grids/pivot-grid/pivot-header-row.component.d.ts +1 -1
  54. package/lib/grids/pivot-grid/pivot-row-dimension-content.component.d.ts +6 -6
  55. package/lib/grids/pivot-grid/pivot-sort-util.d.ts +5 -0
  56. package/lib/grids/pivot-grid/pivot-util.d.ts +0 -1
  57. package/lib/grids/row.directive.d.ts +3 -3
  58. package/lib/grids/tree-grid/tree-grid.component.d.ts +2 -4
  59. package/lib/progressbar/progressbar.component.d.ts +1 -1
  60. package/package.json +1 -1
  61. package/public_api.d.ts +1 -0
  62. package/schematics/tsconfig.tsbuildinfo +1 -1
@@ -779,7 +779,6 @@ export class IgxGridCellComponent {
779
779
  }
780
780
  getCellType(useRow) {
781
781
  const rowID = useRow ? this.grid.createRow(this.intRow.index, this.intRow.data) : this.intRow.index;
782
- // TODO: Fix types
783
782
  return new IgxGridCell(this.grid, rowID, this.column.field);
784
783
  }
785
784
  }
@@ -898,4 +897,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
898
897
  type: HostListener,
899
898
  args: ['contextmenu', ['$event']]
900
899
  }] } });
901
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvY2VsbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvY2VsbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFDTCxXQUFXLEVBQ1gsU0FBUyxFQU1ULE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDbEcsT0FBTyxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQWdCLE1BQU0sZUFBZSxDQUFDO0FBRXpFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQWtDLGFBQWEsRUFBVyxNQUFNLHlCQUF5QixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBR2xFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHakQ7Ozs7Ozs7Ozs7OztHQVlHO0FBT0gsTUFBTSxPQUFPLG9CQUFvQjtJQXVsQjdCLFlBQ2MsZ0JBQXlDLEVBQ3JCLElBQWMsRUFDckMsR0FBc0IsRUFDckIsT0FBZ0MsRUFDOUIsSUFB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RSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJOUMsU0FBUztzQkFEdEIsU0FBUzt1QkFBQyx5QkFBeUIsRUFBRSxFQUFFLElBQUksRUFBRSx5QkFBeUIsRUFBRTtnQkFtR2xFLGFBQWE7c0JBRG5CLFlBQVk7dUJBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQXFCN0IsT0FBTztzQkFEYixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFhMUIsYUFBYTtzQkFEbkIsWUFBWTt1QkFBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgTmdab25lLFxuICAgIE9uSW5pdCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25DaGFuZ2VzLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgSW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZm9ybWF0UGVyY2VudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJZ3hUZXh0SGlnaGxpZ2h0RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy90ZXh0LWhpZ2hsaWdodC90ZXh0LWhpZ2hsaWdodC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgZm9ybWF0Q3VycmVuY3ksIGZvcm1hdERhdGUsIFBsYXRmb3JtVXRpbCB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgSWd4R3JpZFNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuL3NlbGVjdGlvbi9zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBIYW1tZXJHZXN0dXJlc01hbmFnZXIgfSBmcm9tICcuLi9jb3JlL3RvdWNoJztcbmltcG9ydCB7IEdyaWRTZWxlY3Rpb25Nb2RlIH0gZnJvbSAnLi9jb21tb24vZW51bXMnO1xuaW1wb3J0IHsgQ2VsbFR5cGUsIENvbHVtblR5cGUsIEdyaWRUeXBlLCBJR1hfR1JJRF9CQVNFLCBSb3dUeXBlIH0gZnJvbSAnLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgZ2V0Q3VycmVuY3lTeW1ib2wsIGdldExvY2FsZUN1cnJlbmN5Q29kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBHcmlkQ29sdW1uRGF0YVR5cGUgfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvZGF0YS11dGlsJztcbmltcG9ydCB7IElneFJvd0RpcmVjdGl2ZSB9IGZyb20gJy4vcm93LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJU2VhcmNoSW5mbyB9IGZyb20gJy4vY29tbW9uL2V2ZW50cyc7XG5pbXBvcnQgeyBJZ3hHcmlkQ2VsbCB9IGZyb20gJy4vZ3JpZC1wdWJsaWMtY2VsbCc7XG5pbXBvcnQgeyBJU2VsZWN0aW9uTm9kZSB9IGZyb20gJy4vY29tbW9uL3R5cGVzJztcblxuLyoqXG4gKiBQcm92aWRpbmcgcmVmZXJlbmNlIHRvIGBJZ3hHcmlkQ2VsbENvbXBvbmVudGA6XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBAVmlld0NoaWxkKCdncmlkJywgeyByZWFkOiBJZ3hHcmlkQ29tcG9uZW50IH0pXG4gKiAgcHVibGljIGdyaWQ6IElneEdyaWRDb21wb25lbnQ7XG4gKiBgYGBcbiAqIGBgYHR5cGVzY3JpcHRcbiAqICBsZXQgY29sdW1uID0gdGhpcy5ncmlkLmNvbHVtbkxpc3QuZmlyc3Q7XG4gKiBgYGBcbiAqIGBgYHR5cGVzY3JpcHRcbiAqICBsZXQgY2VsbCA9IGNvbHVtbi5jZWxsc1swXTtcbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBzZWxlY3RvcjogJ2lneC1ncmlkLWNlbGwnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jZWxsLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtIYW1tZXJHZXN0dXJlc01hbmFnZXJdXG59KVxuZXhwb3J0IGNsYXNzIElneEdyaWRDZWxsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWdyaWRfX3RkLS1uZXcnKVxuICAgIHB1YmxpYyBnZXQgaXNFbXB0eUFkZFJvd0NlbGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmludFJvdy5hZGRSb3dVSSAmJiAodGhpcy52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMudmFsdWUgPT09IG51bGwpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGNvbHVtbiBvZiB0aGUgY2VsbC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIGxldCBjZWxsQ29sdW1uID0gdGhpcy5jZWxsLmNvbHVtbjtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkQ2VsbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNvbHVtbjogQ29sdW1uVHlwZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpbnRSb3c6IElneFJvd0RpcmVjdGl2ZTtcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHJvdyBvZiB0aGUgY2VsbC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGNlbGxSb3cgPSB0aGlzLmNlbGwucm93O1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHJvdygpOiBSb3dUeXBlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5jcmVhdGVSb3codGhpcy5pbnRSb3cuaW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGRhdGEgb2YgdGhlIHJvdyBvZiB0aGUgY2VsbC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHJvd0RhdGEgPSB0aGlzLmNlbGwucm93RGF0YTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkQ2VsbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJvd0RhdGE6IGFueTtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgdGVtcGxhdGUgb2YgdGhlIGNlbGwuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxuZy10ZW1wbGF0ZSAjY2VsbFRlbXBsYXRlIGlneENlbGwgbGV0LXZhbHVlPlxuICAgICAqICAgPGRpdiBzdHlsZT1cImZvbnQtc3R5bGU6IG9ibGlxdWU7IGNvbG9yOmJsdWV2aW9sZXQ7IGJhY2tncm91bmQ6cmVkXCI+XG4gICAgICogICAgICAgPHNwYW4+e3t2YWx1ZX19PC9zcGFuPlxuICAgICAqICAgPC9kaXY+XG4gICAgICogPC9uZy10ZW1wbGF0ZT5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZCgnY2VsbFRlbXBsYXRlJyx7cmVhZDogVGVtcGxhdGVSZWZ9KVxuICAgICAqIGNlbGxUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5jZWxsLmNlbGxUZW1wbGF0ZSA9IHRoaXMuY2VsbFRlbXBsYXRlO1xuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgdGVtcGxhdGUgPSAgdGhpcy5jZWxsLmNlbGxUZW1wbGF0ZTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkQ2VsbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNlbGxUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHBpbm5lZEluZGljYXRvcjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgY2VsbCB2YWx1ZS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5jZWxsLnZhbHVlID0gXCJDZWxsIFZhbHVlXCI7XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjZWxsVmFsdWUgPSB0aGlzLmNlbGwudmFsdWU7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZENlbGxDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB2YWx1ZTogYW55O1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY2VsbCBmb3JtYXR0ZXIuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjZWxsRm9yYW1hdHRlciA9IHRoaXMuY2VsbC5mb3JtYXR0ZXI7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZENlbGxDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBmb3JtYXR0ZXI6ICh2YWx1ZTogYW55LCByb3dEYXRhPzogYW55KSA9PiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjZWxsIHRlbXBsYXRlIGNvbnRleHQgb2JqZWN0LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgbGV0IGNvbnRleHQgPSB0aGlzLmNlbGwuY29udGV4dCgpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldCBjb250ZXh0KCk6IGFueSB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHtcbiAgICAgICAgICAgICRpbXBsaWNpdDogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgIGFkZGl0aW9uYWxUZW1wbGF0ZUNvbnRleHQ6IHRoaXMuY29sdW1uLmFkZGl0aW9uYWxUZW1wbGF0ZUNvbnRleHQsXG4gICAgICAgIH07XG4gICAgICAgIC8qIFR1cm5zIHRoZSBgY2VsbGAgcHJvcGVydHkgZnJvbSB0aGUgdGVtcGxhdGUgY29udGV4dCBvYmplY3QgaW50byBsYXp5LWV2YWx1YXRlZCBvbmUuXG4gICAgICAgICAqIE90aGVyd2lzZSBvbiBlYWNoIGRldGVjdGlvbiBjeWNsZSB0aGUgY2VsbCB0ZW1wbGF0ZSBpcyByZWNyZWF0aW5nIE4gY2VsbCBpbnN0YW5jZXMgd2hlcmVcbiAgICAgICAgICogTiA9IG51bWJlciBvZiB2aXNpYmxlIGNlbGxzIGluIHRoZSBncmlkLCBsZWFkaW5nIHRvIG1hc3NpdmUgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24gaW4gbGFyZ2UgZ3JpZHMuXG4gICAgICAgICAqL1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3R4LCAnY2VsbCcsIHtcbiAgICAgICAgICAgIGdldDogKCkgPT4gdGhpcy5nZXRDZWxsVHlwZSh0cnVlKVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGN0eDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjZWxsIHRlbXBsYXRlLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgdGVtcGxhdGUgPSB0aGlzLmNlbGwudGVtcGxhdGU7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZENlbGxDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgICAgICBpZiAodGhpcy5lZGl0TW9kZSkge1xuICAgICAgICAgICAgY29uc3QgaW5saW5lRWRpdG9yVGVtcGxhdGUgPSB0aGlzLmNvbHVtbi5pbmxpbmVFZGl0b3JUZW1wbGF0ZTtcbiAgICAgICAgICAgIHJldHVybiBpbmxpbmVFZGl0b3JUZW1wbGF0ZSA/IGlubGluZUVkaXRvclRlbXBsYXRlIDogdGhpcy5pbmxpbmVFZGl0b3JUZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jZWxsVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNlbGxUZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ncmlkLnJvd0VkaXRhYmxlICYmIHRoaXMuaW50Um93LmFkZFJvd1VJKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hZGRSb3dDZWxsVGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdENlbGxUZW1wbGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBwaW5uZWQgaW5kaWNhdG9yIHRlbXBsYXRlLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgdGVtcGxhdGUgPSB0aGlzLmNlbGwucGlubmVkSW5kaWNhdG9yVGVtcGxhdGU7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZENlbGxDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHBpbm5lZEluZGljYXRvclRlbXBsYXRlKCkge1xuICAgICAgICBpZiAodGhpcy5waW5uZWRJbmRpY2F0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBpbm5lZEluZGljYXRvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UGlubmVkSW5kaWNhdG9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGBpZGAgb2YgdGhlIGdyaWQgaW4gd2hpY2ggdGhlIGNlbGwgaXMgc3RvcmVkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgZ3JpZElkID0gdGhpcy5jZWxsLmdyaWRJRDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkQ2VsbENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZ3JpZElEKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLmludFJvdy5ncmlkSUQ7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBgaW5kZXhgIG9mIHRoZSByb3cgd2hlcmUgdGhlIGNlbGwgaXMgc3RvcmVkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgcm93SW5kZXggPSB0aGlzLmNlbGwucm93SW5kZXg7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZENlbGxDb21wb25lbnRcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS1yb3dJbmRleCcpXG4gICAgcHVibGljIGdldCByb3dJbmRleCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnRSb3cuaW5kZXg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgYGluZGV4YCBvZiB0aGUgY2VsbCBjb2x1bW4uXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjb2x1bW5JbmRleCA9IHRoaXMuY2VsbC5jb2x1bW5JbmRleDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkQ2VsbENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY29sdW1uSW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLmluZGV4O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNvbHVtbiB2aXNpYmxlIGluZGV4LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgdmlzaWJsZUNvbHVtbkluZGV4ID0gdGhpcy5jZWxsLnZpc2libGVDb2x1bW5JbmRleDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkQ2VsbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLXZpc2libGVJbmRleCcpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHZpc2libGVDb2x1bW5JbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLmNvbHVtbkxheW91dENoaWxkID8gdGhpcy5jb2x1bW4udmlzaWJsZUluZGV4IDogdGhpcy5fdkluZGV4O1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgdmlzaWJsZUNvbHVtbkluZGV4KHZhbCkge1xuICAgICAgICB0aGlzLl92SW5kZXggPSB2YWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgSUQgb2YgdGhlIGNlbGwuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjZWxsSUQgPSB0aGlzLmNlbGwuY2VsbElEO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldCBjZWxsSUQoKSB7XG4gICAgICAgIGNvbnN0IHByaW1hcnlLZXkgPSB0aGlzLmdyaWQucHJpbWFyeUtleTtcbiAgICAgICAgY29uc3Qgcm93SUQgPSBwcmltYXJ5S2V5ID8gdGhpcy5yb3dEYXRhW3ByaW1hcnlLZXldIDogdGhpcy5yb3dEYXRhO1xuICAgICAgICByZXR1cm4geyByb3dJRCwgY29sdW1uSUQ6IHRoaXMuY29sdW1uSW5kZXgsIHJvd0luZGV4OiB0aGlzLnJvd0luZGV4IH07XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBwdWJsaWMgZ2V0IGF0dHJDZWxsSUQoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmludFJvdy5ncmlkSUR9XyR7dGhpcy5yb3dJbmRleH1fJHt0aGlzLnZpc2libGVDb2x1bW5JbmRleH1gO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnYXR0ci50aXRsZScpXG4gICAgcHVibGljIGdldCB0aXRsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZWRpdE1vZGUgfHwgdGhpcy5jZWxsVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmZvcm1hdHRlcikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0dGVyKHRoaXMudmFsdWUsIHRoaXMucm93RGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcmdzID0gdGhpcy5jb2x1bW4ucGlwZUFyZ3M7XG4gICAgICAgIGNvbnN0IGxvY2FsZSA9IHRoaXMuZ3JpZC5sb2NhbGU7XG5cbiAgICAgICAgc3dpdGNoICh0aGlzLmNvbHVtbi5kYXRhVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuUGVyY2VudDpcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0UGVyY2VudCh0aGlzLnZhbHVlLCBsb2NhbGUsIGFyZ3MuZGlnaXRzSW5mbyk7XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5DdXJyZW5jeTpcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0Q3VycmVuY3kodGhpcy52YWx1ZSwgdGhpcy5jdXJyZW5jeUNvZGUsIGFyZ3MuZGlzcGxheSwgYXJncy5kaWdpdHNJbmZvLCBsb2NhbGUpO1xuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZTpcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLkRhdGVUaW1lOlxuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuVGltZTpcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0RGF0ZSh0aGlzLnZhbHVlLCBhcmdzLmZvcm1hdCwgbG9jYWxlLCBhcmdzLnRpbWV6b25lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkX190ZC0tYm9vbC10cnVlJylcbiAgICBwdWJsaWMgZ2V0IGJvb2xlYW5DbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLmRhdGFUeXBlID09PSAnYm9vbGVhbicgJiYgdGhpcy52YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBuYXRpdmVFbGVtZW50IG9mIHRoZSBjZWxsLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgY2VsbE5hdGl2ZUVsZW1lbnQgPSB0aGlzLmNlbGwubmF0aXZlRWxlbWVudDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkQ2VsbENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgbmF0aXZlRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGNlbGxTZWxlY3Rpb25Nb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2VsbFNlbGVjdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGNlbGxTZWxlY3Rpb25Nb2RlKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLl9jZWxsU2VsZWN0aW9uID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IEdyaWRTZWxlY3Rpb25Nb2RlLm11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRQb2ludGVyTGlzdGVuZXJzKHZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVQb2ludGVyTGlzdGVuZXJzKHRoaXMuX2NlbGxTZWxlY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fY2VsbFNlbGVjdGlvbiA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgbGFzdFNlYXJjaEluZm8odmFsdWU6IElTZWFyY2hJbmZvKSB7XG4gICAgICAgIHRoaXMuX2xhc3RTZWFyY2hJbmZvID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0VGV4dCh0aGlzLl9sYXN0U2VhcmNoSW5mby5zZWFyY2hUZXh0LCB0aGlzLl9sYXN0U2VhcmNoSW5mby5jYXNlU2Vuc2l0aXZlLCB0aGlzLl9sYXN0U2VhcmNoSW5mby5leGFjdE1hdGNoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkX190ZC0tcGlubmVkLWxhc3QnKVxuICAgIHB1YmxpYyBsYXN0UGlubmVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkX190ZC0tcGlubmVkLWZpcnN0JylcbiAgICBwdWJsaWMgZmlyc3RQaW5uZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgY2VsbCBpcyBpbiBlZGl0IG1vZGUuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkX190ZC0tZWRpdGluZycpXG4gICAgcHVibGljIGVkaXRNb2RlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldCB0aGUgYHJvbGVgIHByb3BlcnR5IG9mIHRoZSBjZWxsLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYFwiZ3JpZGNlbGxcImAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY2VsbC5yb2xlID0gJ2dyaWQtY2VsbCc7XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjZWxsUm9sZSA9IHRoaXMuY2VsbC5yb2xlO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxuICAgIHB1YmxpYyByb2xlID0gJ2dyaWRjZWxsJztcblxuICAgIC8qKlxuICAgICAqIEdldHMgd2hldGhlciB0aGUgY2VsbCBpcyBlZGl0YWJsZS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGlzQ2VsbFJlYWRvbmx5ID0gdGhpcy5jZWxsLnJlYWRvbmx5O1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtcmVhZG9ubHknKVxuICAgIHB1YmxpYyBnZXQgcmVhZG9ubHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5lZGl0YWJsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGdyaWRSb3dTcGFuKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5ncmlkUm93U3BhbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGdyaWRDb2x1bW5TcGFuKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5ncmlkQ29sdW1uU3BhbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJvd0VuZCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4ucm93RW5kO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY29sRW5kKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5jb2xFbmQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dTdGFydCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4ucm93U3RhcnQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb2xTdGFydCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4uY29sU3RhcnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgd2lkdGggb2YgdGhlIGNlbGwuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjZWxsV2lkdGggPSB0aGlzLmNlbGwud2lkdGg7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZENlbGxDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB3aWR0aCA9ICcnO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZ3JpZF9fdGQtLWFjdGl2ZScpXG4gICAgcHVibGljIGFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtc2VsZWN0ZWQnKVxuICAgIHB1YmxpYyBnZXQgYXJpYVNlbGVjdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZCB8fCB0aGlzLmNvbHVtbi5zZWxlY3RlZCB8fCB0aGlzLmludFJvdy5zZWxlY3RlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHdoZXRoZXIgdGhlIGNlbGwgaXMgc2VsZWN0ZWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBpc1NlbGVjdGVkID0gdGhpcy5jZWxsLnNlbGVjdGVkO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZ3JpZF9fdGQtLXNlbGVjdGVkJylcbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdGVkKHRoaXMuc2VsZWN0aW9uTm9kZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0cy9kZXNlbGVjdHMgdGhlIGNlbGwuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY2VsbC5zZWxlY3RlZCA9IHRydWUuXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZENlbGxDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IHNlbGVjdGVkKHZhbDogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy5zZWxlY3Rpb25Ob2RlO1xuICAgICAgICBpZiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UuYWRkKG5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnJlbW92ZShub2RlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyaWQubm90aWZ5Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgd2hldGhlciB0aGUgY2VsbCBjb2x1bW4gaXMgc2VsZWN0ZWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBpc0NlbGxDb2x1bW5TZWxlY3RlZCA9IHRoaXMuY2VsbC5jb2x1bW5TZWxlY3RlZDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkQ2VsbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWdyaWRfX3RkLS1jb2x1bW4tc2VsZWN0ZWQnKVxuICAgIHB1YmxpYyBnZXQgY29sdW1uU2VsZWN0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvblNlcnZpY2UuaXNDb2x1bW5TZWxlY3RlZCh0aGlzLmNvbHVtbi5maWVsZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY3VycmVudCBlZGl0IHZhbHVlIHdoaWxlIGEgY2VsbCBpcyBpbiBlZGl0IG1vZGUuXG4gICAgICogT25seSBmb3IgY2VsbCBlZGl0aW5nIG1vZGUuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY2VsbC5lZGl0VmFsdWUgPSB2YWx1ZTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkQ2VsbENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgZWRpdFZhbHVlKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuY2VsbEluRWRpdE1vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5jZWxsLmVkaXRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY3VycmVudCBlZGl0IHZhbHVlIHdoaWxlIGEgY2VsbCBpcyBpbiBlZGl0IG1vZGUuXG4gICAgICogT25seSBmb3IgY2VsbCBlZGl0aW5nIG1vZGUuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBlZGl0VmFsdWUgPSB0aGlzLmNlbGwuZWRpdFZhbHVlO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldCBlZGl0VmFsdWUoKSB7XG4gICAgICAgIGlmICh0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuY2VsbEluRWRpdE1vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuY2VsbC5lZGl0VmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGNlbGwgaXMgZWRpdGFibGUuXG4gICAgICovXG4gICAgcHVibGljIGdldCBlZGl0YWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLmVkaXRhYmxlICYmICF0aGlzLmludFJvdy5kaXNhYmxlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkX190ZC0tcm93LXBpbm5lZC1maXJzdCcpXG4gICAgcHVibGljIGRpc3BsYXlQaW5uZWRDaGlwID0gZmFsc2U7XG5cblxuICAgIEBWaWV3Q2hpbGQoJ2RlZmF1bHRDZWxsJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIGRlZmF1bHRDZWxsVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAVmlld0NoaWxkKCdkZWZhdWx0UGlubmVkSW5kaWNhdG9yJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIGRlZmF1bHRQaW5uZWRJbmRpY2F0b3I6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAVmlld0NoaWxkKCdpbmxpbmVFZGl0b3InLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgaW5saW5lRWRpdG9yVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAVmlld0NoaWxkKCdhZGRSb3dDZWxsJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIGFkZFJvd0NlbGxUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBWaWV3Q2hpbGQoSWd4VGV4dEhpZ2hsaWdodERpcmVjdGl2ZSwgeyByZWFkOiBJZ3hUZXh0SGlnaGxpZ2h0RGlyZWN0aXZlIH0pXG4gICAgcHJvdGVjdGVkIHNldCBoaWdobGlnaHQodmFsdWU6IElneFRleHRIaWdobGlnaHREaXJlY3RpdmUpIHtcbiAgICAgICAgdGhpcy5faGlnaGxpZ2h0ID0gdmFsdWU7XG5cbiAgICAgICAgaWYgKHRoaXMuX2hpZ2hsaWdodCAmJiB0aGlzLmdyaWQubGFzdFNlYXJjaEluZm8uc2VhcmNoVGV4dCkge1xuICAgICAgICAgICAgdGhpcy5faGlnaGxpZ2h0LmhpZ2hsaWdodCh0aGlzLmdyaWQubGFzdFNlYXJjaEluZm8uc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQubGFzdFNlYXJjaEluZm8uY2FzZVNlbnNpdGl2ZSxcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQubGFzdFNlYXJjaEluZm8uZXhhY3RNYXRjaCk7XG4gICAgICAgICAgICB0aGlzLl9oaWdobGlnaHQuYWN0aXZhdGVJZk5lY2Vzc2FyeSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldCBoaWdobGlnaHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oaWdobGlnaHQ7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldCBzZWxlY3Rpb25Ob2RlKCk6IElTZWxlY3Rpb25Ob2RlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJvdzogdGhpcy5yb3dJbmRleCxcbiAgICAgICAgICAgIGNvbHVtbjogdGhpcy5jb2x1bW4uY29sdW1uTGF5b3V0Q2hpbGQgPyB0aGlzLmNvbHVtbi5wYXJlbnQudmlzaWJsZUluZGV4IDogdGhpcy52aXNpYmxlQ29sdW1uSW5kZXgsXG4gICAgICAgICAgICBsYXlvdXQ6IHRoaXMuY29sdW1uLmNvbHVtbkxheW91dENoaWxkID8ge1xuICAgICAgICAgICAgICAgIHJvd1N0YXJ0OiB0aGlzLmNvbHVtbi5yb3dTdGFydCxcbiAgICAgICAgICAgICAgICBjb2xTdGFydDogdGhpcy5jb2x1bW4uY29sU3RhcnQsXG4gICAgICAgICAgICAgICAgcm93RW5kOiB0aGlzLmNvbHVtbi5yb3dFbmQsXG4gICAgICAgICAgICAgICAgY29sRW5kOiB0aGlzLmNvbHVtbi5jb2xFbmQsXG4gICAgICAgICAgICAgICAgY29sdW1uVmlzaWJsZUluZGV4OiB0aGlzLnZpc2libGVDb2x1bW5JbmRleFxuICAgICAgICAgICAgfSA6IG51bGxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIGhpZ2hsaWdodCBjbGFzcyBvZiB0aGUgY2VsbC5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBcImlneC1oaWdobGlnaHRcImAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBoaWdobGlnaHRDbGFzcyA9IHRoaXMuY2VsbC5oaWdobGlnaHRDbGFzcztcbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5jZWxsLmhpZ2hsaWdodENsYXNzID0gJ2lneC1jZWxsLWhpZ2hsaWdodCc7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZENlbGxDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgaGlnaGxpZ2h0Q2xhc3MgPSAnaWd4LWhpZ2hsaWdodCc7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIGFjdGl2ZSBoaWdobGlnaHQgY2xhc3MgY2xhc3Mgb2YgdGhlIGNlbGwuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgXCJpZ3gtaGlnaGxpZ2h0X19hY3RpdmVcImAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBhY3RpdmVIaWdobGlnaHRDbGFzcyA9IHRoaXMuY2VsbC5hY3RpdmVIaWdobGlnaHRDbGFzcztcbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5jZWxsLmFjdGl2ZUhpZ2hsaWdodENsYXNzID0gJ2lneC1jZWxsLWhpZ2hsaWdodF9hY3RpdmUnO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGFjdGl2ZUhpZ2hsaWdodENsYXNzID0gJ2lneC1oaWdobGlnaHRfX2FjdGl2ZSc7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHN0ZXAoKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgZGlnaXRzSW5mbyA9IHRoaXMuY29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm87XG4gICAgICAgIGlmICghZGlnaXRzSW5mbykge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RlcCA9ICtkaWdpdHNJbmZvLnN1YnN0cihkaWdpdHNJbmZvLmluZGV4T2YoJy4nKSArIDEsIDEpO1xuICAgICAgICByZXR1cm4gMSAvIChNYXRoLnBvdygxMCwgc3RlcCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgY3VycmVuY3lDb2RlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5waXBlQXJncy5jdXJyZW5jeUNvZGUgP1xuICAgICAgICAgICAgdGhpcy5jb2x1bW4ucGlwZUFyZ3MuY3VycmVuY3lDb2RlIDogZ2V0TG9jYWxlQ3VycmVuY3lDb2RlKHRoaXMuZ3JpZC5sb2NhbGUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgY3VycmVuY3lDb2RlU3ltYm9sKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBnZXRDdXJyZW5jeVN5bWJvbCh0aGlzLmN1cnJlbmN5Q29kZSwgJ3dpZGUnLCB0aGlzLmdyaWQubG9jYWxlKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2xhc3RTZWFyY2hJbmZvOiBJU2VhcmNoSW5mbztcbiAgICBwcml2YXRlIF9oaWdobGlnaHQ6IElneFRleHRIaWdobGlnaHREaXJlY3RpdmU7XG4gICAgcHJpdmF0ZSBfY2VsbFNlbGVjdGlvbiA9IEdyaWRTZWxlY3Rpb25Nb2RlLm11bHRpcGxlO1xuICAgIHByaXZhdGUgX3ZJbmRleCA9IC0xO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBzZWxlY3Rpb25TZXJ2aWNlOiBJZ3hHcmlkU2VsZWN0aW9uU2VydmljZSxcbiAgICAgICAgQEluamVjdChJR1hfR1JJRF9CQVNFKSBwdWJsaWMgZ3JpZDogR3JpZFR5cGUsXG4gICAgICAgIHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBwcm90ZWN0ZWQgem9uZTogTmdab25lLFxuICAgICAgICBwcml2YXRlIHRvdWNoTWFuYWdlcjogSGFtbWVyR2VzdHVyZXNNYW5hZ2VyLFxuICAgICAgICBwcm90ZWN0ZWQgcGxhdGZvcm1VdGlsOiBQbGF0Zm9ybVV0aWxcbiAgICApIHsgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2RibGNsaWNrJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25Eb3VibGVDbGljayA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2RvdWJsZXRhcCcpIHtcbiAgICAgICAgICAgIC8vIHByZXZlbnQgZG91YmxlLXRhcCB0byB6b29tIG9uIGlPU1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5lZGl0YWJsZSAmJiAhdGhpcy5lZGl0TW9kZSAmJiAhdGhpcy5pbnRSb3cuZGVsZXRlZCAmJiAhdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvd0VkaXRpbmdCbG9ja2VkKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuZW50ZXJFZGl0TW9kZSh0aGlzLCBldmVudCBhcyBFdmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdyaWQuZG91YmxlQ2xpY2suZW1pdCh7XG4gICAgICAgICAgICBjZWxsOiB0aGlzLmdldENlbGxUeXBlKCksXG4gICAgICAgICAgICBldmVudFxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25DbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICB0aGlzLmdyaWQuY2VsbENsaWNrLmVtaXQoe1xuICAgICAgICAgICAgY2VsbDogdGhpcy5nZXRDZWxsVHlwZSgpLFxuICAgICAgICAgICAgZXZlbnRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25Db250ZXh0TWVudShldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICB0aGlzLmdyaWQuY29udGV4dE1lbnUuZW1pdCh7XG4gICAgICAgICAgICBjZWxsOiB0aGlzLmdldENlbGxUeXBlKCksXG4gICAgICAgICAgICBldmVudFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgdGhpcy5wb2ludGVyZG93bik7XG4gICAgICAgICAgICB0aGlzLmFkZFBvaW50ZXJMaXN0ZW5lcnModGhpcy5jZWxsU2VsZWN0aW9uTW9kZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5wbGF0Zm9ybVV0aWwuaXNJT1MpIHtcbiAgICAgICAgICAgIHRoaXMudG91Y2hNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5uYXRpdmVFbGVtZW50LCAnZG91YmxldGFwJywgdGhpcy5vbkRvdWJsZUNsaWNrLCB7XG4gICAgICAgICAgICAgICAgY3NzUHJvcHM6IHt9IC8qIGRvbid0IGRpc2FibGUgdXNlci1zZWxlY3QsIGV0YyAqL1xuICAgICAgICAgICAgfSBhcyBIYW1tZXJPcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCB0aGlzLnBvaW50ZXJkb3duKTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlUG9pbnRlckxpc3RlbmVycyh0aGlzLmNlbGxTZWxlY3Rpb25Nb2RlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudG91Y2hNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMudmFsdWUgJiYgIWNoYW5nZXMudmFsdWUuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhpZ2hsaWdodCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0Lmxhc3RTZWFyY2hJbmZvLnNlYXJjaGVkVGV4dCA9IHRoaXMuZ3JpZC5sYXN0U2VhcmNoSW5mby5zZWFyY2hUZXh0O1xuICAgICAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0Lmxhc3RTZWFyY2hJbmZvLmNhc2VTZW5zaXRpdmUgPSB0aGlzLmdyaWQubGFzdFNlYXJjaEluZm8uY2FzZVNlbnNpdGl2ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZ2hsaWdodC5sYXN0U2VhcmNoSW5mby5leGFjdE1hdGNoID0gdGhpcy5ncmlkLmxhc3RTZWFyY2hJbmZvLmV4YWN0TWF0Y2g7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTdGFydHMvZW5kcyBlZGl0IG1vZGUgZm9yIHRoZSBjZWxsLlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNlbGwuc2V0RWRpdE1vZGUodHJ1ZSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldEVkaXRNb2RlKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmludFJvdy5kZWxldGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZWRpdGFibGUgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuY2VsbEluRWRpdE1vZGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuZ3JpZEFQSS51cGRhdGVfY2VsbCh0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuY2VsbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmNydWRTZXJ2aWNlLmVuZENlbGxFZGl0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuZW50ZXJFZGl0TW9kZSh0aGlzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5lbmRDZWxsRWRpdCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JpZC5ub3RpZnlDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBuZXcgdmFsdWUgdG8gdGhlIGNlbGwuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY2VsbC51cGRhdGUoJ05ldyBWYWx1ZScpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgLy8gVE9ETzogUmVmYWN0b3JcbiAgICBwdWJsaWMgdXBkYXRlKHZhbDogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLmludFJvdy5kZWxldGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY2VsbCA9IHRoaXMuZ3JpZC5jcnVkU2VydmljZS5jZWxsO1xuICAgICAgICBpZiAoIWNlbGwpIHtcbiAgICAgICAgICAgIGNlbGwgPSB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuY3JlYXRlQ2VsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBjZWxsLmVkaXRWYWx1ZSA9IHZhbDtcbiAgICAgICAgdGhpcy5ncmlkLmdyaWRBUEkudXBkYXRlX2NlbGwoY2VsbCk7XG4gICAgICAgIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5lbmRDZWxsRWRpdCgpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgcG9pbnRlcmRvd24gPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jZWxsU2VsZWN0aW9uTW9kZSAhPT0gR3JpZFNlbGVjdGlvbk1vZGUubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZhdGUoZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5wbGF0Zm9ybVV0aWwuaXNMZWZ0Q2xpY2soZXZlbnQpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5ncmlkLm5hdmlnYXRpb24uc2V0QWN0aXZlTm9kZSh7IHJvd0luZGV4OiB0aGlzLnJvd0luZGV4LCBjb2xJbmRleDogdGhpcy52aXNpYmxlQ29sdW1uSW5kZXggfSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UuYWRkS2V5Ym9hcmRSYW5nZSgpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmluaXRLZXlib2FyZFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UucHJpbWFyeUJ1dHRvbiA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gRW5zdXJlIFJNQiBDbGljayBvbiBlZGl0ZWQgY2VsbCBkb2VzIG5vdCBlbmQgY2VsbCBlZGl0aW5nXG4gICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UudXBkYXRlQ2VsbCh0cnVlLCBldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGxhdGZvcm1VdGlsLmlzRmlyZWZveCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UucG9pbnRlckRvd24odGhpcy5zZWxlY3Rpb25Ob2RlLCBldmVudC5zaGlmdEtleSwgZXZlbnQuY3RybEtleSk7XG4gICAgICAgIHRoaXMuYWN0aXZhdGUoZXZlbnQpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgcG9pbnRlcmVudGVyID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgaXNIaWVyYXJjaGljYWxHcmlkID0gdGhpcy5ncmlkLm5hdGl2ZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaWd4LWhpZXJhcmNoaWNhbC1ncmlkJztcbiAgICAgICAgaWYgKGlzSGllcmFyY2hpY2FsR3JpZCAmJiAoIXRoaXMuZ3JpZC5uYXZpZ2F0aW9uPy5hY3RpdmVOb2RlPy5ncmlkSUQgfHwgdGhpcy5ncmlkLm5hdmlnYXRpb24uYWN0aXZlTm9kZS5ncmlkSUQgIT09IHRoaXMuZ3JpZElEKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRyYWdNb2RlID0gdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnBvaW50ZXJFbnRlcih0aGlzLnNlbGVjdGlvbk5vZGUsIGV2ZW50KTtcbiAgICAgICAgaWYgKGRyYWdNb2RlKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHBvaW50ZXJ1cCA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGlzSGllcmFyY2hpY2FsR3JpZCA9IHRoaXMuZ3JpZC5uYXRpdmVFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lneC1oaWVyYXJjaGljYWwtZ3JpZCc7XG4gICAgICAgIGlmICghdGhpcy5wbGF0Zm9ybVV0aWwuaXNMZWZ0Q2xpY2soZXZlbnQpIHx8IChpc0hpZXJhcmNoaWNhbEdyaWQgJiYgKCF0aGlzLmdyaWQubmF2aWdhdGlvbj8uYWN0aXZlTm9kZT8uZ3JpZElEIHx8XG4gICAgICAgICAgICB0aGlzLmdyaWQubmF2aWdhdGlvbi5hY3RpdmVOb2RlLmdyaWRJRCAhPT0gdGhpcy5ncmlkSUQpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvblNlcnZpY2UucG9pbnRlclVwKHRoaXMuc2VsZWN0aW9uTm9kZSwgdGhpcy5ncmlkLnJhbmdlU2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGFjdGl2YXRlKGV2ZW50OiBGb2N1c0V2ZW50IHwgS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy5zZWxlY3Rpb25Ob2RlO1xuICAgICAgICBjb25zdCBzaG91bGRFbWl0U2VsZWN0aW9uID0gIXRoaXMuc2VsZWN0aW9uU2VydmljZS5pc0FjdGl2ZU5vZGUobm9kZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uU2VydmljZS5wcmltYXJ5QnV0dG9uKSB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVDUlVEU3RhdHVzKGV2ZW50KTtcblxuICAgICAgICAgICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IHRoaXMuc2VsZWN0aW9uU2VydmljZS5hY3RpdmVFbGVtZW50O1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gYWN0aXZlRWxlbWVudCA/IHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9yb3dfYnlfaW5kZXgoYWN0aXZlRWxlbWVudC5yb3cpIDogbnVsbDtcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuY3J1ZFNlcnZpY2Uucm93RWRpdGluZ0Jsb2NrZWQgJiYgcm93ICYmIHRoaXMuaW50Um93LmtleSAhPT0gcm93LmtleSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmFjdGl2ZUVsZW1lbnQgPSBub2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmFjdGl2ZUVsZW1lbnQgPSBudWxsO1xuICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5jcnVkU2VydmljZS5jZWxsSW5FZGl0TW9kZSAmJiAhdGhpcy5lZGl0TW9kZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5jcnVkU2VydmljZS51cGRhdGVDZWxsKHRydWUsIGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ3JpZC5uYXZpZ2F0aW9uLnNldEFjdGl2ZU5vZGUoeyByb3c6IHRoaXMucm93SW5kZXgsIGNvbHVtbjogdGhpcy52aXNpYmxlQ29sdW1uSW5kZXggfSk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnByaW1hcnlCdXR0b24gPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5jZWxsU2VsZWN0aW9uTW9kZSA9PT0gR3JpZFNlbGVjdGlvbk1vZGUubXVsdGlwbGUgJiYgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5hZGQodGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmFjdGl2ZUVsZW1lbnQsIGZhbHNlKTsgLy8gcG9pbnRlciBldmVudHMgaGFuZGxlIHJhbmdlIGdlbmVyYXRpb25cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5rZXlib2FyZFN0YXRlT25Gb2N1cyhub2RlLCB0aGlzLmdyaWQucmFuZ2VTZWxlY3RlZCwgdGhpcy5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ncmlkLmlzQ2VsbFNlbGVjdGFibGUgJiYgc2hvdWxkRW1pdFNlbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGVkLmVtaXQoeyBjZWxsOiB0aGlzLmdldENlbGxUeXBlKCksIGV2ZW50IH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSWYgdGhlIHByb3ZpZGVkIHN0cmluZyBtYXRjaGVzIHRoZSB0ZXh0IGluIHRoZSBjZWxsLCB0aGUgdGV4dCBnZXRzIGhpZ2hsaWdodGVkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmNlbGwuaGlnaGxpZ2h0VGV4dCgnQ2VsbCBWYWx1ZScsIHRydWUpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGhpZ2hsaWdodFRleHQodGV4dDogc3RyaW5nLCBjYXNlU2Vuc2l0aXZlPzogYm9vbGVhbiwgZXhhY3RNYXRjaD86IGJvb2xlYW4pOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5oaWdobGlnaHQgJiYgdGhpcy5jb2x1bW4uc2VhcmNoYWJsZSA/IHRoaXMuaGlnaGxpZ2h0LmhpZ2hsaWdodCh0ZXh0LCBjYXNlU2Vuc2l0aXZlLCBleGFjdE1hdGNoKSA6IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXJzIHRoZSBoaWdobGlnaHQgb2YgdGhlIHRleHQgaW4gdGhlIGNlbGwuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY2VsbC5jbGVhckhpZ2hMaWdodCgpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGNsZWFySGlnaGxpZ2h0KCkge1xuICAgICAgICBpZiAodGhpcy5oaWdobGlnaHQgJiYgdGhpcy5jb2x1bW4uc2VhcmNoYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5oaWdobGlnaHQuY2xlYXJIaWdobGlnaHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgY2FsY3VsYXRlU2l6ZVRvRml0KHJhbmdlOiBhbnkpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5wbGF0Zm9ybVV0aWwuZ2V0Tm9kZVNpemVWaWFSYW5nZShyYW5nZSwgdGhpcy5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBzZWFyY2hNZXRhZGF0YSgpIHtcbiAgICAgICAgY29uc3QgbWV0YSA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG4gICAgICAgIG1ldGEuc2V0KCdwaW5uZWQnLCB0aGlzLmdyaWQuaXNSZWNvcmRQaW5uZWRCeVZpZXdJbmRleCh0aGlzLmludFJvdy5pbmRleCkpO1xuICAgICAgICByZXR1cm4gbWV0YTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfdXBkYXRlQ1JVRFN0YXR1cyhldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmVkaXRNb2RlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZWRpdGFibGVBcmdzO1xuICAgICAgICBjb25zdCBjcnVkID0gdGhpcy5ncmlkLmNydWRTZXJ2aWNlO1xuICAgICAgICBjb25zdCBlZGl0YWJsZUNlbGwgPSB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuY2VsbDtcbiAgICAgICAgY29uc3QgZWRpdE1vZGUgPSAhIShjcnVkLnJvdyB8fCBjcnVkLmNlbGwpO1xuXG4gICAgICAgIGlmICh0aGlzLmVkaXRhYmxlICYmIGVkaXRNb2RlICYmICF0aGlzLmludFJvdy5kZWxldGVkKSB7XG4gICAgICAgICAgICBpZiAoZWRpdGFibGVDZWxsKSB7XG4gICAgICAgICAgICAgICAgZWRpdGFibGVBcmdzID0gdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnVwZGF0ZUNlbGwoZmFsc2UsIGV2ZW50KTtcblxuICAgICAgICAgICAgICAgIC8qIFRoaXMgY2hlY2sgaXMgcmVsYXRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgaXNzdWUgIzY1MTc6XG4gICAgICAgICAgICAgICAgICogd2hlbiBlZGl0IGNlbGwgdGhhdCBiZWxvbmdzIHRvIGEgY29sdW1uIHdoaWNoIGlzIHNvcnRlZCBhbmQgcHJlc3MgdGFiLFxuICAgICAgICAgICAgICAgICAqIHRoZSBuZXh0IGNlbGwgaW4gZWRpdCBtb2RlIGlzIHdpdGggd3JvbmcgdmFsdWUgL2l0cyBjb250ZXh0IGlzIG5vdCB1cGRhdGVkLztcbiAgICAgICAgICAgICAgICAgKiBTbyB3ZSByZWFwcGx5IHNvcnRpbmcgYmVmb3JlIHRoZSBuZXh0IGNlbGwgZW50ZXJzIGVkaXQgbW9kZS5cbiAgICAgICAgICAgICAgICAgKiBBbHNvIHdlIG5lZWQgdG8ga2VlcCB0aGUgbm90aWZ5Q2hhbmdlcyBiZWxvdywgYmVjYXVzZSBvZiB0aGUgY3VycmVudFxuICAgICAgICAgICAgICAgICAqIGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUgd2hlbiB3ZSBoYXZlIGVkaXRpbmcgd2l0aCBlbmFibGVkIHRyYW5zYWN0aW9uc1xuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuc29ydGluZ0V4cHJlc3Npb25zLmxlbmd0aCAmJiB0aGlzLmdyaWQuc29ydGluZ0V4cHJlc3Npb25zLmluZGV4T2YoZWRpdGFibGVDZWxsLmNvbHVtbi5maWVsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGVkaXRhYmxlQXJncyAmJiBlZGl0YWJsZUFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNydWQuZXhpdENlbGxFZGl0KGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZ3JpZC50Ym9keS5uYXRpdmVFbGVtZW50LmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5ub3RpZnlDaGFuZ2VzKCk7XG4gICAgICAgICAgICBjcnVkLmVudGVyRWRpdE1vZGUodGhpcywgZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVkaXRhYmxlQ2VsbCAmJiBjcnVkLnNhbWVSb3codGhpcy5jZWxsSUQucm93SUQpKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UudXBkYXRlQ2VsbCh0cnVlLCBldmVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZWRpdE1vZGUgJiYgIWNydWQuc2FtZVJvdyh0aGlzLmNlbGxJRC5yb3dJRCkpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5lbmRFZGl0KHRydWUsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWRkUG9pbnRlckxpc3RlbmVycyhzZWxlY3Rpb24pIHtcbiAgICAgICAgaWYgKHNlbGVjdGlvbiAhPT0gR3JpZFNlbGVjdGlvbk1vZGUubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmVudGVyJywgdGhpcy5wb2ludGVyZW50ZXIpO1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgdGhpcy5wb2ludGVydXApO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlUG9pbnRlckxpc3RlbmVycyhzZWxlY3Rpb24pIHtcbiAgICAgICAgaWYgKHNlbGVjdGlvbiAhPT0gR3JpZFNlbGVjdGlvbk1vZGUubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcmVudGVyJywgdGhpcy5wb2ludGVyZW50ZXIpO1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgdGhpcy5wb2ludGVydXApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q2VsbFR5cGUodXNlUm93PzogYm9vbGVhbik6IENlbGxUeXBlIHtcbiAgICAgICAgY29uc3Qgcm93SUQgPSB1c2VSb3cgPyB0aGlzLmdyaWQuY3JlYXRlUm93KHRoaXMuaW50Um93LmluZGV4LCB0aGlzLmludFJvdy5kYXRhKSA6IHRoaXMuaW50Um93LmluZGV4O1xuICAgICAgICAvLyBUT0RPOiBGaXggdHlwZXNcbiAgICAgICAgcmV0dXJuIG5ldyBJZ3hHcmlkQ2VsbCh0aGlzLmdyaWQsIHJvd0lELCB0aGlzLmNvbHVtbi5maWVsZCk7XG4gICAgfVxufVxuIiwiPG5nLXRlbXBsYXRlICNkZWZhdWx0UGlubmVkSW5kaWNhdG9yPlxuICAgIDxpZ3gtY2hpcFxuICAgICAgICAqbmdJZj1cImRpc3BsYXlQaW5uZWRDaGlwXCJcbiAgICAgICAgY2xhc3M9XCJpZ3gtZ3JpZF9fdGQtLXBpbm5lZC1jaGlwXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cInRydWVcIlxuICAgICAgICBbZGlzcGxheURlbnNpdHldPVwiJ2NvbXBhY3QnXCJcbiAgICAgICAgPnt7IGdyaWQucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX3Bpbm5lZF9yb3dfaW5kaWNhdG9yIH19PC9pZ3gtY2hpcFxuICAgID5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2RlZmF1bHRDZWxsPlxuICAgIDxkaXYgKm5nSWY9XCJjb2x1bW4uZGF0YVR5cGUgIT09ICdib29sZWFuJyB8fCAoY29sdW1uLmRhdGFUeXBlID09PSAnYm9vbGVhbicgJiYgdGhpcy5mb3JtYXR0ZXIpXCJcbiAgICAgICAgaWd4VGV4dEhpZ2hsaWdodFxuICAgICAgICBjbGFzcz1cImlneC1ncmlkX190ZC10ZXh0XCJcbiAgICAgICAgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZTtcIlxuICAgICAgICBbY3NzQ2xhc3NdPVwiaGlnaGxpZ2h0Q2xhc3NcIlxuICAgICAgICBbYWN0aXZlQ3NzQ2xhc3NdPVwiYWN0aXZlSGlnaGxpZ2h0Q2xhc3NcIlxuICAgICAgICBbZ3JvdXBOYW1lXT1cImdyaWRJRFwiXG4gICAgICAgIFt2YWx1ZV09XCJcbiAgICAgICAgICAgIGZvcm1hdHRlclxuICAgICAgICAgICAgICAgID8gKHZhbHVlIHwgY29sdW1uRm9ybWF0dGVyOmZvcm1hdHRlcjpyb3dEYXRhKVxuICAgICAgICAgICAgICAgIDogY29sdW1uLmRhdGFUeXBlID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgICAgID8gKHZhbHVlIHwgbnVtYmVyOmNvbHVtbi5waXBlQXJncy5kaWdpdHNJbmZvOmdyaWQubG9jYWxlKVxuICAgICAgICAgICAgICAgIDogKGNvbHVtbi5kYXRhVHlwZSA9PT0gJ2RhdGUnIHx8IGNvbHVtbi5kYXRhVHlwZSA9PT0gJ3RpbWUnIHx8IGNvbHVtbi5kYXRhVHlwZSA9PT0gJ2RhdGVUaW1lJylcbiAgICAgICAgICAgICAgICA/ICh2YWx1ZSB8IGRhdGU6Y29sdW1uLnBpcGVBcmdzLmZvcm1hdDpjb2x1bW4ucGlwZUFyZ3MudGltZXpvbmU6Z3JpZC5sb2NhbGUpXG4gICAgICAgICAgICAgICAgOiBjb2x1bW4uZGF0YVR5cGUgPT09ICdjdXJyZW5jeSdcbiAgICAgICAgICAgICAgICA/ICh2YWx1ZSB8IGN1cnJlbmN5OmN1cnJlbmN5Q29kZTpjb2x1bW4ucGlwZUFyZ3MuZGlzcGxheTpjb2x1bW4ucGlwZUFyZ3MuZGlnaXRzSW5mbzpncmlkLmxvY2FsZSlcbiAgICAgICAgICAgICAgICA6IGNvbHVtbi5kYXRhVHlwZSA9PT0gJ3BlcmNlbnQnXG4gICAgICAgICAgICAgICAgPyAodmFsdWUgfCBwZXJjZW50OmNvbHVtbi5waXBlQXJncy5kaWdpdHNJbmZvOmdyaWQubG9jYWxlKVxuICAgICAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgXCJcbiAgICAgICAgW3Jvd109XCJyb3dEYXRhXCJcbiAgICAgICAgW2NvbHVtbl09XCJ0aGlzLmNvbHVtbi5maWVsZFwiXG4gICAgICAgIFtjb250YWluZXJDbGFzc109XCInaWd4LWdyaWRfX3RkLXRleHQnXCJcbiAgICAgICAgW21ldGFkYXRhXT1cInNlYXJjaE1ldGFkYXRhXCJcbiAgICA+e3tcbiAgICAgICAgICAgIGZvcm1hdHRlclxuICAgICAgICAgICAgICAgID8gKHZhbHVlIHwgY29sdW1uRm9ybWF0dGVyOmZvcm1hdHRlcjpyb3dEYXRhKVxuICAgICAgICAgICAgICAgIDogY29sdW1uLmRhdGFUeXBlID09PSBcIm51bWJlclwiXG4gICAgICAgICAgICAgICAgPyAodmFsdWUgfCBudW1iZXI6Y29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm86Z3JpZC5sb2NhbGUpXG4gICAgICAgICAgICAgICAgOiAoY29sdW1uLmRhdGFUeXBlID09PSAnZGF0ZScgfHwgY29sdW1uLmRhdGFUeXBlID09PSAndGltZScgfHwgY29sdW1uLmRhdGFUeXBlID09PSAnZGF0ZVRpbWUnKVxuICAgICAgICAgICAgICAgID8gKHZhbHVlIHwgZGF0ZTpjb2x1bW4ucGlwZUFyZ3MuZm9ybWF0OmNvbHVtbi5waXBlQXJncy50aW1lem9uZTpncmlkLmxvY2FsZSlcbiAgICAgICAgICAgICAgICA6IGNvbHVtbi5kYXRhVHlwZSA9PT0gJ2N1cnJlbmN5J1xuICAgICAgICAgICAgICAgID8gKHZhbHVlIHwgY3VycmVuY3k6Y3VycmVuY3lDb2RlOmNvbHVtbi5waXBlQXJncy5kaXNwbGF5OmNvbHVtbi5waXBlQXJncy5kaWdpdHNJbmZvOmdyaWQubG9jYWxlKVxuICAgICAgICAgICAgICAgIDogY29sdW1uLmRhdGFUeXBlID09PSAncGVyY2VudCdcbiAgICAgICAgICAgICAgICA/ICh2YWx1ZSB8IHBlcmNlbnQ6Y29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm86Z3JpZC5sb2NhbGUpXG4gICAgICAgICAgICAgICAgOiB2YWx1ZVxuICAgICAgICB9fTwvZGl2PlxuICAgIDxpZ3gtaWNvblxuICAgICAgICAqbmdJZj1cImNvbHVtbi5kYXRhVHlwZSA9PT0gJ2Jvb2xlYW4nICYmICF0aGlzLmZvcm1hdHRlclwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lneC1pY29uLS1zdWNjZXNzJzogdmFsdWUsICdpZ3gtaWNvbi0tZXJyb3InOiAhdmFsdWUgfVwiXG4gICAgICAgID57eyB2YWx1ZSA/IFwiY2hlY2tcIiA6IFwiY2xvc2VcIiB9fTwvaWd4LWljb25cbiAgICA+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNhZGRSb3dDZWxsIGxldC1jZWxsPVwiY2VsbFwiPlxuICAgIDxkaXYgKm5nSWY9XCJjb2x1bW4uZGF0YVR5cGUgIT09ICdib29sZWFuJyB8fCAoY29sdW1uLmRhdGFUeXBlID09PSAnYm9vbGVhbicgJiYgdGhpcy5mb3JtYXR0ZXIpXCJcbiAgICAgICAgaWd4VGV4dEhpZ2hsaWdodCBjbGFzcz1cImlneC1ncmlkX190ZC10ZXh0XCIgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZVwiXG4gICAgW2Nzc0NsYXNzXT1cImhpZ2hsaWdodENsYXNzXCJcbiAgICBbYWN0aXZlQ3NzQ2xhc3NdPVwiYWN0aXZlSGlnaGxpZ2h0Q2xhc3NcIlxuICAgIFtncm91cE5hbWVdPVwiZ3JpZElEXCJcbiAgICBbdmFsdWVdPVwiZm9ybWF0dGVyID8gKHZhbHVlIHwgY29sdW1uRm9ybWF0dGVyOmZvcm1hdHRlcjpyb3dEYXRhKSA6IGNvbHVtbi5kYXRhVHlwZSA9PT0gJ251bWJlcicgP1xuICAgICAgICAodmFsdWUgfCBudW1iZXI6Y29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm86Z3JpZC5sb2NhbGUpIDogKGNvbHVtbi5kYXRhVHlwZSA9PT0gJ2RhdGUnIHx8IGNvbHVtbi5kYXRhVHlwZSA9PT0gJ3RpbWUnIHx8IGNvbHVtbi5kYXRhVHlwZSA9PT0gJ2RhdGVUaW1lJykgP1xuICAgICAgICAodmFsdWUgfCBkYXRlOmNvbHVtbi5waXBlQXJncy5mb3JtYXQ6Y29sdW1uLnBpcGVBcmdzLnRpbWV6b25lOmdyaWQubG9jYWxlKSA6IGNvbHVtbi5kYXRhVHlwZSA9PT0gJ2N1cnJlbmN5JyA/XG4gICAgICAgICh2YWx1ZSB8IGN1cnJlbmN5OmN1cnJlbmN5Q29kZTpjb2x1bW4ucGlwZUFyZ3MuZGlzcGxheTpjb2x1bW4ucGlwZUFyZ3MuZGlnaXRzSW5mbzpncmlkLmxvY2FsZSkgOiBjb2x1bW4uZGF0YVR5cGUgPT09ICdwZXJjZW50JyA/XG4gICAgICAgICh2YWx1ZSB8IHBlcmNlbnQ6Y29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm86Z3JpZC5sb2NhbGUpIDogdmFsdWVcIlxuICAgIFtyb3ddPVwicm93RGF0YVwiXG4gICAgW2NvbHVtbl09XCJ0aGlzLmNvbHVtbi5maWVsZFwiXG4gICAgW2NvbnRhaW5lckNsYXNzXT1cIidpZ3gtZ3JpZF9fdGQtdGV4dCdcIlxuICAgIFttZXRhZGF0YV09XCJzZWFyY2hNZXRhZGF0YVwiPnt7XG4gICAgICAgICFpc0VtcHR5QWRkUm93Q2VsbCA/IHZhbHVlIDogKGNvbHVtbi5oZWFkZXIgfHwgY29sdW1uLmZpZWxkKVxuICAgIH19PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNpbmxpbmVFZGl0b3IgbGV0LWNlbGw9XCJjZWxsXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5kYXRhVHlwZSA9PT0gJ3N0cmluZydcIj5cbiAgICAgICAgPGlneC1pbnB1dC1ncm91cCBkaXNwbGF5RGVuc2l0eT1cImNvbXBhY3RcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGlneElucHV0XG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlZGl0VmFsdWVcIlxuICAgICAgICAgICAgICAgIFtpZ3hGb2N1c109XCJ0cnVlXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIDwvaWd4LWlucHV0LWdyb3VwPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4uZGF0YVR5cGUgPT09ICdudW1iZXInXCI+XG4gICAgICAgIDxpZ3gtaW5wdXQtZ3JvdXAgZGlzcGxheURlbnNpdHk9XCJjb21wYWN0XCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBpZ3hJbnB1dFxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZWRpdFZhbHVlXCJcbiAgICAgICAgICAgICAgICBbaWd4Rm9jdXNdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW3N0ZXBdPVwic3RlcFwiXG4gICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAvPlxuICAgICAgICA8L2lneC1pbnB1dC1ncm91cD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmRhdGFUeXBlID09PSAnYm9vbGVhbidcIj5cbiAgICAgICAgPGlneC1jaGVja2JveFxuICAgICAgICAgICAgW2NoZWNrZWRdPVwiZWRpdFZhbHVlXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwiZWRpdFZhbHVlID0gJGV2ZW50LmNoZWNrZWRcIlxuICAgICAgICAgICAgW2lneEZvY3VzXT1cInRydWVcIlxuICAgICAgICAgICAgW2Rpc2FibGVSaXBwbGVdPVwidHJ1ZVwiXG4gICAgICAgID48L2lneC1jaGVja2JveD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmRhdGFUeXBlID09PSAnZGF0ZSdcIj5cbiAgICAgICAgPGlneC1kYXRlLXBpY2tlclxuICAgICAgICAgICAgW3N0eWxlLndpZHRoLiVdPVwiMTAwXCJcbiAgICAgICAgICAgIFtvdXRsZXRdPVwiZ3JpZC5vdXRsZXRcIlxuICAgICAgICAgICAgbW9kZT1cImRyb3Bkb3duXCJcbiAgICAgICAgICAgIFtsb2NhbGVdPVwiZ3JpZC5sb2NhbGVcIlxuICAgICAgICAgICAgWyh2YWx1ZSldPVwiZWRpdFZhbHVlXCJcbiAgICAgICAgICAgIFtpZ3hGb2N1c109XCJ0cnVlXCJcbiAgICAgICAgPlxuICAgICAgICA8L2lneC1kYXRlLXBpY2tlcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmRhdGFUeXBlID09PSAndGltZSdcIj5cbiAgICAgICAgPGlneC10aW1lLXBpY2tlclxuICAgICAgICAgICAgW3N0eWxlLndpZHRoLiVdPVwiMTAwXCJcbiAgICAgICAgICAgIFtvdXRsZXRdPVwiZ3JpZC5vdXRsZXRcIlxuICAgICAgICAgICAgbW9kZT1cImRyb3Bkb3duXCJcbiAgICAgICAgICAgIFtsb2NhbGVdPVwiZ3JpZC5sb2NhbGVcIlxuICAgICAgICAgICAgW2lucHV0Rm9ybWF0XT1cImNvbHVtbi5kZWZhdWx0VGltZUZvcm1hdFwiXG4gICAgICAgICAgICBbKHZhbHVlKV09XCJlZGl0VmFsdWVcIlxuICAgICAgICAgICAgW2lneEZvY3VzXT1cInRydWVcIlxuICAgICAgICAgICAgPlxuICAgICAgICA8L2lneC10aW1lLXBpY2tlcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmRhdGFUeXBlID09PSAnZGF0ZVRpbWUnXCI+XG4gICAgICAgIDxpZ3gtaW5wdXQtZ3JvdXA+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZ3hJbnB1dCBbaWd4RGF0ZVRpbWVFZGl0b3JdPVwiY29sdW1uLmRlZmF1bHREYXRlVGltZUZvcm1hdFwiIFsobmdNb2RlbCldPVwiZWRpdFZhbHVlXCIgW2lneEZvY3VzXT1cInRydWVcIi8+XG4gICAgICAgIDwvaWd4LWlucHV0LWdyb3VwPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4uZGF0YVR5cGUgPT09ICdjdXJyZW5jeSdcIj5cbiAgICAgICAgPGlneC1pbnB1dC1ncm91cCBkaXNwbGF5RGVuc2l0eT1cImNvbXBhY3RcIj5cbiAgICAgICAgICAgIDxpZ3gtcHJlZml4ICpuZ0lmPVwiZ3JpZC5jdXJyZW5jeVBvc2l0aW9uTGVmdFwiPnt7IGN1cnJlbmN5Q29kZVN5bWJvbCB9fTwvaWd4LXByZWZpeD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGlneElucHV0XG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlZGl0VmFsdWVcIlxuICAgICAgICAgICAgICAgIFtpZ3hGb2N1c109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbc3RlcF09XCJzdGVwXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8aWd4LXN1ZmZpeCAqbmdJZj1cIiFncmlkLmN1cnJlbmN5UG9zaXRpb25MZWZ0XCIgPnt7IGN1cnJlbmN5Q29kZVN5bWJvbCB9fTwvaWd4LXN1ZmZpeD5cbiAgICAgICAgPC9pZ3gtaW5wdXQtZ3JvdXA+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5kYXRhVHlwZSA9PT0gJ3BlcmNlbnQnXCI+XG4gICAgICAgIDxpZ3gtaW5wdXQtZ3JvdXAgZGlzcGxheURlbnNpdHk9XCJjb21wYWN0XCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBpZ3hJbnB1dFxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZWRpdFZhbHVlXCJcbiAgICAgICAgICAgICAgICBbaWd4Rm9jdXNdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW3N0ZXBdPVwic3RlcFwiXG4gICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGlneC1zdWZmaXg+IHt7IGVkaXRWYWx1ZSB8IHBlcmNlbnQ6Y29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm86Z3JpZC5sb2NhbGUgfX0gPC9pZ3gtc3VmZml4PlxuICAgICAgICA8L2lneC1pbnB1dC1ncm91cD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGlubmVkSW5kaWNhdG9yVGVtcGxhdGU7IGNvbnRleHQ6IGNvbnRleHRcIj5cbjwvbmctY29udGFpbmVyPlxuPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlOyBjb250ZXh0OiBjb250ZXh0XCI+PC9uZy1jb250YWluZXI+XG4iXX0=
900
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvY2VsbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvY2VsbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFDTCxXQUFXLEVBQ1gsU0FBUyxFQU1ULE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDbEcsT0FBTyxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQWdCLE1BQU0sZUFBZSxDQUFDO0FBRXpFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQWtDLGFBQWEsRUFBVyxNQUFNLHlCQUF5QixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBR2xFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHakQ7Ozs7Ozs7Ozs7OztHQVlHO0FBT0gsTUFBTSxPQUFPLG9CQUFvQjtJQXVsQjdCLFlBQ2MsZ0JBQXlDLEVBQ3JCLElBQWMsRUFDckMsR0FBc0IsRUFDckIsT0FBZ0MsRUFDOUIsSUFB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QUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUk5QyxTQUFTO3NCQUR0QixTQUFTO3VCQUFDLHlCQUF5QixFQUFFLEVBQUUsSUFBSSxFQUFFLHlCQUF5QixFQUFFO2dCQW1HbEUsYUFBYTtzQkFEbkIsWUFBWTt1QkFBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBcUI3QixPQUFPO3NCQURiLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWExQixhQUFhO3NCQURuQixZQUFZO3VCQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBOZ1pvbmUsXG4gICAgT25Jbml0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkNoYW5nZXMsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBJbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmb3JtYXRQZXJjZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IElneFRleHRIaWdobGlnaHREaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3RleHQtaGlnaGxpZ2h0L3RleHQtaGlnaGxpZ2h0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBmb3JtYXRDdXJyZW5jeSwgZm9ybWF0RGF0ZSwgUGxhdGZvcm1VdGlsIH0gZnJvbSAnLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBJZ3hHcmlkU2VsZWN0aW9uU2VydmljZSB9IGZyb20gJy4vc2VsZWN0aW9uL3NlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEhhbW1lckdlc3R1cmVzTWFuYWdlciB9IGZyb20gJy4uL2NvcmUvdG91Y2gnO1xuaW1wb3J0IHsgR3JpZFNlbGVjdGlvbk1vZGUgfSBmcm9tICcuL2NvbW1vbi9lbnVtcyc7XG5pbXBvcnQgeyBDZWxsVHlwZSwgQ29sdW1uVHlwZSwgR3JpZFR5cGUsIElHWF9HUklEX0JBU0UsIFJvd1R5cGUgfSBmcm9tICcuL2NvbW1vbi9ncmlkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBnZXRDdXJyZW5jeVN5bWJvbCwgZ2V0TG9jYWxlQ3VycmVuY3lDb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEdyaWRDb2x1bW5EYXRhVHlwZSB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9kYXRhLXV0aWwnO1xuaW1wb3J0IHsgSWd4Um93RGlyZWN0aXZlIH0gZnJvbSAnLi9yb3cuZGlyZWN0aXZlJztcbmltcG9ydCB7IElTZWFyY2hJbmZvIH0gZnJvbSAnLi9jb21tb24vZXZlbnRzJztcbmltcG9ydCB7IElneEdyaWRDZWxsIH0gZnJvbSAnLi9ncmlkLXB1YmxpYy1jZWxsJztcbmltcG9ydCB7IElTZWxlY3Rpb25Ob2RlIH0gZnJvbSAnLi9jb21tb24vdHlwZXMnO1xuXG4vKipcbiAqIFByb3ZpZGluZyByZWZlcmVuY2UgdG8gYElneEdyaWRDZWxsQ29tcG9uZW50YDpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIEBWaWV3Q2hpbGQoJ2dyaWQnLCB7IHJlYWQ6IElneEdyaWRDb21wb25lbnQgfSlcbiAqICBwdWJsaWMgZ3JpZDogSWd4R3JpZENvbXBvbmVudDtcbiAqIGBgYFxuICogYGBgdHlwZXNjcmlwdFxuICogIGxldCBjb2x1bW4gPSB0aGlzLmdyaWQuY29sdW1uTGlzdC5maXJzdDtcbiAqIGBgYFxuICogYGBgdHlwZXNjcmlwdFxuICogIGxldCBjZWxsID0gY29sdW1uLmNlbGxzWzBdO1xuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHNlbGVjdG9yOiAnaWd4LWdyaWQtY2VsbCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NlbGwuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW0hhbW1lckdlc3R1cmVzTWFuYWdlcl1cbn0pXG5leHBvcnQgY2xhc3MgSWd4R3JpZENlbGxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBDZWxsVHlwZSB7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWdyaWRfX3RkLS1uZXcnKVxuICAgIHB1YmxpYyBnZXQgaXNFbXB0eUFkZFJvd0NlbGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmludFJvdy5hZGRSb3dVSSAmJiAodGhpcy52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMudmFsdWUgPT09IG51bGwpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGNvbHVtbiBvZiB0aGUgY2VsbC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIGxldCBjZWxsQ29sdW1uID0gdGhpcy5jZWxsLmNvbHVtbjtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkQ2VsbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNvbHVtbjogQ29sdW1uVHlwZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpbnRSb3c6IElneFJvd0RpcmVjdGl2ZTtcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHJvdyBvZiB0aGUgY2VsbC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGNlbGxSb3cgPSB0aGlzLmNlbGwucm93O1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHJvdygpOiBSb3dUeXBlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5jcmVhdGVSb3codGhpcy5pbnRSb3cuaW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGRhdGEgb2YgdGhlIHJvdyBvZiB0aGUgY2VsbC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHJvd0RhdGEgPSB0aGlzLmNlbGwucm93RGF0YTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkQ2VsbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJvd0RhdGE6IGFueTtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgdGVtcGxhdGUgb2YgdGhlIGNlbGwuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxuZy10ZW1wbGF0ZSAjY2VsbFRlbXBsYXRlIGlneENlbGwgbGV0LXZhbHVlPlxuICAgICAqICAgPGRpdiBzdHlsZT1cImZvbnQtc3R5bGU6IG9ibGlxdWU7IGNvbG9yOmJsdWV2aW9sZXQ7IGJhY2tncm91bmQ6cmVkXCI+XG4gICAgICogICAgICAgPHNwYW4+e3t2YWx1ZX19PC9zcGFuPlxuICAgICAqICAgPC9kaXY+XG4gICAgICogPC9uZy10ZW1wbGF0ZT5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZCgnY2VsbFRlbXBsYXRlJyx7cmVhZDogVGVtcGxhdGVSZWZ9KVxuICAgICAqIGNlbGxUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5jZWxsLmNlbGxUZW1wbGF0ZSA9IHRoaXMuY2VsbFRlbXBsYXRlO1xuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgdGVtcGxhdGUgPSAgdGhpcy5jZWxsLmNlbGxUZW1wbGF0ZTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkQ2VsbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNlbGxUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHBpbm5lZEluZGljYXRvcjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgY2VsbCB2YWx1ZS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5jZWxsLnZhbHVlID0gXCJDZWxsIFZhbHVlXCI7XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjZWxsVmFsdWUgPSB0aGlzLmNlbGwudmFsdWU7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZENlbGxDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB2YWx1ZTogYW55O1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY2VsbCBmb3JtYXR0ZXIuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjZWxsRm9yYW1hdHRlciA9IHRoaXMuY2VsbC5mb3JtYXR0ZXI7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZENlbGxDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBmb3JtYXR0ZXI6ICh2YWx1ZTogYW55LCByb3dEYXRhPzogYW55KSA9PiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjZWxsIHRlbXBsYXRlIGNvbnRleHQgb2JqZWN0LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgbGV0IGNvbnRleHQgPSB0aGlzLmNlbGwuY29udGV4dCgpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldCBjb250ZXh0KCk6IGFueSB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHtcbiAgICAgICAgICAgICRpbXBsaWNpdDogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgIGFkZGl0aW9uYWxUZW1wbGF0ZUNvbnRleHQ6IHRoaXMuY29sdW1uLmFkZGl0aW9uYWxUZW1wbGF0ZUNvbnRleHQsXG4gICAgICAgIH07XG4gICAgICAgIC8qIFR1cm5zIHRoZSBgY2VsbGAgcHJvcGVydHkgZnJvbSB0aGUgdGVtcGxhdGUgY29udGV4dCBvYmplY3QgaW50byBsYXp5LWV2YWx1YXRlZCBvbmUuXG4gICAgICAgICAqIE90aGVyd2lzZSBvbiBlYWNoIGRldGVjdGlvbiBjeWNsZSB0aGUgY2VsbCB0ZW1wbGF0ZSBpcyByZWNyZWF0aW5nIE4gY2VsbCBpbnN0YW5jZXMgd2hlcmVcbiAgICAgICAgICogTiA9IG51bWJlciBvZiB2aXNpYmxlIGNlbGxzIGluIHRoZSBncmlkLCBsZWFkaW5nIHRvIG1hc3NpdmUgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24gaW4gbGFyZ2UgZ3JpZHMuXG4gICAgICAgICAqL1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3R4LCAnY2VsbCcsIHtcbiAgICAgICAgICAgIGdldDogKCkgPT4gdGhpcy5nZXRDZWxsVHlwZSh0cnVlKVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGN0eDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjZWxsIHRlbXBsYXRlLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgdGVtcGxhdGUgPSB0aGlzLmNlbGwudGVtcGxhdGU7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZENlbGxDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgICAgICBpZiAodGhpcy5lZGl0TW9kZSkge1xuICAgICAgICAgICAgY29uc3QgaW5saW5lRWRpdG9yVGVtcGxhdGUgPSB0aGlzLmNvbHVtbi5pbmxpbmVFZGl0b3JUZW1wbGF0ZTtcbiAgICAgICAgICAgIHJldHVybiBpbmxpbmVFZGl0b3JUZW1wbGF0ZSA/IGlubGluZUVkaXRvclRlbXBsYXRlIDogdGhpcy5pbmxpbmVFZGl0b3JUZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jZWxsVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNlbGxUZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ncmlkLnJvd0VkaXRhYmxlICYmIHRoaXMuaW50Um93LmFkZFJvd1VJKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hZGRSb3dDZWxsVGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdENlbGxUZW1wbGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBwaW5uZWQgaW5kaWNhdG9yIHRlbXBsYXRlLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgdGVtcGxhdGUgPSB0aGlzLmNlbGwucGlubmVkSW5kaWNhdG9yVGVtcGxhdGU7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZENlbGxDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHBpbm5lZEluZGljYXRvclRlbXBsYXRlKCkge1xuICAgICAgICBpZiAodGhpcy5waW5uZWRJbmRpY2F0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBpbm5lZEluZGljYXRvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UGlubmVkSW5kaWNhdG9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGBpZGAgb2YgdGhlIGdyaWQgaW4gd2hpY2ggdGhlIGNlbGwgaXMgc3RvcmVkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgZ3JpZElkID0gdGhpcy5jZWxsLmdyaWRJRDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkQ2VsbENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZ3JpZElEKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLmludFJvdy5ncmlkSUQ7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBgaW5kZXhgIG9mIHRoZSByb3cgd2hlcmUgdGhlIGNlbGwgaXMgc3RvcmVkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgcm93SW5kZXggPSB0aGlzLmNlbGwucm93SW5kZXg7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZENlbGxDb21wb25lbnRcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS1yb3dJbmRleCcpXG4gICAgcHVibGljIGdldCByb3dJbmRleCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnRSb3cuaW5kZXg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgYGluZGV4YCBvZiB0aGUgY2VsbCBjb2x1bW4uXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjb2x1bW5JbmRleCA9IHRoaXMuY2VsbC5jb2x1bW5JbmRleDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkQ2VsbENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY29sdW1uSW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLmluZGV4O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNvbHVtbiB2aXNpYmxlIGluZGV4LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgdmlzaWJsZUNvbHVtbkluZGV4ID0gdGhpcy5jZWxsLnZpc2libGVDb2x1bW5JbmRleDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkQ2VsbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLXZpc2libGVJbmRleCcpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHZpc2libGVDb2x1bW5JbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLmNvbHVtbkxheW91dENoaWxkID8gdGhpcy5jb2x1bW4udmlzaWJsZUluZGV4IDogdGhpcy5fdkluZGV4O1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgdmlzaWJsZUNvbHVtbkluZGV4KHZhbCkge1xuICAgICAgICB0aGlzLl92SW5kZXggPSB2YWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgSUQgb2YgdGhlIGNlbGwuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjZWxsSUQgPSB0aGlzLmNlbGwuY2VsbElEO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldCBjZWxsSUQoKSB7XG4gICAgICAgIGNvbnN0IHByaW1hcnlLZXkgPSB0aGlzLmdyaWQucHJpbWFyeUtleTtcbiAgICAgICAgY29uc3Qgcm93SUQgPSBwcmltYXJ5S2V5ID8gdGhpcy5yb3dEYXRhW3ByaW1hcnlLZXldIDogdGhpcy5yb3dEYXRhO1xuICAgICAgICByZXR1cm4geyByb3dJRCwgY29sdW1uSUQ6IHRoaXMuY29sdW1uSW5kZXgsIHJvd0luZGV4OiB0aGlzLnJvd0luZGV4IH07XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBwdWJsaWMgZ2V0IGF0dHJDZWxsSUQoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmludFJvdy5ncmlkSUR9XyR7dGhpcy5yb3dJbmRleH1fJHt0aGlzLnZpc2libGVDb2x1bW5JbmRleH1gO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnYXR0ci50aXRsZScpXG4gICAgcHVibGljIGdldCB0aXRsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZWRpdE1vZGUgfHwgdGhpcy5jZWxsVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmZvcm1hdHRlcikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0dGVyKHRoaXMudmFsdWUsIHRoaXMucm93RGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcmdzID0gdGhpcy5jb2x1bW4ucGlwZUFyZ3M7XG4gICAgICAgIGNvbnN0IGxvY2FsZSA9IHRoaXMuZ3JpZC5sb2NhbGU7XG5cbiAgICAgICAgc3dpdGNoICh0aGlzLmNvbHVtbi5kYXRhVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuUGVyY2VudDpcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0UGVyY2VudCh0aGlzLnZhbHVlLCBsb2NhbGUsIGFyZ3MuZGlnaXRzSW5mbyk7XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5DdXJyZW5jeTpcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0Q3VycmVuY3kodGhpcy52YWx1ZSwgdGhpcy5jdXJyZW5jeUNvZGUsIGFyZ3MuZGlzcGxheSwgYXJncy5kaWdpdHNJbmZvLCBsb2NhbGUpO1xuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZTpcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLkRhdGVUaW1lOlxuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuVGltZTpcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0RGF0ZSh0aGlzLnZhbHVlLCBhcmdzLmZvcm1hdCwgbG9jYWxlLCBhcmdzLnRpbWV6b25lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkX190ZC0tYm9vbC10cnVlJylcbiAgICBwdWJsaWMgZ2V0IGJvb2xlYW5DbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLmRhdGFUeXBlID09PSAnYm9vbGVhbicgJiYgdGhpcy52YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBuYXRpdmVFbGVtZW50IG9mIHRoZSBjZWxsLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgY2VsbE5hdGl2ZUVsZW1lbnQgPSB0aGlzLmNlbGwubmF0aXZlRWxlbWVudDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkQ2VsbENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgbmF0aXZlRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGNlbGxTZWxlY3Rpb25Nb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2VsbFNlbGVjdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGNlbGxTZWxlY3Rpb25Nb2RlKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLl9jZWxsU2VsZWN0aW9uID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IEdyaWRTZWxlY3Rpb25Nb2RlLm11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRQb2ludGVyTGlzdGVuZXJzKHZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVQb2ludGVyTGlzdGVuZXJzKHRoaXMuX2NlbGxTZWxlY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fY2VsbFNlbGVjdGlvbiA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgbGFzdFNlYXJjaEluZm8odmFsdWU6IElTZWFyY2hJbmZvKSB7XG4gICAgICAgIHRoaXMuX2xhc3RTZWFyY2hJbmZvID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0VGV4dCh0aGlzLl9sYXN0U2VhcmNoSW5mby5zZWFyY2hUZXh0LCB0aGlzLl9sYXN0U2VhcmNoSW5mby5jYXNlU2Vuc2l0aXZlLCB0aGlzLl9sYXN0U2VhcmNoSW5mby5leGFjdE1hdGNoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkX190ZC0tcGlubmVkLWxhc3QnKVxuICAgIHB1YmxpYyBsYXN0UGlubmVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkX190ZC0tcGlubmVkLWZpcnN0JylcbiAgICBwdWJsaWMgZmlyc3RQaW5uZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgY2VsbCBpcyBpbiBlZGl0IG1vZGUuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkX190ZC0tZWRpdGluZycpXG4gICAgcHVibGljIGVkaXRNb2RlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldCB0aGUgYHJvbGVgIHByb3BlcnR5IG9mIHRoZSBjZWxsLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYFwiZ3JpZGNlbGxcImAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY2VsbC5yb2xlID0gJ2dyaWQtY2VsbCc7XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjZWxsUm9sZSA9IHRoaXMuY2VsbC5yb2xlO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxuICAgIHB1YmxpYyByb2xlID0gJ2dyaWRjZWxsJztcblxuICAgIC8qKlxuICAgICAqIEdldHMgd2hldGhlciB0aGUgY2VsbCBpcyBlZGl0YWJsZS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGlzQ2VsbFJlYWRvbmx5ID0gdGhpcy5jZWxsLnJlYWRvbmx5O1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtcmVhZG9ubHknKVxuICAgIHB1YmxpYyBnZXQgcmVhZG9ubHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5lZGl0YWJsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGdyaWRSb3dTcGFuKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5ncmlkUm93U3BhbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGdyaWRDb2x1bW5TcGFuKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5ncmlkQ29sdW1uU3BhbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJvd0VuZCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4ucm93RW5kO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY29sRW5kKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5jb2xFbmQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dTdGFydCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4ucm93U3RhcnQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb2xTdGFydCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4uY29sU3RhcnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgd2lkdGggb2YgdGhlIGNlbGwuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjZWxsV2lkdGggPSB0aGlzLmNlbGwud2lkdGg7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZENlbGxDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB3aWR0aCA9ICcnO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZ3JpZF9fdGQtLWFjdGl2ZScpXG4gICAgcHVibGljIGFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtc2VsZWN0ZWQnKVxuICAgIHB1YmxpYyBnZXQgYXJpYVNlbGVjdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZCB8fCB0aGlzLmNvbHVtbi5zZWxlY3RlZCB8fCB0aGlzLmludFJvdy5zZWxlY3RlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHdoZXRoZXIgdGhlIGNlbGwgaXMgc2VsZWN0ZWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBpc1NlbGVjdGVkID0gdGhpcy5jZWxsLnNlbGVjdGVkO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZ3JpZF9fdGQtLXNlbGVjdGVkJylcbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdGVkKHRoaXMuc2VsZWN0aW9uTm9kZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0cy9kZXNlbGVjdHMgdGhlIGNlbGwuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY2VsbC5zZWxlY3RlZCA9IHRydWUuXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZENlbGxDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IHNlbGVjdGVkKHZhbDogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy5zZWxlY3Rpb25Ob2RlO1xuICAgICAgICBpZiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UuYWRkKG5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnJlbW92ZShub2RlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyaWQubm90aWZ5Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgd2hldGhlciB0aGUgY2VsbCBjb2x1bW4gaXMgc2VsZWN0ZWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBpc0NlbGxDb2x1bW5TZWxlY3RlZCA9IHRoaXMuY2VsbC5jb2x1bW5TZWxlY3RlZDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkQ2VsbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWdyaWRfX3RkLS1jb2x1bW4tc2VsZWN0ZWQnKVxuICAgIHB1YmxpYyBnZXQgY29sdW1uU2VsZWN0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvblNlcnZpY2UuaXNDb2x1bW5TZWxlY3RlZCh0aGlzLmNvbHVtbi5maWVsZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY3VycmVudCBlZGl0IHZhbHVlIHdoaWxlIGEgY2VsbCBpcyBpbiBlZGl0IG1vZGUuXG4gICAgICogT25seSBmb3IgY2VsbCBlZGl0aW5nIG1vZGUuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY2VsbC5lZGl0VmFsdWUgPSB2YWx1ZTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkQ2VsbENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgZWRpdFZhbHVlKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuY2VsbEluRWRpdE1vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5jZWxsLmVkaXRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY3VycmVudCBlZGl0IHZhbHVlIHdoaWxlIGEgY2VsbCBpcyBpbiBlZGl0IG1vZGUuXG4gICAgICogT25seSBmb3IgY2VsbCBlZGl0aW5nIG1vZGUuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBlZGl0VmFsdWUgPSB0aGlzLmNlbGwuZWRpdFZhbHVlO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldCBlZGl0VmFsdWUoKSB7XG4gICAgICAgIGlmICh0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuY2VsbEluRWRpdE1vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuY2VsbC5lZGl0VmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGNlbGwgaXMgZWRpdGFibGUuXG4gICAgICovXG4gICAgcHVibGljIGdldCBlZGl0YWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLmVkaXRhYmxlICYmICF0aGlzLmludFJvdy5kaXNhYmxlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkX190ZC0tcm93LXBpbm5lZC1maXJzdCcpXG4gICAgcHVibGljIGRpc3BsYXlQaW5uZWRDaGlwID0gZmFsc2U7XG5cblxuICAgIEBWaWV3Q2hpbGQoJ2RlZmF1bHRDZWxsJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIGRlZmF1bHRDZWxsVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAVmlld0NoaWxkKCdkZWZhdWx0UGlubmVkSW5kaWNhdG9yJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIGRlZmF1bHRQaW5uZWRJbmRpY2F0b3I6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAVmlld0NoaWxkKCdpbmxpbmVFZGl0b3InLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgaW5saW5lRWRpdG9yVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAVmlld0NoaWxkKCdhZGRSb3dDZWxsJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIGFkZFJvd0NlbGxUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBWaWV3Q2hpbGQoSWd4VGV4dEhpZ2hsaWdodERpcmVjdGl2ZSwgeyByZWFkOiBJZ3hUZXh0SGlnaGxpZ2h0RGlyZWN0aXZlIH0pXG4gICAgcHJvdGVjdGVkIHNldCBoaWdobGlnaHQodmFsdWU6IElneFRleHRIaWdobGlnaHREaXJlY3RpdmUpIHtcbiAgICAgICAgdGhpcy5faGlnaGxpZ2h0ID0gdmFsdWU7XG5cbiAgICAgICAgaWYgKHRoaXMuX2hpZ2hsaWdodCAmJiB0aGlzLmdyaWQubGFzdFNlYXJjaEluZm8uc2VhcmNoVGV4dCkge1xuICAgICAgICAgICAgdGhpcy5faGlnaGxpZ2h0LmhpZ2hsaWdodCh0aGlzLmdyaWQubGFzdFNlYXJjaEluZm8uc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQubGFzdFNlYXJjaEluZm8uY2FzZVNlbnNpdGl2ZSxcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQubGFzdFNlYXJjaEluZm8uZXhhY3RNYXRjaCk7XG4gICAgICAgICAgICB0aGlzLl9oaWdobGlnaHQuYWN0aXZhdGVJZk5lY2Vzc2FyeSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldCBoaWdobGlnaHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oaWdobGlnaHQ7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldCBzZWxlY3Rpb25Ob2RlKCk6IElTZWxlY3Rpb25Ob2RlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJvdzogdGhpcy5yb3dJbmRleCxcbiAgICAgICAgICAgIGNvbHVtbjogdGhpcy5jb2x1bW4uY29sdW1uTGF5b3V0Q2hpbGQgPyB0aGlzLmNvbHVtbi5wYXJlbnQudmlzaWJsZUluZGV4IDogdGhpcy52aXNpYmxlQ29sdW1uSW5kZXgsXG4gICAgICAgICAgICBsYXlvdXQ6IHRoaXMuY29sdW1uLmNvbHVtbkxheW91dENoaWxkID8ge1xuICAgICAgICAgICAgICAgIHJvd1N0YXJ0OiB0aGlzLmNvbHVtbi5yb3dTdGFydCxcbiAgICAgICAgICAgICAgICBjb2xTdGFydDogdGhpcy5jb2x1bW4uY29sU3RhcnQsXG4gICAgICAgICAgICAgICAgcm93RW5kOiB0aGlzLmNvbHVtbi5yb3dFbmQsXG4gICAgICAgICAgICAgICAgY29sRW5kOiB0aGlzLmNvbHVtbi5jb2xFbmQsXG4gICAgICAgICAgICAgICAgY29sdW1uVmlzaWJsZUluZGV4OiB0aGlzLnZpc2libGVDb2x1bW5JbmRleFxuICAgICAgICAgICAgfSA6IG51bGxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIGhpZ2hsaWdodCBjbGFzcyBvZiB0aGUgY2VsbC5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBcImlneC1oaWdobGlnaHRcImAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBoaWdobGlnaHRDbGFzcyA9IHRoaXMuY2VsbC5oaWdobGlnaHRDbGFzcztcbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5jZWxsLmhpZ2hsaWdodENsYXNzID0gJ2lneC1jZWxsLWhpZ2hsaWdodCc7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZENlbGxDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgaGlnaGxpZ2h0Q2xhc3MgPSAnaWd4LWhpZ2hsaWdodCc7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIGFjdGl2ZSBoaWdobGlnaHQgY2xhc3MgY2xhc3Mgb2YgdGhlIGNlbGwuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgXCJpZ3gtaGlnaGxpZ2h0X19hY3RpdmVcImAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBhY3RpdmVIaWdobGlnaHRDbGFzcyA9IHRoaXMuY2VsbC5hY3RpdmVIaWdobGlnaHRDbGFzcztcbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5jZWxsLmFjdGl2ZUhpZ2hsaWdodENsYXNzID0gJ2lneC1jZWxsLWhpZ2hsaWdodF9hY3RpdmUnO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGFjdGl2ZUhpZ2hsaWdodENsYXNzID0gJ2lneC1oaWdobGlnaHRfX2FjdGl2ZSc7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHN0ZXAoKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgZGlnaXRzSW5mbyA9IHRoaXMuY29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm87XG4gICAgICAgIGlmICghZGlnaXRzSW5mbykge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RlcCA9ICtkaWdpdHNJbmZvLnN1YnN0cihkaWdpdHNJbmZvLmluZGV4T2YoJy4nKSArIDEsIDEpO1xuICAgICAgICByZXR1cm4gMSAvIChNYXRoLnBvdygxMCwgc3RlcCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgY3VycmVuY3lDb2RlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5waXBlQXJncy5jdXJyZW5jeUNvZGUgP1xuICAgICAgICAgICAgdGhpcy5jb2x1bW4ucGlwZUFyZ3MuY3VycmVuY3lDb2RlIDogZ2V0TG9jYWxlQ3VycmVuY3lDb2RlKHRoaXMuZ3JpZC5sb2NhbGUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgY3VycmVuY3lDb2RlU3ltYm9sKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBnZXRDdXJyZW5jeVN5bWJvbCh0aGlzLmN1cnJlbmN5Q29kZSwgJ3dpZGUnLCB0aGlzLmdyaWQubG9jYWxlKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2xhc3RTZWFyY2hJbmZvOiBJU2VhcmNoSW5mbztcbiAgICBwcml2YXRlIF9oaWdobGlnaHQ6IElneFRleHRIaWdobGlnaHREaXJlY3RpdmU7XG4gICAgcHJpdmF0ZSBfY2VsbFNlbGVjdGlvbiA9IEdyaWRTZWxlY3Rpb25Nb2RlLm11bHRpcGxlO1xuICAgIHByaXZhdGUgX3ZJbmRleCA9IC0xO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBzZWxlY3Rpb25TZXJ2aWNlOiBJZ3hHcmlkU2VsZWN0aW9uU2VydmljZSxcbiAgICAgICAgQEluamVjdChJR1hfR1JJRF9CQVNFKSBwdWJsaWMgZ3JpZDogR3JpZFR5cGUsXG4gICAgICAgIHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBwcm90ZWN0ZWQgem9uZTogTmdab25lLFxuICAgICAgICBwcml2YXRlIHRvdWNoTWFuYWdlcjogSGFtbWVyR2VzdHVyZXNNYW5hZ2VyLFxuICAgICAgICBwcm90ZWN0ZWQgcGxhdGZvcm1VdGlsOiBQbGF0Zm9ybVV0aWxcbiAgICApIHsgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2RibGNsaWNrJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25Eb3VibGVDbGljayA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2RvdWJsZXRhcCcpIHtcbiAgICAgICAgICAgIC8vIHByZXZlbnQgZG91YmxlLXRhcCB0byB6b29tIG9uIGlPU1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5lZGl0YWJsZSAmJiAhdGhpcy5lZGl0TW9kZSAmJiAhdGhpcy5pbnRSb3cuZGVsZXRlZCAmJiAhdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvd0VkaXRpbmdCbG9ja2VkKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuZW50ZXJFZGl0TW9kZSh0aGlzLCBldmVudCBhcyBFdmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdyaWQuZG91YmxlQ2xpY2suZW1pdCh7XG4gICAgICAgICAgICBjZWxsOiB0aGlzLmdldENlbGxUeXBlKCksXG4gICAgICAgICAgICBldmVudFxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25DbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICB0aGlzLmdyaWQuY2VsbENsaWNrLmVtaXQoe1xuICAgICAgICAgICAgY2VsbDogdGhpcy5nZXRDZWxsVHlwZSgpLFxuICAgICAgICAgICAgZXZlbnRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25Db250ZXh0TWVudShldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICB0aGlzLmdyaWQuY29udGV4dE1lbnUuZW1pdCh7XG4gICAgICAgICAgICBjZWxsOiB0aGlzLmdldENlbGxUeXBlKCksXG4gICAgICAgICAgICBldmVudFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgdGhpcy5wb2ludGVyZG93bik7XG4gICAgICAgICAgICB0aGlzLmFkZFBvaW50ZXJMaXN0ZW5lcnModGhpcy5jZWxsU2VsZWN0aW9uTW9kZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5wbGF0Zm9ybVV0aWwuaXNJT1MpIHtcbiAgICAgICAgICAgIHRoaXMudG91Y2hNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5uYXRpdmVFbGVtZW50LCAnZG91YmxldGFwJywgdGhpcy5vbkRvdWJsZUNsaWNrLCB7XG4gICAgICAgICAgICAgICAgY3NzUHJvcHM6IHt9IC8qIGRvbid0IGRpc2FibGUgdXNlci1zZWxlY3QsIGV0YyAqL1xuICAgICAgICAgICAgfSBhcyBIYW1tZXJPcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCB0aGlzLnBvaW50ZXJkb3duKTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlUG9pbnRlckxpc3RlbmVycyh0aGlzLmNlbGxTZWxlY3Rpb25Nb2RlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudG91Y2hNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMudmFsdWUgJiYgIWNoYW5nZXMudmFsdWUuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhpZ2hsaWdodCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0Lmxhc3RTZWFyY2hJbmZvLnNlYXJjaGVkVGV4dCA9IHRoaXMuZ3JpZC5sYXN0U2VhcmNoSW5mby5zZWFyY2hUZXh0O1xuICAgICAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0Lmxhc3RTZWFyY2hJbmZvLmNhc2VTZW5zaXRpdmUgPSB0aGlzLmdyaWQubGFzdFNlYXJjaEluZm8uY2FzZVNlbnNpdGl2ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZ2hsaWdodC5sYXN0U2VhcmNoSW5mby5leGFjdE1hdGNoID0gdGhpcy5ncmlkLmxhc3RTZWFyY2hJbmZvLmV4YWN0TWF0Y2g7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTdGFydHMvZW5kcyBlZGl0IG1vZGUgZm9yIHRoZSBjZWxsLlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNlbGwuc2V0RWRpdE1vZGUodHJ1ZSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldEVkaXRNb2RlKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmludFJvdy5kZWxldGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZWRpdGFibGUgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuY2VsbEluRWRpdE1vZGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuZ3JpZEFQSS51cGRhdGVfY2VsbCh0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuY2VsbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmNydWRTZXJ2aWNlLmVuZENlbGxFZGl0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuZW50ZXJFZGl0TW9kZSh0aGlzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5lbmRDZWxsRWRpdCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JpZC5ub3RpZnlDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBuZXcgdmFsdWUgdG8gdGhlIGNlbGwuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY2VsbC51cGRhdGUoJ05ldyBWYWx1ZScpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgLy8gVE9ETzogUmVmYWN0b3JcbiAgICBwdWJsaWMgdXBkYXRlKHZhbDogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLmludFJvdy5kZWxldGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY2VsbCA9IHRoaXMuZ3JpZC5jcnVkU2VydmljZS5jZWxsO1xuICAgICAgICBpZiAoIWNlbGwpIHtcbiAgICAgICAgICAgIGNlbGwgPSB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuY3JlYXRlQ2VsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBjZWxsLmVkaXRWYWx1ZSA9IHZhbDtcbiAgICAgICAgdGhpcy5ncmlkLmdyaWRBUEkudXBkYXRlX2NlbGwoY2VsbCk7XG4gICAgICAgIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5lbmRDZWxsRWRpdCgpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgcG9pbnRlcmRvd24gPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jZWxsU2VsZWN0aW9uTW9kZSAhPT0gR3JpZFNlbGVjdGlvbk1vZGUubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZhdGUoZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5wbGF0Zm9ybVV0aWwuaXNMZWZ0Q2xpY2soZXZlbnQpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5ncmlkLm5hdmlnYXRpb24uc2V0QWN0aXZlTm9kZSh7IHJvd0luZGV4OiB0aGlzLnJvd0luZGV4LCBjb2xJbmRleDogdGhpcy52aXNpYmxlQ29sdW1uSW5kZXggfSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UuYWRkS2V5Ym9hcmRSYW5nZSgpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmluaXRLZXlib2FyZFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UucHJpbWFyeUJ1dHRvbiA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gRW5zdXJlIFJNQiBDbGljayBvbiBlZGl0ZWQgY2VsbCBkb2VzIG5vdCBlbmQgY2VsbCBlZGl0aW5nXG4gICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UudXBkYXRlQ2VsbCh0cnVlLCBldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGxhdGZvcm1VdGlsLmlzRmlyZWZveCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UucG9pbnRlckRvd24odGhpcy5zZWxlY3Rpb25Ob2RlLCBldmVudC5zaGlmdEtleSwgZXZlbnQuY3RybEtleSk7XG4gICAgICAgIHRoaXMuYWN0aXZhdGUoZXZlbnQpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgcG9pbnRlcmVudGVyID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgaXNIaWVyYXJjaGljYWxHcmlkID0gdGhpcy5ncmlkLm5hdGl2ZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaWd4LWhpZXJhcmNoaWNhbC1ncmlkJztcbiAgICAgICAgaWYgKGlzSGllcmFyY2hpY2FsR3JpZCAmJiAoIXRoaXMuZ3JpZC5uYXZpZ2F0aW9uPy5hY3RpdmVOb2RlPy5ncmlkSUQgfHwgdGhpcy5ncmlkLm5hdmlnYXRpb24uYWN0aXZlTm9kZS5ncmlkSUQgIT09IHRoaXMuZ3JpZElEKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRyYWdNb2RlID0gdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnBvaW50ZXJFbnRlcih0aGlzLnNlbGVjdGlvbk5vZGUsIGV2ZW50KTtcbiAgICAgICAgaWYgKGRyYWdNb2RlKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHBvaW50ZXJ1cCA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGlzSGllcmFyY2hpY2FsR3JpZCA9IHRoaXMuZ3JpZC5uYXRpdmVFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lneC1oaWVyYXJjaGljYWwtZ3JpZCc7XG4gICAgICAgIGlmICghdGhpcy5wbGF0Zm9ybVV0aWwuaXNMZWZ0Q2xpY2soZXZlbnQpIHx8IChpc0hpZXJhcmNoaWNhbEdyaWQgJiYgKCF0aGlzLmdyaWQubmF2aWdhdGlvbj8uYWN0aXZlTm9kZT8uZ3JpZElEIHx8XG4gICAgICAgICAgICB0aGlzLmdyaWQubmF2aWdhdGlvbi5hY3RpdmVOb2RlLmdyaWRJRCAhPT0gdGhpcy5ncmlkSUQpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvblNlcnZpY2UucG9pbnRlclVwKHRoaXMuc2VsZWN0aW9uTm9kZSwgdGhpcy5ncmlkLnJhbmdlU2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGFjdGl2YXRlKGV2ZW50OiBGb2N1c0V2ZW50IHwgS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy5zZWxlY3Rpb25Ob2RlO1xuICAgICAgICBjb25zdCBzaG91bGRFbWl0U2VsZWN0aW9uID0gIXRoaXMuc2VsZWN0aW9uU2VydmljZS5pc0FjdGl2ZU5vZGUobm9kZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uU2VydmljZS5wcmltYXJ5QnV0dG9uKSB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVDUlVEU3RhdHVzKGV2ZW50KTtcblxuICAgICAgICAgICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IHRoaXMuc2VsZWN0aW9uU2VydmljZS5hY3RpdmVFbGVtZW50O1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gYWN0aXZlRWxlbWVudCA/IHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9yb3dfYnlfaW5kZXgoYWN0aXZlRWxlbWVudC5yb3cpIDogbnVsbDtcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuY3J1ZFNlcnZpY2Uucm93RWRpdGluZ0Jsb2NrZWQgJiYgcm93ICYmIHRoaXMuaW50Um93LmtleSAhPT0gcm93LmtleSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmFjdGl2ZUVsZW1lbnQgPSBub2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmFjdGl2ZUVsZW1lbnQgPSBudWxsO1xuICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5jcnVkU2VydmljZS5jZWxsSW5FZGl0TW9kZSAmJiAhdGhpcy5lZGl0TW9kZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5jcnVkU2VydmljZS51cGRhdGVDZWxsKHRydWUsIGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ3JpZC5uYXZpZ2F0aW9uLnNldEFjdGl2ZU5vZGUoeyByb3c6IHRoaXMucm93SW5kZXgsIGNvbHVtbjogdGhpcy52aXNpYmxlQ29sdW1uSW5kZXggfSk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnByaW1hcnlCdXR0b24gPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5jZWxsU2VsZWN0aW9uTW9kZSA9PT0gR3JpZFNlbGVjdGlvbk1vZGUubXVsdGlwbGUgJiYgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5hZGQodGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmFjdGl2ZUVsZW1lbnQsIGZhbHNlKTsgLy8gcG9pbnRlciBldmVudHMgaGFuZGxlIHJhbmdlIGdlbmVyYXRpb25cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5rZXlib2FyZFN0YXRlT25Gb2N1cyhub2RlLCB0aGlzLmdyaWQucmFuZ2VTZWxlY3RlZCwgdGhpcy5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ncmlkLmlzQ2VsbFNlbGVjdGFibGUgJiYgc2hvdWxkRW1pdFNlbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGVkLmVtaXQoeyBjZWxsOiB0aGlzLmdldENlbGxUeXBlKCksIGV2ZW50IH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSWYgdGhlIHByb3ZpZGVkIHN0cmluZyBtYXRjaGVzIHRoZSB0ZXh0IGluIHRoZSBjZWxsLCB0aGUgdGV4dCBnZXRzIGhpZ2hsaWdodGVkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmNlbGwuaGlnaGxpZ2h0VGV4dCgnQ2VsbCBWYWx1ZScsIHRydWUpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGhpZ2hsaWdodFRleHQodGV4dDogc3RyaW5nLCBjYXNlU2Vuc2l0aXZlPzogYm9vbGVhbiwgZXhhY3RNYXRjaD86IGJvb2xlYW4pOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5oaWdobGlnaHQgJiYgdGhpcy5jb2x1bW4uc2VhcmNoYWJsZSA/IHRoaXMuaGlnaGxpZ2h0LmhpZ2hsaWdodCh0ZXh0LCBjYXNlU2Vuc2l0aXZlLCBleGFjdE1hdGNoKSA6IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXJzIHRoZSBoaWdobGlnaHQgb2YgdGhlIHRleHQgaW4gdGhlIGNlbGwuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY2VsbC5jbGVhckhpZ2hMaWdodCgpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGNsZWFySGlnaGxpZ2h0KCkge1xuICAgICAgICBpZiAodGhpcy5oaWdobGlnaHQgJiYgdGhpcy5jb2x1bW4uc2VhcmNoYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5oaWdobGlnaHQuY2xlYXJIaWdobGlnaHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgY2FsY3VsYXRlU2l6ZVRvRml0KHJhbmdlOiBhbnkpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5wbGF0Zm9ybVV0aWwuZ2V0Tm9kZVNpemVWaWFSYW5nZShyYW5nZSwgdGhpcy5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBzZWFyY2hNZXRhZGF0YSgpIHtcbiAgICAgICAgY29uc3QgbWV0YSA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG4gICAgICAgIG1ldGEuc2V0KCdwaW5uZWQnLCB0aGlzLmdyaWQuaXNSZWNvcmRQaW5uZWRCeVZpZXdJbmRleCh0aGlzLmludFJvdy5pbmRleCkpO1xuICAgICAgICByZXR1cm4gbWV0YTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfdXBkYXRlQ1JVRFN0YXR1cyhldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmVkaXRNb2RlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZWRpdGFibGVBcmdzO1xuICAgICAgICBjb25zdCBjcnVkID0gdGhpcy5ncmlkLmNydWRTZXJ2aWNlO1xuICAgICAgICBjb25zdCBlZGl0YWJsZUNlbGwgPSB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuY2VsbDtcbiAgICAgICAgY29uc3QgZWRpdE1vZGUgPSAhIShjcnVkLnJvdyB8fCBjcnVkLmNlbGwpO1xuXG4gICAgICAgIGlmICh0aGlzLmVkaXRhYmxlICYmIGVkaXRNb2RlICYmICF0aGlzLmludFJvdy5kZWxldGVkKSB7XG4gICAgICAgICAgICBpZiAoZWRpdGFibGVDZWxsKSB7XG4gICAgICAgICAgICAgICAgZWRpdGFibGVBcmdzID0gdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnVwZGF0ZUNlbGwoZmFsc2UsIGV2ZW50KTtcblxuICAgICAgICAgICAgICAgIC8qIFRoaXMgY2hlY2sgaXMgcmVsYXRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgaXNzdWUgIzY1MTc6XG4gICAgICAgICAgICAgICAgICogd2hlbiBlZGl0IGNlbGwgdGhhdCBiZWxvbmdzIHRvIGEgY29sdW1uIHdoaWNoIGlzIHNvcnRlZCBhbmQgcHJlc3MgdGFiLFxuICAgICAgICAgICAgICAgICAqIHRoZSBuZXh0IGNlbGwgaW4gZWRpdCBtb2RlIGlzIHdpdGggd3JvbmcgdmFsdWUgL2l0cyBjb250ZXh0IGlzIG5vdCB1cGRhdGVkLztcbiAgICAgICAgICAgICAgICAgKiBTbyB3ZSByZWFwcGx5IHNvcnRpbmcgYmVmb3JlIHRoZSBuZXh0IGNlbGwgZW50ZXJzIGVkaXQgbW9kZS5cbiAgICAgICAgICAgICAgICAgKiBBbHNvIHdlIG5lZWQgdG8ga2VlcCB0aGUgbm90aWZ5Q2hhbmdlcyBiZWxvdywgYmVjYXVzZSBvZiB0aGUgY3VycmVudFxuICAgICAgICAgICAgICAgICAqIGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUgd2hlbiB3ZSBoYXZlIGVkaXRpbmcgd2l0aCBlbmFibGVkIHRyYW5zYWN0aW9uc1xuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuc29ydGluZ0V4cHJlc3Npb25zLmxlbmd0aCAmJiB0aGlzLmdyaWQuc29ydGluZ0V4cHJlc3Npb25zLmluZGV4T2YoZWRpdGFibGVDZWxsLmNvbHVtbi5maWVsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGVkaXRhYmxlQXJncyAmJiBlZGl0YWJsZUFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNydWQuZXhpdENlbGxFZGl0KGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZ3JpZC50Ym9keS5uYXRpdmVFbGVtZW50LmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5ub3RpZnlDaGFuZ2VzKCk7XG4gICAgICAgICAgICBjcnVkLmVudGVyRWRpdE1vZGUodGhpcywgZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVkaXRhYmxlQ2VsbCAmJiBjcnVkLnNhbWVSb3codGhpcy5jZWxsSUQucm93SUQpKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UudXBkYXRlQ2VsbCh0cnVlLCBldmVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZWRpdE1vZGUgJiYgIWNydWQuc2FtZVJvdyh0aGlzLmNlbGxJRC5yb3dJRCkpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5lbmRFZGl0KHRydWUsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWRkUG9pbnRlckxpc3RlbmVycyhzZWxlY3Rpb24pIHtcbiAgICAgICAgaWYgKHNlbGVjdGlvbiAhPT0gR3JpZFNlbGVjdGlvbk1vZGUubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmVudGVyJywgdGhpcy5wb2ludGVyZW50ZXIpO1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgdGhpcy5wb2ludGVydXApO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlUG9pbnRlckxpc3RlbmVycyhzZWxlY3Rpb24pIHtcbiAgICAgICAgaWYgKHNlbGVjdGlvbiAhPT0gR3JpZFNlbGVjdGlvbk1vZGUubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcmVudGVyJywgdGhpcy5wb2ludGVyZW50ZXIpO1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgdGhpcy5wb2ludGVydXApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q2VsbFR5cGUodXNlUm93PzogYm9vbGVhbik6IENlbGxUeXBlIHtcbiAgICAgICAgY29uc3Qgcm93SUQgPSB1c2VSb3cgPyB0aGlzLmdyaWQuY3JlYXRlUm93KHRoaXMuaW50Um93LmluZGV4LCB0aGlzLmludFJvdy5kYXRhKSA6IHRoaXMuaW50Um93LmluZGV4O1xuICAgICAgICByZXR1cm4gbmV3IElneEdyaWRDZWxsKHRoaXMuZ3JpZCwgcm93SUQsIHRoaXMuY29sdW1uLmZpZWxkKTtcbiAgICB9XG59XG4iLCI8bmctdGVtcGxhdGUgI2RlZmF1bHRQaW5uZWRJbmRpY2F0b3I+XG4gICAgPGlneC1jaGlwXG4gICAgICAgICpuZ0lmPVwiZGlzcGxheVBpbm5lZENoaXBcIlxuICAgICAgICBjbGFzcz1cImlneC1ncmlkX190ZC0tcGlubmVkLWNoaXBcIlxuICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgIFtkaXNwbGF5RGVuc2l0eV09XCInY29tcGFjdCdcIlxuICAgICAgICA+e3sgZ3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfcGlubmVkX3Jvd19pbmRpY2F0b3IgfX08L2lneC1jaGlwXG4gICAgPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdENlbGw+XG4gICAgPGRpdiAqbmdJZj1cImNvbHVtbi5kYXRhVHlwZSAhPT0gJ2Jvb2xlYW4nIHx8IChjb2x1bW4uZGF0YVR5cGUgPT09ICdib29sZWFuJyAmJiB0aGlzLmZvcm1hdHRlcilcIlxuICAgICAgICBpZ3hUZXh0SGlnaGxpZ2h0XG4gICAgICAgIGNsYXNzPVwiaWd4LWdyaWRfX3RkLXRleHRcIlxuICAgICAgICBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lO1wiXG4gICAgICAgIFtjc3NDbGFzc109XCJoaWdobGlnaHRDbGFzc1wiXG4gICAgICAgIFthY3RpdmVDc3NDbGFzc109XCJhY3RpdmVIaWdobGlnaHRDbGFzc1wiXG4gICAgICAgIFtncm91cE5hbWVdPVwiZ3JpZElEXCJcbiAgICAgICAgW3ZhbHVlXT1cIlxuICAgICAgICAgICAgZm9ybWF0dGVyXG4gICAgICAgICAgICAgICAgPyAodmFsdWUgfCBjb2x1bW5Gb3JtYXR0ZXI6Zm9ybWF0dGVyOnJvd0RhdGEpXG4gICAgICAgICAgICAgICAgOiBjb2x1bW4uZGF0YVR5cGUgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgPyAodmFsdWUgfCBudW1iZXI6Y29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm86Z3JpZC5sb2NhbGUpXG4gICAgICAgICAgICAgICAgOiAoY29sdW1uLmRhdGFUeXBlID09PSAnZGF0ZScgfHwgY29sdW1uLmRhdGFUeXBlID09PSAndGltZScgfHwgY29sdW1uLmRhdGFUeXBlID09PSAnZGF0ZVRpbWUnKVxuICAgICAgICAgICAgICAgID8gKHZhbHVlIHwgZGF0ZTpjb2x1bW4ucGlwZUFyZ3MuZm9ybWF0OmNvbHVtbi5waXBlQXJncy50aW1lem9uZTpncmlkLmxvY2FsZSlcbiAgICAgICAgICAgICAgICA6IGNvbHVtbi5kYXRhVHlwZSA9PT0gJ2N1cnJlbmN5J1xuICAgICAgICAgICAgICAgID8gKHZhbHVlIHwgY3VycmVuY3k6Y3VycmVuY3lDb2RlOmNvbHVtbi5waXBlQXJncy5kaXNwbGF5OmNvbHVtbi5waXBlQXJncy5kaWdpdHNJbmZvOmdyaWQubG9jYWxlKVxuICAgICAgICAgICAgICAgIDogY29sdW1uLmRhdGFUeXBlID09PSAncGVyY2VudCdcbiAgICAgICAgICAgICAgICA/ICh2YWx1ZSB8IHBlcmNlbnQ6Y29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm86Z3JpZC5sb2NhbGUpXG4gICAgICAgICAgICAgICAgOiB2YWx1ZVxuICAgICAgICBcIlxuICAgICAgICBbcm93XT1cInJvd0RhdGFcIlxuICAgICAgICBbY29sdW1uXT1cInRoaXMuY29sdW1uLmZpZWxkXCJcbiAgICAgICAgW2NvbnRhaW5lckNsYXNzXT1cIidpZ3gtZ3JpZF9fdGQtdGV4dCdcIlxuICAgICAgICBbbWV0YWRhdGFdPVwic2VhcmNoTWV0YWRhdGFcIlxuICAgID57e1xuICAgICAgICAgICAgZm9ybWF0dGVyXG4gICAgICAgICAgICAgICAgPyAodmFsdWUgfCBjb2x1bW5Gb3JtYXR0ZXI6Zm9ybWF0dGVyOnJvd0RhdGEpXG4gICAgICAgICAgICAgICAgOiBjb2x1bW4uZGF0YVR5cGUgPT09IFwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICA/ICh2YWx1ZSB8IG51bWJlcjpjb2x1bW4ucGlwZUFyZ3MuZGlnaXRzSW5mbzpncmlkLmxvY2FsZSlcbiAgICAgICAgICAgICAgICA6IChjb2x1bW4uZGF0YVR5cGUgPT09ICdkYXRlJyB8fCBjb2x1bW4uZGF0YVR5cGUgPT09ICd0aW1lJyB8fCBjb2x1bW4uZGF0YVR5cGUgPT09ICdkYXRlVGltZScpXG4gICAgICAgICAgICAgICAgPyAodmFsdWUgfCBkYXRlOmNvbHVtbi5waXBlQXJncy5mb3JtYXQ6Y29sdW1uLnBpcGVBcmdzLnRpbWV6b25lOmdyaWQubG9jYWxlKVxuICAgICAgICAgICAgICAgIDogY29sdW1uLmRhdGFUeXBlID09PSAnY3VycmVuY3knXG4gICAgICAgICAgICAgICAgPyAodmFsdWUgfCBjdXJyZW5jeTpjdXJyZW5jeUNvZGU6Y29sdW1uLnBpcGVBcmdzLmRpc3BsYXk6Y29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm86Z3JpZC5sb2NhbGUpXG4gICAgICAgICAgICAgICAgOiBjb2x1bW4uZGF0YVR5cGUgPT09ICdwZXJjZW50J1xuICAgICAgICAgICAgICAgID8gKHZhbHVlIHwgcGVyY2VudDpjb2x1bW4ucGlwZUFyZ3MuZGlnaXRzSW5mbzpncmlkLmxvY2FsZSlcbiAgICAgICAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIH19PC9kaXY+XG4gICAgPGlneC1pY29uXG4gICAgICAgICpuZ0lmPVwiY29sdW1uLmRhdGFUeXBlID09PSAnYm9vbGVhbicgJiYgIXRoaXMuZm9ybWF0dGVyXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyAnaWd4LWljb24tLXN1Y2Nlc3MnOiB2YWx1ZSwgJ2lneC1pY29uLS1lcnJvcic6ICF2YWx1ZSB9XCJcbiAgICAgICAgPnt7IHZhbHVlID8gXCJjaGVja1wiIDogXCJjbG9zZVwiIH19PC9pZ3gtaWNvblxuICAgID5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2FkZFJvd0NlbGwgbGV0LWNlbGw9XCJjZWxsXCI+XG4gICAgPGRpdiAqbmdJZj1cImNvbHVtbi5kYXRhVHlwZSAhPT0gJ2Jvb2xlYW4nIHx8IChjb2x1bW4uZGF0YVR5cGUgPT09ICdib29sZWFuJyAmJiB0aGlzLmZvcm1hdHRlcilcIlxuICAgICAgICBpZ3hUZXh0SGlnaGxpZ2h0IGNsYXNzPVwiaWd4LWdyaWRfX3RkLXRleHRcIiBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lXCJcbiAgICBbY3NzQ2xhc3NdPVwiaGlnaGxpZ2h0Q2xhc3NcIlxuICAgIFthY3RpdmVDc3NDbGFzc109XCJhY3RpdmVIaWdobGlnaHRDbGFzc1wiXG4gICAgW2dyb3VwTmFtZV09XCJncmlkSURcIlxuICAgIFt2YWx1ZV09XCJmb3JtYXR0ZXIgPyAodmFsdWUgfCBjb2x1bW5Gb3JtYXR0ZXI6Zm9ybWF0dGVyOnJvd0RhdGEpIDogY29sdW1uLmRhdGFUeXBlID09PSAnbnVtYmVyJyA/XG4gICAgICAgICh2YWx1ZSB8IG51bWJlcjpjb2x1bW4ucGlwZUFyZ3MuZGlnaXRzSW5mbzpncmlkLmxvY2FsZSkgOiAoY29sdW1uLmRhdGFUeXBlID09PSAnZGF0ZScgfHwgY29sdW1uLmRhdGFUeXBlID09PSAndGltZScgfHwgY29sdW1uLmRhdGFUeXBlID09PSAnZGF0ZVRpbWUnKSA/XG4gICAgICAgICh2YWx1ZSB8IGRhdGU6Y29sdW1uLnBpcGVBcmdzLmZvcm1hdDpjb2x1bW4ucGlwZUFyZ3MudGltZXpvbmU6Z3JpZC5sb2NhbGUpIDogY29sdW1uLmRhdGFUeXBlID09PSAnY3VycmVuY3knID9cbiAgICAgICAgKHZhbHVlIHwgY3VycmVuY3k6Y3VycmVuY3lDb2RlOmNvbHVtbi5waXBlQXJncy5kaXNwbGF5OmNvbHVtbi5waXBlQXJncy5kaWdpdHNJbmZvOmdyaWQubG9jYWxlKSA6IGNvbHVtbi5kYXRhVHlwZSA9PT0gJ3BlcmNlbnQnID9cbiAgICAgICAgKHZhbHVlIHwgcGVyY2VudDpjb2x1bW4ucGlwZUFyZ3MuZGlnaXRzSW5mbzpncmlkLmxvY2FsZSkgOiB2YWx1ZVwiXG4gICAgW3Jvd109XCJyb3dEYXRhXCJcbiAgICBbY29sdW1uXT1cInRoaXMuY29sdW1uLmZpZWxkXCJcbiAgICBbY29udGFpbmVyQ2xhc3NdPVwiJ2lneC1ncmlkX190ZC10ZXh0J1wiXG4gICAgW21ldGFkYXRhXT1cInNlYXJjaE1ldGFkYXRhXCI+e3tcbiAgICAgICAgIWlzRW1wdHlBZGRSb3dDZWxsID8gdmFsdWUgOiAoY29sdW1uLmhlYWRlciB8fCBjb2x1bW4uZmllbGQpXG4gICAgfX08L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2lubGluZUVkaXRvciBsZXQtY2VsbD1cImNlbGxcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmRhdGFUeXBlID09PSAnc3RyaW5nJ1wiPlxuICAgICAgICA8aWd4LWlucHV0LWdyb3VwIGRpc3BsYXlEZW5zaXR5PVwiY29tcGFjdFwiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgaWd4SW5wdXRcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVkaXRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgW2lneEZvY3VzXT1cInRydWVcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgPC9pZ3gtaW5wdXQtZ3JvdXA+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5kYXRhVHlwZSA9PT0gJ251bWJlcidcIj5cbiAgICAgICAgPGlneC1pbnB1dC1ncm91cCBkaXNwbGF5RGVuc2l0eT1cImNvbXBhY3RcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGlneElucHV0XG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlZGl0VmFsdWVcIlxuICAgICAgICAgICAgICAgIFtpZ3hGb2N1c109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbc3RlcF09XCJzdGVwXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIDwvaWd4LWlucHV0LWdyb3VwPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4uZGF0YVR5cGUgPT09ICdib29sZWFuJ1wiPlxuICAgICAgICA8aWd4LWNoZWNrYm94XG4gICAgICAgICAgICBbY2hlY2tlZF09XCJlZGl0VmFsdWVcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJlZGl0VmFsdWUgPSAkZXZlbnQuY2hlY2tlZFwiXG4gICAgICAgICAgICBbaWd4Rm9jdXNdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbZGlzYWJsZVJpcHBsZV09XCJ0cnVlXCJcbiAgICAgICAgPjwvaWd4LWNoZWNrYm94PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4uZGF0YVR5cGUgPT09ICdkYXRlJ1wiPlxuICAgICAgICA8aWd4LWRhdGUtcGlja2VyXG4gICAgICAgICAgICBbc3R5bGUud2lkdGguJV09XCIxMDBcIlxuICAgICAgICAgICAgW291dGxldF09XCJncmlkLm91dGxldFwiXG4gICAgICAgICAgICBtb2RlPVwiZHJvcGRvd25cIlxuICAgICAgICAgICAgW2xvY2FsZV09XCJncmlkLmxvY2FsZVwiXG4gICAgICAgICAgICBbKHZhbHVlKV09XCJlZGl0VmFsdWVcIlxuICAgICAgICAgICAgW2lneEZvY3VzXT1cInRydWVcIlxuICAgICAgICA+XG4gICAgICAgIDwvaWd4LWRhdGUtcGlja2VyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4uZGF0YVR5cGUgPT09ICd0aW1lJ1wiPlxuICAgICAgICA8aWd4LXRpbWUtcGlja2VyXG4gICAgICAgICAgICBbc3R5bGUud2lkdGguJV09XCIxMDBcIlxuICAgICAgICAgICAgW291dGxldF09XCJncmlkLm91dGxldFwiXG4gICAgICAgICAgICBtb2RlPVwiZHJvcGRvd25cIlxuICAgICAgICAgICAgW2xvY2FsZV09XCJncmlkLmxvY2FsZVwiXG4gICAgICAgICAgICBbaW5wdXRGb3JtYXRdPVwiY29sdW1uLmRlZmF1bHRUaW1lRm9ybWF0XCJcbiAgICAgICAgICAgIFsodmFsdWUpXT1cImVkaXRWYWx1ZVwiXG4gICAgICAgICAgICBbaWd4Rm9jdXNdPVwidHJ1ZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgIDwvaWd4LXRpbWUtcGlja2VyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4uZGF0YVR5cGUgPT09ICdkYXRlVGltZSdcIj5cbiAgICAgICAgPGlneC1pbnB1dC1ncm91cD5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlneElucHV0IFtpZ3hEYXRlVGltZUVkaXRvcl09XCJjb2x1bW4uZGVmYXVsdERhdGVUaW1lRm9ybWF0XCIgWyhuZ01vZGVsKV09XCJlZGl0VmFsdWVcIiBbaWd4Rm9jdXNdPVwidHJ1ZVwiLz5cbiAgICAgICAgPC9pZ3gtaW5wdXQtZ3JvdXA+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5kYXRhVHlwZSA9PT0gJ2N1cnJlbmN5J1wiPlxuICAgICAgICA8aWd4LWlucHV0LWdyb3VwIGRpc3BsYXlEZW5zaXR5PVwiY29tcGFjdFwiPlxuICAgICAgICAgICAgPGlneC1wcmVmaXggKm5nSWY9XCJncmlkLmN1cnJlbmN5UG9zaXRpb25MZWZ0XCI+e3sgY3VycmVuY3lDb2RlU3ltYm9sIH19PC9pZ3gtcHJlZml4PlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgaWd4SW5wdXRcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVkaXRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgW2lneEZvY3VzXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtzdGVwXT1cInN0ZXBcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxpZ3gtc3VmZml4ICpuZ0lmPVwiIWdyaWQuY3VycmVuY3lQb3NpdGlvbkxlZnRcIiA+e3sgY3VycmVuY3lDb2RlU3ltYm9sIH19PC9pZ3gtc3VmZml4PlxuICAgICAgICA8L2lneC1pbnB1dC1ncm91cD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmRhdGFUeXBlID09PSAncGVyY2VudCdcIj5cbiAgICAgICAgPGlneC1pbnB1dC1ncm91cCBkaXNwbGF5RGVuc2l0eT1cImNvbXBhY3RcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGlneElucHV0XG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlZGl0VmFsdWVcIlxuICAgICAgICAgICAgICAgIFtpZ3hGb2N1c109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbc3RlcF09XCJzdGVwXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8aWd4LXN1ZmZpeD4ge3sgZWRpdFZhbHVlIHwgcGVyY2VudDpjb2x1bW4ucGlwZUFyZ3MuZGlnaXRzSW5mbzpncmlkLmxvY2FsZSB9fSA8L2lneC1zdWZmaXg+XG4gICAgICAgIDwvaWd4LWlucHV0LWdyb3VwPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwaW5uZWRJbmRpY2F0b3JUZW1wbGF0ZTsgY29udGV4dDogY29udGV4dFwiPlxuPC9uZy1jb250YWluZXI+XG48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGU7IGNvbnRleHQ6IGNvbnRleHRcIj48L25nLWNvbnRhaW5lcj5cbiJdfQ==
@@ -1,4 +1,4 @@
1
1
  import { InjectionToken } from '@angular/core';
2
2
  export const IGX_GRID_BASE = new InjectionToken('IgxGridBaseToken');
3
3
  export const IGX_GRID_SERVICE_BASE = new InjectionToken('IgxGridServiceBaseToken');
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvY29tbW9uL2dyaWQuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVdBLE9BQU8sRUFBK0MsY0FBYyxFQUE0QyxNQUFNLGVBQWUsQ0FBQztBQTRCdEksTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLElBQUksY0FBYyxDQUFXLGtCQUFrQixDQUFDLENBQUM7QUFDOUUsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxjQUFjLENBQWtCLHlCQUF5QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGaWx0ZXJNb2RlLCBHcmlkUGFnaW5nTW9kZSwgR3JpZFNlbGVjdGlvbk1vZGUsIEdyaWRTdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlLCBHcmlkU3VtbWFyeVBvc2l0aW9uIH0gZnJvbSAnLi9lbnVtcyc7XG5pbXBvcnQge1xuICAgIElTZWFyY2hJbmZvLCBJR3JpZENlbGxFdmVudEFyZ3MsIElSb3dTZWxlY3Rpb25FdmVudEFyZ3MsIElDb2x1bW5TZWxlY3Rpb25FdmVudEFyZ3MsIElHcmlkRWRpdEV2ZW50QXJncyxcbiAgICBJUGluQ29sdW1uQ2FuY2VsbGFibGVFdmVudEFyZ3MsIElDb2x1bW5WaXNpYmlsaXR5Q2hhbmdlZEV2ZW50QXJncywgSUNvbHVtblZpc2liaWxpdHlDaGFuZ2luZ0V2ZW50QXJncyxcbiAgICBJUm93RHJhZ0VuZEV2ZW50QXJncywgSUNvbHVtbk1vdmluZ1N0YXJ0RXZlbnRBcmdzLCBJQ29sdW1uTW92aW5nRW5kRXZlbnRBcmdzLFxuICAgIElHcmlkRWRpdERvbmVFdmVudEFyZ3MsIElSb3dEYXRhRXZlbnRBcmdzLCBJR3JpZEtleWRvd25FdmVudEFyZ3MsIElSb3dEcmFnU3RhcnRFdmVudEFyZ3MsXG4gICAgSUNvbHVtbk1vdmluZ0V2ZW50QXJncywgSVBpbkNvbHVtbkV2ZW50QXJncyxcbiAgICBJQWN0aXZlTm9kZUNoYW5nZUV2ZW50QXJncyxcbiAgICBJQ2VsbFBvc2l0aW9uLCBJRmlsdGVyaW5nRXZlbnRBcmdzLCBJQ29sdW1uUmVzaXplRXZlbnRBcmdzLCBJUm93VG9nZ2xlRXZlbnRBcmdzLCBJR3JpZFRvb2xiYXJFeHBvcnRFdmVudEFyZ3Ncbn0gZnJvbSAnLi4vY29tbW9uL2V2ZW50cyc7XG5pbXBvcnQgeyBEaXNwbGF5RGVuc2l0eSwgSURlbnNpdHlDaGFuZ2VkRXZlbnRBcmdzIH0gZnJvbSAnLi4vLi4vY29yZS9kaXNwbGF5RGVuc2l0eSc7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbmplY3Rpb25Ub2tlbiwgUXVlcnlMaXN0LCBUZW1wbGF0ZVJlZiwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLCBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1leHByZXNzaW9ucy10cmVlJztcbmltcG9ydCB7IElHcmlkUmVzb3VyY2VTdHJpbmdzIH0gZnJvbSAnLi4vLi4vY29yZS9pMThuL2dyaWQtcmVzb3VyY2VzJztcbmltcG9ydCB7IElHcm91cGluZ0V4cHJlc3Npb24gfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZ3JvdXBpbmctZXhwcmVzc2lvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUdyb3VwQnlSZWNvcmQgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZ3JvdXBieS1yZWNvcmQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElHcm91cEJ5RXhwYW5kU3RhdGUgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZ3JvdXBieS1leHBhbmQtc3RhdGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IElneFBhZ2luYXRvckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BhZ2luYXRvci9wYWdpbmF0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IElneENlbGwsIElneEVkaXRSb3cgfSBmcm9tICcuL2NydWQuc2VydmljZSc7XG5pbXBvcnQgeyBHcmlkU2VsZWN0aW9uUmFuZ2UgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IEZpbHRlcmluZ0xvZ2ljIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1leHByZXNzaW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJRmlsdGVyaW5nU3RyYXRlZ3kgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLXN0cmF0ZWd5JztcbmltcG9ydCB7IERyb3BQb3NpdGlvbiwgSWd4Q29sdW1uTW92aW5nU2VydmljZSB9IGZyb20gJy4uL21vdmluZy9tb3Zpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hPdmVybGF5T3V0bGV0RGlyZWN0aXZlLCBJZ3hUb2dnbGVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3RvZ2dsZS90b2dnbGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElUcmVlR3JpZFJlY29yZCB9IGZyb20gJy4uL3RyZWUtZ3JpZC90cmVlLWdyaWQuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBTdGF0ZSwgVHJhbnNhY3Rpb24sIFRyYW5zYWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyYW5zYWN0aW9uL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IEdyaWRDb2x1bW5EYXRhVHlwZSB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9kYXRhLXV0aWwnO1xuaW1wb3J0IHsgSWd4RmlsdGVyaW5nT3BlcmFuZCB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctY29uZGl0aW9uJztcbmltcG9ydCB7IElDb2x1bW5QaXBlQXJncywgTVJMUmVzaXplQ29sdW1uSW5mbyB9IGZyb20gJy4uL2NvbHVtbnMvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJZ3hTdW1tYXJ5UmVzdWx0IH0gZnJvbSAnLi4vc3VtbWFyaWVzL2dyaWQtc3VtbWFyeSc7XG5pbXBvcnQgeyBJU29ydGluZ0V4cHJlc3Npb24sIElTb3J0aW5nU3RyYXRlZ3ksIFNvcnRpbmdEaXJlY3Rpb24gfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvc29ydGluZy1zdHJhdGVneSc7XG5pbXBvcnQgeyBJR3JpZEdyb3VwaW5nU3RyYXRlZ3ksIElHcmlkU29ydGluZ1N0cmF0ZWd5IH0gZnJvbSAnLi9zdHJhdGVneSc7XG5pbXBvcnQgeyBJRm9yT2ZTdGF0ZSwgSWd4R3JpZEZvck9mRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9mb3Itb2YvZm9yX29mLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBPdmVybGF5U2V0dGluZ3MgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vdmVybGF5L3V0aWxpdGllcyc7XG5pbXBvcnQgeyBJUGlubmluZ0NvbmZpZyB9IGZyb20gJy4uL2dyaWQuY29tbW9uJztcbmltcG9ydCB7IElEaW1lbnNpb25zQ2hhbmdlLCBJUGl2b3RDb25maWd1cmF0aW9uLCBJUGl2b3REaW1lbnNpb24sIElQaXZvdEtleXMsIElQaXZvdFZhbHVlLCBJVmFsdWVzQ2hhbmdlLCBQaXZvdERpbWVuc2lvblR5cGUgfSBmcm9tICcuLi9waXZvdC1ncmlkL3Bpdm90LWdyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElEYXRhQ2xvbmVTdHJhdGVneSB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9kYXRhLWNsb25lLXN0cmF0ZWd5JztcblxuZXhwb3J0IGNvbnN0IElHWF9HUklEX0JBU0UgPSBuZXcgSW5qZWN0aW9uVG9rZW48R3JpZFR5cGU+KCdJZ3hHcmlkQmFzZVRva2VuJyk7XG5leHBvcnQgY29uc3QgSUdYX0dSSURfU0VSVklDRV9CQVNFID0gbmV3IEluamVjdGlvblRva2VuPEdyaWRTZXJ2aWNlVHlwZT4oJ0lneEdyaWRTZXJ2aWNlQmFzZVRva2VuJyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBhdGhTZWdtZW50IHtcbiAgICByb3dJRDogYW55O1xuICAgIHJvd0lzbGFuZEtleTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElHcmlkRGF0YUJpbmRhYmxlIHtcbiAgICBkYXRhOiBhbnlbXSB8IG51bGw7XG4gICAgZmlsdGVyZWREYXRhOiBhbnlbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDZWxsVHlwZSB7XG4gICAgdmFsdWU6IGFueTtcbiAgICBlZGl0VmFsdWU6IGFueTtcbiAgICBzZWxlY3RlZDogYm9vbGVhbjtcbiAgICBhY3RpdmU6IGJvb2xlYW47XG4gICAgZWRpdGFibGU6IGJvb2xlYW47XG4gICAgZWRpdE1vZGU6IGJvb2xlYW47XG4gICAgbmF0aXZlRWxlbWVudD86IEhUTUxFbGVtZW50O1xuICAgIGNvbHVtbjogQ29sdW1uVHlwZTtcbiAgICByb3c6IFJvd1R5cGU7XG4gICAgZ3JpZDogR3JpZFR5cGU7XG4gICAgaWQ6IHsgcm93SUQ6IGFueTsgY29sdW1uSUQ6IG51bWJlcjsgcm93SW5kZXg6IG51bWJlciB9O1xuICAgIGNlbGxJRD86IGFueTtcbiAgICByZWFkb25seT86IGJvb2xlYW47XG4gICAgdGl0bGU/OiBhbnk7XG4gICAgd2lkdGg6IHN0cmluZztcbiAgICB2aXNpYmxlQ29sdW1uSW5kZXg/OiBudW1iZXI7XG4gICAgdXBkYXRlOiAodmFsdWU6IGFueSkgPT4gdm9pZDtcbiAgICBzZXRFZGl0TW9kZT8odmFsdWU6IGJvb2xlYW4pOiB2b2lkO1xuICAgIGNhbGN1bGF0ZVNpemVUb0ZpdD8ocmFuZ2U6IGFueSk6IG51bWJlcjtcbiAgICBhY3RpdmF0ZT8oZXZlbnQ6IEZvY3VzRXZlbnQgfCBLZXlib2FyZEV2ZW50KTogdm9pZDtcbiAgICBvbkRvdWJsZUNsaWNrPyhldmVudDogTW91c2VFdmVudCk6IHZvaWQ7XG4gICAgb25DbGljaz8oZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJvd1R5cGUge1xuICAgIG5hdGl2ZUVsZW1lbnQ/OiBIVE1MRWxlbWVudDtcbiAgICBpbmRleDogbnVtYmVyO1xuICAgIHZpZXdJbmRleDogbnVtYmVyO1xuICAgIGlzR3JvdXBCeVJvdz86IGJvb2xlYW47XG4gICAgaXNTdW1tYXJ5Um93PzogYm9vbGVhbjtcbiAgICBzdW1tYXJpZXM/OiBNYXA8c3RyaW5nLCBJZ3hTdW1tYXJ5UmVzdWx0W10+O1xuICAgIGdyb3VwUm93PzogSUdyb3VwQnlSZWNvcmQ7XG4gICAga2V5PzogYW55O1xuICAgIGRhdGE/OiBhbnk7XG4gICAgY2VsbHM/OiBRdWVyeUxpc3Q8Q2VsbFR5cGU+IHwgQ2VsbFR5cGVbXTtcbiAgICBkaXNhYmxlZD86IGJvb2xlYW47XG4gICAgdmlydERpclJvdz86IElneEdyaWRGb3JPZkRpcmVjdGl2ZTxhbnk+O1xuICAgIHBpbm5lZD86IGJvb2xlYW47XG4gICAgc2VsZWN0ZWQ/OiBib29sZWFuO1xuICAgIGV4cGFuZGVkPzogYm9vbGVhbjtcbiAgICBkZWxldGVkPzogYm9vbGVhbjtcbiAgICBpbkVkaXRNb2RlPzogYm9vbGVhbjtcbiAgICBjaGlsZHJlbj86IFJvd1R5cGVbXTtcbiAgICBwYXJlbnQ/OiBSb3dUeXBlO1xuICAgIGhhc0NoaWxkcmVuPzogYm9vbGVhbjtcbiAgICB0cmVlUm93PzogSVRyZWVHcmlkUmVjb3JkO1xuICAgIGFkZFJvd1VJPzogYm9vbGVhbjtcbiAgICBmb2N1c2VkPzogYm9vbGVhbjtcbiAgICBncmlkOiBHcmlkVHlwZTtcbiAgICBvblJvd1NlbGVjdG9yQ2xpY2s/OiAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHZvaWQ7XG4gICAgb25DbGljaz86IChldmVudDogTW91c2VFdmVudCkgPT4gdm9pZDtcbiAgICBiZWdpbkFkZFJvdz86ICgpID0+IHZvaWQ7XG4gICAgdXBkYXRlPzogKHZhbHVlOiBhbnkpID0+IHZvaWQ7XG4gICAgZGVsZXRlPzogKCkgPT4gYW55O1xuICAgIHBpbj86ICgpID0+IHZvaWQ7XG4gICAgdW5waW4/OiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbHVtblR5cGUge1xuICAgIGdyaWQ6IEdyaWRUeXBlO1xuICAgIGNoaWxkcmVuOiBRdWVyeUxpc3Q8Q29sdW1uVHlwZT47XG4gICAgYWxsQ2hpbGRyZW46IENvbHVtblR5cGVbXTtcbiAgICAvLyBUWVBFXG4gICAgaGVhZGVyR3JvdXA6IGFueTtcbiAgICAvLyBUWVBFXG4gICAgaGVhZGVyQ2VsbDogYW55O1xuXG4gICAgaGVhZGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgY29sbGFwc2libGVJbmRpY2F0b3JUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gICAgaGVhZGVyQ2xhc3NlczogYW55O1xuICAgIGhlYWRlclN0eWxlczogYW55O1xuICAgIGhlYWRlckdyb3VwQ2xhc3NlczogYW55O1xuICAgIGhlYWRlckdyb3VwU3R5bGVzOiBhbnk7XG5cbiAgICBjYWxjV2lkdGg6IGFueTtcbiAgICBtaW5XaWR0aFB4OiBudW1iZXI7XG4gICAgbWF4V2lkdGhQeDogbnVtYmVyO1xuICAgIG1pbldpZHRoOiBzdHJpbmc7XG4gICAgbWF4V2lkdGg6IHN0cmluZztcbiAgICBtaW5XaWR0aFBlcmNlbnQ6IG51bWJlcjtcbiAgICBtYXhXaWR0aFBlcmNlbnQ6IG51bWJlcjtcblxuICAgIGZpZWxkOiBzdHJpbmc7XG4gICAgaGVhZGVyPzogc3RyaW5nO1xuICAgIGluZGV4OiBudW1iZXI7XG4gICAgZGF0YVR5cGU6IEdyaWRDb2x1bW5EYXRhVHlwZTtcbiAgICBpbmxpbmVFZGl0b3JUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICB2aXNpYmxlSW5kZXg6IG51bWJlcjtcbiAgICBjb2xsYXBzaWJsZT86IGJvb2xlYW47XG4gICAgZWRpdGFibGU6IGJvb2xlYW47XG4gICAgcmVzaXphYmxlOiBib29sZWFuO1xuICAgIHNlYXJjaGFibGU6IGJvb2xlYW47XG4gICAgY29sdW1uR3JvdXA6IGJvb2xlYW47XG4gICAgLyoqIEBkZXByZWNhdGVkIGluIHZlcnNpb24gMTMuMS4wLiBVc2UgYElneEdyaWRDb21wb25lbnQubW92aW5nYCBpbnN0ZWFkLiovXG4gICAgbW92YWJsZTogYm9vbGVhbjtcbiAgICBncm91cGFibGU6IGJvb2xlYW47XG4gICAgc29ydGFibGU6IGJvb2xlYW47XG4gICAgZmlsdGVyYWJsZTogYm9vbGVhbjtcbiAgICBoaWRkZW46IGJvb2xlYW47XG4gICAgZGlzYWJsZVBpbm5pbmc6IGJvb2xlYW47XG4gICAgZGlzYWJsZUhpZGluZzogYm9vbGVhbjtcbiAgICBzb3J0U3RyYXRlZ3k6IElTb3J0aW5nU3RyYXRlZ3k7XG4gICAgc29ydGluZ0lnbm9yZUNhc2U6IGJvb2xlYW47XG4gICAgZmlsdGVyQ2VsbDogYW55O1xuICAgIGZpbHRlcnM6IElneEZpbHRlcmluZ09wZXJhbmQ7XG4gICAgZmlsdGVyaW5nSWdub3JlQ2FzZTogYm9vbGVhbjtcbiAgICBmaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU6IEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTtcbiAgICBoYXNTdW1tYXJ5OiBib29sZWFuO1xuICAgIHN1bW1hcmllczogYW55O1xuICAgIHN1bW1hcnlUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBwaW5uZWQ6IGJvb2xlYW47XG4gICAgZXhwYW5kZWQ6IGJvb2xlYW47XG4gICAgc2VsZWN0ZWQ6IGJvb2xlYW47XG4gICAgc2VsZWN0YWJsZTogYm9vbGVhbjtcbiAgICBjb2x1bW5MYXlvdXQ6IGJvb2xlYW47XG4gICAgbGV2ZWw6IG51bWJlcjtcbiAgICByb3dTdGFydDogbnVtYmVyO1xuICAgIHJvd0VuZDogbnVtYmVyO1xuICAgIGNvbFN0YXJ0OiBudW1iZXI7XG4gICAgY29sRW5kOiBudW1iZXI7XG4gICAgZ3JpZFJvd1NwYW46IG51bWJlcjtcbiAgICBncmlkQ29sdW1uU3BhbjogbnVtYmVyO1xuICAgIGNvbHVtbkxheW91dENoaWxkOiBib29sZWFuO1xuICAgIHdpZHRoOiBzdHJpbmc7XG4gICAgdG9wTGV2ZWxQYXJlbnQ/OiBDb2x1bW5UeXBlO1xuICAgIHBhcmVudD86IENvbHVtblR5cGU7XG4gICAgcGlwZUFyZ3M6IElDb2x1bW5QaXBlQXJncztcbiAgICBoYXNOZXN0ZWRQYXRoOiBib29sZWFuO1xuICAgIGRlZmF1bHRUaW1lRm9ybWF0OiBzdHJpbmc7XG4gICAgZGVmYXVsdERhdGVUaW1lRm9ybWF0OiBzdHJpbmc7XG4gICAgYWRkaXRpb25hbFRlbXBsYXRlQ29udGV4dDogYW55O1xuICAgIGlzTGFzdFBpbm5lZDogYm9vbGVhbjtcbiAgICBpc0ZpcnN0UGlubmVkOiBib29sZWFuO1xuICAgIGFwcGx5U2VsZWN0YWJsZUNsYXNzOiBib29sZWFuO1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgZ3JvdXBpbmdDb21wYXJlcjogKGE6IGFueSwgYjogYW55KSA9PiBudW1iZXI7XG5cbiAgICBmaWx0ZXJDZWxsVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBtb3ZlKGluZGV4OiBudW1iZXIpOiB2b2lkO1xuICAgIGdldEF1dG9TaXplKCk6IHN0cmluZztcbiAgICBnZXRSZXNpemFibGVDb2xVbmRlckVuZCgpOiBNUkxSZXNpemVDb2x1bW5JbmZvW107XG4gICAgZ2V0Q2VsbFdpZHRoKCk6IHN0cmluZztcbiAgICBnZXRHcmlkVGVtcGxhdGUoaXNSb3c6IGJvb2xlYW4pOiBzdHJpbmc7XG4gICAgdG9nZ2xlVmlzaWJpbGl0eSh2YWx1ZT86IGJvb2xlYW4pOiB2b2lkO1xuICAgIGZvcm1hdHRlcih2YWx1ZTogYW55LCByb3dEYXRhPzogYW55KTogYW55O1xuICAgIHBvcHVsYXRlVmlzaWJsZUluZGV4ZXM/KCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3JpZFNlcnZpY2VUeXBlIHtcblxuICAgIGdyaWQ6IEdyaWRUeXBlO1xuICAgIGNydWRTZXJ2aWNlOiBhbnk7XG4gICAgY21zOiBJZ3hDb2x1bW5Nb3ZpbmdTZXJ2aWNlO1xuXG4gICAgZ2V0X2RhdGEoKTogYW55W107XG4gICAgZ2V0X2FsbF9kYXRhKGluY2x1ZGVUcmFuc2FjdGlvbnM/OiBib29sZWFuKTogYW55W107XG4gICAgZ2V0X2NvbHVtbl9ieV9uYW1lKG5hbWU6IHN0cmluZyk6IENvbHVtblR5cGU7XG4gICAgZ2V0Um93RGF0YShpZDogYW55KTogYW55O1xuICAgIGdldF9yZWNfYnlfaWQoaWQ6IGFueSk6IGFueTtcbiAgICBnZXRfcm93X2lkKHJvd0RhdGE6IGFueSk6IGFueTtcbiAgICBnZXRfcm93X2J5X2luZGV4KHJvd1NlbGVjdG9yOiBhbnkpOiBSb3dUeXBlO1xuICAgIGdldF9yb3dfYnlfa2V5KHJvd1NlbGVjdG9yOiBhbnkpOiBSb3dUeXBlO1xuICAgIGdldF9yZWNfaW5kZXhfYnlfaWQocGs6IHN0cmluZyB8IG51bWJlciwgZGF0YUNvbGxlY3Rpb24/OiBhbnlbXSk6IG51bWJlcjtcbiAgICBnZXRfcmVjX2lkX2J5X2luZGV4KGluZGV4OiBudW1iZXIsIGRhdGFDb2xsZWN0aW9uPzogYW55W10pOiBhbnk7XG4gICAgZ2V0X3Jvd19pbmRleF9pbl9kYXRhKHJvd0lEOiBhbnksIGRhdGFDb2xsZWN0aW9uPzogYW55W10pOiBudW1iZXI7XG4gICAgZ2V0X2NlbGxfYnlfa2V5KHJvd1NlbGVjdG9yOiBhbnksIGZpZWxkOiBzdHJpbmcpOiBDZWxsVHlwZTtcbiAgICBnZXRfY2VsbF9ieV9pbmRleChyb3dJbmRleDogbnVtYmVyLCBjb2x1bW5JRDogbnVtYmVyIHwgc3RyaW5nKTogQ2VsbFR5cGU7XG4gICAgZ2V0X2NlbGxfYnlfdmlzaWJsZV9pbmRleChyb3dJbmRleDogbnVtYmVyLCBjb2x1bW5JbmRleDogbnVtYmVyKTtcbiAgICBzZXRfZ3JvdXByb3dfZXhwYW5zaW9uX3N0YXRlPyhncm91cFJvdzogSUdyb3VwQnlSZWNvcmQsIHZhbHVlOiBib29sZWFuKTogdm9pZDtcbiAgICByb3dfZGVsZXRlZF90cmFuc2FjdGlvbihpZDogYW55KTogYm9vbGVhbjtcbiAgICBhZGRSb3dUb0RhdGEocm93RGF0YTogYW55LCBwYXJlbnRJRD86IGFueSk6IHZvaWQ7XG4gICAgZGVsZXRlUm93QnlJZChpZDogYW55KTogYW55O1xuICAgIGdldF9yb3dfZXhwYW5zaW9uX3N0YXRlKGlkOiBhbnkpOiBib29sZWFuO1xuICAgIHNldF9yb3dfZXhwYW5zaW9uX3N0YXRlKGlkOiBhbnksIGV4cGFuZGVkOiBib29sZWFuLCBldmVudD86IEV2ZW50KTogdm9pZDtcbiAgICBnZXRfc3VtbWFyeV9kYXRhKCk6IGFueVtdO1xuXG4gICAgcHJlcGFyZV9zb3J0aW5nX2V4cHJlc3Npb24oc3RhdGVDb2xsZWN0aW9uczogQXJyYXk8QXJyYXk8YW55Pj4sIGV4cHJlc3Npb246IElTb3J0aW5nRXhwcmVzc2lvbik6IHZvaWQ7XG4gICAgc29ydChleHByZXNzaW9uOiBJU29ydGluZ0V4cHJlc3Npb24pOiB2b2lkO1xuICAgIHNvcnRfbXVsdGlwbGUoZXhwcmVzc2lvbnM6IElTb3J0aW5nRXhwcmVzc2lvbltdKTogdm9pZDtcbiAgICBjbGVhcl9zb3J0KGZpZWxkTmFtZTogc3RyaW5nKTogdm9pZDtcblxuICAgIGZpbHRlckRhdGFCeUV4cHJlc3Npb25zKGV4cHJlc3Npb25zVHJlZTogSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSk6IGFueVtdO1xuICAgIHNvcnREYXRhQnlFeHByZXNzaW9ucyhkYXRhOiBhbnlbXSwgZXhwcmVzc2lvbnM6IElTb3J0aW5nRXhwcmVzc2lvbltdKTogYW55W107XG5cbiAgICB1cGRhdGVfY2VsbChjZWxsOiBJZ3hDZWxsKTogSUdyaWRFZGl0RXZlbnRBcmdzO1xuICAgIHVwZGF0ZV9yb3cocm93OiBJZ3hFZGl0Um93LCB2YWx1ZTogYW55LCBldmVudD86IEV2ZW50KTogSUdyaWRFZGl0RXZlbnRBcmdzO1xuXG4gICAgZXhwYW5kX3BhdGhfdG9fcmVjb3JkPyhyZWNvcmQ6IElUcmVlR3JpZFJlY29yZCk6IHZvaWQ7XG4gICAgZ2V0X3NlbGVjdGVkX2NoaWxkcmVuPyhyZWNvcmQ6IElUcmVlR3JpZFJlY29yZCwgc2VsZWN0ZWRSb3dJRHM6IGFueVtdKTogdm9pZDtcbiAgICBnZXRfZ3JvdXBCeV9yZWNvcmRfaWQ/KGdSb3c6IElHcm91cEJ5UmVjb3JkKTogc3RyaW5nO1xuICAgIHJlbW92ZV9ncm91cGluZ19leHByZXNzaW9uPyhmaWVsZE5hbWU6IHN0cmluZyk6IHZvaWQ7XG4gICAgY2xlYXJfZ3JvdXBieT8oZmllbGQ6IHN0cmluZyB8IGFueSk6IHZvaWQ7XG4gICAgZ2V0UGFyZW50Um93SWQ/KGNoaWxkOiBHcmlkVHlwZSk6IGFueTtcbiAgICBnZXRDaGlsZEdyaWRzPyhpbkRlcHRoPzogYm9vbGVhbik6IEdyaWRUeXBlW107XG4gICAgZ2V0Q2hpbGRHcmlkPyhwYXRoOiBJUGF0aFNlZ21lbnRbXSk6IEdyaWRUeXBlO1xuICAgIC8vIFhYWDogRml4IHR5cGVcbiAgICB1bnNldENoaWxkUm93SXNsYW5kPyhyb3dJc2xhbmQ6IGFueSk6IHZvaWQ7XG59XG5cblxuLyoqXG4gKiBBbiBpbnRlcmZhY2UgZGVzY3JpYmluZyBhIEdyaWQgdHlwZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyaWRUeXBlIGV4dGVuZHMgSUdyaWREYXRhQmluZGFibGUge1xuICAgIGRpc3BsYXlEZW5zaXR5OiBEaXNwbGF5RGVuc2l0eTtcbiAgICBsb2NhbGU6IHN0cmluZztcbiAgICByZXNvdXJjZVN0cmluZ3M6IElHcmlkUmVzb3VyY2VTdHJpbmdzO1xuICAgIG5hdGl2ZUVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICAgIHJvd0VkaXRhYmxlOiBib29sZWFuO1xuICAgIHJvb3RTdW1tYXJpZXNFbmFibGVkOiBib29sZWFuO1xuICAgIGFsbG93RmlsdGVyaW5nOiBib29sZWFuO1xuICAgIHJvd0RyYWdnYWJsZTogYm9vbGVhbjtcbiAgICBwcmltYXJ5S2V5OiBhbnk7XG4gICAgaWQ6IHN0cmluZztcbiAgICByZW5kZXJlZFJvd0hlaWdodDogbnVtYmVyO1xuICAgIHBpcGVUcmlnZ2VyOiBudW1iZXI7XG4gICAgc3VtbWFyeVBpcGVUcmlnZ2VyOiBudW1iZXI7XG4gICAgZmlsdGVyaW5nUGlwZVRyaWdnZXI6IG51bWJlcjtcbiAgICBoYXNDb2x1bW5MYXlvdXRzOiBib29sZWFuO1xuICAgIG1vdmluZzogYm9vbGVhbjtcbiAgICBpc0xvYWRpbmc6IGJvb2xlYW47XG4gICAgZGF0YUNsb25lU3RyYXRlZ3k6IElEYXRhQ2xvbmVTdHJhdGVneTtcblxuICAgIGdyaWRBUEk6IEdyaWRTZXJ2aWNlVHlwZTtcblxuXG4gICAgZmlsdGVyTW9kZTogRmlsdGVyTW9kZTtcblxuICAgIC8vIFRZUEVcbiAgICB0aGVhZFJvdzogYW55O1xuICAgIGdyb3VwQXJlYTogYW55O1xuICAgIGZpbHRlckNlbGxMaXN0OiBhbnlbXTtcbiAgICBmaWx0ZXJpbmdSb3c6IGFueTtcbiAgICBhY3Rpb25TdHJpcDogYW55O1xuICAgIHJlc2l6ZUxpbmU6IGFueTtcblxuICAgIHRmb290OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgICBwYWdpbmF0b3I6IElneFBhZ2luYXRvckNvbXBvbmVudDtcbiAgICBwYWdpbmF0b3JMaXN0PzogUXVlcnlMaXN0PElneFBhZ2luYXRvckNvbXBvbmVudD47XG4gICAgY3J1ZFNlcnZpY2U6IGFueTtcbiAgICBzdW1tYXJ5U2VydmljZTogYW55O1xuXG5cblxuICAgIHZpcnR1YWxpemF0aW9uU3RhdGU6IElGb3JPZlN0YXRlO1xuICAgIC8vIFRZUEVcbiAgICBzZWxlY3Rpb25TZXJ2aWNlOiBhbnk7XG4gICAgbmF2aWdhdGlvbjogYW55O1xuICAgIGZpbHRlcmluZ1NlcnZpY2U6IGFueTtcbiAgICBvdXRsZXQ6IGFueTtcbiAgICBoYXNNb3ZhYmxlQ29sdW1uczogYm9vbGVhbjtcbiAgICBpc1Jvd1NlbGVjdGFibGU6IGJvb2xlYW47XG4gICAgc2hvd1Jvd1NlbGVjdG9yczogYm9vbGVhbjtcbiAgICBpc1Bpbm5pbmdUb1N0YXJ0OiBib29sZWFuO1xuICAgIGNvbHVtbkluRHJhZzogYW55O1xuICAgIHBpbm5lZFdpZHRoOiBudW1iZXI7XG4gICAgdW5waW5uZWRXaWR0aDogbnVtYmVyO1xuICAgIHN1bW1hcmllc01hcmdpbjogbnVtYmVyO1xuICAgIGhlYWRTZWxlY3RvckJhc2VBcmlhTGFiZWw6IHN0cmluZztcblxuICAgIGhhc1Zpc2libGVDb2x1bW5zOiBib29sZWFuO1xuICAgIGhhc0V4cGFuZGFibGVDaGlsZHJlbj86IGJvb2xlYW47XG4gICAgc2hvd0V4cGFuZEFsbD86IGJvb2xlYW47XG5cbiAgICBoaWRkZW5Db2x1bW5zQ291bnQ6IG51bWJlcjtcbiAgICBwaW5uZWRDb2x1bW5zQ291bnQ6IG51bWJlcjtcblxuICAgIGljb25UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gICAgZ3JvdXBSb3dUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gICAgZ3JvdXBCeVJvd1NlbGVjdG9yVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIHJvd0xvYWRpbmdJbmRpY2F0b3JUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gICAgaGVhZFNlbGVjdG9yVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgcm93U2VsZWN0b3JUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBzb3J0SGVhZGVySWNvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIHNvcnRBc2NlbmRpbmdIZWFkZXJJY29uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgc29ydERlc2NlbmRpbmdIZWFkZXJJY29uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgaGVhZGVyQ29sbGFwc2VJbmRpY2F0b3JUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBoZWFkZXJFeHBhbmRJbmRpY2F0b3JUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBkcmFnSW5kaWNhdG9ySWNvblRlbXBsYXRlOiBhbnk7XG4gICAgZHJhZ0luZGljYXRvckljb25CYXNlOiBhbnk7XG4gICAgZGlzYWJsZVRyYW5zaXRpb25zOiBib29sZWFuO1xuICAgIGN1cnJlbmN5UG9zaXRpb25MZWZ0OiBib29sZWFuO1xuXG4gICAgY29sdW1uV2lkdGhTZXRCeVVzZXI6IGJvb2xlYW47XG4gICAgaGVhZGVyRmVhdHVyZXNXaWR0aDogbnVtYmVyO1xuICAgIGNhbGNIZWlnaHQ6IG51bWJlcjtcbiAgICBjYWxjV2lkdGg6IG51bWJlcjtcbiAgICBvdXRlcldpZHRoOiBudW1iZXI7XG4gICAgcm93SGVpZ2h0OiBudW1iZXI7XG4gICAgbXVsdGlSb3dMYXlvdXRSb3dTaXplOiBudW1iZXI7XG4gICAgZGVmYXVsdEhlYWRlckdyb3VwTWluV2lkdGg6IGFueTtcbiAgICBtYXhMZXZlbEhlYWRlckRlcHRoOiBudW1iZXI7XG4gICAgZGVmYXVsdFJvd0hlaWdodDogbnVtYmVyO1xuICAgIF9iYXNlRm9udFNpemU/OiBudW1iZXI7XG4gICAgc2Nyb2xsU2l6ZTogbnVtYmVyO1xuXG4gICAgcGlubmluZzogSVBpbm5pbmdDb25maWc7XG4gICAgZXhwYW5zaW9uU3RhdGVzOiBNYXA8YW55LCBib29sZWFuPjtcbiAgICBwYXJlbnRWaXJ0RGlyOiBhbnk7XG4gICAgdGJvZHk6IGFueTtcbiAgICB2ZXJ0aWNhbFNjcm9sbENvbnRhaW5lcjogYW55O1xuICAgIGRhdGFSb3dMaXN0OiBhbnk7XG4gICAgcm93TGlzdDogYW55O1xuICAgIGNvbHVtbkxpc3Q6IFF1ZXJ5TGlzdDxDb2x1bW5UeXBlPjtcbiAgICBjb2x1bW5zOiBDb2x1bW5UeXBlW107XG4gICAgdmlzaWJsZUNvbHVtbnM6IENvbHVtblR5cGVbXTtcbiAgICB1bnBpbm5lZENvbHVtbnM6IENvbHVtblR5cGVbXTtcbiAgICBwaW5uZWRDb2x1bW5zOiBDb2x1bW5UeXBlW107XG4gICAgaGVhZGVyQ2VsbExpc3Q6IGFueVtdO1xuICAgIGhlYWRlckdyb3VwczogYW55W107XG4gICAgaGVhZGVyR3JvdXBzTGlzdDogYW55W107XG4gICAgc3VtbWFyaWVzUm93TGlzdDogYW55O1xuICAgIGhlYWRlckNvbnRhaW5lcjogYW55O1xuICAgIGlzQ2VsbFNlbGVjdGFibGU6IGJvb2xlYW47XG4gICAgaXNNdWx0aVJvd1NlbGVjdGlvbkVuYWJsZWQ6IGJvb2xlYW47XG4gICAgaGFzUGlubmVkUmVjb3JkczogYm9vbGVhbjtcbiAgICBwaW5uZWRSZWNvcmRzQ291bnQ6IG51bWJlcjtcbiAgICBwaW5uZWRSZWNvcmRzOiBhbnlbXTtcbiAgICB1bnBpbm5lZFJlY29yZHM6IGFueVtdO1xuICAgIHBpbm5lZERhdGFWaWV3OiBhbnlbXTtcbiAgICBwaW5uZWRSb3dzOiBhbnlbXTtcbiAgICBkYXRhVmlldzogYW55W107XG4gICAgX2ZpbHRlcmVkVW5waW5uZWREYXRhOiBhbnlbXTtcbiAgICBfZmlsdGVyZWRTb3J0ZWRVbnBpbm5lZERhdGE6IGFueVtdO1xuICAgIGZpbHRlcmVkU29ydGVkRGF0YTogYW55W107XG4gICAgZGF0YVdpdGhBZGRlZEluVHJhbnNhY3Rpb25Sb3dzOiBhbnlbXTtcbiAgICB0cmFuc2FjdGlvbnM6IFRyYW5zYWN0aW9uU2VydmljZTxUcmFuc2FjdGlvbiwgU3RhdGU+O1xuICAgIGRlZmF1bHRTdW1tYXJ5SGVpZ2h0OiBudW1iZXI7XG4gICAgc3VtbWFyeVJvd0hlaWdodDogbnVtYmVyO1xuICAgIHJvd0VkaXRpbmdPdmVybGF5OiBJZ3hUb2dnbGVEaXJlY3RpdmU7XG4gICAgdG90YWxSb3dzQ291bnRBZnRlckZpbHRlcjogbnVtYmVyO1xuICAgIF90b3RhbFJlY29yZHM6IG51bWJlcjtcblxuICAgIHBhZ2luZ01vZGU6IEdyaWRQYWdpbmdNb2RlO1xuICAgIHBhZ2luZ1N0YXRlOiBhbnk7XG5cbiAgICByb3dFZGl0VGFiczogYW55O1xuICAgIGxhc3RTZWFyY2hJbmZvOiBJU2VhcmNoSW5mbztcbiAgICBwYWdlOiBudW1iZXI7XG4gICAgcGVyUGFnZTogbnVtYmVyO1xuICAgIGRyYWdSb3dJRDogYW55O1xuICAgIHJvd0RyYWdnaW5nOiBib29sZWFuO1xuICAgIGV2ZW5Sb3dDU1M6IHN0cmluZztcbiAgICBvZGRSb3dDU1M6IHN0cmluZztcblxuICAgIGZpcnN0RWRpdGFibGVDb2x1bW5JbmRleDogbnVtYmVyO1xuICAgIGxhc3RFZGl0YWJsZUNvbHVtbkluZGV4OiBudW1iZXI7XG4gICAgaXNSb3dQaW5uaW5nVG9Ub3A6IGJvb2xlYW47XG4gICAgaGFzRGV0YWlsczogYm9vbGVhbjtcbiAgICBoYXNTdW1tYXJpemVkQ29sdW1uczogYm9vbGVhbjtcbiAgICBoYXNDb2x1bW5Hcm91cHM6IGJvb2xlYW47XG4gICAgaGFzRWRpdGFibGVDb2x1bW5zOiBib29sZWFuO1xuICAgIHVuaXF1ZUNvbHVtblZhbHVlc1N0cmF0ZWd5OiAoY29sdW1uOiBDb2x1bW5UeXBlLCB0cmVlOiBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUsIGRvbmU6ICh2YWx1ZXM6IGFueVtdKSA9PiB2b2lkKSA9PiB2b2lkO1xuICAgIGdldEhlYWRlckNlbGxXaWR0aDogKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiBJU2l6ZUluZm87XG5cbiAgICBjZHI6IENoYW5nZURldGVjdG9yUmVmO1xuICAgIGRvY3VtZW50OiBEb2N1bWVudDtcbiAgICByb3dFeHBhbmRlZEluZGljYXRvclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIHJvd0NvbGxhcHNlZEluZGljYXRvclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIGV4Y2VsU3R5bGVIZWFkZXJJY29uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBzZWxlY3RSb3dPbkNsaWNrOiBib29sZWFuO1xuICAgIGNlbGxTZWxlY3Rpb246IEdyaWRTZWxlY3Rpb25Nb2RlO1xuICAgIHJvd1NlbGVjdGlvbjogR3JpZFNlbGVjdGlvbk1vZGU7XG4gICAgY29sdW1uU2VsZWN0aW9uOiBHcmlkU2VsZWN0aW9uTW9kZTtcbiAgICBzdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlOiBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZTtcbiAgICBzdW1tYXJ5UG9zaXRpb246IEdyaWRTdW1tYXJ5UG9zaXRpb247XG5cbiAgICAvLyBYWFg6IFdvcmsgYXJvdW5kIHRpbGwgd2UgZml4ZWQgdGhlIGluamVjdGlvbiB0b2tlbnNcbiAgICBsYXN0Q2hpbGRHcmlkPzogR3JpZFR5cGU7XG4gICAgdG9vbGJhck91dGxldD86IFZpZXdDb250YWluZXJSZWY7XG4gICAgcGFnaW5hdG9yT3V0bGV0PzogVmlld0NvbnRhaW5lclJlZjtcbiAgICBmbGF0RGF0YT86IGFueVtdIHwgbnVsbDtcbiAgICBjaGlsZFJvdz86IGFueTtcbiAgICBleHBhbnNpb25EZXB0aD86IG51bWJlcjtcbiAgICBjaGlsZERhdGFLZXk/OiBhbnk7XG4gICAgZm9yZWlnbktleT86IGFueTtcbiAgICBjYXNjYWRlT25EZWxldGU/OiBib29sZWFuO1xuICAgIGxvYWRDaGlsZHJlbk9uRGVtYW5kPzogKHBhcmVudElEOiBhbnksIGRvbmU6IChjaGlsZHJlbjogYW55W10pID0+IHZvaWQpID0+IHZvaWQ7XG4gICAgaGFzQ2hpbGRyZW5LZXk/OiBhbnk7XG4gICAgbG9hZGluZ1Jvd3M/OiBTZXQ8YW55PjtcbiAgICBwYXJlbnQ/OiBHcmlkVHlwZTtcbiAgICBoaWdobGlnaHRlZFJvd0lEPzogYW55O1xuICAgIGhncmlkQVBJPzogR3JpZFNlcnZpY2VUeXBlO1xuICAgIHVwZGF0ZU9uUmVuZGVyPzogYm9vbGVhbjtcbiAgICBjaGlsZExheW91dEtleXM/OiBhbnlbXTtcbiAgICBjaGlsZExheW91dExpc3Q/OiBRdWVyeUxpc3Q8YW55PjtcbiAgICByb290R3JpZD86IEdyaWRUeXBlO1xuICAgIHByb2Nlc3NlZFJvb3RSZWNvcmRzPzogSVRyZWVHcmlkUmVjb3JkW107XG4gICAgcm9vdFJlY29yZHM/OiBJVHJlZUdyaWRSZWNvcmRbXTtcbiAgICByZWNvcmRzPzogTWFwPGFueSwgSVRyZWVHcmlkUmVjb3JkPjtcbiAgICBwcm9jZXNzZWRFeHBhbmRlZEZsYXREYXRhPzogYW55W10gfCBudWxsO1xuICAgIHByb2Nlc3NlZFJlY29yZHM/OiBNYXA8YW55LCBJVHJlZUdyaWRSZWNvcmQ+O1xuXG4gICAgYWN0aXZlTm9kZUNoYW5nZTogRXZlbnRFbWl0dGVyPElBY3RpdmVOb2RlQ2hhbmdlRXZlbnRBcmdzPjtcbiAgICBncmlkS2V5ZG93bjogRXZlbnRFbWl0dGVyPElHcmlkS2V5ZG93bkV2ZW50QXJncz47XG4gICAgY2VsbENsaWNrOiBFdmVudEVtaXR0ZXI8SUdyaWRDZWxsRXZlbnRBcmdzPjtcbiAgICBkb3VibGVDbGljazogRXZlbnRFbWl0dGVyPElHcmlkQ2VsbEV2ZW50QXJncz47XG4gICAgY29udGV4dE1lbnU6IEV2ZW50RW1pdHRlcjxJR3JpZENlbGxFdmVudEFyZ3M+O1xuICAgIHNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8SUdyaWRDZWxsRXZlbnRBcmdzPjtcbiAgICByYW5nZVNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8R3JpZFNlbGVjdGlvblJhbmdlPjtcbiAgICByb3dTZWxlY3Rpb25DaGFuZ2luZzogRXZlbnRFbWl0dGVyPElSb3dTZWxlY3Rpb25FdmVudEFyZ3M+O1xuICAgIGxvY2FsZUNoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+O1xuICAgIGZpbHRlcmluZzogRXZlbnRFbWl0dGVyPElGaWx0ZXJpbmdFdmVudEFyZ3M+O1xuICAgIGZpbHRlcmluZ0RvbmU6IEV2ZW50RW1pdHRlcjxJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlPjtcbiAgICBjb2x1bW5QaW5uZWQ6IEV2ZW50RW1pdHRlcjxJUGluQ29sdW1uRXZlbnRBcmdzPjtcbiAgICBjb2x1bW5SZXNpemVkOiBFdmVudEVtaXR0ZXI8SUNvbHVtblJlc2l6ZUV2ZW50QXJncz47XG4gICAgY29sdW1uTW92aW5nRW5kOiBFdmVudEVtaXR0ZXI8SUNvbHVtbk1vdmluZ0VuZEV2ZW50QXJncz47XG4gICAgY29sdW1uU2VsZWN0aW9uQ2hhbmdpbmc6IEV2ZW50RW1pdHRlcjxJQ29sdW1uU2VsZWN0aW9uRXZlbnRBcmdzPjtcbiAgICBjb2x1bW5Nb3Zpbmc6IEV2ZW50RW1pdHRlcjxJQ29sdW1uTW92aW5nRXZlbnRBcmdzPjtcbiAgICBjb2x1bW5Nb3ZpbmdTdGFydDogRXZlbnRFbWl0dGVyPElDb2x1bW5Nb3ZpbmdTdGFydEV2ZW50QXJncz47XG4gICAgY29sdW1uUGluOiBFdmVudEVtaXR0ZXI8SVBpbkNvbHVtbkNhbmNlbGxhYmxlRXZlbnRBcmdzPjtcbiAgICBjb2x1bW5WaXNpYmlsaXR5Q2hhbmdpbmc6IEV2ZW50RW1pdHRlcjxJQ29sdW1uVmlzaWJpbGl0eUNoYW5naW5nRXZlbnRBcmdzPjtcbiAgICBjb2x1bW5WaXNpYmlsaXR5Q2hhbmdlZDogRXZlbnRFbWl0dGVyPElDb2x1bW5WaXNpYmlsaXR5Q2hhbmdlZEV2ZW50QXJncz47XG4gICAgYmF0Y2hFZGl0aW5nQ2hhbmdlPzogRXZlbnRFbWl0dGVyPGJvb2xlYW4+O1xuICAgIG9uRGVuc2l0eUNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxJRGVuc2l0eUNoYW5nZWRFdmVudEFyZ3M+O1xuICAgIHJvd0FkZDogRXZlbnRFbWl0dGVyPElHcmlkRWRpdEV2ZW50QXJncz47XG4gICAgcm93QWRkZWQ6IEV2ZW50RW1pdHRlcjxJUm93RGF0YUV2ZW50QXJncz47XG4gICAgcm93QWRkZWROb3RpZmllcjogU3ViamVjdDxJUm93RGF0YUV2ZW50QXJncz47XG4gICAgcm93RGVsZXRlZDogRXZlbnRFbWl0dGVyPElSb3dEYXRhRXZlbnRBcmdzPjtcbiAgICByb3dEZWxldGVkTm90aWZpZXI6IFN1YmplY3Q8SVJvd0RhdGFFdmVudEFyZ3M+O1xuICAgIGNlbGxFZGl0RW50ZXI6IEV2ZW50RW1pdHRlcjxJR3JpZEVkaXRFdmVudEFyZ3M+O1xuICAgIGNlbGxFZGl0OiBFdmVudEVtaXR0ZXI8SUdyaWRFZGl0RXZlbnRBcmdzPjtcbiAgICBjZWxsRWRpdERvbmU6IEV2ZW50RW1pdHRlcjxJR3JpZEVkaXREb25lRXZlbnRBcmdzPjtcbiAgICBjZWxsRWRpdEV4aXQ6IEV2ZW50RW1pdHRlcjxJR3JpZEVkaXREb25lRXZlbnRBcmdzPjtcbiAgICByb3dFZGl0RW50ZXI6IEV2ZW50RW1pdHRlcjxJR3JpZEVkaXRFdmVudEFyZ3M+O1xuICAgIHJvd0VkaXQ6IEV2ZW50RW1pdHRlcjxJR3JpZEVkaXRFdmVudEFyZ3M+O1xuICAgIHJvd0VkaXREb25lOiBFdmVudEVtaXR0ZXI8SUdyaWRFZGl0RG9uZUV2ZW50QXJncz47XG4gICAgcm93RWRpdEV4aXQ6IEV2ZW50RW1pdHRlcjxJR3JpZEVkaXREb25lRXZlbnRBcmdzPjtcbiAgICByb3dEcmFnU3RhcnQ6IEV2ZW50RW1pdHRlcjxJUm93RHJhZ1N0YXJ0RXZlbnRBcmdzPjtcbiAgICByb3dEcmFnRW5kOiBFdmVudEVtaXR0ZXI8SVJvd0RyYWdFbmRFdmVudEFyZ3M+O1xuICAgIHJvd1RvZ2dsZTogRXZlbnRFbWl0dGVyPElSb3dUb2dnbGVFdmVudEFyZ3M+O1xuXG4gICAgdG9vbGJhckV4cG9ydGluZzogRXZlbnRFbWl0dGVyPElHcmlkVG9vbGJhckV4cG9ydEV2ZW50QXJncz47XG4gICAgcmVuZGVyZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIHJlc2l6ZU5vdGlmeTogU3ViamVjdDx2b2lkPjtcblxuICAgIHNvcnRTdHJhdGVneTogSUdyaWRTb3J0aW5nU3RyYXRlZ3k7XG4gICAgZ3JvdXBTdHJhdGVneT86IElHcmlkR3JvdXBpbmdTdHJhdGVneTtcbiAgICBmaWx0ZXJpbmdMb2dpYzogRmlsdGVyaW5nTG9naWM7XG4gICAgZmlsdGVyU3RyYXRlZ3k6IElGaWx0ZXJpbmdTdHJhdGVneTtcbiAgICBhbGxvd0FkdmFuY2VkRmlsdGVyaW5nOiBib29sZWFuO1xuICAgIHNvcnRpbmdFeHByZXNzaW9uczogSVNvcnRpbmdFeHByZXNzaW9uW107XG4gICAgc29ydGluZ0V4cHJlc3Npb25zQ2hhbmdlOiBFdmVudEVtaXR0ZXI8SVNvcnRpbmdFeHByZXNzaW9uW10+O1xuICAgIGZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTogSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTtcbiAgICBmaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlPjtcbiAgICBhZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTogSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTtcbiAgICBhZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZUNoYW5nZTogRXZlbnRFbWl0dGVyPElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU+O1xuXG4gICAgYmF0Y2hFZGl0aW5nOiBib29sZWFuO1xuICAgIGdyb3VwaW5nRXhwYW5zaW9uU3RhdGU/OiBJR3JvdXBCeUV4cGFuZFN0YXRlW107XG4gICAgZ3JvdXBpbmdFeHByZXNzaW9ucz86IElHcm91cGluZ0V4cHJlc3Npb25bXTtcbiAgICBncm91cGluZ0V4cHJlc3Npb25zQ2hhbmdlPzogRXZlbnRFbWl0dGVyPElHcm91cGluZ0V4cHJlc3Npb25bXT47XG4gICAgZ3JvdXBzRXhwYW5kZWQ/OiBib29sZWFuO1xuICAgIGdyb3Vwc1JlY29yZHM/OiBJR3JvdXBCeVJlY29yZFtdO1xuICAgIGdyb3VwaW5nRmxhdFJlc3VsdD86IGFueVtdO1xuICAgIGdyb3VwaW5nUmVzdWx0PzogYW55W107XG4gICAgZ3JvdXBpbmdNZXRhZGF0YT86IGFueVtdO1xuICAgIHNlbGVjdGVkQ2VsbHM/OiBDZWxsVHlwZVtdO1xuICAgIHNlbGVjdGVkUm93czogYW55W107XG4gICAgYWN0aXZlRGVzY2VuZGFudD86IHN0cmluZztcbiAgICBpc1Bpdm90PzogYm9vbGVhbjtcblxuICAgIHRvZ2dsZUdyb3VwPyhncm91cFJvdzogSUdyb3VwQnlSZWNvcmQpOiB2b2lkO1xuICAgIGNsZWFyR3JvdXBpbmc/KGZpZWxkOiBzdHJpbmcpOiB2b2lkO1xuICAgIGdyb3VwQnk/KGV4cHJlc3Npb246IElHcm91cGluZ0V4cHJlc3Npb24gfCBBcnJheTxJR3JvdXBpbmdFeHByZXNzaW9uPik6IHZvaWQ7XG4gICAgcmVzb2x2ZU91dGxldD8oKTogSWd4T3ZlcmxheU91dGxldERpcmVjdGl2ZTtcblxuICAgIGdldFNlbGVjdGVkUmFuZ2VzKCk6IEdyaWRTZWxlY3Rpb25SYW5nZVtdO1xuICAgIGRlc2VsZWN0QWxsQ29sdW1ucygpOiB2b2lkO1xuICAgIGRlc2VsZWN0Q29sdW1ucyhjb2x1bW5zOiBzdHJpbmdbXSB8IENvbHVtblR5cGVbXSk6IHZvaWQ7XG4gICAgc2VsZWN0Q29sdW1ucyhjb2x1bW5zOiBzdHJpbmdbXSB8IENvbHVtblR5cGVbXSk6IHZvaWQ7XG4gICAgc2VsZWN0ZWRDb2x1bW5zKCk6IENvbHVtblR5cGVbXTtcbiAgICByZWZyZXNoU2VhcmNoKCk6IHZvaWQ7XG4gICAgZ2V0RGVmYXVsdEV4cGFuZFN0YXRlKHJlY29yZDogYW55KTogYm9vbGVhbjtcbiAgICB0cmFja0NvbHVtbkNoYW5nZXMoaW5kZXg6IG51bWJlciwgY29sdW1uOiBhbnkpOiBhbnk7XG4gICAgZ2V0UG9zc2libGVDb2x1bW5XaWR0aCgpOiBzdHJpbmc7XG4gICAgcmVzZXRIb3Jpem9udGFsVmlydHVhbGl6YXRpb24oKTogdm9pZDtcbiAgICBoYXNWZXJ0aWNhbFNjcm9sbCgpOiBib29sZWFuO1xuICAgIGdldFZpc2libGVDb250ZW50SGVpZ2h0KCk6IG51bWJlcjtcbiAgICBnZXREcmFnR2hvc3RDdXN0b21UZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbDtcbiAgICBvcGVuUm93T3ZlcmxheShpZDogYW55KTogdm9pZDtcbiAgICBvcGVuQWR2YW5jZWRGaWx0ZXJpbmdEaWFsb2coKTogdm9pZDtcbiAgICBzaG93U25hY2tiYXJGb3IoaW5kZXg6IG51bWJlcik6IHZvaWQ7XG4gICAgZ2V0Q29sdW1uQnlOYW1lKG5hbWU6IHN0cmluZyk6IGFueTtcbiAgICBnZXRDb2x1bW5CeVZpc2libGVJbmRleChpbmRleDogbnVtYmVyKTogQ29sdW1uVHlwZTtcbiAgICBnZXRIZWFkZXJHcm91cFdpZHRoKGNvbHVtbjogQ29sdW1uVHlwZSk6IHN0cmluZztcbiAgICBnZXRSb3dCeUtleT8oa2V5OiBhbnkpOiBSb3dUeXBlO1xuICAgIGdldFJvd0J5SW5kZXg/KGluZGV4OiBudW1iZXIpOiBSb3dUeXBlO1xuICAgIHNldEZpbHRlcmVkRGF0YShkYXRhOiBhbnksIHBpbm5lZDogYm9vbGVhbik6IHZvaWQ7XG4gICAgc2V0RmlsdGVyZWRTb3J0ZWREYXRhKGRhdGE6IGFueSwgcGlubmVkOiBib29sZWFuKTogdm9pZDtcbiAgICBzb3J0KGV4cHJlc3Npb246IElTb3J0aW5nRXhwcmVzc2lvbiB8IElTb3J0aW5nRXhwcmVzc2lvbltdKTogdm9pZDtcbiAgICBjbGVhclNvcnQobmFtZT86IHN0cmluZyk6IHZvaWQ7XG4gICAgcGluUm93KGlkOiBhbnksIGluZGV4PzogbnVtYmVyLCByb3c/OiBSb3dUeXBlKTogYm9vbGVhbjtcbiAgICB1bnBpblJvdyhpZDogYW55LCByb3c/OiBSb3dUeXBlKTogYm9vbGVhbjtcbiAgICBnZXRVbnBpbm5lZEluZGV4QnlJZChpZDogYW55KTogbnVtYmVyO1xuICAgIGdldEVtcHR5UmVjb3JkT2JqZWN0Rm9yKGluUm93OiBSb3dUeXBlKTogYW55O1xuICAgIGlzU3VtbWFyeVJvdyhyZWM6IGFueSk6IGJvb2xlYW47XG4gICAgaXNSZWNvcmRQaW5uZWQocmVjOiBhbnkpOiBib29sZWFuO1xuICAgIGdldEluaXRpYWxQaW5uZWRJbmRleChyZWM6IGFueSk6IG51bWJlcjtcbiAgICBpc1JlY29yZFBpbm5lZEJ5Vmlld0luZGV4KHJvd0luZGV4OiBudW1iZXIpOiBib29sZWFuO1xuICAgIGlzQ29sdW1uR3JvdXBlZChmaWVsZE5hbWU6IHN0cmluZyk6IGJvb2xlYW47XG4gICAgaXNEZXRhaWxSZWNvcmQocmVjOiBhbnkpOiBib29sZWFuO1xuICAgIGlzR3JvdXBCeVJlY29yZChyZWM6IGFueSk6IGJvb2xlYW47XG4gICAgaXNHaG9zdFJlY29yZChyZWM6IGFueSk6IGJvb2xlYW47XG4gICAgaXNUcmVlUm93PyhyZWM6IGFueSk6IGJvb2xlYW47XG4gICAgaXNDaGlsZEdyaWRSZWNvcmQ/KHJlYzogYW55KTogYm9vbGVhbjtcbiAgICBnZXRDaGlsZEdyaWRzPyhpbkRlcHRoPzogYm9vbGVhbik6IGFueVtdO1xuICAgIGlzSGllcmFyY2hpY2FsUmVjb3JkPyhyZWNvcmQ6IGFueSk6IGJvb2xlYW47XG4gICAgY29sdW1uVG9WaXNpYmxlSW5kZXgoa2V5OiBzdHJpbmcgfCBudW1iZXIpOiBudW1iZXI7XG4gICAgbW92ZUNvbHVtbihjb2x1bW46IENvbHVtblR5cGUsIHRhcmdldDogQ29sdW1uVHlwZSwgcG9zOiBEcm9wUG9zaXRpb24pOiB2b2lkO1xuICAgIG5hdmlnYXRlVG8ocm93SW5kZXg6IG51bWJlciwgdmlzaWJsZUNvbHVtbkluZGV4OiBudW1iZXIsIGNhbGxiYWNrPzogKGU6IGFueSkgPT4gYW55KTogdm9pZDtcbiAgICBnZXRQcmV2aW91c0NlbGwoY3VyclJvd0luZGV4OiBudW1iZXIsIGN1clZpc2libGVDb2xJbmRleDogbnVtYmVyLCBjYWxsYmFjazogKGM6IENvbHVtblR5cGUpID0+IGJvb2xlYW4pOiBJQ2VsbFBvc2l0aW9uO1xuICAgIGdldE5leHRDZWxsKGN1cnJSb3dJbmRleDogbnVtYmVyLCBjdXJWaXNpYmxlQ29sSW5kZXg6IG51bWJlciwgY2FsbGJhY2s6IChjOiBDb2x1bW5UeXBlKSA9PiBib29sZWFuKTogSUNlbGxQb3NpdGlvbjtcbiAgICBjbGVhckNlbGxTZWxlY3Rpb24oKTogdm9pZDtcbiAgICBzZWxlY3RSYW5nZShyYW5nZTogR3JpZFNlbGVjdGlvblJhbmdlIHwgR3JpZFNlbGVjdGlvblJhbmdlW10pOiB2b2lkO1xuICAgIHNlbGVjdFJvd3Mocm93SURzOiBhbnlbXSwgY2xlYXJDdXJyZW50U2VsZWN0aW9uPzogYm9vbGVhbik6IHZvaWQ7XG4gICAgZGVzZWxlY3RSb3dzKHJvd0lEczogYW55W10pOiB2b2lkO1xuICAgIHNlbGVjdEFsbFJvd3Mob25seUZpbHRlckRhdGE/OiBib29sZWFuKTogdm9pZDtcbiAgICBkZXNlbGVjdEFsbFJvd3Mob25seUZpbHRlckRhdGE/OiBib29sZWFuKTogdm9pZDtcbiAgICBzZXRVcFBhZ2luYXRvcigpOiB2b2lkO1xuICAgIGNyZWF0ZUZpbHRlckRyb3Bkb3duKGNvbHVtbjogQ29sdW1uVHlwZSwgb3B0aW9uczogT3ZlcmxheVNldHRpbmdzKTogYW55O1xuICAgIC8vIFR5cGUgdG8gUm93VHlwZVxuICAgIGNyZWF0ZVJvdz8oaW5kZXg6IG51bWJlciwgZGF0YT86IGFueSk6IFJvd1R5cGU7XG4gICAgZGVsZXRlUm93KGlkOiBhbnkpOiBhbnk7XG4gICAgZGVsZXRlUm93QnlJZChpZDogYW55KTogYW55O1xuICAgIGNvbGxhcHNlUm93KGlkOiBhbnkpOiB2b2lkO1xuICAgIG5vdGlmeUNoYW5nZXMocmVwYWludD86IGJvb2xlYW4pOiB2b2lkO1xuICAgIHJlc2V0Q29sdW1uQ29sbGVjdGlvbnMoKTogdm9pZDtcbiAgICB0cmlnZ2VyUGlwZXMoKTogdm9pZDtcbiAgICByZXBvc2l0aW9uUm93RWRpdGluZ092ZXJsYXkocm93OiBSb3dUeXBlKTogdm9pZDtcbiAgICBjbG9zZVJvd0VkaXRpbmdPdmVybGF5KCk6IHZvaWQ7XG4gICAgcmVmbG93KCk6IHZvaWQ7XG5cbiAgICAvLyBUT0RPOiBNYXliZSBtb3ZlIHRoZW0gdG8gRmxhdEdyaWRUeXBlLCBidXQgdGhlbiB3aWxsIHdlIG5lZWQgYW5vdGhlciB0b2tlbj9cbiAgICBpc0V4cGFuZGVkR3JvdXAoZ3JvdXA6IElHcm91cEJ5UmVjb3JkKTogYm9vbGVhbjtcbiAgICBjcmVhdGVDb2x1bW5zTGlzdD8oY29sczogQ29sdW1uVHlwZVtdKTogdm9pZDtcbiAgICB0b2dnbGVBbGxHcm91cFJvd3M/KCk6IHZvaWQ7XG4gICAgdG9nZ2xlQWxsPygpOiB2b2lkO1xuICAgIGdlbmVyYXRlUm93UGF0aD8ocm93SWQ6IGFueSk6IGFueVtdO1xuICAgIHByZXZlbnRIZWFkZXJTY3JvbGw/KGFyZ3M6IGFueSk6IHZvaWQ7XG5cbn1cblxuLyoqXG4gKiBBbiBpbnRlcmZhY2UgZGVzY3JpYmluZyBhIEZsYXQgR3JpZCB0eXBlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmxhdEdyaWRUeXBlIGV4dGVuZHMgR3JpZFR5cGUge1xuICAgIGdyb3VwaW5nRXhwYW5zaW9uU3RhdGU6IElHcm91cEJ5RXhwYW5kU3RhdGVbXTtcbiAgICBncm91cGluZ0V4cHJlc3Npb25zOiBJR3JvdXBpbmdFeHByZXNzaW9uW107XG4gICAgZ3JvdXBpbmdFeHByZXNzaW9uc0NoYW5nZTogRXZlbnRFbWl0dGVyPElHcm91cGluZ0V4cHJlc3Npb25bXT47XG5cbiAgICB0b2dnbGVHcm91cChncm91cFJvdzogSUdyb3VwQnlSZWNvcmQpOiB2b2lkO1xuICAgIGNsZWFyR3JvdXBpbmcoZmllbGQ6IHN0cmluZyk6IHZvaWQ7XG4gICAgZ3JvdXBCeShleHByZXNzaW9uOiBJR3JvdXBpbmdFeHByZXNzaW9uIHwgQXJyYXk8SUdyb3VwaW5nRXhwcmVzc2lvbj4pOiB2b2lkO1xufVxuXG4vKipcbiAqIEFuIGludGVyZmFjZSBkZXNjcmliaW5nIGEgVHJlZSBHcmlkIHR5cGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmVlR3JpZFR5cGUgZXh0ZW5kcyBHcmlkVHlwZSB7XG4gICAgcmVjb3JkczogTWFwPGFueSwgSVRyZWVHcmlkUmVjb3JkPjtcbiAgICBpc1RyZWVSb3cocmVjOiBhbnkpOiBib29sZWFuO1xufVxuXG4vKipcbiAqIEFuIGludGVyZmFjZSBkZXNjcmliaW5nIGEgSGllcmFyY2hpY2FsIEdyaWQgdHlwZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhpZXJhcmNoaWNhbEdyaWRUeXBlIGV4dGVuZHMgR3JpZFR5cGUge1xuICAgIGNoaWxkTGF5b3V0S2V5czogYW55W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGl2b3RHcmlkVHlwZSBleHRlbmRzIEdyaWRUeXBlIHtcbiAgICBwaXZvdENvbmZpZ3VyYXRpb246IElQaXZvdENvbmZpZ3VyYXRpb247XG4gICAgYWxsRGltZW5zaW9uczogSVBpdm90RGltZW5zaW9uW10sXG4gICAgc2hvd1Bpdm90Q29uZmlndXJhdGlvblVJOiBib29sZWFuO1xuICAgIGNvbHVtbkRpbWVuc2lvbnM6IElQaXZvdERpbWVuc2lvbltdO1xuICAgIHJvd0RpbWVuc2lvbnM6IElQaXZvdERpbWVuc2lvbltdO1xuICAgIHJvd0RpbWVuc2lvblJlc2l6aW5nOiBib29sZWFuO1xuICAgIHZhbHVlczogSVBpdm90VmFsdWVbXTtcbiAgICBmaWx0ZXJEaW1lbnNpb25zOiBJUGl2b3REaW1lbnNpb25bXTtcbiAgICBkaW1lbnNpb25EYXRhQ29sdW1uczogQ29sdW1uVHlwZVtdO1xuICAgIHBpdm90Um93V2lkdGhzOiBudW1iZXI7XG4gICAgc2V0dXBDb2x1bW5zKCk6IHZvaWQ7XG4gICAgdG9nZ2xlUm93KHJvd0lEOiBhbnkpOiB2b2lkO1xuICAgIHJlc29sdmVEYXRhVHlwZXMoZmllbGQ6IGFueSk6IEdyaWRDb2x1bW5EYXRhVHlwZTtcbiAgICBtb3ZlRGltZW5zaW9uKGRpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uLCB0YXJnZXRDb2xsZWN0aW9uVHlwZTogUGl2b3REaW1lbnNpb25UeXBlLCBpbmRleD8gOiBudW1iZXIpO1xuICAgIGdldERpbWVuc2lvbnNCeVR5cGUoZGltZW5zaW9uOiBQaXZvdERpbWVuc2lvblR5cGUpO1xuICAgIHRvZ2dsZURpbWVuc2lvbihkaW1lbnNpb246IElQaXZvdERpbWVuc2lvbik7XG4gICAgc29ydERpbWVuc2lvbihkaW1lbnNpb246IElQaXZvdERpbWVuc2lvbiwgc29ydERpcmVjdGlvbjogU29ydGluZ0RpcmVjdGlvbik7XG4gICAgdG9nZ2xlVmFsdWUodmFsdWU6IElQaXZvdFZhbHVlKTtcbiAgICBtb3ZlVmFsdWUodmFsdWU6IElQaXZvdFZhbHVlLCBpbmRleD86IG51bWJlcik7XG4gICAgcm93RGltZW5zaW9uV2lkdGhUb1BpeGVscyhkaW06IElQaXZvdERpbWVuc2lvbik6IG51bWJlcjtcbiAgICBkaW1lbnNpb25zQ2hhbmdlOiBFdmVudEVtaXR0ZXI8SURpbWVuc2lvbnNDaGFuZ2U+O1xuICAgIHZhbHVlc0NoYW5nZTogRXZlbnRFbWl0dGVyPElWYWx1ZXNDaGFuZ2U+O1xuICAgIHBpdm90S2V5czogSVBpdm90S2V5cztcbiAgICBoYXNNdWx0aXBsZVZhbHVlczogYm9vbGVhbjtcbiAgICBleGNlbFN0eWxlRmlsdGVyTWF4SGVpZ2h0OiBzdHJpbmc7XG4gICAgZXhjZWxTdHlsZUZpbHRlck1pbkhlaWdodDogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBHcmlkU1ZHSWNvbiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHZhbHVlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNpemVJbmZvIHtcbiAgICB3aWR0aDogbnVtYmVyLFxuICAgIHBhZGRpbmc6IG51bWJlclxufVxuIl19
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvY29tbW9uL2dyaWQuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVdBLE9BQU8sRUFBK0MsY0FBYyxFQUE0QyxNQUFNLGVBQWUsQ0FBQztBQTRCdEksTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLElBQUksY0FBYyxDQUFXLGtCQUFrQixDQUFDLENBQUM7QUFDOUUsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxjQUFjLENBQWtCLHlCQUF5QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGaWx0ZXJNb2RlLCBHcmlkUGFnaW5nTW9kZSwgR3JpZFNlbGVjdGlvbk1vZGUsIEdyaWRTdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlLCBHcmlkU3VtbWFyeVBvc2l0aW9uIH0gZnJvbSAnLi9lbnVtcyc7XG5pbXBvcnQge1xuICAgIElTZWFyY2hJbmZvLCBJR3JpZENlbGxFdmVudEFyZ3MsIElSb3dTZWxlY3Rpb25FdmVudEFyZ3MsIElDb2x1bW5TZWxlY3Rpb25FdmVudEFyZ3MsIElHcmlkRWRpdEV2ZW50QXJncyxcbiAgICBJUGluQ29sdW1uQ2FuY2VsbGFibGVFdmVudEFyZ3MsIElDb2x1bW5WaXNpYmlsaXR5Q2hhbmdlZEV2ZW50QXJncywgSUNvbHVtblZpc2liaWxpdHlDaGFuZ2luZ0V2ZW50QXJncyxcbiAgICBJUm93RHJhZ0VuZEV2ZW50QXJncywgSUNvbHVtbk1vdmluZ1N0YXJ0RXZlbnRBcmdzLCBJQ29sdW1uTW92aW5nRW5kRXZlbnRBcmdzLFxuICAgIElHcmlkRWRpdERvbmVFdmVudEFyZ3MsIElSb3dEYXRhRXZlbnRBcmdzLCBJR3JpZEtleWRvd25FdmVudEFyZ3MsIElSb3dEcmFnU3RhcnRFdmVudEFyZ3MsXG4gICAgSUNvbHVtbk1vdmluZ0V2ZW50QXJncywgSVBpbkNvbHVtbkV2ZW50QXJncyxcbiAgICBJQWN0aXZlTm9kZUNoYW5nZUV2ZW50QXJncyxcbiAgICBJQ2VsbFBvc2l0aW9uLCBJRmlsdGVyaW5nRXZlbnRBcmdzLCBJQ29sdW1uUmVzaXplRXZlbnRBcmdzLCBJUm93VG9nZ2xlRXZlbnRBcmdzLCBJR3JpZFRvb2xiYXJFeHBvcnRFdmVudEFyZ3Ncbn0gZnJvbSAnLi4vY29tbW9uL2V2ZW50cyc7XG5pbXBvcnQgeyBEaXNwbGF5RGVuc2l0eSwgSURlbnNpdHlDaGFuZ2VkRXZlbnRBcmdzIH0gZnJvbSAnLi4vLi4vY29yZS9kaXNwbGF5RGVuc2l0eSc7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbmplY3Rpb25Ub2tlbiwgUXVlcnlMaXN0LCBUZW1wbGF0ZVJlZiwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLCBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1leHByZXNzaW9ucy10cmVlJztcbmltcG9ydCB7IElHcmlkUmVzb3VyY2VTdHJpbmdzIH0gZnJvbSAnLi4vLi4vY29yZS9pMThuL2dyaWQtcmVzb3VyY2VzJztcbmltcG9ydCB7IElHcm91cGluZ0V4cHJlc3Npb24gfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZ3JvdXBpbmctZXhwcmVzc2lvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUdyb3VwQnlSZWNvcmQgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZ3JvdXBieS1yZWNvcmQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElHcm91cEJ5RXhwYW5kU3RhdGUgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZ3JvdXBieS1leHBhbmQtc3RhdGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IElneFBhZ2luYXRvckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BhZ2luYXRvci9wYWdpbmF0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IElneENlbGwsIElneEVkaXRSb3cgfSBmcm9tICcuL2NydWQuc2VydmljZSc7XG5pbXBvcnQgeyBHcmlkU2VsZWN0aW9uUmFuZ2UgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IEZpbHRlcmluZ0xvZ2ljIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1leHByZXNzaW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJRmlsdGVyaW5nU3RyYXRlZ3kgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLXN0cmF0ZWd5JztcbmltcG9ydCB7IERyb3BQb3NpdGlvbiwgSWd4Q29sdW1uTW92aW5nU2VydmljZSB9IGZyb20gJy4uL21vdmluZy9tb3Zpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hPdmVybGF5T3V0bGV0RGlyZWN0aXZlLCBJZ3hUb2dnbGVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3RvZ2dsZS90b2dnbGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElUcmVlR3JpZFJlY29yZCB9IGZyb20gJy4uL3RyZWUtZ3JpZC90cmVlLWdyaWQuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBTdGF0ZSwgVHJhbnNhY3Rpb24sIFRyYW5zYWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyYW5zYWN0aW9uL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IEdyaWRDb2x1bW5EYXRhVHlwZSB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9kYXRhLXV0aWwnO1xuaW1wb3J0IHsgSWd4RmlsdGVyaW5nT3BlcmFuZCB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctY29uZGl0aW9uJztcbmltcG9ydCB7IElDb2x1bW5QaXBlQXJncywgTVJMUmVzaXplQ29sdW1uSW5mbyB9IGZyb20gJy4uL2NvbHVtbnMvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJZ3hTdW1tYXJ5UmVzdWx0IH0gZnJvbSAnLi4vc3VtbWFyaWVzL2dyaWQtc3VtbWFyeSc7XG5pbXBvcnQgeyBJU29ydGluZ0V4cHJlc3Npb24sIElTb3J0aW5nU3RyYXRlZ3ksIFNvcnRpbmdEaXJlY3Rpb24gfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvc29ydGluZy1zdHJhdGVneSc7XG5pbXBvcnQgeyBJR3JpZEdyb3VwaW5nU3RyYXRlZ3ksIElHcmlkU29ydGluZ1N0cmF0ZWd5IH0gZnJvbSAnLi9zdHJhdGVneSc7XG5pbXBvcnQgeyBJRm9yT2ZTdGF0ZSwgSWd4R3JpZEZvck9mRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9mb3Itb2YvZm9yX29mLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBPdmVybGF5U2V0dGluZ3MgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vdmVybGF5L3V0aWxpdGllcyc7XG5pbXBvcnQgeyBJUGlubmluZ0NvbmZpZyB9IGZyb20gJy4uL2dyaWQuY29tbW9uJztcbmltcG9ydCB7IElEaW1lbnNpb25zQ2hhbmdlLCBJUGl2b3RDb25maWd1cmF0aW9uLCBJUGl2b3REaW1lbnNpb24sIElQaXZvdEtleXMsIElQaXZvdFZhbHVlLCBJVmFsdWVzQ2hhbmdlLCBQaXZvdERpbWVuc2lvblR5cGUgfSBmcm9tICcuLi9waXZvdC1ncmlkL3Bpdm90LWdyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElEYXRhQ2xvbmVTdHJhdGVneSB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9kYXRhLWNsb25lLXN0cmF0ZWd5JztcblxuZXhwb3J0IGNvbnN0IElHWF9HUklEX0JBU0UgPSBuZXcgSW5qZWN0aW9uVG9rZW48R3JpZFR5cGU+KCdJZ3hHcmlkQmFzZVRva2VuJyk7XG5leHBvcnQgY29uc3QgSUdYX0dSSURfU0VSVklDRV9CQVNFID0gbmV3IEluamVjdGlvblRva2VuPEdyaWRTZXJ2aWNlVHlwZT4oJ0lneEdyaWRTZXJ2aWNlQmFzZVRva2VuJyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBhdGhTZWdtZW50IHtcbiAgICByb3dJRDogYW55O1xuICAgIHJvd0lzbGFuZEtleTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElHcmlkRGF0YUJpbmRhYmxlIHtcbiAgICBkYXRhOiBhbnlbXSB8IG51bGw7XG4gICAgZmlsdGVyZWREYXRhOiBhbnlbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDZWxsVHlwZSB7XG4gICAgdmFsdWU6IGFueTtcbiAgICBlZGl0VmFsdWU6IGFueTtcbiAgICBzZWxlY3RlZDogYm9vbGVhbjtcbiAgICBhY3RpdmU6IGJvb2xlYW47XG4gICAgZWRpdGFibGU6IGJvb2xlYW47XG4gICAgZWRpdE1vZGU6IGJvb2xlYW47XG4gICAgbmF0aXZlRWxlbWVudD86IEhUTUxFbGVtZW50O1xuICAgIGNvbHVtbjogQ29sdW1uVHlwZTtcbiAgICByb3c6IFJvd1R5cGU7XG4gICAgZ3JpZDogR3JpZFR5cGU7XG4gICAgaWQ/OiB7IHJvd0lEOiBhbnk7IGNvbHVtbklEOiBudW1iZXI7IHJvd0luZGV4OiBudW1iZXIgfTtcbiAgICBjZWxsSUQ/OiBhbnk7XG4gICAgcmVhZG9ubHk/OiBib29sZWFuO1xuICAgIHRpdGxlPzogYW55O1xuICAgIHdpZHRoOiBzdHJpbmc7XG4gICAgdmlzaWJsZUNvbHVtbkluZGV4PzogbnVtYmVyO1xuICAgIHVwZGF0ZTogKHZhbHVlOiBhbnkpID0+IHZvaWQ7XG4gICAgc2V0RWRpdE1vZGU/KHZhbHVlOiBib29sZWFuKTogdm9pZDtcbiAgICBjYWxjdWxhdGVTaXplVG9GaXQ/KHJhbmdlOiBhbnkpOiBudW1iZXI7XG4gICAgYWN0aXZhdGU/KGV2ZW50OiBGb2N1c0V2ZW50IHwgS2V5Ym9hcmRFdmVudCk6IHZvaWQ7XG4gICAgb25Eb3VibGVDbGljaz8oZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkO1xuICAgIG9uQ2xpY2s/KGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSb3dUeXBlIHtcbiAgICBuYXRpdmVFbGVtZW50PzogSFRNTEVsZW1lbnQ7XG4gICAgaW5kZXg6IG51bWJlcjtcbiAgICB2aWV3SW5kZXg6IG51bWJlcjtcbiAgICBpc0dyb3VwQnlSb3c/OiBib29sZWFuO1xuICAgIGlzU3VtbWFyeVJvdz86IGJvb2xlYW47XG4gICAgc3VtbWFyaWVzPzogTWFwPHN0cmluZywgSWd4U3VtbWFyeVJlc3VsdFtdPjtcbiAgICBncm91cFJvdz86IElHcm91cEJ5UmVjb3JkO1xuICAgIGtleT86IGFueTtcbiAgICBkYXRhPzogYW55O1xuICAgIGNlbGxzPzogUXVlcnlMaXN0PENlbGxUeXBlPiB8IENlbGxUeXBlW107XG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIHZpcnREaXJSb3c/OiBJZ3hHcmlkRm9yT2ZEaXJlY3RpdmU8YW55PjtcbiAgICBwaW5uZWQ/OiBib29sZWFuO1xuICAgIHNlbGVjdGVkPzogYm9vbGVhbjtcbiAgICBleHBhbmRlZD86IGJvb2xlYW47XG4gICAgZGVsZXRlZD86IGJvb2xlYW47XG4gICAgaW5FZGl0TW9kZT86IGJvb2xlYW47XG4gICAgY2hpbGRyZW4/OiBSb3dUeXBlW107XG4gICAgcGFyZW50PzogUm93VHlwZTtcbiAgICBoYXNDaGlsZHJlbj86IGJvb2xlYW47XG4gICAgdHJlZVJvdz86IElUcmVlR3JpZFJlY29yZDtcbiAgICBhZGRSb3dVST86IGJvb2xlYW47XG4gICAgZm9jdXNlZD86IGJvb2xlYW47XG4gICAgZ3JpZDogR3JpZFR5cGU7XG4gICAgb25Sb3dTZWxlY3RvckNsaWNrPzogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB2b2lkO1xuICAgIG9uQ2xpY2s/OiAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHZvaWQ7XG4gICAgYmVnaW5BZGRSb3c/OiAoKSA9PiB2b2lkO1xuICAgIHVwZGF0ZT86ICh2YWx1ZTogYW55KSA9PiB2b2lkO1xuICAgIGRlbGV0ZT86ICgpID0+IGFueTtcbiAgICBwaW4/OiAoKSA9PiB2b2lkO1xuICAgIHVucGluPzogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb2x1bW5UeXBlIHtcbiAgICBncmlkOiBHcmlkVHlwZTtcbiAgICBjaGlsZHJlbjogUXVlcnlMaXN0PENvbHVtblR5cGU+O1xuICAgIGFsbENoaWxkcmVuOiBDb2x1bW5UeXBlW107XG4gICAgLy8gVFlQRVxuICAgIGhlYWRlckdyb3VwOiBhbnk7XG4gICAgLy8gVFlQRVxuICAgIGhlYWRlckNlbGw6IGFueTtcblxuICAgIGhlYWRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIGNvbGxhcHNpYmxlSW5kaWNhdG9yVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIGhlYWRlckNsYXNzZXM6IGFueTtcbiAgICBoZWFkZXJTdHlsZXM6IGFueTtcbiAgICBoZWFkZXJHcm91cENsYXNzZXM6IGFueTtcbiAgICBoZWFkZXJHcm91cFN0eWxlczogYW55O1xuXG4gICAgY2FsY1dpZHRoOiBhbnk7XG4gICAgbWluV2lkdGhQeDogbnVtYmVyO1xuICAgIG1heFdpZHRoUHg6IG51bWJlcjtcbiAgICBtaW5XaWR0aDogc3RyaW5nO1xuICAgIG1heFdpZHRoOiBzdHJpbmc7XG4gICAgbWluV2lkdGhQZXJjZW50OiBudW1iZXI7XG4gICAgbWF4V2lkdGhQZXJjZW50OiBudW1iZXI7XG5cbiAgICBmaWVsZDogc3RyaW5nO1xuICAgIGhlYWRlcj86IHN0cmluZztcbiAgICBpbmRleDogbnVtYmVyO1xuICAgIGRhdGFUeXBlOiBHcmlkQ29sdW1uRGF0YVR5cGU7XG4gICAgaW5saW5lRWRpdG9yVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgdmlzaWJsZUluZGV4OiBudW1iZXI7XG4gICAgY29sbGFwc2libGU/OiBib29sZWFuO1xuICAgIGVkaXRhYmxlOiBib29sZWFuO1xuICAgIHJlc2l6YWJsZTogYm9vbGVhbjtcbiAgICBzZWFyY2hhYmxlOiBib29sZWFuO1xuICAgIGNvbHVtbkdyb3VwOiBib29sZWFuO1xuICAgIC8qKiBAZGVwcmVjYXRlZCBpbiB2ZXJzaW9uIDEzLjEuMC4gVXNlIGBJZ3hHcmlkQ29tcG9uZW50Lm1vdmluZ2AgaW5zdGVhZC4qL1xuICAgIG1vdmFibGU6IGJvb2xlYW47XG4gICAgZ3JvdXBhYmxlOiBib29sZWFuO1xuICAgIHNvcnRhYmxlOiBib29sZWFuO1xuICAgIGZpbHRlcmFibGU6IGJvb2xlYW47XG4gICAgaGlkZGVuOiBib29sZWFuO1xuICAgIGRpc2FibGVQaW5uaW5nOiBib29sZWFuO1xuICAgIGRpc2FibGVIaWRpbmc6IGJvb2xlYW47XG4gICAgc29ydFN0cmF0ZWd5OiBJU29ydGluZ1N0cmF0ZWd5O1xuICAgIHNvcnRpbmdJZ25vcmVDYXNlOiBib29sZWFuO1xuICAgIGZpbHRlckNlbGw6IGFueTtcbiAgICBmaWx0ZXJzOiBJZ3hGaWx0ZXJpbmdPcGVyYW5kO1xuICAgIGZpbHRlcmluZ0lnbm9yZUNhc2U6IGJvb2xlYW47XG4gICAgZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlOiBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU7XG4gICAgaGFzU3VtbWFyeTogYm9vbGVhbjtcbiAgICBzdW1tYXJpZXM6IGFueTtcbiAgICBzdW1tYXJ5VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgcGlubmVkOiBib29sZWFuO1xuICAgIGV4cGFuZGVkOiBib29sZWFuO1xuICAgIHNlbGVjdGVkOiBib29sZWFuO1xuICAgIHNlbGVjdGFibGU6IGJvb2xlYW47XG4gICAgY29sdW1uTGF5b3V0OiBib29sZWFuO1xuICAgIGxldmVsOiBudW1iZXI7XG4gICAgcm93U3RhcnQ6IG51bWJlcjtcbiAgICByb3dFbmQ6IG51bWJlcjtcbiAgICBjb2xTdGFydDogbnVtYmVyO1xuICAgIGNvbEVuZDogbnVtYmVyO1xuICAgIGdyaWRSb3dTcGFuOiBudW1iZXI7XG4gICAgZ3JpZENvbHVtblNwYW46IG51bWJlcjtcbiAgICBjb2x1bW5MYXlvdXRDaGlsZDogYm9vbGVhbjtcbiAgICB3aWR0aDogc3RyaW5nO1xuICAgIHRvcExldmVsUGFyZW50PzogQ29sdW1uVHlwZTtcbiAgICBwYXJlbnQ/OiBDb2x1bW5UeXBlO1xuICAgIHBpcGVBcmdzOiBJQ29sdW1uUGlwZUFyZ3M7XG4gICAgaGFzTmVzdGVkUGF0aDogYm9vbGVhbjtcbiAgICBkZWZhdWx0VGltZUZvcm1hdDogc3RyaW5nO1xuICAgIGRlZmF1bHREYXRlVGltZUZvcm1hdDogc3RyaW5nO1xuICAgIGFkZGl0aW9uYWxUZW1wbGF0ZUNvbnRleHQ6IGFueTtcbiAgICBpc0xhc3RQaW5uZWQ6IGJvb2xlYW47XG4gICAgaXNGaXJzdFBpbm5lZDogYm9vbGVhbjtcbiAgICBhcHBseVNlbGVjdGFibGVDbGFzczogYm9vbGVhbjtcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIGdyb3VwaW5nQ29tcGFyZXI6IChhOiBhbnksIGI6IGFueSkgPT4gbnVtYmVyO1xuXG4gICAgZmlsdGVyQ2VsbFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgbW92ZShpbmRleDogbnVtYmVyKTogdm9pZDtcbiAgICBnZXRBdXRvU2l6ZSgpOiBzdHJpbmc7XG4gICAgZ2V0UmVzaXphYmxlQ29sVW5kZXJFbmQoKTogTVJMUmVzaXplQ29sdW1uSW5mb1tdO1xuICAgIGdldENlbGxXaWR0aCgpOiBzdHJpbmc7XG4gICAgZ2V0R3JpZFRlbXBsYXRlKGlzUm93OiBib29sZWFuKTogc3RyaW5nO1xuICAgIHRvZ2dsZVZpc2liaWxpdHkodmFsdWU/OiBib29sZWFuKTogdm9pZDtcbiAgICBmb3JtYXR0ZXIodmFsdWU6IGFueSwgcm93RGF0YT86IGFueSk6IGFueTtcbiAgICBwb3B1bGF0ZVZpc2libGVJbmRleGVzPygpOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdyaWRTZXJ2aWNlVHlwZSB7XG5cbiAgICBncmlkOiBHcmlkVHlwZTtcbiAgICBjcnVkU2VydmljZTogYW55O1xuICAgIGNtczogSWd4Q29sdW1uTW92aW5nU2VydmljZTtcblxuICAgIGdldF9kYXRhKCk6IGFueVtdO1xuICAgIGdldF9hbGxfZGF0YShpbmNsdWRlVHJhbnNhY3Rpb25zPzogYm9vbGVhbik6IGFueVtdO1xuICAgIGdldF9jb2x1bW5fYnlfbmFtZShuYW1lOiBzdHJpbmcpOiBDb2x1bW5UeXBlO1xuICAgIGdldFJvd0RhdGEoaWQ6IGFueSk6IGFueTtcbiAgICBnZXRfcmVjX2J5X2lkKGlkOiBhbnkpOiBhbnk7XG4gICAgZ2V0X3Jvd19pZChyb3dEYXRhOiBhbnkpOiBhbnk7XG4gICAgZ2V0X3Jvd19ieV9pbmRleChyb3dTZWxlY3RvcjogYW55KTogUm93VHlwZTtcbiAgICBnZXRfcm93X2J5X2tleShyb3dTZWxlY3RvcjogYW55KTogUm93VHlwZTtcbiAgICBnZXRfcmVjX2luZGV4X2J5X2lkKHBrOiBzdHJpbmcgfCBudW1iZXIsIGRhdGFDb2xsZWN0aW9uPzogYW55W10pOiBudW1iZXI7XG4gICAgZ2V0X3JlY19pZF9ieV9pbmRleChpbmRleDogbnVtYmVyLCBkYXRhQ29sbGVjdGlvbj86IGFueVtdKTogYW55O1xuICAgIGdldF9yb3dfaW5kZXhfaW5fZGF0YShyb3dJRDogYW55LCBkYXRhQ29sbGVjdGlvbj86IGFueVtdKTogbnVtYmVyO1xuICAgIGdldF9jZWxsX2J5X2tleShyb3dTZWxlY3RvcjogYW55LCBmaWVsZDogc3RyaW5nKTogQ2VsbFR5cGU7XG4gICAgZ2V0X2NlbGxfYnlfaW5kZXgocm93SW5kZXg6IG51bWJlciwgY29sdW1uSUQ6IG51bWJlciB8IHN0cmluZyk6IENlbGxUeXBlO1xuICAgIGdldF9jZWxsX2J5X3Zpc2libGVfaW5kZXgocm93SW5kZXg6IG51bWJlciwgY29sdW1uSW5kZXg6IG51bWJlcik7XG4gICAgc2V0X2dyb3Vwcm93X2V4cGFuc2lvbl9zdGF0ZT8oZ3JvdXBSb3c6IElHcm91cEJ5UmVjb3JkLCB2YWx1ZTogYm9vbGVhbik6IHZvaWQ7XG4gICAgcm93X2RlbGV0ZWRfdHJhbnNhY3Rpb24oaWQ6IGFueSk6IGJvb2xlYW47XG4gICAgYWRkUm93VG9EYXRhKHJvd0RhdGE6IGFueSwgcGFyZW50SUQ/OiBhbnkpOiB2b2lkO1xuICAgIGRlbGV0ZVJvd0J5SWQoaWQ6IGFueSk6IGFueTtcbiAgICBnZXRfcm93X2V4cGFuc2lvbl9zdGF0ZShpZDogYW55KTogYm9vbGVhbjtcbiAgICBzZXRfcm93X2V4cGFuc2lvbl9zdGF0ZShpZDogYW55LCBleHBhbmRlZDogYm9vbGVhbiwgZXZlbnQ/OiBFdmVudCk6IHZvaWQ7XG4gICAgZ2V0X3N1bW1hcnlfZGF0YSgpOiBhbnlbXTtcblxuICAgIHByZXBhcmVfc29ydGluZ19leHByZXNzaW9uKHN0YXRlQ29sbGVjdGlvbnM6IEFycmF5PEFycmF5PGFueT4+LCBleHByZXNzaW9uOiBJU29ydGluZ0V4cHJlc3Npb24pOiB2b2lkO1xuICAgIHNvcnQoZXhwcmVzc2lvbjogSVNvcnRpbmdFeHByZXNzaW9uKTogdm9pZDtcbiAgICBzb3J0X211bHRpcGxlKGV4cHJlc3Npb25zOiBJU29ydGluZ0V4cHJlc3Npb25bXSk6IHZvaWQ7XG4gICAgY2xlYXJfc29ydChmaWVsZE5hbWU6IHN0cmluZyk6IHZvaWQ7XG5cbiAgICBmaWx0ZXJEYXRhQnlFeHByZXNzaW9ucyhleHByZXNzaW9uc1RyZWU6IElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpOiBhbnlbXTtcbiAgICBzb3J0RGF0YUJ5RXhwcmVzc2lvbnMoZGF0YTogYW55W10sIGV4cHJlc3Npb25zOiBJU29ydGluZ0V4cHJlc3Npb25bXSk6IGFueVtdO1xuXG4gICAgdXBkYXRlX2NlbGwoY2VsbDogSWd4Q2VsbCk6IElHcmlkRWRpdEV2ZW50QXJncztcbiAgICB1cGRhdGVfcm93KHJvdzogSWd4RWRpdFJvdywgdmFsdWU6IGFueSwgZXZlbnQ/OiBFdmVudCk6IElHcmlkRWRpdEV2ZW50QXJncztcblxuICAgIGV4cGFuZF9wYXRoX3RvX3JlY29yZD8ocmVjb3JkOiBJVHJlZUdyaWRSZWNvcmQpOiB2b2lkO1xuICAgIGdldF9zZWxlY3RlZF9jaGlsZHJlbj8ocmVjb3JkOiBJVHJlZUdyaWRSZWNvcmQsIHNlbGVjdGVkUm93SURzOiBhbnlbXSk6IHZvaWQ7XG4gICAgZ2V0X2dyb3VwQnlfcmVjb3JkX2lkPyhnUm93OiBJR3JvdXBCeVJlY29yZCk6IHN0cmluZztcbiAgICByZW1vdmVfZ3JvdXBpbmdfZXhwcmVzc2lvbj8oZmllbGROYW1lOiBzdHJpbmcpOiB2b2lkO1xuICAgIGNsZWFyX2dyb3VwYnk/KGZpZWxkOiBzdHJpbmcgfCBhbnkpOiB2b2lkO1xuICAgIGdldFBhcmVudFJvd0lkPyhjaGlsZDogR3JpZFR5cGUpOiBhbnk7XG4gICAgZ2V0Q2hpbGRHcmlkcz8oaW5EZXB0aD86IGJvb2xlYW4pOiBHcmlkVHlwZVtdO1xuICAgIGdldENoaWxkR3JpZD8ocGF0aDogSVBhdGhTZWdtZW50W10pOiBHcmlkVHlwZTtcblxuICAgIHVuc2V0Q2hpbGRSb3dJc2xhbmQ/KHJvd0lzbGFuZDogR3JpZFR5cGUpOiB2b2lkO1xuICAgIHJlZ2lzdGVyQ2hpbGRSb3dJc2xhbmQ/KHJvd0lzbGFuZDogR3JpZFR5cGUpOiB2b2lkO1xufVxuXG5cbi8qKlxuICogQW4gaW50ZXJmYWNlIGRlc2NyaWJpbmcgYSBHcmlkIHR5cGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcmlkVHlwZSBleHRlbmRzIElHcmlkRGF0YUJpbmRhYmxlIHtcbiAgICBkaXNwbGF5RGVuc2l0eTogRGlzcGxheURlbnNpdHk7XG4gICAgbG9jYWxlOiBzdHJpbmc7XG4gICAgcmVzb3VyY2VTdHJpbmdzOiBJR3JpZFJlc291cmNlU3RyaW5ncztcbiAgICBuYXRpdmVFbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgICByb3dFZGl0YWJsZTogYm9vbGVhbjtcbiAgICByb290U3VtbWFyaWVzRW5hYmxlZDogYm9vbGVhbjtcbiAgICBhbGxvd0ZpbHRlcmluZzogYm9vbGVhbjtcbiAgICByb3dEcmFnZ2FibGU6IGJvb2xlYW47XG4gICAgcHJpbWFyeUtleTogYW55O1xuICAgIGlkOiBzdHJpbmc7XG4gICAgcmVuZGVyZWRSb3dIZWlnaHQ6IG51bWJlcjtcbiAgICBwaXBlVHJpZ2dlcjogbnVtYmVyO1xuICAgIHN1bW1hcnlQaXBlVHJpZ2dlcjogbnVtYmVyO1xuICAgIGZpbHRlcmluZ1BpcGVUcmlnZ2VyOiBudW1iZXI7XG4gICAgaGFzQ29sdW1uTGF5b3V0czogYm9vbGVhbjtcbiAgICBtb3Zpbmc6IGJvb2xlYW47XG4gICAgaXNMb2FkaW5nOiBib29sZWFuO1xuICAgIGRhdGFDbG9uZVN0cmF0ZWd5OiBJRGF0YUNsb25lU3RyYXRlZ3k7XG5cbiAgICBncmlkQVBJOiBHcmlkU2VydmljZVR5cGU7XG5cbiAgICBmaWx0ZXJNb2RlOiBGaWx0ZXJNb2RlO1xuXG4gICAgLy8gVFlQRVxuICAgIHRoZWFkUm93OiBhbnk7XG4gICAgZ3JvdXBBcmVhOiBhbnk7XG4gICAgZmlsdGVyQ2VsbExpc3Q6IGFueVtdO1xuICAgIGZpbHRlcmluZ1JvdzogYW55O1xuICAgIGFjdGlvblN0cmlwOiBhbnk7XG4gICAgcmVzaXplTGluZTogYW55O1xuXG4gICAgdGZvb3Q6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICAgIHBhZ2luYXRvcjogSWd4UGFnaW5hdG9yQ29tcG9uZW50O1xuICAgIHBhZ2luYXRvckxpc3Q/OiBRdWVyeUxpc3Q8SWd4UGFnaW5hdG9yQ29tcG9uZW50PjtcbiAgICBjcnVkU2VydmljZTogYW55O1xuICAgIHN1bW1hcnlTZXJ2aWNlOiBhbnk7XG5cblxuXG4gICAgdmlydHVhbGl6YXRpb25TdGF0ZTogSUZvck9mU3RhdGU7XG4gICAgLy8gVFlQRVxuICAgIHNlbGVjdGlvblNlcnZpY2U6IGFueTtcbiAgICBuYXZpZ2F0aW9uOiBhbnk7XG4gICAgZmlsdGVyaW5nU2VydmljZTogYW55O1xuICAgIG91dGxldDogYW55O1xuICAgIGhhc01vdmFibGVDb2x1bW5zOiBib29sZWFuO1xuICAgIGlzUm93U2VsZWN0YWJsZTogYm9vbGVhbjtcbiAgICBzaG93Um93U2VsZWN0b3JzOiBib29sZWFuO1xuICAgIGlzUGlubmluZ1RvU3RhcnQ6IGJvb2xlYW47XG4gICAgY29sdW1uSW5EcmFnOiBhbnk7XG4gICAgcGlubmVkV2lkdGg6IG51bWJlcjtcbiAgICB1bnBpbm5lZFdpZHRoOiBudW1iZXI7XG4gICAgc3VtbWFyaWVzTWFyZ2luOiBudW1iZXI7XG4gICAgaGVhZFNlbGVjdG9yQmFzZUFyaWFMYWJlbDogc3RyaW5nO1xuXG4gICAgaGFzVmlzaWJsZUNvbHVtbnM6IGJvb2xlYW47XG4gICAgaGFzRXhwYW5kYWJsZUNoaWxkcmVuPzogYm9vbGVhbjtcbiAgICBzaG93RXhwYW5kQWxsPzogYm9vbGVhbjtcblxuICAgIGhpZGRlbkNvbHVtbnNDb3VudDogbnVtYmVyO1xuICAgIHBpbm5lZENvbHVtbnNDb3VudDogbnVtYmVyO1xuXG4gICAgaWNvblRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBncm91cFJvd1RlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBncm91cEJ5Um93U2VsZWN0b3JUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gICAgcm93TG9hZGluZ0luZGljYXRvclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBoZWFkU2VsZWN0b3JUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICByb3dTZWxlY3RvclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIHNvcnRIZWFkZXJJY29uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgc29ydEFzY2VuZGluZ0hlYWRlckljb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBzb3J0RGVzY2VuZGluZ0hlYWRlckljb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBoZWFkZXJDb2xsYXBzZUluZGljYXRvclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIGhlYWRlckV4cGFuZEluZGljYXRvclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIGRyYWdJbmRpY2F0b3JJY29uVGVtcGxhdGU6IGFueTtcbiAgICBkcmFnSW5kaWNhdG9ySWNvbkJhc2U6IGFueTtcbiAgICBkaXNhYmxlVHJhbnNpdGlvbnM6IGJvb2xlYW47XG4gICAgY3VycmVuY3lQb3NpdGlvbkxlZnQ6IGJvb2xlYW47XG5cbiAgICBjb2x1bW5XaWR0aFNldEJ5VXNlcjogYm9vbGVhbjtcbiAgICBoZWFkZXJGZWF0dXJlc1dpZHRoOiBudW1iZXI7XG4gICAgY2FsY0hlaWdodDogbnVtYmVyO1xuICAgIGNhbGNXaWR0aDogbnVtYmVyO1xuICAgIG91dGVyV2lkdGg6IG51bWJlcjtcbiAgICByb3dIZWlnaHQ6IG51bWJlcjtcbiAgICBtdWx0aVJvd0xheW91dFJvd1NpemU6IG51bWJlcjtcbiAgICBkZWZhdWx0SGVhZGVyR3JvdXBNaW5XaWR0aDogYW55O1xuICAgIG1heExldmVsSGVhZGVyRGVwdGg6IG51bWJlcjtcbiAgICBkZWZhdWx0Um93SGVpZ2h0OiBudW1iZXI7XG4gICAgX2Jhc2VGb250U2l6ZT86IG51bWJlcjtcbiAgICBzY3JvbGxTaXplOiBudW1iZXI7XG5cbiAgICBwaW5uaW5nOiBJUGlubmluZ0NvbmZpZztcbiAgICBleHBhbnNpb25TdGF0ZXM6IE1hcDxhbnksIGJvb2xlYW4+O1xuICAgIHBhcmVudFZpcnREaXI6IGFueTtcbiAgICB0Ym9keTogYW55O1xuICAgIHZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyOiBhbnk7XG4gICAgZGF0YVJvd0xpc3Q6IGFueTtcbiAgICByb3dMaXN0OiBhbnk7XG4gICAgY29sdW1uTGlzdDogUXVlcnlMaXN0PENvbHVtblR5cGU+O1xuICAgIGNvbHVtbnM6IENvbHVtblR5cGVbXTtcbiAgICB2aXNpYmxlQ29sdW1uczogQ29sdW1uVHlwZVtdO1xuICAgIHVucGlubmVkQ29sdW1uczogQ29sdW1uVHlwZVtdO1xuICAgIHBpbm5lZENvbHVtbnM6IENvbHVtblR5cGVbXTtcbiAgICBoZWFkZXJDZWxsTGlzdDogYW55W107XG4gICAgaGVhZGVyR3JvdXBzOiBhbnlbXTtcbiAgICBoZWFkZXJHcm91cHNMaXN0OiBhbnlbXTtcbiAgICBzdW1tYXJpZXNSb3dMaXN0OiBhbnk7XG4gICAgaGVhZGVyQ29udGFpbmVyOiBhbnk7XG4gICAgaXNDZWxsU2VsZWN0YWJsZTogYm9vbGVhbjtcbiAgICBpc011bHRpUm93U2VsZWN0aW9uRW5hYmxlZDogYm9vbGVhbjtcbiAgICBoYXNQaW5uZWRSZWNvcmRzOiBib29sZWFuO1xuICAgIHBpbm5lZFJlY29yZHNDb3VudDogbnVtYmVyO1xuICAgIHBpbm5lZFJlY29yZHM6IGFueVtdO1xuICAgIHVucGlubmVkUmVjb3JkczogYW55W107XG4gICAgcGlubmVkRGF0YVZpZXc6IGFueVtdO1xuICAgIHBpbm5lZFJvd3M6IGFueVtdO1xuICAgIGRhdGFWaWV3OiBhbnlbXTtcbiAgICBfZmlsdGVyZWRVbnBpbm5lZERhdGE6IGFueVtdO1xuICAgIF9maWx0ZXJlZFNvcnRlZFVucGlubmVkRGF0YTogYW55W107XG4gICAgZmlsdGVyZWRTb3J0ZWREYXRhOiBhbnlbXTtcbiAgICBkYXRhV2l0aEFkZGVkSW5UcmFuc2FjdGlvblJvd3M6IGFueVtdO1xuICAgIHRyYW5zYWN0aW9uczogVHJhbnNhY3Rpb25TZXJ2aWNlPFRyYW5zYWN0aW9uLCBTdGF0ZT47XG4gICAgZGVmYXVsdFN1bW1hcnlIZWlnaHQ6IG51bWJlcjtcbiAgICBzdW1tYXJ5Um93SGVpZ2h0OiBudW1iZXI7XG4gICAgcm93RWRpdGluZ092ZXJsYXk6IElneFRvZ2dsZURpcmVjdGl2ZTtcbiAgICB0b3RhbFJvd3NDb3VudEFmdGVyRmlsdGVyOiBudW1iZXI7XG4gICAgX3RvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gICAgcGFnaW5nTW9kZTogR3JpZFBhZ2luZ01vZGU7XG4gICAgcGFnaW5nU3RhdGU6IGFueTtcblxuICAgIHJvd0VkaXRUYWJzOiBhbnk7XG4gICAgbGFzdFNlYXJjaEluZm86IElTZWFyY2hJbmZvO1xuICAgIHBhZ2U6IG51bWJlcjtcbiAgICBwZXJQYWdlOiBudW1iZXI7XG4gICAgZHJhZ1Jvd0lEOiBhbnk7XG4gICAgcm93RHJhZ2dpbmc6IGJvb2xlYW47XG4gICAgZXZlblJvd0NTUzogc3RyaW5nO1xuICAgIG9kZFJvd0NTUzogc3RyaW5nO1xuXG4gICAgZmlyc3RFZGl0YWJsZUNvbHVtbkluZGV4OiBudW1iZXI7XG4gICAgbGFzdEVkaXRhYmxlQ29sdW1uSW5kZXg6IG51bWJlcjtcbiAgICBpc1Jvd1Bpbm5pbmdUb1RvcDogYm9vbGVhbjtcbiAgICBoYXNEZXRhaWxzOiBib29sZWFuO1xuICAgIGhhc1N1bW1hcml6ZWRDb2x1bW5zOiBib29sZWFuO1xuICAgIGhhc0NvbHVtbkdyb3VwczogYm9vbGVhbjtcbiAgICBoYXNFZGl0YWJsZUNvbHVtbnM6IGJvb2xlYW47XG4gICAgdW5pcXVlQ29sdW1uVmFsdWVzU3RyYXRlZ3k6IChjb2x1bW46IENvbHVtblR5cGUsIHRyZWU6IEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSwgZG9uZTogKHZhbHVlczogYW55W10pID0+IHZvaWQpID0+IHZvaWQ7XG4gICAgZ2V0SGVhZGVyQ2VsbFdpZHRoOiAoZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IElTaXplSW5mbztcblxuICAgIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWY7XG4gICAgZG9jdW1lbnQ6IERvY3VtZW50O1xuICAgIHJvd0V4cGFuZGVkSW5kaWNhdG9yVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgcm93Q29sbGFwc2VkSW5kaWNhdG9yVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgZXhjZWxTdHlsZUhlYWRlckljb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIHNlbGVjdFJvd09uQ2xpY2s6IGJvb2xlYW47XG4gICAgY2VsbFNlbGVjdGlvbjogR3JpZFNlbGVjdGlvbk1vZGU7XG4gICAgcm93U2VsZWN0aW9uOiBHcmlkU2VsZWN0aW9uTW9kZTtcbiAgICBjb2x1bW5TZWxlY3Rpb246IEdyaWRTZWxlY3Rpb25Nb2RlO1xuICAgIHN1bW1hcnlDYWxjdWxhdGlvbk1vZGU6IEdyaWRTdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlO1xuICAgIHN1bW1hcnlQb3NpdGlvbjogR3JpZFN1bW1hcnlQb3NpdGlvbjtcblxuICAgIC8vIFhYWDogV29yayBhcm91bmQgdGlsbCB3ZSBmaXhlZCB0aGUgaW5qZWN0aW9uIHRva2Vuc1xuICAgIGxhc3RDaGlsZEdyaWQ/OiBHcmlkVHlwZTtcbiAgICB0b29sYmFyT3V0bGV0PzogVmlld0NvbnRhaW5lclJlZjtcbiAgICBwYWdpbmF0b3JPdXRsZXQ/OiBWaWV3Q29udGFpbmVyUmVmO1xuICAgIGZsYXREYXRhPzogYW55W10gfCBudWxsO1xuICAgIGNoaWxkUm93PzogYW55O1xuICAgIGV4cGFuc2lvbkRlcHRoPzogbnVtYmVyO1xuICAgIGNoaWxkRGF0YUtleT86IGFueTtcbiAgICBmb3JlaWduS2V5PzogYW55O1xuICAgIGNhc2NhZGVPbkRlbGV0ZT86IGJvb2xlYW47XG4gICAgbG9hZENoaWxkcmVuT25EZW1hbmQ/OiAocGFyZW50SUQ6IGFueSwgZG9uZTogKGNoaWxkcmVuOiBhbnlbXSkgPT4gdm9pZCkgPT4gdm9pZDtcbiAgICBoYXNDaGlsZHJlbktleT86IGFueTtcbiAgICBsb2FkaW5nUm93cz86IFNldDxhbnk+O1xuICAgIHBhcmVudD86IEdyaWRUeXBlO1xuICAgIGhpZ2hsaWdodGVkUm93SUQ/OiBhbnk7XG4gICAgdXBkYXRlT25SZW5kZXI/OiBib29sZWFuO1xuICAgIGNoaWxkTGF5b3V0S2V5cz86IGFueVtdO1xuICAgIGNoaWxkTGF5b3V0TGlzdD86IFF1ZXJ5TGlzdDxhbnk+O1xuICAgIHJvb3RHcmlkPzogR3JpZFR5cGU7XG4gICAgcHJvY2Vzc2VkUm9vdFJlY29yZHM/OiBJVHJlZUdyaWRSZWNvcmRbXTtcbiAgICByb290UmVjb3Jkcz86IElUcmVlR3JpZFJlY29yZFtdO1xuICAgIHJlY29yZHM/OiBNYXA8YW55LCBJVHJlZUdyaWRSZWNvcmQ+O1xuICAgIHByb2Nlc3NlZEV4cGFuZGVkRmxhdERhdGE/OiBhbnlbXSB8IG51bGw7XG4gICAgcHJvY2Vzc2VkUmVjb3Jkcz86IE1hcDxhbnksIElUcmVlR3JpZFJlY29yZD47XG5cbiAgICBhY3RpdmVOb2RlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8SUFjdGl2ZU5vZGVDaGFuZ2VFdmVudEFyZ3M+O1xuICAgIGdyaWRLZXlkb3duOiBFdmVudEVtaXR0ZXI8SUdyaWRLZXlkb3duRXZlbnRBcmdzPjtcbiAgICBjZWxsQ2xpY2s6IEV2ZW50RW1pdHRlcjxJR3JpZENlbGxFdmVudEFyZ3M+O1xuICAgIGRvdWJsZUNsaWNrOiBFdmVudEVtaXR0ZXI8SUdyaWRDZWxsRXZlbnRBcmdzPjtcbiAgICBjb250ZXh0TWVudTogRXZlbnRFbWl0dGVyPElHcmlkQ2VsbEV2ZW50QXJncz47XG4gICAgc2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxJR3JpZENlbGxFdmVudEFyZ3M+O1xuICAgIHJhbmdlU2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxHcmlkU2VsZWN0aW9uUmFuZ2U+O1xuICAgIHJvd1NlbGVjdGlvbkNoYW5naW5nOiBFdmVudEVtaXR0ZXI8SVJvd1NlbGVjdGlvbkV2ZW50QXJncz47XG4gICAgbG9jYWxlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj47XG4gICAgZmlsdGVyaW5nOiBFdmVudEVtaXR0ZXI8SUZpbHRlcmluZ0V2ZW50QXJncz47XG4gICAgZmlsdGVyaW5nRG9uZTogRXZlbnRFbWl0dGVyPElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU+O1xuICAgIGNvbHVtblBpbm5lZDogRXZlbnRFbWl0dGVyPElQaW5Db2x1bW5FdmVudEFyZ3M+O1xuICAgIGNvbHVtblJlc2l6ZWQ6IEV2ZW50RW1pdHRlcjxJQ29sdW1uUmVzaXplRXZlbnRBcmdzPjtcbiAgICBjb2x1bW5Nb3ZpbmdFbmQ6IEV2ZW50RW1pdHRlcjxJQ29sdW1uTW92aW5nRW5kRXZlbnRBcmdzPjtcbiAgICBjb2x1bW5TZWxlY3Rpb25DaGFuZ2luZzogRXZlbnRFbWl0dGVyPElDb2x1bW5TZWxlY3Rpb25FdmVudEFyZ3M+O1xuICAgIGNvbHVtbk1vdmluZzogRXZlbnRFbWl0dGVyPElDb2x1bW5Nb3ZpbmdFdmVudEFyZ3M+O1xuICAgIGNvbHVtbk1vdmluZ1N0YXJ0OiBFdmVudEVtaXR0ZXI8SUNvbHVtbk1vdmluZ1N0YXJ0RXZlbnRBcmdzPjtcbiAgICBjb2x1bW5QaW46IEV2ZW50RW1pdHRlcjxJUGluQ29sdW1uQ2FuY2VsbGFibGVFdmVudEFyZ3M+O1xuICAgIGNvbHVtblZpc2liaWxpdHlDaGFuZ2luZzogRXZlbnRFbWl0dGVyPElDb2x1bW5WaXNpYmlsaXR5Q2hhbmdpbmdFdmVudEFyZ3M+O1xuICAgIGNvbHVtblZpc2liaWxpdHlDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8SUNvbHVtblZpc2liaWxpdHlDaGFuZ2VkRXZlbnRBcmdzPjtcbiAgICBiYXRjaEVkaXRpbmdDaGFuZ2U/OiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj47XG4gICAgb25EZW5zaXR5Q2hhbmdlZDogRXZlbnRFbWl0dGVyPElEZW5zaXR5Q2hhbmdlZEV2ZW50QXJncz47XG4gICAgcm93QWRkOiBFdmVudEVtaXR0ZXI8SUdyaWRFZGl0RXZlbnRBcmdzPjtcbiAgICByb3dBZGRlZDogRXZlbnRFbWl0dGVyPElSb3dEYXRhRXZlbnRBcmdzPjtcbiAgICByb3dBZGRlZE5vdGlmaWVyOiBTdWJqZWN0PElSb3dEYXRhRXZlbnRBcmdzPjtcbiAgICByb3dEZWxldGVkOiBFdmVudEVtaXR0ZXI8SVJvd0RhdGFFdmVudEFyZ3M+O1xuICAgIHJvd0RlbGV0ZWROb3RpZmllcjogU3ViamVjdDxJUm93RGF0YUV2ZW50QXJncz47XG4gICAgY2VsbEVkaXRFbnRlcjogRXZlbnRFbWl0dGVyPElHcmlkRWRpdEV2ZW50QXJncz47XG4gICAgY2VsbEVkaXQ6IEV2ZW50RW1pdHRlcjxJR3JpZEVkaXRFdmVudEFyZ3M+O1xuICAgIGNlbGxFZGl0RG9uZTogRXZlbnRFbWl0dGVyPElHcmlkRWRpdERvbmVFdmVudEFyZ3M+O1xuICAgIGNlbGxFZGl0RXhpdDogRXZlbnRFbWl0dGVyPElHcmlkRWRpdERvbmVFdmVudEFyZ3M+O1xuICAgIHJvd0VkaXRFbnRlcjogRXZlbnRFbWl0dGVyPElHcmlkRWRpdEV2ZW50QXJncz47XG4gICAgcm93RWRpdDogRXZlbnRFbWl0dGVyPElHcmlkRWRpdEV2ZW50QXJncz47XG4gICAgcm93RWRpdERvbmU6IEV2ZW50RW1pdHRlcjxJR3JpZEVkaXREb25lRXZlbnRBcmdzPjtcbiAgICByb3dFZGl0RXhpdDogRXZlbnRFbWl0dGVyPElHcmlkRWRpdERvbmVFdmVudEFyZ3M+O1xuICAgIHJvd0RyYWdTdGFydDogRXZlbnRFbWl0dGVyPElSb3dEcmFnU3RhcnRFdmVudEFyZ3M+O1xuICAgIHJvd0RyYWdFbmQ6IEV2ZW50RW1pdHRlcjxJUm93RHJhZ0VuZEV2ZW50QXJncz47XG4gICAgcm93VG9nZ2xlOiBFdmVudEVtaXR0ZXI8SVJvd1RvZ2dsZUV2ZW50QXJncz47XG5cbiAgICB0b29sYmFyRXhwb3J0aW5nOiBFdmVudEVtaXR0ZXI8SUdyaWRUb29sYmFyRXhwb3J0RXZlbnRBcmdzPjtcbiAgICByZW5kZXJlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgcmVzaXplTm90aWZ5OiBTdWJqZWN0PHZvaWQ+O1xuXG4gICAgc29ydFN0cmF0ZWd5OiBJR3JpZFNvcnRpbmdTdHJhdGVneTtcbiAgICBncm91cFN0cmF0ZWd5PzogSUdyaWRHcm91cGluZ1N0cmF0ZWd5O1xuICAgIGZpbHRlcmluZ0xvZ2ljOiBGaWx0ZXJpbmdMb2dpYztcbiAgICBmaWx0ZXJTdHJhdGVneTogSUZpbHRlcmluZ1N0cmF0ZWd5O1xuICAgIGFsbG93QWR2YW5jZWRGaWx0ZXJpbmc6IGJvb2xlYW47XG4gICAgc29ydGluZ0V4cHJlc3Npb25zOiBJU29ydGluZ0V4cHJlc3Npb25bXTtcbiAgICBzb3J0aW5nRXhwcmVzc2lvbnNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJU29ydGluZ0V4cHJlc3Npb25bXT47XG4gICAgZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlOiBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlO1xuICAgIGZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZUNoYW5nZTogRXZlbnRFbWl0dGVyPElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU+O1xuICAgIGFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlOiBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlO1xuICAgIGFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8SUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZT47XG5cbiAgICBiYXRjaEVkaXRpbmc6IGJvb2xlYW47XG4gICAgZ3JvdXBpbmdFeHBhbnNpb25TdGF0ZT86IElHcm91cEJ5RXhwYW5kU3RhdGVbXTtcbiAgICBncm91cGluZ0V4cHJlc3Npb25zPzogSUdyb3VwaW5nRXhwcmVzc2lvbltdO1xuICAgIGdyb3VwaW5nRXhwcmVzc2lvbnNDaGFuZ2U/OiBFdmVudEVtaXR0ZXI8SUdyb3VwaW5nRXhwcmVzc2lvbltdPjtcbiAgICBncm91cHNFeHBhbmRlZD86IGJvb2xlYW47XG4gICAgZ3JvdXBzUmVjb3Jkcz86IElHcm91cEJ5UmVjb3JkW107XG4gICAgZ3JvdXBpbmdGbGF0UmVzdWx0PzogYW55W107XG4gICAgZ3JvdXBpbmdSZXN1bHQ/OiBhbnlbXTtcbiAgICBncm91cGluZ01ldGFkYXRhPzogYW55W107XG4gICAgc2VsZWN0ZWRDZWxscz86IENlbGxUeXBlW107XG4gICAgc2VsZWN0ZWRSb3dzOiBhbnlbXTtcbiAgICBhY3RpdmVEZXNjZW5kYW50Pzogc3RyaW5nO1xuICAgIGlzUGl2b3Q/OiBib29sZWFuO1xuXG4gICAgdG9nZ2xlR3JvdXA/KGdyb3VwUm93OiBJR3JvdXBCeVJlY29yZCk6IHZvaWQ7XG4gICAgY2xlYXJHcm91cGluZz8oZmllbGQ6IHN0cmluZyk6IHZvaWQ7XG4gICAgZ3JvdXBCeT8oZXhwcmVzc2lvbjogSUdyb3VwaW5nRXhwcmVzc2lvbiB8IEFycmF5PElHcm91cGluZ0V4cHJlc3Npb24+KTogdm9pZDtcbiAgICByZXNvbHZlT3V0bGV0PygpOiBJZ3hPdmVybGF5T3V0bGV0RGlyZWN0aXZlO1xuXG4gICAgZ2V0U2VsZWN0ZWRSYW5nZXMoKTogR3JpZFNlbGVjdGlvblJhbmdlW107XG4gICAgZGVzZWxlY3RBbGxDb2x1bW5zKCk6IHZvaWQ7XG4gICAgZGVzZWxlY3RDb2x1bW5zKGNvbHVtbnM6IHN0cmluZ1tdIHwgQ29sdW1uVHlwZVtdKTogdm9pZDtcbiAgICBzZWxlY3RDb2x1bW5zKGNvbHVtbnM6IHN0cmluZ1tdIHwgQ29sdW1uVHlwZVtdKTogdm9pZDtcbiAgICBzZWxlY3RlZENvbHVtbnMoKTogQ29sdW1uVHlwZVtdO1xuICAgIHJlZnJlc2hTZWFyY2goKTogdm9pZDtcbiAgICBnZXREZWZhdWx0RXhwYW5kU3RhdGUocmVjb3JkOiBhbnkpOiBib29sZWFuO1xuICAgIHRyYWNrQ29sdW1uQ2hhbmdlcyhpbmRleDogbnVtYmVyLCBjb2x1bW46IGFueSk6IGFueTtcbiAgICBnZXRQb3NzaWJsZUNvbHVtbldpZHRoKCk6IHN0cmluZztcbiAgICByZXNldEhvcml6b250YWxWaXJ0dWFsaXphdGlvbigpOiB2b2lkO1xuICAgIGhhc1ZlcnRpY2FsU2Nyb2xsKCk6IGJvb2xlYW47XG4gICAgZ2V0VmlzaWJsZUNvbnRlbnRIZWlnaHQoKTogbnVtYmVyO1xuICAgIGdldERyYWdHaG9zdEN1c3RvbVRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsO1xuICAgIG9wZW5Sb3dPdmVybGF5KGlkOiBhbnkpOiB2b2lkO1xuICAgIG9wZW5BZHZhbmNlZEZpbHRlcmluZ0RpYWxvZygpOiB2b2lkO1xuICAgIHNob3dTbmFja2JhckZvcihpbmRleDogbnVtYmVyKTogdm9pZDtcbiAgICBnZXRDb2x1bW5CeU5hbWUobmFtZTogc3RyaW5nKTogYW55O1xuICAgIGdldENvbHVtbkJ5VmlzaWJsZUluZGV4KGluZGV4OiBudW1iZXIpOiBDb2x1bW5UeXBlO1xuICAgIGdldEhlYWRlckdyb3VwV2lkdGgoY29sdW1uOiBDb2x1bW5UeXBlKTogc3RyaW5nO1xuICAgIGdldFJvd0J5S2V5PyhrZXk6IGFueSk6IFJvd1R5cGU7XG4gICAgZ2V0Um93QnlJbmRleD8oaW5kZXg6IG51bWJlcik6IFJvd1R5cGU7XG4gICAgc2V0RmlsdGVyZWREYXRhKGRhdGE6IGFueSwgcGlubmVkOiBib29sZWFuKTogdm9pZDtcbiAgICBzZXRGaWx0ZXJlZFNvcnRlZERhdGEoZGF0YTogYW55LCBwaW5uZWQ6IGJvb2xlYW4pOiB2b2lkO1xuICAgIHNvcnQoZXhwcmVzc2lvbjogSVNvcnRpbmdFeHByZXNzaW9uIHwgSVNvcnRpbmdFeHByZXNzaW9uW10pOiB2b2lkO1xuICAgIGNsZWFyU29ydChuYW1lPzogc3RyaW5nKTogdm9pZDtcbiAgICBwaW5Sb3coaWQ6IGFueSwgaW5kZXg/OiBudW1iZXIsIHJvdz86IFJvd1R5cGUpOiBib29sZWFuO1xuICAgIHVucGluUm93KGlkOiBhbnksIHJvdz86IFJvd1R5cGUpOiBib29sZWFuO1xuICAgIGdldFVucGlubmVkSW5kZXhCeUlkKGlkOiBhbnkpOiBudW1iZXI7XG4gICAgZ2V0RW1wdHlSZWNvcmRPYmplY3RGb3IoaW5Sb3c6IFJvd1R5cGUpOiBhbnk7XG4gICAgaXNTdW1tYXJ5Um93KHJlYzogYW55KTogYm9vbGVhbjtcbiAgICBpc1JlY29yZFBpbm5lZChyZWM6IGFueSk6IGJvb2xlYW47XG4gICAgZ2V0SW5pdGlhbFBpbm5lZEluZGV4KHJlYzogYW55KTogbnVtYmVyO1xuICAgIGlzUmVjb3JkUGlubmVkQnlWaWV3SW5kZXgocm93SW5kZXg6IG51bWJlcik6IGJvb2xlYW47XG4gICAgaXNDb2x1bW5Hcm91cGVkKGZpZWxkTmFtZTogc3RyaW5nKTogYm9vbGVhbjtcbiAgICBpc0RldGFpbFJlY29yZChyZWM6IGFueSk6IGJvb2xlYW47XG4gICAgaXNHcm91cEJ5UmVjb3JkKHJlYzogYW55KTogYm9vbGVhbjtcbiAgICBpc0dob3N0UmVjb3JkKHJlYzogYW55KTogYm9vbGVhbjtcbiAgICBpc1RyZWVSb3c/KHJlYzogYW55KTogYm9vbGVhbjtcbiAgICBpc0NoaWxkR3JpZFJlY29yZD8ocmVjOiBhbnkpOiBib29sZWFuO1xuICAgIGdldENoaWxkR3JpZHM/KGluRGVwdGg/OiBib29sZWFuKTogYW55W107XG4gICAgaXNIaWVyYXJjaGljYWxSZWNvcmQ/KHJlY29yZDogYW55KTogYm9vbGVhbjtcbiAgICBjb2x1bW5Ub1Zpc2libGVJbmRleChrZXk6IHN0cmluZyB8IG51bWJlcik6IG51bWJlcjtcbiAgICBtb3ZlQ29sdW1uKGNvbHVtbjogQ29sdW1uVHlwZSwgdGFyZ2V0OiBDb2x1bW5UeXBlLCBwb3M6IERyb3BQb3NpdGlvbik6IHZvaWQ7XG4gICAgbmF2aWdhdGVUbyhyb3dJbmRleDogbnVtYmVyLCB2aXNpYmxlQ29sdW1uSW5kZXg6IG51bWJlciwgY2FsbGJhY2s/OiAoZTogYW55KSA9PiBhbnkpOiB2b2lkO1xuICAgIGdldFByZXZpb3VzQ2VsbChjdXJyUm93SW5kZXg6IG51bWJlciwgY3VyVmlzaWJsZUNvbEluZGV4OiBudW1iZXIsIGNhbGxiYWNrOiAoYzogQ29sdW1uVHlwZSkgPT4gYm9vbGVhbik6IElDZWxsUG9zaXRpb247XG4gICAgZ2V0TmV4dENlbGwoY3VyclJvd0luZGV4OiBudW1iZXIsIGN1clZpc2libGVDb2xJbmRleDogbnVtYmVyLCBjYWxsYmFjazogKGM6IENvbHVtblR5cGUpID0+IGJvb2xlYW4pOiBJQ2VsbFBvc2l0aW9uO1xuICAgIGNsZWFyQ2VsbFNlbGVjdGlvbigpOiB2b2lkO1xuICAgIHNlbGVjdFJhbmdlKHJhbmdlOiBHcmlkU2VsZWN0aW9uUmFuZ2UgfCBHcmlkU2VsZWN0aW9uUmFuZ2VbXSk6IHZvaWQ7XG4gICAgc2VsZWN0Um93cyhyb3dJRHM6IGFueVtdLCBjbGVhckN1cnJlbnRTZWxlY3Rpb24/OiBib29sZWFuKTogdm9pZDtcbiAgICBkZXNlbGVjdFJvd3Mocm93SURzOiBhbnlbXSk6IHZvaWQ7XG4gICAgc2VsZWN0QWxsUm93cyhvbmx5RmlsdGVyRGF0YT86IGJvb2xlYW4pOiB2b2lkO1xuICAgIGRlc2VsZWN0QWxsUm93cyhvbmx5RmlsdGVyRGF0YT86IGJvb2xlYW4pOiB2b2lkO1xuICAgIHNldFVwUGFnaW5hdG9yKCk6IHZvaWQ7XG4gICAgY3JlYXRlRmlsdGVyRHJvcGRvd24oY29sdW1uOiBDb2x1bW5UeXBlLCBvcHRpb25zOiBPdmVybGF5U2V0dGluZ3MpOiBhbnk7XG4gICAgLy8gVHlwZSB0byBSb3dUeXBlXG4gICAgY3JlYXRlUm93PyhpbmRleDogbnVtYmVyLCBkYXRhPzogYW55KTogUm93VHlwZTtcbiAgICBkZWxldGVSb3coaWQ6IGFueSk6IGFueTtcbiAgICBkZWxldGVSb3dCeUlkKGlkOiBhbnkpOiBhbnk7XG4gICAgY29sbGFwc2VSb3coaWQ6IGFueSk6IHZvaWQ7XG4gICAgbm90aWZ5Q2hhbmdlcyhyZXBhaW50PzogYm9vbGVhbik6IHZvaWQ7XG4gICAgcmVzZXRDb2x1bW5Db2xsZWN0aW9ucygpOiB2b2lkO1xuICAgIHRyaWdnZXJQaXBlcygpOiB2b2lkO1xuICAgIHJlcG9zaXRpb25Sb3dFZGl0aW5nT3ZlcmxheShyb3c6IFJvd1R5cGUpOiB2b2lkO1xuICAgIGNsb3NlUm93RWRpdGluZ092ZXJsYXkoKTogdm9pZDtcbiAgICByZWZsb3coKTogdm9pZDtcblxuICAgIC8vIFRPRE86IE1heWJlIG1vdmUgdGhlbSB0byBGbGF0R3JpZFR5cGUsIGJ1dCB0aGVuIHdpbGwgd2UgbmVlZCBhbm90aGVyIHRva2VuP1xuICAgIGlzRXhwYW5kZWRHcm91cChncm91cDogSUdyb3VwQnlSZWNvcmQpOiBib29sZWFuO1xuICAgIGNyZWF0ZUNvbHVtbnNMaXN0Pyhjb2xzOiBDb2x1bW5UeXBlW10pOiB2b2lkO1xuICAgIHRvZ2dsZUFsbEdyb3VwUm93cz8oKTogdm9pZDtcbiAgICB0b2dnbGVBbGw/KCk6IHZvaWQ7XG4gICAgZ2VuZXJhdGVSb3dQYXRoPyhyb3dJZDogYW55KTogYW55W107XG4gICAgcHJldmVudEhlYWRlclNjcm9sbD8oYXJnczogYW55KTogdm9pZDtcblxufVxuXG4vKipcbiAqIEFuIGludGVyZmFjZSBkZXNjcmliaW5nIGEgRmxhdCBHcmlkIHR5cGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbGF0R3JpZFR5cGUgZXh0ZW5kcyBHcmlkVHlwZSB7XG4gICAgZ3JvdXBpbmdFeHBhbnNpb25TdGF0ZTogSUdyb3VwQnlFeHBhbmRTdGF0ZVtdO1xuICAgIGdyb3VwaW5nRXhwcmVzc2lvbnM6IElHcm91cGluZ0V4cHJlc3Npb25bXTtcbiAgICBncm91cGluZ0V4cHJlc3Npb25zQ2hhbmdlOiBFdmVudEVtaXR0ZXI8SUdyb3VwaW5nRXhwcmVzc2lvbltdPjtcblxuICAgIHRvZ2dsZUdyb3VwKGdyb3VwUm93OiBJR3JvdXBCeVJlY29yZCk6IHZvaWQ7XG4gICAgY2xlYXJHcm91cGluZyhmaWVsZDogc3RyaW5nKTogdm9pZDtcbiAgICBncm91cEJ5KGV4cHJlc3Npb246IElHcm91cGluZ0V4cHJlc3Npb24gfCBBcnJheTxJR3JvdXBpbmdFeHByZXNzaW9uPik6IHZvaWQ7XG59XG5cbi8qKlxuICogQW4gaW50ZXJmYWNlIGRlc2NyaWJpbmcgYSBUcmVlIEdyaWQgdHlwZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyZWVHcmlkVHlwZSBleHRlbmRzIEdyaWRUeXBlIHtcbiAgICByZWNvcmRzOiBNYXA8YW55LCBJVHJlZUdyaWRSZWNvcmQ+O1xuICAgIGlzVHJlZVJvdyhyZWM6IGFueSk6IGJvb2xlYW47XG59XG5cbi8qKlxuICogQW4gaW50ZXJmYWNlIGRlc2NyaWJpbmcgYSBIaWVyYXJjaGljYWwgR3JpZCB0eXBlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGllcmFyY2hpY2FsR3JpZFR5cGUgZXh0ZW5kcyBHcmlkVHlwZSB7XG4gICAgY2hpbGRMYXlvdXRLZXlzOiBhbnlbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQaXZvdEdyaWRUeXBlIGV4dGVuZHMgR3JpZFR5cGUge1xuICAgIHBpdm90Q29uZmlndXJhdGlvbjogSVBpdm90Q29uZmlndXJhdGlvbjtcbiAgICBhbGxEaW1lbnNpb25zOiBJUGl2b3REaW1lbnNpb25bXSxcbiAgICBzaG93UGl2b3RDb25maWd1cmF0aW9uVUk6IGJvb2xlYW47XG4gICAgY29sdW1uRGltZW5zaW9uczogSVBpdm90RGltZW5zaW9uW107XG4gICAgcm93RGltZW5zaW9uczogSVBpdm90RGltZW5zaW9uW107XG4gICAgcm93RGltZW5zaW9uUmVzaXppbmc6IGJvb2xlYW47XG4gICAgdmFsdWVzOiBJUGl2b3RWYWx1ZVtdO1xuICAgIGZpbHRlckRpbWVuc2lvbnM6IElQaXZvdERpbWVuc2lvbltdO1xuICAgIGRpbWVuc2lvbkRhdGFDb2x1bW5zOiBDb2x1bW5UeXBlW107XG4gICAgcGl2b3RSb3dXaWR0aHM6IG51bWJlcjtcbiAgICBzZXR1cENvbHVtbnMoKTogdm9pZDtcbiAgICB0b2dnbGVSb3cocm93SUQ6IGFueSk6IHZvaWQ7XG4gICAgcmVzb2x2ZURhdGFUeXBlcyhmaWVsZDogYW55KTogR3JpZENvbHVtbkRhdGFUeXBlO1xuICAgIG1vdmVEaW1lbnNpb24oZGltZW5zaW9uOiBJUGl2b3REaW1lbnNpb24sIHRhcmdldENvbGxlY3Rpb25UeXBlOiBQaXZvdERpbWVuc2lvblR5cGUsIGluZGV4PyA6IG51bWJlcik7XG4gICAgZ2V0RGltZW5zaW9uc0J5VHlwZShkaW1lbnNpb246IFBpdm90RGltZW5zaW9uVHlwZSk7XG4gICAgdG9nZ2xlRGltZW5zaW9uKGRpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uKTtcbiAgICBzb3J0RGltZW5zaW9uKGRpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uLCBzb3J0RGlyZWN0aW9uOiBTb3J0aW5nRGlyZWN0aW9uKTtcbiAgICB0b2dnbGVWYWx1ZSh2YWx1ZTogSVBpdm90VmFsdWUpO1xuICAgIG1vdmVWYWx1ZSh2YWx1ZTogSVBpdm90VmFsdWUsIGluZGV4PzogbnVtYmVyKTtcbiAgICByb3dEaW1lbnNpb25XaWR0aFRvUGl4ZWxzKGRpbTogSVBpdm90RGltZW5zaW9uKTogbnVtYmVyO1xuICAgIGRpbWVuc2lvbnNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJRGltZW5zaW9uc0NoYW5nZT47XG4gICAgdmFsdWVzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8SVZhbHVlc0NoYW5nZT47XG4gICAgcGl2b3RLZXlzOiBJUGl2b3RLZXlzO1xuICAgIGhhc011bHRpcGxlVmFsdWVzOiBib29sZWFuO1xuICAgIGV4Y2VsU3R5bGVGaWx0ZXJNYXhIZWlnaHQ6IHN0cmluZztcbiAgICBleGNlbFN0eWxlRmlsdGVyTWluSGVpZ2h0OiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIEdyaWRTVkdJY29uIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmFsdWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU2l6ZUluZm8ge1xuICAgIHdpZHRoOiBudW1iZXIsXG4gICAgcGFkZGluZzogbnVtYmVyXG59XG4iXX0=