igniteui-angular 12.3.27 → 12.3.30

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 (34) hide show
  1. package/bundles/igniteui-angular.umd.js +294 -170
  2. package/bundles/igniteui-angular.umd.js.map +1 -1
  3. package/esm2015/lib/grids/api.service.js +3 -4
  4. package/esm2015/lib/grids/columns/column.component.js +5 -5
  5. package/esm2015/lib/grids/common/crud.service.js +3 -3
  6. package/esm2015/lib/grids/common/events.js +1 -1
  7. package/esm2015/lib/grids/grid/grid.component.js +11 -11
  8. package/esm2015/lib/grids/grid-base.directive.js +83 -85
  9. package/esm2015/lib/grids/grid-mrl-navigation.service.js +2 -2
  10. package/esm2015/lib/grids/grid-public-row.js +3 -3
  11. package/esm2015/lib/grids/grouping/group-by-area.directive.js +1 -1
  12. package/esm2015/lib/grids/grouping/tree-grid-group-by-area.component.js +6 -6
  13. package/esm2015/lib/grids/hierarchical-grid/hierarchical-grid-base.directive.js +4 -5
  14. package/esm2015/lib/grids/hierarchical-grid/hierarchical-grid.component.js +25 -14
  15. package/esm2015/lib/grids/hierarchical-grid/row-island.component.js +7 -11
  16. package/esm2015/lib/grids/state.directive.js +12 -9
  17. package/esm2015/lib/grids/summaries/grid-summary.service.js +5 -5
  18. package/esm2015/lib/grids/tree-grid/tree-grid.component.js +25 -9
  19. package/esm2015/lib/services/exporter-common/base-export-service.js +3 -3
  20. package/esm2015/lib/simple-combo/simple-combo.component.js +2 -2
  21. package/esm2015/lib/splitter/splitter-pane/splitter-pane.component.js +58 -6
  22. package/esm2015/lib/splitter/splitter.component.js +22 -3
  23. package/esm2015/lib/tree/tree.component.js +30 -1
  24. package/fesm2015/igniteui-angular.js +289 -167
  25. package/fesm2015/igniteui-angular.js.map +1 -1
  26. package/igniteui-angular.metadata.json +1 -1
  27. package/lib/grids/common/events.d.ts +1 -0
  28. package/lib/grids/grid-base.directive.d.ts +9 -13
  29. package/lib/grids/hierarchical-grid/hierarchical-grid.component.d.ts +2 -1
  30. package/lib/grids/hierarchical-grid/row-island.component.d.ts +1 -0
  31. package/lib/grids/tree-grid/tree-grid.component.d.ts +2 -2
  32. package/lib/splitter/splitter-pane/splitter-pane.component.d.ts +19 -5
  33. package/lib/tree/tree.component.d.ts +29 -0
  34. package/package.json +1 -1
@@ -409,8 +409,8 @@ export class IgxRowAddCrudState extends IgxRowCrudState {
409
409
  if (isAddRow) {
410
410
  this.endAddRow();
411
411
  if (commit) {
412
- this.grid.rowAddedNotifier.next({ data: args.newValue });
413
- this.grid.rowAdded.emit({ data: args.newValue });
412
+ this.grid.rowAddedNotifier.next({ data: args.newValue, owner: this.grid });
413
+ this.grid.rowAdded.emit({ data: args.newValue, owner: this.grid });
414
414
  }
415
415
  }
416
416
  return args;
@@ -560,4 +560,4 @@ export class IgxGridCRUDService extends IgxRowAddCrudState {
560
560
  IgxGridCRUDService.decorators = [
561
561
  { type: Injectable }
562
562
  ];
563
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2NvbW1vbi9jcnVkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJdkMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBRTNELE1BQU0sT0FBTyxVQUFVO0lBS25CLFlBQW1CLEVBQU8sRUFBUyxLQUFhLEVBQVMsSUFBUyxFQUFTLElBQXFDO1FBQTdGLE9BQUUsR0FBRixFQUFFLENBQUs7UUFBUyxVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQVMsU0FBSSxHQUFKLElBQUksQ0FBSztRQUFTLFNBQUksR0FBSixJQUFJLENBQWlDO0lBQUksQ0FBQztJQUU5RyxtQkFBbUIsQ0FBQyxlQUFlLEdBQUcsSUFBSSxFQUFFLEtBQWE7O1FBQzVELE1BQU0sSUFBSSxHQUF1QjtZQUM3QixLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDZCxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDbEIsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ25CLE1BQU0sRUFBRSxLQUFLO1lBQ2IsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2hCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsS0FBSztTQUNSLENBQUM7UUFDRixJQUFJLGVBQWUsRUFBRTtZQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQUEsSUFBSSxDQUFDLE9BQU8sbUNBQUksSUFBSSxDQUFDLElBQUksQ0FBQztTQUM3QztRQUNELE9BQU8sSUFBSSxDQUFDO0lB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R0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3JDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNiLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQztRQUM1RCxJQUFJLEtBQUssSUFBSSxVQUFVLEVBQUU7WUFDckIsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQztZQUNoQyxNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO1lBQ3JHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxlQUFlLENBQUMsQ0FBQztTQUNuRDtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7OztZQS9ISixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZmlyc3QgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJR3JpZEVkaXREb25lRXZlbnRBcmdzLCBJR3JpZEVkaXRFdmVudEFyZ3MsIElneEdyaWRCYXNlRGlyZWN0aXZlLCBJUm93RGF0YUV2ZW50QXJncyB9IGZyb20gJy4uL2dyaWQvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBJZ3hSb3dEaXJlY3RpdmUgfSBmcm9tICcuLi9yb3cuZGlyZWN0aXZlJztcbmltcG9ydCB7IEdyaWRUeXBlIH0gZnJvbSAnLi9ncmlkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjb3B5RGVzY3JpcHRvcnMsIGlzRXF1YWx9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgSWd4RWRpdFJvdyB7XG4gICAgcHVibGljIHRyYW5zYWN0aW9uU3RhdGU6IGFueTtcbiAgICBwdWJsaWMgc3RhdGU6IGFueTtcbiAgICBwdWJsaWMgbmV3RGF0YTogYW55O1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIGlkOiBhbnksIHB1YmxpYyBpbmRleDogbnVtYmVyLCBwdWJsaWMgZGF0YTogYW55LCBwdWJsaWMgZ3JpZDogSWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZSkgeyB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRWRpdEV2ZW50QXJncyhpbmNsdWRlTmV3VmFsdWUgPSB0cnVlLCBldmVudD86IEV2ZW50KTogSUdyaWRFZGl0RXZlbnRBcmdzIHtcbiAgICAgICAgY29uc3QgYXJnczogSUdyaWRFZGl0RXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgcm93SUQ6IHRoaXMuaWQsXG4gICAgICAgICAgICByb3dEYXRhOiB0aGlzLmRhdGEsXG4gICAgICAgICAgICBvbGRWYWx1ZTogdGhpcy5kYXRhLFxuICAgICAgICAgICAgY2FuY2VsOiBmYWxzZSxcbiAgICAgICAgICAgIG93bmVyOiB0aGlzLmdyaWQsXG4gICAgICAgICAgICBpc0FkZFJvdzogZmFsc2UsXG4gICAgICAgICAgICBldmVudFxuICAgICAgICB9O1xuICAgICAgICBpZiAoaW5jbHVkZU5ld1ZhbHVlKSB7XG4gICAgICAgICAgICBhcmdzLm5ld1ZhbHVlID0gdGhpcy5uZXdEYXRhID8/IHRoaXMuZGF0YTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRG9uZUVkaXRFdmVudEFyZ3MoY2FjaGVkUm93RGF0YTogYW55LCBldmVudD86IEV2ZW50KTogSUdyaWRFZGl0RG9uZUV2ZW50QXJncyB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWREYXRhID0gdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkID9cbiAgICAgICAgICAgIHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZ2V0QWdncmVnYXRlZFZhbHVlKHRoaXMuaWQsIHRydWUpIDogdGhpcy5ncmlkLmdyaWRBUEkuZ2V0Um93RGF0YSh0aGlzLmlkKTtcbiAgICAgICAgY29uc3Qgcm93RGF0YSA9IHVwZGF0ZWREYXRhID8/IHRoaXMuZ3JpZC5ncmlkQVBJLmdldFJvd0RhdGEodGhpcy5pZCk7XG4gICAgICAgIGNvbnN0IGFyZ3M6IElHcmlkRWRpdERvbmVFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICByb3dJRDogdGhpcy5pZCxcbiAgICAgICAgICAgIHJvd0RhdGEsXG4gICAgICAgICAgICBvbGRWYWx1ZTogY2FjaGVkUm93RGF0YSxcbiAgICAgICAgICAgIG5ld1ZhbHVlOiB1cGRhdGVkRGF0YSxcbiAgICAgICAgICAgIG93bmVyOiB0aGlzLmdyaWQsXG4gICAgICAgICAgICBpc0FkZFJvdzogZmFsc2UsXG4gICAgICAgICAgICBldmVudFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSWd4QWRkUm93IGV4dGVuZHMgSWd4RWRpdFJvdyB7XG4gICAgcHVibGljIGlzQWRkUm93ID0gdHJ1ZTtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBpZDogYW55LFxuICAgICAgICBwdWJsaWMgaW5kZXg6IG51bWJlcixcbiAgICAgICAgcHVibGljIGRhdGE6IGFueSxcbiAgICAgICAgcHVibGljIHJlY29yZFJlZjogYW55LFxuICAgICAgICBwdWJsaWMgZ3JpZDogSWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZSkge1xuICAgICAgICBzdXBlcihpZCwgaW5kZXgsIGRhdGEsIGdyaWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVFZGl0RXZlbnRBcmdzKGluY2x1ZGVOZXdWYWx1ZSA9IHRydWUsIGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXRFdmVudEFyZ3Mge1xuICAgICAgICBjb25zdCBhcmdzID0gc3VwZXIuY3JlYXRlRWRpdEV2ZW50QXJncyhpbmNsdWRlTmV3VmFsdWUsIGV2ZW50KTtcbiAgICAgICAgYXJncy5vbGRWYWx1ZSA9IG51bGw7XG4gICAgICAgIGFyZ3MuaXNBZGRSb3cgPSB0cnVlO1xuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRG9uZUVkaXRFdmVudEFyZ3MoY2FjaGVkUm93RGF0YTogYW55LCBldmVudD86IEV2ZW50KTogSUdyaWRFZGl0RG9uZUV2ZW50QXJncyB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBzdXBlci5jcmVhdGVEb25lRWRpdEV2ZW50QXJncyhudWxsLCBldmVudCk7XG4gICAgICAgIGFyZ3MuaXNBZGRSb3cgPSB0cnVlO1xuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWd4QWRkUm93UGFyZW50IHtcbiAgICByb3dJRDogc3RyaW5nO1xuICAgIGluZGV4OiBudW1iZXI7XG4gICAgYXNDaGlsZDogYm9vbGVhbjtcbiAgICBpc1Bpbm5lZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIElneENlbGwge1xuICAgIHB1YmxpYyBwcmltYXJ5S2V5OiBhbnk7XG4gICAgcHVibGljIHN0YXRlOiBhbnk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGlkLFxuICAgICAgICBwdWJsaWMgcm93SW5kZXg6IG51bWJlcixcbiAgICAgICAgcHVibGljIGNvbHVtbixcbiAgICAgICAgcHVibGljIHZhbHVlOiBhbnksXG4gICAgICAgIHB1YmxpYyBlZGl0VmFsdWU6IGFueSxcbiAgICAgICAgcHVibGljIHJvd0RhdGE6IGFueSxcbiAgICAgICAgcHVibGljIGdyaWQ6IElneEdyaWRCYXNlRGlyZWN0aXZlICYgR3JpZFR5cGUpIHsgfVxuXG4gICAgcHVibGljIGNhc3RUb051bWJlcih2YWx1ZTogYW55KTogYW55IHtcbiAgICAgICAgaWYgKHRoaXMuY29sdW1uLmRhdGFUeXBlID09PSAnbnVtYmVyJyAmJiAhdGhpcy5jb2x1bW4uaW5saW5lRWRpdG9yVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiAhaXNOYU4odikgJiYgaXNGaW5pdGUodikgPyB2IDogMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUVkaXRFdmVudEFyZ3MoaW5jbHVkZU5ld1ZhbHVlID0gdHJ1ZSwgZXZlbnQ/OiBFdmVudCk6IElHcmlkRWRpdEV2ZW50QXJncyB7XG4gICAgICAgIGNvbnN0IGFyZ3M6IElHcmlkRWRpdEV2ZW50QXJncyA9IHtcbiAgICAgICAgICAgIHJvd0lEOiB0aGlzLmlkLnJvd0lELFxuICAgICAgICAgICAgY2VsbElEOiB0aGlzLmlkLFxuICAgICAgICAgICAgcm93RGF0YTogdGhpcy5yb3dEYXRhLFxuICAgICAgICAgICAgb2xkVmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICBjYW5jZWw6IGZhbHNlLFxuICAgICAgICAgICAgY29sdW1uOiB0aGlzLmNvbHVtbixcbiAgICAgICAgICAgIG93bmVyOiB0aGlzLmdyaWQsXG4gICAgICAgICAgICBldmVudFxuICAgICAgICB9O1xuICAgICAgICBpZiAoaW5jbHVkZU5ld1ZhbHVlKSB7XG4gICAgICAgICAgICBhcmdzLm5ld1ZhbHVlID0gdGhpcy5jYXN0VG9OdW1iZXIodGhpcy5lZGl0VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVEb25lRWRpdEV2ZW50QXJncyh2YWx1ZTogYW55LCBldmVudD86IEV2ZW50KTogSUdyaWRFZGl0RG9uZUV2ZW50QXJncyB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWREYXRhID0gdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkID9cbiAgICAgICAgICAgIHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZ2V0QWdncmVnYXRlZFZhbHVlKHRoaXMuaWQucm93SUQsIHRydWUpIDogdGhpcy5yb3dEYXRhO1xuICAgICAgICBjb25zdCByb3dEYXRhID0gdXBkYXRlZERhdGEgPT09IG51bGwgPyB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRSb3dEYXRhKHRoaXMuaWQucm93SUQpIDogdXBkYXRlZERhdGE7XG4gICAgICAgIGNvbnN0IGFyZ3M6IElHcmlkRWRpdERvbmVFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICByb3dJRDogdGhpcy5pZC5yb3dJRCxcbiAgICAgICAgICAgIGNlbGxJRDogdGhpcy5pZCxcbiAgICAgICAgICAgIC8vIHJvd0RhdGEgLSBzaG91bGQgYmUgdGhlIHVwZGF0ZWQvY29tbWl0dGVkIHJvd0RhdGEgLSB0aGlzIGVmZmVjdGl2ZWx5IHNob3VsZCBiZSB0aGUgbmV3VmFsdWVcbiAgICAgICAgICAgIC8vIHRoZSBvbmx5IGNhc2Ugd2UgdXNlIHRoaXMucm93RGF0YSBkaXJlY3RseSwgaXMgd2hlbiB0aGVyZSBpcyBubyByb3dFZGl0aW5nIG9yIHRyYW5zYWN0aW9ucyBlbmFibGVkXG4gICAgICAgICAgICByb3dEYXRhLFxuICAgICAgICAgICAgb2xkVmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICBuZXdWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgICBjb2x1bW46IHRoaXMuY29sdW1uLFxuICAgICAgICAgICAgb3duZXI6IHRoaXMuZ3JpZCxcbiAgICAgICAgICAgIGV2ZW50XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIElneENlbGxDcnVkU3RhdGUge1xuICAgIHB1YmxpYyBncmlkOiBJZ3hHcmlkQmFzZURpcmVjdGl2ZSAmIEdyaWRUeXBlO1xuICAgIHB1YmxpYyBjZWxsOiBJZ3hDZWxsIHwgbnVsbCA9IG51bGw7XG4gICAgcHVibGljIHJvdzogSWd4RWRpdFJvdyB8IG51bGwgPSBudWxsO1xuICAgIHB1YmxpYyBpc0luQ29tcG9zaXRpb25Nb2RlID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgY3JlYXRlQ2VsbChjZWxsKTogSWd4Q2VsbCB7XG4gICAgICAgIC8vIGNlbGwucm93RGF0YSA/PyBjZWxsLnJvdy5kYXRhIGNvdmVycyB0aGUgY2FzZXMsIHdoZXJlXG4gICAgICAgIC8vIDEuIGNlbGwgaXMgYW4gaW5zdGFuY2Ugb2cgSWd4R3JpZENlbGxDb21wb25lbnRcbiAgICAgICAgLy8gMi4gY2VsbCBpcyBhbiBpbnN0YW5jZSBvZiBJZ3hHcmlkQ2VsbFxuICAgICAgICAvLyBOb3RlOiBpZiBhdCBzb21lIHBvaW50IHdlIGFyZSBnb2luZyB0byBnZXQgcmlkIG9mIHVzaW5nIDEpLCB0aGVuIHNlZSB0ZXN0ICdzaG91bGQgYWxsb3cgYWRkaW5nIHJvdyB0byBlbXB0eSBncmlkJzpcbiAgICAgICAgLy8gY2VsbC5yb3cuZGF0YSB3aWxsIHJldHVybiBhIHsgZGF0YTsgcm93SUQgfSBvYmplY3QgaGVyZSwgYW5kIHRlc3Qgd2lsbCBmYWlsXG4gICAgICAgIHJldHVybiB0aGlzLmNlbGwgPSBuZXcgSWd4Q2VsbChjZWxsLmNlbGxJRCB8fCBjZWxsLmlkLCBjZWxsLnJvdy5pbmRleCwgY2VsbC5jb2x1bW4sIGNlbGwudmFsdWUsIGNlbGwudmFsdWUsXG4gICAgICAgICAgICBjZWxsLnJvd0RhdGEgPz8gY2VsbC5yb3cuZGF0YSwgY2VsbC5ncmlkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlUm93KGNlbGw6IElneENlbGwpOiBJZ3hFZGl0Um93IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm93ID0gbmV3IElneEVkaXRSb3coY2VsbC5pZC5yb3dJRCwgY2VsbC5yb3dJbmRleCwgY2VsbC5yb3dEYXRhLCBjZWxsLmdyaWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzYW1lUm93KHJvd0lEKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvdyAmJiB0aGlzLnJvdy5pZCA9PT0gcm93SUQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNhbWVDZWxsKGNlbGw6IElneENlbGwpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmNlbGwuaWQucm93SUQgPT09IGNlbGwuaWQucm93SUQgJiZcbiAgICAgICAgICAgIHRoaXMuY2VsbC5pZC5jb2x1bW5JRCA9PT0gY2VsbC5pZC5jb2x1bW5JRCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjZWxsSW5FZGl0TW9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5jZWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBiZWdpbkNlbGxFZGl0KGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHRoaXMuY2VsbC5jcmVhdGVFZGl0RXZlbnRBcmdzKGZhbHNlLCBldmVudCk7XG4gICAgICAgIHRoaXMuZ3JpZC5jZWxsRWRpdEVudGVyLmVtaXQoYXJncyk7XG5cbiAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICB0aGlzLmVuZENlbGxFZGl0KCk7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHB1YmxpYyBjZWxsRWRpdChldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSB0aGlzLmNlbGwuY3JlYXRlRWRpdEV2ZW50QXJncyh0cnVlLCBldmVudCk7XG4gICAgICAgIHRoaXMuZ3JpZC5jZWxsRWRpdC5lbWl0KGFyZ3MpO1xuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlQ2VsbChleGl0OiBib29sZWFuLCBldmVudD86IEV2ZW50KTogSUdyaWRFZGl0RXZlbnRBcmdzIHtcbiAgICAgICAgaWYgKCF0aGlzLmNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBkb25lQXJncztcbiAgICAgICAgaWYgKGlzRXF1YWwodGhpcy5jZWxsLnZhbHVlLCB0aGlzLmNlbGwuZWRpdFZhbHVlKSkge1xuICAgICAgICAgICAgZG9uZUFyZ3MgPSB0aGlzLmV4aXRDZWxsRWRpdChldmVudCk7XG4gICAgICAgICAgICByZXR1cm4gZG9uZUFyZ3M7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcmdzID0gdGhpcy5jZWxsRWRpdChldmVudCk7XG4gICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdyaWQuZ3JpZEFQSS51cGRhdGVfY2VsbCh0aGlzLmNlbGwpO1xuXG4gICAgICAgIGRvbmVBcmdzID0gdGhpcy5jZWxsRWRpdERvbmUoZXZlbnQsIGZhbHNlKTtcbiAgICAgICAgaWYgKGV4aXQpIHtcbiAgICAgICAgICAgIGRvbmVBcmdzID0gdGhpcy5leGl0Q2VsbEVkaXQoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgLi4uYXJncywgLi4uZG9uZUFyZ3MgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2VsbEVkaXREb25lKGV2ZW50LCBhZGRSb3c6IGJvb2xlYW4pOiBJR3JpZEVkaXREb25lRXZlbnRBcmdzIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLmNlbGwuY2FzdFRvTnVtYmVyKHRoaXMuY2VsbC5lZGl0VmFsdWUpO1xuICAgICAgICBjb25zdCBkb25lQXJncyA9IHRoaXMuY2VsbC5jcmVhdGVEb25lRWRpdEV2ZW50QXJncyhuZXdWYWx1ZSwgZXZlbnQpO1xuICAgICAgICB0aGlzLmdyaWQuY2VsbEVkaXREb25lLmVtaXQoZG9uZUFyZ3MpO1xuICAgICAgICBpZiAoYWRkUm93KSB7XG4gICAgICAgICAgICBkb25lQXJncy5yb3dEYXRhID0gdGhpcy5yb3cuZGF0YTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZG9uZUFyZ3M7XG4gICAgfVxuXG4gICAgLyoqIEV4aXQgY2VsbCBlZGl0IG1vZGUgKi9cbiAgICBwdWJsaWMgZXhpdENlbGxFZGl0KGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXREb25lRXZlbnRBcmdzIHtcbiAgICAgICAgaWYgKCF0aGlzLmNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5jZWxsLmNhc3RUb051bWJlcih0aGlzLmNlbGwuZWRpdFZhbHVlKTtcbiAgICAgICAgY29uc3QgYXJncyA9IHRoaXMuY2VsbD8uY3JlYXRlRG9uZUVkaXRFdmVudEFyZ3MobmV3VmFsdWUsIGV2ZW50KTtcblxuICAgICAgICB0aGlzLmNlbGwudmFsdWUgPSBuZXdWYWx1ZTtcblxuICAgICAgICB0aGlzLmdyaWQuY2VsbEVkaXRFeGl0LmVtaXQoYXJncyk7XG4gICAgICAgIHRoaXMuZW5kQ2VsbEVkaXQoKTtcbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgfVxuXG4gICAgLyoqIENsZWFycyBjZWxsIGVkaXRpbmcgc3RhdGUgKi9cbiAgICBwdWJsaWMgZW5kQ2VsbEVkaXQoKSB7XG4gICAgICAgIHRoaXMuY2VsbCA9IG51bGw7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgd2hldGhlciB0aGUgdGFyZ2V0ZWQgY2VsbCBpcyBpbiBlZGl0IG1vZGUgKi9cbiAgICBwdWJsaWMgdGFyZ2V0SW5FZGl0KHJvd0luZGV4OiBudW1iZXIsIGNvbHVtbkluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLmNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXMgPSB0aGlzLmNlbGwuY29sdW1uLmluZGV4ID09PSBjb2x1bW5JbmRleCAmJiB0aGlzLmNlbGwucm93SW5kZXggPT09IHJvd0luZGV4O1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBJZ3hSb3dDcnVkU3RhdGUgZXh0ZW5kcyBJZ3hDZWxsQ3J1ZFN0YXRlIHtcbiAgICBwdWJsaWMgcm93OiBJZ3hFZGl0Um93IHwgbnVsbCA9IG51bGw7XG4gICAgcHVibGljIGNsb3NlUm93RWRpdGluZ092ZXJsYXkgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgcHJpdmF0ZSBfcm93RWRpdGluZ0Jsb2NrZWQgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBnZXQgcHJpbWFyeUtleSgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnByaW1hcnlLZXk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dJbkVkaXRNb2RlKCk6IElneFJvd0RpcmVjdGl2ZTxJZ3hHcmlkQmFzZURpcmVjdGl2ZSAmIEdyaWRUeXBlPiB7XG4gICAgICAgIGNvbnN0IGVkaXRSb3dTdGF0ZSA9IHRoaXMucm93O1xuICAgICAgICByZXR1cm4gZWRpdFJvd1N0YXRlICE9PSBudWxsID8gdGhpcy5ncmlkLnJvd0xpc3QuZmluZChlID0+IGUucm93SUQgPT09IGVkaXRSb3dTdGF0ZS5pZCkgOiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcm93RWRpdGluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5yb3dFZGl0YWJsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJvd0VkaXRpbmdCbG9ja2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm93RWRpdGluZ0Jsb2NrZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCByb3dFZGl0aW5nQmxvY2tlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fcm93RWRpdGluZ0Jsb2NrZWQgPSB2YWw7XG4gICAgfVxuXG4gICAgLyoqIEVudGVycyByb3cgZWRpdCBtb2RlICovXG4gICAgcHVibGljIGJlZ2luUm93RWRpdChldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmdyaWQucm93RWRpdGFibGUgJiYgKHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID09PSB1bmRlZmluZWQgfHwgdGhpcy5ncmlkLnByaW1hcnlLZXkgPT09IG51bGwpKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBncmlkIG11c3QgaGF2ZSBhIGBwcmltYXJ5S2V5YCBzcGVjaWZpZWQgd2hlbiB1c2luZyBgcm93RWRpdGFibGVgIScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnJvdyB8fCAhKHRoaXMucm93LmdldENsYXNzTmFtZSgpID09PSBJZ3hFZGl0Um93Lm5hbWUpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucm93KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVSb3codGhpcy5jZWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJvd0FyZ3MgPSB0aGlzLnJvdy5jcmVhdGVFZGl0RXZlbnRBcmdzKGZhbHNlLCBldmVudCk7XG5cbiAgICAgICAgICAgIHRoaXMuZ3JpZC5yb3dFZGl0RW50ZXIuZW1pdChyb3dBcmdzKTtcbiAgICAgICAgICAgIGlmIChyb3dBcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW5kRWRpdE1vZGUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5yb3cudHJhbnNhY3Rpb25TdGF0ZSA9IHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZ2V0QWdncmVnYXRlZFZhbHVlKHRoaXMucm93LmlkLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuc3RhcnRQZW5kaW5nKCk7XG4gICAgICAgICAgICB0aGlzLmdyaWQub3BlblJvd092ZXJsYXkodGhpcy5yb3cuaWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJvd0VkaXQoZXZlbnQ6IEV2ZW50KTogSUdyaWRFZGl0RXZlbnRBcmdzIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHRoaXMucm93LmNyZWF0ZUVkaXRFdmVudEFyZ3ModHJ1ZSwgZXZlbnQpO1xuICAgICAgICB0aGlzLmdyaWQucm93RWRpdC5lbWl0KGFyZ3MpO1xuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlUm93KGNvbW1pdDogYm9vbGVhbiwgZXZlbnQ/OiBFdmVudCk6IElHcmlkRWRpdEV2ZW50QXJncyB7XG4gICAgICAgIGlmICghdGhpcy5ncmlkLnJvd0VkaXRhYmxlIHx8XG4gICAgICAgICAgICB0aGlzLmdyaWQucm93RWRpdGluZ092ZXJsYXkgJiZcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5yb3dFZGl0aW5nT3ZlcmxheS5jb2xsYXBzZWQgfHwgIXRoaXMucm93KSB7XG4gICAgICAgICAgICByZXR1cm4ge30gYXMgSUdyaWRFZGl0RXZlbnRBcmdzO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGFyZ3M7XG4gICAgICAgIGlmIChjb21taXQpIHtcbiAgICAgICAgICAgIHRoaXMucm93Lm5ld0RhdGEgPSB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmdldEFnZ3JlZ2F0ZWRWYWx1ZSh0aGlzLnJvdy5pZCwgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVJvd0VkaXREYXRhKHRoaXMucm93LCB0aGlzLnJvdy5uZXdEYXRhKTtcbiAgICAgICAgICAgIGFyZ3MgPSB0aGlzLnJvd0VkaXQoZXZlbnQpO1xuICAgICAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucm93Lm5ld0RhdGE7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5jbGVhcih0aGlzLnJvdy5pZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhcmdzID0gdGhpcy5lbmRSb3dUcmFuc2FjdGlvbihjb21taXQsIGV2ZW50KTtcblxuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBlbmRSb3dUcmFuc2FjdGlvbihjb21taXQ6IGJvb2xlYW4sIGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXRFdmVudEFyZ3Mge1xuICAgICAgICB0aGlzLnJvdy5uZXdEYXRhID0gdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5nZXRBZ2dyZWdhdGVkVmFsdWUodGhpcy5yb3cuaWQsIHRydWUpO1xuICAgICAgICBsZXQgcm93RWRpdEFyZ3MgPSB0aGlzLnJvdy5jcmVhdGVFZGl0RXZlbnRBcmdzKHRydWUsIGV2ZW50KTtcblxuICAgICAgICBsZXQgbm9uQ2FuY2VsYWJsZUFyZ3M7XG4gICAgICAgIGlmICghY29tbWl0KSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmVuZFBlbmRpbmcoZmFsc2UpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucm93LmdldENsYXNzTmFtZSgpID09PSBJZ3hFZGl0Um93Lm5hbWUpIHtcbiAgICAgICAgICAgIHJvd0VkaXRBcmdzID0gdGhpcy5ncmlkLmdyaWRBUEkudXBkYXRlX3Jvdyh0aGlzLnJvdywgdGhpcy5yb3cubmV3RGF0YSwgZXZlbnQpO1xuICAgICAgICAgICAgbm9uQ2FuY2VsYWJsZUFyZ3MgPSB0aGlzLnJvd0VkaXREb25lKHJvd0VkaXRBcmdzLm9sZFZhbHVlLCBldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByb3dBZGRBcmdzID0gdGhpcy5yb3cuY3JlYXRlRWRpdEV2ZW50QXJncyh0cnVlLCBldmVudCk7XG4gICAgICAgICAgICB0aGlzLmdyaWQucm93QWRkLmVtaXQocm93QWRkQXJncyk7XG4gICAgICAgICAgICBpZiAocm93QWRkQXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcm93QWRkQXJncztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5lbmRQZW5kaW5nKGZhbHNlKTtcblxuICAgICAgICAgICAgY29uc3QgcGFyZW50SWQgPSB0aGlzLmdldFBhcmVudFJvd0lkKCk7XG4gICAgICAgICAgICB0aGlzLmdyaWQuZ3JpZEFQSS5hZGRSb3dUb0RhdGEodGhpcy5yb3cubmV3RGF0YSA/PyB0aGlzLnJvdy5kYXRhLCBwYXJlbnRJZCk7XG4gICAgICAgICAgICB0aGlzLmdyaWQudHJpZ2dlclBpcGVzKCk7XG5cbiAgICAgICAgICAgIG5vbkNhbmNlbGFibGVBcmdzID0gdGhpcy5yb3dFZGl0RG9uZShudWxsLCBldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBub25DYW5jZWxhYmxlQXJncyA9IHRoaXMuZXhpdFJvd0VkaXQocm93RWRpdEFyZ3Mub2xkVmFsdWUsIGV2ZW50KTtcblxuICAgICAgICByZXR1cm4geyAuLi5ub25DYW5jZWxhYmxlQXJncywgLi4ucm93RWRpdEFyZ3MgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcm93RWRpdERvbmUoY2FjaGVkUm93RGF0YSwgZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGRvbmVBcmdzID0gdGhpcy5yb3cuY3JlYXRlRG9uZUVkaXRFdmVudEFyZ3MoY2FjaGVkUm93RGF0YSwgZXZlbnQpO1xuICAgICAgICB0aGlzLmdyaWQucm93RWRpdERvbmUuZW1pdChkb25lQXJncyk7XG4gICAgICAgIHJldHVybiBkb25lQXJncztcbiAgICB9XG5cblxuICAgIC8qKiBFeGl0IHJvdyBlZGl0IG1vZGUgKi9cbiAgICBwdWJsaWMgZXhpdFJvd0VkaXQoY2FjaGVkUm93RGF0YSwgZXZlbnQ/OiBFdmVudCk6IElHcmlkRWRpdERvbmVFdmVudEFyZ3Mge1xuICAgICAgICBjb25zdCBub25DYW5jZWxhYmxlQXJncyA9IHRoaXMucm93LmNyZWF0ZURvbmVFZGl0RXZlbnRBcmdzKGNhY2hlZFJvd0RhdGEsIGV2ZW50KTtcbiAgICAgICAgdGhpcy5ncmlkLnJvd0VkaXRFeGl0LmVtaXQobm9uQ2FuY2VsYWJsZUFyZ3MpO1xuICAgICAgICB0aGlzLmdyaWQuY2xvc2VSb3dFZGl0aW5nT3ZlcmxheSgpO1xuXG4gICAgICAgIHRoaXMuZW5kUm93RWRpdCgpO1xuICAgICAgICByZXR1cm4gbm9uQ2FuY2VsYWJsZUFyZ3M7XG4gICAgfVxuXG4gICAgLyoqIENsZWFycyByb3cgZWRpdGluZyBzdGF0ZSAqL1xuICAgIHB1YmxpYyBlbmRSb3dFZGl0KCkge1xuICAgICAgICB0aGlzLnJvdyA9IG51bGw7XG4gICAgICAgIHRoaXMucm93RWRpdGluZ0Jsb2NrZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiogQ2xlYXJzIGNlbGwgYW5kIHJvdyBlZGl0aW5nIHN0YXRlIGFuZCBjbG9zZXMgcm93IGVkaXRpbmcgdGVtcGxhdGUgaWYgaXQgaXMgb3BlbiAqL1xuICAgIHB1YmxpYyBlbmRFZGl0TW9kZSgpIHtcbiAgICAgICAgdGhpcy5lbmRDZWxsRWRpdCgpO1xuICAgICAgICBpZiAodGhpcy5ncmlkLnJvd0VkaXRhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmVuZFJvd0VkaXQoKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5jbG9zZVJvd0VkaXRpbmdPdmVybGF5KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlUm93RWRpdERhdGEocm93OiBJZ3hFZGl0Um93LCB2YWx1ZT86IGFueSkge1xuICAgICAgICBjb25zdCBncmlkID0gdGhpcy5ncmlkO1xuXG4gICAgICAgIGNvbnN0IHJvd0luRWRpdE1vZGUgPSBncmlkLmdyaWRBUEkuY3J1ZFNlcnZpY2Uucm93O1xuICAgICAgICByb3cubmV3RGF0YSA9IHZhbHVlID8/IHJvd0luRWRpdE1vZGUudHJhbnNhY3Rpb25TdGF0ZTtcblxuXG4gICAgICAgIGlmIChyb3dJbkVkaXRNb2RlICYmIHJvdy5pZCA9PT0gcm93SW5FZGl0TW9kZS5pZCkge1xuICAgICAgICAgICAgLy8gZG8gbm90IHVzZSBzcHJlYWQgb3BlcmF0b3IgaGVyZSBhcyBpdCB3aWxsIGNvcHkgZXZlcnl0aGluZyBvdmVyIGFuIGVtcHR5IG9iamVjdCB3aXRoIG5vIGRlc2NyaXB0b3JzXG4gICAgICAgICAgICByb3cuZGF0YSA9IE9iamVjdC5hc3NpZ24oY29weURlc2NyaXB0b3JzKHJvdy5kYXRhKSwgcm93LmRhdGEsIHJvd0luRWRpdE1vZGUudHJhbnNhY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICAvLyBUT0RPOiBXb3JrYXJvdW5kIGZvciB1cGRhdGluZyBhIHJvdyBpbiBlZGl0IG1vZGUgdGhyb3VnaCB0aGUgQVBJXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkKSB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZSA9IGdyaWQudHJhbnNhY3Rpb25zLmdldFN0YXRlKHJvdy5pZCk7XG4gICAgICAgICAgICByb3cuZGF0YSA9IHN0YXRlID8gT2JqZWN0LmFzc2lnbih7fSwgcm93LmRhdGEsIHN0YXRlLnZhbHVlKSA6IHJvdy5kYXRhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFBhcmVudFJvd0lkKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJZ3hSb3dBZGRDcnVkU3RhdGUgZXh0ZW5kcyBJZ3hSb3dDcnVkU3RhdGUge1xuICAgIHB1YmxpYyBhZGRSb3dQYXJlbnQ6IElneEFkZFJvd1BhcmVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBjcmVhdGVBZGRSb3cocGFyZW50Um93OiBJZ3hSb3dEaXJlY3RpdmU8SWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZT4sIGFzQ2hpbGQ/OiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlQWRkUm93UGFyZW50KHBhcmVudFJvdywgYXNDaGlsZCk7XG5cbiAgICAgICAgY29uc3QgbmV3UmVjID0gdGhpcy5ncmlkLmdldEVtcHR5UmVjb3JkT2JqZWN0Rm9yKHBhcmVudFJvdyk7XG4gICAgICAgIGNvbnN0IGFkZFJvd0luZGV4ID0gdGhpcy5hZGRSb3dQYXJlbnQuaW5kZXggKyAxO1xuICAgICAgICByZXR1cm4gdGhpcy5yb3cgPSBuZXcgSWd4QWRkUm93KG5ld1JlYy5yb3dJRCwgYWRkUm93SW5kZXgsIG5ld1JlYy5kYXRhLCBuZXdSZWMucmVjb3JkUmVmLCB0aGlzLmdyaWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGNyZWF0ZUFkZFJvd1BhcmVudChyb3c6IElneFJvd0RpcmVjdGl2ZTxJZ3hHcmlkQmFzZURpcmVjdGl2ZSAmIEdyaWRUeXBlPiwgbmV3Um93QXNDaGlsZD86IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSByb3cgPyByb3cuaW5kZXggOiAtMTtcbiAgICAgICAgY29uc3Qgcm93SWQgPSByb3cgPyByb3cucm93SUQgOiBudWxsO1xuICAgICAgICBjb25zdCBpc0luUGlubmVkQXJlYSA9IHRoaXMuZ3JpZC5pc1JlY29yZFBpbm5lZEJ5Vmlld0luZGV4KHJvd0luZGV4KTtcbiAgICAgICAgY29uc3QgcGluSW5kZXggPSB0aGlzLmdyaWQucGlubmVkUmVjb3Jkcy5maW5kSW5kZXgoeCA9PiB4W3RoaXMucHJpbWFyeUtleV0gPT09IHJvd0lkKTtcbiAgICAgICAgY29uc3QgdW5waW5JbmRleCA9IHRoaXMuZ3JpZC5nZXRVbnBpbm5lZEluZGV4QnlJZChyb3dJZCk7XG4gICAgICAgIHRoaXMuYWRkUm93UGFyZW50ID0ge1xuICAgICAgICAgICAgcm93SUQ6IHJvd0lkLFxuICAgICAgICAgICAgaW5kZXg6IGlzSW5QaW5uZWRBcmVhID8gcGluSW5kZXggOiB1bnBpbkluZGV4LFxuICAgICAgICAgICAgYXNDaGlsZDogbmV3Um93QXNDaGlsZCxcbiAgICAgICAgICAgIGlzUGlubmVkOiBpc0luUGlubmVkQXJlYVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGVuZFJvd1RyYW5zYWN0aW9uKGNvbW1pdDogYm9vbGVhbiwgZXZlbnQ/OiBFdmVudCk6IElHcmlkRWRpdEV2ZW50QXJncyB7XG4gICAgICAgIGNvbnN0IGlzQWRkUm93ID0gdGhpcy5yb3cgJiYgdGhpcy5yb3cuZ2V0Q2xhc3NOYW1lKCkgPT09IElneEFkZFJvdy5uYW1lO1xuICAgICAgICBpZiAoaXNBZGRSb3cpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5yb3dBZGRlZC5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgoYWRkUm93QXJnczogSVJvd0RhdGFFdmVudEFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByb3dEYXRhID0gYWRkUm93QXJncy5kYXRhO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBpbm5lZEluZGV4ID0gdGhpcy5ncmlkLnBpbm5lZFJlY29yZHMuZmluZEluZGV4KHggPT4geFt0aGlzLnByaW1hcnlLZXldID09PSByb3dEYXRhW3RoaXMucHJpbWFyeUtleV0pO1xuICAgICAgICAgICAgICAgIC8vIEEgY2hlY2sgd2hldGhlciB0aGUgcm93IGlzIGluIHRoZSBjdXJyZW50IHZpZXdcbiAgICAgICAgICAgICAgICBjb25zdCB2aWV3SW5kZXggPSBwaW5uZWRJbmRleCAhPT0gLTEgPyBwaW5uZWRJbmRleCA6IHRoaXMuX2ZpbmRSZWNvcmRJbmRleEluVmlldyhyb3dEYXRhKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhSW5kZXggPSB0aGlzLmdyaWQuZmlsdGVyZWRTb3J0ZWREYXRhLmZpbmRJbmRleChkYXRhID0+IGRhdGFbdGhpcy5wcmltYXJ5S2V5XSA9PT0gcm93RGF0YVt0aGlzLnByaW1hcnlLZXldKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0luVmlldyA9IHZpZXdJbmRleCAhPT0gLTEgJiYgIXRoaXMuZ3JpZC5uYXZpZ2F0aW9uLnNob3VsZFBlcmZvcm1WZXJ0aWNhbFNjcm9sbCh2aWV3SW5kZXgsIDApO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNob3dJbmRleCA9IGlzSW5WaWV3ID8gLTEgOiBkYXRhSW5kZXg7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnNob3dTbmFja2JhckZvcihzaG93SW5kZXgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcmdzID0gc3VwZXIuZW5kUm93VHJhbnNhY3Rpb24oY29tbWl0LCBldmVudCk7XG4gICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNBZGRSb3cpIHtcbiAgICAgICAgICAgIHRoaXMuZW5kQWRkUm93KCk7XG4gICAgICAgICAgICBpZiAoY29tbWl0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnJvd0FkZGVkTm90aWZpZXIubmV4dCh7IGRhdGE6IGFyZ3MubmV3VmFsdWUgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnJvd0FkZGVkLmVtaXQoeyBkYXRhOiBhcmdzLm5ld1ZhbHVlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZW5kQWRkUm93KCkge1xuICAgICAgICB0aGlzLmFkZFJvd1BhcmVudCA9IG51bGw7XG4gICAgICAgIHRoaXMuZ3JpZC50cmlnZ2VyUGlwZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICogVE9ETzogY29uc2lkZXIgY2hhbmdpbmcgbW9kaWZpZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgX2ZpbmRSZWNvcmRJbmRleEluVmlldyhyZWMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5kYXRhVmlldy5maW5kSW5kZXgoZGF0YSA9PiBkYXRhW3RoaXMucHJpbWFyeUtleV0gPT09IHJlY1t0aGlzLnByaW1hcnlLZXldKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0UGFyZW50Um93SWQoKSB7XG4gICAgICAgIGlmICh0aGlzLmFkZFJvd1BhcmVudC5hc0NoaWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hZGRSb3dQYXJlbnQuYXNDaGlsZCA/IHRoaXMuYWRkUm93UGFyZW50LnJvd0lEIDogdW5kZWZpbmVkOztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmFkZFJvd1BhcmVudC5yb3dJRCAhPT0gbnVsbCAmJiB0aGlzLmFkZFJvd1BhcmVudC5yb3dJRCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBzcGF3bmVkRm9yUmVjb3JkID0gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X3JlY19ieV9pZCh0aGlzLmFkZFJvd1BhcmVudC5yb3dJRCk7XG4gICAgICAgICAgICByZXR1cm4gc3Bhd25lZEZvclJlY29yZD8ucGFyZW50Py5yb3dJRDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIElneEdyaWRDUlVEU2VydmljZSBleHRlbmRzIElneFJvd0FkZENydWRTdGF0ZSB7XG5cbiAgICBwdWJsaWMgZW50ZXJFZGl0TW9kZShjZWxsLCBldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmlzSW5Db21wb3NpdGlvbk1vZGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNlbGxJbkVkaXRNb2RlKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBjYXNlIHNvbGVseSBmb3IgZjIvZW50ZXIgbmF2IHRoYXQgdXNlcyBlbnRlckVkaXRNb2RlIGFzIHRvZ2dsZS4gUmVmYWN0b3IuXG4gICAgICAgICAgICBjb25zdCBjYW5jZWxlZCA9IHRoaXMuZW5kRWRpdCh0cnVlLCBldmVudCk7XG5cbiAgICAgICAgICAgIGlmICghY2FuY2VsZWQgfHwgIXRoaXMuY2VsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC50Ym9keS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yb3dFZGl0aW5nKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucm93ICYmICF0aGlzLnNhbWVSb3coY2VsbD8uY2VsbElEPy5yb3dJRCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dFZGl0aW5nQmxvY2tlZCA9IHRoaXMuZW5kRWRpdCh0cnVlLCBldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJvd0VkaXRpbmdCbG9ja2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93RWRpdGluZ0Jsb2NrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmRSb3dFZGl0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlQ2VsbChjZWxsKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGNhbmNlbGVkID0gdGhpcy5iZWdpblJvd0VkaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGlmICghY2FuY2VsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWdpbkNlbGxFZGl0KGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVDZWxsKGNlbGwpO1xuICAgICAgICAgICAgICAgIHRoaXMuYmVnaW5DZWxsRWRpdChldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbnRlcnMgYWRkIHJvdyBtb2RlIGJ5IGNyZWF0aW5nIHRlbXBvcmFyeSBkdW1teSBzbyB0aGUgdXNlciBjYW4gZmlsbCBpbiBuZXcgcm93IGNlbGxzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBhcmVudFJvdyBQYXJlbnQgcm93IGFmdGVyIHdoaWNoIHRoZSBBZGQgUm93IFVJIHdpbGwgYmUgcmVuZGVyZWQuXG4gICAgICogICAgICAgICAgICAgICAgICBJZiBgbnVsbGAgd2lsbCBzaG93IGl0IGF0IHRoZSBib3R0b20gYWZ0ZXIgYWxsIHJvd3MgKG9yIHRvcCBpZiB0aGVyZSBhcmUgbm90IHJvd3MpLlxuICAgICAqIEBwYXJhbSBhc0NoaWxkIFNwZWNpZmllcyBpZiB0aGUgbmV3IHJvdyBzaG91bGQgYmUgYWRkZWQgYXMgYSBjaGlsZCB0byBhIHRyZWUgcm93LlxuICAgICAqIEBwYXJhbSBldmVudCBCYXNlIGV2ZW50IHRoYXQgdHJpZ2dlcmVkIHRoZSBhZGQgcm93IG1vZGUuXG4gICAgICovXG4gICAgcHVibGljIGVudGVyQWRkUm93TW9kZShwYXJlbnRSb3c6IElneFJvd0RpcmVjdGl2ZTxJZ3hHcmlkQmFzZURpcmVjdGl2ZSAmIEdyaWRUeXBlPiwgYXNDaGlsZD86IGJvb2xlYW4sIGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJvd0VkaXRpbmcgJiYgKHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID09PSB1bmRlZmluZWQgfHwgdGhpcy5ncmlkLnByaW1hcnlLZXkgPT09IG51bGwpKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBncmlkIG11c3QgdXNlIHJvdyBlZGl0IG1vZGUgdG8gcGVyZm9ybSByb3cgYWRkaW5nISBQbGVhc2Ugc2V0IHJvd0VkaXRhYmxlIHRvIHRydWUuJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbmRFZGl0KHRydWUsIGV2ZW50KTtcblxuICAgICAgICBpZiAocGFyZW50Um93ICE9IG51bGwgJiYgdGhpcy5ncmlkLmV4cGFuc2lvblN0YXRlcy5nZXQocGFyZW50Um93LnJvd0lEKSkge1xuICAgICAgICAgICAgdGhpcy5ncmlkLmNvbGxhcHNlUm93KHBhcmVudFJvdy5yb3dJRCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNyZWF0ZUFkZFJvdyhwYXJlbnRSb3csIGFzQ2hpbGQpO1xuXG4gICAgICAgIHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuc3RhcnRQZW5kaW5nKCk7XG4gICAgICAgIGlmICh0aGlzLmFkZFJvd1BhcmVudC5pc1Bpbm5lZCkge1xuICAgICAgICAgICAgLy8gSWYgcGFyZW50IGlzIHBpbm5lZCwgYWRkIHRoZSBuZXcgcm93IHRvIHBpbm5lZCByZWNvcmRzXG4gICAgICAgICAgICAodGhpcy5ncmlkIGFzIGFueSkuX3Bpbm5lZFJlY29yZElEcy5zcGxpY2UodGhpcy5yb3cuaW5kZXgsIDAsIHRoaXMucm93LmlkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ3JpZC50cmlnZ2VyUGlwZXMoKTtcbiAgICAgICAgdGhpcy5ncmlkLm5vdGlmeUNoYW5nZXModHJ1ZSk7XG5cbiAgICAgICAgdGhpcy5ncmlkLm5hdmlnYXRlVG8odGhpcy5yb3cuaW5kZXgsIC0xKTtcbiAgICAgICAgLy8gd2hlbiBzZWxlY3RpbmcgdGhlIGR1bW15IHJvdyB3ZSBuZWVkIHRvIGFkanVzdCBmb3IgdG9wIHBpbm5lZCByb3dzXG4gICAgICAgIGNvbnN0IGluZGV4QWRqdXN0ID0gdGhpcy5ncmlkLmlzUm93UGlubmluZ1RvVG9wICYmICF0aGlzLmFkZFJvd1BhcmVudC5pc1Bpbm5lZCA/IHRoaXMuZ3JpZC5waW5uZWRSb3dzLmxlbmd0aCA6IDA7XG4gICAgICAgIGNvbnN0IGR1bW15Um93ID0gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X3Jvd19ieV9pbmRleCh0aGlzLnJvdy5pbmRleCArIGluZGV4QWRqdXN0KTtcbiAgICAgICAgZHVtbXlSb3cudHJpZ2dlckFkZEFuaW1hdGlvbigpO1xuICAgICAgICBkdW1teVJvdy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICBkdW1teVJvdy5hZGRBbmltYXRpb25FbmQucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IGR1bW15Um93LmNlbGxzLmZpbmQoYyA9PiBjLmVkaXRhYmxlKTtcbiAgICAgICAgICAgIGlmIChjZWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmdyaWRBUEkudXBkYXRlX2NlbGwodGhpcy5jZWxsKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVudGVyRWRpdE1vZGUoY2VsbCwgZXZlbnQpO1xuICAgICAgICAgICAgICAgIGNlbGwuYWN0aXZhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmluaXNoZXMgdGhlIHJvdyB0cmFuc2FjdGlvbnMgb24gdGhlIGN1cnJlbnQgcm93LlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBJZiBgY29tbWl0ID09PSB0cnVlYCwgcGFzc2VzIHRoZW0gZnJvbSB0aGUgcGVuZGluZyBzdGF0ZSB0byB0aGUgZGF0YSAob3IgdHJhbnNhY3Rpb24gc2VydmljZSlcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8YnV0dG9uIGlneEJ1dHRvbiAoY2xpY2spPVwiZ3JpZC5lbmRFZGl0KHRydWUpXCI+Q29tbWl0IFJvdzwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqIEBwYXJhbSBjb21taXRcbiAgICAgKi9cbiAgICAvLyBUT0RPOiBJbXBsZW1lbnQgdGhlIHNhbWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1ldGhvZCB3aXRob3V0IGV2dCBlbWlzc2lvbi5cbiAgICBwdWJsaWMgZW5kRWRpdChjb21taXQgPSB0cnVlLCBldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5yb3cgJiYgIXRoaXMuY2VsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGFyZ3M7XG4gICAgICAgIGlmIChjb21taXQpIHtcbiAgICAgICAgICAgIGFyZ3MgPSB0aGlzLnVwZGF0ZUNlbGwodHJ1ZSwgZXZlbnQpO1xuICAgICAgICAgICAgaWYgKGFyZ3MgJiYgYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJncy5jYW5jZWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmV4aXRDZWxsRWRpdChldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBhcmdzID0gdGhpcy51cGRhdGVSb3coY29tbWl0LCBldmVudCk7XG4gICAgICAgIHRoaXMucm93RWRpdGluZ0Jsb2NrZWQgPSBhcmdzLmNhbmNlbDtcbiAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFjdGl2ZUNlbGwgPSB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5hY3RpdmVFbGVtZW50O1xuICAgICAgICBpZiAoZXZlbnQgJiYgYWN0aXZlQ2VsbCkge1xuICAgICAgICAgICAgY29uc3Qgcm93SW5kZXggPSBhY3RpdmVDZWxsLnJvdztcbiAgICAgICAgICAgIGNvbnN0IHZpc2libGVDb2xJbmRleCA9IGFjdGl2ZUNlbGwubGF5b3V0ID8gYWN0aXZlQ2VsbC5sYXlvdXQuY29sdW1uVmlzaWJsZUluZGV4IDogYWN0aXZlQ2VsbC5jb2x1bW47XG4gICAgICAgICAgICB0aGlzLmdyaWQubmF2aWdhdGVUbyhyb3dJbmRleCwgdmlzaWJsZUNvbEluZGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG4iXX0=
563
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2NvbW1vbi9jcnVkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJdkMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBRTNELE1BQU0sT0FBTyxVQUFVO0lBS25CLFlBQW1CLEVBQU8sRUFBUyxLQUFhLEVBQVMsSUFBUyxFQUFTLElBQXFDO1FBQTdGLE9BQUUsR0FBRixFQUFFLENBQUs7UUFBUyxVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQVMsU0FBSSxHQUFKLElBQUksQ0FBSztRQUFTLFNBQUksR0FBSixJQUFJLENBQWlDO0lBQUksQ0FBQztJQUU5RyxtQkFBbUIsQ0FBQyxlQUFlLEdBQUcsSUFBSSxFQUFFLEtBQWE7O1FBQzVELE1BQU0sSUFBSSxHQUF1QjtZQUM3QixLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDZCxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDbEIsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ25CLE1BQU0sRUFBRSxLQUFLO1lBQ2IsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2hCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsS0FBSztTQUNSLENBQUM7UUFDRixJQUFJLGVBQWUsRUFBRTtZQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQUEsSUFBSSxDQUFDLE9BQU8sbUNBQUksSUFBSSxDQUFDLElBQUksQ0FBQztTQUM3QztRQUNELE9BQU8sSUFBSSxDQUFDO0lB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QyxTQUFTLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3JDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNiLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQztRQUM1RCxJQUFJLEtBQUssSUFBSSxVQUFVLEVBQUU7WUFDckIsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQztZQUNoQyxNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO1lBQ3JHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxlQUFlLENBQUMsQ0FBQztTQUNuRDtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7OztZQS9ISixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZmlyc3QgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJR3JpZEVkaXREb25lRXZlbnRBcmdzLCBJR3JpZEVkaXRFdmVudEFyZ3MsIElneEdyaWRCYXNlRGlyZWN0aXZlLCBJUm93RGF0YUV2ZW50QXJncyB9IGZyb20gJy4uL2dyaWQvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBJZ3hSb3dEaXJlY3RpdmUgfSBmcm9tICcuLi9yb3cuZGlyZWN0aXZlJztcbmltcG9ydCB7IEdyaWRUeXBlIH0gZnJvbSAnLi9ncmlkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjb3B5RGVzY3JpcHRvcnMsIGlzRXF1YWx9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgSWd4RWRpdFJvdyB7XG4gICAgcHVibGljIHRyYW5zYWN0aW9uU3RhdGU6IGFueTtcbiAgICBwdWJsaWMgc3RhdGU6IGFueTtcbiAgICBwdWJsaWMgbmV3RGF0YTogYW55O1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIGlkOiBhbnksIHB1YmxpYyBpbmRleDogbnVtYmVyLCBwdWJsaWMgZGF0YTogYW55LCBwdWJsaWMgZ3JpZDogSWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZSkgeyB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRWRpdEV2ZW50QXJncyhpbmNsdWRlTmV3VmFsdWUgPSB0cnVlLCBldmVudD86IEV2ZW50KTogSUdyaWRFZGl0RXZlbnRBcmdzIHtcbiAgICAgICAgY29uc3QgYXJnczogSUdyaWRFZGl0RXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgcm93SUQ6IHRoaXMuaWQsXG4gICAgICAgICAgICByb3dEYXRhOiB0aGlzLmRhdGEsXG4gICAgICAgICAgICBvbGRWYWx1ZTogdGhpcy5kYXRhLFxuICAgICAgICAgICAgY2FuY2VsOiBmYWxzZSxcbiAgICAgICAgICAgIG93bmVyOiB0aGlzLmdyaWQsXG4gICAgICAgICAgICBpc0FkZFJvdzogZmFsc2UsXG4gICAgICAgICAgICBldmVudFxuICAgICAgICB9O1xuICAgICAgICBpZiAoaW5jbHVkZU5ld1ZhbHVlKSB7XG4gICAgICAgICAgICBhcmdzLm5ld1ZhbHVlID0gdGhpcy5uZXdEYXRhID8/IHRoaXMuZGF0YTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRG9uZUVkaXRFdmVudEFyZ3MoY2FjaGVkUm93RGF0YTogYW55LCBldmVudD86IEV2ZW50KTogSUdyaWRFZGl0RG9uZUV2ZW50QXJncyB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWREYXRhID0gdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkID9cbiAgICAgICAgICAgIHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZ2V0QWdncmVnYXRlZFZhbHVlKHRoaXMuaWQsIHRydWUpIDogdGhpcy5ncmlkLmdyaWRBUEkuZ2V0Um93RGF0YSh0aGlzLmlkKTtcbiAgICAgICAgY29uc3Qgcm93RGF0YSA9IHVwZGF0ZWREYXRhID8/IHRoaXMuZ3JpZC5ncmlkQVBJLmdldFJvd0RhdGEodGhpcy5pZCk7XG4gICAgICAgIGNvbnN0IGFyZ3M6IElHcmlkRWRpdERvbmVFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICByb3dJRDogdGhpcy5pZCxcbiAgICAgICAgICAgIHJvd0RhdGEsXG4gICAgICAgICAgICBvbGRWYWx1ZTogY2FjaGVkUm93RGF0YSxcbiAgICAgICAgICAgIG5ld1ZhbHVlOiB1cGRhdGVkRGF0YSxcbiAgICAgICAgICAgIG93bmVyOiB0aGlzLmdyaWQsXG4gICAgICAgICAgICBpc0FkZFJvdzogZmFsc2UsXG4gICAgICAgICAgICBldmVudFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSWd4QWRkUm93IGV4dGVuZHMgSWd4RWRpdFJvdyB7XG4gICAgcHVibGljIGlzQWRkUm93ID0gdHJ1ZTtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBpZDogYW55LFxuICAgICAgICBwdWJsaWMgaW5kZXg6IG51bWJlcixcbiAgICAgICAgcHVibGljIGRhdGE6IGFueSxcbiAgICAgICAgcHVibGljIHJlY29yZFJlZjogYW55LFxuICAgICAgICBwdWJsaWMgZ3JpZDogSWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZSkge1xuICAgICAgICBzdXBlcihpZCwgaW5kZXgsIGRhdGEsIGdyaWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVFZGl0RXZlbnRBcmdzKGluY2x1ZGVOZXdWYWx1ZSA9IHRydWUsIGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXRFdmVudEFyZ3Mge1xuICAgICAgICBjb25zdCBhcmdzID0gc3VwZXIuY3JlYXRlRWRpdEV2ZW50QXJncyhpbmNsdWRlTmV3VmFsdWUsIGV2ZW50KTtcbiAgICAgICAgYXJncy5vbGRWYWx1ZSA9IG51bGw7XG4gICAgICAgIGFyZ3MuaXNBZGRSb3cgPSB0cnVlO1xuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRG9uZUVkaXRFdmVudEFyZ3MoY2FjaGVkUm93RGF0YTogYW55LCBldmVudD86IEV2ZW50KTogSUdyaWRFZGl0RG9uZUV2ZW50QXJncyB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBzdXBlci5jcmVhdGVEb25lRWRpdEV2ZW50QXJncyhudWxsLCBldmVudCk7XG4gICAgICAgIGFyZ3MuaXNBZGRSb3cgPSB0cnVlO1xuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWd4QWRkUm93UGFyZW50IHtcbiAgICByb3dJRDogc3RyaW5nO1xuICAgIGluZGV4OiBudW1iZXI7XG4gICAgYXNDaGlsZDogYm9vbGVhbjtcbiAgICBpc1Bpbm5lZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIElneENlbGwge1xuICAgIHB1YmxpYyBwcmltYXJ5S2V5OiBhbnk7XG4gICAgcHVibGljIHN0YXRlOiBhbnk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGlkLFxuICAgICAgICBwdWJsaWMgcm93SW5kZXg6IG51bWJlcixcbiAgICAgICAgcHVibGljIGNvbHVtbixcbiAgICAgICAgcHVibGljIHZhbHVlOiBhbnksXG4gICAgICAgIHB1YmxpYyBlZGl0VmFsdWU6IGFueSxcbiAgICAgICAgcHVibGljIHJvd0RhdGE6IGFueSxcbiAgICAgICAgcHVibGljIGdyaWQ6IElneEdyaWRCYXNlRGlyZWN0aXZlICYgR3JpZFR5cGUpIHsgfVxuXG4gICAgcHVibGljIGNhc3RUb051bWJlcih2YWx1ZTogYW55KTogYW55IHtcbiAgICAgICAgaWYgKHRoaXMuY29sdW1uLmRhdGFUeXBlID09PSAnbnVtYmVyJyAmJiAhdGhpcy5jb2x1bW4uaW5saW5lRWRpdG9yVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiAhaXNOYU4odikgJiYgaXNGaW5pdGUodikgPyB2IDogMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUVkaXRFdmVudEFyZ3MoaW5jbHVkZU5ld1ZhbHVlID0gdHJ1ZSwgZXZlbnQ/OiBFdmVudCk6IElHcmlkRWRpdEV2ZW50QXJncyB7XG4gICAgICAgIGNvbnN0IGFyZ3M6IElHcmlkRWRpdEV2ZW50QXJncyA9IHtcbiAgICAgICAgICAgIHJvd0lEOiB0aGlzLmlkLnJvd0lELFxuICAgICAgICAgICAgY2VsbElEOiB0aGlzLmlkLFxuICAgICAgICAgICAgcm93RGF0YTogdGhpcy5yb3dEYXRhLFxuICAgICAgICAgICAgb2xkVmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICBjYW5jZWw6IGZhbHNlLFxuICAgICAgICAgICAgY29sdW1uOiB0aGlzLmNvbHVtbixcbiAgICAgICAgICAgIG93bmVyOiB0aGlzLmdyaWQsXG4gICAgICAgICAgICBldmVudFxuICAgICAgICB9O1xuICAgICAgICBpZiAoaW5jbHVkZU5ld1ZhbHVlKSB7XG4gICAgICAgICAgICBhcmdzLm5ld1ZhbHVlID0gdGhpcy5jYXN0VG9OdW1iZXIodGhpcy5lZGl0VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVEb25lRWRpdEV2ZW50QXJncyh2YWx1ZTogYW55LCBldmVudD86IEV2ZW50KTogSUdyaWRFZGl0RG9uZUV2ZW50QXJncyB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWREYXRhID0gdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkID9cbiAgICAgICAgICAgIHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZ2V0QWdncmVnYXRlZFZhbHVlKHRoaXMuaWQucm93SUQsIHRydWUpIDogdGhpcy5yb3dEYXRhO1xuICAgICAgICBjb25zdCByb3dEYXRhID0gdXBkYXRlZERhdGEgPT09IG51bGwgPyB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRSb3dEYXRhKHRoaXMuaWQucm93SUQpIDogdXBkYXRlZERhdGE7XG4gICAgICAgIGNvbnN0IGFyZ3M6IElHcmlkRWRpdERvbmVFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICByb3dJRDogdGhpcy5pZC5yb3dJRCxcbiAgICAgICAgICAgIGNlbGxJRDogdGhpcy5pZCxcbiAgICAgICAgICAgIC8vIHJvd0RhdGEgLSBzaG91bGQgYmUgdGhlIHVwZGF0ZWQvY29tbWl0dGVkIHJvd0RhdGEgLSB0aGlzIGVmZmVjdGl2ZWx5IHNob3VsZCBiZSB0aGUgbmV3VmFsdWVcbiAgICAgICAgICAgIC8vIHRoZSBvbmx5IGNhc2Ugd2UgdXNlIHRoaXMucm93RGF0YSBkaXJlY3RseSwgaXMgd2hlbiB0aGVyZSBpcyBubyByb3dFZGl0aW5nIG9yIHRyYW5zYWN0aW9ucyBlbmFibGVkXG4gICAgICAgICAgICByb3dEYXRhLFxuICAgICAgICAgICAgb2xkVmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICBuZXdWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgICBjb2x1bW46IHRoaXMuY29sdW1uLFxuICAgICAgICAgICAgb3duZXI6IHRoaXMuZ3JpZCxcbiAgICAgICAgICAgIGV2ZW50XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIElneENlbGxDcnVkU3RhdGUge1xuICAgIHB1YmxpYyBncmlkOiBJZ3hHcmlkQmFzZURpcmVjdGl2ZSAmIEdyaWRUeXBlO1xuICAgIHB1YmxpYyBjZWxsOiBJZ3hDZWxsIHwgbnVsbCA9IG51bGw7XG4gICAgcHVibGljIHJvdzogSWd4RWRpdFJvdyB8IG51bGwgPSBudWxsO1xuICAgIHB1YmxpYyBpc0luQ29tcG9zaXRpb25Nb2RlID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgY3JlYXRlQ2VsbChjZWxsKTogSWd4Q2VsbCB7XG4gICAgICAgIC8vIGNlbGwucm93RGF0YSA/PyBjZWxsLnJvdy5kYXRhIGNvdmVycyB0aGUgY2FzZXMsIHdoZXJlXG4gICAgICAgIC8vIDEuIGNlbGwgaXMgYW4gaW5zdGFuY2Ugb2cgSWd4R3JpZENlbGxDb21wb25lbnRcbiAgICAgICAgLy8gMi4gY2VsbCBpcyBhbiBpbnN0YW5jZSBvZiBJZ3hHcmlkQ2VsbFxuICAgICAgICAvLyBOb3RlOiBpZiBhdCBzb21lIHBvaW50IHdlIGFyZSBnb2luZyB0byBnZXQgcmlkIG9mIHVzaW5nIDEpLCB0aGVuIHNlZSB0ZXN0ICdzaG91bGQgYWxsb3cgYWRkaW5nIHJvdyB0byBlbXB0eSBncmlkJzpcbiAgICAgICAgLy8gY2VsbC5yb3cuZGF0YSB3aWxsIHJldHVybiBhIHsgZGF0YTsgcm93SUQgfSBvYmplY3QgaGVyZSwgYW5kIHRlc3Qgd2lsbCBmYWlsXG4gICAgICAgIHJldHVybiB0aGlzLmNlbGwgPSBuZXcgSWd4Q2VsbChjZWxsLmNlbGxJRCB8fCBjZWxsLmlkLCBjZWxsLnJvdy5pbmRleCwgY2VsbC5jb2x1bW4sIGNlbGwudmFsdWUsIGNlbGwudmFsdWUsXG4gICAgICAgICAgICBjZWxsLnJvd0RhdGEgPz8gY2VsbC5yb3cuZGF0YSwgY2VsbC5ncmlkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlUm93KGNlbGw6IElneENlbGwpOiBJZ3hFZGl0Um93IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm93ID0gbmV3IElneEVkaXRSb3coY2VsbC5pZC5yb3dJRCwgY2VsbC5yb3dJbmRleCwgY2VsbC5yb3dEYXRhLCBjZWxsLmdyaWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzYW1lUm93KHJvd0lEKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvdyAmJiB0aGlzLnJvdy5pZCA9PT0gcm93SUQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNhbWVDZWxsKGNlbGw6IElneENlbGwpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmNlbGwuaWQucm93SUQgPT09IGNlbGwuaWQucm93SUQgJiZcbiAgICAgICAgICAgIHRoaXMuY2VsbC5pZC5jb2x1bW5JRCA9PT0gY2VsbC5pZC5jb2x1bW5JRCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjZWxsSW5FZGl0TW9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5jZWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBiZWdpbkNlbGxFZGl0KGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHRoaXMuY2VsbC5jcmVhdGVFZGl0RXZlbnRBcmdzKGZhbHNlLCBldmVudCk7XG4gICAgICAgIHRoaXMuZ3JpZC5jZWxsRWRpdEVudGVyLmVtaXQoYXJncyk7XG5cbiAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICB0aGlzLmVuZENlbGxFZGl0KCk7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHB1YmxpYyBjZWxsRWRpdChldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSB0aGlzLmNlbGwuY3JlYXRlRWRpdEV2ZW50QXJncyh0cnVlLCBldmVudCk7XG4gICAgICAgIHRoaXMuZ3JpZC5jZWxsRWRpdC5lbWl0KGFyZ3MpO1xuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlQ2VsbChleGl0OiBib29sZWFuLCBldmVudD86IEV2ZW50KTogSUdyaWRFZGl0RXZlbnRBcmdzIHtcbiAgICAgICAgaWYgKCF0aGlzLmNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBkb25lQXJncztcbiAgICAgICAgaWYgKGlzRXF1YWwodGhpcy5jZWxsLnZhbHVlLCB0aGlzLmNlbGwuZWRpdFZhbHVlKSkge1xuICAgICAgICAgICAgZG9uZUFyZ3MgPSB0aGlzLmV4aXRDZWxsRWRpdChldmVudCk7XG4gICAgICAgICAgICByZXR1cm4gZG9uZUFyZ3M7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcmdzID0gdGhpcy5jZWxsRWRpdChldmVudCk7XG4gICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdyaWQuZ3JpZEFQSS51cGRhdGVfY2VsbCh0aGlzLmNlbGwpO1xuXG4gICAgICAgIGRvbmVBcmdzID0gdGhpcy5jZWxsRWRpdERvbmUoZXZlbnQsIGZhbHNlKTtcbiAgICAgICAgaWYgKGV4aXQpIHtcbiAgICAgICAgICAgIGRvbmVBcmdzID0gdGhpcy5leGl0Q2VsbEVkaXQoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgLi4uYXJncywgLi4uZG9uZUFyZ3MgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2VsbEVkaXREb25lKGV2ZW50LCBhZGRSb3c6IGJvb2xlYW4pOiBJR3JpZEVkaXREb25lRXZlbnRBcmdzIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLmNlbGwuY2FzdFRvTnVtYmVyKHRoaXMuY2VsbC5lZGl0VmFsdWUpO1xuICAgICAgICBjb25zdCBkb25lQXJncyA9IHRoaXMuY2VsbC5jcmVhdGVEb25lRWRpdEV2ZW50QXJncyhuZXdWYWx1ZSwgZXZlbnQpO1xuICAgICAgICB0aGlzLmdyaWQuY2VsbEVkaXREb25lLmVtaXQoZG9uZUFyZ3MpO1xuICAgICAgICBpZiAoYWRkUm93KSB7XG4gICAgICAgICAgICBkb25lQXJncy5yb3dEYXRhID0gdGhpcy5yb3cuZGF0YTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZG9uZUFyZ3M7XG4gICAgfVxuXG4gICAgLyoqIEV4aXQgY2VsbCBlZGl0IG1vZGUgKi9cbiAgICBwdWJsaWMgZXhpdENlbGxFZGl0KGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXREb25lRXZlbnRBcmdzIHtcbiAgICAgICAgaWYgKCF0aGlzLmNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5jZWxsLmNhc3RUb051bWJlcih0aGlzLmNlbGwuZWRpdFZhbHVlKTtcbiAgICAgICAgY29uc3QgYXJncyA9IHRoaXMuY2VsbD8uY3JlYXRlRG9uZUVkaXRFdmVudEFyZ3MobmV3VmFsdWUsIGV2ZW50KTtcblxuICAgICAgICB0aGlzLmNlbGwudmFsdWUgPSBuZXdWYWx1ZTtcblxuICAgICAgICB0aGlzLmdyaWQuY2VsbEVkaXRFeGl0LmVtaXQoYXJncyk7XG4gICAgICAgIHRoaXMuZW5kQ2VsbEVkaXQoKTtcbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgfVxuXG4gICAgLyoqIENsZWFycyBjZWxsIGVkaXRpbmcgc3RhdGUgKi9cbiAgICBwdWJsaWMgZW5kQ2VsbEVkaXQoKSB7XG4gICAgICAgIHRoaXMuY2VsbCA9IG51bGw7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgd2hldGhlciB0aGUgdGFyZ2V0ZWQgY2VsbCBpcyBpbiBlZGl0IG1vZGUgKi9cbiAgICBwdWJsaWMgdGFyZ2V0SW5FZGl0KHJvd0luZGV4OiBudW1iZXIsIGNvbHVtbkluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLmNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXMgPSB0aGlzLmNlbGwuY29sdW1uLmluZGV4ID09PSBjb2x1bW5JbmRleCAmJiB0aGlzLmNlbGwucm93SW5kZXggPT09IHJvd0luZGV4O1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBJZ3hSb3dDcnVkU3RhdGUgZXh0ZW5kcyBJZ3hDZWxsQ3J1ZFN0YXRlIHtcbiAgICBwdWJsaWMgcm93OiBJZ3hFZGl0Um93IHwgbnVsbCA9IG51bGw7XG4gICAgcHVibGljIGNsb3NlUm93RWRpdGluZ092ZXJsYXkgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgcHJpdmF0ZSBfcm93RWRpdGluZ0Jsb2NrZWQgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBnZXQgcHJpbWFyeUtleSgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnByaW1hcnlLZXk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dJbkVkaXRNb2RlKCk6IElneFJvd0RpcmVjdGl2ZTxJZ3hHcmlkQmFzZURpcmVjdGl2ZSAmIEdyaWRUeXBlPiB7XG4gICAgICAgIGNvbnN0IGVkaXRSb3dTdGF0ZSA9IHRoaXMucm93O1xuICAgICAgICByZXR1cm4gZWRpdFJvd1N0YXRlICE9PSBudWxsID8gdGhpcy5ncmlkLnJvd0xpc3QuZmluZChlID0+IGUucm93SUQgPT09IGVkaXRSb3dTdGF0ZS5pZCkgOiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcm93RWRpdGluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5yb3dFZGl0YWJsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJvd0VkaXRpbmdCbG9ja2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm93RWRpdGluZ0Jsb2NrZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCByb3dFZGl0aW5nQmxvY2tlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fcm93RWRpdGluZ0Jsb2NrZWQgPSB2YWw7XG4gICAgfVxuXG4gICAgLyoqIEVudGVycyByb3cgZWRpdCBtb2RlICovXG4gICAgcHVibGljIGJlZ2luUm93RWRpdChldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmdyaWQucm93RWRpdGFibGUgJiYgKHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID09PSB1bmRlZmluZWQgfHwgdGhpcy5ncmlkLnByaW1hcnlLZXkgPT09IG51bGwpKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBncmlkIG11c3QgaGF2ZSBhIGBwcmltYXJ5S2V5YCBzcGVjaWZpZWQgd2hlbiB1c2luZyBgcm93RWRpdGFibGVgIScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnJvdyB8fCAhKHRoaXMucm93LmdldENsYXNzTmFtZSgpID09PSBJZ3hFZGl0Um93Lm5hbWUpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucm93KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVSb3codGhpcy5jZWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJvd0FyZ3MgPSB0aGlzLnJvdy5jcmVhdGVFZGl0RXZlbnRBcmdzKGZhbHNlLCBldmVudCk7XG5cbiAgICAgICAgICAgIHRoaXMuZ3JpZC5yb3dFZGl0RW50ZXIuZW1pdChyb3dBcmdzKTtcbiAgICAgICAgICAgIGlmIChyb3dBcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW5kRWRpdE1vZGUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5yb3cudHJhbnNhY3Rpb25TdGF0ZSA9IHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZ2V0QWdncmVnYXRlZFZhbHVlKHRoaXMucm93LmlkLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuc3RhcnRQZW5kaW5nKCk7XG4gICAgICAgICAgICB0aGlzLmdyaWQub3BlblJvd092ZXJsYXkodGhpcy5yb3cuaWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJvd0VkaXQoZXZlbnQ6IEV2ZW50KTogSUdyaWRFZGl0RXZlbnRBcmdzIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHRoaXMucm93LmNyZWF0ZUVkaXRFdmVudEFyZ3ModHJ1ZSwgZXZlbnQpO1xuICAgICAgICB0aGlzLmdyaWQucm93RWRpdC5lbWl0KGFyZ3MpO1xuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlUm93KGNvbW1pdDogYm9vbGVhbiwgZXZlbnQ/OiBFdmVudCk6IElHcmlkRWRpdEV2ZW50QXJncyB7XG4gICAgICAgIGlmICghdGhpcy5ncmlkLnJvd0VkaXRhYmxlIHx8XG4gICAgICAgICAgICB0aGlzLmdyaWQucm93RWRpdGluZ092ZXJsYXkgJiZcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5yb3dFZGl0aW5nT3ZlcmxheS5jb2xsYXBzZWQgfHwgIXRoaXMucm93KSB7XG4gICAgICAgICAgICByZXR1cm4ge30gYXMgSUdyaWRFZGl0RXZlbnRBcmdzO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGFyZ3M7XG4gICAgICAgIGlmIChjb21taXQpIHtcbiAgICAgICAgICAgIHRoaXMucm93Lm5ld0RhdGEgPSB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmdldEFnZ3JlZ2F0ZWRWYWx1ZSh0aGlzLnJvdy5pZCwgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVJvd0VkaXREYXRhKHRoaXMucm93LCB0aGlzLnJvdy5uZXdEYXRhKTtcbiAgICAgICAgICAgIGFyZ3MgPSB0aGlzLnJvd0VkaXQoZXZlbnQpO1xuICAgICAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucm93Lm5ld0RhdGE7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5jbGVhcih0aGlzLnJvdy5pZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhcmdzID0gdGhpcy5lbmRSb3dUcmFuc2FjdGlvbihjb21taXQsIGV2ZW50KTtcblxuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBlbmRSb3dUcmFuc2FjdGlvbihjb21taXQ6IGJvb2xlYW4sIGV2ZW50PzogRXZlbnQpOiBJR3JpZEVkaXRFdmVudEFyZ3Mge1xuICAgICAgICB0aGlzLnJvdy5uZXdEYXRhID0gdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5nZXRBZ2dyZWdhdGVkVmFsdWUodGhpcy5yb3cuaWQsIHRydWUpO1xuICAgICAgICBsZXQgcm93RWRpdEFyZ3MgPSB0aGlzLnJvdy5jcmVhdGVFZGl0RXZlbnRBcmdzKHRydWUsIGV2ZW50KTtcblxuICAgICAgICBsZXQgbm9uQ2FuY2VsYWJsZUFyZ3M7XG4gICAgICAgIGlmICghY29tbWl0KSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmVuZFBlbmRpbmcoZmFsc2UpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucm93LmdldENsYXNzTmFtZSgpID09PSBJZ3hFZGl0Um93Lm5hbWUpIHtcbiAgICAgICAgICAgIHJvd0VkaXRBcmdzID0gdGhpcy5ncmlkLmdyaWRBUEkudXBkYXRlX3Jvdyh0aGlzLnJvdywgdGhpcy5yb3cubmV3RGF0YSwgZXZlbnQpO1xuICAgICAgICAgICAgbm9uQ2FuY2VsYWJsZUFyZ3MgPSB0aGlzLnJvd0VkaXREb25lKHJvd0VkaXRBcmdzLm9sZFZhbHVlLCBldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByb3dBZGRBcmdzID0gdGhpcy5yb3cuY3JlYXRlRWRpdEV2ZW50QXJncyh0cnVlLCBldmVudCk7XG4gICAgICAgICAgICB0aGlzLmdyaWQucm93QWRkLmVtaXQocm93QWRkQXJncyk7XG4gICAgICAgICAgICBpZiAocm93QWRkQXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcm93QWRkQXJncztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5lbmRQZW5kaW5nKGZhbHNlKTtcblxuICAgICAgICAgICAgY29uc3QgcGFyZW50SWQgPSB0aGlzLmdldFBhcmVudFJvd0lkKCk7XG4gICAgICAgICAgICB0aGlzLmdyaWQuZ3JpZEFQSS5hZGRSb3dUb0RhdGEodGhpcy5yb3cubmV3RGF0YSA/PyB0aGlzLnJvdy5kYXRhLCBwYXJlbnRJZCk7XG4gICAgICAgICAgICB0aGlzLmdyaWQudHJpZ2dlclBpcGVzKCk7XG5cbiAgICAgICAgICAgIG5vbkNhbmNlbGFibGVBcmdzID0gdGhpcy5yb3dFZGl0RG9uZShudWxsLCBldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBub25DYW5jZWxhYmxlQXJncyA9IHRoaXMuZXhpdFJvd0VkaXQocm93RWRpdEFyZ3Mub2xkVmFsdWUsIGV2ZW50KTtcblxuICAgICAgICByZXR1cm4geyAuLi5ub25DYW5jZWxhYmxlQXJncywgLi4ucm93RWRpdEFyZ3MgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcm93RWRpdERvbmUoY2FjaGVkUm93RGF0YSwgZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGRvbmVBcmdzID0gdGhpcy5yb3cuY3JlYXRlRG9uZUVkaXRFdmVudEFyZ3MoY2FjaGVkUm93RGF0YSwgZXZlbnQpO1xuICAgICAgICB0aGlzLmdyaWQucm93RWRpdERvbmUuZW1pdChkb25lQXJncyk7XG4gICAgICAgIHJldHVybiBkb25lQXJncztcbiAgICB9XG5cblxuICAgIC8qKiBFeGl0IHJvdyBlZGl0IG1vZGUgKi9cbiAgICBwdWJsaWMgZXhpdFJvd0VkaXQoY2FjaGVkUm93RGF0YSwgZXZlbnQ/OiBFdmVudCk6IElHcmlkRWRpdERvbmVFdmVudEFyZ3Mge1xuICAgICAgICBjb25zdCBub25DYW5jZWxhYmxlQXJncyA9IHRoaXMucm93LmNyZWF0ZURvbmVFZGl0RXZlbnRBcmdzKGNhY2hlZFJvd0RhdGEsIGV2ZW50KTtcbiAgICAgICAgdGhpcy5ncmlkLnJvd0VkaXRFeGl0LmVtaXQobm9uQ2FuY2VsYWJsZUFyZ3MpO1xuICAgICAgICB0aGlzLmdyaWQuY2xvc2VSb3dFZGl0aW5nT3ZlcmxheSgpO1xuXG4gICAgICAgIHRoaXMuZW5kUm93RWRpdCgpO1xuICAgICAgICByZXR1cm4gbm9uQ2FuY2VsYWJsZUFyZ3M7XG4gICAgfVxuXG4gICAgLyoqIENsZWFycyByb3cgZWRpdGluZyBzdGF0ZSAqL1xuICAgIHB1YmxpYyBlbmRSb3dFZGl0KCkge1xuICAgICAgICB0aGlzLnJvdyA9IG51bGw7XG4gICAgICAgIHRoaXMucm93RWRpdGluZ0Jsb2NrZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiogQ2xlYXJzIGNlbGwgYW5kIHJvdyBlZGl0aW5nIHN0YXRlIGFuZCBjbG9zZXMgcm93IGVkaXRpbmcgdGVtcGxhdGUgaWYgaXQgaXMgb3BlbiAqL1xuICAgIHB1YmxpYyBlbmRFZGl0TW9kZSgpIHtcbiAgICAgICAgdGhpcy5lbmRDZWxsRWRpdCgpO1xuICAgICAgICBpZiAodGhpcy5ncmlkLnJvd0VkaXRhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmVuZFJvd0VkaXQoKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5jbG9zZVJvd0VkaXRpbmdPdmVybGF5KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlUm93RWRpdERhdGEocm93OiBJZ3hFZGl0Um93LCB2YWx1ZT86IGFueSkge1xuICAgICAgICBjb25zdCBncmlkID0gdGhpcy5ncmlkO1xuXG4gICAgICAgIGNvbnN0IHJvd0luRWRpdE1vZGUgPSBncmlkLmdyaWRBUEkuY3J1ZFNlcnZpY2Uucm93O1xuICAgICAgICByb3cubmV3RGF0YSA9IHZhbHVlID8/IHJvd0luRWRpdE1vZGUudHJhbnNhY3Rpb25TdGF0ZTtcblxuXG4gICAgICAgIGlmIChyb3dJbkVkaXRNb2RlICYmIHJvdy5pZCA9PT0gcm93SW5FZGl0TW9kZS5pZCkge1xuICAgICAgICAgICAgLy8gZG8gbm90IHVzZSBzcHJlYWQgb3BlcmF0b3IgaGVyZSBhcyBpdCB3aWxsIGNvcHkgZXZlcnl0aGluZyBvdmVyIGFuIGVtcHR5IG9iamVjdCB3aXRoIG5vIGRlc2NyaXB0b3JzXG4gICAgICAgICAgICByb3cuZGF0YSA9IE9iamVjdC5hc3NpZ24oY29weURlc2NyaXB0b3JzKHJvdy5kYXRhKSwgcm93LmRhdGEsIHJvd0luRWRpdE1vZGUudHJhbnNhY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICAvLyBUT0RPOiBXb3JrYXJvdW5kIGZvciB1cGRhdGluZyBhIHJvdyBpbiBlZGl0IG1vZGUgdGhyb3VnaCB0aGUgQVBJXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkKSB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZSA9IGdyaWQudHJhbnNhY3Rpb25zLmdldFN0YXRlKHJvdy5pZCk7XG4gICAgICAgICAgICByb3cuZGF0YSA9IHN0YXRlID8gT2JqZWN0LmFzc2lnbih7fSwgcm93LmRhdGEsIHN0YXRlLnZhbHVlKSA6IHJvdy5kYXRhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFBhcmVudFJvd0lkKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJZ3hSb3dBZGRDcnVkU3RhdGUgZXh0ZW5kcyBJZ3hSb3dDcnVkU3RhdGUge1xuICAgIHB1YmxpYyBhZGRSb3dQYXJlbnQ6IElneEFkZFJvd1BhcmVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBjcmVhdGVBZGRSb3cocGFyZW50Um93OiBJZ3hSb3dEaXJlY3RpdmU8SWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZT4sIGFzQ2hpbGQ/OiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlQWRkUm93UGFyZW50KHBhcmVudFJvdywgYXNDaGlsZCk7XG5cbiAgICAgICAgY29uc3QgbmV3UmVjID0gdGhpcy5ncmlkLmdldEVtcHR5UmVjb3JkT2JqZWN0Rm9yKHBhcmVudFJvdyk7XG4gICAgICAgIGNvbnN0IGFkZFJvd0luZGV4ID0gdGhpcy5hZGRSb3dQYXJlbnQuaW5kZXggKyAxO1xuICAgICAgICByZXR1cm4gdGhpcy5yb3cgPSBuZXcgSWd4QWRkUm93KG5ld1JlYy5yb3dJRCwgYWRkUm93SW5kZXgsIG5ld1JlYy5kYXRhLCBuZXdSZWMucmVjb3JkUmVmLCB0aGlzLmdyaWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGNyZWF0ZUFkZFJvd1BhcmVudChyb3c6IElneFJvd0RpcmVjdGl2ZTxJZ3hHcmlkQmFzZURpcmVjdGl2ZSAmIEdyaWRUeXBlPiwgbmV3Um93QXNDaGlsZD86IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSByb3cgPyByb3cuaW5kZXggOiAtMTtcbiAgICAgICAgY29uc3Qgcm93SWQgPSByb3cgPyByb3cucm93SUQgOiBudWxsO1xuICAgICAgICBjb25zdCBpc0luUGlubmVkQXJlYSA9IHRoaXMuZ3JpZC5pc1JlY29yZFBpbm5lZEJ5Vmlld0luZGV4KHJvd0luZGV4KTtcbiAgICAgICAgY29uc3QgcGluSW5kZXggPSB0aGlzLmdyaWQucGlubmVkUmVjb3Jkcy5maW5kSW5kZXgoeCA9PiB4W3RoaXMucHJpbWFyeUtleV0gPT09IHJvd0lkKTtcbiAgICAgICAgY29uc3QgdW5waW5JbmRleCA9IHRoaXMuZ3JpZC5nZXRVbnBpbm5lZEluZGV4QnlJZChyb3dJZCk7XG4gICAgICAgIHRoaXMuYWRkUm93UGFyZW50ID0ge1xuICAgICAgICAgICAgcm93SUQ6IHJvd0lkLFxuICAgICAgICAgICAgaW5kZXg6IGlzSW5QaW5uZWRBcmVhID8gcGluSW5kZXggOiB1bnBpbkluZGV4LFxuICAgICAgICAgICAgYXNDaGlsZDogbmV3Um93QXNDaGlsZCxcbiAgICAgICAgICAgIGlzUGlubmVkOiBpc0luUGlubmVkQXJlYVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGVuZFJvd1RyYW5zYWN0aW9uKGNvbW1pdDogYm9vbGVhbiwgZXZlbnQ/OiBFdmVudCk6IElHcmlkRWRpdEV2ZW50QXJncyB7XG4gICAgICAgIGNvbnN0IGlzQWRkUm93ID0gdGhpcy5yb3cgJiYgdGhpcy5yb3cuZ2V0Q2xhc3NOYW1lKCkgPT09IElneEFkZFJvdy5uYW1lO1xuICAgICAgICBpZiAoaXNBZGRSb3cpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5yb3dBZGRlZC5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgoYWRkUm93QXJnczogSVJvd0RhdGFFdmVudEFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByb3dEYXRhID0gYWRkUm93QXJncy5kYXRhO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBpbm5lZEluZGV4ID0gdGhpcy5ncmlkLnBpbm5lZFJlY29yZHMuZmluZEluZGV4KHggPT4geFt0aGlzLnByaW1hcnlLZXldID09PSByb3dEYXRhW3RoaXMucHJpbWFyeUtleV0pO1xuICAgICAgICAgICAgICAgIC8vIEEgY2hlY2sgd2hldGhlciB0aGUgcm93IGlzIGluIHRoZSBjdXJyZW50IHZpZXdcbiAgICAgICAgICAgICAgICBjb25zdCB2aWV3SW5kZXggPSBwaW5uZWRJbmRleCAhPT0gLTEgPyBwaW5uZWRJbmRleCA6IHRoaXMuX2ZpbmRSZWNvcmRJbmRleEluVmlldyhyb3dEYXRhKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhSW5kZXggPSB0aGlzLmdyaWQuZmlsdGVyZWRTb3J0ZWREYXRhLmZpbmRJbmRleChkYXRhID0+IGRhdGFbdGhpcy5wcmltYXJ5S2V5XSA9PT0gcm93RGF0YVt0aGlzLnByaW1hcnlLZXldKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0luVmlldyA9IHZpZXdJbmRleCAhPT0gLTEgJiYgIXRoaXMuZ3JpZC5uYXZpZ2F0aW9uLnNob3VsZFBlcmZvcm1WZXJ0aWNhbFNjcm9sbCh2aWV3SW5kZXgsIDApO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNob3dJbmRleCA9IGlzSW5WaWV3ID8gLTEgOiBkYXRhSW5kZXg7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnNob3dTbmFja2JhckZvcihzaG93SW5kZXgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcmdzID0gc3VwZXIuZW5kUm93VHJhbnNhY3Rpb24oY29tbWl0LCBldmVudCk7XG4gICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNBZGRSb3cpIHtcbiAgICAgICAgICAgIHRoaXMuZW5kQWRkUm93KCk7XG4gICAgICAgICAgICBpZiAoY29tbWl0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnJvd0FkZGVkTm90aWZpZXIubmV4dCh7IGRhdGE6IGFyZ3MubmV3VmFsdWUsIG93bmVyOiB0aGlzLmdyaWQgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnJvd0FkZGVkLmVtaXQoeyBkYXRhOiBhcmdzLm5ld1ZhbHVlLCBvd25lcjogdGhpcy5ncmlkIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZW5kQWRkUm93KCkge1xuICAgICAgICB0aGlzLmFkZFJvd1BhcmVudCA9IG51bGw7XG4gICAgICAgIHRoaXMuZ3JpZC50cmlnZ2VyUGlwZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICogVE9ETzogY29uc2lkZXIgY2hhbmdpbmcgbW9kaWZpZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgX2ZpbmRSZWNvcmRJbmRleEluVmlldyhyZWMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5kYXRhVmlldy5maW5kSW5kZXgoZGF0YSA9PiBkYXRhW3RoaXMucHJpbWFyeUtleV0gPT09IHJlY1t0aGlzLnByaW1hcnlLZXldKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0UGFyZW50Um93SWQoKSB7XG4gICAgICAgIGlmICh0aGlzLmFkZFJvd1BhcmVudC5hc0NoaWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hZGRSb3dQYXJlbnQuYXNDaGlsZCA/IHRoaXMuYWRkUm93UGFyZW50LnJvd0lEIDogdW5kZWZpbmVkOztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmFkZFJvd1BhcmVudC5yb3dJRCAhPT0gbnVsbCAmJiB0aGlzLmFkZFJvd1BhcmVudC5yb3dJRCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBzcGF3bmVkRm9yUmVjb3JkID0gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X3JlY19ieV9pZCh0aGlzLmFkZFJvd1BhcmVudC5yb3dJRCk7XG4gICAgICAgICAgICByZXR1cm4gc3Bhd25lZEZvclJlY29yZD8ucGFyZW50Py5yb3dJRDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIElneEdyaWRDUlVEU2VydmljZSBleHRlbmRzIElneFJvd0FkZENydWRTdGF0ZSB7XG5cbiAgICBwdWJsaWMgZW50ZXJFZGl0TW9kZShjZWxsLCBldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmlzSW5Db21wb3NpdGlvbk1vZGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNlbGxJbkVkaXRNb2RlKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBjYXNlIHNvbGVseSBmb3IgZjIvZW50ZXIgbmF2IHRoYXQgdXNlcyBlbnRlckVkaXRNb2RlIGFzIHRvZ2dsZS4gUmVmYWN0b3IuXG4gICAgICAgICAgICBjb25zdCBjYW5jZWxlZCA9IHRoaXMuZW5kRWRpdCh0cnVlLCBldmVudCk7XG5cbiAgICAgICAgICAgIGlmICghY2FuY2VsZWQgfHwgIXRoaXMuY2VsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC50Ym9keS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yb3dFZGl0aW5nKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucm93ICYmICF0aGlzLnNhbWVSb3coY2VsbD8uY2VsbElEPy5yb3dJRCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dFZGl0aW5nQmxvY2tlZCA9IHRoaXMuZW5kRWRpdCh0cnVlLCBldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJvd0VkaXRpbmdCbG9ja2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93RWRpdGluZ0Jsb2NrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmRSb3dFZGl0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlQ2VsbChjZWxsKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGNhbmNlbGVkID0gdGhpcy5iZWdpblJvd0VkaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGlmICghY2FuY2VsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWdpbkNlbGxFZGl0KGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVDZWxsKGNlbGwpO1xuICAgICAgICAgICAgICAgIHRoaXMuYmVnaW5DZWxsRWRpdChldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbnRlcnMgYWRkIHJvdyBtb2RlIGJ5IGNyZWF0aW5nIHRlbXBvcmFyeSBkdW1teSBzbyB0aGUgdXNlciBjYW4gZmlsbCBpbiBuZXcgcm93IGNlbGxzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBhcmVudFJvdyBQYXJlbnQgcm93IGFmdGVyIHdoaWNoIHRoZSBBZGQgUm93IFVJIHdpbGwgYmUgcmVuZGVyZWQuXG4gICAgICogICAgICAgICAgICAgICAgICBJZiBgbnVsbGAgd2lsbCBzaG93IGl0IGF0IHRoZSBib3R0b20gYWZ0ZXIgYWxsIHJvd3MgKG9yIHRvcCBpZiB0aGVyZSBhcmUgbm90IHJvd3MpLlxuICAgICAqIEBwYXJhbSBhc0NoaWxkIFNwZWNpZmllcyBpZiB0aGUgbmV3IHJvdyBzaG91bGQgYmUgYWRkZWQgYXMgYSBjaGlsZCB0byBhIHRyZWUgcm93LlxuICAgICAqIEBwYXJhbSBldmVudCBCYXNlIGV2ZW50IHRoYXQgdHJpZ2dlcmVkIHRoZSBhZGQgcm93IG1vZGUuXG4gICAgICovXG4gICAgcHVibGljIGVudGVyQWRkUm93TW9kZShwYXJlbnRSb3c6IElneFJvd0RpcmVjdGl2ZTxJZ3hHcmlkQmFzZURpcmVjdGl2ZSAmIEdyaWRUeXBlPiwgYXNDaGlsZD86IGJvb2xlYW4sIGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJvd0VkaXRpbmcgJiYgKHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID09PSB1bmRlZmluZWQgfHwgdGhpcy5ncmlkLnByaW1hcnlLZXkgPT09IG51bGwpKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBncmlkIG11c3QgdXNlIHJvdyBlZGl0IG1vZGUgdG8gcGVyZm9ybSByb3cgYWRkaW5nISBQbGVhc2Ugc2V0IHJvd0VkaXRhYmxlIHRvIHRydWUuJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbmRFZGl0KHRydWUsIGV2ZW50KTtcblxuICAgICAgICBpZiAocGFyZW50Um93ICE9IG51bGwgJiYgdGhpcy5ncmlkLmV4cGFuc2lvblN0YXRlcy5nZXQocGFyZW50Um93LnJvd0lEKSkge1xuICAgICAgICAgICAgdGhpcy5ncmlkLmNvbGxhcHNlUm93KHBhcmVudFJvdy5yb3dJRCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNyZWF0ZUFkZFJvdyhwYXJlbnRSb3csIGFzQ2hpbGQpO1xuXG4gICAgICAgIHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuc3RhcnRQZW5kaW5nKCk7XG4gICAgICAgIGlmICh0aGlzLmFkZFJvd1BhcmVudC5pc1Bpbm5lZCkge1xuICAgICAgICAgICAgLy8gSWYgcGFyZW50IGlzIHBpbm5lZCwgYWRkIHRoZSBuZXcgcm93IHRvIHBpbm5lZCByZWNvcmRzXG4gICAgICAgICAgICAodGhpcy5ncmlkIGFzIGFueSkuX3Bpbm5lZFJlY29yZElEcy5zcGxpY2UodGhpcy5yb3cuaW5kZXgsIDAsIHRoaXMucm93LmlkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ3JpZC50cmlnZ2VyUGlwZXMoKTtcbiAgICAgICAgdGhpcy5ncmlkLm5vdGlmeUNoYW5nZXModHJ1ZSk7XG5cbiAgICAgICAgdGhpcy5ncmlkLm5hdmlnYXRlVG8odGhpcy5yb3cuaW5kZXgsIC0xKTtcbiAgICAgICAgLy8gd2hlbiBzZWxlY3RpbmcgdGhlIGR1bW15IHJvdyB3ZSBuZWVkIHRvIGFkanVzdCBmb3IgdG9wIHBpbm5lZCByb3dzXG4gICAgICAgIGNvbnN0IGluZGV4QWRqdXN0ID0gdGhpcy5ncmlkLmlzUm93UGlubmluZ1RvVG9wICYmICF0aGlzLmFkZFJvd1BhcmVudC5pc1Bpbm5lZCA/IHRoaXMuZ3JpZC5waW5uZWRSb3dzLmxlbmd0aCA6IDA7XG4gICAgICAgIGNvbnN0IGR1bW15Um93ID0gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X3Jvd19ieV9pbmRleCh0aGlzLnJvdy5pbmRleCArIGluZGV4QWRqdXN0KTtcbiAgICAgICAgZHVtbXlSb3cudHJpZ2dlckFkZEFuaW1hdGlvbigpO1xuICAgICAgICBkdW1teVJvdy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICBkdW1teVJvdy5hZGRBbmltYXRpb25FbmQucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IGR1bW15Um93LmNlbGxzLmZpbmQoYyA9PiBjLmVkaXRhYmxlKTtcbiAgICAgICAgICAgIGlmIChjZWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmdyaWRBUEkudXBkYXRlX2NlbGwodGhpcy5jZWxsKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVudGVyRWRpdE1vZGUoY2VsbCwgZXZlbnQpO1xuICAgICAgICAgICAgICAgIGNlbGwuYWN0aXZhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmluaXNoZXMgdGhlIHJvdyB0cmFuc2FjdGlvbnMgb24gdGhlIGN1cnJlbnQgcm93LlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBJZiBgY29tbWl0ID09PSB0cnVlYCwgcGFzc2VzIHRoZW0gZnJvbSB0aGUgcGVuZGluZyBzdGF0ZSB0byB0aGUgZGF0YSAob3IgdHJhbnNhY3Rpb24gc2VydmljZSlcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8YnV0dG9uIGlneEJ1dHRvbiAoY2xpY2spPVwiZ3JpZC5lbmRFZGl0KHRydWUpXCI+Q29tbWl0IFJvdzwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqIEBwYXJhbSBjb21taXRcbiAgICAgKi9cbiAgICAvLyBUT0RPOiBJbXBsZW1lbnQgdGhlIHNhbWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1ldGhvZCB3aXRob3V0IGV2dCBlbWlzc2lvbi5cbiAgICBwdWJsaWMgZW5kRWRpdChjb21taXQgPSB0cnVlLCBldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5yb3cgJiYgIXRoaXMuY2VsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGFyZ3M7XG4gICAgICAgIGlmIChjb21taXQpIHtcbiAgICAgICAgICAgIGFyZ3MgPSB0aGlzLnVwZGF0ZUNlbGwodHJ1ZSwgZXZlbnQpO1xuICAgICAgICAgICAgaWYgKGFyZ3MgJiYgYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJncy5jYW5jZWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmV4aXRDZWxsRWRpdChldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBhcmdzID0gdGhpcy51cGRhdGVSb3coY29tbWl0LCBldmVudCk7XG4gICAgICAgIHRoaXMucm93RWRpdGluZ0Jsb2NrZWQgPSBhcmdzLmNhbmNlbDtcbiAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFjdGl2ZUNlbGwgPSB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5hY3RpdmVFbGVtZW50O1xuICAgICAgICBpZiAoZXZlbnQgJiYgYWN0aXZlQ2VsbCkge1xuICAgICAgICAgICAgY29uc3Qgcm93SW5kZXggPSBhY3RpdmVDZWxsLnJvdztcbiAgICAgICAgICAgIGNvbnN0IHZpc2libGVDb2xJbmRleCA9IGFjdGl2ZUNlbGwubGF5b3V0ID8gYWN0aXZlQ2VsbC5sYXlvdXQuY29sdW1uVmlzaWJsZUluZGV4IDogYWN0aXZlQ2VsbC5jb2x1bW47XG4gICAgICAgICAgICB0aGlzLmdyaWQubmF2aWdhdGVUbyhyb3dJbmRleCwgdmlzaWJsZUNvbEluZGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2NvbW1vbi9ldmVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElCYXNlRXZlbnRBcmdzLCBDYW5jZWxhYmxlRXZlbnRBcmdzIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBJZ3hCYXNlRXhwb3J0ZXIsIElneEV4cG9ydGVyT3B0aW9uc0Jhc2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wdWJsaWNfYXBpJztcbmltcG9ydCB7IEdyaWRLZXlkb3duVGFyZ2V0VHlwZSB9IGZyb20gJy4vZW51bXMnO1xuaW1wb3J0IHsgSWd4RHJhZ0RpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvZHJhZy1kcm9wL2RyYWctZHJvcC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgR3JpZFR5cGUgfSBmcm9tICcuL2dyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElneENvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4uL2NvbHVtbnMvY29sdW1uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hHcmlkQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4uL2dyaWQtYmFzZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ29sdW1uVHlwZSB9IGZyb20gJy4vY29sdW1uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJU29ydGluZ0V4cHJlc3Npb24gfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvc29ydGluZy1leHByZXNzaW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1leHByZXNzaW9ucy10cmVlJztcbmltcG9ydCB7IFJvd1R5cGUgfSBmcm9tICcuL3Jvdy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ2VsbFR5cGUgfSBmcm9tICcuL2NlbGwuaW50ZXJmYWNlJztcbmV4cG9ydCB7IEdyaWRTZWxlY3Rpb25SYW5nZSB9IGZyb20gJy4uL3NlbGVjdGlvbi9zZWxlY3Rpb24uc2VydmljZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUdyaWRDbGlwYm9hcmRFdmVudCB7XG4gICAgZGF0YTogYW55W107XG4gICAgY2FuY2VsOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElHcmlkQ2VsbEV2ZW50QXJncyBleHRlbmRzIElCYXNlRXZlbnRBcmdzIHtcbiAgICBjZWxsOiBDZWxsVHlwZTtcbiAgICBldmVudDogRXZlbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUdyaWRFZGl0RG9uZUV2ZW50QXJncyBleHRlbmRzIElCYXNlRXZlbnRBcmdzIHtcbiAgICByb3dJRDogYW55O1xuICAgIGNlbGxJRD86IHtcbiAgICAgICAgcm93SUQ6IGFueTtcbiAgICAgICAgY29sdW1uSUQ6IGFueTtcbiAgICAgICAgcm93SW5kZXg6IG51bWJlcjtcbiAgICB9O1xuICAgIHJvd0RhdGE6IGFueTtcbiAgICBvbGRWYWx1ZTogYW55O1xuICAgIG5ld1ZhbHVlPzogYW55O1xuICAgIGV2ZW50PzogRXZlbnQ7XG4gICAgY29sdW1uPzogQ29sdW1uVHlwZTtcbiAgICBvd25lcj86IElneEdyaWRCYXNlRGlyZWN0aXZlICYgR3JpZFR5cGU7XG4gICAgaXNBZGRSb3c/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElHcmlkRWRpdEV2ZW50QXJncyBleHRlbmRzIENhbmNlbGFibGVFdmVudEFyZ3MsIElHcmlkRWRpdERvbmVFdmVudEFyZ3Mge1xufVxuXG4vKipcbiAqIFRoZSBldmVudCBhcmd1bWVudHMgYWZ0ZXIgYSBjb2x1bW4ncyBwaW4gc3RhdGUgaXMgY2hhbmdlZC5cbiAqIGBpbnNlcnRBdEluZGV4YHNwZWNpZmllcyBhdCB3aGljaCBpbmRleCBpbiB0aGUgcGlubmVkL3VucGlubmVkIGFyZWEgdGhlIGNvbHVtbiB3YXMgaW5zZXJ0ZWQuXG4gKiBgaXNQaW5uZWRgIHJldHVybnMgdGhlIGFjdHVhbCBwaW4gc3RhdGUgb2YgdGhlIGNvbHVtbiBhZnRlciB0aGUgb3BlcmF0aW9uIGNvbXBsZXRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUGluQ29sdW1uRXZlbnRBcmdzIGV4dGVuZHMgSUJhc2VFdmVudEFyZ3Mge1xuICAgIGNvbHVtbjogSWd4Q29sdW1uQ29tcG9uZW50O1xuICAgIC8qKlxuICAgICAqIElmIHBpbm5lZCwgc3BlY2lmaWVzIGF0IHdoaWNoIGluZGV4IGluIHRoZSBwaW5uZWQgYXJlYSB0aGUgY29sdW1uIGlzIGluc2VydGVkLlxuICAgICAqIElmIHVucGlubmVkLCBzcGVjaWZpZXMgYXQgd2hpY2ggaW5kZXggaW4gdGhlIHVucGlubmVkIGFyZWEgdGhlIGNvbHVtbiBpcyBpbnNlcnRlZC5cbiAgICAgKi9cbiAgICBpbnNlcnRBdEluZGV4OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYWN0dWFsIHBpbiBzdGF0ZSBvZiB0aGUgY29sdW1uLlxuICAgICAqIElmIHBpbm5pbmcvdW5waW5uaW5nIGlzIHN1Y2Nlc2Z1bGwsIHZhbHVlIG9mIGBpc1Bpbm5lZGAgd2lsbCBjaGFuZ2UgYWNjb3JkaW5nbHkgd2hlbiByZWFkIGluIHRoZSBcIi1pbmdcIiBhbmQgXCItZWRcIiBldmVudC5cbiAgICAgKi9cbiAgICBpc1Bpbm5lZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGUgZXZlbnQgYXJndW1lbnRzIGJlZm9yZSBhIGNvbHVtbidzIHBpbiBzdGF0ZSBpcyBjaGFuZ2VkLlxuICogYGluc2VydEF0SW5kZXhgc3BlY2lmaWVzIGF0IHdoaWNoIGluZGV4IGluIHRoZSBwaW5uZWQvdW5waW5uZWQgYXJlYSB0aGUgY29sdW1uIGlzIGluc2VydGVkLlxuICogQ2FuIGJlIGNoYW5nZWQgaW4gdGhlIGBjb2x1bW5QaW5gIGV2ZW50LlxuICogYGlzUGlubmVkYCByZXR1cm5zIHRoZSBhY3R1YWwgcGluIHN0YXRlIG9mIHRoZSBjb2x1bW4uIFdoZW4gcGlubmluZy91bnBpbm5pbmcgaXMgc3VjY2VzZnVsbCxcbiAqIHRoZSB2YWx1ZSBvZiBgaXNQaW5uZWRgIHdpbGwgY2hhbmdlIGFjY29yZGluZ2x5IHdoZW4gcmVhZCBpbiB0aGUgXCItaW5nXCIgYW5kIFwiLWVkXCIgZXZlbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVBpbkNvbHVtbkNhbmNlbGxhYmxlRXZlbnRBcmdzIGV4dGVuZHMgSVBpbkNvbHVtbkV2ZW50QXJncywgQ2FuY2VsYWJsZUV2ZW50QXJncyB7XG59XG5leHBvcnQgaW50ZXJmYWNlIElSb3dEYXRhRXZlbnRBcmdzIGV4dGVuZHMgSUJhc2VFdmVudEFyZ3Mge1xuICAgIGRhdGE6IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ29sdW1uUmVzaXplRXZlbnRBcmdzIGV4dGVuZHMgSUJhc2VFdmVudEFyZ3Mge1xuICAgIGNvbHVtbjogSWd4Q29sdW1uQ29tcG9uZW50O1xuICAgIHByZXZXaWR0aDogc3RyaW5nO1xuICAgIG5ld1dpZHRoOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbHVtblJlc2l6aW5nRXZlbnRBcmdzIGV4dGVuZHMgSUNvbHVtblJlc2l6ZUV2ZW50QXJncywgQ2FuY2VsYWJsZUV2ZW50QXJncyB7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJvd1NlbGVjdGlvbkV2ZW50QXJncyBleHRlbmRzIENhbmNlbGFibGVFdmVudEFyZ3MsIElCYXNlRXZlbnRBcmdzIHtcbiAgICBvbGRTZWxlY3Rpb246IGFueVtdO1xuICAgIG5ld1NlbGVjdGlvbjogYW55W107XG4gICAgYWRkZWQ6IGFueVtdO1xuICAgIHJlbW92ZWQ6IGFueVtdO1xuICAgIGV2ZW50PzogRXZlbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbHVtblNlbGVjdGlvbkV2ZW50QXJncyBleHRlbmRzIENhbmNlbGFibGVFdmVudEFyZ3MsIElCYXNlRXZlbnRBcmdzIHtcbiAgICBvbGRTZWxlY3Rpb246IHN0cmluZ1tdO1xuICAgIG5ld1NlbGVjdGlvbjogc3RyaW5nW107XG4gICAgYWRkZWQ6IHN0cmluZ1tdO1xuICAgIHJlbW92ZWQ6IHN0cmluZ1tdO1xuICAgIGV2ZW50PzogRXZlbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNlYXJjaEluZm8ge1xuICAgIHNlYXJjaFRleHQ6IHN0cmluZztcbiAgICBjYXNlU2Vuc2l0aXZlOiBib29sZWFuO1xuICAgIGV4YWN0TWF0Y2g6IGJvb2xlYW47XG4gICAgYWN0aXZlTWF0Y2hJbmRleDogbnVtYmVyO1xuICAgIG1hdGNoSW5mb0NhY2hlOiBhbnlbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJR3JpZFRvb2xiYXJFeHBvcnRFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUV2ZW50QXJncyB7XG4gICAgZ3JpZDogSWd4R3JpZEJhc2VEaXJlY3RpdmU7XG4gICAgZXhwb3J0ZXI6IElneEJhc2VFeHBvcnRlcjtcbiAgICBvcHRpb25zOiBJZ3hFeHBvcnRlck9wdGlvbnNCYXNlO1xuICAgIGNhbmNlbDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ29sdW1uTW92aW5nU3RhcnRFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUV2ZW50QXJncyB7XG4gICAgc291cmNlOiBJZ3hDb2x1bW5Db21wb25lbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbHVtbk1vdmluZ0V2ZW50QXJncyBleHRlbmRzIElCYXNlRXZlbnRBcmdzIHtcbiAgICBzb3VyY2U6IElneENvbHVtbkNvbXBvbmVudDtcbiAgICBjYW5jZWw6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbHVtbk1vdmluZ0VuZEV2ZW50QXJncyBleHRlbmRzIElCYXNlRXZlbnRBcmdzIHtcbiAgICBzb3VyY2U6IElneENvbHVtbkNvbXBvbmVudDtcbiAgICB0YXJnZXQ6IElneENvbHVtbkNvbXBvbmVudDtcbiAgICBjYW5jZWw6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUdyaWRLZXlkb3duRXZlbnRBcmdzIGV4dGVuZHMgSUJhc2VFdmVudEFyZ3Mge1xuICAgIHRhcmdldFR5cGU6IEdyaWRLZXlkb3duVGFyZ2V0VHlwZTtcbiAgICB0YXJnZXQ6IGFueTtcbiAgICBldmVudDogRXZlbnQ7XG4gICAgY2FuY2VsOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDZWxsUG9zaXRpb24ge1xuICAgIHJvd0luZGV4OiBudW1iZXI7XG4gICAgdmlzaWJsZUNvbHVtbkluZGV4OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJvd0RyYWdFbmRFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUV2ZW50QXJncyB7XG4gICAgZHJhZ0RpcmVjdGl2ZTogSWd4RHJhZ0RpcmVjdGl2ZTtcbiAgICBkcmFnRGF0YTogUm93VHlwZTtcbiAgICBkcmFnRWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gICAgYW5pbWF0aW9uOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElSb3dEcmFnU3RhcnRFdmVudEFyZ3MgZXh0ZW5kcyBDYW5jZWxhYmxlRXZlbnRBcmdzLCBJQmFzZUV2ZW50QXJncyB7XG4gICAgZHJhZ0RpcmVjdGl2ZTogSWd4RHJhZ0RpcmVjdGl2ZTtcbiAgICBkcmFnRGF0YTogUm93VHlwZTtcbiAgICBkcmFnRWxlbWVudDogSFRNTEVsZW1lbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJvd1RvZ2dsZUV2ZW50QXJncyBleHRlbmRzIElCYXNlRXZlbnRBcmdzIHtcbiAgICByb3dJRDogYW55O1xuICAgIGV4cGFuZGVkOiBib29sZWFuO1xuICAgIGV2ZW50PzogRXZlbnQ7XG4gICAgY2FuY2VsOiBib29sZWFuO1xufVxuXG4vKipcbiAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBhIHJvdydzIHBpbiBzdGF0ZSBjaGFuZ2VzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElQaW5Sb3dFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUV2ZW50QXJncywgQ2FuY2VsYWJsZUV2ZW50QXJncyB7XG4gICAgLyoqXG4gICAgICogVGhlIElEIG9mIHRoZSByb3csIHRoYXQgd2FzIHBpbm5lZC91bnBpbm5lZC5cbiAgICAgKiAgIElEIGlzIGVpdGhlciB0aGUgcHJpbWFyeUtleSB2YWx1ZSBvciB0aGUgZGF0YSByZWNvcmQgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcmVhZG9ubHkgcm93SUQ6IGFueTtcbiAgICByb3c/OiBSb3dUeXBlO1xuICAgIC8qKiBUaGUgaW5kZXggYXQgd2hpY2ggdG8gcGluIHRoZSByb3cgaW4gdGhlIHBpbm5lZCByb3dzIGNvbGxlY3Rpb24uICovXG4gICAgaW5zZXJ0QXRJbmRleD86IG51bWJlcjtcbiAgICAvKiogV2hldGhlciBvciBub3QgdGhlIHJvdyBpcyBwaW5uZWQgb3IgdW5waW5uZWQuICovXG4gICAgcmVhZG9ubHkgaXNQaW5uZWQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogRXZlbnQgZW1pdHRlZCB3aGVuIGEgZ3JpZCBpcyBzY3JvbGxlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJR3JpZFNjcm9sbEV2ZW50QXJncyBleHRlbmRzIElCYXNlRXZlbnRBcmdzIHtcbiAgICAvKiogVGhlIHNjcm9sbCBkaXJlY3Rpb24gLSB2ZXJ0aWNhbCBvciBob3Jpem9udGFsLiAqL1xuICAgIGRpcmVjdGlvbjogc3RyaW5nO1xuICAgIC8qKiBUaGUgb3JpZ2luYWwgYnJvd3NlciBzY3JvbGwgZXZlbnQuICovXG4gICAgZXZlbnQ6IEV2ZW50O1xuICAgIC8qKiBUaGUgbmV3IHNjcm9sbCBwb3NpdGlvbiAqL1xuICAgIHNjcm9sbFBvc2l0aW9uOiBudW1iZXI7XG59XG5cbi8qKlxuICogRXZlbnQgZW1pdHRlZCB3aGVuIGEgY2hlY2tib3ggaW4gdGhlIGNoZWNrYm94XG4gKiBsaXN0IG9mIGFuIElneENvbHVtbkFjdGlvbnMgY29tcG9uZW50IGlzIGNsaWNrZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbHVtblRvZ2dsZWRFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUV2ZW50QXJncyB7XG4gICAgLyoqIFRoZSBjb2x1bW4gdGhhdCBpcyB0b2dnbGVkLiAqL1xuICAgIGNvbHVtbjogSWd4Q29sdW1uQ29tcG9uZW50O1xuICAgIC8qKiBUaGUgY2hlY2tlZCBzdGF0ZSBhZnRlciB0aGUgYWN0aW9uLiAqL1xuICAgIGNoZWNrZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUFjdGl2ZU5vZGVDaGFuZ2VFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUV2ZW50QXJncyB7XG4gICAgcm93OiBudW1iZXI7XG4gICAgY29sdW1uOiBudW1iZXI7XG4gICAgbGV2ZWw/OiBudW1iZXI7XG4gICAgdGFnOiBHcmlkS2V5ZG93blRhcmdldFR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNvcnRpbmdFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUV2ZW50QXJncywgQ2FuY2VsYWJsZUV2ZW50QXJncyB7XG4gICAgc29ydGluZ0V4cHJlc3Npb25zOiBJU29ydGluZ0V4cHJlc3Npb24gfCBBcnJheTxJU29ydGluZ0V4cHJlc3Npb24+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElGaWx0ZXJpbmdFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUV2ZW50QXJncywgQ2FuY2VsYWJsZUV2ZW50QXJncyB7XG4gICAgZmlsdGVyaW5nRXhwcmVzc2lvbnM6IElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbHVtblZpc2liaWxpdHlDaGFuZ2VkRXZlbnRBcmdzIGV4dGVuZHMgSUJhc2VFdmVudEFyZ3Mge1xuICAgIGNvbHVtbjogYW55O1xuICAgIC8qKlxuICAgICAqIFRoZSBuZXcgaGlkZGVuIHN0YXRlIHRoYXQgdGhlIGNvbHVtbiB3aWxsIGhhdmUsIGlmIG9wZXJhdGlvbiBpcyBzdWNjZXNmdWxsLlxuICAgICAqIFdpbGwgYmUgYHRydWVgIHdoZW4gaGlkaW5nIGFuZCBgZmFsc2VgIHdoZW4gc2hvd2luZy5cbiAgICAgKi9cbiAgICBuZXdWYWx1ZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ29sdW1uVmlzaWJpbGl0eUNoYW5naW5nRXZlbnRBcmdzIGV4dGVuZHMgSUNvbHVtblZpc2liaWxpdHlDaGFuZ2VkRXZlbnRBcmdzLCBDYW5jZWxhYmxlRXZlbnRBcmdzIHtcbn1cblxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2NvbW1vbi9ldmVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElCYXNlRXZlbnRBcmdzLCBDYW5jZWxhYmxlRXZlbnRBcmdzIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBJZ3hCYXNlRXhwb3J0ZXIsIElneEV4cG9ydGVyT3B0aW9uc0Jhc2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wdWJsaWNfYXBpJztcbmltcG9ydCB7IEdyaWRLZXlkb3duVGFyZ2V0VHlwZSB9IGZyb20gJy4vZW51bXMnO1xuaW1wb3J0IHsgSWd4RHJhZ0RpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvZHJhZy1kcm9wL2RyYWctZHJvcC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgR3JpZFR5cGUgfSBmcm9tICcuL2dyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElneENvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4uL2NvbHVtbnMvY29sdW1uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hHcmlkQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4uL2dyaWQtYmFzZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ29sdW1uVHlwZSB9IGZyb20gJy4vY29sdW1uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJU29ydGluZ0V4cHJlc3Npb24gfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvc29ydGluZy1leHByZXNzaW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1leHByZXNzaW9ucy10cmVlJztcbmltcG9ydCB7IFJvd1R5cGUgfSBmcm9tICcuL3Jvdy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ2VsbFR5cGUgfSBmcm9tICcuL2NlbGwuaW50ZXJmYWNlJztcbmV4cG9ydCB7IEdyaWRTZWxlY3Rpb25SYW5nZSB9IGZyb20gJy4uL3NlbGVjdGlvbi9zZWxlY3Rpb24uc2VydmljZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUdyaWRDbGlwYm9hcmRFdmVudCB7XG4gICAgZGF0YTogYW55W107XG4gICAgY2FuY2VsOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElHcmlkQ2VsbEV2ZW50QXJncyBleHRlbmRzIElCYXNlRXZlbnRBcmdzIHtcbiAgICBjZWxsOiBDZWxsVHlwZTtcbiAgICBldmVudDogRXZlbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUdyaWRFZGl0RG9uZUV2ZW50QXJncyBleHRlbmRzIElCYXNlRXZlbnRBcmdzIHtcbiAgICByb3dJRDogYW55O1xuICAgIGNlbGxJRD86IHtcbiAgICAgICAgcm93SUQ6IGFueTtcbiAgICAgICAgY29sdW1uSUQ6IGFueTtcbiAgICAgICAgcm93SW5kZXg6IG51bWJlcjtcbiAgICB9O1xuICAgIHJvd0RhdGE6IGFueTtcbiAgICBvbGRWYWx1ZTogYW55O1xuICAgIG5ld1ZhbHVlPzogYW55O1xuICAgIGV2ZW50PzogRXZlbnQ7XG4gICAgY29sdW1uPzogQ29sdW1uVHlwZTtcbiAgICBvd25lcj86IElneEdyaWRCYXNlRGlyZWN0aXZlICYgR3JpZFR5cGU7XG4gICAgaXNBZGRSb3c/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElHcmlkRWRpdEV2ZW50QXJncyBleHRlbmRzIENhbmNlbGFibGVFdmVudEFyZ3MsIElHcmlkRWRpdERvbmVFdmVudEFyZ3Mge1xufVxuXG4vKipcbiAqIFRoZSBldmVudCBhcmd1bWVudHMgYWZ0ZXIgYSBjb2x1bW4ncyBwaW4gc3RhdGUgaXMgY2hhbmdlZC5cbiAqIGBpbnNlcnRBdEluZGV4YHNwZWNpZmllcyBhdCB3aGljaCBpbmRleCBpbiB0aGUgcGlubmVkL3VucGlubmVkIGFyZWEgdGhlIGNvbHVtbiB3YXMgaW5zZXJ0ZWQuXG4gKiBgaXNQaW5uZWRgIHJldHVybnMgdGhlIGFjdHVhbCBwaW4gc3RhdGUgb2YgdGhlIGNvbHVtbiBhZnRlciB0aGUgb3BlcmF0aW9uIGNvbXBsZXRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUGluQ29sdW1uRXZlbnRBcmdzIGV4dGVuZHMgSUJhc2VFdmVudEFyZ3Mge1xuICAgIGNvbHVtbjogSWd4Q29sdW1uQ29tcG9uZW50O1xuICAgIC8qKlxuICAgICAqIElmIHBpbm5lZCwgc3BlY2lmaWVzIGF0IHdoaWNoIGluZGV4IGluIHRoZSBwaW5uZWQgYXJlYSB0aGUgY29sdW1uIGlzIGluc2VydGVkLlxuICAgICAqIElmIHVucGlubmVkLCBzcGVjaWZpZXMgYXQgd2hpY2ggaW5kZXggaW4gdGhlIHVucGlubmVkIGFyZWEgdGhlIGNvbHVtbiBpcyBpbnNlcnRlZC5cbiAgICAgKi9cbiAgICBpbnNlcnRBdEluZGV4OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYWN0dWFsIHBpbiBzdGF0ZSBvZiB0aGUgY29sdW1uLlxuICAgICAqIElmIHBpbm5pbmcvdW5waW5uaW5nIGlzIHN1Y2Nlc2Z1bGwsIHZhbHVlIG9mIGBpc1Bpbm5lZGAgd2lsbCBjaGFuZ2UgYWNjb3JkaW5nbHkgd2hlbiByZWFkIGluIHRoZSBcIi1pbmdcIiBhbmQgXCItZWRcIiBldmVudC5cbiAgICAgKi9cbiAgICBpc1Bpbm5lZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGUgZXZlbnQgYXJndW1lbnRzIGJlZm9yZSBhIGNvbHVtbidzIHBpbiBzdGF0ZSBpcyBjaGFuZ2VkLlxuICogYGluc2VydEF0SW5kZXhgc3BlY2lmaWVzIGF0IHdoaWNoIGluZGV4IGluIHRoZSBwaW5uZWQvdW5waW5uZWQgYXJlYSB0aGUgY29sdW1uIGlzIGluc2VydGVkLlxuICogQ2FuIGJlIGNoYW5nZWQgaW4gdGhlIGBjb2x1bW5QaW5gIGV2ZW50LlxuICogYGlzUGlubmVkYCByZXR1cm5zIHRoZSBhY3R1YWwgcGluIHN0YXRlIG9mIHRoZSBjb2x1bW4uIFdoZW4gcGlubmluZy91bnBpbm5pbmcgaXMgc3VjY2VzZnVsbCxcbiAqIHRoZSB2YWx1ZSBvZiBgaXNQaW5uZWRgIHdpbGwgY2hhbmdlIGFjY29yZGluZ2x5IHdoZW4gcmVhZCBpbiB0aGUgXCItaW5nXCIgYW5kIFwiLWVkXCIgZXZlbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVBpbkNvbHVtbkNhbmNlbGxhYmxlRXZlbnRBcmdzIGV4dGVuZHMgSVBpbkNvbHVtbkV2ZW50QXJncywgQ2FuY2VsYWJsZUV2ZW50QXJncyB7XG59XG5leHBvcnQgaW50ZXJmYWNlIElSb3dEYXRhRXZlbnRBcmdzIGV4dGVuZHMgSUJhc2VFdmVudEFyZ3Mge1xuICAgIGRhdGE6IGFueTtcbiAgICBvd25lcjogR3JpZFR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbHVtblJlc2l6ZUV2ZW50QXJncyBleHRlbmRzIElCYXNlRXZlbnRBcmdzIHtcbiAgICBjb2x1bW46IElneENvbHVtbkNvbXBvbmVudDtcbiAgICBwcmV2V2lkdGg6IHN0cmluZztcbiAgICBuZXdXaWR0aDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDb2x1bW5SZXNpemluZ0V2ZW50QXJncyBleHRlbmRzIElDb2x1bW5SZXNpemVFdmVudEFyZ3MsIENhbmNlbGFibGVFdmVudEFyZ3Mge1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElSb3dTZWxlY3Rpb25FdmVudEFyZ3MgZXh0ZW5kcyBDYW5jZWxhYmxlRXZlbnRBcmdzLCBJQmFzZUV2ZW50QXJncyB7XG4gICAgb2xkU2VsZWN0aW9uOiBhbnlbXTtcbiAgICBuZXdTZWxlY3Rpb246IGFueVtdO1xuICAgIGFkZGVkOiBhbnlbXTtcbiAgICByZW1vdmVkOiBhbnlbXTtcbiAgICBldmVudD86IEV2ZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDb2x1bW5TZWxlY3Rpb25FdmVudEFyZ3MgZXh0ZW5kcyBDYW5jZWxhYmxlRXZlbnRBcmdzLCBJQmFzZUV2ZW50QXJncyB7XG4gICAgb2xkU2VsZWN0aW9uOiBzdHJpbmdbXTtcbiAgICBuZXdTZWxlY3Rpb246IHN0cmluZ1tdO1xuICAgIGFkZGVkOiBzdHJpbmdbXTtcbiAgICByZW1vdmVkOiBzdHJpbmdbXTtcbiAgICBldmVudD86IEV2ZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTZWFyY2hJbmZvIHtcbiAgICBzZWFyY2hUZXh0OiBzdHJpbmc7XG4gICAgY2FzZVNlbnNpdGl2ZTogYm9vbGVhbjtcbiAgICBleGFjdE1hdGNoOiBib29sZWFuO1xuICAgIGFjdGl2ZU1hdGNoSW5kZXg6IG51bWJlcjtcbiAgICBtYXRjaEluZm9DYWNoZTogYW55W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUdyaWRUb29sYmFyRXhwb3J0RXZlbnRBcmdzIGV4dGVuZHMgSUJhc2VFdmVudEFyZ3Mge1xuICAgIGdyaWQ6IElneEdyaWRCYXNlRGlyZWN0aXZlO1xuICAgIGV4cG9ydGVyOiBJZ3hCYXNlRXhwb3J0ZXI7XG4gICAgb3B0aW9uczogSWd4RXhwb3J0ZXJPcHRpb25zQmFzZTtcbiAgICBjYW5jZWw6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbHVtbk1vdmluZ1N0YXJ0RXZlbnRBcmdzIGV4dGVuZHMgSUJhc2VFdmVudEFyZ3Mge1xuICAgIHNvdXJjZTogSWd4Q29sdW1uQ29tcG9uZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDb2x1bW5Nb3ZpbmdFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUV2ZW50QXJncyB7XG4gICAgc291cmNlOiBJZ3hDb2x1bW5Db21wb25lbnQ7XG4gICAgY2FuY2VsOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDb2x1bW5Nb3ZpbmdFbmRFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUV2ZW50QXJncyB7XG4gICAgc291cmNlOiBJZ3hDb2x1bW5Db21wb25lbnQ7XG4gICAgdGFyZ2V0OiBJZ3hDb2x1bW5Db21wb25lbnQ7XG4gICAgY2FuY2VsOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElHcmlkS2V5ZG93bkV2ZW50QXJncyBleHRlbmRzIElCYXNlRXZlbnRBcmdzIHtcbiAgICB0YXJnZXRUeXBlOiBHcmlkS2V5ZG93blRhcmdldFR5cGU7XG4gICAgdGFyZ2V0OiBhbnk7XG4gICAgZXZlbnQ6IEV2ZW50O1xuICAgIGNhbmNlbDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ2VsbFBvc2l0aW9uIHtcbiAgICByb3dJbmRleDogbnVtYmVyO1xuICAgIHZpc2libGVDb2x1bW5JbmRleDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElSb3dEcmFnRW5kRXZlbnRBcmdzIGV4dGVuZHMgSUJhc2VFdmVudEFyZ3Mge1xuICAgIGRyYWdEaXJlY3RpdmU6IElneERyYWdEaXJlY3RpdmU7XG4gICAgZHJhZ0RhdGE6IFJvd1R5cGU7XG4gICAgZHJhZ0VsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICAgIGFuaW1hdGlvbjogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUm93RHJhZ1N0YXJ0RXZlbnRBcmdzIGV4dGVuZHMgQ2FuY2VsYWJsZUV2ZW50QXJncywgSUJhc2VFdmVudEFyZ3Mge1xuICAgIGRyYWdEaXJlY3RpdmU6IElneERyYWdEaXJlY3RpdmU7XG4gICAgZHJhZ0RhdGE6IFJvd1R5cGU7XG4gICAgZHJhZ0VsZW1lbnQ6IEhUTUxFbGVtZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElSb3dUb2dnbGVFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUV2ZW50QXJncyB7XG4gICAgcm93SUQ6IGFueTtcbiAgICBleHBhbmRlZDogYm9vbGVhbjtcbiAgICBldmVudD86IEV2ZW50O1xuICAgIGNhbmNlbDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBFdmVudCBlbWl0dGVkIHdoZW4gYSByb3cncyBwaW4gc3RhdGUgY2hhbmdlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUGluUm93RXZlbnRBcmdzIGV4dGVuZHMgSUJhc2VFdmVudEFyZ3MsIENhbmNlbGFibGVFdmVudEFyZ3Mge1xuICAgIC8qKlxuICAgICAqIFRoZSBJRCBvZiB0aGUgcm93LCB0aGF0IHdhcyBwaW5uZWQvdW5waW5uZWQuXG4gICAgICogICBJRCBpcyBlaXRoZXIgdGhlIHByaW1hcnlLZXkgdmFsdWUgb3IgdGhlIGRhdGEgcmVjb3JkIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IHJvd0lEOiBhbnk7XG4gICAgcm93PzogUm93VHlwZTtcbiAgICAvKiogVGhlIGluZGV4IGF0IHdoaWNoIHRvIHBpbiB0aGUgcm93IGluIHRoZSBwaW5uZWQgcm93cyBjb2xsZWN0aW9uLiAqL1xuICAgIGluc2VydEF0SW5kZXg/OiBudW1iZXI7XG4gICAgLyoqIFdoZXRoZXIgb3Igbm90IHRoZSByb3cgaXMgcGlubmVkIG9yIHVucGlubmVkLiAqL1xuICAgIHJlYWRvbmx5IGlzUGlubmVkOiBib29sZWFuO1xufVxuXG4vKipcbiAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBhIGdyaWQgaXMgc2Nyb2xsZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUdyaWRTY3JvbGxFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUV2ZW50QXJncyB7XG4gICAgLyoqIFRoZSBzY3JvbGwgZGlyZWN0aW9uIC0gdmVydGljYWwgb3IgaG9yaXpvbnRhbC4gKi9cbiAgICBkaXJlY3Rpb246IHN0cmluZztcbiAgICAvKiogVGhlIG9yaWdpbmFsIGJyb3dzZXIgc2Nyb2xsIGV2ZW50LiAqL1xuICAgIGV2ZW50OiBFdmVudDtcbiAgICAvKiogVGhlIG5ldyBzY3JvbGwgcG9zaXRpb24gKi9cbiAgICBzY3JvbGxQb3NpdGlvbjogbnVtYmVyO1xufVxuXG4vKipcbiAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBhIGNoZWNrYm94IGluIHRoZSBjaGVja2JveFxuICogbGlzdCBvZiBhbiBJZ3hDb2x1bW5BY3Rpb25zIGNvbXBvbmVudCBpcyBjbGlja2VkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElDb2x1bW5Ub2dnbGVkRXZlbnRBcmdzIGV4dGVuZHMgSUJhc2VFdmVudEFyZ3Mge1xuICAgIC8qKiBUaGUgY29sdW1uIHRoYXQgaXMgdG9nZ2xlZC4gKi9cbiAgICBjb2x1bW46IElneENvbHVtbkNvbXBvbmVudDtcbiAgICAvKiogVGhlIGNoZWNrZWQgc3RhdGUgYWZ0ZXIgdGhlIGFjdGlvbi4gKi9cbiAgICBjaGVja2VkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElBY3RpdmVOb2RlQ2hhbmdlRXZlbnRBcmdzIGV4dGVuZHMgSUJhc2VFdmVudEFyZ3Mge1xuICAgIHJvdzogbnVtYmVyO1xuICAgIGNvbHVtbjogbnVtYmVyO1xuICAgIGxldmVsPzogbnVtYmVyO1xuICAgIHRhZzogR3JpZEtleWRvd25UYXJnZXRUeXBlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTb3J0aW5nRXZlbnRBcmdzIGV4dGVuZHMgSUJhc2VFdmVudEFyZ3MsIENhbmNlbGFibGVFdmVudEFyZ3Mge1xuICAgIHNvcnRpbmdFeHByZXNzaW9uczogSVNvcnRpbmdFeHByZXNzaW9uIHwgQXJyYXk8SVNvcnRpbmdFeHByZXNzaW9uPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRmlsdGVyaW5nRXZlbnRBcmdzIGV4dGVuZHMgSUJhc2VFdmVudEFyZ3MsIENhbmNlbGFibGVFdmVudEFyZ3Mge1xuICAgIGZpbHRlcmluZ0V4cHJlc3Npb25zOiBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDb2x1bW5WaXNpYmlsaXR5Q2hhbmdlZEV2ZW50QXJncyBleHRlbmRzIElCYXNlRXZlbnRBcmdzIHtcbiAgICBjb2x1bW46IGFueTtcbiAgICAvKipcbiAgICAgKiBUaGUgbmV3IGhpZGRlbiBzdGF0ZSB0aGF0IHRoZSBjb2x1bW4gd2lsbCBoYXZlLCBpZiBvcGVyYXRpb24gaXMgc3VjY2VzZnVsbC5cbiAgICAgKiBXaWxsIGJlIGB0cnVlYCB3aGVuIGhpZGluZyBhbmQgYGZhbHNlYCB3aGVuIHNob3dpbmcuXG4gICAgICovXG4gICAgbmV3VmFsdWU6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbHVtblZpc2liaWxpdHlDaGFuZ2luZ0V2ZW50QXJncyBleHRlbmRzIElDb2x1bW5WaXNpYmlsaXR5Q2hhbmdlZEV2ZW50QXJncywgQ2FuY2VsYWJsZUV2ZW50QXJncyB7XG59XG5cbiJdfQ==