@mtna/web-form-angular 1.0.2-SNAPSHOT.3 → 1.0.3

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 (55) hide show
  1. package/bundles/mtna-web-form-angular.umd.js +372 -384
  2. package/bundles/mtna-web-form-angular.umd.js.map +1 -1
  3. package/esm2015/lib/components/form/form.component.js +3 -2
  4. package/esm2015/lib/components/form/form.module.js +5 -1
  5. package/esm2015/lib/components/form-item-component-provider/form-item-injected-components.js +24 -29
  6. package/esm2015/lib/components/form-item-impl/date-range/date-range.component.js +2 -2
  7. package/esm2015/lib/components/form-item-impl/dropdown/dropdown.component.js +2 -2
  8. package/esm2015/lib/components/form-item-impl/form-section/form-section.component.js +4 -3
  9. package/esm2015/lib/components/form-item-impl/multiple-choice/multiple-choice.component.js +2 -2
  10. package/esm2015/lib/components/form-stepper/form-stepper/form-stepper.component.js +2 -2
  11. package/esm2015/lib/components/form-stepper/form-stepper.module.js +3 -3
  12. package/esm2015/lib/components/progressive-form/index.js +1 -2
  13. package/esm2015/lib/components/progressive-form/progressive-form/progressive-form.component.js +3 -2
  14. package/esm2015/lib/components/progressive-form/progressive-form/progressive-form.module.js +9 -7
  15. package/esm2015/lib/models/form-stepper/form-step.model.js +1 -1
  16. package/esm2015/lib/models/index.js +1 -2
  17. package/esm2015/lib/pipes/child-step-active.pipe.js +3 -3
  18. package/esm2015/lib/pipes/coerce-form-step-group.pipe.js +1 -1
  19. package/esm2015/lib/pipes/coerce-form-step.pipe.js +2 -2
  20. package/esm2015/lib/pipes/filter-hidden-items.pipe.js +51 -0
  21. package/esm2015/lib/pipes/index.js +2 -1
  22. package/esm2015/lib/services/form-manager.service.js +2 -3
  23. package/esm2015/lib/services/ui.service.js +7 -3
  24. package/esm2015/lib/utilities/generate-form-steps.js +4 -4
  25. package/esm2015/lib/utilities/serializer-util.js +3 -6
  26. package/esm2015/lib/utilities/update-step-status.js +1 -1
  27. package/fesm2015/mtna-web-form-angular.js +212 -230
  28. package/fesm2015/mtna-web-form-angular.js.map +1 -1
  29. package/lib/components/form/form.module.d.ts +4 -3
  30. package/lib/components/form-item-impl/dropdown/_dropdown-theme.scss +8 -8
  31. package/lib/components/form-stepper/form-stepper/_form-stepper-theme.scss +1 -2
  32. package/lib/components/progressive-form/index.d.ts +0 -1
  33. package/lib/components/progressive-form/progressive-form/progressive-form.component.d.ts +2 -2
  34. package/lib/components/progressive-form/progressive-form/progressive-form.module.d.ts +2 -2
  35. package/lib/models/index.d.ts +0 -1
  36. package/lib/pipes/filter-hidden-items.pipe.d.ts +23 -0
  37. package/lib/pipes/index.d.ts +1 -0
  38. package/lib/services/form-manager.service.d.ts +2 -2
  39. package/lib/utilities/generate-form-steps.d.ts +2 -2
  40. package/lib/utilities/update-step-status.d.ts +2 -2
  41. package/package.json +1 -1
  42. package/esm2015/lib/components/progressive-form/progressive-form-section/index.js +0 -3
  43. package/esm2015/lib/components/progressive-form/progressive-form-section/progressive-form-section.component.js +0 -27
  44. package/esm2015/lib/components/progressive-form/progressive-form-section/progressive-form-section.module.js +0 -54
  45. package/esm2015/lib/models/progressive-form/index.js +0 -4
  46. package/esm2015/lib/models/progressive-form/outline-step.model.js +0 -2
  47. package/esm2015/lib/models/progressive-form/progressive-form-section.model.js +0 -6
  48. package/esm2015/lib/models/progressive-form/progressive-form.model.js +0 -6
  49. package/lib/components/progressive-form/progressive-form-section/index.d.ts +0 -2
  50. package/lib/components/progressive-form/progressive-form-section/progressive-form-section.component.d.ts +0 -9
  51. package/lib/components/progressive-form/progressive-form-section/progressive-form-section.module.d.ts +0 -16
  52. package/lib/models/progressive-form/index.d.ts +0 -3
  53. package/lib/models/progressive-form/outline-step.model.d.ts +0 -7
  54. package/lib/models/progressive-form/progressive-form-section.model.d.ts +0 -4
  55. package/lib/models/progressive-form/progressive-form.model.d.ts +0 -7
@@ -6,6 +6,7 @@ export * from './coerce-form-item.pipe';
6
6
  export * from './coerce-form-step-group.pipe';
7
7
  export * from './coerce-form-step.pipe';
8
8
  export * from './date-quarter.pipe';
9
+ export * from './filter-hidden-items.pipe';
9
10
  export * from './form-step-group.pipe';
10
11
  export * from './get-active-form-step-item.pipe';
11
12
  export * from './get-auto-complete.pipe';
@@ -18,4 +19,4 @@ export * from './get-selected-option.pipe';
18
19
  export * from './get-step-aria-label.pipe';
19
20
  export * from './items-with-value.pipe';
20
21
  export * from './sanitize-html.pipe';
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93ZWItZm9ybS1hbmd1bGFyL3NyYy9saWIvcGlwZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHNCQUFzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jaGlsZC1zdGVwLWFjdGl2ZS5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vY29lcmNlLWRhdGUtaXRlbS5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vY29lcmNlLWZvcm0tY29udHJvbC5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vY29lcmNlLWZvcm0tZ3JvdXAucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2NvZXJjZS1mb3JtLWl0ZW0ucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2NvZXJjZS1mb3JtLXN0ZXAtZ3JvdXAucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2NvZXJjZS1mb3JtLXN0ZXAucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2RhdGUtcXVhcnRlci5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vZm9ybS1zdGVwLWdyb3VwLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9nZXQtYWN0aXZlLWZvcm0tc3RlcC1pdGVtLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9nZXQtYXV0by1jb21wbGV0ZS5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vZ2V0LWF2YWlsYWJsZS1xdWFydGVycy5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vZ2V0LWZvcm0tY29udHJvbC1lcnJvci5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vZ2V0LWxpc3QtaWNvbi5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vZ2V0LW9iamVjdC10eXBlLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9nZXQtcHJvZ3Jlc3NpdmUtZm9ybS1pdGVtLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9nZXQtc2VsZWN0ZWQtb3B0aW9uLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9nZXQtc3RlcC1hcmlhLWxhYmVsLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9pdGVtcy13aXRoLXZhbHVlLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zYW5pdGl6ZS1odG1sLnBpcGUnO1xuIl19
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93ZWItZm9ybS1hbmd1bGFyL3NyYy9saWIvcGlwZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsc0JBQXNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NoaWxkLXN0ZXAtYWN0aXZlLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9jb2VyY2UtZGF0ZS1pdGVtLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9jb2VyY2UtZm9ybS1jb250cm9sLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9jb2VyY2UtZm9ybS1ncm91cC5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vY29lcmNlLWZvcm0taXRlbS5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vY29lcmNlLWZvcm0tc3RlcC1ncm91cC5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vY29lcmNlLWZvcm0tc3RlcC5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0ZS1xdWFydGVyLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9maWx0ZXItaGlkZGVuLWl0ZW1zLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9mb3JtLXN0ZXAtZ3JvdXAucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2dldC1hY3RpdmUtZm9ybS1zdGVwLWl0ZW0ucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2dldC1hdXRvLWNvbXBsZXRlLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9nZXQtYXZhaWxhYmxlLXF1YXJ0ZXJzLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9nZXQtZm9ybS1jb250cm9sLWVycm9yLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9nZXQtbGlzdC1pY29uLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9nZXQtb2JqZWN0LXR5cGUucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2dldC1wcm9ncmVzc2l2ZS1mb3JtLWl0ZW0ucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2dldC1zZWxlY3RlZC1vcHRpb24ucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2dldC1zdGVwLWFyaWEtbGFiZWwucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2l0ZW1zLXdpdGgtdmFsdWUucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3Nhbml0aXplLWh0bWwucGlwZSc7XG4iXX0=
@@ -3,7 +3,6 @@ import { isType } from '@mtna/core-ts';
3
3
  import { isConditionalItem, isForm, isFormItemGroupImpl, isOptionGroupItemImpl, isOptionItemImpl, isRepeatableItem, isSection, isTableItem, MtnaWfFormItemChange, } from '@mtna/web-form-ts';
4
4
  import { Subject } from 'rxjs';
5
5
  import { take } from 'rxjs/operators';
6
- import { isProgressiveFormSection } from '../models/progressive-form/progressive-form-section.model';
7
6
  import { findFormControl, MtnaWfSerializer } from '../utilities';
8
7
  import * as i0 from "@angular/core";
9
8
  import * as i1 from "./api.service";
@@ -224,7 +223,7 @@ export class MtnaWfManagerService {
224
223
  return item;
225
224
  }
226
225
  }
227
- if (isForm(item) || isSection(item) || isProgressiveFormSection(item) || isFormItemGroupImpl(item) || isRepeatableItem(item)) {
226
+ if (isForm(item) || isSection(item) || isFormItemGroupImpl(item) || isRepeatableItem(item)) {
228
227
  const items = [...item.items];
229
228
  const indexToModify = item.items.findIndex((i) => i.instanceId === change.parentIds[0]);
230
229
  const itemToModify = item.items[indexToModify];
@@ -474,4 +473,4 @@ MtnaWfManagerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0",
474
473
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfManagerService, decorators: [{
475
474
  type: Injectable
476
475
  }], ctorParameters: function () { return [{ type: i1.MtnaWfApiService }, { type: i2.MtnaWfNgFormService }, { type: i3.MtnaWfUIService }]; } });
477
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1tYW5hZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93ZWItZm9ybS1hbmd1bGFyL3NyYy9saWIvc2VydmljZXMvZm9ybS1tYW5hZ2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBUSxNQUFNLGVBQWUsQ0FBQztBQUVqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFRTCxpQkFBaUIsRUFDakIsTUFBTSxFQUNOLG1CQUFtQixFQUNuQixxQkFBcUIsRUFDckIsZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsV0FBVyxFQUNYLG9CQUFvQixHQVVyQixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3RDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7O0FBaUJqRTs7Ozs7R0FLRztBQUVILE1BQU0sT0FBTyxvQkFBb0I7SUFvQi9CLFlBQXNCLFVBQTRCLEVBQVksYUFBa0MsRUFBWSxTQUEwQjtRQUFoSCxlQUFVLEdBQVYsVUFBVSxDQUFrQjtRQUFZLGtCQUFhLEdBQWIsYUFBYSxDQUFxQjtRQUFZLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBbkI1SCxlQUFVLEdBQUcsSUFBSSxHQUFHLEVBQThCLENBQUM7UUFDbkQsZ0JBQVcsR0FBRyxJQUFJLE9BQU8sRUFBMEIsQ0FBQztRQUNwRCwyQkFBc0IsR0FBRyxJQUFJLE9BQU8sRUFBbUIsQ0FBQztRQUNsRSxnRUFBZ0U7UUFDdEQsK0JBQTBCLEdBQTZDLEVB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c0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ2hDO2FBQ0Y7U0FDRjtRQUVELHVDQUF1QztRQUN2QyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsRUFBRSxDQUFDO1FBQ3JDLElBQUksTUFBQSxJQUFJLENBQUMsU0FBUywwQ0FBRSxnQkFBZ0IsRUFBRTtZQUNwQyxLQUFLLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMseUJBQXlCLEVBQUU7Z0JBQzlFLElBQUksTUFBTSxDQUFDLGdCQUFnQixLQUFLLFFBQVEsRUFBRTtvQkFDeEMsK0VBQStFO29CQUMvRSxJQUFJLENBQUMsMEJBQTBCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztvQkFDcEQsd0RBQXdEO29CQUN4RCxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUN2QzthQUNGO1NBQ0Y7UUFFRCw0Q0FBNEM7UUFDNUMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMxQyxJQUFJLElBQUksRUFBRTtZQUNSLEtBQUssTUFBTSxFQUFFLElBQUksc0JBQXNCLEVBQUU7Z0JBQ3ZDLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzFDLElBQUksT0FBTyxFQUFFO29CQUNYLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2lCQUNsQzthQUNGO1NBQ0Y7SUFDSCxDQUFDOztrSEE5aUJVLG9CQUFvQjtzSEFBcEIsb0JBQW9COzRGQUFwQixvQkFBb0I7a0JBRGhDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBpc1R5cGUgfSBmcm9tICdAbXRuYS9jb3JlLXRzJztcbmltcG9ydCB7XG4gIENvbmRpdGlvbmFsSXRlbSxcbiAgQ29uZGl0aW9uQ2hhbmdlLFxuICBGb3JtLFxuICBGb3JtSXRlbSxcbiAgRm9ybUl0ZW1Hcm91cCxcbiAgRm9ybUl0ZW1JbXBsLFxuICBGb3JtSXRlbVZhbGlkYXRpb25SZXN1bHQsXG4gIGlzQ29uZGl0aW9uYWxJdGVtLFxuICBpc0Zvcm0sXG4gIGlzRm9ybUl0ZW1Hcm91cEltcGwsXG4gIGlzT3B0aW9uR3JvdXBJdGVtSW1wbCxcbiAgaXNPcHRpb25JdGVtSW1wbCxcbiAgaXNSZXBlYXRhYmxlSXRlbSxcbiAgaXNTZWN0aW9uLFxuICBpc1RhYmxlSXRlbSxcbiAgTXRuYVdmRm9ybUl0ZW1DaGFuZ2UsXG4gIE10bmFXZkZvcm1JdGVtQ2hhbmdlQWN0aW9uLFxuICBPcHRpb24sXG4gIE9wdGlvbkdyb3VwSXRlbUltcGwsXG4gIE9wdGlvbkl0ZW1JbXBsLFxuICBSZXBlYXRhYmxlSXRlbSxcbiAgU2VjdGlvbixcbiAgVGFibGVJdGVtLFxuICBUYWJsZVJvd0l0ZW0sXG4gIFZhbHVlSXRlbSxcbn0gZnJvbSAnQG10bmEvd2ViLWZvcm0tdHMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQmFzZUZvcm1JdGVtLCBQcm9ncmVzc2l2ZUZvcm0gfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgaXNQcm9ncmVzc2l2ZUZvcm1TZWN0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL3Byb2dyZXNzaXZlLWZvcm0vcHJvZ3Jlc3NpdmUtZm9ybS1zZWN0aW9uLm1vZGVsJztcbmltcG9ydCB7IGZpbmRGb3JtQ29udHJvbCwgTXRuYVdmU2VyaWFsaXplciB9IGZyb20gJy4uL3V0aWxpdGllcyc7XG5pbXBvcnQgeyBNdG5hV2ZBcGlTZXJ2aWNlIH0gZnJvbSAnLi9hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBNdG5hV2ZOZ0Zvcm1TZXJ2aWNlIH0gZnJvbSAnLi9uZy1mb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHsgTXRuYVdmVUlTZXJ2aWNlIH0gZnJvbSAnLi91aS5zZXJ2aWNlJztcblxuLyoqXG4gKiB0eXBlcyBvZiBGb3JtSXRlbXMgdGhhdCBjYW4gYmUgcGFzc2VkIGludG8gdGhlICdtb2RpZnlNdG5hRm9ybUl0ZW0nIG1ldGhvZCB0byBhZGQvcmVtb3ZlIGl0ZW1zXG4gKi9cbnR5cGUgUGFyZW50SXRlbVVuaW9uID1cbiAgfCBGb3JtXG4gIHwgU2VjdGlvblxuICB8IEZvcm1JdGVtR3JvdXBcbiAgfCBSZXBlYXRhYmxlSXRlbVxuICB8IFRhYmxlSXRlbVxuICB8IE9wdGlvbkl0ZW1JbXBsPE9wdGlvbjx1bmtub3duPiwgdW5rbm93bj5cbiAgfCBPcHRpb25Hcm91cEl0ZW1JbXBsPE9wdGlvbjx1bmtub3duPj47XG5cbi8qKlxuICogQWxsb3dzIGEgY2FsbGVyIHRvIChkZSlzZXJpYWxpemFlIGFuIE10bmFGb3JtLiBJdCBjb250YWlucyB0aGUgZGV0ZXJtaW5pbmcgbG9naWMgZm9yIHJldHVybmluZyBzcGVjaWZpYyBmb3JtIGNvbnRyb2xzXG4gKiBhbmQgZGVzZXJpYWxpemluZyBuZXcgTXRuYUZvcm1zIGZyb20gdGhlIHJlYWN0aXZlIHZhbHVlcywgYXMgd2VsbCBhcyByZWdpc3RlcmluZyBjdXN0b20gRm9ybSBJdGVtcyAmIGZ1bmN0aW9ucy5cbiAqXG4gKiBAZXhwb3J0XG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNdG5hV2ZNYW5hZ2VyU2VydmljZSB7XG4gIHByb3RlY3RlZCBjb21wb25lbnRzID0gbmV3IE1hcDxzdHJpbmcsIFR5cGU8QmFzZUZvcm1JdGVtPj4oKTtcbiAgcHJvdGVjdGVkIGZvcm1DaGFuZ2UkID0gbmV3IFN1YmplY3Q8Rm9ybSB8IFByb2dyZXNzaXZlRm9ybT4oKTtcbiAgcHJvdGVjdGVkIHByb2dyZXNzaXZlRm9ybUNoYW5nZSQgPSBuZXcgU3ViamVjdDxQcm9ncmVzc2l2ZUZvcm0+KCk7XG4gIC8qKiBBIG1hcCBvZiBhbGwge0BsaW5rIEZvcm1JdGVtVmFsaWRhdGlvblJlc3VsdH0ga2V5ZWQgb24gaWQgKi9cbiAgcHJvdGVjdGVkIF9mb3JtSXRlbVZhbGlkYXRpb25SZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCBGb3JtSXRlbVZhbGlkYXRpb25SZXN1bHQ+ID0ge307XG4gIC8qKiBDb25kaXRpb25DaGFuZ2VzIG9uICdhZGQnIG11c3Qgd2FpdCB1bnRpbCB0aGUgZm9ybSByZXJlbmRlcnMgdG8gdG9nZ2xlIGl0ZW1zICovXG4gIHByb3RlY3RlZCBpdGVtVG9nZ2xlUXVlOiBBcnJheTxDb25kaXRpb25DaGFuZ2U+IHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcHJvdGVjdGVkIF9tdG5hRm9ybTogRm9ybSB8IHVuZGVmaW5lZDtcbiAgcHJvdGVjdGVkIF9tdG5hUHJvZ3Jlc3NpdmVGb3JtOiBQcm9ncmVzc2l2ZUZvcm0gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgc3RyZWFtIG9mIE10bmFGb3JtIGNoYW5nZXMuIFVzZWQgdG8gaW5mb3JtIGEgc3Vic2NyaWJlciB0aGF0IGFuIE10bmFGb3JtIGhhcyBiZWVuIGNoYW5nZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGU8TXRuYUZvcm0+IHRvIHdoaWNoIGEgY2FsbGVyIGNhbiBzdWJzY3JpYmVcbiAgICovXG4gIGdldCBmb3JtQ2hhbmdlcygpOiBPYnNlcnZhYmxlPEZvcm0+IHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQ2hhbmdlJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBhcGlTZXJ2aWNlOiBNdG5hV2ZBcGlTZXJ2aWNlLCBwcm90ZWN0ZWQgbmdGb3JtU2VydmljZTogTXRuYVdmTmdGb3JtU2VydmljZSwgcHJvdGVjdGVkIHVpU2VydmljZTogTXRuYVdmVUlTZXJ2aWNlKSB7fVxuXG4gIC8qKlxuICAgKiBBZGRzIG9yIHJlbW92ZXMgYSBGb3JtSXRlbSBmcm9tIHRoZSBmb3JtICYgbW9kaWZpZXMgb3RoZXIgYWZmZWN0ZWQgRm9ybUl0ZW1zXG4gICAqIEBwYXJhbSBjaGFuZ2UgTXRuYVdmRm9ybUl0ZW1DaGFuZ2VcbiAgICovXG4gIGNoYW5nZU10bmFGb3JtSXRlbShjaGFuZ2U6IE10bmFXZkZvcm1JdGVtQ2hhbmdlKSB7XG4gICAgaWYgKCF0aGlzLl9tdG5hRm9ybSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2UuYWN0aW9uVHlwZSA9PT0gJ1JFTU9WRScpIHtcbiAgICAgIC8vIHJlbW92ZSB0aGUgcmVwZWF0YWJsZSBpdGVtIGZyb20gdGhlIG10bmFmb3JtXG4gICAgICBsZXQgbmV3Rm9ybSA9IHRoaXMuX21vZGlmeUZvcm1JdGVtKHRoaXMuX210bmFGb3JtLCBjaGFuZ2UpIGFzIEZvcm07XG4gICAgICAvLyBtb2RpZnkgdGhlIGNvbmRpdGlvbnMgb2YgYWxsIGVmZmVjdGVkIGZvcm0gaXRlbXNcbiAgICAgIG5ld0Zvcm0gPSB0aGlzLl9tb2RpZnlGb3JtSXRlbUNvbmRpdGlvbnMobmV3Rm9ybSwgY2hhbmdlKTtcblxuICAgICAgdGhpcy5uZ0Zvcm1TZXJ2aWNlLnJlbW92ZUNvbnRyb2woY2hhbmdlLmlkLCBjaGFuZ2UucGFyZW50SWRzKTtcbiAgICAgIHRoaXMuZm9ybUNoYW5nZSQubmV4dChuZXdGb3JtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAgIC5nZXRSZXBlYXRhYmxlSXRlbSh0aGlzLl9tdG5hRm9ybS5pbnN0YW5jZUlkLCBjaGFuZ2UuaWQpXG4gICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKG5ld0l0ZW06IEZvcm1JdGVtSW1wbDx1bmtub3duPikgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld0Zvcm1Db250cm9sID0gdGhpcy5zZXJpYWxpemVNdG5hRm9ybUl0ZW0obmV3SXRlbSk7XG4gICAgICAgICAgaWYgKG5ld0Zvcm1Db250cm9sICYmIHRoaXMuX210bmFGb3JtKSB7XG4gICAgICAgICAgICB0aGlzLm5nRm9ybVNlcnZpY2UuYWRkQ29udHJvbChuZXdJdGVtLmluc3RhbmNlSWQsIGNoYW5nZS5wYXJlbnRJZHMsIG5ld0Zvcm1Db250cm9sKTtcbiAgICAgICAgICAgIC8vIEFkZCB0aGUgbmV3IHJlcGVhdGFibGUgaXRlbSBpbnRvIHRoZSBtdG5hZm9ybVxuICAgICAgICAgICAgbGV0IG5ld0Zvcm0gPSB0aGlzLl9tb2RpZnlGb3JtSXRlbSh0aGlzLl9tdG5hRm9ybSwgeyAuLi5jaGFuZ2UsIGlkOiBuZXdJdGVtLmluc3RhbmNlSWQgfSwgbmV3SXRlbSkgYXMgRm9ybTtcblxuICAgICAgICAgICAgLy8gR2VuZXJhdGUgYSBsaXN0IG9mIGFsbCBmb3JtaXRlbSBjb25kaXRpb25zIG5lZWRpbmcgY2hhbmdlICYgbW9kaWZ5IHRob3NlIGl0ZW1zIGluIHRoZSBmb3JtXG4gICAgICAgICAgICBjb25zdCBjb25kaXRpb25DaGFuZ2VzID0gdGhpcy5nZW5lcmF0ZUNvbmRpdGlvbkNoYW5nZUFycmF5KG5ld0l0ZW0sICdBREQnKTtcbiAgICAgICAgICAgIG5ld0Zvcm0gPSB0aGlzLl9tb2RpZnlGb3JtSXRlbUNvbmRpdGlvbnMobmV3Rm9ybSwgeyAuLi5jaGFuZ2UsIGNvbmRpdGlvbkNoYW5nZXMgfSk7XG4gICAgICAgICAgICB0aGlzLml0ZW1Ub2dnbGVRdWUgPSBjb25kaXRpb25DaGFuZ2VzO1xuICAgICAgICAgICAgLy8gZW1pdCB0aGUgbmV3IG10bmFmb3JtXG4gICAgICAgICAgICB0aGlzLmZvcm1DaGFuZ2UkLm5leHQobmV3Rm9ybSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIENvbmRpdGlvbkNoYW5nZSBhcnJheSBmb3IgaXRlbXMgZXhpc3RpbmcgaW4gdGhlIDxpdGVtPiB3aGljaCBlbmFibGUvZGlzYWJsZSBGb3JtSXRlbXMgb3V0c2lkZSB0aGUgPGl0ZW0+J3Mgc2NvcGUuXG4gICAqIEBwYXJhbSBpdGVtIEZvcm1JdGVtIHRoYXQgZWZmZWN0cyB0aGUgY29uZGl0aW9uIG9mIG90aGVyIEZvcm1JdGVtc1xuICAgKiBAcGFyYW0gYWN0aW9uIFdoZXRoZXIgdGhpcyBpdGVtIHdhcyBhZGRlZCAoQUREKSwgb3IgcmVtb3ZlZCAoUkVNT1ZFKVxuICAgKiBAcmV0dXJucyBBcnJheTxDb25kaXRpb25DaGFuZ2U+XG4gICAqL1xuICBnZW5lcmF0ZUNvbmRpdGlvbkNoYW5nZUFycmF5KGl0ZW06IEZvcm1JdGVtLCBhY3Rpb24/OiBNdG5hV2ZGb3JtSXRlbUNoYW5nZUFjdGlvbik6IEFycmF5PENvbmRpdGlvbkNoYW5nZT4ge1xuICAgIGNvbnN0IGludGVybmFsTWFwID0ge307XG4gICAgdGhpcy5fYnVpbGRJbnRlcm5hbElkc01hcChpdGVtLCBpbnRlcm5hbE1hcCk7XG4gICAgY29uc3QgY29uZGl0aW9uQ2hhbmdlcyA9IG5ldyBBcnJheTxDb25kaXRpb25DaGFuZ2U+KCk7XG4gICAgdGhpcy5fYnVpbGRDb25kaXRpb25DaGFuZ2VBcnJheShpdGVtLCBjb25kaXRpb25DaGFuZ2VzLCBpbnRlcm5hbE1hcCwgYWN0aW9uKTtcbiAgICByZXR1cm4gY29uZGl0aW9uQ2hhbmdlcztcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyBUaGUgdG9wIGxldmVsIHZhbGlkYXRpb24gcmVzdWx0cyAodXN1YWxseSB0aGUgZXJyb3JzKSwga2V5ZWQgb24gSUQuICovXG4gIGdldEZvcm1JdGVtVmFsaWRhdGlvblJlc3VsdHMoKTogUmVjb3JkPHN0cmluZywgRm9ybUl0ZW1WYWxpZGF0aW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1JdGVtVmFsaWRhdGlvblJlc3VsdHM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIG5ldyBNdG5hRm9ybSB1c2luZyB0aGUgTXRuYUZvcm0gJiByZWFjaXZlIGZvcm0gdmFsdWVzIGZyb20gdGhlIE10bmFXZk5nRm9ybVNlcnZpY2UncyBpbnRlcm5hbCBmb3JtLlxuICAgKlxuICAgKiBAcGFyYW0gbmdGb3JtVmFsdWVzIEpTT04gb2JqZWN0IG9mIG5nRm9ybVZhbHVlc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgdXBkYXRlRm9ybShuZ0Zvcm1WYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogRm9ybSB7XG4gICAgY29uc3QgY3VycmVudEZvcm0gPSB0aGlzLm5nRm9ybVNlcnZpY2UuZ2V0Rm9ybVZhbHVlKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmN1cnJlbnRGb3JtLFxuICAgICAgaXRlbXM6IE10bmFXZlNlcmlhbGl6ZXIuaW5zZXJ0Rm9ybUl0ZW1WYWx1ZXMoXG4gICAgICAgIGN1cnJlbnRGb3JtLFxuICAgICAgICBuZ0Zvcm1WYWx1ZXMsXG4gICAgICAgIHRoaXMudWlTZXJ2aWNlLmdldERpc2FibGVkU3RhdGVzKCksXG4gICAgICAgIHRoaXMuZHluYW1pY0Zvcm1Db25kaXRpb25hbCxcbiAgICAgICAgdGhpcy5keW5hbWljV2ViRm9ybUl0ZW1CdWlsZGVyXG4gICAgICApLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIG5ldyBNdG5hRm9ybSB1c2luZyB0aGUgcHJldmlvdXMgTXRuYUZvcm0gJiByZWFjdGl2ZSBmb3JtIHZhbHVlcy5cbiAgICpcbiAgICogQHBhcmFtIG10bmFGb3JtIE10bmFGb3JtIHJlcXVpcmluZyB2YWx1ZSBpbnNlcnRpb25cbiAgICogQHBhcmFtIG5nRm9ybVZhbHVlcyBKU09OIG9iamVjdCBvZiAgbmdGb3JtIHZhbHVlc1xuICAgKiBAcmV0dXJucyBuZXcgTXRuYUZvcm1cbiAgICovXG4gIGluc2VydE5ld1ZhbHVlcyhtdG5hRm9ybTogRm9ybSwgbmdGb3JtVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IEZvcm0ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5tdG5hRm9ybSxcbiAgICAgIGl0ZW1zOiBNdG5hV2ZTZXJpYWxpemVyLmluc2VydEZvcm1JdGVtVmFsdWVzKFxuICAgICAgICBtdG5hRm9ybSxcbiAgICAgICAgbmdGb3JtVmFsdWVzLFxuICAgICAgICB0aGlzLnVpU2VydmljZS5nZXREaXNhYmxlZFN0YXRlcygpLFxuICAgICAgICB0aGlzLmR5bmFtaWNGb3JtQ29uZGl0aW9uYWwsXG4gICAgICAgIHRoaXMuZHluYW1pY1dlYkZvcm1JdGVtQnVpbGRlclxuICAgICAgKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBGb3JtIHwgRm9ybUl0ZW0gaW50byBGb3JtQ29udHJvbChzKVxuICAgKlxuICAgKiBAcGFyYW0gaXRlbSBGb3JtIHwgRm9ybUl0ZW0gcmVxdWlyaW5nIHNlcmlhbGl6YXRpb25cbiAgICogQHJldHVybnMgRm9ybUdyb3VwIHwgRm9ybUNvbnRyb2xcbiAgICovXG4gIHNlcmlhbGl6ZU10bmFGb3JtSXRlbShpdGVtOiBGb3JtIHwgRm9ybUl0ZW1JbXBsPHVua25vd24+KTogQWJzdHJhY3RDb250cm9sIHwgbnVsbCB7XG4gICAgcmV0dXJuIE10bmFXZlNlcmlhbGl6ZXIuZGV0ZXJtaW5lU2VyaWFsaXplRnVuY3Rpb25Ub1VzZShcbiAgICAgIGl0ZW0sXG4gICAgICB0aGlzLFxuICAgICAgdGhpcy5keW5hbWljRm9ybUNvbmRpdGlvbmFsLFxuICAgICAgdGhpcy5keW5hbWljUmVhY3RpdmVGb3JtQ29udHJvbEJ1aWxkZXJcbiAgICApO1xuICB9XG5cbiAgLy8jcmVnaW9uIEN1c3RvbSBDb21wb25lbnQvRnVuY3Rpb24gUmVnaXN0cmF0aW9uXG4gIGdldER5bmFtaWNDb21wb25lbnQoaWQ6IHN0cmluZyk6IFR5cGU8QmFzZUZvcm1JdGVtPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50cy5nZXQoaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIG1hcCBvZiBjb21wb25lbnRzIHRvIGJlIGR5bmFtaWNhbGx5IHJlbmRlcmVkIGluc2lkZSBhbiBNdG5hRm9ybS5cbiAgICpcbiAgICogQHBhcmFtIGNvbXBvbmVudHMgdGhlIG1hcCBvZiBjb21wb25lbnRzIHRoYXQgYSBWYWx1ZUl0ZW0gd2lsbCB1c2UgZm9yIHJlbmRlcmluZ1xuICAgKiBAcHJvcCBzdHJpbmcgLSB0aGUgdHlwZShpdGVtSWQgc3VmZml4KSBvZiBjb21wb25lbnQsIHVzZWQgZm9yIHJldHJpZXZhbFxuICAgKiBAcHJvcCBUeXBlIC0gdGhlIGNvbXBvbmVudCB0byBiZSByZW5kZXJlZCwgYW4gZXh0ZW5zaW9uIG9mIEJhc2VGb3JtSXRlbVxuICAgKi9cbiAgcmVnaXN0ZXJEeW5hbWljQ29tcG9uZW50cyhjb21wb25lbnRzOiBNYXA8c3RyaW5nLCBUeXBlPEJhc2VGb3JtSXRlbT4+KSB7XG4gICAgdGhpcy5jb21wb25lbnRzID0gY29tcG9uZW50cztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGFuIE10bmFGb3JtIG9uIHRoZSBzZXJ2aWNlXG4gICAqIEBwYXJhbSBmb3JtIE10bmFGb3JtIHRvIGJlIHVzZWQgZm9yIGludGVybmFsIG1vZGlmaWNhdGlvblxuICAgKi9cbiAgc2V0TXRuYUZvcm0oZm9ybTogRm9ybSkge1xuICAgIHRoaXMuX210bmFGb3JtID0geyAuLi5mb3JtIH07XG4gICAgaWYgKCEhdGhpcy5pdGVtVG9nZ2xlUXVlICYmICEhdGhpcy5pdGVtVG9nZ2xlUXVlLmxlbmd0aCkge1xuICAgICAgLy8gVGhlIGZvcm0gbmVlZHMgdGltZSB0byByZXJlbmRlciwgc28gd2UgcHVzaCB0aGlzIGxvb3AgdG8gdGhlIGVuZCBvZiB0aGUgc3RhY2tcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5pdGVtVG9nZ2xlUXVlKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBjaGFuZ2Ugb2YgdGhpcy5pdGVtVG9nZ2xlUXVlKSB7XG4gICAgICAgICAgICB0aGlzLnVpU2VydmljZS50b2dnbGVGb3JtSXRlbXMoY2hhbmdlLmVuYWJsZWRJdGVtcywgY2hhbmdlLmRpc2FibGVkSXRlbXMsICEhY2hhbmdlLmVuYWJsZSwgY2hhbmdlLmVuYWJsZXJJZCwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXRlbVRvZ2dsZVF1ZSA9IG51bGw7XG4gICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICAvLyBLZWVwIHRyYWNrIG9mIGFueSBlcnJvcnMgY29taW5nIGZyb20gdGhlIHNlcnZlciBhbmQgcmV2YWxpZGF0ZSB0aG9zZSBjb250cm9sc1xuICAgIHRoaXMuX3VwZGF0ZVNlcnZlclNpZGVFcnJvcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbnkgRm9ybVNlcnZpY2UgZXh0ZW5zaW9uIGNsYXNzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZCBpbiBvcmRlciB0byBjYWxsIHRoZVxuICAgKiBkeW5hbWljV2ViRm9ybUl0ZW1CdWlsZGVyL2R5bmFtaWNSZWFjdGl2ZUZvcm1Db250cm9sQnVpbGRlciBtZXRob2RzLiBEdXJpbmcgd2ViIGZvcm0gZ2VuZXJhdGlvbiwgdGhpcyBtZXRob2QgaXMgY2hlY2tlZCAmXG4gICAqIHRoZSBjdXJyZW50IEZvcm1JdGVtIGlzIHBhc3NlZCBpbiwgd2hpY2ggY2FuIGJlIHVzZWQgYnkgdGhlIG92ZXJyaWRpbmcgbWV0aG9kLlxuICAgKlxuICAgKiBAZXhhbXBsZSBkeW5hbWljRm9ybUNvbmRpdGlvbmFsID0gKGl0ZW06IEZvcm1JdGVtKSA9PiBpdGVtLml0ZW1JZC5pbmNsdWRlcyh7c29tZSBpdGVtSWR9KVxuICAgKlxuICAgKi9cbiAgcHJvdGVjdGVkIGR5bmFtaWNGb3JtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0byBiZSBvdmVycmlkZGVuIGJ5IGV4dGVuZGVkIHNlcnZpY2UgaW4gb3JkZXIgdG8gaGFuZGxlIGZvcm0gZ2VuZXJhdGlvbiBmb3IgYW55IGFwcGxpY2F0aW9uLXNwZWNpZmljIGR5bmFtaWMgZm9ybSBjb21wb25lbnRzLlxuICAgKiBTaG91bGQgcmV0dXJuIGEgbmV3IFZhbHVlSXRlbTxhbnk+LlxuICAgKiBTdGVwIDNcbiAgICpcbiAgICogQGV4YW1wbGUgZHluYW1pY1dlYkZvcm1JdGVtQnVpbGRlcihzZWN0aW9uOiBTZWN0aW9uIHwgRm9ybSwgaXRlbTogRm9ybUl0ZW0sIG5nRm9ybVZhbHVlOiBhbnkpOiBWYWx1ZUl0ZW0ge1xuICAgKiBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuZ2VuZXJhdGVOZXdWYWx1ZShpdGVtLCByZlZhbHVlLCBzZWN0aW9uKTtcbiAgICogcmV0dXJuIHsgLi4uaXRlbSwgLi4ubmV3VmFsdWUgfVxuICAgKiB9XG4gICAqIEBwYXJhbSBzZWN0aW9uIHRoZSBjdXJyZW50IEZvcm1TZWN0aW9uXG4gICAqIEBwYXJhbSBpdGVtIHRoZSBjdXJyZW50IEZvcm1JdGVtXG4gICAqIEBwYXJhbSBuZ0Zvcm1WYWx1ZSB0aGUgbmdGb3JtIEpTT04gdmFsdWVcbiAgICogQHJldHVybnMgYSBuZXcgVmFsdWVJdGVtXG4gICAqL1xuICBwcm90ZWN0ZWQgZHluYW1pY1dlYkZvcm1JdGVtQnVpbGRlcihcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbiAgICBzZWN0aW9uOiBGb3JtIHwgRm9ybUl0ZW1Hcm91cCB8IFJlcGVhdGFibGVJdGVtIHwgdW5kZWZpbmVkLFxuICAgIGl0ZW06IEZvcm1JdGVtLFxuICAgIG5nRm9ybVZhbHVlOiB1bmtub3duLFxuICAgIGRpc2FibGVkU3RhdGU/OiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH1cbiAgICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuICApOiBWYWx1ZUl0ZW08dW5rbm93bj4gfCBudWxsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0byBiZSBvdmVycmlkZGVuIGJ5IGV4dGVuZGVkIHNlcnZpY2UgaW4gb3JkZXIgdG8gaGFuZGxlIHJlYWN0aXZlIGZvcm0gZ2VuZXJhdGlvblxuICAgKiBmb3IgYW55IGFwcGxpY2F0aW9uLXNwZWNpZmljIGR5bmFtaWMgZm9ybSBjb21wb25lbnRzLlxuICAgKiBTaG91bGQgcmV0dXJuIEZvcm1Db250cm9sIHwgRm9ybUdyb3VwLlxuICAgKlxuICAgKiBAZXhhbXBsZSBkeW5hbWljUmVhY3RpdmVGb3JtQ29udHJvbEJ1aWxkZXIoaXRlbTogRm9ybUl0ZW0pIHtcbiAgICogcmV0dXJuIHRoaXMuYnVpbGRGb3JtQ29udHJvbEZvckR5bmFtaWNDb21wb25lbnQoaXRlbTogRm9ybUl0ZW0pO1xuICAgKiB9XG4gICAqIEBwYXJhbSBpdGVtIEZvcm1JdGVtIHVzZWQgdG8gZ2VuZXJhdGUgZm9ybSBjb250cm9sc1xuICAgKiBAcmV0dXJucyBGb3JtQ29udHJvbCB8IEZvcm1Hcm91cFxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBwcm90ZWN0ZWQgZHluYW1pY1JlYWN0aXZlRm9ybUNvbnRyb2xCdWlsZGVyKGl0ZW06IEZvcm1JdGVtKTogQWJzdHJhY3RDb250cm9sIHwgbnVsbCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gSU5URVJOQUwgTUVUSE9EU1xuICAvKipcbiAgICogUmVjdXJzaXZlbHkgdHJhdmVyc2VzIGEgRm9ybSB0byBpbnNlcnQgb3IgcmVtb3ZlIGEgZGVzaWduYXRlZCBGb3JtSXRlbS5cbiAgICogQHBhcmFtIGl0ZW0gTXRuYUZvcm0gdG8gc2VhcmNoIHRocm91Z2hcbiAgICogQHBhcmFtIGNoYW5nZTogTXRuYVdmRm9ybUl0ZW1DaGFuZ2UgZm9yIGFkZGluZyBvciByZW1vdmluZyBhIEZvcm1JdGVtXG4gICAqIEBwYXJhbSBuZXdJdGVtIEZvcm1JdGVtIHRvIGFkZCB0byBpdHMgcGFyZW50XG4gICAqL1xuICBwcm90ZWN0ZWQgX21vZGlmeUZvcm1JdGVtPEkgZXh0ZW5kcyBGb3JtIHwgU2VjdGlvbiB8IEZvcm1JdGVtIHwgRm9ybUl0ZW1JbXBsPHVua25vd24+PihcbiAgICBpdGVtOiBJLFxuICAgIGNoYW5nZTogTXRuYVdmRm9ybUl0ZW1DaGFuZ2UsXG4gICAgbmV3SXRlbT86IEZvcm1JdGVtXG4gICk6IEZvcm0gfCBTZWN0aW9uIHwgRm9ybUl0ZW0gfCBGb3JtSXRlbUltcGw8dW5rbm93bj4ge1xuICAgIGlmICghY2hhbmdlLnBhcmVudElkcy5sZW5ndGgpIHtcbiAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlIHJlYWNoIHRoZSBQYXJlbnQgRm9ybUl0ZW1cbiAgICAgIGlmIChjaGFuZ2UuYWN0aW9uVHlwZSA9PT0gJ1JFUExBQ0UnKSB7XG4gICAgICAgIGlmICgnaXRlbXMnIGluIGl0ZW0pIHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IGl0ZW0uaXRlbXMuZmluZEluZGV4KChpKSA9PiBpLmluc3RhbmNlSWQgPT09IG5ld0l0ZW0/Lmluc3RhbmNlSWQpO1xuICAgICAgICAgIGNvbnN0IG5ld0l0ZW1zID0gWy4uLml0ZW0uaXRlbXNdO1xuICAgICAgICAgIGlmIChuZXdJdGVtKSB7XG4gICAgICAgICAgICBuZXdJdGVtcy5zcGxpY2UoaW5kZXgsIDEsIG5ld0l0ZW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geyAuLi5pdGVtLCBpdGVtczogbmV3SXRlbXMgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgIH0gZWxzZSBpZiAoaXNSZXBlYXRhYmxlSXRlbShpdGVtKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgaXRlbXM6IGNoYW5nZS5hY3Rpb25UeXBlID09PSAnQUREJyA/IGl0ZW0uaXRlbXMuY29uY2F0KG5ld0l0ZW0gfHwgW10pIDogaXRlbS5pdGVtcy5maWx0ZXIoKGkpID0+IGkuaW5zdGFuY2VJZCAhPT0gY2hhbmdlLmlkKSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc0Zvcm0oaXRlbSkgfHwgaXNTZWN0aW9uKGl0ZW0pIHx8IGlzUHJvZ3Jlc3NpdmVGb3JtU2VjdGlvbihpdGVtKSB8fCBpc0Zvcm1JdGVtR3JvdXBJbXBsKGl0ZW0pIHx8IGlzUmVwZWF0YWJsZUl0ZW0oaXRlbSkpIHtcbiAgICAgIGNvbnN0IGl0ZW1zID0gWy4uLml0ZW0uaXRlbXNdO1xuICAgICAgY29uc3QgaW5kZXhUb01vZGlmeSA9IGl0ZW0uaXRlbXMuZmluZEluZGV4KChpKSA9PiBpLmluc3RhbmNlSWQgPT09IGNoYW5nZS5wYXJlbnRJZHNbMF0pO1xuICAgICAgY29uc3QgaXRlbVRvTW9kaWZ5ID0gaXRlbS5pdGVtc1tpbmRleFRvTW9kaWZ5XSBhcyBQYXJlbnRJdGVtVW5pb247XG5cbiAgICAgIGl0ZW1zLnNwbGljZShcbiAgICAgICAgaW5kZXhUb01vZGlmeSxcbiAgICAgICAgMSxcbiAgICAgICAgdGhpcy5fbW9kaWZ5Rm9ybUl0ZW0oaXRlbVRvTW9kaWZ5LCB7IC4uLmNoYW5nZSwgcGFyZW50SWRzOiBjaGFuZ2UucGFyZW50SWRzLnNsaWNlKDEpIH0sIG5ld0l0ZW0pIGFzIEZvcm1JdGVtXG4gICAgICApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgaXRlbXMsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoaXNUYWJsZUl0ZW0oaXRlbSkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9tb2RpZnlUYWJsZUl0ZW0oaXRlbSBhcyBUYWJsZUl0ZW0sIGNoYW5nZSwgbmV3SXRlbSk7XG4gICAgfSBlbHNlIGlmIChpc09wdGlvbkl0ZW1JbXBsKGl0ZW0pIHx8IGlzT3B0aW9uR3JvdXBJdGVtSW1wbChpdGVtKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX21vZGlmeU9wdGlvbkl0ZW0oXG4gICAgICAgIGl0ZW0gYXMgT3B0aW9uSXRlbUltcGw8T3B0aW9uPHVua25vd24+LCB1bmtub3duPiB8IE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+PixcbiAgICAgICAgY2hhbmdlLFxuICAgICAgICBuZXdJdGVtXG4gICAgICApWzBdO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmF2ZXJzZXMgYW4gT3B0aW9uSXRlbU1hcCBvZiBhIEZvcm1JdGVtIHRvIGluc2VydCBvciByZW1vdmUgYSBkZXNpZ25hdGVkIEZvcm1JdGVtXG4gICAqIEBwYXJhbSBvcHRpb25JdGVtIEZvcm1JdGVtIHdpdGggYW4gb3B0aW9uSXRlbU1hcCwgZS5nLiBPcHRpb25JdGVtSW1wbCB8IE9wdGlvbkdyb3VwSXRlbUltcGxcbiAgICogQHBhcmFtIGNoYW5nZSBNdG5hV2ZGb3JtSXRlbUNoYW5nZSBmb3IgYWRkaW5nIG9yIHJlbW92aW5nIGEgRm9ybUl0ZW1cbiAgICogQHBhcmFtIG5ld0l0ZW0gRm9ybUl0ZW0gdG8gYmUgYWRkZWQgdG8gaXRzIHBhcmVudFxuICAgKiBAcmV0dXJucyBGb3JtSXRlbSB3aXRoIGFuIG9wdGlvbkl0ZW1NYXAgY29udGFpbmluZyBGb3JtSXRlbXNcbiAgICovXG4gIHByaXZhdGUgX21vZGlmeU9wdGlvbkl0ZW0oXG4gICAgb3B0aW9uSXRlbTogT3B0aW9uSXRlbUltcGw8T3B0aW9uPHVua25vd24+LCB1bmtub3duPiB8IE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+PixcbiAgICBjaGFuZ2U6IE10bmFXZkZvcm1JdGVtQ2hhbmdlLFxuICAgIG5ld0l0ZW0/OiBGb3JtSXRlbVxuICApOiBbT3B0aW9uSXRlbUltcGw8T3B0aW9uPHVua25vd24+LCB1bmtub3duPiB8IE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+PiwgYm9vbGVhbl0ge1xuICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuICAgIGNvbnN0IG9wdGlvbkl0ZW1NYXA6IHsgW2lkOiBzdHJpbmddOiBGb3JtSXRlbSB9ID0ge307XG4gICAgLy8gTG9vcCB0aHJvdWdoIHRoZSBtYXAgYW5kIHNldCB0aGUgaXRlbXMgdG8gYSBuZXcgbWFwXG4gICAgLy8gQ2hlY2sgaWYgYW55IEZvcm1JdGVtIGluIHRoZSBtYXAgbWF0Y2hlcyB0aGUgbmV4dCBwYXJlbnQgSURcbiAgICBmb3IgKGNvbnN0IGlkIGluIG9wdGlvbkl0ZW0ub3B0aW9uSXRlbU1hcCkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25JdGVtLm9wdGlvbkl0ZW1NYXAsIGlkKSkge1xuICAgICAgICAvLyBJZiBvbmUgbWF0Y2hlcywgbW9kaWZ5ICYgc2V0IGl0IG9uIHRoZSBuZXcgbWFwXG4gICAgICAgIGlmIChvcHRpb25JdGVtLm9wdGlvbkl0ZW1NYXBbaWRdLmluc3RhbmNlSWQgPT09IGNoYW5nZS5wYXJlbnRJZHNbMF0pIHtcbiAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgb3B0aW9uSXRlbU1hcFtpZF0gPSB0aGlzLl9tb2RpZnlGb3JtSXRlbShcbiAgICAgICAgICAgIG9wdGlvbkl0ZW0ub3B0aW9uSXRlbU1hcFtpZF0gYXMgUGFyZW50SXRlbVVuaW9uLFxuICAgICAgICAgICAgeyAuLi5jaGFuZ2UsIHBhcmVudElkczogY2hhbmdlLnBhcmVudElkcy5zbGljZSgxKSB9LFxuICAgICAgICAgICAgbmV3SXRlbVxuICAgICAgICAgICkgYXMgRm9ybUl0ZW07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3B0aW9uSXRlbU1hcFtpZF0gPSBvcHRpb25JdGVtLm9wdGlvbkl0ZW1NYXBbaWRdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIHJldHVybiB0aGUgaXRlbSB3aXRoIGl0cyBuZXcgb3B0aW9uSXRlbU1hcCwgJiB3aGV0aGVyIHdlIGZvdW5kIHRoZSBtYXRjaGluZyBpdGVtXG4gICAgcmV0dXJuIFt7IC4uLm9wdGlvbkl0ZW0sIG9wdGlvbkl0ZW1NYXAgfSwgZm91bmRdO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYXZlcnNlcyB0YWJsZSByb3dzIHRvIGluc2VydCBvciByZW1vdmUgYSBGb3JtSXRlbVxuICAgKiBAcGFyYW0gdGFibGVJdGVtIFRhYmxlSXRlbSB0byB0cmF2ZXJzZVxuICAgKiBAcGFyYW0gY2hhbmdlIE10bmFXZkZvcm1JdGVtQ2hhbmdlIGZvciBhZGRpbmcgb3IgcmVtb3ZpbmcgYSBGb3JtSXRlbVxuICAgKiBAcGFyYW0gbmV3SXRlbSBGb3JtSXRlbSB0byBiZSBhZGRlZCB0byBpdHMgcGFyZW50XG4gICAqIEByZXR1cm5zIFRhYmxlSXRlbSB3aXRoIGEgRm9ybUl0ZW0gYWRkZWQgb3IgcmVtb3ZlZFxuICAgKi9cbiAgcHJpdmF0ZSBfbW9kaWZ5VGFibGVJdGVtKHRhYmxlSXRlbTogVGFibGVJdGVtLCBjaGFuZ2U6IE10bmFXZkZvcm1JdGVtQ2hhbmdlLCBuZXdJdGVtPzogRm9ybUl0ZW0pOiBUYWJsZUl0ZW0ge1xuICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuICAgIC8vIE1hcCB0aGUgdGFibGUgcm93cyB0byBmaW5kIHRoZSBGb3JtSXRlbSB3aXRoIG1hdGNoaW5nIGluc3RhbmNlSWRcbiAgICBjb25zdCB0YWJsZVJvd3M6IFRhYmxlUm93SXRlbVtdID0gdGFibGVJdGVtLnRhYmxlUm93cy5tYXAoKHJvdzogVGFibGVSb3dJdGVtKSA9PiB7XG4gICAgICAvLyBJZiB0aGUgaXRlbSB3YXMgZm91bmQsIHNraXAgbWFwcGluZyBmdXJ0aGVyIHJvd3NcbiAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5yb3csXG4gICAgICAgICAgaXRlbXM6IHJvdy5pdGVtcy5tYXAoKHJvd0l0ZW06IEZvcm1JdGVtKSA9PiB7XG4gICAgICAgICAgICAvLyBJZiB3ZSBmb3VuZCB0aGUgbmV4dCBtYXRjaGluZyBGb3JtSXRlbSwgdG9nZ2xlICdmb3VuZCcsIGFuZCByZXR1cm4gdGhlIG1vZGlmaWVkIEZvcm1JdGVtXG4gICAgICAgICAgICBpZiAoISFyb3dJdGVtICYmIHJvd0l0ZW0uaW5zdGFuY2VJZCA9PT0gY2hhbmdlLnBhcmVudElkc1swXSkge1xuICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb2RpZnlGb3JtSXRlbShcbiAgICAgICAgICAgICAgICByb3dJdGVtIGFzIFBhcmVudEl0ZW1VbmlvbixcbiAgICAgICAgICAgICAgICB7IC4uLmNoYW5nZSwgcGFyZW50SWRzOiBjaGFuZ2UucGFyZW50SWRzLnNsaWNlKDEpIH0sXG4gICAgICAgICAgICAgICAgbmV3SXRlbVxuICAgICAgICAgICAgICApIGFzIEZvcm1JdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgdGhlIEZvcm1JdGVtIGluc3RhbmNlSWQgZG9lc24ndCBtYXRjaCwgYnV0IGl0IGhhcyBGb3JtSXRlbXMgaW4gaXRzICdvcHRpb25JdGVtTWFwJyxcbiAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgYSBtYXRjaGluZyBGb3JtSXRlbSBleGlzdHMgaW4gaXRzIG1hcFxuICAgICAgICAgICAgaWYgKCdvcHRpb25JdGVtTWFwJyBpbiByb3dJdGVtKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJldHVybmVkID0gdGhpcy5fbW9kaWZ5T3B0aW9uSXRlbShcbiAgICAgICAgICAgICAgICByb3dJdGVtIGFzIE9wdGlvbkl0ZW1JbXBsPE9wdGlvbjx1bmtub3duPiwgdW5rbm93bj4gfCBPcHRpb25Hcm91cEl0ZW1JbXBsPE9wdGlvbjx1bmtub3duPj4sXG4gICAgICAgICAgICAgICAgY2hhbmdlLFxuICAgICAgICAgICAgICAgIG5ld0l0ZW1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgZm91bmQgPSByZXR1cm5lZFsxXTtcbiAgICAgICAgICAgICAgcmV0dXJuIHJldHVybmVkWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJvd0l0ZW07XG4gICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gcm93O1xuICAgIH0pO1xuICAgIHJldHVybiB7IC4uLnRhYmxlSXRlbSwgdGFibGVSb3dzIH07XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBvciByZW1vdmVzIGluc3RhbmNlSWRzIGZyb20gdGhlICdpdGVtSWRzJyBpbiBhIEZvcm1JdGVtJ3MgY29uZGl0aW9uXG4gICAqIEBwYXJhbSBmb3JtIE10bmFGb3JtIHRvIHNlYXJjaCB0aHJvdWdoICYgcmVwbGFjZSBmb3JtaXRlbXMgd2l0aCB0aGUgbmV3IGNvbmRpdGlvblxuICAgKiBAcGFyYW0gY2hhbmdlIFRoZSBjaGFuZ2UgdGhhdCByZWNlbnRseSBvY2N1cnJlZCBpbiB0aGUgbXRuYUZvcm1cbiAgICovXG4gIHByaXZhdGUgX21vZGlmeUZvcm1JdGVtQ29uZGl0aW9ucyhmb3JtOiBGb3JtLCBjaGFuZ2U6IE10bmFXZkZvcm1JdGVtQ2hhbmdlKTogRm9ybSB7XG4gICAgbGV0IG5ld0Zvcm0gPSBmb3JtO1xuICAgIGlmIChjaGFuZ2UuY29uZGl0aW9uQ2hhbmdlcykge1xuICAgICAgY29uc3QgZm9ybUl0ZW1zOiB7IFtrZXk6IHN0cmluZ106IEZvcm1JdGVtIHwgQ29uZGl0aW9uYWxJdGVtIH0gPSB7fTtcbiAgICAgIGZvciAoY29uc3QgY2Mgb2YgY2hhbmdlLmNvbmRpdGlvbkNoYW5nZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCB0b2dnbGVkSWQgb2YgWy4uLmNjLmVuYWJsZWRJdGVtcywgLi4uY2MuZGlzYWJsZWRJdGVtc10pIHtcbiAgICAgICAgICBsZXQgZm9ybUl0ZW0gPSBmb3JtSXRlbXNbdG9nZ2xlZElkXTtcbiAgICAgICAgICBjb25zdCBmb3JtSXRlbUNvbXBvbmVudCA9IHRoaXMudWlTZXJ2aWNlLmdldEl0ZW0odG9nZ2xlZElkKTtcbiAgICAgICAgICBpZiAoIWZvcm1JdGVtICYmIGZvcm1JdGVtQ29tcG9uZW50Py5pdGVtKSB7XG4gICAgICAgICAgICBmb3JtSXRlbSA9IGZvcm1JdGVtQ29tcG9uZW50Py5pdGVtO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNDb25kaXRpb25hbEl0ZW0oZm9ybUl0ZW0pICYmIGZvcm1JdGVtLmNvbmRpdGlvbikge1xuICAgICAgICAgICAgY29uc3QgaXRlbUNvbmRpdGlvbkl0ZW1JZHMgPSBmb3JtSXRlbS5jb25kaXRpb24uaXRlbUlkcyB8fCBbXTtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1JZHMgPVxuICAgICAgICAgICAgICBjaGFuZ2UuYWN0aW9uVHlwZSA9PT0gJ0FERCdcbiAgICAgICAgICAgICAgICA/IFsuLi5pdGVtQ29uZGl0aW9uSXRlbUlkcywgY2MuZW5hYmxlcklkXVxuICAgICAgICAgICAgICAgIDogaXRlbUNvbmRpdGlvbkl0ZW1JZHMuZmlsdGVyKChpKSA9PiBpICE9PSBjYy5lbmFibGVySWQpO1xuXG4gICAgICAgICAgICBjb25zdCBuZXdJdGVtOiBDb25kaXRpb25hbEl0ZW0gPSB7IC4uLmZvcm1JdGVtLCBjb25kaXRpb246IHsgLi4uZm9ybUl0ZW0uY29uZGl0aW9uLCBpdGVtSWRzIH0gfTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0NoYW5nZSA9IG5ldyBNdG5hV2ZGb3JtSXRlbUNoYW5nZShuZXdJdGVtLmluc3RhbmNlSWQsIGZvcm1JdGVtQ29tcG9uZW50Py5wYXJlbnRJZHMgfHwgW10sICdSRVBMQUNFJyk7XG5cbiAgICAgICAgICAgIG5ld0Zvcm0gPSB0aGlzLl9tb2RpZnlGb3JtSXRlbShuZXdGb3JtLCBuZXdDaGFuZ2UsIG5ld0l0ZW0gYXMgRm9ybUl0ZW0gJiBDb25kaXRpb25hbEl0ZW0pIGFzIEZvcm07XG4gICAgICAgICAgICBmb3JtSXRlbXNbdG9nZ2xlZElkXSA9IG5ld0l0ZW07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2UuYWN0aW9uVHlwZSA9PT0gJ1JFTU9WRScpIHtcbiAgICAgICAgICB0aGlzLnVpU2VydmljZS50b2dnbGVGb3JtSXRlbXMoY2MuZW5hYmxlZEl0ZW1zLCBjYy5kaXNhYmxlZEl0ZW1zLCAhIWNjLmVuYWJsZSwgY2MuZW5hYmxlcklkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3Rm9ybTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSBtYXAgb2YgYWxsIGluc3RhbmNlSWRzIGluc2lkZSBhbiBpdGVtLiBDaGVja3MgJ2l0ZW1zJyAmICdvcHRpb25JdGVtTWFwJ1xuICAgKiBAcGFyYW0gaXRlbSBJdGVtIHRvIHJlY3Vyc2VcbiAgICogQHBhcmFtIGlkTWFwIG1hcCBvZiB0aGUgaXRlbSdzIGludGVybmFsIGluc3RhbmNlSWRzXG4gICAqL1xuICBwcml2YXRlIF9idWlsZEludGVybmFsSWRzTWFwKGl0ZW06IEZvcm1JdGVtLCBpZE1hcDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4pIHtcbiAgICBpZE1hcFtpdGVtLmluc3RhbmNlSWRdID0gdHJ1ZTtcbiAgICBpZiAoaXNUeXBlPHsgaXRlbXM6IEZvcm1JdGVtW10gfT4oaXRlbSwgJ2l0ZW1zJykpIHtcbiAgICAgIGNvbnN0IGl0ZW1zOiBGb3JtSXRlbVtdID0gaXRlbS5pdGVtcztcbiAgICAgIGZvciAoY29uc3Qgc3ViSXRlbSBvZiBpdGVtcykge1xuICAgICAgICB0aGlzLl9idWlsZEludGVybmFsSWRzTWFwKHN1Ykl0ZW0sIGlkTWFwKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzVHlwZTx7IG9wdGlvbkl0ZW1NYXA6IHsgW2lkOiBzdHJpbmddOiBGb3JtSXRlbSB9IH0+KGl0ZW0sICdvcHRpb25JdGVtTWFwJykpIHtcbiAgICAgIGNvbnN0IG1hcDogeyBbaWQ6IHN0cmluZ106IEZvcm1JdGVtIH0gPSBpdGVtLm9wdGlvbkl0ZW1NYXA7XG4gICAgICBmb3IgKGNvbnN0IGlkIGluIG1hcCkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1hcCwgaWQpKSB7XG4gICAgICAgICAgdGhpcy5fYnVpbGRJbnRlcm5hbElkc01hcChtYXBbaWRdLCBpZE1hcCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGFuIGFycmF5IG9mIENvbmRpdGlvbkNoYW5nZXMgdG8gYmUgaW1wbGVtZW50ZWQgaW4gYW4gTXRuYUZvcm0uXG4gICAqIEBwYXJhbSBpdGVtIEZvcm1JdGVtIHRoYXQgd2FzIGFkZGVkL3JlbW92ZWQsIHdoaWNoIGFmZmVjdHMgY29uZGl0aW9ucyBvZiBvdGhlciBGb3JtSXRlbXNcbiAgICogQHBhcmFtIGNoYW5nZXMgQXJyYXkgdG8gYnVpbGQgdXBcbiAgICogQHBhcmFtIGludGVybmFsSWRNYXAgTWFwIG9mIGFsbCBpbnN0YW5jZUlkcyBsb2NhdGVkIGluIHRoZSBpdGVtOyBpbiBvcmRlciB0byBleGNsdWRlIHRoZW0gZnJvbSB0aGUgY29uZGl0aW9uIGNoYW5nZXNcbiAgICogQHBhcmFtIGFjdGlvbiBXaGV0aGVyIHRoZSBpdGVtIHdhcyBhZGRlZCBvciByZW1vdmVkXG4gICAqL1xuICBwcml2YXRlIF9idWlsZENvbmRpdGlvbkNoYW5nZUFycmF5KFxuICAgIGl0ZW06IEZvcm1JdGVtLFxuICAgIGNoYW5nZXM6IEFycmF5PENvbmRpdGlvbkNoYW5nZT4sXG4gICAgaW50ZXJuYWxJZE1hcDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4sXG4gICAgYWN0aW9uPzogTXRuYVdmRm9ybUl0ZW1DaGFuZ2VBY3Rpb25cbiAgKSB7XG4gICAgaWYgKGlzT3B0aW9uSXRlbUltcGwoaXRlbSkpIHtcbiAgICAgIGNvbnN0IGVuYWJsZSA9ICEhYWN0aW9uICYmIGFjdGlvbiA9PT0gJ0FERCcgPyBpdGVtLm9wdGlvbi5zZWxlY3RlZCB8fCBpdGVtLnZhbHVlID09PSBpdGVtLm9wdGlvbi5vcHRpb24uaWQgOiBmYWxzZTtcbiAgICAgIHRoaXMuX3B1c2hDb25kaXRpb25Ub0FycmF5KGl0ZW0uaW5zdGFuY2VJZCwgaXRlbS5vcHRpb24uZW5hYmxlZEl0ZW1zLCBpdGVtLm9wdGlvbi5kaXNhYmxlZEl0ZW1zLCBjaGFuZ2VzLCBpbnRlcm5hbElkTWFwLCBlbmFibGUpO1xuICAgICAgdGhpcy5fYnVpbGRBcnJheUZyb21PcHRpb25JdGVtTWFwKGl0ZW0sIGNoYW5nZXMsIGludGVybmFsSWRNYXApO1xuICAgIH0gZWxzZSBpZiAoaXNPcHRpb25Hcm91cEl0ZW1JbXBsKGl0ZW0pKSB7XG4gICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBpdGVtLm9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZW5hYmxlID1cbiAgICAgICAgICAhIWFjdGlvbiAmJiBhY3Rpb24gPT09ICdBREQnID8gb3B0aW9uLnNlbGVjdGVkIHx8ICghIWl0ZW0udmFsdWUgJiYgaXRlbS52YWx1ZS5zb21lKCh2KSA9PiB2ID09PSBvcHRpb24ub3B0aW9uLmlkKSkgOiBmYWxzZTtcbiAgICAgICAgdGhpcy5fcHVzaENvbmRpdGlvblRvQXJyYXkoaXRlbS5pbnN0YW5jZUlkLCBvcHRpb24uZW5hYmxlZEl0ZW1zLCBvcHRpb24uZGlzYWJsZWRJdGVtcywgY2hhbmdlcywgaW50ZXJuYWxJZE1hcCwgZW5hYmxlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2J1aWxkQXJyYXlGcm9tT3B0aW9uSXRlbU1hcChpdGVtLCBjaGFuZ2VzLCBpbnRlcm5hbElkTWFwLCBhY3Rpb24pO1xuICAgIH0gZWxzZSBpZiAoaXNUeXBlPHsgaXRlbXM6IEZvcm1JdGVtW10gfT4oaXRlbSwgJ2l0ZW1zJykpIHtcbiAgICAgIGNvbnN0IGl0ZW1zOiBGb3JtSXRlbVtdID0gaXRlbS5pdGVtcztcbiAgICAgIGZvciAoY29uc3Qgc3ViSXRlbSBvZiBpdGVtcykge1xuICAgICAgICB0aGlzLl9idWlsZENvbmRpdGlvbkNoYW5nZUFycmF5KHN1Ykl0ZW0sIGNoYW5nZXMsIGludGVybmFsSWRNYXAsIGFjdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBhbiBhcnJheSBvZiBDb25kaXRpb25DaGFuZ2VzIGZyb20gYW4gaXRlbSdzIG9wdGlvbkl0ZW1NYXBcbiAgICogQHBhcmFtIGl0ZW0gRm9ybUl0ZW0gd2l0aCBhbiBvcHRpb25JdGVtTWFwXG4gICAqIEBwYXJhbSBjb25kaXRpb25zIEFycmF5IG9mIENvbmRpdGlvbkNoYW5nZXMgdG8gcHVzaCBvbiBuZXcgY2hhbmdlc1xuICAgKiBAcGFyYW0gaXRlbU1hcCBtYXAgb2YgaW5zdGFuY2VJZHMgZXhpc2l0aW5nIGluIGFuIGl0ZW07IGluIG9yZGVyIHRvIGV4Y2x1ZGUgdGhlbSBmcm9tIHRoZSBjaGFuZ2VzXG4gICAqIEBwYXJhbSBhY3Rpb24gV2hldGhlciBhbiBpdGVtIHdhcyBhZGRlZCBvciByZW1vdmVkXG4gICAqL1xuICBwcml2YXRlIF9idWlsZEFycmF5RnJvbU9wdGlvbkl0ZW1NYXAoXG4gICAgaXRlbTogT3B0aW9uSXRlbUltcGw8T3B0aW9uPHVua25vd24+LCB1bmtub3duPiB8IE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+PixcbiAgICBjb25kaXRpb25zOiBBcnJheTxDb25kaXRpb25DaGFuZ2U+LFxuICAgIGl0ZW1NYXA6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+LFxuICAgIGFjdGlvbj86IE10bmFXZkZvcm1JdGVtQ2hhbmdlQWN0aW9uXG4gICkge1xuICAgIGlmIChpdGVtLm9wdGlvbkl0ZW1NYXApIHtcbiAgICAgIGZvciAoY29uc3QgaWQgaW4gaXRlbS5vcHRpb25JdGVtTWFwKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaXRlbS5vcHRpb25JdGVtTWFwLCBpZCkpIHtcbiAgICAgICAgICBjb25zdCBzdWJJdGVtID0gaXRlbS5vcHRpb25JdGVtTWFwW2lkXTtcbiAgICAgICAgICB0aGlzLl9idWlsZENvbmRpdGlvbkNoYW5nZUFycmF5KHN1Ykl0ZW0sIGNvbmRpdGlvbnMsIGl0ZW1NYXAsIGFjdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHVzaGVzIGEgbmV3IENvbmRpdGlvbkNoYW5nZSBvbnRvIHRoZSBjb25kaXRpb25zIGFycmF5LiBJZiBhIENvbmRpdGlvbkNoYW5nZSB3aXRoIG1hdGNoaW5nIGlkIGV4aXN0cyxcbiAgICogaXQgbWVyZ2VzIHRoZSBuZXcgdmFsdWVzIGludG8gaXRcbiAgICogQHBhcmFtIGVuYWJsZXJJZCBpbnN0YW5jZUlkIG9mIHRoZSBpdGVtIHRoYXQgZW5hYmxlcyBvdGhlciBGb3JtSXRlbXNcbiAgICogQHBhcmFtIGVuYWJsZWQgdGhlIGl0ZW0ncyAnZW5hYmxlZEl0ZW1zJyBhcnJheVxuICAgKiBAcGFyYW0gZGlzYWJsZWQgdGhlIGl0ZW0ncyAnZGlzYWJsZWRJdGVtcycgYXJyYXlcbiAgICogQHBhcmFtIGNvbmRpdGlvbnMgQXJyYXkgb2YgQ29uZGl0aW9uQ2hhbmdlcyB0byBidWlsZCB1cFxuICAgKiBAcGFyYW0gaXRlbU1hcCBtYXAgb2YgaW5zdGFuY2VJZHMgaW5zaWRlIGFuIGl0ZW07IHRvIGVuc3VyZSBubyBpbnRlcm5hbCBpZHMgYXJlIGluY2x1ZGVkIGluIGEgY2hhbmdlXG4gICAqIEBwYXJhbSBlbmFibGUgV2hldGhlciB0aGUgJ2VuYWJsZWRJdGVtcycgc2hvdWxkIHRvZ2dsZWQgZW5hYmxlZFxuICAgKi9cbiAgcHJpdmF0ZSBfcHVzaENvbmRpdGlvblRvQXJyYXkoXG4gICAgZW5hYmxlcklkOiBzdHJpbmcsXG4gICAgZW5hYmxlZDogc3RyaW5nW10sXG4gICAgZGlzYWJsZWQ6IHN0cmluZ1tdLFxuICAgIGNvbmRpdGlvbnM6IEFycmF5PENvbmRpdGlvbkNoYW5nZT4sXG4gICAgaXRlbU1hcDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4sXG4gICAgZW5hYmxlOiBib29sZWFuXG4gICkge1xuICAgIGNvbnN0IGVuYWJsZWRJdGVtcyA9IGVuYWJsZWQuZmlsdGVyKChlKSA9PiAhaXRlbU1hcFtlXSk7XG4gICAgY29uc3QgZGlzYWJsZWRJdGVtcyA9IGRpc2FibGVkLmZpbHRlcigoZCkgPT4gIWl0ZW1NYXBbZF0pO1xuICAgIGlmICghIWVuYWJsZWRJdGVtcy5sZW5ndGggfHwgISFkaXNhYmxlZEl0ZW1zLmxlbmd0aCkge1xuICAgICAgY29uc3QgaW5kZXggPSBjb25kaXRpb25zLmZpbmRJbmRleCgoYykgPT4gYy5lbmFibGVySWQgPT09IGVuYWJsZXJJZCk7XG4gICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgIGNvbmRpdGlvbnMucHVzaCh7IGVuYWJsZXJJZDogZW5hYmxlcklkLCBlbmFibGVkSXRlbXMsIGRpc2FibGVkSXRlbXMsIGVuYWJsZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHByZXYgPSBjb25kaXRpb25zW2luZGV4XTtcbiAgICAgICAgY29uc3QgbmV3SWQ6IENvbmRpdGlvbkNoYW5nZSA9IHtcbiAgICAgICAgICBlbmFibGVySWQsXG4gICAgICAgICAgZW5hYmxlZEl0ZW1zOiBbLi4ucHJldi5lbmFibGVkSXRlbXMsIC4uLmVuYWJsZWRJdGVtc10sXG4gICAgICAgICAgZGlzYWJsZWRJdGVtczogWy4uLnByZXYuZGlzYWJsZWRJdGVtcywgLi4uZGlzYWJsZWRJdGVtc10sXG4gICAgICAgICAgZW5hYmxlLFxuICAgICAgICB9O1xuICAgICAgICBjb25kaXRpb25zLnNwbGljZShpbmRleCwgMSwgbmV3SWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9yZSBhbGwgdmFsaWRhdGlvbiBlcnJvcnMgb24gdGhlIHNlcnZpY2UuXG4gICAqIFJldmFsaWRhdGUgZm9ybSBjb250cm9scyB0aGF0IHByZXZpb3VzbHkgaGFkIGVycm9ycyBvciBoYXZlIG5ldyBlcnJvcnMgbm93LlxuICAgKi9cbiAgcHJpdmF0ZSBfdXBkYXRlU2VydmVyU2lkZUVycm9ycygpIHtcbiAgICAvLyBLZWVwIHRyYWNrIG9mIElEcyBmb3IgZWFjaCBjb250cm9sIHRoYXQgbmVlZHMgdG8gYmUgcmV2YWxpZGF0ZWRcbiAgICBjb25zdCBjb250cm9sSWRzVG9SZXZhbGlkYXRlID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAvLyBDb2xsZWN0IGNvbnRyb2xzIHByZXZpb3VzbHkgaW4gZXJyb3IgdG8gcmV2YWxpZGF0ZVxuICAgIGlmICh0aGlzLl9mb3JtSXRlbVZhbGlkYXRpb25SZXN1bHRzKSB7XG4gICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuX2Zvcm1JdGVtVmFsaWRhdGlvblJlc3VsdHMpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLl9mb3JtSXRlbVZhbGlkYXRpb25SZXN1bHRzLCBpZCkpIHtcbiAgICAgICAgICBjb250cm9sSWRzVG9SZXZhbGlkYXRlLmFkZChpZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDbGVhciBvdXQgYWxsIHByZXZpb3VzIHN0b3JlZCBlcnJvcnNcbiAgICB0aGlzLl9mb3JtSXRlbVZhbGlkYXRpb25SZXN1bHRzID0ge307XG4gICAgaWYgKHRoaXMuX210bmFGb3JtPy52YWxpZGF0aW9uUmVzdWx0KSB7XG4gICAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiB0aGlzLl9tdG5hRm9ybS52YWxpZGF0aW9uUmVzdWx0LmZvcm1JdGVtVmFsaWRhdGlvblJlc3VsdHMpIHtcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uU3RhdHVzID09PSAnRVJST1JTJykge1xuICAgICAgICAgIC8vIFN0b3JlIGVycm9ycyBzbyB0aGF0IHRoZSB2YWxpZGF0aW9uUmVzdWx0VmFsaWRhdG9yIGNhbiB2YWxpZGF0ZSBlYWNoIGNvbnRyb2xcbiAgICAgICAgICB0aGlzLl9mb3JtSXRlbVZhbGlkYXRpb25SZXN1bHRzW3Jlc3VsdC5pZF0gPSByZXN1bHQ7XG4gICAgICAgICAgLy8gV2UgbmVlZCB0byByZXZhbGlkYXRlIHRoZXNlIGNvbnRyb2xzIHRoYXQgaGF2ZSBlcnJvcnNcbiAgICAgICAgICBjb250cm9sSWRzVG9SZXZhbGlkYXRlLmFkZChyZXN1bHQuaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gT25seSByZXZhbGlkYXRlIGNvbnRyb2xzIGFjdHVhbGx5IGNoYW5nZXNcbiAgICBjb25zdCBmb3JtID0gdGhpcy5uZ0Zvcm1TZXJ2aWNlLmdldEZvcm0oKTtcbiAgICBpZiAoZm9ybSkge1xuICAgICAgZm9yIChjb25zdCBpZCBvZiBjb250cm9sSWRzVG9SZXZhbGlkYXRlKSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSBmaW5kRm9ybUNvbnRyb2woaWQsIGZvcm0pO1xuICAgICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG59XG4iXX0=
476
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1tYW5hZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93ZWItZm9ybS1hbmd1bGFyL3NyYy9saWIvc2VydmljZXMvZm9ybS1tYW5hZ2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBUSxNQUFNLGVBQWUsQ0FBQztBQUVqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFRTCxpQkFBaUIsRUFDakIsTUFBTSxFQUNOLG1CQUFtQixFQUNuQixxQkFBcUIsRUFDckIsZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsV0FBVyxFQUNYLG9CQUFvQixHQVdyQixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3RDLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7O0FBaUJqRTs7Ozs7R0FLRztBQUVILE1BQU0sT0FBTyxvQkFBb0I7SUFvQi9CLFlBQXNCLFVBQTRCLEVBQVksYUFBa0MsRUFBWSxTQUEwQjtRQUFoSCxlQUFVLEdBQVYsVUFBVSxDQUFrQjtRQUFZLGtCQUFhLEdBQWIsYUFBYSxDQUFxQjtRQUFZLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBbkI1SCxlQUFVLEdBQUcsSUFBSSxHQUFHLEVBQThCLENBQUM7UUFDbkQsZ0JBQVcsR0FBRyxJQUFJLE9BQU8sRUFBMEIsQ0FBQztRQUNwRCwyQkFBc0IsR0FBRyxJQUFJLE9BQU8sRUFBbUIsQ0FBQztRQUNsRSxnRUFBZ0U7UUFDdEQsK0JBQTBCLEdBQTZDLEVBQUUsQ0FBQztRQStLcEY7Ozs7Ozs7V0FPRztRQUNPLDJCQUFzQixHQUFnQyxH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QUksQ0FBQywwQkFBMEIsR0FBRyxFQUFFLENBQUM7UUFDckMsSUFBSSxNQUFBLElBQUksQ0FBQyxTQUFTLDBDQUFFLGdCQUFnQixFQUFFO1lBQ3BDLEtBQUssTUFBTSxNQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyx5QkFBeUIsRUFBRTtnQkFDOUUsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLEtBQUssUUFBUSxFQUFFO29CQUN4QywrRUFBK0U7b0JBQy9FLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDO29CQUNwRCx3REFBd0Q7b0JBQ3hELHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ3ZDO2FBQ0Y7U0FDRjtRQUVELDRDQUE0QztRQUM1QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzFDLElBQUksSUFBSSxFQUFFO1lBQ1IsS0FBSyxNQUFNLEVBQUUsSUFBSSxzQkFBc0IsRUFBRTtnQkFDdkMsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxPQUFPLEVBQUU7b0JBQ1gsT0FBTyxDQUFDLHNCQUFzQixFQUFFLENBQUM7aUJBQ2xDO2FBQ0Y7U0FDRjtJQUNILENBQUM7O2tIQTVqQlUsb0JBQW9CO3NIQUFwQixvQkFBb0I7NEZBQXBCLG9CQUFvQjtrQkFEaEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGlzVHlwZSB9IGZyb20gJ0BtdG5hL2NvcmUtdHMnO1xuaW1wb3J0IHtcbiAgQ29uZGl0aW9uYWxJdGVtLFxuICBDb25kaXRpb25DaGFuZ2UsXG4gIEZvcm0sXG4gIEZvcm1JdGVtLFxuICBGb3JtSXRlbUdyb3VwLFxuICBGb3JtSXRlbUltcGwsXG4gIEZvcm1JdGVtVmFsaWRhdGlvblJlc3VsdCxcbiAgaXNDb25kaXRpb25hbEl0ZW0sXG4gIGlzRm9ybSxcbiAgaXNGb3JtSXRlbUdyb3VwSW1wbCxcbiAgaXNPcHRpb25Hcm91cEl0ZW1JbXBsLFxuICBpc09wdGlvbkl0ZW1JbXBsLFxuICBpc1JlcGVhdGFibGVJdGVtLFxuICBpc1NlY3Rpb24sXG4gIGlzVGFibGVJdGVtLFxuICBNdG5hV2ZGb3JtSXRlbUNoYW5nZSxcbiAgTXRuYVdmRm9ybUl0ZW1DaGFuZ2VBY3Rpb24sXG4gIE9wdGlvbixcbiAgT3B0aW9uR3JvdXBJdGVtSW1wbCxcbiAgT3B0aW9uSXRlbUltcGwsXG4gIFByb2dyZXNzaXZlRm9ybSxcbiAgUmVwZWF0YWJsZUl0ZW0sXG4gIFNlY3Rpb24sXG4gIFRhYmxlSXRlbSxcbiAgVGFibGVSb3dJdGVtLFxuICBWYWx1ZUl0ZW0sXG59IGZyb20gJ0BtdG5hL3dlYi1mb3JtLXRzJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEJhc2VGb3JtSXRlbSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBmaW5kRm9ybUNvbnRyb2wsIE10bmFXZlNlcmlhbGl6ZXIgfSBmcm9tICcuLi91dGlsaXRpZXMnO1xuaW1wb3J0IHsgTXRuYVdmQXBpU2VydmljZSB9IGZyb20gJy4vYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgTXRuYVdmTmdGb3JtU2VydmljZSB9IGZyb20gJy4vbmctZm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7IE10bmFXZlVJU2VydmljZSB9IGZyb20gJy4vdWkuc2VydmljZSc7XG5cbi8qKlxuICogdHlwZXMgb2YgRm9ybUl0ZW1zIHRoYXQgY2FuIGJlIHBhc3NlZCBpbnRvIHRoZSAnbW9kaWZ5TXRuYUZvcm1JdGVtJyBtZXRob2QgdG8gYWRkL3JlbW92ZSBpdGVtc1xuICovXG50eXBlIFBhcmVudEl0ZW1VbmlvbiA9XG4gIHwgRm9ybVxuICB8IFNlY3Rpb25cbiAgfCBGb3JtSXRlbUdyb3VwXG4gIHwgUmVwZWF0YWJsZUl0ZW1cbiAgfCBUYWJsZUl0ZW1cbiAgfCBPcHRpb25JdGVtSW1wbDxPcHRpb248dW5rbm93bj4sIHVua25vd24+XG4gIHwgT3B0aW9uR3JvdXBJdGVtSW1wbDxPcHRpb248dW5rbm93bj4+O1xuXG4vKipcbiAqIEFsbG93cyBhIGNhbGxlciB0byAoZGUpc2VyaWFsaXphZSBhbiBNdG5hRm9ybS4gSXQgY29udGFpbnMgdGhlIGRldGVybWluaW5nIGxvZ2ljIGZvciByZXR1cm5pbmcgc3BlY2lmaWMgZm9ybSBjb250cm9sc1xuICogYW5kIGRlc2VyaWFsaXppbmcgbmV3IE10bmFGb3JtcyBmcm9tIHRoZSByZWFjdGl2ZSB2YWx1ZXMsIGFzIHdlbGwgYXMgcmVnaXN0ZXJpbmcgY3VzdG9tIEZvcm0gSXRlbXMgJiBmdW5jdGlvbnMuXG4gKlxuICogQGV4cG9ydFxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTXRuYVdmTWFuYWdlclNlcnZpY2Uge1xuICBwcm90ZWN0ZWQgY29tcG9uZW50cyA9IG5ldyBNYXA8c3RyaW5nLCBUeXBlPEJhc2VGb3JtSXRlbT4+KCk7XG4gIHByb3RlY3RlZCBmb3JtQ2hhbmdlJCA9IG5ldyBTdWJqZWN0PEZvcm0gfCBQcm9ncmVzc2l2ZUZvcm0+KCk7XG4gIHByb3RlY3RlZCBwcm9ncmVzc2l2ZUZvcm1DaGFuZ2UkID0gbmV3IFN1YmplY3Q8UHJvZ3Jlc3NpdmVGb3JtPigpO1xuICAvKiogQSBtYXAgb2YgYWxsIHtAbGluayBGb3JtSXRlbVZhbGlkYXRpb25SZXN1bHR9IGtleWVkIG9uIGlkICovXG4gIHByb3RlY3RlZCBfZm9ybUl0ZW1WYWxpZGF0aW9uUmVzdWx0czogUmVjb3JkPHN0cmluZywgRm9ybUl0ZW1WYWxpZGF0aW9uUmVzdWx0PiA9IHt9O1xuICAvKiogQ29uZGl0aW9uQ2hhbmdlcyBvbiAnYWRkJyBtdXN0IHdhaXQgdW50aWwgdGhlIGZvcm0gcmVyZW5kZXJzIHRvIHRvZ2dsZSBpdGVtcyAqL1xuICBwcm90ZWN0ZWQgaXRlbVRvZ2dsZVF1ZTogQXJyYXk8Q29uZGl0aW9uQ2hhbmdlPiB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCBfbXRuYUZvcm06IEZvcm0gfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCBfbXRuYVByb2dyZXNzaXZlRm9ybTogUHJvZ3Jlc3NpdmVGb3JtIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIHN0cmVhbSBvZiBNdG5hRm9ybSBjaGFuZ2VzLiBVc2VkIHRvIGluZm9ybSBhIHN1YnNjcmliZXIgdGhhdCBhbiBNdG5hRm9ybSBoYXMgYmVlbiBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPE10bmFGb3JtPiB0byB3aGljaCBhIGNhbGxlciBjYW4gc3Vic2NyaWJlXG4gICAqL1xuICBnZXQgZm9ybUNoYW5nZXMoKTogT2JzZXJ2YWJsZTxGb3JtPiB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUNoYW5nZSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgYXBpU2VydmljZTogTXRuYVdmQXBpU2VydmljZSwgcHJvdGVjdGVkIG5nRm9ybVNlcnZpY2U6IE10bmFXZk5nRm9ybVNlcnZpY2UsIHByb3RlY3RlZCB1aVNlcnZpY2U6IE10bmFXZlVJU2VydmljZSkge31cblxuICAvKipcbiAgICogQWRkcyBvciByZW1vdmVzIGEgRm9ybUl0ZW0gZnJvbSB0aGUgZm9ybSAmIG1vZGlmaWVzIG90aGVyIGFmZmVjdGVkIEZvcm1JdGVtc1xuICAgKiBAcGFyYW0gY2hhbmdlIE10bmFXZkZvcm1JdGVtQ2hhbmdlXG4gICAqL1xuICBjaGFuZ2VNdG5hRm9ybUl0ZW0oY2hhbmdlOiBNdG5hV2ZGb3JtSXRlbUNoYW5nZSkge1xuICAgIGlmICghdGhpcy5fbXRuYUZvcm0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlLmFjdGlvblR5cGUgPT09ICdSRU1PVkUnKSB7XG4gICAgICAvLyByZW1vdmUgdGhlIHJlcGVhdGFibGUgaXRlbSBmcm9tIHRoZSBtdG5hZm9ybVxuICAgICAgbGV0IG5ld0Zvcm0gPSB0aGlzLl9tb2RpZnlGb3JtSXRlbSh0aGlzLl9tdG5hRm9ybSwgY2hhbmdlKSBhcyBGb3JtO1xuICAgICAgLy8gbW9kaWZ5IHRoZSBjb25kaXRpb25zIG9mIGFsbCBlZmZlY3RlZCBmb3JtIGl0ZW1zXG4gICAgICBuZXdGb3JtID0gdGhpcy5fbW9kaWZ5Rm9ybUl0ZW1Db25kaXRpb25zKG5ld0Zvcm0sIGNoYW5nZSk7XG5cbiAgICAgIHRoaXMubmdGb3JtU2VydmljZS5yZW1vdmVDb250cm9sKGNoYW5nZS5pZCwgY2hhbmdlLnBhcmVudElkcyk7XG4gICAgICB0aGlzLmZvcm1DaGFuZ2UkLm5leHQobmV3Rm9ybSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXBpU2VydmljZVxuICAgICAgICAuZ2V0UmVwZWF0YWJsZUl0ZW0odGhpcy5fbXRuYUZvcm0uaW5zdGFuY2VJZCwgY2hhbmdlLmlkKVxuICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAuc3Vic2NyaWJlKChuZXdJdGVtOiBGb3JtSXRlbUltcGw8dW5rbm93bj4pID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdGb3JtQ29udHJvbCA9IHRoaXMuc2VyaWFsaXplTXRuYUZvcm1JdGVtKG5ld0l0ZW0pO1xuICAgICAgICAgIGlmIChuZXdGb3JtQ29udHJvbCAmJiB0aGlzLl9tdG5hRm9ybSkge1xuICAgICAgICAgICAgdGhpcy5uZ0Zvcm1TZXJ2aWNlLmFkZENvbnRyb2wobmV3SXRlbS5pbnN0YW5jZUlkLCBjaGFuZ2UucGFyZW50SWRzLCBuZXdGb3JtQ29udHJvbCk7XG4gICAgICAgICAgICAvLyBBZGQgdGhlIG5ldyByZXBlYXRhYmxlIGl0ZW0gaW50byB0aGUgbXRuYWZvcm1cbiAgICAgICAgICAgIGxldCBuZXdGb3JtID0gdGhpcy5fbW9kaWZ5Rm9ybUl0ZW0oXG4gICAgICAgICAgICAgIHRoaXMuX210bmFGb3JtLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLi4uY2hhbmdlLFxuICAgICAgICAgICAgICAgIGlkOiBuZXdJdGVtLmluc3RhbmNlSWQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG5ld0l0ZW1cbiAgICAgICAgICAgICkgYXMgRm9ybTtcblxuICAgICAgICAgICAgLy8gR2VuZXJhdGUgYSBsaXN0IG9mIGFsbCBmb3JtaXRlbSBjb25kaXRpb25zIG5lZWRpbmcgY2hhbmdlICYgbW9kaWZ5IHRob3NlIGl0ZW1zIGluIHRoZSBmb3JtXG4gICAgICAgICAgICBjb25zdCBjb25kaXRpb25DaGFuZ2VzID0gdGhpcy5nZW5lcmF0ZUNvbmRpdGlvbkNoYW5nZUFycmF5KG5ld0l0ZW0sICdBREQnKTtcbiAgICAgICAgICAgIG5ld0Zvcm0gPSB0aGlzLl9tb2RpZnlGb3JtSXRlbUNvbmRpdGlvbnMobmV3Rm9ybSwgeyAuLi5jaGFuZ2UsIGNvbmRpdGlvbkNoYW5nZXMgfSk7XG4gICAgICAgICAgICB0aGlzLml0ZW1Ub2dnbGVRdWUgPSBjb25kaXRpb25DaGFuZ2VzO1xuICAgICAgICAgICAgLy8gZW1pdCB0aGUgbmV3IG10bmFmb3JtXG4gICAgICAgICAgICB0aGlzLmZvcm1DaGFuZ2UkLm5leHQobmV3Rm9ybSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIENvbmRpdGlvbkNoYW5nZSBhcnJheSBmb3IgaXRlbXMgZXhpc3RpbmcgaW4gdGhlIDxpdGVtPiB3aGljaCBlbmFibGUvZGlzYWJsZSBGb3JtSXRlbXMgb3V0c2lkZSB0aGUgPGl0ZW0+J3Mgc2NvcGUuXG4gICAqIEBwYXJhbSBpdGVtIEZvcm1JdGVtIHRoYXQgZWZmZWN0cyB0aGUgY29uZGl0aW9uIG9mIG90aGVyIEZvcm1JdGVtc1xuICAgKiBAcGFyYW0gYWN0aW9uIFdoZXRoZXIgdGhpcyBpdGVtIHdhcyBhZGRlZCAoQUREKSwgb3IgcmVtb3ZlZCAoUkVNT1ZFKVxuICAgKiBAcmV0dXJucyBBcnJheTxDb25kaXRpb25DaGFuZ2U+XG4gICAqL1xuICBnZW5lcmF0ZUNvbmRpdGlvbkNoYW5nZUFycmF5KGl0ZW06IEZvcm1JdGVtLCBhY3Rpb24/OiBNdG5hV2ZGb3JtSXRlbUNoYW5nZUFjdGlvbik6IEFycmF5PENvbmRpdGlvbkNoYW5nZT4ge1xuICAgIGNvbnN0IGludGVybmFsTWFwID0ge307XG4gICAgdGhpcy5fYnVpbGRJbnRlcm5hbElkc01hcChpdGVtLCBpbnRlcm5hbE1hcCk7XG4gICAgY29uc3QgY29uZGl0aW9uQ2hhbmdlcyA9IG5ldyBBcnJheTxDb25kaXRpb25DaGFuZ2U+KCk7XG4gICAgdGhpcy5fYnVpbGRDb25kaXRpb25DaGFuZ2VBcnJheShpdGVtLCBjb25kaXRpb25DaGFuZ2VzLCBpbnRlcm5hbE1hcCwgYWN0aW9uKTtcbiAgICByZXR1cm4gY29uZGl0aW9uQ2hhbmdlcztcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyBUaGUgdG9wIGxldmVsIHZhbGlkYXRpb24gcmVzdWx0cyAodXN1YWxseSB0aGUgZXJyb3JzKSwga2V5ZWQgb24gSUQuICovXG4gIGdldEZvcm1JdGVtVmFsaWRhdGlvblJlc3VsdHMoKTogUmVjb3JkPHN0cmluZywgRm9ybUl0ZW1WYWxpZGF0aW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1JdGVtVmFsaWRhdGlvblJlc3VsdHM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIG5ldyBNdG5hRm9ybSB1c2luZyB0aGUgTXRuYUZvcm0gJiByZWFjaXZlIGZvcm0gdmFsdWVzIGZyb20gdGhlIE10bmFXZk5nRm9ybVNlcnZpY2UncyBpbnRlcm5hbCBmb3JtLlxuICAgKlxuICAgKiBAcGFyYW0gbmdGb3JtVmFsdWVzIEpTT04gb2JqZWN0IG9mIG5nRm9ybVZhbHVlc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgdXBkYXRlRm9ybShuZ0Zvcm1WYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogRm9ybSB7XG4gICAgY29uc3QgY3VycmVudEZvcm0gPSB0aGlzLm5nRm9ybVNlcnZpY2UuZ2V0Rm9ybVZhbHVlKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmN1cnJlbnRGb3JtLFxuICAgICAgaXRlbXM6IE10bmFXZlNlcmlhbGl6ZXIuaW5zZXJ0Rm9ybUl0ZW1WYWx1ZXMoXG4gICAgICAgIGN1cnJlbnRGb3JtLFxuICAgICAgICBuZ0Zvcm1WYWx1ZXMsXG4gICAgICAgIHRoaXMudWlTZXJ2aWNlLmdldERpc2FibGVkU3RhdGVzKCksXG4gICAgICAgIHRoaXMuZHluYW1pY0Zvcm1Db25kaXRpb25hbCxcbiAgICAgICAgdGhpcy5keW5hbWljV2ViRm9ybUl0ZW1CdWlsZGVyXG4gICAgICApLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIG5ldyBNdG5hRm9ybSB1c2luZyB0aGUgcHJldmlvdXMgTXRuYUZvcm0gJiByZWFjdGl2ZSBmb3JtIHZhbHVlcy5cbiAgICpcbiAgICogQHBhcmFtIG10bmFGb3JtIE10bmFGb3JtIHJlcXVpcmluZyB2YWx1ZSBpbnNlcnRpb25cbiAgICogQHBhcmFtIG5nRm9ybVZhbHVlcyBKU09OIG9iamVjdCBvZiAgbmdGb3JtIHZhbHVlc1xuICAgKiBAcmV0dXJucyBuZXcgTXRuYUZvcm1cbiAgICovXG4gIGluc2VydE5ld1ZhbHVlcyhtdG5hRm9ybTogRm9ybSwgbmdGb3JtVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IEZvcm0ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5tdG5hRm9ybSxcbiAgICAgIGl0ZW1zOiBNdG5hV2ZTZXJpYWxpemVyLmluc2VydEZvcm1JdGVtVmFsdWVzKFxuICAgICAgICBtdG5hRm9ybSxcbiAgICAgICAgbmdGb3JtVmFsdWVzLFxuICAgICAgICB0aGlzLnVpU2VydmljZS5nZXREaXNhYmxlZFN0YXRlcygpLFxuICAgICAgICB0aGlzLmR5bmFtaWNGb3JtQ29uZGl0aW9uYWwsXG4gICAgICAgIHRoaXMuZHluYW1pY1dlYkZvcm1JdGVtQnVpbGRlclxuICAgICAgKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBGb3JtIHwgRm9ybUl0ZW0gaW50byBGb3JtQ29udHJvbChzKVxuICAgKlxuICAgKiBAcGFyYW0gaXRlbSBGb3JtIHwgRm9ybUl0ZW0gcmVxdWlyaW5nIHNlcmlhbGl6YXRpb25cbiAgICogQHJldHVybnMgRm9ybUdyb3VwIHwgRm9ybUNvbnRyb2xcbiAgICovXG4gIHNlcmlhbGl6ZU10bmFGb3JtSXRlbShpdGVtOiBGb3JtIHwgRm9ybUl0ZW1JbXBsPHVua25vd24+KTogQWJzdHJhY3RDb250cm9sIHwgbnVsbCB7XG4gICAgcmV0dXJuIE10bmFXZlNlcmlhbGl6ZXIuZGV0ZXJtaW5lU2VyaWFsaXplRnVuY3Rpb25Ub1VzZShcbiAgICAgIGl0ZW0sXG4gICAgICB0aGlzLFxuICAgICAgdGhpcy5keW5hbWljRm9ybUNvbmRpdGlvbmFsLFxuICAgICAgdGhpcy5keW5hbWljUmVhY3RpdmVGb3JtQ29udHJvbEJ1aWxkZXJcbiAgICApO1xuICB9XG5cbiAgLy8jcmVnaW9uIEN1c3RvbSBDb21wb25lbnQvRnVuY3Rpb24gUmVnaXN0cmF0aW9uXG4gIGdldER5bmFtaWNDb21wb25lbnQoaWQ6IHN0cmluZyk6IFR5cGU8QmFzZUZvcm1JdGVtPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50cy5nZXQoaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIG1hcCBvZiBjb21wb25lbnRzIHRvIGJlIGR5bmFtaWNhbGx5IHJlbmRlcmVkIGluc2lkZSBhbiBNdG5hRm9ybS5cbiAgICpcbiAgICogQHBhcmFtIGNvbXBvbmVudHMgdGhlIG1hcCBvZiBjb21wb25lbnRzIHRoYXQgYSBWYWx1ZUl0ZW0gd2lsbCB1c2UgZm9yIHJlbmRlcmluZ1xuICAgKiBAcHJvcCBzdHJpbmcgLSB0aGUgdHlwZShpdGVtSWQgc3VmZml4KSBvZiBjb21wb25lbnQsIHVzZWQgZm9yIHJldHJpZXZhbFxuICAgKiBAcHJvcCBUeXBlIC0gdGhlIGNvbXBvbmVudCB0byBiZSByZW5kZXJlZCwgYW4gZXh0ZW5zaW9uIG9mIEJhc2VGb3JtSXRlbVxuICAgKi9cbiAgcmVnaXN0ZXJEeW5hbWljQ29tcG9uZW50cyhjb21wb25lbnRzOiBNYXA8c3RyaW5nLCBUeXBlPEJhc2VGb3JtSXRlbT4+KSB7XG4gICAgdGhpcy5jb21wb25lbnRzID0gY29tcG9uZW50cztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGFuIE10bmFGb3JtIG9uIHRoZSBzZXJ2aWNlXG4gICAqIEBwYXJhbSBmb3JtIE10bmFGb3JtIHRvIGJlIHVzZWQgZm9yIGludGVybmFsIG1vZGlmaWNhdGlvblxuICAgKi9cbiAgc2V0TXRuYUZvcm0oZm9ybTogRm9ybSkge1xuICAgIHRoaXMuX210bmFGb3JtID0geyAuLi5mb3JtIH07XG4gICAgaWYgKCEhdGhpcy5pdGVtVG9nZ2xlUXVlICYmICEhdGhpcy5pdGVtVG9nZ2xlUXVlLmxlbmd0aCkge1xuICAgICAgLy8gVGhlIGZvcm0gbmVlZHMgdGltZSB0byByZXJlbmRlciwgc28gd2UgcHVzaCB0aGlzIGxvb3AgdG8gdGhlIGVuZCBvZiB0aGUgc3RhY2tcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5pdGVtVG9nZ2xlUXVlKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBjaGFuZ2Ugb2YgdGhpcy5pdGVtVG9nZ2xlUXVlKSB7XG4gICAgICAgICAgICB0aGlzLnVpU2VydmljZS50b2dnbGVGb3JtSXRlbXMoY2hhbmdlLmVuYWJsZWRJdGVtcywgY2hhbmdlLmRpc2FibGVkSXRlbXMsICEhY2hhbmdlLmVuYWJsZSwgY2hhbmdlLmVuYWJsZXJJZCwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXRlbVRvZ2dsZVF1ZSA9IG51bGw7XG4gICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICAvLyBLZWVwIHRyYWNrIG9mIGFueSBlcnJvcnMgY29taW5nIGZyb20gdGhlIHNlcnZlciBhbmQgcmV2YWxpZGF0ZSB0aG9zZSBjb250cm9sc1xuICAgIHRoaXMuX3VwZGF0ZVNlcnZlclNpZGVFcnJvcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbnkgRm9ybVNlcnZpY2UgZXh0ZW5zaW9uIGNsYXNzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZCBpbiBvcmRlciB0byBjYWxsIHRoZVxuICAgKiBkeW5hbWljV2ViRm9ybUl0ZW1CdWlsZGVyL2R5bmFtaWNSZWFjdGl2ZUZvcm1Db250cm9sQnVpbGRlciBtZXRob2RzLiBEdXJpbmcgd2ViIGZvcm0gZ2VuZXJhdGlvbiwgdGhpcyBtZXRob2QgaXMgY2hlY2tlZCAmXG4gICAqIHRoZSBjdXJyZW50IEZvcm1JdGVtIGlzIHBhc3NlZCBpbiwgd2hpY2ggY2FuIGJlIHVzZWQgYnkgdGhlIG92ZXJyaWRpbmcgbWV0aG9kLlxuICAgKlxuICAgKiBAZXhhbXBsZSBkeW5hbWljRm9ybUNvbmRpdGlvbmFsID0gKGl0ZW06IEZvcm1JdGVtKSA9PiBpdGVtLml0ZW1JZC5pbmNsdWRlcyh7c29tZSBpdGVtSWR9KVxuICAgKlxuICAgKi9cbiAgcHJvdGVjdGVkIGR5bmFtaWNGb3JtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0byBiZSBvdmVycmlkZGVuIGJ5IGV4dGVuZGVkIHNlcnZpY2UgaW4gb3JkZXIgdG8gaGFuZGxlIGZvcm0gZ2VuZXJhdGlvbiBmb3IgYW55IGFwcGxpY2F0aW9uLXNwZWNpZmljIGR5bmFtaWMgZm9ybSBjb21wb25lbnRzLlxuICAgKiBTaG91bGQgcmV0dXJuIGEgbmV3IFZhbHVlSXRlbTxhbnk+LlxuICAgKiBTdGVwIDNcbiAgICpcbiAgICogQGV4YW1wbGUgZHluYW1pY1dlYkZvcm1JdGVtQnVpbGRlcihzZWN0aW9uOiBTZWN0aW9uIHwgRm9ybSwgaXRlbTogRm9ybUl0ZW0sIG5nRm9ybVZhbHVlOiBhbnkpOiBWYWx1ZUl0ZW0ge1xuICAgKiBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuZ2VuZXJhdGVOZXdWYWx1ZShpdGVtLCByZlZhbHVlLCBzZWN0aW9uKTtcbiAgICogcmV0dXJuIHsgLi4uaXRlbSwgLi4ubmV3VmFsdWUgfVxuICAgKiB9XG4gICAqIEBwYXJhbSBzZWN0aW9uIHRoZSBjdXJyZW50IEZvcm1TZWN0aW9uXG4gICAqIEBwYXJhbSBpdGVtIHRoZSBjdXJyZW50IEZvcm1JdGVtXG4gICAqIEBwYXJhbSBuZ0Zvcm1WYWx1ZSB0aGUgbmdGb3JtIEpTT04gdmFsdWVcbiAgICogQHJldHVybnMgYSBuZXcgVmFsdWVJdGVtXG4gICAqL1xuICBwcm90ZWN0ZWQgZHluYW1pY1dlYkZvcm1JdGVtQnVpbGRlcihcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbiAgICBzZWN0aW9uOiBGb3JtIHwgRm9ybUl0ZW1Hcm91cCB8IFJlcGVhdGFibGVJdGVtIHwgdW5kZWZpbmVkLFxuICAgIGl0ZW06IEZvcm1JdGVtLFxuICAgIG5nRm9ybVZhbHVlOiB1bmtub3duLFxuICAgIGRpc2FibGVkU3RhdGU/OiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH1cbiAgICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuICApOiBWYWx1ZUl0ZW08dW5rbm93bj4gfCBudWxsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0byBiZSBvdmVycmlkZGVuIGJ5IGV4dGVuZGVkIHNlcnZpY2UgaW4gb3JkZXIgdG8gaGFuZGxlIHJlYWN0aXZlIGZvcm0gZ2VuZXJhdGlvblxuICAgKiBmb3IgYW55IGFwcGxpY2F0aW9uLXNwZWNpZmljIGR5bmFtaWMgZm9ybSBjb21wb25lbnRzLlxuICAgKiBTaG91bGQgcmV0dXJuIEZvcm1Db250cm9sIHwgRm9ybUdyb3VwLlxuICAgKlxuICAgKiBAZXhhbXBsZSBkeW5hbWljUmVhY3RpdmVGb3JtQ29udHJvbEJ1aWxkZXIoaXRlbTogRm9ybUl0ZW0pIHtcbiAgICogcmV0dXJuIHRoaXMuYnVpbGRGb3JtQ29udHJvbEZvckR5bmFtaWNDb21wb25lbnQoaXRlbTogRm9ybUl0ZW0pO1xuICAgKiB9XG4gICAqIEBwYXJhbSBpdGVtIEZvcm1JdGVtIHVzZWQgdG8gZ2VuZXJhdGUgZm9ybSBjb250cm9sc1xuICAgKiBAcmV0dXJucyBGb3JtQ29udHJvbCB8IEZvcm1Hcm91cFxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBwcm90ZWN0ZWQgZHluYW1pY1JlYWN0aXZlRm9ybUNvbnRyb2xCdWlsZGVyKGl0ZW06IEZvcm1JdGVtKTogQWJzdHJhY3RDb250cm9sIHwgbnVsbCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gSU5URVJOQUwgTUVUSE9EU1xuICAvKipcbiAgICogUmVjdXJzaXZlbHkgdHJhdmVyc2VzIGEgRm9ybSB0byBpbnNlcnQgb3IgcmVtb3ZlIGEgZGVzaWduYXRlZCBGb3JtSXRlbS5cbiAgICogQHBhcmFtIGl0ZW0gTXRuYUZvcm0gdG8gc2VhcmNoIHRocm91Z2hcbiAgICogQHBhcmFtIGNoYW5nZTogTXRuYVdmRm9ybUl0ZW1DaGFuZ2UgZm9yIGFkZGluZyBvciByZW1vdmluZyBhIEZvcm1JdGVtXG4gICAqIEBwYXJhbSBuZXdJdGVtIEZvcm1JdGVtIHRvIGFkZCB0byBpdHMgcGFyZW50XG4gICAqL1xuICBwcm90ZWN0ZWQgX21vZGlmeUZvcm1JdGVtPEkgZXh0ZW5kcyBGb3JtIHwgU2VjdGlvbiB8IEZvcm1JdGVtIHwgRm9ybUl0ZW1JbXBsPHVua25vd24+PihcbiAgICBpdGVtOiBJLFxuICAgIGNoYW5nZTogTXRuYVdmRm9ybUl0ZW1DaGFuZ2UsXG4gICAgbmV3SXRlbT86IEZvcm1JdGVtXG4gICk6IEZvcm0gfCBTZWN0aW9uIHwgRm9ybUl0ZW0gfCBGb3JtSXRlbUltcGw8dW5rbm93bj4ge1xuICAgIGlmICghY2hhbmdlLnBhcmVudElkcy5sZW5ndGgpIHtcbiAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlIHJlYWNoIHRoZSBQYXJlbnQgRm9ybUl0ZW1cbiAgICAgIGlmIChjaGFuZ2UuYWN0aW9uVHlwZSA9PT0gJ1JFUExBQ0UnKSB7XG4gICAgICAgIGlmICgnaXRlbXMnIGluIGl0ZW0pIHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IGl0ZW0uaXRlbXMuZmluZEluZGV4KChpKSA9PiBpLmluc3RhbmNlSWQgPT09IG5ld0l0ZW0/Lmluc3RhbmNlSWQpO1xuICAgICAgICAgIGNvbnN0IG5ld0l0ZW1zID0gWy4uLml0ZW0uaXRlbXNdO1xuICAgICAgICAgIGlmIChuZXdJdGVtKSB7XG4gICAgICAgICAgICBuZXdJdGVtcy5zcGxpY2UoaW5kZXgsIDEsIG5ld0l0ZW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geyAuLi5pdGVtLCBpdGVtczogbmV3SXRlbXMgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgIH0gZWxzZSBpZiAoaXNSZXBlYXRhYmxlSXRlbShpdGVtKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgaXRlbXM6IGNoYW5nZS5hY3Rpb25UeXBlID09PSAnQUREJyA/IGl0ZW0uaXRlbXMuY29uY2F0KG5ld0l0ZW0gfHwgW10pIDogaXRlbS5pdGVtcy5maWx0ZXIoKGkpID0+IGkuaW5zdGFuY2VJZCAhPT0gY2hhbmdlLmlkKSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc0Zvcm0oaXRlbSkgfHwgaXNTZWN0aW9uKGl0ZW0pIHx8IGlzRm9ybUl0ZW1Hcm91cEltcGwoaXRlbSkgfHwgaXNSZXBlYXRhYmxlSXRlbShpdGVtKSkge1xuICAgICAgY29uc3QgaXRlbXMgPSBbLi4uaXRlbS5pdGVtc107XG4gICAgICBjb25zdCBpbmRleFRvTW9kaWZ5ID0gaXRlbS5pdGVtcy5maW5kSW5kZXgoKGkpID0+IGkuaW5zdGFuY2VJZCA9PT0gY2hhbmdlLnBhcmVudElkc1swXSk7XG4gICAgICBjb25zdCBpdGVtVG9Nb2RpZnkgPSBpdGVtLml0ZW1zW2luZGV4VG9Nb2RpZnldIGFzIFBhcmVudEl0ZW1VbmlvbjtcblxuICAgICAgaXRlbXMuc3BsaWNlKFxuICAgICAgICBpbmRleFRvTW9kaWZ5LFxuICAgICAgICAxLFxuICAgICAgICB0aGlzLl9tb2RpZnlGb3JtSXRlbShcbiAgICAgICAgICBpdGVtVG9Nb2RpZnksXG4gICAgICAgICAge1xuICAgICAgICAgICAgLi4uY2hhbmdlLFxuICAgICAgICAgICAgcGFyZW50SWRzOiBjaGFuZ2UucGFyZW50SWRzLnNsaWNlKDEpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbmV3SXRlbVxuICAgICAgICApIGFzIEZvcm1JdGVtXG4gICAgICApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgaXRlbXMsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoaXNUYWJsZUl0ZW0oaXRlbSkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9tb2RpZnlUYWJsZUl0ZW0oaXRlbSBhcyBUYWJsZUl0ZW0sIGNoYW5nZSwgbmV3SXRlbSk7XG4gICAgfSBlbHNlIGlmIChpc09wdGlvbkl0ZW1JbXBsKGl0ZW0pIHx8IGlzT3B0aW9uR3JvdXBJdGVtSW1wbChpdGVtKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX21vZGlmeU9wdGlvbkl0ZW0oXG4gICAgICAgIGl0ZW0gYXMgT3B0aW9uSXRlbUltcGw8T3B0aW9uPHVua25vd24+LCB1bmtub3duPiB8IE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+PixcbiAgICAgICAgY2hhbmdlLFxuICAgICAgICBuZXdJdGVtXG4gICAgICApWzBdO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmF2ZXJzZXMgYW4gT3B0aW9uSXRlbU1hcCBvZiBhIEZvcm1JdGVtIHRvIGluc2VydCBvciByZW1vdmUgYSBkZXNpZ25hdGVkIEZvcm1JdGVtXG4gICAqIEBwYXJhbSBvcHRpb25JdGVtIEZvcm1JdGVtIHdpdGggYW4gb3B0aW9uSXRlbU1hcCwgZS5nLiBPcHRpb25JdGVtSW1wbCB8IE9wdGlvbkdyb3VwSXRlbUltcGxcbiAgICogQHBhcmFtIGNoYW5nZSBNdG5hV2ZGb3JtSXRlbUNoYW5nZSBmb3IgYWRkaW5nIG9yIHJlbW92aW5nIGEgRm9ybUl0ZW1cbiAgICogQHBhcmFtIG5ld0l0ZW0gRm9ybUl0ZW0gdG8gYmUgYWRkZWQgdG8gaXRzIHBhcmVudFxuICAgKiBAcmV0dXJucyBGb3JtSXRlbSB3aXRoIGFuIG9wdGlvbkl0ZW1NYXAgY29udGFpbmluZyBGb3JtSXRlbXNcbiAgICovXG4gIHByaXZhdGUgX21vZGlmeU9wdGlvbkl0ZW0oXG4gICAgb3B0aW9uSXRlbTogT3B0aW9uSXRlbUltcGw8T3B0aW9uPHVua25vd24+LCB1bmtub3duPiB8IE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+PixcbiAgICBjaGFuZ2U6IE10bmFXZkZvcm1JdGVtQ2hhbmdlLFxuICAgIG5ld0l0ZW0/OiBGb3JtSXRlbVxuICApOiBbT3B0aW9uSXRlbUltcGw8T3B0aW9uPHVua25vd24+LCB1bmtub3duPiB8IE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+PiwgYm9vbGVhbl0ge1xuICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuICAgIGNvbnN0IG9wdGlvbkl0ZW1NYXA6IHsgW2lkOiBzdHJpbmddOiBGb3JtSXRlbSB9ID0ge307XG4gICAgLy8gTG9vcCB0aHJvdWdoIHRoZSBtYXAgYW5kIHNldCB0aGUgaXRlbXMgdG8gYSBuZXcgbWFwXG4gICAgLy8gQ2hlY2sgaWYgYW55IEZvcm1JdGVtIGluIHRoZSBtYXAgbWF0Y2hlcyB0aGUgbmV4dCBwYXJlbnQgSURcbiAgICBmb3IgKGNvbnN0IGlkIGluIG9wdGlvbkl0ZW0ub3B0aW9uSXRlbU1hcCkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25JdGVtLm9wdGlvbkl0ZW1NYXAsIGlkKSkge1xuICAgICAgICAvLyBJZiBvbmUgbWF0Y2hlcywgbW9kaWZ5ICYgc2V0IGl0IG9uIHRoZSBuZXcgbWFwXG4gICAgICAgIGlmIChvcHRpb25JdGVtLm9wdGlvbkl0ZW1NYXBbaWRdLmluc3RhbmNlSWQgPT09IGNoYW5nZS5wYXJlbnRJZHNbMF0pIHtcbiAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgb3B0aW9uSXRlbU1hcFtpZF0gPSB0aGlzLl9tb2RpZnlGb3JtSXRlbShcbiAgICAgICAgICAgIG9wdGlvbkl0ZW0ub3B0aW9uSXRlbU1hcFtpZF0gYXMgUGFyZW50SXRlbVVuaW9uLFxuICAgICAgICAgICAgeyAuLi5jaGFuZ2UsIHBhcmVudElkczogY2hhbmdlLnBhcmVudElkcy5zbGljZSgxKSB9LFxuICAgICAgICAgICAgbmV3SXRlbVxuICAgICAgICAgICkgYXMgRm9ybUl0ZW07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3B0aW9uSXRlbU1hcFtpZF0gPSBvcHRpb25JdGVtLm9wdGlvbkl0ZW1NYXBbaWRdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIHJldHVybiB0aGUgaXRlbSB3aXRoIGl0cyBuZXcgb3B0aW9uSXRlbU1hcCwgJiB3aGV0aGVyIHdlIGZvdW5kIHRoZSBtYXRjaGluZyBpdGVtXG4gICAgcmV0dXJuIFt7IC4uLm9wdGlvbkl0ZW0sIG9wdGlvbkl0ZW1NYXAgfSwgZm91bmRdO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYXZlcnNlcyB0YWJsZSByb3dzIHRvIGluc2VydCBvciByZW1vdmUgYSBGb3JtSXRlbVxuICAgKiBAcGFyYW0gdGFibGVJdGVtIFRhYmxlSXRlbSB0byB0cmF2ZXJzZVxuICAgKiBAcGFyYW0gY2hhbmdlIE10bmFXZkZvcm1JdGVtQ2hhbmdlIGZvciBhZGRpbmcgb3IgcmVtb3ZpbmcgYSBGb3JtSXRlbVxuICAgKiBAcGFyYW0gbmV3SXRlbSBGb3JtSXRlbSB0byBiZSBhZGRlZCB0byBpdHMgcGFyZW50XG4gICAqIEByZXR1cm5zIFRhYmxlSXRlbSB3aXRoIGEgRm9ybUl0ZW0gYWRkZWQgb3IgcmVtb3ZlZFxuICAgKi9cbiAgcHJpdmF0ZSBfbW9kaWZ5VGFibGVJdGVtKHRhYmxlSXRlbTogVGFibGVJdGVtLCBjaGFuZ2U6IE10bmFXZkZvcm1JdGVtQ2hhbmdlLCBuZXdJdGVtPzogRm9ybUl0ZW0pOiBUYWJsZUl0ZW0ge1xuICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuICAgIC8vIE1hcCB0aGUgdGFibGUgcm93cyB0byBmaW5kIHRoZSBGb3JtSXRlbSB3aXRoIG1hdGNoaW5nIGluc3RhbmNlSWRcbiAgICBjb25zdCB0YWJsZVJvd3M6IFRhYmxlUm93SXRlbVtdID0gdGFibGVJdGVtLnRhYmxlUm93cy5tYXAoKHJvdzogVGFibGVSb3dJdGVtKSA9PiB7XG4gICAgICAvLyBJZiB0aGUgaXRlbSB3YXMgZm91bmQsIHNraXAgbWFwcGluZyBmdXJ0aGVyIHJvd3NcbiAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5yb3csXG4gICAgICAgICAgaXRlbXM6IHJvdy5pdGVtcy5tYXAoKHJvd0l0ZW06IEZvcm1JdGVtKSA9PiB7XG4gICAgICAgICAgICAvLyBJZiB3ZSBmb3VuZCB0aGUgbmV4dCBtYXRjaGluZyBGb3JtSXRlbSwgdG9nZ2xlICdmb3VuZCcsIGFuZCByZXR1cm4gdGhlIG1vZGlmaWVkIEZvcm1JdGVtXG4gICAgICAgICAgICBpZiAoISFyb3dJdGVtICYmIHJvd0l0ZW0uaW5zdGFuY2VJZCA9PT0gY2hhbmdlLnBhcmVudElkc1swXSkge1xuICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb2RpZnlGb3JtSXRlbShcbiAgICAgICAgICAgICAgICByb3dJdGVtIGFzIFBhcmVudEl0ZW1VbmlvbixcbiAgICAgICAgICAgICAgICB7IC4uLmNoYW5nZSwgcGFyZW50SWRzOiBjaGFuZ2UucGFyZW50SWRzLnNsaWNlKDEpIH0sXG4gICAgICAgICAgICAgICAgbmV3SXRlbVxuICAgICAgICAgICAgICApIGFzIEZvcm1JdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgdGhlIEZvcm1JdGVtIGluc3RhbmNlSWQgZG9lc24ndCBtYXRjaCwgYnV0IGl0IGhhcyBGb3JtSXRlbXMgaW4gaXRzICdvcHRpb25JdGVtTWFwJyxcbiAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgYSBtYXRjaGluZyBGb3JtSXRlbSBleGlzdHMgaW4gaXRzIG1hcFxuICAgICAgICAgICAgaWYgKCdvcHRpb25JdGVtTWFwJyBpbiByb3dJdGVtKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJldHVybmVkID0gdGhpcy5fbW9kaWZ5T3B0aW9uSXRlbShcbiAgICAgICAgICAgICAgICByb3dJdGVtIGFzIE9wdGlvbkl0ZW1JbXBsPE9wdGlvbjx1bmtub3duPiwgdW5rbm93bj4gfCBPcHRpb25Hcm91cEl0ZW1JbXBsPE9wdGlvbjx1bmtub3duPj4sXG4gICAgICAgICAgICAgICAgY2hhbmdlLFxuICAgICAgICAgICAgICAgIG5ld0l0ZW1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgZm91bmQgPSByZXR1cm5lZFsxXTtcbiAgICAgICAgICAgICAgcmV0dXJuIHJldHVybmVkWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJvd0l0ZW07XG4gICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gcm93O1xuICAgIH0pO1xuICAgIHJldHVybiB7IC4uLnRhYmxlSXRlbSwgdGFibGVSb3dzIH07XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBvciByZW1vdmVzIGluc3RhbmNlSWRzIGZyb20gdGhlICdpdGVtSWRzJyBpbiBhIEZvcm1JdGVtJ3MgY29uZGl0aW9uXG4gICAqIEBwYXJhbSBmb3JtIE10bmFGb3JtIHRvIHNlYXJjaCB0aHJvdWdoICYgcmVwbGFjZSBmb3JtaXRlbXMgd2l0aCB0aGUgbmV3IGNvbmRpdGlvblxuICAgKiBAcGFyYW0gY2hhbmdlIFRoZSBjaGFuZ2UgdGhhdCByZWNlbnRseSBvY2N1cnJlZCBpbiB0aGUgbXRuYUZvcm1cbiAgICovXG4gIHByaXZhdGUgX21vZGlmeUZvcm1JdGVtQ29uZGl0aW9ucyhmb3JtOiBGb3JtLCBjaGFuZ2U6IE10bmFXZkZvcm1JdGVtQ2hhbmdlKTogRm9ybSB7XG4gICAgbGV0IG5ld0Zvcm0gPSBmb3JtO1xuICAgIGlmIChjaGFuZ2UuY29uZGl0aW9uQ2hhbmdlcykge1xuICAgICAgY29uc3QgZm9ybUl0ZW1zOiB7IFtrZXk6IHN0cmluZ106IEZvcm1JdGVtIHwgQ29uZGl0aW9uYWxJdGVtIH0gPSB7fTtcbiAgICAgIGZvciAoY29uc3QgY2Mgb2YgY2hhbmdlLmNvbmRpdGlvbkNoYW5nZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCB0b2dnbGVkSWQgb2YgWy4uLmNjLmVuYWJsZWRJdGVtcywgLi4uY2MuZGlzYWJsZWRJdGVtc10pIHtcbiAgICAgICAgICBsZXQgZm9ybUl0ZW0gPSBmb3JtSXRlbXNbdG9nZ2xlZElkXTtcbiAgICAgICAgICBjb25zdCBmb3JtSXRlbUNvbXBvbmVudCA9IHRoaXMudWlTZXJ2aWNlLmdldEl0ZW0odG9nZ2xlZElkKTtcbiAgICAgICAgICBpZiAoIWZvcm1JdGVtICYmIGZvcm1JdGVtQ29tcG9uZW50Py5pdGVtKSB7XG4gICAgICAgICAgICBmb3JtSXRlbSA9IGZvcm1JdGVtQ29tcG9uZW50Py5pdGVtO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNDb25kaXRpb25hbEl0ZW0oZm9ybUl0ZW0pICYmIGZvcm1JdGVtLmNvbmRpdGlvbikge1xuICAgICAgICAgICAgY29uc3QgaXRlbUNvbmRpdGlvbkl0ZW1JZHMgPSBmb3JtSXRlbS5jb25kaXRpb24uaXRlbUlkcyB8fCBbXTtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1JZHMgPVxuICAgICAgICAgICAgICBjaGFuZ2UuYWN0aW9uVHlwZSA9PT0gJ0FERCdcbiAgICAgICAgICAgICAgICA/IFsuLi5pdGVtQ29uZGl0aW9uSXRlbUlkcywgY2MuZW5hYmxlcklkXVxuICAgICAgICAgICAgICAgIDogaXRlbUNvbmRpdGlvbkl0ZW1JZHMuZmlsdGVyKChpKSA9PiBpICE9PSBjYy5lbmFibGVySWQpO1xuXG4gICAgICAgICAgICBjb25zdCBuZXdJdGVtOiBDb25kaXRpb25hbEl0ZW0gPSB7IC4uLmZvcm1JdGVtLCBjb25kaXRpb246IHsgLi4uZm9ybUl0ZW0uY29uZGl0aW9uLCBpdGVtSWRzIH0gfTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0NoYW5nZSA9IG5ldyBNdG5hV2ZGb3JtSXRlbUNoYW5nZShuZXdJdGVtLmluc3RhbmNlSWQsIGZvcm1JdGVtQ29tcG9uZW50Py5wYXJlbnRJZHMgfHwgW10sICdSRVBMQUNFJyk7XG5cbiAgICAgICAgICAgIG5ld0Zvcm0gPSB0aGlzLl9tb2RpZnlGb3JtSXRlbShuZXdGb3JtLCBuZXdDaGFuZ2UsIG5ld0l0ZW0gYXMgRm9ybUl0ZW0gJiBDb25kaXRpb25hbEl0ZW0pIGFzIEZvcm07XG4gICAgICAgICAgICBmb3JtSXRlbXNbdG9nZ2xlZElkXSA9IG5ld0l0ZW07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2UuYWN0aW9uVHlwZSA9PT0gJ1JFTU9WRScpIHtcbiAgICAgICAgICB0aGlzLnVpU2VydmljZS50b2dnbGVGb3JtSXRlbXMoY2MuZW5hYmxlZEl0ZW1zLCBjYy5kaXNhYmxlZEl0ZW1zLCAhIWNjLmVuYWJsZSwgY2MuZW5hYmxlcklkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3Rm9ybTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSBtYXAgb2YgYWxsIGluc3RhbmNlSWRzIGluc2lkZSBhbiBpdGVtLiBDaGVja3MgJ2l0ZW1zJyAmICdvcHRpb25JdGVtTWFwJ1xuICAgKiBAcGFyYW0gaXRlbSBJdGVtIHRvIHJlY3Vyc2VcbiAgICogQHBhcmFtIGlkTWFwIG1hcCBvZiB0aGUgaXRlbSdzIGludGVybmFsIGluc3RhbmNlSWRzXG4gICAqL1xuICBwcml2YXRlIF9idWlsZEludGVybmFsSWRzTWFwKGl0ZW06IEZvcm1JdGVtLCBpZE1hcDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4pIHtcbiAgICBpZE1hcFtpdGVtLmluc3RhbmNlSWRdID0gdHJ1ZTtcbiAgICBpZiAoaXNUeXBlPHsgaXRlbXM6IEZvcm1JdGVtW10gfT4oaXRlbSwgJ2l0ZW1zJykpIHtcbiAgICAgIGNvbnN0IGl0ZW1zOiBGb3JtSXRlbVtdID0gaXRlbS5pdGVtcztcbiAgICAgIGZvciAoY29uc3Qgc3ViSXRlbSBvZiBpdGVtcykge1xuICAgICAgICB0aGlzLl9idWlsZEludGVybmFsSWRzTWFwKHN1Ykl0ZW0sIGlkTWFwKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzVHlwZTx7IG9wdGlvbkl0ZW1NYXA6IHsgW2lkOiBzdHJpbmddOiBGb3JtSXRlbSB9IH0+KGl0ZW0sICdvcHRpb25JdGVtTWFwJykpIHtcbiAgICAgIGNvbnN0IG1hcDogeyBbaWQ6IHN0cmluZ106IEZvcm1JdGVtIH0gPSBpdGVtLm9wdGlvbkl0ZW1NYXA7XG4gICAgICBmb3IgKGNvbnN0IGlkIGluIG1hcCkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1hcCwgaWQpKSB7XG4gICAgICAgICAgdGhpcy5fYnVpbGRJbnRlcm5hbElkc01hcChtYXBbaWRdLCBpZE1hcCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGFuIGFycmF5IG9mIENvbmRpdGlvbkNoYW5nZXMgdG8gYmUgaW1wbGVtZW50ZWQgaW4gYW4gTXRuYUZvcm0uXG4gICAqIEBwYXJhbSBpdGVtIEZvcm1JdGVtIHRoYXQgd2FzIGFkZGVkL3JlbW92ZWQsIHdoaWNoIGFmZmVjdHMgY29uZGl0aW9ucyBvZiBvdGhlciBGb3JtSXRlbXNcbiAgICogQHBhcmFtIGNoYW5nZXMgQXJyYXkgdG8gYnVpbGQgdXBcbiAgICogQHBhcmFtIGludGVybmFsSWRNYXAgTWFwIG9mIGFsbCBpbnN0YW5jZUlkcyBsb2NhdGVkIGluIHRoZSBpdGVtOyBpbiBvcmRlciB0byBleGNsdWRlIHRoZW0gZnJvbSB0aGUgY29uZGl0aW9uIGNoYW5nZXNcbiAgICogQHBhcmFtIGFjdGlvbiBXaGV0aGVyIHRoZSBpdGVtIHdhcyBhZGRlZCBvciByZW1vdmVkXG4gICAqL1xuICBwcml2YXRlIF9idWlsZENvbmRpdGlvbkNoYW5nZUFycmF5KFxuICAgIGl0ZW06IEZvcm1JdGVtLFxuICAgIGNoYW5nZXM6IEFycmF5PENvbmRpdGlvbkNoYW5nZT4sXG4gICAgaW50ZXJuYWxJZE1hcDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4sXG4gICAgYWN0aW9uPzogTXRuYVdmRm9ybUl0ZW1DaGFuZ2VBY3Rpb25cbiAgKSB7XG4gICAgaWYgKGlzT3B0aW9uSXRlbUltcGwoaXRlbSkpIHtcbiAgICAgIGNvbnN0IGVuYWJsZSA9ICEhYWN0aW9uICYmIGFjdGlvbiA9PT0gJ0FERCcgPyBpdGVtLm9wdGlvbi5zZWxlY3RlZCB8fCBpdGVtLnZhbHVlID09PSBpdGVtLm9wdGlvbi5vcHRpb24uaWQgOiBmYWxzZTtcbiAgICAgIHRoaXMuX3B1c2hDb25kaXRpb25Ub0FycmF5KGl0ZW0uaW5zdGFuY2VJZCwgaXRlbS5vcHRpb24uZW5hYmxlZEl0ZW1zLCBpdGVtLm9wdGlvbi5kaXNhYmxlZEl0ZW1zLCBjaGFuZ2VzLCBpbnRlcm5hbElkTWFwLCBlbmFibGUpO1xuICAgICAgdGhpcy5fYnVpbGRBcnJheUZyb21PcHRpb25JdGVtTWFwKGl0ZW0sIGNoYW5nZXMsIGludGVybmFsSWRNYXApO1xuICAgIH0gZWxzZSBpZiAoaXNPcHRpb25Hcm91cEl0ZW1JbXBsKGl0ZW0pKSB7XG4gICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBpdGVtLm9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZW5hYmxlID1cbiAgICAgICAgICAhIWFjdGlvbiAmJiBhY3Rpb24gPT09ICdBREQnID8gb3B0aW9uLnNlbGVjdGVkIHx8ICghIWl0ZW0udmFsdWUgJiYgaXRlbS52YWx1ZS5zb21lKCh2KSA9PiB2ID09PSBvcHRpb24ub3B0aW9uLmlkKSkgOiBmYWxzZTtcbiAgICAgICAgdGhpcy5fcHVzaENvbmRpdGlvblRvQXJyYXkoaXRlbS5pbnN0YW5jZUlkLCBvcHRpb24uZW5hYmxlZEl0ZW1zLCBvcHRpb24uZGlzYWJsZWRJdGVtcywgY2hhbmdlcywgaW50ZXJuYWxJZE1hcCwgZW5hYmxlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2J1aWxkQXJyYXlGcm9tT3B0aW9uSXRlbU1hcChpdGVtLCBjaGFuZ2VzLCBpbnRlcm5hbElkTWFwLCBhY3Rpb24pO1xuICAgIH0gZWxzZSBpZiAoaXNUeXBlPHsgaXRlbXM6IEZvcm1JdGVtW10gfT4oaXRlbSwgJ2l0ZW1zJykpIHtcbiAgICAgIGNvbnN0IGl0ZW1zOiBGb3JtSXRlbVtdID0gaXRlbS5pdGVtcztcbiAgICAgIGZvciAoY29uc3Qgc3ViSXRlbSBvZiBpdGVtcykge1xuICAgICAgICB0aGlzLl9idWlsZENvbmRpdGlvbkNoYW5nZUFycmF5KHN1Ykl0ZW0sIGNoYW5nZXMsIGludGVybmFsSWRNYXAsIGFjdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBhbiBhcnJheSBvZiBDb25kaXRpb25DaGFuZ2VzIGZyb20gYW4gaXRlbSdzIG9wdGlvbkl0ZW1NYXBcbiAgICogQHBhcmFtIGl0ZW0gRm9ybUl0ZW0gd2l0aCBhbiBvcHRpb25JdGVtTWFwXG4gICAqIEBwYXJhbSBjb25kaXRpb25zIEFycmF5IG9mIENvbmRpdGlvbkNoYW5nZXMgdG8gcHVzaCBvbiBuZXcgY2hhbmdlc1xuICAgKiBAcGFyYW0gaXRlbU1hcCBtYXAgb2YgaW5zdGFuY2VJZHMgZXhpc2l0aW5nIGluIGFuIGl0ZW07IGluIG9yZGVyIHRvIGV4Y2x1ZGUgdGhlbSBmcm9tIHRoZSBjaGFuZ2VzXG4gICAqIEBwYXJhbSBhY3Rpb24gV2hldGhlciBhbiBpdGVtIHdhcyBhZGRlZCBvciByZW1vdmVkXG4gICAqL1xuICBwcml2YXRlIF9idWlsZEFycmF5RnJvbU9wdGlvbkl0ZW1NYXAoXG4gICAgaXRlbTogT3B0aW9uSXRlbUltcGw8T3B0aW9uPHVua25vd24+LCB1bmtub3duPiB8IE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+PixcbiAgICBjb25kaXRpb25zOiBBcnJheTxDb25kaXRpb25DaGFuZ2U+LFxuICAgIGl0ZW1NYXA6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+LFxuICAgIGFjdGlvbj86IE10bmFXZkZvcm1JdGVtQ2hhbmdlQWN0aW9uXG4gICkge1xuICAgIGlmIChpdGVtLm9wdGlvbkl0ZW1NYXApIHtcbiAgICAgIGZvciAoY29uc3QgaWQgaW4gaXRlbS5vcHRpb25JdGVtTWFwKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaXRlbS5vcHRpb25JdGVtTWFwLCBpZCkpIHtcbiAgICAgICAgICBjb25zdCBzdWJJdGVtID0gaXRlbS5vcHRpb25JdGVtTWFwW2lkXTtcbiAgICAgICAgICB0aGlzLl9idWlsZENvbmRpdGlvbkNoYW5nZUFycmF5KHN1Ykl0ZW0sIGNvbmRpdGlvbnMsIGl0ZW1NYXAsIGFjdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHVzaGVzIGEgbmV3IENvbmRpdGlvbkNoYW5nZSBvbnRvIHRoZSBjb25kaXRpb25zIGFycmF5LiBJZiBhIENvbmRpdGlvbkNoYW5nZSB3aXRoIG1hdGNoaW5nIGlkIGV4aXN0cyxcbiAgICogaXQgbWVyZ2VzIHRoZSBuZXcgdmFsdWVzIGludG8gaXRcbiAgICogQHBhcmFtIGVuYWJsZXJJZCBpbnN0YW5jZUlkIG9mIHRoZSBpdGVtIHRoYXQgZW5hYmxlcyBvdGhlciBGb3JtSXRlbXNcbiAgICogQHBhcmFtIGVuYWJsZWQgdGhlIGl0ZW0ncyAnZW5hYmxlZEl0ZW1zJyBhcnJheVxuICAgKiBAcGFyYW0gZGlzYWJsZWQgdGhlIGl0ZW0ncyAnZGlzYWJsZWRJdGVtcycgYXJyYXlcbiAgICogQHBhcmFtIGNvbmRpdGlvbnMgQXJyYXkgb2YgQ29uZGl0aW9uQ2hhbmdlcyB0byBidWlsZCB1cFxuICAgKiBAcGFyYW0gaXRlbU1hcCBtYXAgb2YgaW5zdGFuY2VJZHMgaW5zaWRlIGFuIGl0ZW07IHRvIGVuc3VyZSBubyBpbnRlcm5hbCBpZHMgYXJlIGluY2x1ZGVkIGluIGEgY2hhbmdlXG4gICAqIEBwYXJhbSBlbmFibGUgV2hldGhlciB0aGUgJ2VuYWJsZWRJdGVtcycgc2hvdWxkIHRvZ2dsZWQgZW5hYmxlZFxuICAgKi9cbiAgcHJpdmF0ZSBfcHVzaENvbmRpdGlvblRvQXJyYXkoXG4gICAgZW5hYmxlcklkOiBzdHJpbmcsXG4gICAgZW5hYmxlZDogc3RyaW5nW10sXG4gICAgZGlzYWJsZWQ6IHN0cmluZ1tdLFxuICAgIGNvbmRpdGlvbnM6IEFycmF5PENvbmRpdGlvbkNoYW5nZT4sXG4gICAgaXRlbU1hcDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4sXG4gICAgZW5hYmxlOiBib29sZWFuXG4gICkge1xuICAgIGNvbnN0IGVuYWJsZWRJdGVtcyA9IGVuYWJsZWQuZmlsdGVyKChlKSA9PiAhaXRlbU1hcFtlXSk7XG4gICAgY29uc3QgZGlzYWJsZWRJdGVtcyA9IGRpc2FibGVkLmZpbHRlcigoZCkgPT4gIWl0ZW1NYXBbZF0pO1xuICAgIGlmICghIWVuYWJsZWRJdGVtcy5sZW5ndGggfHwgISFkaXNhYmxlZEl0ZW1zLmxlbmd0aCkge1xuICAgICAgY29uc3QgaW5kZXggPSBjb25kaXRpb25zLmZpbmRJbmRleCgoYykgPT4gYy5lbmFibGVySWQgPT09IGVuYWJsZXJJZCk7XG4gICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgIGNvbmRpdGlvbnMucHVzaCh7IGVuYWJsZXJJZDogZW5hYmxlcklkLCBlbmFibGVkSXRlbXMsIGRpc2FibGVkSXRlbXMsIGVuYWJsZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHByZXYgPSBjb25kaXRpb25zW2luZGV4XTtcbiAgICAgICAgY29uc3QgbmV3SWQ6IENvbmRpdGlvbkNoYW5nZSA9IHtcbiAgICAgICAgICBlbmFibGVySWQsXG4gICAgICAgICAgZW5hYmxlZEl0ZW1zOiBbLi4ucHJldi5lbmFibGVkSXRlbXMsIC4uLmVuYWJsZWRJdGVtc10sXG4gICAgICAgICAgZGlzYWJsZWRJdGVtczogWy4uLnByZXYuZGlzYWJsZWRJdGVtcywgLi4uZGlzYWJsZWRJdGVtc10sXG4gICAgICAgICAgZW5hYmxlLFxuICAgICAgICB9O1xuICAgICAgICBjb25kaXRpb25zLnNwbGljZShpbmRleCwgMSwgbmV3SWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9yZSBhbGwgdmFsaWRhdGlvbiBlcnJvcnMgb24gdGhlIHNlcnZpY2UuXG4gICAqIFJldmFsaWRhdGUgZm9ybSBjb250cm9scyB0aGF0IHByZXZpb3VzbHkgaGFkIGVycm9ycyBvciBoYXZlIG5ldyBlcnJvcnMgbm93LlxuICAgKi9cbiAgcHJpdmF0ZSBfdXBkYXRlU2VydmVyU2lkZUVycm9ycygpIHtcbiAgICAvLyBLZWVwIHRyYWNrIG9mIElEcyBmb3IgZWFjaCBjb250cm9sIHRoYXQgbmVlZHMgdG8gYmUgcmV2YWxpZGF0ZWRcbiAgICBjb25zdCBjb250cm9sSWRzVG9SZXZhbGlkYXRlID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAvLyBDb2xsZWN0IGNvbnRyb2xzIHByZXZpb3VzbHkgaW4gZXJyb3IgdG8gcmV2YWxpZGF0ZVxuICAgIGlmICh0aGlzLl9mb3JtSXRlbVZhbGlkYXRpb25SZXN1bHRzKSB7XG4gICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuX2Zvcm1JdGVtVmFsaWRhdGlvblJlc3VsdHMpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLl9mb3JtSXRlbVZhbGlkYXRpb25SZXN1bHRzLCBpZCkpIHtcbiAgICAgICAgICBjb250cm9sSWRzVG9SZXZhbGlkYXRlLmFkZChpZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDbGVhciBvdXQgYWxsIHByZXZpb3VzIHN0b3JlZCBlcnJvcnNcbiAgICB0aGlzLl9mb3JtSXRlbVZhbGlkYXRpb25SZXN1bHRzID0ge307XG4gICAgaWYgKHRoaXMuX210bmFGb3JtPy52YWxpZGF0aW9uUmVzdWx0KSB7XG4gICAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiB0aGlzLl9tdG5hRm9ybS52YWxpZGF0aW9uUmVzdWx0LmZvcm1JdGVtVmFsaWRhdGlvblJlc3VsdHMpIHtcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uU3RhdHVzID09PSAnRVJST1JTJykge1xuICAgICAgICAgIC8vIFN0b3JlIGVycm9ycyBzbyB0aGF0IHRoZSB2YWxpZGF0aW9uUmVzdWx0VmFsaWRhdG9yIGNhbiB2YWxpZGF0ZSBlYWNoIGNvbnRyb2xcbiAgICAgICAgICB0aGlzLl9mb3JtSXRlbVZhbGlkYXRpb25SZXN1bHRzW3Jlc3VsdC5pZF0gPSByZXN1bHQ7XG4gICAgICAgICAgLy8gV2UgbmVlZCB0byByZXZhbGlkYXRlIHRoZXNlIGNvbnRyb2xzIHRoYXQgaGF2ZSBlcnJvcnNcbiAgICAgICAgICBjb250cm9sSWRzVG9SZXZhbGlkYXRlLmFkZChyZXN1bHQuaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gT25seSByZXZhbGlkYXRlIGNvbnRyb2xzIGFjdHVhbGx5IGNoYW5nZXNcbiAgICBjb25zdCBmb3JtID0gdGhpcy5uZ0Zvcm1TZXJ2aWNlLmdldEZvcm0oKTtcbiAgICBpZiAoZm9ybSkge1xuICAgICAgZm9yIChjb25zdCBpZCBvZiBjb250cm9sSWRzVG9SZXZhbGlkYXRlKSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSBmaW5kRm9ybUNvbnRyb2woaWQsIGZvcm0pO1xuICAgICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG59XG4iXX0=
@@ -10,12 +10,16 @@ export const DEFAULT_ERROR_MESSAGES = {
10
10
  email: $localize `This field must include a valid email format.`,
11
11
  max: (item) => !isPresent(item) || !isPresent(item === null || item === void 0 ? void 0 : item.maxValue)
12
12
  ? $localize `This field's value must be less.`
13
- : isPresent(item === null || item === void 0 ? void 0 : item.minValue) ? $localize `Min value: ${item.minValue} - ` : '' + $localize `Max value: ${item.maxValue}`,
13
+ : isPresent(item === null || item === void 0 ? void 0 : item.minValue)
14
+ ? $localize `Min value: ${item.minValue} - `
15
+ : '' + $localize `Max value: ${item.maxValue}`,
14
16
  maxlength: $localize `This field has exceeded the allowed maximum.`,
15
17
  maxSelected: null,
16
18
  min: (item) => !isPresent(item) || !isPresent(item === null || item === void 0 ? void 0 : item.minValue)
17
19
  ? $localize `This field's value must be greater.`
18
- : $localize `Min Value: ${item.minValue}` + isPresent(item === null || item === void 0 ? void 0 : item.maxValue) ? $localize ` - Max Value: ${item.maxValue}` : '',
20
+ : $localize `Min Value: ${item.minValue}` + isPresent(item === null || item === void 0 ? void 0 : item.maxValue)
21
+ ? $localize ` - Max Value: ${item.maxValue}`
22
+ : '',
19
23
  minlength: $localize `This field has not met the required minimum.`,
20
24
  minSelected: null,
21
25
  nonDigit: $localize `This field's value must be numeric.`,
@@ -330,4 +334,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
330
334
  type: Inject,
331
335
  args: [WEB_FORM_CUSTOM_ERRORS]
332
336
  }] }]; } });
333
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dlYi1mb3JtLWFuZ3VsYXIvc3JjL2xpYi9zZXJ2aWNlcy91aS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFFLFNBQVMsRUFBb0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVsRCxPQUFPLEVBQTJDLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDeEksT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7O0FBbUJ2QyxnREFBZ0Q7QUFDaEQsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQXFCO0lBQ3RELEtBQUssRUFBRSxTQUFTLENBQUEsK0NBQStDO0lBQy9ELEdBQUcsRUFBRSxDQUFDLElBQW9FLEVBQUUsRUFBRSxDQUM1RSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsUUFBUSxDQUFDO1FBQzVDLENBQUMsQ0FBQyxTQUFTLENBQUEsa0NBQWtDO1FBQzdDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUEsY0FBYyxJQUFJLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxTQUFTLENBQUEsY0FBYyxJQUFJLENBQUMsUUFBUSxFQUFFO0lBQ3pILFNBQVMsRUFBRSxTQUFTLENBQUEsOENBQThDO0lBQ2xF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QztTQUN4RDthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUM1QztJQUNILENBQUM7OzZHQXBTVSxlQUFlLDJDQVlpQyxzQkFBc0I7aUhBWnRFLGVBQWUsY0FERixNQUFNOzRGQUNuQixlQUFlO2tCQUQzQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBYVEsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IGlzUHJlc2VudCwgaXNUeXBlIH0gZnJvbSAnQG10bmEvY29yZS10cyc7XG5pbXBvcnQgeyBBbm5vdGF0YWJsZU51bWJlck1hcCB9IGZyb20gJ0BtdG5hL3Bvam8tc29jaWFsLWFuZ3VsYXInO1xuaW1wb3J0IHsgQ29uZGl0aW9uYWxJdGVtLCBGb3JtSXRlbSwgRm9ybUl0ZW1JbXBsLCBpc0NvbmRpdGlvbmFsSXRlbSwgaXNPcHRpb25Hcm91cEl0ZW1JbXBsLCBpc09wdGlvbkl0ZW1JbXBsIH0gZnJvbSAnQG10bmEvd2ViLWZvcm0tdHMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE10bmFXZkZvcm1JdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9mb3JtLWl0ZW0vZm9ybS1pdGVtLmNvbXBvbmVudCc7XG5cbi8qKiBSZWdpc3RyeSBvZiBjdXN0b20gZXJyb3IgbWVzc2FnZXMgZm9yIGEgc3BlY2lmaWMgZm9ybSBpdGVtLiBBIGN1c3RvbSBlcnJvciBjYW4gYWxzb1xuICogYmUgYSBmdW5jdGlvbiByZXR1cm5pbmcgYSBzdHJpbmcuIFRoZSBGb3JtSXRlbSBvYmplY3QgaXMgcGFzc2VkIHRvIGFueSBWYWxpZGF0aW9uRXJyb3JzXG4gKiB0aGF0IGFyZSBmdW5jdGlvbnMsIHNvIGl0ZW0gc3BlY2lmaWMgaW5mb3JtYXRpb24gY2FuIGJlIHByb3ZpZGVkLlxuICogQGV4YW1wbGUge1xuICogbWF4OiBgVGhpcyBmaWVsZCdzIHZhbHVlIG11c3QgYmUgbGVzcy5gLFxuICogbWluOiAoaXRlbTogRm9ybUl0ZW1JbXBsPGFueT4pID0+IGluc3RhbmNlb2ZXaG9sZU51bWJlckl0ZW0oaXRlbSlcbiAqID8gYFRoaXMgZmllbGQncyB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAke2l0ZW0ubWluVmFsdWV9LmBcbiAqIDogYFRoaXMgZmllbGQncyB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIuYFxuICogfVxuICovXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6aW50ZXJmYWNlLW92ZXItdHlwZS1saXRlcmFsXG5leHBvcnQgdHlwZSBDdXN0b21FcnJvcnMgPSB7XG4gIFtpZDogc3RyaW5nXTogVmFsaWRhdGlvbkVycm9ycztcbn07XG5cbi8qKiBMaXN0IG9mIGRlZmF1bHQgZXJyb3IgbWVzc2FnZXMgdG8gZGlzcGxheSAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRVJST1JfTUVTU0FHRVM6IFZhbGlkYXRpb25FcnJvcnMgPSB7XG4gIGVtYWlsOiAkbG9jYWxpemVgVGhpcyBmaWVsZCBtdXN0IGluY2x1ZGUgYSB2YWxpZCBlbWFpbCBmb3JtYXQuYCxcbiAgbWF4OiAoaXRlbT86IEZvcm1JdGVtSW1wbDxudW1iZXI+ICYgeyBtYXhWYWx1ZTogbnVtYmVyOyBtaW5WYWx1ZTogbnVtYmVyIH0pID0+XG4gICAgIWlzUHJlc2VudChpdGVtKSB8fCAhaXNQcmVzZW50KGl0ZW0/Lm1heFZhbHVlKVxuICAgICAgPyAkbG9jYWxpemVgVGhpcyBmaWVsZCdzIHZhbHVlIG11c3QgYmUgbGVzcy5gXG4gICAgICA6IGlzUHJlc2VudChpdGVtPy5taW5WYWx1ZSkgPyAkbG9jYWxpemVgTWluIHZhbHVlOiAke2l0ZW0ubWluVmFsdWV9IC0gYCA6ICcnICsgJGxvY2FsaXplYE1heCB2YWx1ZTogJHtpdGVtLm1heFZhbHVlfWAsXG4gIG1heGxlbmd0aDogJGxvY2FsaXplYFRoaXMgZmllbGQgaGFzIGV4Y2VlZGVkIHRoZSBhbGxvd2VkIG1heGltdW0uYCxcbiAgbWF4U2VsZWN0ZWQ6IG51bGwsXG4gIG1pbjogKGl0ZW0/OiBGb3JtSXRlbUltcGw8bnVtYmVyPiAmIHsgbWF4VmFsdWU6IG51bWJlcjsgbWluVmFsdWU6IG51bWJlciB9KSA9PlxuICAgICFpc1ByZXNlbnQoaXRlbSkgfHwgIWlzUHJlc2VudChpdGVtPy5taW5WYWx1ZSlcbiAgICAgID8gJGxvY2FsaXplYFRoaXMgZmllbGQncyB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIuYFxuICAgICAgOiAkbG9jYWxpemVgTWluIFZhbHVlOiAke2l0ZW0ubWluVmFsdWV9YCArIGlzUHJlc2VudChpdGVtPy5tYXhWYWx1ZSkgPyAkbG9jYWxpemVgIC0gTWF4IFZhbHVlOiAke2l0ZW0ubWF4VmFsdWV9YCA6ICcnLFxuICBtaW5sZW5ndGg6ICRsb2NhbGl6ZWBUaGlzIGZpZWxkIGhhcyBub3QgbWV0IHRoZSByZXF1aXJlZCBtaW5pbXVtLmAsXG4gIG1pblNlbGVjdGVkOiBudWxsLFxuICBub25EaWdpdDogJGxvY2FsaXplYFRoaXMgZmllbGQncyB2YWx1ZSBtdXN0IGJlIG51bWVyaWMuYCxcbiAgcGF0dGVybjogJGxvY2FsaXplYFRoaXMgZmllbGQncyBpbnB1dCBkb2VzIG5vdCBtZWV0IHRoZSBhY2NlcHRlZCBwYXR0ZXJuLmAsXG4gIHBvc2l0aXZlOiAkbG9jYWxpemVgVGhpcyBmaWVsZCdzIHZhbHVlIGNhbm5vdCBiZSBuZWdhdGl2ZS5gLFxuICByZXF1aXJlZDogJGxvY2FsaXplYFRoaXMgZmllbGQgaXMgcmVxdWlyZWQuYCxcbiAgcmVxdWlyZWRUcnVlOiBgJGxvY2FsaXplVGhpcyBmaWVsZCdzIHZhbHVlIG11c3QgYmUgJ3RydWUnLmAsXG4gIHdob2xlTnVtYmVyOiAkbG9jYWxpemVgVGhpcyBmaWVsZCBjYW5ub3QgY29udGFpbiBhIGRlY2ltYWwuYCxcbiAgbWF0RGF0ZXBpY2tlclBhcnNlOiAkbG9jYWxpemVgVGhpcyBmaWVsZCdzIHZhbHVlIGlzIG5vdCBhbiBhY2NlcHRlZCBmb3JtYXQuYCxcbn07XG5cbmV4cG9ydCBjb25zdCBXRUJfRk9STV9DVVNUT01fRVJST1JTID0gbmV3IEluamVjdGlvblRva2VuPEN1c3RvbUVycm9ycz4oJ210bmFXZWJGb3JtQ3VzdG9tRm9ybUVycm9ycycpO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIE10bmFXZlVJU2VydmljZSB7XG4gIC8qKiBNYXAgb2YgYW5ub3RhdGlvbiBjb3VudHMgZm9yIGVhY2ggYW5ub3RhdGFibGUgaXRlbSAqL1xuICBwcml2YXRlIGFubm90YXRpb25zOiB7IFtpZDogc3RyaW5nXTogQmVoYXZpb3JTdWJqZWN0PG51bWJlciB8IG51bGw+IH0gPSB7fTtcbiAgLyoqIE1hcCBvZiBjb21wb25lbnRzIGluIHRoZSBNdG5hRm9ybSAqL1xuICBwcml2YXRlIGNvbXBvbmVudHM6IHsgW2luc3RhbmNlSWQ6IHN0cmluZ106IE10bmFXZkZvcm1JdGVtQ29tcG9uZW50IH0gPSB7fTtcbiAgLyoqIE1hcCBvZiBpdGVtLmRpc2FibGVkIHZhbHVlcyB0aGF0IGhhdmUgY2hhbmdlZCAqL1xuICBwcml2YXRlIGRpc2FibGVkU3RhdGU6IHsgW2luc3RhbmNlSWQ6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9O1xuICAvKiogTWFwIG9mIHRvZ2dsZXIgSUQncyBmb3IgY29tcG9uZW50cyB0aGF0IGhhdmUgbXVsdGlwbGUgdG9nZ2xlcnMgKi9cbiAgcHJpdmF0ZSBtdWx0aXBsZUVuYWJsZXJzOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiB7IFt0b2dnbGVySWQ6IHN0cmluZ106IHN0cmluZyB9IHwgbnVsbCB9ID0ge307XG4gIHByaXZhdGUgZXJyb3JzOiBDdXN0b21FcnJvcnM7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZywgQE9wdGlvbmFsKCkgQEluamVjdChXRUJfRk9STV9DVVNUT01fRVJST1JTKSBlcnJvcnM/OiBhbnkpIHtcbiAgICAvLyBXb3JrYXJvdW5kIGZvcjogTWV0YWRhdGEgY29sbGVjdGVkIGNvbnRhaW5zIGFuIGVycm9yIHRoYXQgd2lsbCBiZSByZXBvcnRlZCBhdCBydW50aW1lOiBDb3VsZCBub3QgcmVzb2x2ZSB0eXBlIEN1c3RvbUVycm9ycy5cbiAgICAvLyBzZWUgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDk1MTMzNTkvY291bGQtbm90LXJlc29sdmUtdHlwZS1kb2N1bWVudC1pbi1hbmd1bGFyNS81MzcxNTY0MiM1MzcxNTY0MlxuICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzIGFzIEN1c3RvbUVycm9ycztcbiAgfVxuXG4gIGdldERpc2FibGVkU3RhdGVzKCkge1xuICAgIHJldHVybiB7IC4uLnRoaXMuZGlzYWJsZWRTdGF0ZSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gZXJyb3IgbWVzc2FnZSBtYXRjaGluZyB0aGUgZXJyb3IgaWRcbiAgICogQHBhcmFtIGVycm9ySWQgSWQgb2YgdGhlIGVycm9yLCB0byBmaW5kIHRoZSBhc3NvY2lhdGVkIGVycm9yIG1lc3NhZ2VcbiAgICogQHBhcmFtIGl0ZW0gRm9ybUl0ZW0gdG8gcGFzcyB0byBWYWxpZGF0aW9uRXJyb3JzIHRoYXQgYXJlIGZ1bmN0aW9ucy4gRm9yIGluc3RhbmNlLFxuICAgKiB0aGlzIGlzIHVzZWZ1bCBmb3IgJ21pbicgJiAnbWF4JyB2YWx1ZSBsaW1pdHMgdG8gZGlzcGxheSBtb3JlIGhlbHBmdWwgbWVzc2FnZXNcbiAgICovXG4gIGdldEVycm9yKGVycm9ySWQ6IHN0cmluZywgaXRlbT86IEZvcm1JdGVtSW1wbDx1bmtub3duPik6IHN0cmluZyB7XG4gICAgLy8gZGVmYXVsdCB3aGVuIG5vIGN1c3RvbSBtZXNzYWdlIGV4aXN0c1xuICAgIGxldCBlcnJvciA9IERFRkFVTFRfRVJST1JfTUVTU0FHRVNbZXJyb3JJZF07XG4gICAgaWYgKCEhdGhpcy5lcnJvcnMgJiYgISFpdGVtKSB7XG4gICAgICAvLyBjaGVjayBmb3IgaW5zdGFuY2Ugc3BlY2lmaWMsIHZpYSBpbnN0YW5jZUlkXG4gICAgICBpZiAoaXNQcmVzZW50KHRoaXMuZXJyb3JzW2l0ZW0uaW5zdGFuY2VJZF0pICYmIGlzUHJlc2VudCh0aGlzLmVycm9yc1tpdGVtLmluc3RhbmNlSWRdW2Vycm9ySWRdKSkge1xuICAgICAgICBlcnJvciA9IHRoaXMuZXJyb3JzW2l0ZW0uaW5zdGFuY2VJZF1bZXJyb3JJZF07XG4gICAgICAgIC8vIGNoZWNrIGZvciBpdGVtIHNwZWNpZmljLCB2aWEgaXRlbUlkXG4gICAgICB9IGVsc2UgaWYgKGlzUHJlc2VudCh0aGlzLmVycm9yc1tpdGVtLml0ZW1JZF0pICYmIGlzUHJlc2VudCh0aGlzLmVycm9yc1tpdGVtLml0ZW1JZF1bZXJyb3JJZF0pKSB7XG4gICAgICAgIGVycm9yID0gdGhpcy5lcnJvcnNbaXRlbS5pdGVtSWRdW2Vycm9ySWRdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHlwZW9mIGVycm9yID09PSAnZnVuY3Rpb24nID8gZXJyb3IoaXRlbSkgOiBlcnJvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSByZWdpc3RlcmVkIGNvbXBvbmVudCBieSBpbnRhbmNlIGlkLlxuICAgKiBAcGFyYW0gaWQgdGhlIGluc3RhbmNlSWRcbiAgICogQHJldHVybnMgdGhlIHtAbGluayBGb3JtSXRlbUNvbXBvbmVudH0gdGhhdCByZXByZXNlbnRzIHRoYXQgSUQgb3IgdW5kZWZpbmVkIGlmIG5vdCByZWdpc3RlcmVkLlxuICAgKi9cbiAgZ2V0SXRlbShpZDogc3RyaW5nKTogTXRuYVdmRm9ybUl0ZW1Db21wb25lbnQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudHNbaWRdO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGluaXRpYWwgbWFwIG9mIGFubm90YXRpb24gY291bnRzLCBhbmQvb3IgcHVzaGVzIHRoZSBuZXcgY291bnQgb250byB0aGUgY29tcG9uZW50IG9ic2VydmFibGUgc3RyZWFtXG4gICAqIEBwYXJhbSBtYXAgQW5ub3RhdGFibGVOdW1iZXJNYXAgb2YgY291bnRzIG1hcHBlZCB0byB0aGVpciBhbm5vdGF0YWJsZUlkc1xuICAgKi9cbiAgcmVnaXN0ZXJBbm5vdGF0aW9ucyhtYXA6IEFubm90YXRhYmxlTnVtYmVyTWFwKSB7XG4gICAgZm9yIChjb25zdCBpZCBpbiBtYXApIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobWFwLCBpZCkpIHtcbiAgICAgICAgaWYgKCF0aGlzLmFubm90YXRpb25zW2lkXSkge1xuICAgICAgICAgIHRoaXMuYW5ub3RhdGlvbnNbaWRdID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXIgfCBudWxsPihtYXBbaWRdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmFubm90YXRpb25zW2lkXS5uZXh0KG1hcFtpZF0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1hcHMgYSBjb21wb25lbnQgdG8gaXRzIGl0ZW1zIGluc3RhbmNlSWQuXG4gICAqIEBwYXJhbSBjb21wb25lbnQgY29tcG9uZW50IGNhbGxpbmcgdGhpcyBtZXRob2QsIGkuZS4gJ3RoaXMnXG4gICAqL1xuICByZWdpc3RlclNlbGYoY29tcG9uZW50OiBNdG5hV2ZGb3JtSXRlbUNvbXBvbmVudCkge1xuICAgIHRoaXMuY29tcG9uZW50c1tjb21wb25lbnQuaXRlbS5pbnN0YW5jZUlkXSA9IGNvbXBvbmVudDtcbiAgICBpZiAoISFjb21wb25lbnQuaXRlbS5hbm5vdGF0YWJsZUlkICYmIGNvbXBvbmVudC5pdGVtLmFubm90YXRpb25FbmFibGVkKSB7XG4gICAgICBpZiAoIXRoaXMuYW5ub3RhdGlvbnNbY29tcG9uZW50Lml0ZW0uYW5ub3RhdGFibGVJZF0pIHtcbiAgICAgICAgdGhpcy5hbm5vdGF0aW9uc1tjb21wb25lbnQuaXRlbS5hbm5vdGF0YWJsZUlkXSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG4gICAgICB9XG4gICAgICBjb21wb25lbnQuYW5ub3RhdGlvbnMkID0gdGhpcy5hbm5vdGF0aW9uc1tjb21wb25lbnQuaXRlbS5hbm5vdGF0YWJsZUlkXS5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyBhIEZvcm1JdGVtJ3MgdmlzaWJsaXR5IGFuZCBlbmFibGUvZGlzYWJsZSBzdGF0ZVxuICAgKlxuICAgKiBAcGFyYW0gZW5hYmxlZEl0ZW1JZHMgYXJyYXkgb2YgY29tcG9uZW50IElEcyBmb3IgZW5hYmxlZCBpdGVtcy5cbiAgICogQHBhcmFtIGRpc2FibGVkSXRlbUlkcyBhcnJheSBvZiBjb21wb25lbnQgSURzIGZvciBkaXNhYmxlZCBpdGVtcy5cbiAgICogQHBhcmFtIGVuYWJsZWQgV2hldGhlciB0aGUgZW5hYmxlZEl0ZW1JZHMgYXJlIGVuYWJsZWQuXG4gICAqIEBwYXJhbSBjYWxsZXJJZCBpbnN0YW5jZUlkIG9mIHRoZSBpdGVtIGludm9raW5nIHRoaXMgZnVuY3Rpb25cbiAgICogQHBhcmFtIHJlc2V0IFdoZXRoZXIgdG8gcmVzZXQgdGhlIG11bHRpcGxlIGVuYWJsZXIgbWFwIG9mIHRoZSB0b2dnbGVkIGl0ZW1cbiAgICovXG4gIHRvZ2dsZUZvcm1JdGVtcyhlbmFibGVkSXRlbUlkczogQXJyYXk8c3RyaW5nPiwgZGlzYWJsZWRJdGVtSWRzOiBBcnJheTxzdHJpbmc+LCBlbmFibGVkOiBib29sZWFuLCBjYWxsZXJJZDogc3RyaW5nLCByZXNldCA9IGZhbHNlKSB7XG4gICAgaWYgKCghZW5hYmxlZEl0ZW1JZHMgfHwgIWVuYWJsZWRJdGVtSWRzLmxlbmd0aCkgJiYgKCFkaXNhYmxlZEl0ZW1JZHMgfHwgIWRpc2FibGVkSXRlbUlkcy5sZW5ndGgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGFsbElkcyA9IFtlbmFibGVkSXRlbUlkcywgZGlzYWJsZWRJdGVtSWRzXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsbElkcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaXRlbUlkcyA9IGFsbElkc1tpXTtcbiAgICAgIGNvbnN0IGlzRW5hYmxlZCA9IGkgPT09IDAgPyBlbmFibGVkIDogIWVuYWJsZWQ7XG4gICAgICBmb3IgKGNvbnN0IGlkIG9mIGl0ZW1JZHMpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5jb21wb25lbnRzW2lkXTtcbiAgICAgICAgLy8gSWYgY29tcG9uZW50IGlzIHJlZ2lzdGVyZWQsIHRvZ2dsZSBpdFxuICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgY29uc3QgaXRlbSA9IGNvbXBvbmVudC5pdGVtO1xuICAgICAgICAgIGNvbnN0IGhhc011bHRpcGxlRW5hYmxlcnMgPSBpc0NvbmRpdGlvbmFsSXRlbShpdGVtKSAmJiBpdGVtLmNvbmRpdGlvbiA/IGl0ZW0uY29uZGl0aW9uLml0ZW1JZHMubGVuZ3RoID4gMSA6IGZhbHNlO1xuICAgICAgICAgIC8vIElmIGl0ZW0gaGFzIG1vcmUgdGhhbiAxIGVuYWJsZXIsIGhhbmRsZSBtdWx0aXBsZSBlbmFibGVyc1xuICAgICAgICAgIGlmIChoYXNNdWx0aXBsZUVuYWJsZXJzKSB7XG4gICAgICAgICAgICBpZiAocmVzZXQpIHtcbiAgICAgICAgICAgICAgdGhpcy5tdWx0aXBsZUVuYWJsZXJzW2l0ZW0uaW5zdGFuY2VJZF0gPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgYSBtYXAgaGFzIG5vdCBiZWVuIHJlZ2lzdGVyZWQsIHRoZW4gYnVpbGQgdXAgYSBtYXAgdG8gcmVnaXN0ZXJcbiAgICAgICAgICAgIC8vIFNob3VsZCBvbmx5IGhhcHBlbiB0aGUgZmlyc3QgdGltZSBhbiBpdGVtIGlzIHRvZ2dsZWQuXG4gICAgICAgICAgICBpZiAoIXRoaXMubXVsdGlwbGVFbmFibGVyc1tpdGVtLmluc3RhbmNlSWRdICYmIGlzQ29uZGl0aW9uYWxJdGVtKGl0ZW0pKSB7XG4gICAgICAgICAgICAgIHRoaXMubXVsdGlwbGVFbmFibGVyc1tpdGVtLmluc3RhbmNlSWRdID0gdGhpcy5fcmVnaXN0ZXJDdXJyZW50RW5hYmxlcnMoaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBoYW5kbGUgTXVsdGlwbGUgRW5hYmxlcnNcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZU11bHRpcGxlRW5hYmxlcnMoY29tcG9uZW50LCBpc0VuYWJsZWQsIGNhbGxlcklkKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTm90IG11bHRpcGxlIGVuYWJsZXJzXG4gICAgICAgICAgICB0aGlzLl90b2dnbGVEaXNhYmxlZFN0YXRlQW5kQ29udHJvbChjb21wb25lbnQsIGlzRW5hYmxlZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1t0b2dnbGVGb3JtSXRlbXNdIGNvbXBvbmVudCBoYXMgbm90IGJlZW4gcmVnaXN0ZXJkJywgaWQsIGVuYWJsZWQsIGNhbGxlcklkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgbWFwIG9mIGFsbCBJRHMgY3VycmVudGx5IGluZmx1ZW5jaW5nIGFuIGl0ZW0uXG4gICAqIEBwYXJhbSB0b2dnbGVkSXRlbSBpdGVtIGJlaW5nIHRvZ2dsZWRcbiAgICovXG4gIHByaXZhdGUgX3JlZ2lzdGVyQ3VycmVudEVuYWJsZXJzKHRvZ2dsZWRJdGVtOiBDb25kaXRpb25hbEl0ZW0pOiB7IFtjYWxsZXJJZDogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIGNvbnN0IGVuYWJsZXJzOiB7IFtjYWxsZXJJZDogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgICBjb25zdCBhbGxJZHMgPSB0b2dnbGVkSXRlbS5jb25kaXRpb24/Lml0ZW1JZHMgfHwgW107XG5cbiAgICBmb3IgKGNvbnN0IGlkIG9mIGFsbElkcykge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5jb21wb25lbnRzW2lkXTtcbiAgICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzQ3VycmVudGx5VG9nZ2xpbmcoY29tcG9uZW50LCB0b2dnbGVkSXRlbS5pbnN0YW5jZUlkKSkge1xuICAgICAgICAgIGVuYWJsZXJzW2NvbXBvbmVudC5pdGVtLmluc3RhbmNlSWRdID0gY29tcG9uZW50Lml0ZW0uaW5zdGFuY2VJZDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignW3JlZ2lzdGVyQ3VycmVudEVuYWJsZXJzXSBjb21wb25lbnQgaGFzIG5vdCBiZWVuIHJlZ2lzdGVyZWQuJywgaWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlbmFibGVycztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIG1hcCBvZiBjb21wb25lbnRzLiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYnkgdGhlIGZvcm0gd2hlblxuICAgKiBpdCBpcyBkZXN0cm95ZWQuXG4gICAqL1xuICByZXNldENvbXBvbmVudE1hcCgpIHtcbiAgICB0aGlzLmFubm90YXRpb25zID0ge307XG4gICAgdGhpcy5jb21wb25lbnRzID0ge307XG4gICAgdGhpcy5kaXNhYmxlZFN0YXRlID0ge307XG4gICAgdGhpcy5tdWx0aXBsZUVuYWJsZXJzID0ge307XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiBhbiBpbmZsdWVuY2VyIGlzIGN1cnJlbnRseSB0b2dnbGluZyB0aGUgc3BlY2lmaWVkIHRvZ2dsZWRJdGVtSWQuXG4gICAqIEBwYXJhbSBpbmZsdWVuY2VyIEl0ZW0gdG8gY2hlY2sgd2hldGhlciBpdCdzIGN1cnJlbnRseSBpbmZsdWVuY2luZyB0aGUgdG9nZ2xlZEl0ZW1JZFxuICAgKiBAcGFyYW0gdG9nZ2xlZElkIEluc3RhbmNlSWQgb2YgdGhlIGl0ZW0gYmVpbmcgdG9nZ2xlZFxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBpbmZsdWVuY2VyIGlzIGN1cnJlbnRseSB0b2dnbGluZyB0aGUgdG9nZ2xlZCBpdGVtXG4gICAqL1xuICBwcml2YXRlIF9pc0N1cnJlbnRseVRvZ2dsaW5nKGluZmx1ZW5jZXI6IE10bmFXZkZvcm1JdGVtQ29tcG9uZW50LCB0b2dnbGVkSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGl0ZW0gPSBpbmZsdWVuY2VyLml0ZW07XG4gICAgLy8gSXRlbSBoYXMgc2luZ2xlIG9wdGlvbiBwcm9wZXJ0eSwgc28gY2hlY2sgaWYgc2VsZWN0ZWQsIG9yIGl0ZW0udmFsdWUgaXMgJ3RydWUnXG4gICAgaWYgKGlzT3B0aW9uSXRlbUltcGwoaXRlbSkpIHtcbiAgICAgIHJldHVybiBpdGVtLm9wdGlvbi5zZWxlY3RlZCB8fCAhIWl0ZW0udmFsdWUgfHwgISFpbmZsdWVuY2VyLmNvbnRyb2w/LnZhbHVlO1xuICAgIH0gZWxzZSBpZiAoaXNPcHRpb25Hcm91cEl0ZW1JbXBsKGl0ZW0pKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGluZmx1ZW5jZXIuY29udHJvbD8udmFsdWUgPz8gaXRlbS52YWx1ZTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAvLyBmaW5kIHRoZSBpbmRleCBvZiBvcHRpb25zIHRoYXQgY29udGFpbiB0aGUgJ3RvZ2dsZWRJZCcgaW4gdGhlaXIgZW5hYmxlZEl0ZW1zXG4gICAgICAgIC8vICYgY2hlY2sgaWYgYXQgbGVhc3QgMSBpcyBzZWxlY3RlZCwgb3IgaXRzICd0cnVlJyBpbiB0aGUgdmFsdWVcbiAgICAgICAgY29uc3Qgb3B0aW9uSW5kZXhlcyA9IGl0ZW0ub3B0aW9ucy5tYXAoKG8sIGkpID0+IChvLmVuYWJsZWRJdGVtcy5zb21lKChpZCkgPT4gaWQgPT09IHRvZ2dsZWRJZCkgPyBpIDogbnVsbCkpLmZpbHRlcihpc1ByZXNlbnQpO1xuICAgICAgICByZXR1cm4gb3B0aW9uSW5kZXhlcy5zb21lKChpKSA9PiAhIXZhbHVlW2ldKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgLy8gaWYgdGhlIHZhbHVlIGlzIGEgc2luZ2xlIHZhbHVlLCBnZXQgdGhlIGVuYWJsaW5nIG9wdGlvbiBpZHMgYW5kIGNoZWNrIGZvciB0aGUgdmFsdWUgaW4gdGhlbVxuICAgICAgICByZXR1cm4gaXRlbS5vcHRpb25zLnNvbWUoKG8pID0+IG8ub3B0aW9uLmlkID09PSB2YWx1ZSAmJiBvLmVuYWJsZWRJdGVtcy5zb21lKChpZCkgPT4gaWQgPT09IHRvZ2dsZWRJZCkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBjb21wb25lbnQgdmlzaWJpbGl0eSBmb3IgYSBGb3JtSXRlbSB3aXRoIG11bHRpcGxlIGVuYWJsZXJzIGluIGl0cyBjb25kaXRpb25cbiAgICogQHBhcmFtIGNvbXBvbmVudCBGb3JtSXRlbUNvbXBvbmVudCBiZWluZyB0b2dnbGVkXG4gICAqIEBwYXJhbSBlbmFibGVkIFdoZXRoZXIgdGhlIGNvbXBvbmVudCBpcyBiZWluZyBlbmFibGVkXG4gICAqIEBwYXJhbSBjYWxsZXJJZCBJRCBvZiB0aGUgY2FsbGVyIHRvZ2dsaW5nIHRoaXMgY29tcG9uZW50XG4gICAqL1xuICBwcml2YXRlIF9oYW5kbGVNdWx0aXBsZUVuYWJsZXJzKGNvbXBvbmVudDogTXRuYVdmRm9ybUl0ZW1Db21wb25lbnQsIGVuYWJsZWQ6IGJvb2xlYW4sIGNhbGxlcklkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBpdGVtID0gY29tcG9uZW50Lml0ZW07XG4gICAgY29uc3QgZW5hYmxlcnMgPSB7IC4uLnRoaXMubXVsdGlwbGVFbmFibGVyc1tpdGVtLmluc3RhbmNlSWRdIH07XG4gICAgbGV0IGlzRW5hYmxlZDogYm9vbGVhbjtcbiAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgZW5hYmxlcnNbY2FsbGVySWRdID0gY2FsbGVySWQ7XG4gICAgICBpc0VuYWJsZWQgPVxuICAgICAgICBpc0NvbmRpdGlvbmFsSXRlbShpdGVtKSAmJlxuICAgICAgICAhIWl0ZW0uY29uZGl0aW9uICYmXG4gICAgICAgICghaXRlbS5jb25kaXRpb24uYWxsUmVxdWlyZWQgfHwgaXRlbS5jb25kaXRpb24uaXRlbUlkcy5ldmVyeSgoaWQpID0+ICEhZW5hYmxlcnNbaWRdKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSBlbmFibGVyc1tjYWxsZXJJZF07XG4gICAgICBpc0VuYWJsZWQgPSAhKChpc0NvbmRpdGlvbmFsSXRlbShpdGVtKSAmJiBpdGVtLmNvbmRpdGlvbj8uYWxsUmVxdWlyZWQpIHx8ICFPYmplY3Qua2V5cyhlbmFibGVycykubGVuZ3RoKTtcbiAgICB9XG4gICAgLy8gSWYgZW5hYmxlZCA9PT0gZGlzYWJsZWQsIHRoZW4gdGhlIHN0YXRlIGhhcyBjaGFuZ2VkXG4gICAgaWYgKHRoaXMuX2lzRGlzYWJsZWQoaXRlbSkgPT09IGlzRW5hYmxlZCkge1xuICAgICAgdGhpcy5fdG9nZ2xlRGlzYWJsZWRTdGF0ZUFuZENvbnRyb2woY29tcG9uZW50LCBpc0VuYWJsZWQpO1xuICAgIH1cbiAgICAvLyBzZXQgdGhlIG5ldyBlbmFibGVyIG1hcFxuICAgIHRoaXMubXVsdGlwbGVFbmFibGVyc1tpdGVtLmluc3RhbmNlSWRdID0gZW5hYmxlcnM7XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgY29udHJvbCBvbiBhIEZvcm1JdGVtQ29tcG9uZW50XG4gICAqIEBwYXJhbSBjb21wb25lbnQgRm9ybUl0ZW1Db21wb25lbnQgdG8gZW5hYmxlIG9yIGRpc2FibGUgaXRzIGNvbnRyb2xcbiAgICogQHBhcmFtIGVuYWJsZWQgd2hldGhlciB0byBlbmFibGUgdGhlIGNvbnRyb2xcbiAgICovXG4gIHByaXZhdGUgX3RvZ2dsZUNvbnRyb2xTdGF0ZShjb21wb25lbnQ6IE10bmFXZkZvcm1JdGVtQ29tcG9uZW50LCBlbmFibGVkOiBib29sZWFuKSB7XG4gICAgaWYgKGVuYWJsZWQgJiYgIWNvbXBvbmVudC5jb250cm9sPy5lbmFibGVkKSB7XG4gICAgICAvLyBFbmFibGUgdGhlIGNvbnRyb2wgaWYgaXQgaXNuJ3QgYWxyZWFkeVxuICAgICAgaWYgKGNvbXBvbmVudC5jb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XG4gICAgICAgIHRoaXMuX2VuYWJsZUluZGl2aWR1YWxDb250cm9scyhjb21wb25lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29tcG9uZW50LmNvbnRyb2w/LmVuYWJsZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIWVuYWJsZWQgJiYgY29tcG9uZW50LmNvbnRyb2w/LmVuYWJsZWQpIHtcbiAgICAgIC8vIERpc2FibGUgdGhlIGNvbnRyb2wgaWYgaXQgaXNuJ3QgYWxyZWFkeVxuICAgICAgY29tcG9uZW50LmNvbnRyb2wuZGlzYWJsZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIGJvdGggdGhlIGNvbXBvbmVudCB2aXNpYmxpdHkgYW5kIHRoZSBjb250cm9sJ3MgZW5hYmxlL2Rpc2FibGUgc3RhdHVzXG4gICAqIEBwYXJhbSBjb21wb25lbnQgRm9ybUl0ZW1Db21wb25lbnQgdG8gc2hvdyBvciBoaWRlIGFuZCBlbmFibGUgb3IgZGlzYWJsZVxuICAgKiBAcGFyYW0gZW5hYmxlZCB3aGV0aGVyIHRvIHNob3cgdGhlIGNvbXBvbmVudCBhbmQgd2hldGhlciB0byBlbmFibGUgdGhlIGNvbXBvbmVudFxuICAgKi9cbiAgcHJpdmF0ZSBfdG9nZ2xlRGlzYWJsZWRTdGF0ZUFuZENvbnRyb2woY29tcG9uZW50OiBNdG5hV2ZGb3JtSXRlbUNvbXBvbmVudCwgZW5hYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuZGlzYWJsZWRTdGF0ZVtjb21wb25lbnQuaXRlbS5pbnN0YW5jZUlkXSA9ICFlbmFibGVkO1xuICAgIHRoaXMuX3RvZ2dsZUNvbnRyb2xTdGF0ZShjb21wb25lbnQsIGVuYWJsZWQpO1xuICAgIGlmIChpc0NvbmRpdGlvbmFsSXRlbShjb21wb25lbnQuaXRlbSkgJiYgY29tcG9uZW50Lml0ZW0uaGlkZU9uRGlzYWJsZSkge1xuICAgICAgY29tcG9uZW50LnZpc2libGUgPSBlbmFibGVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIGNvbnRyb2xzIGluZGl2aWR1YWxseSB1c2luZyByZWN1cnNpb24uXG4gICAqIEZvcm1Hcm91cHMgc2hvdWxkIG9ubHkgZXhpc3QgZm9yIGl0ZW1zIHdpdGggJ2l0ZW1zJyBhcnJheXMsIG9yXG4gICAqIGlmIHRoZSBjb21wb25lbnQgaXMgYSBCYXNlUGFyZW50SXRlbUNvbnRyb2xcbiAgICogQHBhcmFtIGNvbXAgRm9ybUl0ZW1Db21wb25lbnRcbiAgICovXG4gIHByaXZhdGUgX2VuYWJsZUluZGl2aWR1YWxDb250cm9scyhjb21wOiBNdG5hV2ZGb3JtSXRlbUNvbXBvbmVudCkge1xuICAgIGNvbnN0IGdyb3VwID0gY29tcC5jb250cm9sIGFzIEZvcm1Hcm91cDtcblxuICAgIGlmIChpc09wdGlvbkl0ZW1JbXBsKGNvbXAuaXRlbSkgfHwgaXNPcHRpb25Hcm91cEl0ZW1JbXBsKGNvbXAuaXRlbSkpIHtcbiAgICAgIGNvbnN0IG1hcCA9IGNvbXAuaXRlbS5vcHRpb25JdGVtTWFwO1xuICAgICAgY29uc3Qgc2VsZiA9IGdyb3VwLmdldChjb21wLml0ZW0uaW5zdGFuY2VJZCk7XG4gICAgICBzZWxmPy5lbmFibGUoKTtcbiAgICAgIGZvciAoY29uc3Qgb3B0aW9uSWQgaW4gbWFwKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobWFwLCBvcHRpb25JZCkpIHtcbiAgICAgICAgICBjb25zdCBjaGlsZENvbXAgPSB0aGlzLmNvbXBvbmVudHNbbWFwW29wdGlvbklkXS5pbnN0YW5jZUlkXTtcbiAgICAgICAgICBpZiAoIXRoaXMuX2lzRGlzYWJsZWQoY2hpbGRDb21wLml0ZW0pKSB7XG4gICAgICAgICAgICB0aGlzLl90b2dnbGVDb250cm9sU3RhdGUoY2hpbGRDb21wLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzVHlwZTx7IGl0ZW1zOiBGb3JtSXRlbUltcGw8dW5rbm93bj5bXSB9Pihjb21wLml0ZW0sICdpdGVtcycpICYmIGNvbXAuaXRlbS5pdGVtcy5sZW5ndGgpIHtcbiAgICAgIC8vIEl0ZW0gbXVzdCBoYXZlICdpdGVtcycgYXJyYXlcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBjb21wLml0ZW0uaXRlbXMpIHtcbiAgICAgICAgY29uc3QgY2hpbGRDb21wID0gdGhpcy5jb21wb25lbnRzW2l0ZW0uaW5zdGFuY2VJZF07XG4gICAgICAgIGlmICghdGhpcy5faXNEaXNhYmxlZChpdGVtKSkge1xuICAgICAgICAgIHRoaXMuX3RvZ2dsZUNvbnRyb2xTdGF0ZShjaGlsZENvbXAsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIGEgY29tcG9uZW50IGlzIGRpc2FibGVkLiBQcmlvcml0aXplcyB0aGUgZGlzYWJsZWRTdGF0ZSB2YWx1ZSxcbiAgICogaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UgcmV0dXJucyB0aGUgaXRlbSdzIHByZXZpb3VzIGRpc2FibGVkIHZhbHVlXG4gICAqIEBwYXJhbSBpdGVtIGl0ZW0gdG8gY2hlY2sgZm9yIGl0cyBkaXNhYmxlZCBzdGF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfaXNEaXNhYmxlZChpdGVtOiBDb25kaXRpb25hbEl0ZW0gfCBGb3JtSXRlbSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGV4aXN0c0luRGlzYWJsZWRTdGF0TWFwID0gaXNQcmVzZW50KHRoaXMuZGlzYWJsZWRTdGF0ZVtpdGVtLmluc3RhbmNlSWRdKTtcbiAgICBpZiAoIWV4aXN0c0luRGlzYWJsZWRTdGF0TWFwKSB7XG4gICAgICByZXR1cm4gaXNDb25kaXRpb25hbEl0ZW0oaXRlbSkgPyBpdGVtLmRpc2FibGVkIDogZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkU3RhdGVbaXRlbS5pbnN0YW5jZUlkXTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
337
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dlYi1mb3JtLWFuZ3VsYXIvc3JjL2xpYi9zZXJ2aWNlcy91aS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFFLFNBQVMsRUFBb0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVsRCxPQUFPLEVBQTJDLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDeEksT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7O0FBbUJ2QyxnREFBZ0Q7QUFDaEQsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQXFCO0lBQ3RELEtBQUssRUFBRSxTQUFTLENBQUEsK0NBQStDO0lBQy9ELEdBQUcsRUFBRSxDQUFDLElBQW9FLEVBQUUsRUFBRSxDQUM1RSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsUUFBUSxDQUFDO1FBQzVDLENBQUMsQ0FBQyxTQUFTLENBQUEsa0NBQWtDO1FBQzdDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFFBQVEsQ0FBQztZQUMzQixDQUFDLENBQUMsU0FBUyxDQUFBLGNBQWMsSUFBSSxDQUFDLFFBQVEsS0FBSztZQUMzQyxDQUFDLENBQUMsRUFBRSxHQUFHLFNBQVMsQ0FBQSxjQUFjLElBQUksQ0FBQyxRQUFRLEVBQUU7SUFDakQsU0FBUyxFQUFFLFNBQVMsQ0FBQSw4Q0FBOEM7SUFD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Q0FBQztTQUN4RDthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUM1QztJQUNILENBQUM7OzZHQXBTVSxlQUFlLDJDQVlpQyxzQkFBc0I7aUhBWnRFLGVBQWUsY0FERixNQUFNOzRGQUNuQixlQUFlO2tCQUQzQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBYVEsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IGlzUHJlc2VudCwgaXNUeXBlIH0gZnJvbSAnQG10bmEvY29yZS10cyc7XG5pbXBvcnQgeyBBbm5vdGF0YWJsZU51bWJlck1hcCB9IGZyb20gJ0BtdG5hL3Bvam8tc29jaWFsLWFuZ3VsYXInO1xuaW1wb3J0IHsgQ29uZGl0aW9uYWxJdGVtLCBGb3JtSXRlbSwgRm9ybUl0ZW1JbXBsLCBpc0NvbmRpdGlvbmFsSXRlbSwgaXNPcHRpb25Hcm91cEl0ZW1JbXBsLCBpc09wdGlvbkl0ZW1JbXBsIH0gZnJvbSAnQG10bmEvd2ViLWZvcm0tdHMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE10bmFXZkZvcm1JdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9mb3JtLWl0ZW0vZm9ybS1pdGVtLmNvbXBvbmVudCc7XG5cbi8qKiBSZWdpc3RyeSBvZiBjdXN0b20gZXJyb3IgbWVzc2FnZXMgZm9yIGEgc3BlY2lmaWMgZm9ybSBpdGVtLiBBIGN1c3RvbSBlcnJvciBjYW4gYWxzb1xuICogYmUgYSBmdW5jdGlvbiByZXR1cm5pbmcgYSBzdHJpbmcuIFRoZSBGb3JtSXRlbSBvYmplY3QgaXMgcGFzc2VkIHRvIGFueSBWYWxpZGF0aW9uRXJyb3JzXG4gKiB0aGF0IGFyZSBmdW5jdGlvbnMsIHNvIGl0ZW0gc3BlY2lmaWMgaW5mb3JtYXRpb24gY2FuIGJlIHByb3ZpZGVkLlxuICogQGV4YW1wbGUge1xuICogbWF4OiBgVGhpcyBmaWVsZCdzIHZhbHVlIG11c3QgYmUgbGVzcy5gLFxuICogbWluOiAoaXRlbTogRm9ybUl0ZW1JbXBsPGFueT4pID0+IGluc3RhbmNlb2ZXaG9sZU51bWJlckl0ZW0oaXRlbSlcbiAqID8gYFRoaXMgZmllbGQncyB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAke2l0ZW0ubWluVmFsdWV9LmBcbiAqIDogYFRoaXMgZmllbGQncyB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIuYFxuICogfVxuICovXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6aW50ZXJmYWNlLW92ZXItdHlwZS1saXRlcmFsXG5leHBvcnQgdHlwZSBDdXN0b21FcnJvcnMgPSB7XG4gIFtpZDogc3RyaW5nXTogVmFsaWRhdGlvbkVycm9ycztcbn07XG5cbi8qKiBMaXN0IG9mIGRlZmF1bHQgZXJyb3IgbWVzc2FnZXMgdG8gZGlzcGxheSAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRVJST1JfTUVTU0FHRVM6IFZhbGlkYXRpb25FcnJvcnMgPSB7XG4gIGVtYWlsOiAkbG9jYWxpemVgVGhpcyBmaWVsZCBtdXN0IGluY2x1ZGUgYSB2YWxpZCBlbWFpbCBmb3JtYXQuYCxcbiAgbWF4OiAoaXRlbT86IEZvcm1JdGVtSW1wbDxudW1iZXI+ICYgeyBtYXhWYWx1ZTogbnVtYmVyOyBtaW5WYWx1ZTogbnVtYmVyIH0pID0+XG4gICAgIWlzUHJlc2VudChpdGVtKSB8fCAhaXNQcmVzZW50KGl0ZW0/Lm1heFZhbHVlKVxuICAgICAgPyAkbG9jYWxpemVgVGhpcyBmaWVsZCdzIHZhbHVlIG11c3QgYmUgbGVzcy5gXG4gICAgICA6IGlzUHJlc2VudChpdGVtPy5taW5WYWx1ZSlcbiAgICAgID8gJGxvY2FsaXplYE1pbiB2YWx1ZTogJHtpdGVtLm1pblZhbHVlfSAtIGBcbiAgICAgIDogJycgKyAkbG9jYWxpemVgTWF4IHZhbHVlOiAke2l0ZW0ubWF4VmFsdWV9YCxcbiAgbWF4bGVuZ3RoOiAkbG9jYWxpemVgVGhpcyBmaWVsZCBoYXMgZXhjZWVkZWQgdGhlIGFsbG93ZWQgbWF4aW11bS5gLFxuICBtYXhTZWxlY3RlZDogbnVsbCxcbiAgbWluOiAoaXRlbT86IEZvcm1JdGVtSW1wbDxudW1iZXI+ICYgeyBtYXhWYWx1ZTogbnVtYmVyOyBtaW5WYWx1ZTogbnVtYmVyIH0pID0+XG4gICAgIWlzUHJlc2VudChpdGVtKSB8fCAhaXNQcmVzZW50KGl0ZW0/Lm1pblZhbHVlKVxuICAgICAgPyAkbG9jYWxpemVgVGhpcyBmaWVsZCdzIHZhbHVlIG11c3QgYmUgZ3JlYXRlci5gXG4gICAgICA6ICRsb2NhbGl6ZWBNaW4gVmFsdWU6ICR7aXRlbS5taW5WYWx1ZX1gICsgaXNQcmVzZW50KGl0ZW0/Lm1heFZhbHVlKVxuICAgICAgPyAkbG9jYWxpemVgIC0gTWF4IFZhbHVlOiAke2l0ZW0ubWF4VmFsdWV9YFxuICAgICAgOiAnJyxcbiAgbWlubGVuZ3RoOiAkbG9jYWxpemVgVGhpcyBmaWVsZCBoYXMgbm90IG1ldCB0aGUgcmVxdWlyZWQgbWluaW11bS5gLFxuICBtaW5TZWxlY3RlZDogbnVsbCxcbiAgbm9uRGlnaXQ6ICRsb2NhbGl6ZWBUaGlzIGZpZWxkJ3MgdmFsdWUgbXVzdCBiZSBudW1lcmljLmAsXG4gIHBhdHRlcm46ICRsb2NhbGl6ZWBUaGlzIGZpZWxkJ3MgaW5wdXQgZG9lcyBub3QgbWVldCB0aGUgYWNjZXB0ZWQgcGF0dGVybi5gLFxuICBwb3NpdGl2ZTogJGxvY2FsaXplYFRoaXMgZmllbGQncyB2YWx1ZSBjYW5ub3QgYmUgbmVnYXRpdmUuYCxcbiAgcmVxdWlyZWQ6ICRsb2NhbGl6ZWBUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLmAsXG4gIHJlcXVpcmVkVHJ1ZTogYCRsb2NhbGl6ZVRoaXMgZmllbGQncyB2YWx1ZSBtdXN0IGJlICd0cnVlJy5gLFxuICB3aG9sZU51bWJlcjogJGxvY2FsaXplYFRoaXMgZmllbGQgY2Fubm90IGNvbnRhaW4gYSBkZWNpbWFsLmAsXG4gIG1hdERhdGVwaWNrZXJQYXJzZTogJGxvY2FsaXplYFRoaXMgZmllbGQncyB2YWx1ZSBpcyBub3QgYW4gYWNjZXB0ZWQgZm9ybWF0LmAsXG59O1xuXG5leHBvcnQgY29uc3QgV0VCX0ZPUk1fQ1VTVE9NX0VSUk9SUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxDdXN0b21FcnJvcnM+KCdtdG5hV2ViRm9ybUN1c3RvbUZvcm1FcnJvcnMnKTtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBNdG5hV2ZVSVNlcnZpY2Uge1xuICAvKiogTWFwIG9mIGFubm90YXRpb24gY291bnRzIGZvciBlYWNoIGFubm90YXRhYmxlIGl0ZW0gKi9cbiAgcHJpdmF0ZSBhbm5vdGF0aW9uczogeyBbaWQ6IHN0cmluZ106IEJlaGF2aW9yU3ViamVjdDxudW1iZXIgfCBudWxsPiB9ID0ge307XG4gIC8qKiBNYXAgb2YgY29tcG9uZW50cyBpbiB0aGUgTXRuYUZvcm0gKi9cbiAgcHJpdmF0ZSBjb21wb25lbnRzOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBNdG5hV2ZGb3JtSXRlbUNvbXBvbmVudCB9ID0ge307XG4gIC8qKiBNYXAgb2YgaXRlbS5kaXNhYmxlZCB2YWx1ZXMgdGhhdCBoYXZlIGNoYW5nZWQgKi9cbiAgcHJpdmF0ZSBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH0gPSB7fTtcbiAgLyoqIE1hcCBvZiB0b2dnbGVyIElEJ3MgZm9yIGNvbXBvbmVudHMgdGhhdCBoYXZlIG11bHRpcGxlIHRvZ2dsZXJzICovXG4gIHByaXZhdGUgbXVsdGlwbGVFbmFibGVyczogeyBbaW5zdGFuY2VJZDogc3RyaW5nXTogeyBbdG9nZ2xlcklkOiBzdHJpbmddOiBzdHJpbmcgfSB8IG51bGwgfSA9IHt9O1xuICBwcml2YXRlIGVycm9yczogQ3VzdG9tRXJyb3JzO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csIEBPcHRpb25hbCgpIEBJbmplY3QoV0VCX0ZPUk1fQ1VTVE9NX0VSUk9SUykgZXJyb3JzPzogYW55KSB7XG4gICAgLy8gV29ya2Fyb3VuZCBmb3I6IE1ldGFkYXRhIGNvbGxlY3RlZCBjb250YWlucyBhbiBlcnJvciB0aGF0IHdpbGwgYmUgcmVwb3J0ZWQgYXQgcnVudGltZTogQ291bGQgbm90IHJlc29sdmUgdHlwZSBDdXN0b21FcnJvcnMuXG4gICAgLy8gc2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQ5NTEzMzU5L2NvdWxkLW5vdC1yZXNvbHZlLXR5cGUtZG9jdW1lbnQtaW4tYW5ndWxhcjUvNTM3MTU2NDIjNTM3MTU2NDJcbiAgICB0aGlzLmVycm9ycyA9IGVycm9ycyBhcyBDdXN0b21FcnJvcnM7XG4gIH1cblxuICBnZXREaXNhYmxlZFN0YXRlcygpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLmRpc2FibGVkU3RhdGUgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGVycm9yIG1lc3NhZ2UgbWF0Y2hpbmcgdGhlIGVycm9yIGlkXG4gICAqIEBwYXJhbSBlcnJvcklkIElkIG9mIHRoZSBlcnJvciwgdG8gZmluZCB0aGUgYXNzb2NpYXRlZCBlcnJvciBtZXNzYWdlXG4gICAqIEBwYXJhbSBpdGVtIEZvcm1JdGVtIHRvIHBhc3MgdG8gVmFsaWRhdGlvbkVycm9ycyB0aGF0IGFyZSBmdW5jdGlvbnMuIEZvciBpbnN0YW5jZSxcbiAgICogdGhpcyBpcyB1c2VmdWwgZm9yICdtaW4nICYgJ21heCcgdmFsdWUgbGltaXRzIHRvIGRpc3BsYXkgbW9yZSBoZWxwZnVsIG1lc3NhZ2VzXG4gICAqL1xuICBnZXRFcnJvcihlcnJvcklkOiBzdHJpbmcsIGl0ZW0/OiBGb3JtSXRlbUltcGw8dW5rbm93bj4pOiBzdHJpbmcge1xuICAgIC8vIGRlZmF1bHQgd2hlbiBubyBjdXN0b20gbWVzc2FnZSBleGlzdHNcbiAgICBsZXQgZXJyb3IgPSBERUZBVUxUX0VSUk9SX01FU1NBR0VTW2Vycm9ySWRdO1xuICAgIGlmICghIXRoaXMuZXJyb3JzICYmICEhaXRlbSkge1xuICAgICAgLy8gY2hlY2sgZm9yIGluc3RhbmNlIHNwZWNpZmljLCB2aWEgaW5zdGFuY2VJZFxuICAgICAgaWYgKGlzUHJlc2VudCh0aGlzLmVycm9yc1tpdGVtLmluc3RhbmNlSWRdKSAmJiBpc1ByZXNlbnQodGhpcy5lcnJvcnNbaXRlbS5pbnN0YW5jZUlkXVtlcnJvcklkXSkpIHtcbiAgICAgICAgZXJyb3IgPSB0aGlzLmVycm9yc1tpdGVtLmluc3RhbmNlSWRdW2Vycm9ySWRdO1xuICAgICAgICAvLyBjaGVjayBmb3IgaXRlbSBzcGVjaWZpYywgdmlhIGl0ZW1JZFxuICAgICAgfSBlbHNlIGlmIChpc1ByZXNlbnQodGhpcy5lcnJvcnNbaXRlbS5pdGVtSWRdKSAmJiBpc1ByZXNlbnQodGhpcy5lcnJvcnNbaXRlbS5pdGVtSWRdW2Vycm9ySWRdKSkge1xuICAgICAgICBlcnJvciA9IHRoaXMuZXJyb3JzW2l0ZW0uaXRlbUlkXVtlcnJvcklkXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiBlcnJvciA9PT0gJ2Z1bmN0aW9uJyA/IGVycm9yKGl0ZW0pIDogZXJyb3I7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgcmVnaXN0ZXJlZCBjb21wb25lbnQgYnkgaW50YW5jZSBpZC5cbiAgICogQHBhcmFtIGlkIHRoZSBpbnN0YW5jZUlkXG4gICAqIEByZXR1cm5zIHRoZSB7QGxpbmsgRm9ybUl0ZW1Db21wb25lbnR9IHRoYXQgcmVwcmVzZW50cyB0aGF0IElEIG9yIHVuZGVmaW5lZCBpZiBub3QgcmVnaXN0ZXJlZC5cbiAgICovXG4gIGdldEl0ZW0oaWQ6IHN0cmluZyk6IE10bmFXZkZvcm1JdGVtQ29tcG9uZW50IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRzW2lkXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBpbml0aWFsIG1hcCBvZiBhbm5vdGF0aW9uIGNvdW50cywgYW5kL29yIHB1c2hlcyB0aGUgbmV3IGNvdW50IG9udG8gdGhlIGNvbXBvbmVudCBvYnNlcnZhYmxlIHN0cmVhbVxuICAgKiBAcGFyYW0gbWFwIEFubm90YXRhYmxlTnVtYmVyTWFwIG9mIGNvdW50cyBtYXBwZWQgdG8gdGhlaXIgYW5ub3RhdGFibGVJZHNcbiAgICovXG4gIHJlZ2lzdGVyQW5ub3RhdGlvbnMobWFwOiBBbm5vdGF0YWJsZU51bWJlck1hcCkge1xuICAgIGZvciAoY29uc3QgaWQgaW4gbWFwKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1hcCwgaWQpKSB7XG4gICAgICAgIGlmICghdGhpcy5hbm5vdGF0aW9uc1tpZF0pIHtcbiAgICAgICAgICB0aGlzLmFubm90YXRpb25zW2lkXSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyIHwgbnVsbD4obWFwW2lkXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hbm5vdGF0aW9uc1tpZF0ubmV4dChtYXBbaWRdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNYXBzIGEgY29tcG9uZW50IHRvIGl0cyBpdGVtcyBpbnN0YW5jZUlkLlxuICAgKiBAcGFyYW0gY29tcG9uZW50IGNvbXBvbmVudCBjYWxsaW5nIHRoaXMgbWV0aG9kLCBpLmUuICd0aGlzJ1xuICAgKi9cbiAgcmVnaXN0ZXJTZWxmKGNvbXBvbmVudDogTXRuYVdmRm9ybUl0ZW1Db21wb25lbnQpIHtcbiAgICB0aGlzLmNvbXBvbmVudHNbY29tcG9uZW50Lml0ZW0uaW5zdGFuY2VJZF0gPSBjb21wb25lbnQ7XG4gICAgaWYgKCEhY29tcG9uZW50Lml0ZW0uYW5ub3RhdGFibGVJZCAmJiBjb21wb25lbnQuaXRlbS5hbm5vdGF0aW9uRW5hYmxlZCkge1xuICAgICAgaWYgKCF0aGlzLmFubm90YXRpb25zW2NvbXBvbmVudC5pdGVtLmFubm90YXRhYmxlSWRdKSB7XG4gICAgICAgIHRoaXMuYW5ub3RhdGlvbnNbY29tcG9uZW50Lml0ZW0uYW5ub3RhdGFibGVJZF0gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlciB8IG51bGw+KG51bGwpO1xuICAgICAgfVxuICAgICAgY29tcG9uZW50LmFubm90YXRpb25zJCA9IHRoaXMuYW5ub3RhdGlvbnNbY29tcG9uZW50Lml0ZW0uYW5ub3RhdGFibGVJZF0uYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgYSBGb3JtSXRlbSdzIHZpc2libGl0eSBhbmQgZW5hYmxlL2Rpc2FibGUgc3RhdGVcbiAgICpcbiAgICogQHBhcmFtIGVuYWJsZWRJdGVtSWRzIGFycmF5IG9mIGNvbXBvbmVudCBJRHMgZm9yIGVuYWJsZWQgaXRlbXMuXG4gICAqIEBwYXJhbSBkaXNhYmxlZEl0ZW1JZHMgYXJyYXkgb2YgY29tcG9uZW50IElEcyBmb3IgZGlzYWJsZWQgaXRlbXMuXG4gICAqIEBwYXJhbSBlbmFibGVkIFdoZXRoZXIgdGhlIGVuYWJsZWRJdGVtSWRzIGFyZSBlbmFibGVkLlxuICAgKiBAcGFyYW0gY2FsbGVySWQgaW5zdGFuY2VJZCBvZiB0aGUgaXRlbSBpbnZva2luZyB0aGlzIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSByZXNldCBXaGV0aGVyIHRvIHJlc2V0IHRoZSBtdWx0aXBsZSBlbmFibGVyIG1hcCBvZiB0aGUgdG9nZ2xlZCBpdGVtXG4gICAqL1xuICB0b2dnbGVGb3JtSXRlbXMoZW5hYmxlZEl0ZW1JZHM6IEFycmF5PHN0cmluZz4sIGRpc2FibGVkSXRlbUlkczogQXJyYXk8c3RyaW5nPiwgZW5hYmxlZDogYm9vbGVhbiwgY2FsbGVySWQ6IHN0cmluZywgcmVzZXQgPSBmYWxzZSkge1xuICAgIGlmICgoIWVuYWJsZWRJdGVtSWRzIHx8ICFlbmFibGVkSXRlbUlkcy5sZW5ndGgpICYmICghZGlzYWJsZWRJdGVtSWRzIHx8ICFkaXNhYmxlZEl0ZW1JZHMubGVuZ3RoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhbGxJZHMgPSBbZW5hYmxlZEl0ZW1JZHMsIGRpc2FibGVkSXRlbUlkc107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGxJZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGl0ZW1JZHMgPSBhbGxJZHNbaV07XG4gICAgICBjb25zdCBpc0VuYWJsZWQgPSBpID09PSAwID8gZW5hYmxlZCA6ICFlbmFibGVkO1xuICAgICAgZm9yIChjb25zdCBpZCBvZiBpdGVtSWRzKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50c1tpZF07XG4gICAgICAgIC8vIElmIGNvbXBvbmVudCBpcyByZWdpc3RlcmVkLCB0b2dnbGUgaXRcbiAgICAgICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICAgIGNvbnN0IGl0ZW0gPSBjb21wb25lbnQuaXRlbTtcbiAgICAgICAgICBjb25zdCBoYXNNdWx0aXBsZUVuYWJsZXJzID0gaXNDb25kaXRpb25hbEl0ZW0oaXRlbSkgJiYgaXRlbS5jb25kaXRpb24gPyBpdGVtLmNvbmRpdGlvbi5pdGVtSWRzLmxlbmd0aCA+IDEgOiBmYWxzZTtcbiAgICAgICAgICAvLyBJZiBpdGVtIGhhcyBtb3JlIHRoYW4gMSBlbmFibGVyLCBoYW5kbGUgbXVsdGlwbGUgZW5hYmxlcnNcbiAgICAgICAgICBpZiAoaGFzTXVsdGlwbGVFbmFibGVycykge1xuICAgICAgICAgICAgaWYgKHJlc2V0KSB7XG4gICAgICAgICAgICAgIHRoaXMubXVsdGlwbGVFbmFibGVyc1tpdGVtLmluc3RhbmNlSWRdID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIGEgbWFwIGhhcyBub3QgYmVlbiByZWdpc3RlcmVkLCB0aGVuIGJ1aWxkIHVwIGEgbWFwIHRvIHJlZ2lzdGVyXG4gICAgICAgICAgICAvLyBTaG91bGQgb25seSBoYXBwZW4gdGhlIGZpcnN0IHRpbWUgYW4gaXRlbSBpcyB0b2dnbGVkLlxuICAgICAgICAgICAgaWYgKCF0aGlzLm11bHRpcGxlRW5hYmxlcnNbaXRlbS5pbnN0YW5jZUlkXSAmJiBpc0NvbmRpdGlvbmFsSXRlbShpdGVtKSkge1xuICAgICAgICAgICAgICB0aGlzLm11bHRpcGxlRW5hYmxlcnNbaXRlbS5pbnN0YW5jZUlkXSA9IHRoaXMuX3JlZ2lzdGVyQ3VycmVudEVuYWJsZXJzKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaGFuZGxlIE11bHRpcGxlIEVuYWJsZXJzXG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVNdWx0aXBsZUVuYWJsZXJzKGNvbXBvbmVudCwgaXNFbmFibGVkLCBjYWxsZXJJZCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5vdCBtdWx0aXBsZSBlbmFibGVyc1xuICAgICAgICAgICAgdGhpcy5fdG9nZ2xlRGlzYWJsZWRTdGF0ZUFuZENvbnRyb2woY29tcG9uZW50LCBpc0VuYWJsZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdbdG9nZ2xlRm9ybUl0ZW1zXSBjb21wb25lbnQgaGFzIG5vdCBiZWVuIHJlZ2lzdGVyZCcsIGlkLCBlbmFibGVkLCBjYWxsZXJJZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIG1hcCBvZiBhbGwgSURzIGN1cnJlbnRseSBpbmZsdWVuY2luZyBhbiBpdGVtLlxuICAgKiBAcGFyYW0gdG9nZ2xlZEl0ZW0gaXRlbSBiZWluZyB0b2dnbGVkXG4gICAqL1xuICBwcml2YXRlIF9yZWdpc3RlckN1cnJlbnRFbmFibGVycyh0b2dnbGVkSXRlbTogQ29uZGl0aW9uYWxJdGVtKTogeyBbY2FsbGVySWQ6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICBjb25zdCBlbmFibGVyczogeyBbY2FsbGVySWQ6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gICAgY29uc3QgYWxsSWRzID0gdG9nZ2xlZEl0ZW0uY29uZGl0aW9uPy5pdGVtSWRzIHx8IFtdO1xuXG4gICAgZm9yIChjb25zdCBpZCBvZiBhbGxJZHMpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50c1tpZF07XG4gICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgIGlmICh0aGlzLl9pc0N1cnJlbnRseVRvZ2dsaW5nKGNvbXBvbmVudCwgdG9nZ2xlZEl0ZW0uaW5zdGFuY2VJZCkpIHtcbiAgICAgICAgICBlbmFibGVyc1tjb21wb25lbnQuaXRlbS5pbnN0YW5jZUlkXSA9IGNvbXBvbmVudC5pdGVtLmluc3RhbmNlSWQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tyZWdpc3RlckN1cnJlbnRFbmFibGVyc10gY29tcG9uZW50IGhhcyBub3QgYmVlbiByZWdpc3RlcmVkLicsIGlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZW5hYmxlcnM7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBtYXAgb2YgY29tcG9uZW50cy4gVGhpcyBzaG91bGQgYmUgY2FsbGVkIGJ5IHRoZSBmb3JtIHdoZW5cbiAgICogaXQgaXMgZGVzdHJveWVkLlxuICAgKi9cbiAgcmVzZXRDb21wb25lbnRNYXAoKSB7XG4gICAgdGhpcy5hbm5vdGF0aW9ucyA9IHt9O1xuICAgIHRoaXMuY29tcG9uZW50cyA9IHt9O1xuICAgIHRoaXMuZGlzYWJsZWRTdGF0ZSA9IHt9O1xuICAgIHRoaXMubXVsdGlwbGVFbmFibGVycyA9IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgYW4gaW5mbHVlbmNlciBpcyBjdXJyZW50bHkgdG9nZ2xpbmcgdGhlIHNwZWNpZmllZCB0b2dnbGVkSXRlbUlkLlxuICAgKiBAcGFyYW0gaW5mbHVlbmNlciBJdGVtIHRvIGNoZWNrIHdoZXRoZXIgaXQncyBjdXJyZW50bHkgaW5mbHVlbmNpbmcgdGhlIHRvZ2dsZWRJdGVtSWRcbiAgICogQHBhcmFtIHRvZ2dsZWRJZCBJbnN0YW5jZUlkIG9mIHRoZSBpdGVtIGJlaW5nIHRvZ2dsZWRcbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgaW5mbHVlbmNlciBpcyBjdXJyZW50bHkgdG9nZ2xpbmcgdGhlIHRvZ2dsZWQgaXRlbVxuICAgKi9cbiAgcHJpdmF0ZSBfaXNDdXJyZW50bHlUb2dnbGluZyhpbmZsdWVuY2VyOiBNdG5hV2ZGb3JtSXRlbUNvbXBvbmVudCwgdG9nZ2xlZElkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBpdGVtID0gaW5mbHVlbmNlci5pdGVtO1xuICAgIC8vIEl0ZW0gaGFzIHNpbmdsZSBvcHRpb24gcHJvcGVydHksIHNvIGNoZWNrIGlmIHNlbGVjdGVkLCBvciBpdGVtLnZhbHVlIGlzICd0cnVlJ1xuICAgIGlmIChpc09wdGlvbkl0ZW1JbXBsKGl0ZW0pKSB7XG4gICAgICByZXR1cm4gaXRlbS5vcHRpb24uc2VsZWN0ZWQgfHwgISFpdGVtLnZhbHVlIHx8ICEhaW5mbHVlbmNlci5jb250cm9sPy52YWx1ZTtcbiAgICB9IGVsc2UgaWYgKGlzT3B0aW9uR3JvdXBJdGVtSW1wbChpdGVtKSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBpbmZsdWVuY2VyLmNvbnRyb2w/LnZhbHVlID8/IGl0ZW0udmFsdWU7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgLy8gZmluZCB0aGUgaW5kZXggb2Ygb3B0aW9ucyB0aGF0IGNvbnRhaW4gdGhlICd0b2dnbGVkSWQnIGluIHRoZWlyIGVuYWJsZWRJdGVtc1xuICAgICAgICAvLyAmIGNoZWNrIGlmIGF0IGxlYXN0IDEgaXMgc2VsZWN0ZWQsIG9yIGl0cyAndHJ1ZScgaW4gdGhlIHZhbHVlXG4gICAgICAgIGNvbnN0IG9wdGlvbkluZGV4ZXMgPSBpdGVtLm9wdGlvbnMubWFwKChvLCBpKSA9PiAoby5lbmFibGVkSXRlbXMuc29tZSgoaWQpID0+IGlkID09PSB0b2dnbGVkSWQpID8gaSA6IG51bGwpKS5maWx0ZXIoaXNQcmVzZW50KTtcbiAgICAgICAgcmV0dXJuIG9wdGlvbkluZGV4ZXMuc29tZSgoaSkgPT4gISF2YWx1ZVtpXSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIC8vIGlmIHRoZSB2YWx1ZSBpcyBhIHNpbmdsZSB2YWx1ZSwgZ2V0IHRoZSBlbmFibGluZyBvcHRpb24gaWRzIGFuZCBjaGVjayBmb3IgdGhlIHZhbHVlIGluIHRoZW1cbiAgICAgICAgcmV0dXJuIGl0ZW0ub3B0aW9ucy5zb21lKChvKSA9PiBvLm9wdGlvbi5pZCA9PT0gdmFsdWUgJiYgby5lbmFibGVkSXRlbXMuc29tZSgoaWQpID0+IGlkID09PSB0b2dnbGVkSWQpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgY29tcG9uZW50IHZpc2liaWxpdHkgZm9yIGEgRm9ybUl0ZW0gd2l0aCBtdWx0aXBsZSBlbmFibGVycyBpbiBpdHMgY29uZGl0aW9uXG4gICAqIEBwYXJhbSBjb21wb25lbnQgRm9ybUl0ZW1Db21wb25lbnQgYmVpbmcgdG9nZ2xlZFxuICAgKiBAcGFyYW0gZW5hYmxlZCBXaGV0aGVyIHRoZSBjb21wb25lbnQgaXMgYmVpbmcgZW5hYmxlZFxuICAgKiBAcGFyYW0gY2FsbGVySWQgSUQgb2YgdGhlIGNhbGxlciB0b2dnbGluZyB0aGlzIGNvbXBvbmVudFxuICAgKi9cbiAgcHJpdmF0ZSBfaGFuZGxlTXVsdGlwbGVFbmFibGVycyhjb21wb25lbnQ6IE10bmFXZkZvcm1JdGVtQ29tcG9uZW50LCBlbmFibGVkOiBib29sZWFuLCBjYWxsZXJJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgaXRlbSA9IGNvbXBvbmVudC5pdGVtO1xuICAgIGNvbnN0IGVuYWJsZXJzID0geyAuLi50aGlzLm11bHRpcGxlRW5hYmxlcnNbaXRlbS5pbnN0YW5jZUlkXSB9O1xuICAgIGxldCBpc0VuYWJsZWQ6IGJvb2xlYW47XG4gICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgIGVuYWJsZXJzW2NhbGxlcklkXSA9IGNhbGxlcklkO1xuICAgICAgaXNFbmFibGVkID1cbiAgICAgICAgaXNDb25kaXRpb25hbEl0ZW0oaXRlbSkgJiZcbiAgICAgICAgISFpdGVtLmNvbmRpdGlvbiAmJlxuICAgICAgICAoIWl0ZW0uY29uZGl0aW9uLmFsbFJlcXVpcmVkIHx8IGl0ZW0uY29uZGl0aW9uLml0ZW1JZHMuZXZlcnkoKGlkKSA9PiAhIWVuYWJsZXJzW2lkXSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgZW5hYmxlcnNbY2FsbGVySWRdO1xuICAgICAgaXNFbmFibGVkID0gISgoaXNDb25kaXRpb25hbEl0ZW0oaXRlbSkgJiYgaXRlbS5jb25kaXRpb24/LmFsbFJlcXVpcmVkKSB8fCAhT2JqZWN0LmtleXMoZW5hYmxlcnMpLmxlbmd0aCk7XG4gICAgfVxuICAgIC8vIElmIGVuYWJsZWQgPT09IGRpc2FibGVkLCB0aGVuIHRoZSBzdGF0ZSBoYXMgY2hhbmdlZFxuICAgIGlmICh0aGlzLl9pc0Rpc2FibGVkKGl0ZW0pID09PSBpc0VuYWJsZWQpIHtcbiAgICAgIHRoaXMuX3RvZ2dsZURpc2FibGVkU3RhdGVBbmRDb250cm9sKGNvbXBvbmVudCwgaXNFbmFibGVkKTtcbiAgICB9XG4gICAgLy8gc2V0IHRoZSBuZXcgZW5hYmxlciBtYXBcbiAgICB0aGlzLm11bHRpcGxlRW5hYmxlcnNbaXRlbS5pbnN0YW5jZUlkXSA9IGVuYWJsZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGNvbnRyb2wgb24gYSBGb3JtSXRlbUNvbXBvbmVudFxuICAgKiBAcGFyYW0gY29tcG9uZW50IEZvcm1JdGVtQ29tcG9uZW50IHRvIGVuYWJsZSBvciBkaXNhYmxlIGl0cyBjb250cm9sXG4gICAqIEBwYXJhbSBlbmFibGVkIHdoZXRoZXIgdG8gZW5hYmxlIHRoZSBjb250cm9sXG4gICAqL1xuICBwcml2YXRlIF90b2dnbGVDb250cm9sU3RhdGUoY29tcG9uZW50OiBNdG5hV2ZGb3JtSXRlbUNvbXBvbmVudCwgZW5hYmxlZDogYm9vbGVhbikge1xuICAgIGlmIChlbmFibGVkICYmICFjb21wb25lbnQuY29udHJvbD8uZW5hYmxlZCkge1xuICAgICAgLy8gRW5hYmxlIHRoZSBjb250cm9sIGlmIGl0IGlzbid0IGFscmVhZHlcbiAgICAgIGlmIChjb21wb25lbnQuY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgICAgICB0aGlzLl9lbmFibGVJbmRpdmlkdWFsQ29udHJvbHMoY29tcG9uZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbXBvbmVudC5jb250cm9sPy5lbmFibGUoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFlbmFibGVkICYmIGNvbXBvbmVudC5jb250cm9sPy5lbmFibGVkKSB7XG4gICAgICAvLyBEaXNhYmxlIHRoZSBjb250cm9sIGlmIGl0IGlzbid0IGFscmVhZHlcbiAgICAgIGNvbXBvbmVudC5jb250cm9sLmRpc2FibGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyBib3RoIHRoZSBjb21wb25lbnQgdmlzaWJsaXR5IGFuZCB0aGUgY29udHJvbCdzIGVuYWJsZS9kaXNhYmxlIHN0YXR1c1xuICAgKiBAcGFyYW0gY29tcG9uZW50IEZvcm1JdGVtQ29tcG9uZW50IHRvIHNob3cgb3IgaGlkZSBhbmQgZW5hYmxlIG9yIGRpc2FibGVcbiAgICogQHBhcmFtIGVuYWJsZWQgd2hldGhlciB0byBzaG93IHRoZSBjb21wb25lbnQgYW5kIHdoZXRoZXIgdG8gZW5hYmxlIHRoZSBjb21wb25lbnRcbiAgICovXG4gIHByaXZhdGUgX3RvZ2dsZURpc2FibGVkU3RhdGVBbmRDb250cm9sKGNvbXBvbmVudDogTXRuYVdmRm9ybUl0ZW1Db21wb25lbnQsIGVuYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRpc2FibGVkU3RhdGVbY29tcG9uZW50Lml0ZW0uaW5zdGFuY2VJZF0gPSAhZW5hYmxlZDtcbiAgICB0aGlzLl90b2dnbGVDb250cm9sU3RhdGUoY29tcG9uZW50LCBlbmFibGVkKTtcbiAgICBpZiAoaXNDb25kaXRpb25hbEl0ZW0oY29tcG9uZW50Lml0ZW0pICYmIGNvbXBvbmVudC5pdGVtLmhpZGVPbkRpc2FibGUpIHtcbiAgICAgIGNvbXBvbmVudC52aXNpYmxlID0gZW5hYmxlZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyBjb250cm9scyBpbmRpdmlkdWFsbHkgdXNpbmcgcmVjdXJzaW9uLlxuICAgKiBGb3JtR3JvdXBzIHNob3VsZCBvbmx5IGV4aXN0IGZvciBpdGVtcyB3aXRoICdpdGVtcycgYXJyYXlzLCBvclxuICAgKiBpZiB0aGUgY29tcG9uZW50IGlzIGEgQmFzZVBhcmVudEl0ZW1Db250cm9sXG4gICAqIEBwYXJhbSBjb21wIEZvcm1JdGVtQ29tcG9uZW50XG4gICAqL1xuICBwcml2YXRlIF9lbmFibGVJbmRpdmlkdWFsQ29udHJvbHMoY29tcDogTXRuYVdmRm9ybUl0ZW1Db21wb25lbnQpIHtcbiAgICBjb25zdCBncm91cCA9IGNvbXAuY29udHJvbCBhcyBGb3JtR3JvdXA7XG5cbiAgICBpZiAoaXNPcHRpb25JdGVtSW1wbChjb21wLml0ZW0pIHx8IGlzT3B0aW9uR3JvdXBJdGVtSW1wbChjb21wLml0ZW0pKSB7XG4gICAgICBjb25zdCBtYXAgPSBjb21wLml0ZW0ub3B0aW9uSXRlbU1hcDtcbiAgICAgIGNvbnN0IHNlbGYgPSBncm91cC5nZXQoY29tcC5pdGVtLmluc3RhbmNlSWQpO1xuICAgICAgc2VsZj8uZW5hYmxlKCk7XG4gICAgICBmb3IgKGNvbnN0IG9wdGlvbklkIGluIG1hcCkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1hcCwgb3B0aW9uSWQpKSB7XG4gICAgICAgICAgY29uc3QgY2hpbGRDb21wID0gdGhpcy5jb21wb25lbnRzW21hcFtvcHRpb25JZF0uaW5zdGFuY2VJZF07XG4gICAgICAgICAgaWYgKCF0aGlzLl9pc0Rpc2FibGVkKGNoaWxkQ29tcC5pdGVtKSkge1xuICAgICAgICAgICAgdGhpcy5fdG9nZ2xlQ29udHJvbFN0YXRlKGNoaWxkQ29tcCwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1R5cGU8eyBpdGVtczogRm9ybUl0ZW1JbXBsPHVua25vd24+W10gfT4oY29tcC5pdGVtLCAnaXRlbXMnKSAmJiBjb21wLml0ZW0uaXRlbXMubGVuZ3RoKSB7XG4gICAgICAvLyBJdGVtIG11c3QgaGF2ZSAnaXRlbXMnIGFycmF5XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY29tcC5pdGVtLml0ZW1zKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkQ29tcCA9IHRoaXMuY29tcG9uZW50c1tpdGVtLmluc3RhbmNlSWRdO1xuICAgICAgICBpZiAoIXRoaXMuX2lzRGlzYWJsZWQoaXRlbSkpIHtcbiAgICAgICAgICB0aGlzLl90b2dnbGVDb250cm9sU3RhdGUoY2hpbGRDb21wLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBncm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiBhIGNvbXBvbmVudCBpcyBkaXNhYmxlZC4gUHJpb3JpdGl6ZXMgdGhlIGRpc2FibGVkU3RhdGUgdmFsdWUsXG4gICAqIGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlIHJldHVybnMgdGhlIGl0ZW0ncyBwcmV2aW91cyBkaXNhYmxlZCB2YWx1ZVxuICAgKiBAcGFyYW0gaXRlbSBpdGVtIHRvIGNoZWNrIGZvciBpdHMgZGlzYWJsZWQgc3RhdGVcbiAgICovXG4gIHByaXZhdGUgX2lzRGlzYWJsZWQoaXRlbTogQ29uZGl0aW9uYWxJdGVtIHwgRm9ybUl0ZW0pOiBib29sZWFuIHtcbiAgICBjb25zdCBleGlzdHNJbkRpc2FibGVkU3RhdE1hcCA9IGlzUHJlc2VudCh0aGlzLmRpc2FibGVkU3RhdGVbaXRlbS5pbnN0YW5jZUlkXSk7XG4gICAgaWYgKCFleGlzdHNJbkRpc2FibGVkU3RhdE1hcCkge1xuICAgICAgcmV0dXJuIGlzQ29uZGl0aW9uYWxJdGVtKGl0ZW0pID8gaXRlbS5kaXNhYmxlZCA6IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZFN0YXRlW2l0ZW0uaW5zdGFuY2VJZF07XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,6 +1,6 @@
1
1
  import { toLetters } from '@mtna/core-ts';
2
2
  import { isDataCubeItem, isSection } from '@mtna/web-form-ts';
3
- import { FormStep, FormStepGroup, isFormStepGroup, isProgressiveFormSection } from '../models';
3
+ import { FormStep, FormStepGroup, isFormStepGroup } from '../models';
4
4
  /**
5
5
  * Builds up an array of FormSteps or FormStepGroups based on what is found in the provided form items. For most typical
6
6
  * forms this will mean that a step is generated for every section that is found in the form. It is assumed that all
@@ -20,7 +20,7 @@ export function generateFormSteps(items, allSteps = false) {
20
20
  if (allSteps) {
21
21
  newArray.push(new FormStep(count + 1, item.name || 'No Title', item.instanceId, !item.required));
22
22
  }
23
- else if (isSection(item) || isProgressiveFormSection(item)) {
23
+ else if (isSection(item)) {
24
24
  // If the item is a Section, add a step
25
25
  newArray.push(new FormStep(count + 1, item.title.value || 'No Title', item.instanceId, !item.required));
26
26
  }
@@ -28,7 +28,7 @@ export function generateFormSteps(items, allSteps = false) {
28
28
  // If the item is a DataCubeItem, add a step and add a group step for the sub-sections
29
29
  newArray.push(new FormStep(count + 1, item.title.value || '', item.instanceId, !item.required));
30
30
  const subSectionSteps = item.items
31
- .filter(isSection || isProgressiveFormSection)
31
+ .filter(isSection)
32
32
  .map((item, index) => new FormStep(`${count + 1}${toLetters(index + 1)}`, item.title.value || '', item.instanceId, !item.required));
33
33
  newArray.push(new FormStepGroup(subSectionSteps, item.instanceId, false, item.name, count + 1));
34
34
  }
@@ -50,4 +50,4 @@ export function generateFormStepsFromOutline(outline) {
50
50
  return newArray;
51
51
  }, []);
52
52
  }
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUtZm9ybS1zdGVwcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dlYi1mb3JtLWFuZ3VsYXIvc3JjL2xpYi91dGlsaXRpZXMvZ2VuZXJhdGUtZm9ybS1zdGVwcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBWSxjQUFjLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFeEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLHdCQUF3QixFQUFlLE1BQU0sV0FBVyxDQUFDO0FBRTVHOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsS0FBc0IsRUFBRSxRQUFRLEdBQUcsS0FBSztJQUN4RSxxREFBcUQ7SUFDckQsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBeUMsRUFBRSxJQUFjLEVBQUUsRUFBRTtRQUNoRixvRUFBb0U7UUFDcEUsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDdkUsSUFBSSxRQUFRLEVBQUU7WUFDWixRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQ2xHO2FBQU0sSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksd0JBQXdCLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDNUQsdUNBQXVDO1lBQ3ZDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxR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Q0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7U0FDdkc7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDVCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdG9MZXR0ZXJzIH0gZnJvbSAnQG10bmEvY29yZS10cyc7XG5pbXBvcnQgeyBGb3JtSXRlbSwgaXNEYXRhQ3ViZUl0ZW0sIGlzU2VjdGlvbiB9IGZyb20gJ0BtdG5hL3dlYi1mb3JtLXRzJztcblxuaW1wb3J0IHsgRm9ybVN0ZXAsIEZvcm1TdGVwR3JvdXAsIGlzRm9ybVN0ZXBHcm91cCwgaXNQcm9ncmVzc2l2ZUZvcm1TZWN0aW9uLCBPdXRsaW5lU3RlcCB9IGZyb20gJy4uL21vZGVscyc7XG5cbi8qKlxuICogQnVpbGRzIHVwIGFuIGFycmF5IG9mIEZvcm1TdGVwcyBvciBGb3JtU3RlcEdyb3VwcyBiYXNlZCBvbiB3aGF0IGlzIGZvdW5kIGluIHRoZSBwcm92aWRlZCBmb3JtIGl0ZW1zLiBGb3IgbW9zdCB0eXBpY2FsXG4gKiBmb3JtcyB0aGlzIHdpbGwgbWVhbiB0aGF0IGEgc3RlcCBpcyBnZW5lcmF0ZWQgZm9yIGV2ZXJ5IHNlY3Rpb24gdGhhdCBpcyBmb3VuZCBpbiB0aGUgZm9ybS4gSXQgaXMgYXNzdW1lZCB0aGF0IGFsbFxuICogaW5wdXRzIGFyZSBoZWxkIHdpdGhpbiBzZWN0aW9ucyBhbmQgdGhlcmVmb3JlIHRoZSBzZWN0aW9ucyBhcmUgdGhlIHN0ZXBzIHRoYXQgc2hvdWxkIGJlIG1vbml0b3JlZCBmb3IgY29tcGxldGVuZXNzLlxuICogSG93ZXZlciwgaW4gc29tZSBjaXJjdW1zdGFuY2VzLCBsaWtlIHZlcnkgc2hvcnQgZm9ybXMsIGl0IG1heSBiZSB0aGUgY2FzZSB0aGF0IHRoZXJlIGFyZSBubyBzZWN0aW9ucyBhbmQgdGhhdCBhbGxcbiAqIHRoZSBpdGVtcyBhcmUgc2V0IGRpcmVjdGx5IG9uIHRoZSBmb3JtIGl0c2VsZi4gSW4gdGhlc2UgY2lyY3Vtc3RhbmNlcyB0aGUgYWxsU3RlcHMgcGFyYW1ldGVyIGNhbiBiZSBzZXQgdG8gdHJ1ZSBhbmRcbiAqIGEgc3RlcCB3aWxsIGJlIHByb2R1Y2VkIGZvciBlYWNoIGZvcm0gaXRlbSBmb3VuZC5cbiAqXG4gKiBAcGFyYW0gaXRlbXMgdGhlIGl0ZW1zIG9mIHRoZSBmb3JtXG4gKiBAcGFyYW0gYWxsU3RlcHMgZmxhZyBpbmRpY2F0aW5nIHRoYXQgYSBmb3JtIHN0ZXAgc2hvdWxkIGJlIHByb2R1Y2VkIGZvciBldmVyeSBmb3JtIGl0ZW1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlRm9ybVN0ZXBzKGl0ZW1zOiBBcnJheTxGb3JtSXRlbT4sIGFsbFN0ZXBzID0gZmFsc2UpOiBBcnJheTxGb3JtU3RlcCB8IEZvcm1TdGVwR3JvdXA+IHtcbiAgLy8gQnVpbGQgdXAgYW4gYXJyYXkgb2Ygc3RlcHMgYmFzZWQgb24gdGhlIGZvcm0gaXRlbXNcbiAgcmV0dXJuIGl0ZW1zLnJlZHVjZSgobmV3QXJyYXk6IEFycmF5PEZvcm1TdGVwIHwgRm9ybVN0ZXBHcm91cD4sIGl0ZW06IEZvcm1JdGVtKSA9PiB7XG4gICAgLy8gVGhlIG51bWJlciBvZiBub24tZ3JvdXAgc3RlcHMsIHVzZWQgdG8gbnVtYmVyIHRoZSB0b3AgbGV2ZWwgc3RlcHNcbiAgICBjb25zdCBjb3VudCA9IG5ld0FycmF5LmZpbHRlcigoc3RlcCkgPT4gIWlzRm9ybVN0ZXBHcm91cChzdGVwKSkubGVuZ3RoO1xuICAgIGlmIChhbGxTdGVwcykge1xuICAgICAgbmV3QXJyYXkucHVzaChuZXcgRm9ybVN0ZXAoY291bnQgKyAxLCBpdGVtLm5hbWUgfHwgJ05vIFRpdGxlJywgaXRlbS5pbnN0YW5jZUlkLCAhaXRlbS5yZXF1aXJlZCkpO1xuICAgIH0gZWxzZSBpZiAoaXNTZWN0aW9uKGl0ZW0pIHx8IGlzUHJvZ3Jlc3NpdmVGb3JtU2VjdGlvbihpdGVtKSkge1xuICAgICAgLy8gSWYgdGhlIGl0ZW0gaXMgYSBTZWN0aW9uLCBhZGQgYSBzdGVwXG4gICAgICBuZXdBcnJheS5wdXNoKG5ldyBGb3JtU3RlcChjb3VudCArIDEsIGl0ZW0udGl0bGUudmFsdWUgfHwgJ05vIFRpdGxlJywgaXRlbS5pbnN0YW5jZUlkLCAhaXRlbS5yZXF1aXJlZCkpO1xuICAgIH0gZWxzZSBpZiAoaXNEYXRhQ3ViZUl0ZW0oaXRlbSkpIHtcbiAgICAgIC8vIElmIHRoZSBpdGVtIGlzIGEgRGF0YUN1YmVJdGVtLCBhZGQgYSBzdGVwIGFuZCBhZGQgYSBncm91cCBzdGVwIGZvciB0aGUgc3ViLXNlY3Rpb25zXG4gICAgICBuZXdBcnJheS5wdXNoKG5ldyBGb3JtU3RlcChjb3VudCArIDEsIGl0ZW0udGl0bGUudmFsdWUgfHwgJycsIGl0ZW0uaW5zdGFuY2VJZCwgIWl0ZW0ucmVxdWlyZWQpKTtcblxuICAgICAgY29uc3Qgc3ViU2VjdGlvblN0ZXBzID0gaXRlbS5pdGVtc1xuICAgICAgICAuZmlsdGVyKGlzU2VjdGlvbiB8fCBpc1Byb2dyZXNzaXZlRm9ybVNlY3Rpb24pXG4gICAgICAgIC5tYXAoKGl0ZW0sIGluZGV4KSA9PiBuZXcgRm9ybVN0ZXAoYCR7Y291bnQgKyAxfSR7dG9MZXR0ZXJzKGluZGV4ICsgMSl9YCwgaXRlbS50aXRsZS52YWx1ZSB8fCAnJywgaXRlbS5pbnN0YW5jZUlkLCAhaXRlbS5yZXF1aXJlZCkpO1xuICAgICAgbmV3QXJyYXkucHVzaChuZXcgRm9ybVN0ZXBHcm91cChzdWJTZWN0aW9uU3RlcHMsIGl0ZW0uaW5zdGFuY2VJZCwgZmFsc2UsIGl0ZW0ubmFtZSwgY291bnQgKyAxKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0FycmF5O1xuICB9LCBbXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUZvcm1TdGVwc0Zyb21PdXRsaW5lKG91dGxpbmU6IE91dGxpbmVTdGVwW10pOiBBcnJheTxGb3JtU3RlcCB8IEZvcm1TdGVwR3JvdXA+IHtcbiAgcmV0dXJuIG91dGxpbmUucmVkdWNlKChuZXdBcnJheTogQXJyYXk8Rm9ybVN0ZXAgfCBGb3JtU3RlcEdyb3VwPiwgc3RlcDogT3V0bGluZVN0ZXApID0+IHtcbiAgICAvLyBUaGUgbnVtYmVyIG9mIG5vbi1ncm91cCBzdGVwcywgdXNlZCB0byBudW1iZXIgdGhlIHRvcCBsZXZlbCBzdGVwc1xuICAgIGNvbnN0IGNvdW50ID0gbmV3QXJyYXkuZmlsdGVyKChzdGVwKSA9PiAhaXNGb3JtU3RlcEdyb3VwKHN0ZXApKS5sZW5ndGg7XG4gICAgaWYgKHN0ZXAuY2hpbGRTdGVwcyAmJiBzdGVwLmNoaWxkU3RlcHMubGVuZ3RoID4gMCkge1xuICAgICAgbmV3QXJyYXkucHVzaChuZXcgRm9ybVN0ZXAoY291bnQgKyAxLCBzdGVwLmxhYmVsLCBzdGVwLmluc3RhbmNlSWQgfHwgc3RlcC50ZW1wbGF0ZUlkLCBzdGVwLm9wdGlvbmFsKSk7XG4gICAgICBjb25zdCBzdWJTZWN0aW9uU3RlcHMgPSBzdGVwLmNoaWxkU3RlcHMubWFwKFxuICAgICAgICAoaXRlbSwgaW5kZXgpID0+IG5ldyBGb3JtU3RlcChgJHtjb3VudCArIDF9JHt0b0xldHRlcnMoaW5kZXggKyAxKX1gLCBpdGVtLmxhYmVsLCBpdGVtLmluc3RhbmNlSWQgfHwgaXRlbS50ZW1wbGF0ZUlkLCBpdGVtLm9wdGlvbmFsKVxuICAgICAgKTtcbiAgICAgIG5ld0FycmF5LnB1c2gobmV3IEZvcm1TdGVwR3JvdXAoc3ViU2VjdGlvblN0ZXBzLCBzdGVwLmluc3RhbmNlSWQgfHwgc3RlcC50ZW1wbGF0ZUlkLCBmYWxzZSwgc3RlcC5sYWJlbCwgY291bnQgKyAxKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0FycmF5LnB1c2gobmV3IEZvcm1TdGVwKGNvdW50ICsgMSwgc3RlcC5sYWJlbCwgc3RlcC5pbnN0YW5jZUlkIHx8IHN0ZXAudGVtcGxhdGVJZCwgc3RlcC5vcHRpb25hbCkpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3QXJyYXk7XG4gIH0sIFtdKTtcbn1cblxuLy8gbW9kZWwgZnJvbSBhbmRyZXdcbmV4cG9ydCBpbnRlcmZhY2UgRm9ybVN0ZXBEYXRhIGV4dGVuZHMgT3V0bGluZVN0ZXAge1xuICBudW06IHN0cmluZztcbn1cbiJdfQ==
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUtZm9ybS1zdGVwcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dlYi1mb3JtLWFuZ3VsYXIvc3JjL2xpYi91dGlsaXRpZXMvZ2VuZXJhdGUtZm9ybS1zdGVwcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBWSxjQUFjLEVBQUUsU0FBUyxFQUFlLE1BQU0sbUJBQW1CLENBQUM7QUFFckYsT0FBTyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXJFOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsS0FBc0IsRUFBRSxRQUFRLEdBQUcsS0FBSztJQUN4RSxxREFBcUQ7SUFDckQsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBeUMsRUFBRSxJQUFjLEVBQUUsRUFBRTtRQUNoRixvRUFBb0U7UUFDcEUsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDdkUsSUFBSSxRQUFRLEVBQUU7WUFDWixRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQ2xHO2FBQU0sSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDMUIsdUNBQXVDO1lBQ3ZDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQ3pHO2FBQU0sSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDL0Isc0ZBQXNGO1lBQ3RGLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBRWhHLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLO2lCQUMvQixNQUFNLENBQUMsU0FBUyxDQUFDO2lCQUNqQixHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDdEksUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLGFBQWEsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNqRztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNULENBQUM7QUFFRCxNQUFNLFVBQVUsNEJBQTRCLENBQUMsT0FBc0I7SUFDakUsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBeUMsRUFBRSxJQUFpQixFQUFFLEVBQUU7UUFDckYsb0VBQW9FO1FBQ3BFLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ3ZFLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDakQsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3RHLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUN6QyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksUUFBUSxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUNwSSxDQUFDO1lBQ0YsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLGFBQWEsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3JIO2FBQU07WUFDTCxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7U0FDdkc7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDVCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdG9MZXR0ZXJzIH0gZnJvbSAnQG10bmEvY29yZS10cyc7XG5pbXBvcnQgeyBGb3JtSXRlbSwgaXNEYXRhQ3ViZUl0ZW0sIGlzU2VjdGlvbiwgT3V0bGluZVN0ZXAgfSBmcm9tICdAbXRuYS93ZWItZm9ybS10cyc7XG5cbmltcG9ydCB7IEZvcm1TdGVwLCBGb3JtU3RlcEdyb3VwLCBpc0Zvcm1TdGVwR3JvdXAgfSBmcm9tICcuLi9tb2RlbHMnO1xuXG4vKipcbiAqIEJ1aWxkcyB1cCBhbiBhcnJheSBvZiBGb3JtU3RlcHMgb3IgRm9ybVN0ZXBHcm91cHMgYmFzZWQgb24gd2hhdCBpcyBmb3VuZCBpbiB0aGUgcHJvdmlkZWQgZm9ybSBpdGVtcy4gRm9yIG1vc3QgdHlwaWNhbFxuICogZm9ybXMgdGhpcyB3aWxsIG1lYW4gdGhhdCBhIHN0ZXAgaXMgZ2VuZXJhdGVkIGZvciBldmVyeSBzZWN0aW9uIHRoYXQgaXMgZm91bmQgaW4gdGhlIGZvcm0uIEl0IGlzIGFzc3VtZWQgdGhhdCBhbGxcbiAqIGlucHV0cyBhcmUgaGVsZCB3aXRoaW4gc2VjdGlvbnMgYW5kIHRoZXJlZm9yZSB0aGUgc2VjdGlvbnMgYXJlIHRoZSBzdGVwcyB0aGF0IHNob3VsZCBiZSBtb25pdG9yZWQgZm9yIGNvbXBsZXRlbmVzcy5cbiAqIEhvd2V2ZXIsIGluIHNvbWUgY2lyY3Vtc3RhbmNlcywgbGlrZSB2ZXJ5IHNob3J0IGZvcm1zLCBpdCBtYXkgYmUgdGhlIGNhc2UgdGhhdCB0aGVyZSBhcmUgbm8gc2VjdGlvbnMgYW5kIHRoYXQgYWxsXG4gKiB0aGUgaXRlbXMgYXJlIHNldCBkaXJlY3RseSBvbiB0aGUgZm9ybSBpdHNlbGYuIEluIHRoZXNlIGNpcmN1bXN0YW5jZXMgdGhlIGFsbFN0ZXBzIHBhcmFtZXRlciBjYW4gYmUgc2V0IHRvIHRydWUgYW5kXG4gKiBhIHN0ZXAgd2lsbCBiZSBwcm9kdWNlZCBmb3IgZWFjaCBmb3JtIGl0ZW0gZm91bmQuXG4gKlxuICogQHBhcmFtIGl0ZW1zIHRoZSBpdGVtcyBvZiB0aGUgZm9ybVxuICogQHBhcmFtIGFsbFN0ZXBzIGZsYWcgaW5kaWNhdGluZyB0aGF0IGEgZm9ybSBzdGVwIHNob3VsZCBiZSBwcm9kdWNlZCBmb3IgZXZlcnkgZm9ybSBpdGVtXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUZvcm1TdGVwcyhpdGVtczogQXJyYXk8Rm9ybUl0ZW0+LCBhbGxTdGVwcyA9IGZhbHNlKTogQXJyYXk8Rm9ybVN0ZXAgfCBGb3JtU3RlcEdyb3VwPiB7XG4gIC8vIEJ1aWxkIHVwIGFuIGFycmF5IG9mIHN0ZXBzIGJhc2VkIG9uIHRoZSBmb3JtIGl0ZW1zXG4gIHJldHVybiBpdGVtcy5yZWR1Y2UoKG5ld0FycmF5OiBBcnJheTxGb3JtU3RlcCB8IEZvcm1TdGVwR3JvdXA+LCBpdGVtOiBGb3JtSXRlbSkgPT4ge1xuICAgIC8vIFRoZSBudW1iZXIgb2Ygbm9uLWdyb3VwIHN0ZXBzLCB1c2VkIHRvIG51bWJlciB0aGUgdG9wIGxldmVsIHN0ZXBzXG4gICAgY29uc3QgY291bnQgPSBuZXdBcnJheS5maWx0ZXIoKHN0ZXApID0+ICFpc0Zvcm1TdGVwR3JvdXAoc3RlcCkpLmxlbmd0aDtcbiAgICBpZiAoYWxsU3RlcHMpIHtcbiAgICAgIG5ld0FycmF5LnB1c2gobmV3IEZvcm1TdGVwKGNvdW50ICsgMSwgaXRlbS5uYW1lIHx8ICdObyBUaXRsZScsIGl0ZW0uaW5zdGFuY2VJZCwgIWl0ZW0ucmVxdWlyZWQpKTtcbiAgICB9IGVsc2UgaWYgKGlzU2VjdGlvbihpdGVtKSkge1xuICAgICAgLy8gSWYgdGhlIGl0ZW0gaXMgYSBTZWN0aW9uLCBhZGQgYSBzdGVwXG4gICAgICBuZXdBcnJheS5wdXNoKG5ldyBGb3JtU3RlcChjb3VudCArIDEsIGl0ZW0udGl0bGUudmFsdWUgfHwgJ05vIFRpdGxlJywgaXRlbS5pbnN0YW5jZUlkLCAhaXRlbS5yZXF1aXJlZCkpO1xuICAgIH0gZWxzZSBpZiAoaXNEYXRhQ3ViZUl0ZW0oaXRlbSkpIHtcbiAgICAgIC8vIElmIHRoZSBpdGVtIGlzIGEgRGF0YUN1YmVJdGVtLCBhZGQgYSBzdGVwIGFuZCBhZGQgYSBncm91cCBzdGVwIGZvciB0aGUgc3ViLXNlY3Rpb25zXG4gICAgICBuZXdBcnJheS5wdXNoKG5ldyBGb3JtU3RlcChjb3VudCArIDEsIGl0ZW0udGl0bGUudmFsdWUgfHwgJycsIGl0ZW0uaW5zdGFuY2VJZCwgIWl0ZW0ucmVxdWlyZWQpKTtcblxuICAgICAgY29uc3Qgc3ViU2VjdGlvblN0ZXBzID0gaXRlbS5pdGVtc1xuICAgICAgICAuZmlsdGVyKGlzU2VjdGlvbilcbiAgICAgICAgLm1hcCgoaXRlbSwgaW5kZXgpID0+IG5ldyBGb3JtU3RlcChgJHtjb3VudCArIDF9JHt0b0xldHRlcnMoaW5kZXggKyAxKX1gLCBpdGVtLnRpdGxlLnZhbHVlIHx8ICcnLCBpdGVtLmluc3RhbmNlSWQsICFpdGVtLnJlcXVpcmVkKSk7XG4gICAgICBuZXdBcnJheS5wdXNoKG5ldyBGb3JtU3RlcEdyb3VwKHN1YlNlY3Rpb25TdGVwcywgaXRlbS5pbnN0YW5jZUlkLCBmYWxzZSwgaXRlbS5uYW1lLCBjb3VudCArIDEpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3QXJyYXk7XG4gIH0sIFtdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlRm9ybVN0ZXBzRnJvbU91dGxpbmUob3V0bGluZTogT3V0bGluZVN0ZXBbXSk6IEFycmF5PEZvcm1TdGVwIHwgRm9ybVN0ZXBHcm91cD4ge1xuICByZXR1cm4gb3V0bGluZS5yZWR1Y2UoKG5ld0FycmF5OiBBcnJheTxGb3JtU3RlcCB8IEZvcm1TdGVwR3JvdXA+LCBzdGVwOiBPdXRsaW5lU3RlcCkgPT4ge1xuICAgIC8vIFRoZSBudW1iZXIgb2Ygbm9uLWdyb3VwIHN0ZXBzLCB1c2VkIHRvIG51bWJlciB0aGUgdG9wIGxldmVsIHN0ZXBzXG4gICAgY29uc3QgY291bnQgPSBuZXdBcnJheS5maWx0ZXIoKHN0ZXApID0+ICFpc0Zvcm1TdGVwR3JvdXAoc3RlcCkpLmxlbmd0aDtcbiAgICBpZiAoc3RlcC5jaGlsZFN0ZXBzICYmIHN0ZXAuY2hpbGRTdGVwcy5sZW5ndGggPiAwKSB7XG4gICAgICBuZXdBcnJheS5wdXNoKG5ldyBGb3JtU3RlcChjb3VudCArIDEsIHN0ZXAubGFiZWwsIHN0ZXAuaW5zdGFuY2VJZCB8fCBzdGVwLnRlbXBsYXRlSWQsIHN0ZXAub3B0aW9uYWwpKTtcbiAgICAgIGNvbnN0IHN1YlNlY3Rpb25TdGVwcyA9IHN0ZXAuY2hpbGRTdGVwcy5tYXAoXG4gICAgICAgIChpdGVtLCBpbmRleCkgPT4gbmV3IEZvcm1TdGVwKGAke2NvdW50ICsgMX0ke3RvTGV0dGVycyhpbmRleCArIDEpfWAsIGl0ZW0ubGFiZWwsIGl0ZW0uaW5zdGFuY2VJZCB8fCBpdGVtLnRlbXBsYXRlSWQsIGl0ZW0ub3B0aW9uYWwpXG4gICAgICApO1xuICAgICAgbmV3QXJyYXkucHVzaChuZXcgRm9ybVN0ZXBHcm91cChzdWJTZWN0aW9uU3RlcHMsIHN0ZXAuaW5zdGFuY2VJZCB8fCBzdGVwLnRlbXBsYXRlSWQsIGZhbHNlLCBzdGVwLmxhYmVsLCBjb3VudCArIDEpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3QXJyYXkucHVzaChuZXcgRm9ybVN0ZXAoY291bnQgKyAxLCBzdGVwLmxhYmVsLCBzdGVwLmluc3RhbmNlSWQgfHwgc3RlcC50ZW1wbGF0ZUlkLCBzdGVwLm9wdGlvbmFsKSk7XG4gICAgfVxuICAgIHJldHVybiBuZXdBcnJheTtcbiAgfSwgW10pO1xufVxuXG4vLyBtb2RlbCBmcm9tIGFuZHJld1xuZXhwb3J0IGludGVyZmFjZSBGb3JtU3RlcERhdGEgZXh0ZW5kcyBPdXRsaW5lU3RlcCB7XG4gIG51bTogc3RyaW5nO1xufVxuIl19