@mtna/web-form-angular 1.0.2-SNAPSHOT.2 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/_index.scss +1 -2
  2. package/bundles/mtna-web-form-angular.umd.js +1219 -539
  3. package/bundles/mtna-web-form-angular.umd.js.map +1 -1
  4. package/esm2015/lib/components/acknowledge-dialog/acknowledge-dialog.component.js +2 -2
  5. package/esm2015/lib/components/base-form/base-form.component.js +243 -0
  6. package/esm2015/lib/components/base-form/index.js +2 -0
  7. package/esm2015/lib/components/base-items/base-group-item.component.js +5 -5
  8. package/esm2015/lib/components/base-items/base-parent-value-item.component.js +3 -2
  9. package/esm2015/lib/components/base-items/base-section-item.component.js +6 -5
  10. package/esm2015/lib/components/form/form.component.js +13 -239
  11. package/esm2015/lib/components/form-item/form-item.component.js +2 -2
  12. package/esm2015/lib/components/form-item-component-provider/form-item-injected-components.js +7 -1
  13. package/esm2015/lib/components/form-item-dialog/form-item-dialog.component.js +6 -5
  14. package/esm2015/lib/components/form-item-dialog/form-item-dialog.module.js +5 -4
  15. package/esm2015/lib/components/form-item-impl/boolean/boolean.component.js +2 -2
  16. package/esm2015/lib/components/form-item-impl/checkbox/checkbox.component.js +7 -5
  17. package/esm2015/lib/components/form-item-impl/checkbox/checkbox.module.js +5 -1
  18. package/esm2015/lib/components/form-item-impl/date/date.component.js +3 -2
  19. package/esm2015/lib/components/form-item-impl/date-range/date-range.component.js +6 -2
  20. package/esm2015/lib/components/form-item-impl/dropdown/dropdown.component.js +2 -2
  21. package/esm2015/lib/components/form-item-impl/file-upload/file-upload.component.js +3 -2
  22. package/esm2015/lib/components/form-item-impl/form-group/form-group.component.js +2 -2
  23. package/esm2015/lib/components/form-item-impl/i18n-input/i18n-input.component.js +3 -2
  24. package/esm2015/lib/components/form-item-impl/input/input.component.js +3 -2
  25. package/esm2015/lib/components/form-item-impl/multiple-choice/multiple-choice.component.js +2 -2
  26. package/esm2015/lib/components/form-item-impl/repeatable-item-container/repeatable-item-container.component.js +3 -2
  27. package/esm2015/lib/components/form-item-impl/search/resource-search.component.js +2 -2
  28. package/esm2015/lib/components/form-item-impl/year-quarter/year-quarter.component.js +2 -3
  29. package/esm2015/lib/components/form-stepper/form-step/form-step.component.js +10 -3
  30. package/esm2015/lib/components/form-stepper/form-step-group/form-step-group.component.js +4 -2
  31. package/esm2015/lib/components/form-stepper/form-stepper/form-stepper.component.js +52 -10
  32. package/esm2015/lib/components/form-stepper/form-stepper.module.js +17 -5
  33. package/esm2015/lib/components/index.js +2 -1
  34. package/esm2015/lib/components/progressive-form/index.js +3 -0
  35. package/esm2015/lib/components/progressive-form/progressive-form/index.js +3 -0
  36. package/esm2015/lib/components/progressive-form/progressive-form/progressive-form.component.js +287 -0
  37. package/esm2015/lib/components/progressive-form/progressive-form/progressive-form.module.js +68 -0
  38. package/esm2015/lib/components/progressive-form/progressive-form-section/index.js +3 -0
  39. package/esm2015/lib/components/progressive-form/progressive-form-section/progressive-form-section.component.js +27 -0
  40. package/esm2015/lib/components/progressive-form/progressive-form-section/progressive-form-section.module.js +54 -0
  41. package/esm2015/lib/components/step-card/step-card.component.js +10 -2
  42. package/esm2015/lib/components/step-card/step-card.module.js +27 -4
  43. package/esm2015/lib/models/form-stepper/form-step-group.model.js +8 -2
  44. package/esm2015/lib/models/form-stepper/form-step.model.js +7 -1
  45. package/esm2015/lib/models/index.js +2 -1
  46. package/esm2015/lib/models/progressive-form/index.js +4 -0
  47. package/esm2015/lib/models/progressive-form/outline-step.model.js +2 -0
  48. package/esm2015/lib/models/progressive-form/progressive-form-section.model.js +6 -0
  49. package/esm2015/lib/models/progressive-form/progressive-form.model.js +6 -0
  50. package/esm2015/lib/pipes/child-step-active.pipe.js +28 -0
  51. package/esm2015/lib/pipes/coerce-form-step-group.pipe.js +29 -0
  52. package/esm2015/lib/pipes/coerce-form-step.pipe.js +29 -0
  53. package/esm2015/lib/pipes/date-quarter.pipe.js +13 -13
  54. package/esm2015/lib/pipes/get-active-form-step-item.pipe.js +33 -0
  55. package/esm2015/lib/pipes/get-progressive-form-item.pipe.js +40 -0
  56. package/esm2015/lib/pipes/get-selected-option.pipe.js +4 -3
  57. package/esm2015/lib/pipes/get-step-aria-label.pipe.js +55 -0
  58. package/esm2015/lib/pipes/index.js +7 -1
  59. package/esm2015/lib/pipes/items-with-value.pipe.js +5 -10
  60. package/esm2015/lib/services/dialog.service.js +4 -3
  61. package/esm2015/lib/services/form-manager.service.js +19 -7
  62. package/esm2015/lib/services/ng-form.service.js +7 -1
  63. package/esm2015/lib/services/ui.service.js +15 -15
  64. package/esm2015/lib/utilities/generate-form-steps.js +20 -5
  65. package/esm2015/lib/utilities/serializer-util.js +12 -5
  66. package/esm2015/lib/utilities/update-step-status.js +1 -1
  67. package/esm2015/public-api.js +1 -2
  68. package/fesm2015/mtna-web-form-angular.js +962 -364
  69. package/fesm2015/mtna-web-form-angular.js.map +1 -1
  70. package/lib/components/base-form/base-form.component.d.ts +89 -0
  71. package/lib/components/base-form/index.d.ts +1 -0
  72. package/lib/components/base-items/base-group-item.component.d.ts +2 -0
  73. package/lib/components/base-items/base-section-item.component.d.ts +2 -1
  74. package/lib/components/form/form.component.d.ts +4 -86
  75. package/lib/components/form-item-dialog/form-item-dialog.module.d.ts +2 -1
  76. package/lib/components/form-item-impl/checkbox/_checkbox-theme.scss +11 -2
  77. package/lib/components/form-item-impl/checkbox/checkbox.component.d.ts +1 -0
  78. package/lib/components/form-item-impl/checkbox/checkbox.module.d.ts +11 -10
  79. package/lib/components/form-item-impl/date/date.component.d.ts +1 -0
  80. package/lib/components/form-item-impl/date-range/date-range.component.d.ts +1 -0
  81. package/lib/components/form-item-impl/dropdown/_dropdown-theme.scss +35 -0
  82. package/lib/components/form-item-impl/file-upload/file-upload.component.d.ts +1 -0
  83. package/lib/components/form-item-impl/i18n-input/i18n-input.component.d.ts +1 -0
  84. package/lib/components/form-item-impl/input/input.component.d.ts +1 -0
  85. package/lib/components/form-item-impl/repeatable-item-container/repeatable-item-container.component.d.ts +1 -0
  86. package/lib/components/form-stepper/form-step/form-step.component.d.ts +7 -0
  87. package/lib/components/form-stepper/form-step-group/form-step-group.component.d.ts +2 -0
  88. package/lib/components/form-stepper/form-stepper/_form-stepper-theme.scss +30 -15
  89. package/lib/components/form-stepper/form-stepper/form-stepper.component.d.ts +15 -1
  90. package/lib/components/form-stepper/form-stepper.module.d.ts +5 -1
  91. package/lib/components/index.d.ts +1 -0
  92. package/lib/components/progressive-form/index.d.ts +2 -0
  93. package/lib/components/progressive-form/progressive-form/index.d.ts +2 -0
  94. package/lib/components/progressive-form/progressive-form/progressive-form.component.d.ts +101 -0
  95. package/lib/components/progressive-form/progressive-form/progressive-form.module.d.ts +19 -0
  96. package/lib/components/progressive-form/progressive-form-section/index.d.ts +2 -0
  97. package/lib/components/progressive-form/progressive-form-section/progressive-form-section.component.d.ts +9 -0
  98. package/lib/components/progressive-form/progressive-form-section/progressive-form-section.module.d.ts +16 -0
  99. package/lib/components/step-card/step-card.component.d.ts +3 -1
  100. package/lib/components/step-card/step-card.module.d.ts +2 -1
  101. package/lib/core/_all-color.scss +2 -2
  102. package/lib/core/_all-theme.scss +2 -2
  103. package/lib/core/_all-typography.scss +2 -2
  104. package/lib/models/form-stepper/form-step-group.model.d.ts +5 -1
  105. package/lib/models/form-stepper/form-step.model.d.ts +3 -0
  106. package/lib/models/index.d.ts +1 -0
  107. package/lib/models/progressive-form/index.d.ts +3 -0
  108. package/lib/models/progressive-form/outline-step.model.d.ts +7 -0
  109. package/lib/models/progressive-form/progressive-form-section.model.d.ts +4 -0
  110. package/lib/models/progressive-form/progressive-form.model.d.ts +7 -0
  111. package/lib/pipes/child-step-active.pipe.d.ts +13 -0
  112. package/lib/pipes/coerce-form-step-group.pipe.d.ts +13 -0
  113. package/lib/pipes/coerce-form-step.pipe.d.ts +13 -0
  114. package/lib/pipes/get-active-form-step-item.pipe.d.ts +13 -0
  115. package/lib/pipes/get-progressive-form-item.pipe.d.ts +14 -0
  116. package/lib/pipes/get-step-aria-label.pipe.d.ts +17 -0
  117. package/lib/pipes/index.d.ts +6 -0
  118. package/lib/pipes/items-with-value.pipe.d.ts +0 -1
  119. package/lib/services/dialog.service.d.ts +1 -0
  120. package/lib/services/form-manager.service.d.ts +13 -4
  121. package/lib/services/ng-form.service.d.ts +6 -0
  122. package/lib/utilities/generate-form-steps.d.ts +5 -1
  123. package/lib/utilities/update-step-status.d.ts +2 -2
  124. package/package.json +1 -1
  125. package/public-api.d.ts +0 -1
  126. package/esm2015/lib/directives/base-form-item-control.directive.js +0 -58
  127. package/esm2015/lib/directives/base-parent-item-control.directive.js +0 -42
  128. package/esm2015/lib/directives/base-single-selection-parent.directive.js +0 -53
  129. package/esm2015/lib/directives/form-item.directive.js +0 -22
  130. package/esm2015/lib/directives/index.js +0 -5
  131. package/lib/directives/base-form-item-control.directive.d.ts +0 -26
  132. package/lib/directives/base-parent-item-control.directive.d.ts +0 -19
  133. package/lib/directives/base-single-selection-parent.directive.d.ts +0 -26
  134. package/lib/directives/form-item.directive.d.ts +0 -13
  135. package/lib/directives/index.d.ts +0 -4
@@ -7,24 +7,24 @@ import * as i0 from "@angular/core";
7
7
  import * as i1 from "@angular/material/dialog";
8
8
  /** List of default error messages to display */
9
9
  export const DEFAULT_ERROR_MESSAGES = {
10
- email: 'This field must include a valid email format.',
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
- ? `This field's value must be less.`
13
- : `${isPresent(item === null || item === void 0 ? void 0 : item.minValue) ? `Min value: ${item === null || item === void 0 ? void 0 : item.minValue} - ` : ''}Max value: ${item === null || item === void 0 ? void 0 : item.minValue}`,
14
- maxlength: 'This field has exceeded the allowed maximum.',
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}`,
14
+ maxlength: $localize `This field has exceeded the allowed maximum.`,
15
15
  maxSelected: null,
16
16
  min: (item) => !isPresent(item) || !isPresent(item === null || item === void 0 ? void 0 : item.minValue)
17
- ? `This field's value must be greater.`
18
- : `Min value: ${item === null || item === void 0 ? void 0 : item.minValue}${!isPresent(item === null || item === void 0 ? void 0 : item.maxValue) ? '' : ` - Max value: ${item === null || item === void 0 ? void 0 : item.maxValue}`}`,
19
- minlength: 'This field has not met the required minimum.',
17
+ ? $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}` : '',
19
+ minlength: $localize `This field has not met the required minimum.`,
20
20
  minSelected: null,
21
- nonDigit: `This field's value must be numeric.`,
22
- pattern: `This field's input does not meet the accepted pattern.`,
23
- positive: `This field's value cannot be negative.`,
24
- required: 'This field is required.',
25
- requiredTrue: `This field's value must be 'true'.`,
26
- wholeNumber: `This field cannot contain a decimal.`,
27
- matDatepickerParse: `This field's value is not an accepted format.`,
21
+ nonDigit: $localize `This field's value must be numeric.`,
22
+ pattern: $localize `This field's input does not meet the accepted pattern.`,
23
+ positive: $localize `This field's value cannot be negative.`,
24
+ required: $localize `This field is required.`,
25
+ requiredTrue: `$localizeThis field's value must be 'true'.`,
26
+ wholeNumber: $localize `This field cannot contain a decimal.`,
27
+ matDatepickerParse: $localize `This field's value is not an accepted format.`,
28
28
  };
29
29
  export const WEB_FORM_CUSTOM_ERRORS = new InjectionToken('mtnaWebFormCustomFormErrors');
30
30
  export class MtnaWfUIService {
@@ -330,4 +330,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
330
330
  type: Inject,
331
331
  args: [WEB_FORM_CUSTOM_ERRORS]
332
332
  }] }]; } });
333
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dlYi1mb3JtLWFuZ3VsYXIvc3JjL2xpYi9zZXJ2aWNlcy91aS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFFLFNBQVMsRUFBb0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVsRCxPQUFPLEVBQTJDLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDeEksT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7O0FBbUJ2QyxnREFBZ0Q7QUFDaEQsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQXFCO0lBQ3RELEtBQUssRUFBRSwrQ0FBK0M7SUFDdEQsR0FBRyxFQUFFLENBQUMsSUFBb0UsRUFBRSxFQUFFLENBQzVFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxRQUFRLENBQUM7UUFDNUMsQ0FBQyxDQUFDLGtDQUFrQztRQUNwQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxRQUFRLEVBQUU7SUFDekcsU0FBUyxFQUFFLDhDQUE4QztJQUN6RCxXQUFXLEVBQUUsSUFBSTtJQUNqQixHQUFHLEVBQUUsQ0FBQyxJQUFvRSxFQUFFLEVBQUUsQ0FDNUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFFBQVEsQ0FBQztRQUM1QyxDQUFDLENBQUMscUNBQXFDO1FBQ3ZDLENBQUMsQ0FBQyxjQUFjLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxRQUFRLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsUUFBUSxFQUFFLEVBQUU7SUFDMUcsU0FBUyxFQUFFLDhDQUE4QztJQUN6RCxXQUFXLEVBQUUsSUFBSTtJQUNqQixRQUFRLEVBQUUscUNBQXFDO0lBQy9DLE9BQU8sRUFBRSx3REFBd0Q7SUFDakUsUUFBUSxFQUFFLHdDQUF3QztJQUNsRCxRQUFRLEVBQUUseUJBQXlCO0lBQ25DLFlBQVksRUFBRSxvQ0FBb0M7SUFDbEQsV0FBVyxFQUFFLHNDQUFzQztJQUNuRCxrQkFBa0IsRUFBRSwrQ0FBK0M7Q0FDcEUsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLElBQUksY0FBYyxDQUFlLDZCQUE2QixDQUFDLENBQUM7QUFHdEcsTUFBTSxPQUFPLGVBQWU7SUFXMUIsOERBQThEO0lBQzlELFlBQW9CLE1BQWlCLEVBQThDLE1BQVk7UUFBM0UsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQVhyQyx5REFBeUQ7UUFDakQsZ0JBQVcsR0FBcUQsRUFBRSxDQUFDO1FBQzNFLHdDQUF3QztRQUNoQyxlQUFVLEdBQXNELEVBQUUsQ0FBQztRQUMzRSxvREFBb0Q7UUFDNUMsa0JBQWEsR0FBc0MsRUFBRSxDQUFDO1FBQzlELHFFQUFxRTtRQUM3RCxxQkFBZ0IsR0FBcUUsRUFBRSxDQUFDO1FBSzlGLDhIQUE4SDtRQUM5SCxpSEFBaUg7UUFDakgsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFzQixDQUFDO0lBQ3ZDLENBQUM7SUFFRCxpQkFBaUI7UUFDZix5QkFBWSxJQUFJLENBQUMsYUFBYSxFQUFHO0lBQ25DLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFFBQVEsQ0FBQyxPQUFlLEVBQUUsSUFBNEI7UUFDcEQsd0NBQXdDO1FBQ3hDLElBQUksS0FBSyxHQUFHLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRTtZQUMzQiw4Q0FBOEM7WUFDOUMsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtnQkFDL0YsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUM5QyxzQ0FBc0M7YUFDdkM7aUJBQU0sSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtnQkFDOUYsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQzNDO1NBQ0Y7UUFDRCxPQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDM0QsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxPQUFPLENBQUMsRUFBVTtRQUNoQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7T0FHRztJQUNILG1CQUFtQixDQUFDLEdBQXlCO1FBQzNDLEtBQUssTUFBTSxFQUFFLElBQUksR0FBRyxFQUFFO1lBQ3BCLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRTtnQkFDakQsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEVBQUU7b0JBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxlQUFlLENBQWdCLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUNwRTtxQkFBTTtvQkFDTCxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDcEM7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILFlBQVksQ0FBQyxTQUFrQztRQUM3QyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsU0FBUyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDdEUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRTtnQkFDbkQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksZUFBZSxDQUFnQixJQUFJLENBQUMsQ0FBQzthQUMzRjtZQUNELFNBQVMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3hGO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsZUFBZSxDQUFDLGNBQTZCLEVBQUUsZUFBOEIsRUFBRSxPQUFnQixFQUFFLFFBQWdCLEVBQUUsS0FBSyxHQUFHLEtBQUs7UUFDOUgsSUFBSSxDQUFDLENBQUMsY0FBYyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxlQUFlLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDaEcsT0FBTztTQUNSO1FBQ0QsTUFBTSxNQUFNLEdBQUcsQ0FBQyxjQUFjLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDakQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFCLE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDL0MsS0FBSyxNQUFNLEVBQUUsSUFBSSxPQUFPLEVBQUU7Z0JBQ3hCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3RDLHdDQUF3QztnQkFDeEMsSUFBSSxTQUFTLEVBQUU7b0JBQ2IsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztvQkFDNUIsTUFBTSxtQkFBbUIsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7b0JBQ2xILDREQUE0RDtvQkFDNUQsSUFBSSxtQkFBbUIsRUFBRTt3QkFDdkIsSUFBSSxLQUFLLEVBQUU7NEJBQ1QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUM7eUJBQy9DO3dCQUNELG9FQUFvRTt3QkFDcEUsd0RBQXdEO3dCQUN4RCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRTs0QkFDdEUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUM7eUJBQzlFO3dCQUNELDJCQUEyQjt3QkFDM0IsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7cUJBQzlEO3lCQUFNO3dCQUNMLHdCQUF3Qjt3QkFDeEIsSUFBSSxDQUFDLDhCQUE4QixDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztxQkFDM0Q7aUJBQ0Y7cUJBQU07b0JBQ0wsT0FBTyxDQUFDLEtBQUssQ0FBQyxvREFBb0QsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2lCQUM1RjthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssd0JBQXdCLENBQUMsV0FBNEI7O1FBQzNELE1BQU0sUUFBUSxHQUFtQyxFQUFFLENBQUM7UUFDcEQsTUFBTSxNQUFNLEdBQUcsQ0FBQSxNQUFBLFdBQVcsQ0FBQyxTQUFTLDBDQUFFLE9BQU8sS0FBSSxFQUFFLENBQUM7UUFFcEQsS0FBSyxNQUFNLEVBQUUsSUFBSSxNQUFNLEVBQUU7WUFDdkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0QyxJQUFJLFNBQVMsRUFBRTtnQkFDYixJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLFVBQVUsQ0FBQyxFQUFFO29CQUNoRSxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztpQkFDakU7YUFDRjtpQkFBTTtnQkFDTCxPQUFPLENBQUMsS0FBSyxDQUFDLDhEQUE4RCxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBQ25GO1NBQ0Y7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxvQkFBb0IsQ0FBQyxVQUFtQyxFQUFFLFNBQWlCOztRQUNqRixNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO1FBQzdCLGlGQUFpRjtRQUNqRixJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzFCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUEsTUFBQSxVQUFVLENBQUMsT0FBTywwQ0FBRSxLQUFLLENBQUEsQ0FBQztTQUM1RTthQUFNLElBQUkscUJBQXFCLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdEMsTUFBTSxLQUFLLEdBQUcsTUFBQSxNQUFBLFVBQVUsQ0FBQyxPQUFPLDBDQUFFLEtBQUssbUNBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztZQUN0RCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3hCLCtFQUErRTtnQkFDL0UsZ0VBQWdFO2dCQUNoRSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDL0gsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDOUM7aUJBQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRTtnQkFDcEQsOEZBQThGO2dCQUM5RixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO2FBQ3pHO1NBQ0Y7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLHVCQUF1QixDQUFDLFNBQWtDLEVBQUUsT0FBZ0IsRUFBRSxRQUFnQjs7UUFDcEcsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztRQUM1QixNQUFNLFFBQVEscUJBQVEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBRSxDQUFDO1FBQy9ELElBQUksU0FBa0IsQ0FBQztRQUN2QixJQUFJLE9BQU8sRUFBRTtZQUNYLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7WUFDOUIsU0FBUztnQkFDUCxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7b0JBQ3ZCLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUztvQkFDaEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDekY7YUFBTTtZQUNMLE9BQU8sUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzFCLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSSxNQUFBLElBQUksQ0FBQyxTQUFTLDBDQUFFLFdBQVcsQ0FBQSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzFHO1FBQ0Qsc0RBQXNEO1FBQ3RELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUU7WUFDeEMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztTQUMzRDtRQUNELDBCQUEwQjtRQUMxQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFFBQVEsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLG1CQUFtQixDQUFDLFNBQWtDLEVBQUUsT0FBZ0I7O1FBQzlFLElBQUksT0FBTyxJQUFJLENBQUMsQ0FBQSxNQUFBLFNBQVMsQ0FBQyxPQUFPLDBDQUFFLE9BQU8sQ0FBQSxFQUFFO1lBQzFDLHlDQUF5QztZQUN6QyxJQUFJLFNBQVMsQ0FBQyxPQUFPLFlBQVksU0FBUyxFQUFFO2dCQUMxQyxJQUFJLENBQUMseUJBQXlCLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDM0M7aUJBQU07Z0JBQ0wsTUFBQSxTQUFTLENBQUMsT0FBTywwQ0FBRSxNQUFNLEVBQUUsQ0FBQzthQUM3QjtTQUNGO2FBQU0sSUFBSSxDQUFDLE9BQU8sS0FBSSxNQUFBLFNBQVMsQ0FBQyxPQUFPLDBDQUFFLE9BQU8sQ0FBQSxFQUFFO1lBQ2pELDBDQUEwQztZQUMxQyxTQUFTLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQzdCO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyw4QkFBOEIsQ0FBQyxTQUFrQyxFQUFFLE9BQWdCO1FBQ3pGLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztRQUN6RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLElBQUksaUJBQWlCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3JFLFNBQVMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1NBQzdCO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0sseUJBQXlCLENBQUMsSUFBNkI7UUFDN0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQW9CLENBQUM7UUFFeEMsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUkscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ25FLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQ3BDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM3QyxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsTUFBTSxFQUFFLENBQUM7WUFDZixLQUFLLE1BQU0sUUFBUSxJQUFJLEdBQUcsRUFBRTtnQkFDMUIsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxFQUFFO29CQUN2RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDNUQsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO3dCQUNyQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO3FCQUMzQztpQkFDRjthQUNGO1NBQ0Y7YUFBTSxJQUFJLE1BQU0sQ0FBcUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDbkcsK0JBQStCO1lBQy9CLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ2xDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNuRCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDM0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDM0M7YUFDRjtTQUNGO1FBQ0QsS0FBSyxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxXQUFXLENBQUMsSUFBZ0M7UUFDbEQsTUFBTSx1QkFBdUIsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUMvRSxJQUFJLENBQUMsdUJBQXVCLEVBQUU7WUFDNUIsT0FBTyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1NBQ3hEO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQzVDO0lBQ0gsQ0FBQzs7NkdBcFNVLGVBQWUsMkNBWWlDLHNCQUFzQjtpSEFadEUsZUFBZSxjQURGLE1BQU07NEZBQ25CLGVBQWU7a0JBRDNCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFhUSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgaXNQcmVzZW50LCBpc1R5cGUgfSBmcm9tICdAbXRuYS9jb3JlLXRzJztcbmltcG9ydCB7IEFubm90YXRhYmxlTnVtYmVyTWFwIH0gZnJvbSAnQG10bmEvcG9qby1zb2NpYWwtYW5ndWxhcic7XG5pbXBvcnQgeyBDb25kaXRpb25hbEl0ZW0sIEZvcm1JdGVtLCBGb3JtSXRlbUltcGwsIGlzQ29uZGl0aW9uYWxJdGVtLCBpc09wdGlvbkdyb3VwSXRlbUltcGwsIGlzT3B0aW9uSXRlbUltcGwgfSBmcm9tICdAbXRuYS93ZWItZm9ybS10cyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgTXRuYVdmRm9ybUl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2Zvcm0taXRlbS9mb3JtLWl0ZW0uY29tcG9uZW50JztcblxuLyoqIFJlZ2lzdHJ5IG9mIGN1c3RvbSBlcnJvciBtZXNzYWdlcyBmb3IgYSBzcGVjaWZpYyBmb3JtIGl0ZW0uIEEgY3VzdG9tIGVycm9yIGNhbiBhbHNvXG4gKiBiZSBhIGZ1bmN0aW9uIHJldHVybmluZyBhIHN0cmluZy4gVGhlIEZvcm1JdGVtIG9iamVjdCBpcyBwYXNzZWQgdG8gYW55IFZhbGlkYXRpb25FcnJvcnNcbiAqIHRoYXQgYXJlIGZ1bmN0aW9ucywgc28gaXRlbSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBjYW4gYmUgcHJvdmlkZWQuXG4gKiBAZXhhbXBsZSB7XG4gKiBtYXg6IGBUaGlzIGZpZWxkJ3MgdmFsdWUgbXVzdCBiZSBsZXNzLmAsXG4gKiBtaW46IChpdGVtOiBGb3JtSXRlbUltcGw8YW55PikgPT4gaW5zdGFuY2VvZldob2xlTnVtYmVySXRlbShpdGVtKVxuICogPyBgVGhpcyBmaWVsZCdzIHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICR7aXRlbS5taW5WYWx1ZX0uYFxuICogOiBgVGhpcyBmaWVsZCdzIHZhbHVlIG11c3QgYmUgZ3JlYXRlci5gXG4gKiB9XG4gKi9cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTppbnRlcmZhY2Utb3Zlci10eXBlLWxpdGVyYWxcbmV4cG9ydCB0eXBlIEN1c3RvbUVycm9ycyA9IHtcbiAgW2lkOiBzdHJpbmddOiBWYWxpZGF0aW9uRXJyb3JzO1xufTtcblxuLyoqIExpc3Qgb2YgZGVmYXVsdCBlcnJvciBtZXNzYWdlcyB0byBkaXNwbGF5ICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9FUlJPUl9NRVNTQUdFUzogVmFsaWRhdGlvbkVycm9ycyA9IHtcbiAgZW1haWw6ICdUaGlzIGZpZWxkIG11c3QgaW5jbHVkZSBhIHZhbGlkIGVtYWlsIGZvcm1hdC4nLFxuICBtYXg6IChpdGVtPzogRm9ybUl0ZW1JbXBsPG51bWJlcj4gJiB7IG1heFZhbHVlOiBudW1iZXI7IG1pblZhbHVlOiBudW1iZXIgfSkgPT5cbiAgICAhaXNQcmVzZW50KGl0ZW0pIHx8ICFpc1ByZXNlbnQoaXRlbT8ubWF4VmFsdWUpXG4gICAgICA/IGBUaGlzIGZpZWxkJ3MgdmFsdWUgbXVzdCBiZSBsZXNzLmBcbiAgICAgIDogYCR7aXNQcmVzZW50KGl0ZW0/Lm1pblZhbHVlKSA/IGBNaW4gdmFsdWU6ICR7aXRlbT8ubWluVmFsdWV9IC0gYCA6ICcnfU1heCB2YWx1ZTogJHtpdGVtPy5taW5WYWx1ZX1gLFxuICBtYXhsZW5ndGg6ICdUaGlzIGZpZWxkIGhhcyBleGNlZWRlZCB0aGUgYWxsb3dlZCBtYXhpbXVtLicsXG4gIG1heFNlbGVjdGVkOiBudWxsLFxuICBtaW46IChpdGVtPzogRm9ybUl0ZW1JbXBsPG51bWJlcj4gJiB7IG1heFZhbHVlOiBudW1iZXI7IG1pblZhbHVlOiBudW1iZXIgfSkgPT5cbiAgICAhaXNQcmVzZW50KGl0ZW0pIHx8ICFpc1ByZXNlbnQoaXRlbT8ubWluVmFsdWUpXG4gICAgICA/IGBUaGlzIGZpZWxkJ3MgdmFsdWUgbXVzdCBiZSBncmVhdGVyLmBcbiAgICAgIDogYE1pbiB2YWx1ZTogJHtpdGVtPy5taW5WYWx1ZX0keyFpc1ByZXNlbnQoaXRlbT8ubWF4VmFsdWUpID8gJycgOiBgIC0gTWF4IHZhbHVlOiAke2l0ZW0/Lm1heFZhbHVlfWB9YCxcbiAgbWlubGVuZ3RoOiAnVGhpcyBmaWVsZCBoYXMgbm90IG1ldCB0aGUgcmVxdWlyZWQgbWluaW11bS4nLFxuICBtaW5TZWxlY3RlZDogbnVsbCxcbiAgbm9uRGlnaXQ6IGBUaGlzIGZpZWxkJ3MgdmFsdWUgbXVzdCBiZSBudW1lcmljLmAsXG4gIHBhdHRlcm46IGBUaGlzIGZpZWxkJ3MgaW5wdXQgZG9lcyBub3QgbWVldCB0aGUgYWNjZXB0ZWQgcGF0dGVybi5gLFxuICBwb3NpdGl2ZTogYFRoaXMgZmllbGQncyB2YWx1ZSBjYW5ub3QgYmUgbmVnYXRpdmUuYCxcbiAgcmVxdWlyZWQ6ICdUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLicsXG4gIHJlcXVpcmVkVHJ1ZTogYFRoaXMgZmllbGQncyB2YWx1ZSBtdXN0IGJlICd0cnVlJy5gLFxuICB3aG9sZU51bWJlcjogYFRoaXMgZmllbGQgY2Fubm90IGNvbnRhaW4gYSBkZWNpbWFsLmAsXG4gIG1hdERhdGVwaWNrZXJQYXJzZTogYFRoaXMgZmllbGQncyB2YWx1ZSBpcyBub3QgYW4gYWNjZXB0ZWQgZm9ybWF0LmAsXG59O1xuXG5leHBvcnQgY29uc3QgV0VCX0ZPUk1fQ1VTVE9NX0VSUk9SUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxDdXN0b21FcnJvcnM+KCdtdG5hV2ViRm9ybUN1c3RvbUZvcm1FcnJvcnMnKTtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBNdG5hV2ZVSVNlcnZpY2Uge1xuICAvKiogTWFwIG9mIGFubm90YXRpb24gY291bnRzIGZvciBlYWNoIGFubm90YXRhYmxlIGl0ZW0gKi9cbiAgcHJpdmF0ZSBhbm5vdGF0aW9uczogeyBbaWQ6IHN0cmluZ106IEJlaGF2aW9yU3ViamVjdDxudW1iZXIgfCBudWxsPiB9ID0ge307XG4gIC8qKiBNYXAgb2YgY29tcG9uZW50cyBpbiB0aGUgTXRuYUZvcm0gKi9cbiAgcHJpdmF0ZSBjb21wb25lbnRzOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBNdG5hV2ZGb3JtSXRlbUNvbXBvbmVudCB9ID0ge307XG4gIC8qKiBNYXAgb2YgaXRlbS5kaXNhYmxlZCB2YWx1ZXMgdGhhdCBoYXZlIGNoYW5nZWQgKi9cbiAgcHJpdmF0ZSBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH0gPSB7fTtcbiAgLyoqIE1hcCBvZiB0b2dnbGVyIElEJ3MgZm9yIGNvbXBvbmVudHMgdGhhdCBoYXZlIG11bHRpcGxlIHRvZ2dsZXJzICovXG4gIHByaXZhdGUgbXVsdGlwbGVFbmFibGVyczogeyBbaW5zdGFuY2VJZDogc3RyaW5nXTogeyBbdG9nZ2xlcklkOiBzdHJpbmddOiBzdHJpbmcgfSB8IG51bGwgfSA9IHt9O1xuICBwcml2YXRlIGVycm9yczogQ3VzdG9tRXJyb3JzO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csIEBPcHRpb25hbCgpIEBJbmplY3QoV0VCX0ZPUk1fQ1VTVE9NX0VSUk9SUykgZXJyb3JzPzogYW55KSB7XG4gICAgLy8gV29ya2Fyb3VuZCBmb3I6IE1ldGFkYXRhIGNvbGxlY3RlZCBjb250YWlucyBhbiBlcnJvciB0aGF0IHdpbGwgYmUgcmVwb3J0ZWQgYXQgcnVudGltZTogQ291bGQgbm90IHJlc29sdmUgdHlwZSBDdXN0b21FcnJvcnMuXG4gICAgLy8gc2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQ5NTEzMzU5L2NvdWxkLW5vdC1yZXNvbHZlLXR5cGUtZG9jdW1lbnQtaW4tYW5ndWxhcjUvNTM3MTU2NDIjNTM3MTU2NDJcbiAgICB0aGlzLmVycm9ycyA9IGVycm9ycyBhcyBDdXN0b21FcnJvcnM7XG4gIH1cblxuICBnZXREaXNhYmxlZFN0YXRlcygpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLmRpc2FibGVkU3RhdGUgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGVycm9yIG1lc3NhZ2UgbWF0Y2hpbmcgdGhlIGVycm9yIGlkXG4gICAqIEBwYXJhbSBlcnJvcklkIElkIG9mIHRoZSBlcnJvciwgdG8gZmluZCB0aGUgYXNzb2NpYXRlZCBlcnJvciBtZXNzYWdlXG4gICAqIEBwYXJhbSBpdGVtIEZvcm1JdGVtIHRvIHBhc3MgdG8gVmFsaWRhdGlvbkVycm9ycyB0aGF0IGFyZSBmdW5jdGlvbnMuIEZvciBpbnN0YW5jZSxcbiAgICogdGhpcyBpcyB1c2VmdWwgZm9yICdtaW4nICYgJ21heCcgdmFsdWUgbGltaXRzIHRvIGRpc3BsYXkgbW9yZSBoZWxwZnVsIG1lc3NhZ2VzXG4gICAqL1xuICBnZXRFcnJvcihlcnJvcklkOiBzdHJpbmcsIGl0ZW0/OiBGb3JtSXRlbUltcGw8dW5rbm93bj4pOiBzdHJpbmcge1xuICAgIC8vIGRlZmF1bHQgd2hlbiBubyBjdXN0b20gbWVzc2FnZSBleGlzdHNcbiAgICBsZXQgZXJyb3IgPSBERUZBVUxUX0VSUk9SX01FU1NBR0VTW2Vycm9ySWRdO1xuICAgIGlmICghIXRoaXMuZXJyb3JzICYmICEhaXRlbSkge1xuICAgICAgLy8gY2hlY2sgZm9yIGluc3RhbmNlIHNwZWNpZmljLCB2aWEgaW5zdGFuY2VJZFxuICAgICAgaWYgKGlzUHJlc2VudCh0aGlzLmVycm9yc1tpdGVtLmluc3RhbmNlSWRdKSAmJiBpc1ByZXNlbnQodGhpcy5lcnJvcnNbaXRlbS5pbnN0YW5jZUlkXVtlcnJvcklkXSkpIHtcbiAgICAgICAgZXJyb3IgPSB0aGlzLmVycm9yc1tpdGVtLmluc3RhbmNlSWRdW2Vycm9ySWRdO1xuICAgICAgICAvLyBjaGVjayBmb3IgaXRlbSBzcGVjaWZpYywgdmlhIGl0ZW1JZFxuICAgICAgfSBlbHNlIGlmIChpc1ByZXNlbnQodGhpcy5lcnJvcnNbaXRlbS5pdGVtSWRdKSAmJiBpc1ByZXNlbnQodGhpcy5lcnJvcnNbaXRlbS5pdGVtSWRdW2Vycm9ySWRdKSkge1xuICAgICAgICBlcnJvciA9IHRoaXMuZXJyb3JzW2l0ZW0uaXRlbUlkXVtlcnJvcklkXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiBlcnJvciA9PT0gJ2Z1bmN0aW9uJyA/IGVycm9yKGl0ZW0pIDogZXJyb3I7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgcmVnaXN0ZXJlZCBjb21wb25lbnQgYnkgaW50YW5jZSBpZC5cbiAgICogQHBhcmFtIGlkIHRoZSBpbnN0YW5jZUlkXG4gICAqIEByZXR1cm5zIHRoZSB7QGxpbmsgRm9ybUl0ZW1Db21wb25lbnR9IHRoYXQgcmVwcmVzZW50cyB0aGF0IElEIG9yIHVuZGVmaW5lZCBpZiBub3QgcmVnaXN0ZXJlZC5cbiAgICovXG4gIGdldEl0ZW0oaWQ6IHN0cmluZyk6IE10bmFXZkZvcm1JdGVtQ29tcG9uZW50IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRzW2lkXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBpbml0aWFsIG1hcCBvZiBhbm5vdGF0aW9uIGNvdW50cywgYW5kL29yIHB1c2hlcyB0aGUgbmV3IGNvdW50IG9udG8gdGhlIGNvbXBvbmVudCBvYnNlcnZhYmxlIHN0cmVhbVxuICAgKiBAcGFyYW0gbWFwIEFubm90YXRhYmxlTnVtYmVyTWFwIG9mIGNvdW50cyBtYXBwZWQgdG8gdGhlaXIgYW5ub3RhdGFibGVJZHNcbiAgICovXG4gIHJlZ2lzdGVyQW5ub3RhdGlvbnMobWFwOiBBbm5vdGF0YWJsZU51bWJlck1hcCkge1xuICAgIGZvciAoY29uc3QgaWQgaW4gbWFwKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1hcCwgaWQpKSB7XG4gICAgICAgIGlmICghdGhpcy5hbm5vdGF0aW9uc1tpZF0pIHtcbiAgICAgICAgICB0aGlzLmFubm90YXRpb25zW2lkXSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyIHwgbnVsbD4obWFwW2lkXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hbm5vdGF0aW9uc1tpZF0ubmV4dChtYXBbaWRdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNYXBzIGEgY29tcG9uZW50IHRvIGl0cyBpdGVtcyBpbnN0YW5jZUlkLlxuICAgKiBAcGFyYW0gY29tcG9uZW50IGNvbXBvbmVudCBjYWxsaW5nIHRoaXMgbWV0aG9kLCBpLmUuICd0aGlzJ1xuICAgKi9cbiAgcmVnaXN0ZXJTZWxmKGNvbXBvbmVudDogTXRuYVdmRm9ybUl0ZW1Db21wb25lbnQpIHtcbiAgICB0aGlzLmNvbXBvbmVudHNbY29tcG9uZW50Lml0ZW0uaW5zdGFuY2VJZF0gPSBjb21wb25lbnQ7XG4gICAgaWYgKCEhY29tcG9uZW50Lml0ZW0uYW5ub3RhdGFibGVJZCAmJiBjb21wb25lbnQuaXRlbS5hbm5vdGF0aW9uRW5hYmxlZCkge1xuICAgICAgaWYgKCF0aGlzLmFubm90YXRpb25zW2NvbXBvbmVudC5pdGVtLmFubm90YXRhYmxlSWRdKSB7XG4gICAgICAgIHRoaXMuYW5ub3RhdGlvbnNbY29tcG9uZW50Lml0ZW0uYW5ub3RhdGFibGVJZF0gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlciB8IG51bGw+KG51bGwpO1xuICAgICAgfVxuICAgICAgY29tcG9uZW50LmFubm90YXRpb25zJCA9IHRoaXMuYW5ub3RhdGlvbnNbY29tcG9uZW50Lml0ZW0uYW5ub3RhdGFibGVJZF0uYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgYSBGb3JtSXRlbSdzIHZpc2libGl0eSBhbmQgZW5hYmxlL2Rpc2FibGUgc3RhdGVcbiAgICpcbiAgICogQHBhcmFtIGVuYWJsZWRJdGVtSWRzIGFycmF5IG9mIGNvbXBvbmVudCBJRHMgZm9yIGVuYWJsZWQgaXRlbXMuXG4gICAqIEBwYXJhbSBkaXNhYmxlZEl0ZW1JZHMgYXJyYXkgb2YgY29tcG9uZW50IElEcyBmb3IgZGlzYWJsZWQgaXRlbXMuXG4gICAqIEBwYXJhbSBlbmFibGVkIFdoZXRoZXIgdGhlIGVuYWJsZWRJdGVtSWRzIGFyZSBlbmFibGVkLlxuICAgKiBAcGFyYW0gY2FsbGVySWQgaW5zdGFuY2VJZCBvZiB0aGUgaXRlbSBpbnZva2luZyB0aGlzIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSByZXNldCBXaGV0aGVyIHRvIHJlc2V0IHRoZSBtdWx0aXBsZSBlbmFibGVyIG1hcCBvZiB0aGUgdG9nZ2xlZCBpdGVtXG4gICAqL1xuICB0b2dnbGVGb3JtSXRlbXMoZW5hYmxlZEl0ZW1JZHM6IEFycmF5PHN0cmluZz4sIGRpc2FibGVkSXRlbUlkczogQXJyYXk8c3RyaW5nPiwgZW5hYmxlZDogYm9vbGVhbiwgY2FsbGVySWQ6IHN0cmluZywgcmVzZXQgPSBmYWxzZSkge1xuICAgIGlmICgoIWVuYWJsZWRJdGVtSWRzIHx8ICFlbmFibGVkSXRlbUlkcy5sZW5ndGgpICYmICghZGlzYWJsZWRJdGVtSWRzIHx8ICFkaXNhYmxlZEl0ZW1JZHMubGVuZ3RoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhbGxJZHMgPSBbZW5hYmxlZEl0ZW1JZHMsIGRpc2FibGVkSXRlbUlkc107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGxJZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGl0ZW1JZHMgPSBhbGxJZHNbaV07XG4gICAgICBjb25zdCBpc0VuYWJsZWQgPSBpID09PSAwID8gZW5hYmxlZCA6ICFlbmFibGVkO1xuICAgICAgZm9yIChjb25zdCBpZCBvZiBpdGVtSWRzKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50c1tpZF07XG4gICAgICAgIC8vIElmIGNvbXBvbmVudCBpcyByZWdpc3RlcmVkLCB0b2dnbGUgaXRcbiAgICAgICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICAgIGNvbnN0IGl0ZW0gPSBjb21wb25lbnQuaXRlbTtcbiAgICAgICAgICBjb25zdCBoYXNNdWx0aXBsZUVuYWJsZXJzID0gaXNDb25kaXRpb25hbEl0ZW0oaXRlbSkgJiYgaXRlbS5jb25kaXRpb24gPyBpdGVtLmNvbmRpdGlvbi5pdGVtSWRzLmxlbmd0aCA+IDEgOiBmYWxzZTtcbiAgICAgICAgICAvLyBJZiBpdGVtIGhhcyBtb3JlIHRoYW4gMSBlbmFibGVyLCBoYW5kbGUgbXVsdGlwbGUgZW5hYmxlcnNcbiAgICAgICAgICBpZiAoaGFzTXVsdGlwbGVFbmFibGVycykge1xuICAgICAgICAgICAgaWYgKHJlc2V0KSB7XG4gICAgICAgICAgICAgIHRoaXMubXVsdGlwbGVFbmFibGVyc1tpdGVtLmluc3RhbmNlSWRdID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIGEgbWFwIGhhcyBub3QgYmVlbiByZWdpc3RlcmVkLCB0aGVuIGJ1aWxkIHVwIGEgbWFwIHRvIHJlZ2lzdGVyXG4gICAgICAgICAgICAvLyBTaG91bGQgb25seSBoYXBwZW4gdGhlIGZpcnN0IHRpbWUgYW4gaXRlbSBpcyB0b2dnbGVkLlxuICAgICAgICAgICAgaWYgKCF0aGlzLm11bHRpcGxlRW5hYmxlcnNbaXRlbS5pbnN0YW5jZUlkXSAmJiBpc0NvbmRpdGlvbmFsSXRlbShpdGVtKSkge1xuICAgICAgICAgICAgICB0aGlzLm11bHRpcGxlRW5hYmxlcnNbaXRlbS5pbnN0YW5jZUlkXSA9IHRoaXMuX3JlZ2lzdGVyQ3VycmVudEVuYWJsZXJzKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaGFuZGxlIE11bHRpcGxlIEVuYWJsZXJzXG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVNdWx0aXBsZUVuYWJsZXJzKGNvbXBvbmVudCwgaXNFbmFibGVkLCBjYWxsZXJJZCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5vdCBtdWx0aXBsZSBlbmFibGVyc1xuICAgICAgICAgICAgdGhpcy5fdG9nZ2xlRGlzYWJsZWRTdGF0ZUFuZENvbnRyb2woY29tcG9uZW50LCBpc0VuYWJsZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdbdG9nZ2xlRm9ybUl0ZW1zXSBjb21wb25lbnQgaGFzIG5vdCBiZWVuIHJlZ2lzdGVyZCcsIGlkLCBlbmFibGVkLCBjYWxsZXJJZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIG1hcCBvZiBhbGwgSURzIGN1cnJlbnRseSBpbmZsdWVuY2luZyBhbiBpdGVtLlxuICAgKiBAcGFyYW0gdG9nZ2xlZEl0ZW0gaXRlbSBiZWluZyB0b2dnbGVkXG4gICAqL1xuICBwcml2YXRlIF9yZWdpc3RlckN1cnJlbnRFbmFibGVycyh0b2dnbGVkSXRlbTogQ29uZGl0aW9uYWxJdGVtKTogeyBbY2FsbGVySWQ6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICBjb25zdCBlbmFibGVyczogeyBbY2FsbGVySWQ6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gICAgY29uc3QgYWxsSWRzID0gdG9nZ2xlZEl0ZW0uY29uZGl0aW9uPy5pdGVtSWRzIHx8IFtdO1xuXG4gICAgZm9yIChjb25zdCBpZCBvZiBhbGxJZHMpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50c1tpZF07XG4gICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgIGlmICh0aGlzLl9pc0N1cnJlbnRseVRvZ2dsaW5nKGNvbXBvbmVudCwgdG9nZ2xlZEl0ZW0uaW5zdGFuY2VJZCkpIHtcbiAgICAgICAgICBlbmFibGVyc1tjb21wb25lbnQuaXRlbS5pbnN0YW5jZUlkXSA9IGNvbXBvbmVudC5pdGVtLmluc3RhbmNlSWQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tyZWdpc3RlckN1cnJlbnRFbmFibGVyc10gY29tcG9uZW50IGhhcyBub3QgYmVlbiByZWdpc3RlcmVkLicsIGlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZW5hYmxlcnM7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBtYXAgb2YgY29tcG9uZW50cy4gVGhpcyBzaG91bGQgYmUgY2FsbGVkIGJ5IHRoZSBmb3JtIHdoZW5cbiAgICogaXQgaXMgZGVzdHJveWVkLlxuICAgKi9cbiAgcmVzZXRDb21wb25lbnRNYXAoKSB7XG4gICAgdGhpcy5hbm5vdGF0aW9ucyA9IHt9O1xuICAgIHRoaXMuY29tcG9uZW50cyA9IHt9O1xuICAgIHRoaXMuZGlzYWJsZWRTdGF0ZSA9IHt9O1xuICAgIHRoaXMubXVsdGlwbGVFbmFibGVycyA9IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgYW4gaW5mbHVlbmNlciBpcyBjdXJyZW50bHkgdG9nZ2xpbmcgdGhlIHNwZWNpZmllZCB0b2dnbGVkSXRlbUlkLlxuICAgKiBAcGFyYW0gaW5mbHVlbmNlciBJdGVtIHRvIGNoZWNrIHdoZXRoZXIgaXQncyBjdXJyZW50bHkgaW5mbHVlbmNpbmcgdGhlIHRvZ2dsZWRJdGVtSWRcbiAgICogQHBhcmFtIHRvZ2dsZWRJZCBJbnN0YW5jZUlkIG9mIHRoZSBpdGVtIGJlaW5nIHRvZ2dsZWRcbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgaW5mbHVlbmNlciBpcyBjdXJyZW50bHkgdG9nZ2xpbmcgdGhlIHRvZ2dsZWQgaXRlbVxuICAgKi9cbiAgcHJpdmF0ZSBfaXNDdXJyZW50bHlUb2dnbGluZyhpbmZsdWVuY2VyOiBNdG5hV2ZGb3JtSXRlbUNvbXBvbmVudCwgdG9nZ2xlZElkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBpdGVtID0gaW5mbHVlbmNlci5pdGVtO1xuICAgIC8vIEl0ZW0gaGFzIHNpbmdsZSBvcHRpb24gcHJvcGVydHksIHNvIGNoZWNrIGlmIHNlbGVjdGVkLCBvciBpdGVtLnZhbHVlIGlzICd0cnVlJ1xuICAgIGlmIChpc09wdGlvbkl0ZW1JbXBsKGl0ZW0pKSB7XG4gICAgICByZXR1cm4gaXRlbS5vcHRpb24uc2VsZWN0ZWQgfHwgISFpdGVtLnZhbHVlIHx8ICEhaW5mbHVlbmNlci5jb250cm9sPy52YWx1ZTtcbiAgICB9IGVsc2UgaWYgKGlzT3B0aW9uR3JvdXBJdGVtSW1wbChpdGVtKSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBpbmZsdWVuY2VyLmNvbnRyb2w/LnZhbHVlID8/IGl0ZW0udmFsdWU7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgLy8gZmluZCB0aGUgaW5kZXggb2Ygb3B0aW9ucyB0aGF0IGNvbnRhaW4gdGhlICd0b2dnbGVkSWQnIGluIHRoZWlyIGVuYWJsZWRJdGVtc1xuICAgICAgICAvLyAmIGNoZWNrIGlmIGF0IGxlYXN0IDEgaXMgc2VsZWN0ZWQsIG9yIGl0cyAndHJ1ZScgaW4gdGhlIHZhbHVlXG4gICAgICAgIGNvbnN0IG9wdGlvbkluZGV4ZXMgPSBpdGVtLm9wdGlvbnMubWFwKChvLCBpKSA9PiAoby5lbmFibGVkSXRlbXMuc29tZSgoaWQpID0+IGlkID09PSB0b2dnbGVkSWQpID8gaSA6IG51bGwpKS5maWx0ZXIoaXNQcmVzZW50KTtcbiAgICAgICAgcmV0dXJuIG9wdGlvbkluZGV4ZXMuc29tZSgoaSkgPT4gISF2YWx1ZVtpXSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIC8vIGlmIHRoZSB2YWx1ZSBpcyBhIHNpbmdsZSB2YWx1ZSwgZ2V0IHRoZSBlbmFibGluZyBvcHRpb24gaWRzIGFuZCBjaGVjayBmb3IgdGhlIHZhbHVlIGluIHRoZW1cbiAgICAgICAgcmV0dXJuIGl0ZW0ub3B0aW9ucy5zb21lKChvKSA9PiBvLm9wdGlvbi5pZCA9PT0gdmFsdWUgJiYgby5lbmFibGVkSXRlbXMuc29tZSgoaWQpID0+IGlkID09PSB0b2dnbGVkSWQpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgY29tcG9uZW50IHZpc2liaWxpdHkgZm9yIGEgRm9ybUl0ZW0gd2l0aCBtdWx0aXBsZSBlbmFibGVycyBpbiBpdHMgY29uZGl0aW9uXG4gICAqIEBwYXJhbSBjb21wb25lbnQgRm9ybUl0ZW1Db21wb25lbnQgYmVpbmcgdG9nZ2xlZFxuICAgKiBAcGFyYW0gZW5hYmxlZCBXaGV0aGVyIHRoZSBjb21wb25lbnQgaXMgYmVpbmcgZW5hYmxlZFxuICAgKiBAcGFyYW0gY2FsbGVySWQgSUQgb2YgdGhlIGNhbGxlciB0b2dnbGluZyB0aGlzIGNvbXBvbmVudFxuICAgKi9cbiAgcHJpdmF0ZSBfaGFuZGxlTXVsdGlwbGVFbmFibGVycyhjb21wb25lbnQ6IE10bmFXZkZvcm1JdGVtQ29tcG9uZW50LCBlbmFibGVkOiBib29sZWFuLCBjYWxsZXJJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgaXRlbSA9IGNvbXBvbmVudC5pdGVtO1xuICAgIGNvbnN0IGVuYWJsZXJzID0geyAuLi50aGlzLm11bHRpcGxlRW5hYmxlcnNbaXRlbS5pbnN0YW5jZUlkXSB9O1xuICAgIGxldCBpc0VuYWJsZWQ6IGJvb2xlYW47XG4gICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgIGVuYWJsZXJzW2NhbGxlcklkXSA9IGNhbGxlcklkO1xuICAgICAgaXNFbmFibGVkID1cbiAgICAgICAgaXNDb25kaXRpb25hbEl0ZW0oaXRlbSkgJiZcbiAgICAgICAgISFpdGVtLmNvbmRpdGlvbiAmJlxuICAgICAgICAoIWl0ZW0uY29uZGl0aW9uLmFsbFJlcXVpcmVkIHx8IGl0ZW0uY29uZGl0aW9uLml0ZW1JZHMuZXZlcnkoKGlkKSA9PiAhIWVuYWJsZXJzW2lkXSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgZW5hYmxlcnNbY2FsbGVySWRdO1xuICAgICAgaXNFbmFibGVkID0gISgoaXNDb25kaXRpb25hbEl0ZW0oaXRlbSkgJiYgaXRlbS5jb25kaXRpb24/LmFsbFJlcXVpcmVkKSB8fCAhT2JqZWN0LmtleXMoZW5hYmxlcnMpLmxlbmd0aCk7XG4gICAgfVxuICAgIC8vIElmIGVuYWJsZWQgPT09IGRpc2FibGVkLCB0aGVuIHRoZSBzdGF0ZSBoYXMgY2hhbmdlZFxuICAgIGlmICh0aGlzLl9pc0Rpc2FibGVkKGl0ZW0pID09PSBpc0VuYWJsZWQpIHtcbiAgICAgIHRoaXMuX3RvZ2dsZURpc2FibGVkU3RhdGVBbmRDb250cm9sKGNvbXBvbmVudCwgaXNFbmFibGVkKTtcbiAgICB9XG4gICAgLy8gc2V0IHRoZSBuZXcgZW5hYmxlciBtYXBcbiAgICB0aGlzLm11bHRpcGxlRW5hYmxlcnNbaXRlbS5pbnN0YW5jZUlkXSA9IGVuYWJsZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGNvbnRyb2wgb24gYSBGb3JtSXRlbUNvbXBvbmVudFxuICAgKiBAcGFyYW0gY29tcG9uZW50IEZvcm1JdGVtQ29tcG9uZW50IHRvIGVuYWJsZSBvciBkaXNhYmxlIGl0cyBjb250cm9sXG4gICAqIEBwYXJhbSBlbmFibGVkIHdoZXRoZXIgdG8gZW5hYmxlIHRoZSBjb250cm9sXG4gICAqL1xuICBwcml2YXRlIF90b2dnbGVDb250cm9sU3RhdGUoY29tcG9uZW50OiBNdG5hV2ZGb3JtSXRlbUNvbXBvbmVudCwgZW5hYmxlZDogYm9vbGVhbikge1xuICAgIGlmIChlbmFibGVkICYmICFjb21wb25lbnQuY29udHJvbD8uZW5hYmxlZCkge1xuICAgICAgLy8gRW5hYmxlIHRoZSBjb250cm9sIGlmIGl0IGlzbid0IGFscmVhZHlcbiAgICAgIGlmIChjb21wb25lbnQuY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgICAgICB0aGlzLl9lbmFibGVJbmRpdmlkdWFsQ29udHJvbHMoY29tcG9uZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbXBvbmVudC5jb250cm9sPy5lbmFibGUoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFlbmFibGVkICYmIGNvbXBvbmVudC5jb250cm9sPy5lbmFibGVkKSB7XG4gICAgICAvLyBEaXNhYmxlIHRoZSBjb250cm9sIGlmIGl0IGlzbid0IGFscmVhZHlcbiAgICAgIGNvbXBvbmVudC5jb250cm9sLmRpc2FibGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyBib3RoIHRoZSBjb21wb25lbnQgdmlzaWJsaXR5IGFuZCB0aGUgY29udHJvbCdzIGVuYWJsZS9kaXNhYmxlIHN0YXR1c1xuICAgKiBAcGFyYW0gY29tcG9uZW50IEZvcm1JdGVtQ29tcG9uZW50IHRvIHNob3cgb3IgaGlkZSBhbmQgZW5hYmxlIG9yIGRpc2FibGVcbiAgICogQHBhcmFtIGVuYWJsZWQgd2hldGhlciB0byBzaG93IHRoZSBjb21wb25lbnQgYW5kIHdoZXRoZXIgdG8gZW5hYmxlIHRoZSBjb21wb25lbnRcbiAgICovXG4gIHByaXZhdGUgX3RvZ2dsZURpc2FibGVkU3RhdGVBbmRDb250cm9sKGNvbXBvbmVudDogTXRuYVdmRm9ybUl0ZW1Db21wb25lbnQsIGVuYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRpc2FibGVkU3RhdGVbY29tcG9uZW50Lml0ZW0uaW5zdGFuY2VJZF0gPSAhZW5hYmxlZDtcbiAgICB0aGlzLl90b2dnbGVDb250cm9sU3RhdGUoY29tcG9uZW50LCBlbmFibGVkKTtcbiAgICBpZiAoaXNDb25kaXRpb25hbEl0ZW0oY29tcG9uZW50Lml0ZW0pICYmIGNvbXBvbmVudC5pdGVtLmhpZGVPbkRpc2FibGUpIHtcbiAgICAgIGNvbXBvbmVudC52aXNpYmxlID0gZW5hYmxlZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyBjb250cm9scyBpbmRpdmlkdWFsbHkgdXNpbmcgcmVjdXJzaW9uLlxuICAgKiBGb3JtR3JvdXBzIHNob3VsZCBvbmx5IGV4aXN0IGZvciBpdGVtcyB3aXRoICdpdGVtcycgYXJyYXlzLCBvclxuICAgKiBpZiB0aGUgY29tcG9uZW50IGlzIGEgQmFzZVBhcmVudEl0ZW1Db250cm9sXG4gICAqIEBwYXJhbSBjb21wIEZvcm1JdGVtQ29tcG9uZW50XG4gICAqL1xuICBwcml2YXRlIF9lbmFibGVJbmRpdmlkdWFsQ29udHJvbHMoY29tcDogTXRuYVdmRm9ybUl0ZW1Db21wb25lbnQpIHtcbiAgICBjb25zdCBncm91cCA9IGNvbXAuY29udHJvbCBhcyBGb3JtR3JvdXA7XG5cbiAgICBpZiAoaXNPcHRpb25JdGVtSW1wbChjb21wLml0ZW0pIHx8IGlzT3B0aW9uR3JvdXBJdGVtSW1wbChjb21wLml0ZW0pKSB7XG4gICAgICBjb25zdCBtYXAgPSBjb21wLml0ZW0ub3B0aW9uSXRlbU1hcDtcbiAgICAgIGNvbnN0IHNlbGYgPSBncm91cC5nZXQoY29tcC5pdGVtLmluc3RhbmNlSWQpO1xuICAgICAgc2VsZj8uZW5hYmxlKCk7XG4gICAgICBmb3IgKGNvbnN0IG9wdGlvbklkIGluIG1hcCkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1hcCwgb3B0aW9uSWQpKSB7XG4gICAgICAgICAgY29uc3QgY2hpbGRDb21wID0gdGhpcy5jb21wb25lbnRzW21hcFtvcHRpb25JZF0uaW5zdGFuY2VJZF07XG4gICAgICAgICAgaWYgKCF0aGlzLl9pc0Rpc2FibGVkKGNoaWxkQ29tcC5pdGVtKSkge1xuICAgICAgICAgICAgdGhpcy5fdG9nZ2xlQ29udHJvbFN0YXRlKGNoaWxkQ29tcCwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1R5cGU8eyBpdGVtczogRm9ybUl0ZW1JbXBsPHVua25vd24+W10gfT4oY29tcC5pdGVtLCAnaXRlbXMnKSAmJiBjb21wLml0ZW0uaXRlbXMubGVuZ3RoKSB7XG4gICAgICAvLyBJdGVtIG11c3QgaGF2ZSAnaXRlbXMnIGFycmF5XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY29tcC5pdGVtLml0ZW1zKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkQ29tcCA9IHRoaXMuY29tcG9uZW50c1tpdGVtLmluc3RhbmNlSWRdO1xuICAgICAgICBpZiAoIXRoaXMuX2lzRGlzYWJsZWQoaXRlbSkpIHtcbiAgICAgICAgICB0aGlzLl90b2dnbGVDb250cm9sU3RhdGUoY2hpbGRDb21wLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBncm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiBhIGNvbXBvbmVudCBpcyBkaXNhYmxlZC4gUHJpb3JpdGl6ZXMgdGhlIGRpc2FibGVkU3RhdGUgdmFsdWUsXG4gICAqIGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlIHJldHVybnMgdGhlIGl0ZW0ncyBwcmV2aW91cyBkaXNhYmxlZCB2YWx1ZVxuICAgKiBAcGFyYW0gaXRlbSBpdGVtIHRvIGNoZWNrIGZvciBpdHMgZGlzYWJsZWQgc3RhdGVcbiAgICovXG4gIHByaXZhdGUgX2lzRGlzYWJsZWQoaXRlbTogQ29uZGl0aW9uYWxJdGVtIHwgRm9ybUl0ZW0pOiBib29sZWFuIHtcbiAgICBjb25zdCBleGlzdHNJbkRpc2FibGVkU3RhdE1hcCA9IGlzUHJlc2VudCh0aGlzLmRpc2FibGVkU3RhdGVbaXRlbS5pbnN0YW5jZUlkXSk7XG4gICAgaWYgKCFleGlzdHNJbkRpc2FibGVkU3RhdE1hcCkge1xuICAgICAgcmV0dXJuIGlzQ29uZGl0aW9uYWxJdGVtKGl0ZW0pID8gaXRlbS5kaXNhYmxlZCA6IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZFN0YXRlW2l0ZW0uaW5zdGFuY2VJZF07XG4gICAgfVxuICB9XG59XG4iXX0=
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==
@@ -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 } from '../models';
3
+ import { FormStep, FormStepGroup, isFormStepGroup, isProgressiveFormSection } 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)) {
23
+ else if (isSection(item) || isProgressiveFormSection(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,11 +28,26 @@ 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)
31
+ .filter(isSection || isProgressiveFormSection)
32
32
  .map((item, index) => new FormStep(`${count + 1}${toLetters(index + 1)}`, item.title.value || '', item.instanceId, !item.required));
33
- newArray.push(new FormStepGroup(subSectionSteps, item.instanceId, false));
33
+ newArray.push(new FormStepGroup(subSectionSteps, item.instanceId, false, item.name, count + 1));
34
34
  }
35
35
  return newArray;
36
36
  }, []);
37
37
  }
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUtZm9ybS1zdGVwcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dlYi1mb3JtLWFuZ3VsYXIvc3JjL2xpYi91dGlsaXRpZXMvZ2VuZXJhdGUtZm9ybS1zdGVwcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBWSxjQUFjLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFeEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXJFOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsS0FBc0IsRUFBRSxRQUFRLEdBQUcsS0FBSztJQUN4RSxxREFBcUQ7SUFDckQsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBeUMsRUFBRSxJQUFjLEVBQUUsRUFBRTtRQUNoRixvRUFBb0U7UUFDcEUsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDdkUsSUFBSSxRQUFRLEVBQUU7WUFDWixRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQ2xHO2FBQU0sSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDMUIsdUNBQXVDO1lBQ3ZDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQ3pHO2FBQU0sSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDL0Isc0ZBQXNGO1lBQ3RGLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBRWhHLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLO2lCQUMvQixNQUFNLENBQUMsU0FBUyxDQUFDO2lCQUNqQixHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDdEksUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLGFBQWEsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQzNFO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRvTGV0dGVycyB9IGZyb20gJ0BtdG5hL2NvcmUtdHMnO1xuaW1wb3J0IHsgRm9ybUl0ZW0sIGlzRGF0YUN1YmVJdGVtLCBpc1NlY3Rpb24gfSBmcm9tICdAbXRuYS93ZWItZm9ybS10cyc7XG5cbmltcG9ydCB7IEZvcm1TdGVwLCBGb3JtU3RlcEdyb3VwLCBpc0Zvcm1TdGVwR3JvdXAgfSBmcm9tICcuLi9tb2RlbHMnO1xuXG4vKipcbiAqIEJ1aWxkcyB1cCBhbiBhcnJheSBvZiBGb3JtU3RlcHMgb3IgRm9ybVN0ZXBHcm91cHMgYmFzZWQgb24gd2hhdCBpcyBmb3VuZCBpbiB0aGUgcHJvdmlkZWQgZm9ybSBpdGVtcy4gRm9yIG1vc3QgdHlwaWNhbFxuICogZm9ybXMgdGhpcyB3aWxsIG1lYW4gdGhhdCBhIHN0ZXAgaXMgZ2VuZXJhdGVkIGZvciBldmVyeSBzZWN0aW9uIHRoYXQgaXMgZm91bmQgaW4gdGhlIGZvcm0uIEl0IGlzIGFzc3VtZWQgdGhhdCBhbGxcbiAqIGlucHV0cyBhcmUgaGVsZCB3aXRoaW4gc2VjdGlvbnMgYW5kIHRoZXJlZm9yZSB0aGUgc2VjdGlvbnMgYXJlIHRoZSBzdGVwcyB0aGF0IHNob3VsZCBiZSBtb25pdG9yZWQgZm9yIGNvbXBsZXRlbmVzcy5cbiAqIEhvd2V2ZXIsIGluIHNvbWUgY2lyY3Vtc3RhbmNlcywgbGlrZSB2ZXJ5IHNob3J0IGZvcm1zLCBpdCBtYXkgYmUgdGhlIGNhc2UgdGhhdCB0aGVyZSBhcmUgbm8gc2VjdGlvbnMgYW5kIHRoYXQgYWxsXG4gKiB0aGUgaXRlbXMgYXJlIHNldCBkaXJlY3RseSBvbiB0aGUgZm9ybSBpdHNlbGYuIEluIHRoZXNlIGNpcmN1bXN0YW5jZXMgdGhlIGFsbFN0ZXBzIHBhcmFtZXRlciBjYW4gYmUgc2V0IHRvIHRydWUgYW5kXG4gKiBhIHN0ZXAgd2lsbCBiZSBwcm9kdWNlZCBmb3IgZWFjaCBmb3JtIGl0ZW0gZm91bmQuXG4gKlxuICogQHBhcmFtIGl0ZW1zIHRoZSBpdGVtcyBvZiB0aGUgZm9ybVxuICogQHBhcmFtIGFsbFN0ZXBzIGZsYWcgaW5kaWNhdGluZyB0aGF0IGEgZm9ybSBzdGVwIHNob3VsZCBiZSBwcm9kdWNlZCBmb3IgZXZlcnkgZm9ybSBpdGVtXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUZvcm1TdGVwcyhpdGVtczogQXJyYXk8Rm9ybUl0ZW0+LCBhbGxTdGVwcyA9IGZhbHNlKTogQXJyYXk8Rm9ybVN0ZXAgfCBGb3JtU3RlcEdyb3VwPiB7XG4gIC8vIEJ1aWxkIHVwIGFuIGFycmF5IG9mIHN0ZXBzIGJhc2VkIG9uIHRoZSBmb3JtIGl0ZW1zXG4gIHJldHVybiBpdGVtcy5yZWR1Y2UoKG5ld0FycmF5OiBBcnJheTxGb3JtU3RlcCB8IEZvcm1TdGVwR3JvdXA+LCBpdGVtOiBGb3JtSXRlbSkgPT4ge1xuICAgIC8vIFRoZSBudW1iZXIgb2Ygbm9uLWdyb3VwIHN0ZXBzLCB1c2VkIHRvIG51bWJlciB0aGUgdG9wIGxldmVsIHN0ZXBzXG4gICAgY29uc3QgY291bnQgPSBuZXdBcnJheS5maWx0ZXIoKHN0ZXApID0+ICFpc0Zvcm1TdGVwR3JvdXAoc3RlcCkpLmxlbmd0aDtcbiAgICBpZiAoYWxsU3RlcHMpIHtcbiAgICAgIG5ld0FycmF5LnB1c2gobmV3IEZvcm1TdGVwKGNvdW50ICsgMSwgaXRlbS5uYW1lIHx8ICdObyBUaXRsZScsIGl0ZW0uaW5zdGFuY2VJZCwgIWl0ZW0ucmVxdWlyZWQpKTtcbiAgICB9IGVsc2UgaWYgKGlzU2VjdGlvbihpdGVtKSkge1xuICAgICAgLy8gSWYgdGhlIGl0ZW0gaXMgYSBTZWN0aW9uLCBhZGQgYSBzdGVwXG4gICAgICBuZXdBcnJheS5wdXNoKG5ldyBGb3JtU3RlcChjb3VudCArIDEsIGl0ZW0udGl0bGUudmFsdWUgfHwgJ05vIFRpdGxlJywgaXRlbS5pbnN0YW5jZUlkLCAhaXRlbS5yZXF1aXJlZCkpO1xuICAgIH0gZWxzZSBpZiAoaXNEYXRhQ3ViZUl0ZW0oaXRlbSkpIHtcbiAgICAgIC8vIElmIHRoZSBpdGVtIGlzIGEgRGF0YUN1YmVJdGVtLCBhZGQgYSBzdGVwIGFuZCBhZGQgYSBncm91cCBzdGVwIGZvciB0aGUgc3ViLXNlY3Rpb25zXG4gICAgICBuZXdBcnJheS5wdXNoKG5ldyBGb3JtU3RlcChjb3VudCArIDEsIGl0ZW0udGl0bGUudmFsdWUgfHwgJycsIGl0ZW0uaW5zdGFuY2VJZCwgIWl0ZW0ucmVxdWlyZWQpKTtcblxuICAgICAgY29uc3Qgc3ViU2VjdGlvblN0ZXBzID0gaXRlbS5pdGVtc1xuICAgICAgICAuZmlsdGVyKGlzU2VjdGlvbilcbiAgICAgICAgLm1hcCgoaXRlbSwgaW5kZXgpID0+IG5ldyBGb3JtU3RlcChgJHtjb3VudCArIDF9JHt0b0xldHRlcnMoaW5kZXggKyAxKX1gLCBpdGVtLnRpdGxlLnZhbHVlIHx8ICcnLCBpdGVtLmluc3RhbmNlSWQsICFpdGVtLnJlcXVpcmVkKSk7XG4gICAgICBuZXdBcnJheS5wdXNoKG5ldyBGb3JtU3RlcEdyb3VwKHN1YlNlY3Rpb25TdGVwcywgaXRlbS5pbnN0YW5jZUlkLCBmYWxzZSkpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdBcnJheTtcbiAgfSwgW10pO1xufVxuIl19
38
+ export function generateFormStepsFromOutline(outline) {
39
+ return outline.reduce((newArray, step) => {
40
+ // The number of non-group steps, used to number the top level steps
41
+ const count = newArray.filter((step) => !isFormStepGroup(step)).length;
42
+ if (step.childSteps && step.childSteps.length > 0) {
43
+ newArray.push(new FormStep(count + 1, step.label, step.instanceId || step.templateId, step.optional));
44
+ const subSectionSteps = step.childSteps.map((item, index) => new FormStep(`${count + 1}${toLetters(index + 1)}`, item.label, item.instanceId || item.templateId, item.optional));
45
+ newArray.push(new FormStepGroup(subSectionSteps, step.instanceId || step.templateId, false, step.label, count + 1));
46
+ }
47
+ else {
48
+ newArray.push(new FormStep(count + 1, step.label, step.instanceId || step.templateId, step.optional));
49
+ }
50
+ return newArray;
51
+ }, []);
52
+ }
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUtZm9ybS1zdGVwcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dlYi1mb3JtLWFuZ3VsYXIvc3JjL2xpYi91dGlsaXRpZXMvZ2VuZXJhdGUtZm9ybS1zdGVwcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBWSxjQUFjLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFeEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLHdCQUF3QixFQUFlLE1BQU0sV0FBVyxDQUFDO0FBRTVHOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsS0FBc0IsRUFBRSxRQUFRLEdBQUcsS0FBSztJQUN4RSxxREFBcUQ7SUFDckQsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBeUMsRUFBRSxJQUFjLEVBQUUsRUFBRTtRQUNoRixvRUFBb0U7UUFDcEUsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDdkUsSUFBSSxRQUFRLEVBQUU7WUFDWixRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQ2xHO2FBQU0sSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksd0JBQXdCLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDNUQsdUNBQXVDO1lBQ3ZDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxR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Q0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7U0FDdkc7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDVCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdG9MZXR0ZXJzIH0gZnJvbSAnQG10bmEvY29yZS10cyc7XG5pbXBvcnQgeyBGb3JtSXRlbSwgaXNEYXRhQ3ViZUl0ZW0sIGlzU2VjdGlvbiB9IGZyb20gJ0BtdG5hL3dlYi1mb3JtLXRzJztcblxuaW1wb3J0IHsgRm9ybVN0ZXAsIEZvcm1TdGVwR3JvdXAsIGlzRm9ybVN0ZXBHcm91cCwgaXNQcm9ncmVzc2l2ZUZvcm1TZWN0aW9uLCBPdXRsaW5lU3RlcCB9IGZyb20gJy4uL21vZGVscyc7XG5cbi8qKlxuICogQnVpbGRzIHVwIGFuIGFycmF5IG9mIEZvcm1TdGVwcyBvciBGb3JtU3RlcEdyb3VwcyBiYXNlZCBvbiB3aGF0IGlzIGZvdW5kIGluIHRoZSBwcm92aWRlZCBmb3JtIGl0ZW1zLiBGb3IgbW9zdCB0eXBpY2FsXG4gKiBmb3JtcyB0aGlzIHdpbGwgbWVhbiB0aGF0IGEgc3RlcCBpcyBnZW5lcmF0ZWQgZm9yIGV2ZXJ5IHNlY3Rpb24gdGhhdCBpcyBmb3VuZCBpbiB0aGUgZm9ybS4gSXQgaXMgYXNzdW1lZCB0aGF0IGFsbFxuICogaW5wdXRzIGFyZSBoZWxkIHdpdGhpbiBzZWN0aW9ucyBhbmQgdGhlcmVmb3JlIHRoZSBzZWN0aW9ucyBhcmUgdGhlIHN0ZXBzIHRoYXQgc2hvdWxkIGJlIG1vbml0b3JlZCBmb3IgY29tcGxldGVuZXNzLlxuICogSG93ZXZlciwgaW4gc29tZSBjaXJjdW1zdGFuY2VzLCBsaWtlIHZlcnkgc2hvcnQgZm9ybXMsIGl0IG1heSBiZSB0aGUgY2FzZSB0aGF0IHRoZXJlIGFyZSBubyBzZWN0aW9ucyBhbmQgdGhhdCBhbGxcbiAqIHRoZSBpdGVtcyBhcmUgc2V0IGRpcmVjdGx5IG9uIHRoZSBmb3JtIGl0c2VsZi4gSW4gdGhlc2UgY2lyY3Vtc3RhbmNlcyB0aGUgYWxsU3RlcHMgcGFyYW1ldGVyIGNhbiBiZSBzZXQgdG8gdHJ1ZSBhbmRcbiAqIGEgc3RlcCB3aWxsIGJlIHByb2R1Y2VkIGZvciBlYWNoIGZvcm0gaXRlbSBmb3VuZC5cbiAqXG4gKiBAcGFyYW0gaXRlbXMgdGhlIGl0ZW1zIG9mIHRoZSBmb3JtXG4gKiBAcGFyYW0gYWxsU3RlcHMgZmxhZyBpbmRpY2F0aW5nIHRoYXQgYSBmb3JtIHN0ZXAgc2hvdWxkIGJlIHByb2R1Y2VkIGZvciBldmVyeSBmb3JtIGl0ZW1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlRm9ybVN0ZXBzKGl0ZW1zOiBBcnJheTxGb3JtSXRlbT4sIGFsbFN0ZXBzID0gZmFsc2UpOiBBcnJheTxGb3JtU3RlcCB8IEZvcm1TdGVwR3JvdXA+IHtcbiAgLy8gQnVpbGQgdXAgYW4gYXJyYXkgb2Ygc3RlcHMgYmFzZWQgb24gdGhlIGZvcm0gaXRlbXNcbiAgcmV0dXJuIGl0ZW1zLnJlZHVjZSgobmV3QXJyYXk6IEFycmF5PEZvcm1TdGVwIHwgRm9ybVN0ZXBHcm91cD4sIGl0ZW06IEZvcm1JdGVtKSA9PiB7XG4gICAgLy8gVGhlIG51bWJlciBvZiBub24tZ3JvdXAgc3RlcHMsIHVzZWQgdG8gbnVtYmVyIHRoZSB0b3AgbGV2ZWwgc3RlcHNcbiAgICBjb25zdCBjb3VudCA9IG5ld0FycmF5LmZpbHRlcigoc3RlcCkgPT4gIWlzRm9ybVN0ZXBHcm91cChzdGVwKSkubGVuZ3RoO1xuICAgIGlmIChhbGxTdGVwcykge1xuICAgICAgbmV3QXJyYXkucHVzaChuZXcgRm9ybVN0ZXAoY291bnQgKyAxLCBpdGVtLm5hbWUgfHwgJ05vIFRpdGxlJywgaXRlbS5pbnN0YW5jZUlkLCAhaXRlbS5yZXF1aXJlZCkpO1xuICAgIH0gZWxzZSBpZiAoaXNTZWN0aW9uKGl0ZW0pIHx8IGlzUHJvZ3Jlc3NpdmVGb3JtU2VjdGlvbihpdGVtKSkge1xuICAgICAgLy8gSWYgdGhlIGl0ZW0gaXMgYSBTZWN0aW9uLCBhZGQgYSBzdGVwXG4gICAgICBuZXdBcnJheS5wdXNoKG5ldyBGb3JtU3RlcChjb3VudCArIDEsIGl0ZW0udGl0bGUudmFsdWUgfHwgJ05vIFRpdGxlJywgaXRlbS5pbnN0YW5jZUlkLCAhaXRlbS5yZXF1aXJlZCkpO1xuICAgIH0gZWxzZSBpZiAoaXNEYXRhQ3ViZUl0ZW0oaXRlbSkpIHtcbiAgICAgIC8vIElmIHRoZSBpdGVtIGlzIGEgRGF0YUN1YmVJdGVtLCBhZGQgYSBzdGVwIGFuZCBhZGQgYSBncm91cCBzdGVwIGZvciB0aGUgc3ViLXNlY3Rpb25zXG4gICAgICBuZXdBcnJheS5wdXNoKG5ldyBGb3JtU3RlcChjb3VudCArIDEsIGl0ZW0udGl0bGUudmFsdWUgfHwgJycsIGl0ZW0uaW5zdGFuY2VJZCwgIWl0ZW0ucmVxdWlyZWQpKTtcblxuICAgICAgY29uc3Qgc3ViU2VjdGlvblN0ZXBzID0gaXRlbS5pdGVtc1xuICAgICAgICAuZmlsdGVyKGlzU2VjdGlvbiB8fCBpc1Byb2dyZXNzaXZlRm9ybVNlY3Rpb24pXG4gICAgICAgIC5tYXAoKGl0ZW0sIGluZGV4KSA9PiBuZXcgRm9ybVN0ZXAoYCR7Y291bnQgKyAxfSR7dG9MZXR0ZXJzKGluZGV4ICsgMSl9YCwgaXRlbS50aXRsZS52YWx1ZSB8fCAnJywgaXRlbS5pbnN0YW5jZUlkLCAhaXRlbS5yZXF1aXJlZCkpO1xuICAgICAgbmV3QXJyYXkucHVzaChuZXcgRm9ybVN0ZXBHcm91cChzdWJTZWN0aW9uU3RlcHMsIGl0ZW0uaW5zdGFuY2VJZCwgZmFsc2UsIGl0ZW0ubmFtZSwgY291bnQgKyAxKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0FycmF5O1xuICB9LCBbXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUZvcm1TdGVwc0Zyb21PdXRsaW5lKG91dGxpbmU6IE91dGxpbmVTdGVwW10pOiBBcnJheTxGb3JtU3RlcCB8IEZvcm1TdGVwR3JvdXA+IHtcbiAgcmV0dXJuIG91dGxpbmUucmVkdWNlKChuZXdBcnJheTogQXJyYXk8Rm9ybVN0ZXAgfCBGb3JtU3RlcEdyb3VwPiwgc3RlcDogT3V0bGluZVN0ZXApID0+IHtcbiAgICAvLyBUaGUgbnVtYmVyIG9mIG5vbi1ncm91cCBzdGVwcywgdXNlZCB0byBudW1iZXIgdGhlIHRvcCBsZXZlbCBzdGVwc1xuICAgIGNvbnN0IGNvdW50ID0gbmV3QXJyYXkuZmlsdGVyKChzdGVwKSA9PiAhaXNGb3JtU3RlcEdyb3VwKHN0ZXApKS5sZW5ndGg7XG4gICAgaWYgKHN0ZXAuY2hpbGRTdGVwcyAmJiBzdGVwLmNoaWxkU3RlcHMubGVuZ3RoID4gMCkge1xuICAgICAgbmV3QXJyYXkucHVzaChuZXcgRm9ybVN0ZXAoY291bnQgKyAxLCBzdGVwLmxhYmVsLCBzdGVwLmluc3RhbmNlSWQgfHwgc3RlcC50ZW1wbGF0ZUlkLCBzdGVwLm9wdGlvbmFsKSk7XG4gICAgICBjb25zdCBzdWJTZWN0aW9uU3RlcHMgPSBzdGVwLmNoaWxkU3RlcHMubWFwKFxuICAgICAgICAoaXRlbSwgaW5kZXgpID0+IG5ldyBGb3JtU3RlcChgJHtjb3VudCArIDF9JHt0b0xldHRlcnMoaW5kZXggKyAxKX1gLCBpdGVtLmxhYmVsLCBpdGVtLmluc3RhbmNlSWQgfHwgaXRlbS50ZW1wbGF0ZUlkLCBpdGVtLm9wdGlvbmFsKVxuICAgICAgKTtcbiAgICAgIG5ld0FycmF5LnB1c2gobmV3IEZvcm1TdGVwR3JvdXAoc3ViU2VjdGlvblN0ZXBzLCBzdGVwLmluc3RhbmNlSWQgfHwgc3RlcC50ZW1wbGF0ZUlkLCBmYWxzZSwgc3RlcC5sYWJlbCwgY291bnQgKyAxKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0FycmF5LnB1c2gobmV3IEZvcm1TdGVwKGNvdW50ICsgMSwgc3RlcC5sYWJlbCwgc3RlcC5pbnN0YW5jZUlkIHx8IHN0ZXAudGVtcGxhdGVJZCwgc3RlcC5vcHRpb25hbCkpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3QXJyYXk7XG4gIH0sIFtdKTtcbn1cblxuLy8gbW9kZWwgZnJvbSBhbmRyZXdcbmV4cG9ydCBpbnRlcmZhY2UgRm9ybVN0ZXBEYXRhIGV4dGVuZHMgT3V0bGluZVN0ZXAge1xuICBudW06IHN0cmluZztcbn1cbiJdfQ==
@@ -1,6 +1,8 @@
1
1
  import { FormArray, FormControl, FormGroup, Validators } from '@angular/forms';
2
2
  import { isNullOrUndefined, isPresent, isType } from '@mtna/core-ts';
3
3
  import { CHECKBOX_ITEM_ID, DECIMAL_ANSWER_ITEM_ID, I18N_PARAGRAPH_ANSWER_ITEM_ID, I18N_SHORT_ANSWER_ITEM_ID, isForm, isFormItemGroupImpl, isOffsetDateRangeItem, isRepeatableItem, isSection, isTableItem, isWholeNumberItem, isYearQuarterRangeItem, PARAGRAPH_ANSWER_ITEM_ID, SHORT_ANSWER_ITEM_ID, WHOLE_NUMBER_ANSWER_ITEM_ID, } from '@mtna/web-form-ts';
4
+ import { isProgressiveForm } from '../models';
5
+ import { isProgressiveFormSection } from '../models/progressive-form/progressive-form-section.model';
4
6
  import { validationResultValidator } from '../validators';
5
7
  /** RegEx to validate number items contain only negative, digits, or decimals */
6
8
  const numOnlyWithoutComma = /^-?\d+(\.\d*)?$/;
@@ -152,7 +154,12 @@ export function serializeTableItem(item, managerService, customFormItemCondition
152
154
  * @param customControlGenerator Serializer for a custom FormItem
153
155
  */
154
156
  export function determineSerializeFunctionToUse(formItem, managerService, customFormItemConditional = () => false, customControlGenerator) {
155
- if (isForm(formItem) || isRepeatableItem(formItem) || isSection(formItem) || isFormItemGroupImpl(formItem)) {
157
+ if (isForm(formItem) ||
158
+ isProgressiveForm(formItem) ||
159
+ isRepeatableItem(formItem) ||
160
+ isSection(formItem) ||
161
+ isProgressiveFormSection(formItem) ||
162
+ isFormItemGroupImpl(formItem)) {
156
163
  return serializeFormItems(formItem, managerService, customFormItemConditional, customControlGenerator);
157
164
  }
158
165
  else if (isTableItem(formItem)) {
@@ -240,7 +247,7 @@ export function insertTableItemValues(item, ngFormValue, disabledState, customFo
240
247
  * @param parent Parent of the FormItem, used to pass to the customFormItemBuilder
241
248
  */
242
249
  function determineInsertFunctionToUse(formItem, ngFormValue, disabledState, customFormItemConditional = () => false, customFormItemBuilder, parent) {
243
- if (isSection(formItem) || isFormItemGroupImpl(formItem) || isRepeatableItem(formItem)) {
250
+ if (isSection(formItem) || isProgressiveFormSection(formItem) || isFormItemGroupImpl(formItem) || isRepeatableItem(formItem)) {
244
251
  const items = insertFormItemValues(formItem, ngFormValue, disabledState, customFormItemConditional, customFormItemBuilder);
245
252
  return Object.assign(Object.assign({}, formItem), { items, disabled: _isDisabled(formItem, disabledState) });
246
253
  }
@@ -331,9 +338,9 @@ function numCheckboxesValidator(typeCheck, limit = 1) {
331
338
  }
332
339
  switch (typeCheck) {
333
340
  case 'MIN':
334
- return totalSelected >= limit ? null : { minSelected: `Select at least ${limit}` };
341
+ return totalSelected >= limit ? null : { minSelected: $localize `Select at least ${limit}` };
335
342
  case 'MAX':
336
- return totalSelected <= limit ? null : { maxSelected: `Select no more than ${limit}` };
343
+ return totalSelected <= limit ? null : { maxSelected: $localize `Select no more than ${limit}` };
337
344
  }
338
345
  };
339
346
  }
@@ -393,4 +400,4 @@ function numValueLimit(type, limit) {
393
400
  function isEmptyString(value) {
394
401
  return typeof value === 'string' && !value.length;
395
402
  }
396
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXplci11dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2ViLWZvcm0tYW5ndWxhci9zcmMvbGliL3V0aWxpdGllcy9zZXJpYWxpemVyLXV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFtQixTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBaUMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFL0gsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUNMLGdCQUFnQixFQUloQixzQkFBc0IsRUFNdEIsNkJBQTZCLEVBQzdCLHlCQUF5QixFQUd6QixNQUFNLEVBQ04sbUJBQW1CLEVBQ25CLHFCQUFxQixFQUNyQixnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsc0JBQXNCLEVBR3RCLHdCQUF3QixFQUd4QixvQkFBb0IsRUFLcEIsMkJBQTJCLEdBRzVCLE1BQU0sbUJBQW1CLENBQUM7QUFJM0IsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTTFELGdGQUFnRjtBQUNoRixNQUFNLG1CQUFtQixHQUFHLGlCQUFpQixDQUFDO0FBQzlDLGdHQUFnRztBQUNoRyxNQUFNLGdCQUFnQixHQUFHLDhCQUE4QixDQUFDO0FBQ3hELDZFQUE2RTtBQUM3RSxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUM7QUFDMUIsNEZBQTRGO0FBQzVGLE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUFDO0FBRXZDLGdDQUFnQztBQUVoQzs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FDaEMsUUFBa0QsRUFDbEQsY0FBb0MsRUFDcEMsNEJBQXlELEdBQUcsRUFBRSxDQUFDLEtBQUssRUFDcEUsc0JBQW1FO0lBRW5FLE1BQU0sSUFBSSxHQUF1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QUMsRUFBRTtZQUNwRSxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUN0RSxDQUFDLENBQUM7Z0JBQ0UsQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDTixDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUs7b0JBQ2IsTUFBTSxFQUFFLE9BQU8sQ0FBQyxLQUFLO2lCQUN0QjthQUNGO1lBQ0gsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNYLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxLQUFjO0lBQ25DLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUNwRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQXJyYXksIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvckZuLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW50ZXJuYXRpb25hbGl6ZWRTdHJpbmcgfSBmcm9tICdAbXRuYS9jb3JlLWkxOG4tdHMnO1xuaW1wb3J0IHsgaXNOdWxsT3JVbmRlZmluZWQsIGlzUHJlc2VudCwgaXNUeXBlIH0gZnJvbSAnQG10bmEvY29yZS10cyc7XG5pbXBvcnQge1xuICBDSEVDS0JPWF9JVEVNX0lELFxuICBDaGVja2JveEl0ZW0sXG4gIENvbmRpdGlvbmFsSXRlbSxcbiAgRGF0ZVJhbmdlLFxuICBERUNJTUFMX0FOU1dFUl9JVEVNX0lELFxuICBEZWNpbWFsQW5zd2VySXRlbSxcbiAgRm9ybSBhcyBXZWJGb3JtLFxuICBGb3JtSXRlbSxcbiAgRm9ybUl0ZW1Hcm91cCxcbiAgRm9ybUl0ZW1JbXBsLFxuICBJMThOX1BBUkFHUkFQSF9BTlNXRVJfSVRFTV9JRCxcbiAgSTE4Tl9TSE9SVF9BTlNXRVJfSVRFTV9JRCxcbiAgSW50ZXJuYXRpb25hbGl6ZWRQYXJhZ3JhcGhBbnN3ZXJJdGVtLFxuICBJbnRlcm5hdGlvbmFsaXplZFNob3J0QW5zd2VySXRlbSxcbiAgaXNGb3JtLFxuICBpc0Zvcm1JdGVtR3JvdXBJbXBsLFxuICBpc09mZnNldERhdGVSYW5nZUl0ZW0sXG4gIGlzUmVwZWF0YWJsZUl0ZW0sXG4gIGlzU2VjdGlvbixcbiAgaXNUYWJsZUl0ZW0sXG4gIGlzV2hvbGVOdW1iZXJJdGVtLFxuICBpc1llYXJRdWFydGVyUmFuZ2VJdGVtLFxuICBPcHRpb24sXG4gIE9wdGlvbkdyb3VwSXRlbUltcGwsXG4gIFBBUkFHUkFQSF9BTlNXRVJfSVRFTV9JRCxcbiAgUGFyYWdyYXBoQW5zd2VySXRlbSxcbiAgUmVwZWF0YWJsZUl0ZW0sXG4gIFNIT1JUX0FOU1dFUl9JVEVNX0lELFxuICBTaG9ydEFuc3dlckl0ZW0sXG4gIFRhYmxlSXRlbSxcbiAgVGFibGVSb3dJdGVtLFxuICBWYWx1ZUl0ZW0sXG4gIFdIT0xFX05VTUJFUl9BTlNXRVJfSVRFTV9JRCxcbiAgV2hvbGVOdW1iZXJBbnN3ZXJJdGVtLFxuICBZZWFyUXVhcnRlcixcbn0gZnJvbSAnQG10bmEvd2ViLWZvcm0tdHMnO1xuaW1wb3J0IHsgTW9tZW50IH0gZnJvbSAnbW9tZW50JztcblxuaW1wb3J0IHsgTXRuYVdmTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mb3JtLW1hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyB2YWxpZGF0aW9uUmVzdWx0VmFsaWRhdG9yIH0gZnJvbSAnLi4vdmFsaWRhdG9ycyc7XG5cbi8qKiBUeXBlcyBvZiBWYWxpZGF0b3JzIHRoYXQgY2FuIGJlIHNldCBvbiBhIEZvcm1Db250cm9sICovXG5leHBvcnQgdHlwZSBWYWxpZGF0b3JUeXBlID0gJ3JlcXVpcmVkJyB8ICdyZXF1aXJlZFRydWUnIHwgJ2VtYWlsJztcbmV4cG9ydCB0eXBlIFZhbGlkYXRvcldpdGhOdW1iZXJUeXBlID0gJ21pbkxlbmd0aCcgfCAnbWF4TGVuZ3RoJyB8ICdtaW4nIHwgJ21heCc7XG5cbi8qKiBSZWdFeCB0byB2YWxpZGF0ZSBudW1iZXIgaXRlbXMgY29udGFpbiBvbmx5IG5lZ2F0aXZlLCBkaWdpdHMsIG9yIGRlY2ltYWxzICovXG5jb25zdCBudW1Pbmx5V2l0aG91dENvbW1hID0gL14tP1xcZCsoXFwuXFxkKik/JC87XG4vKiogUmVnRXggdG8gdmFsaWRhdGUgbnVtYmVyIGl0ZW1zIGNvbnRhaW4gb25seSBuZWdhdGl2ZSwgZGlnaXRzLCBvciBkZWNpbWFscyBpbiBjb21tYSBmb3JtYXQgKi9cbmNvbnN0IG51bU9ubHlXaXRoQ29tbWEgPSAvXi0/XFxkezEsM30oLFxcZHszfSkqKFxcLlxcZCopPyQvO1xuLyoqIFJlZ0V4IHRvIHZhbGlkYXRlICdwb3NpdGl2ZSBvbmx5JyBpdGVtIGNvbmFpbnMgbm9uLW5lZ2F0aXZlIGNoYXJhY3RlcnMgKi9cbmNvbnN0IHBvc09ubHkgPSAvXlteLV0qJC87XG4vKiogUmVnRXggdG8gdmFsaWRhdGUgJ3dob2xlIG51bWJlcicgaXRlbSBjb250YWlucyBvbmx5IG5lZ2F0aXZlLCBkaWdpdHMsIG9yIGNvbW1hIGZvcm1hdCAqL1xuY29uc3Qgd2hvbGVOdW1iZXIgPSAvXi0/XFxkKygsXFxkezN9KSokLztcblxuLy8jcmVnaW9uIEZvcm1Db250cm9sIEdlbmVyYXRpb25cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBuZXcgRm9ybUdyb3VwIHdpdGggRm9ybUNvbnRyb2xzICYgcG9zc2libGUgbmVzdGVkIEZvcm1Hcm91cHNcbiAqIEBwYXJhbSBmb3JtSXRlbSBXZWJGb3JtLCBTZWN0aW9uLCBHcm91cCwgb3IgUmVwZWF0YWJsZUl0ZW0gdXNlZCB0byBjcmVhdGUgYSBGb3JtR3JvdXBcbiAqIEBwYXJhbSBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsIGJvb2xlYW4gZnVuY3Rpb24gZm9yIGFueSBjdXN0b20gRm9ybUl0ZW1zXG4gKiBAcGFyYW0gY3VzdG9tQ29udHJvbEdlbmVyYXRvciBGb3JtQ29udHJvbCBnZW5lcmF0b3IgZnVuY3Rpb24gZm9yIGFueSBjdXN0b20gRm9ybUl0ZW1zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVGb3JtSXRlbXMoXG4gIGZvcm1JdGVtOiBXZWJGb3JtIHwgRm9ybUl0ZW1Hcm91cCB8IFJlcGVhdGFibGVJdGVtLFxuICBtYW5hZ2VyU2VydmljZTogTXRuYVdmTWFuYWdlclNlcnZpY2UsXG4gIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlLFxuICBjdXN0b21Db250cm9sR2VuZXJhdG9yPzogKGl0ZW06IEZvcm1JdGVtKSA9PiBBYnN0cmFjdENvbnRyb2wgfCBudWxsXG4pOiBGb3JtR3JvdXAge1xuICBjb25zdCBmb3JtOiB7IFtrZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbCB9ID0ge307XG5cbiAgZm9yIChjb25zdCBpdGVtIG9mIGZvcm1JdGVtLml0ZW1zKSB7XG4gICAgY29uc3QgY29udHJvbCA9IGRldGVybWluZVNlcmlhbGl6ZUZ1bmN0aW9uVG9Vc2UoXG4gICAgICBpdGVtIGFzIEZvcm1JdGVtSW1wbDx1bmtub3duPixcbiAgICAgIG1hbmFnZXJTZXJ2aWNlLFxuICAgICAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCxcbiAgICAgIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3JcbiAgICApO1xuICAgIGlmIChjb250cm9sKSB7XG4gICAgICBmb3JtW2l0ZW0uaW5zdGFuY2VJZF0gPSBjb250cm9sO1xuICAgIH1cbiAgfVxuICBjb25zdCByZXF1aXJlZCA9IGlzRm9ybShmb3JtSXRlbSkgPyB0cnVlIDogZm9ybUl0ZW0ucmVxdWlyZWQ7XG4gIGNvbnN0IGdyb3VwID0gcmVxdWlyZWQgPyBuZXcgRm9ybUdyb3VwKGZvcm0sIFZhbGlkYXRvcnMucmVxdWlyZWQpIDogbmV3IEZvcm1Hcm91cChmb3JtKTtcbiAgaWYgKCdkaXNhYmxlZCcgaW4gZm9ybUl0ZW0gJiYgZm9ybUl0ZW0uZGlzYWJsZWQpIHtcbiAgICBncm91cC5kaXNhYmxlKHsgb25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIH1cbiAgcmV0dXJuIGdyb3VwO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSB0YWlsb3JlZCBGb3JtQ29udHJvbCB3aXRoIHZhbGlkYXRvcnMgZm9yIGEgRm9ybUl0ZW1cbiAqIEBwYXJhbSBmb3JtSXRlbSBUaGUgRm9ybUl0ZW0gcmVxdWVzdGluZyBhIHRhaWxvcmVkIEZvcm1Db250cm9sXG4gKiBAaW50ZXJuYWwgQ3JlYXRpbmcgdGhlIGZvcm0gY29udHJvbCBhbmQgdGhlbiBjYWxsaW5nIHNldFZhbGlkYXRvcnMgZm9yY2UgYSB2YWxpZGF0aW9uIHBhc3MsXG4gKiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTk2MjIjaXNzdWVjb21tZW50LTM0MTU0Nzg4NFxuICogQmV0dGVyIHRvIGdhdGhlciB0aGUgdmFsaWRhdG9ycyBhbmQgcHV0IHRoZW0gaW4gdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBmb3JtIGNvbnRyb2wuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVGb3JtSXRlbShmb3JtSXRlbTogRm9ybUl0ZW1JbXBsPHVua25vd24+LCBtYW5hZ2VyU2VydmljZTogTXRuYVdmTWFuYWdlclNlcnZpY2UpOiBBYnN0cmFjdENvbnRyb2wge1xuICBjb25zdCB2YWxpZGF0b3JzID0gbmV3IEFycmF5PFZhbGlkYXRvckZuPih2YWxpZGF0aW9uUmVzdWx0VmFsaWRhdG9yKGZvcm1JdGVtLmluc3RhbmNlSWQsIG1hbmFnZXJTZXJ2aWNlKSk7XG4gIGlmIChmb3JtSXRlbS5yZXF1aXJlZCkge1xuICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgfVxuICBzd2l0Y2ggKGZvcm1JdGVtLml0ZW1JZCkge1xuICAgIGNhc2UgQ0hFQ0tCT1hfSVRFTV9JRDoge1xuICAgICAgY29uc3QgY2hlY2tib3hJdGVtID0gZm9ybUl0ZW0gYXMgQ2hlY2tib3hJdGVtO1xuICAgICAgY29uc3QgdmFsdWUgPSBjaGVja2JveEl0ZW0udmFsdWUgfHwgW107XG4gICAgICB2YWxpZGF0b3JzLnB1c2gobnVtQ2hlY2tib3hlc1ZhbGlkYXRvcignTUlOJywgY2hlY2tib3hJdGVtLm1pblNlbGVjdGlvbnMpLCBudW1DaGVja2JveGVzVmFsaWRhdG9yKCdNQVgnLCBjaGVja2JveEl0ZW0ubWF4U2VsZWN0aW9ucykpO1xuICAgICAgY29uc3QgYXJyID0gbmV3IEZvcm1BcnJheShcbiAgICAgICAgY2hlY2tib3hJdGVtLm9wdGlvbnMubWFwKFxuICAgICAgICAgIChvKSA9PlxuICAgICAgICAgICAgbmV3IEZvcm1Db250cm9sKHtcbiAgICAgICAgICAgICAgdmFsdWU6IG8uc2VsZWN0ZWQgfHwgdmFsdWUuc29tZSgodikgPT4gdiA9PT0gby5vcHRpb24uaWQpLFxuICAgICAgICAgICAgICBkaXNhYmxlZDogY2hlY2tib3hJdGVtLmRpc2FibGVkLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKSxcbiAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKHZhbGlkYXRvcnMpXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFycjtcbiAgICB9XG4gICAgY2FzZSBERUNJTUFMX0FOU1dFUl9JVEVNX0lEOlxuICAgIGNhc2UgV0hPTEVfTlVNQkVSX0FOU1dFUl9JVEVNX0lEOiB7XG4gICAgICBjb25zdCBpdGVtID0gZm9ybUl0ZW0gYXMgRGVjaW1hbEFuc3dlckl0ZW0gfCBXaG9sZU51bWJlckFuc3dlckl0ZW07XG4gICAgICB2YWxpZGF0b3JzLnB1c2gobnVtZXJpY2FsVmFsdWVDaGVjaygpKTtcbiAgICAgIGlmIChpc1dob2xlTnVtYmVySXRlbShpdGVtKSkge1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2god2hvbGVOdW1iZXJQYXR0ZXJuKCkpO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW0ucG9zaXRpdmVPbmx5KSB7XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChwb3NpdGl2ZU51bWJlclBhdHRlcm4oKSk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZW0ubWluVmFsdWUpKSB7XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChudW1WYWx1ZUxpbWl0KCdtaW4nLCBpdGVtLm1pblZhbHVlKSk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZW0ubWF4VmFsdWUpKSB7XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChudW1WYWx1ZUxpbWl0KCdtYXgnLCBpdGVtLm1heFZhbHVlKSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBQQVJBR1JBUEhfQU5TV0VSX0lURU1fSUQ6XG4gICAgY2FzZSBTSE9SVF9BTlNXRVJfSVRFTV9JRDoge1xuICAgICAgY29uc3Qgc2hvcnRBbnN3ZXJJdGVtID0gZm9ybUl0ZW0gYXMgU2hvcnRBbnN3ZXJJdGVtIHwgUGFyYWdyYXBoQW5zd2VySXRlbTtcbiAgICAgIHZhbGlkYXRvcnMucHVzaCguLi5nZXROdW1lcmljVmFsaWRhdG9yKCdtaW5MZW5ndGgnLCBzaG9ydEFuc3dlckl0ZW0ubWluQ2hhckNvdW50KSk7XG4gICAgICB2YWxpZGF0b3JzLnB1c2goLi4uZ2V0TnVtZXJpY1ZhbGlkYXRvcignbWF4TGVuZ3RoJywgc2hvcnRBbnN3ZXJJdGVtLm1heENoYXJDb3VudCkpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgSTE4Tl9QQVJBR1JBUEhfQU5TV0VSX0lURU1fSUQ6XG4gICAgY2FzZSBJMThOX1NIT1JUX0FOU1dFUl9JVEVNX0lEOiB7XG4gICAgICBjb25zdCBpMThuSXRlbSA9IGZvcm1JdGVtIGFzIEludGVybmF0aW9uYWxpemVkUGFyYWdyYXBoQW5zd2VySXRlbSB8IEludGVybmF0aW9uYWxpemVkU2hvcnRBbnN3ZXJJdGVtO1xuICAgICAgY29uc3QgZ3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9LCBWYWxpZGF0b3JzLmNvbXBvc2UodmFsaWRhdG9ycykpO1xuICAgICAgZm9yIChjb25zdCBsYW5ndWFnZSBvZiBpMThuSXRlbS5sYW5ndWFnZVRhZ3MpIHtcbiAgICAgICAgLy8gRklYTUUgaWYgdGhlcmUgaXMgbm90aGlnbiB0aGVyZSBpbiB0aGUgdmFsdWUgc2hvdWxkIEkgc2V0IGEgbmV3IGludGVybmF0aW9uYWxpemVkIHN0cmluZz9cbiAgICAgICAgZ3JvdXAuY29udHJvbHNbbGFuZ3VhZ2VdID0gbmV3IEZvcm1Db250cm9sKGZvcm1JdGVtLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChpMThuSXRlbS5kaXNhYmxlZCkge1xuICAgICAgICBncm91cC5kaXNhYmxlKHsgb25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZ3JvdXA7XG4gICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6IGZvcm1JdGVtLnZhbHVlLCBkaXNhYmxlZDogISFmb3JtSXRlbS5kaXNhYmxlZCB9LCBWYWxpZGF0b3JzLmNvbXBvc2UodmFsaWRhdG9ycykpO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBjb250cm9scyBmb3IgYW55IGZvcm0gaXRlbXMgbmVzdGVkIGluc2lkZSBhIHBhcmVudCBpdGVtcyBvcHRpb25zXG4gKiBAcGFyYW0gZm9ybUl0ZW0gVGhlIEZvcm1JdGVtIHdpdGggYW4gJ29wdGlvbnMnIHByb3BlcnR5XG4gKiBAcGFyYW0gY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCBjb25kaXRpb25hbCBmdW5jdGlvbiBmcm9tIHBhcmVudCAnc2VyaWFsaXplRm9ybUl0ZW1zJyBmdW5jdGlvblxuICogQHBhcmFtIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3IgRm9ybUNvbnRyb2wgZ2VuZXJhdG9yIGZyb20gcGFyZW50ICdzZXJpYWxpemVGb3JtSXRlbXMnIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVOZXN0ZWRPcHRpb25Gb3JtSXRlbXMoXG4gIGZvcm1JdGVtOiBPcHRpb25Hcm91cEl0ZW1JbXBsPE9wdGlvbjx1bmtub3duPj4sXG4gIG1hbmFnZXJTZXJ2aWNlOiBNdG5hV2ZNYW5hZ2VyU2VydmljZSxcbiAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbDogKGl0ZW06IEZvcm1JdGVtKSA9PiBib29sZWFuID0gKCkgPT4gZmFsc2UsXG4gIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3I/OiAoaXRlbTogRm9ybUl0ZW0pID0+IEFic3RyYWN0Q29udHJvbCB8IG51bGxcbik6IEZvcm1Hcm91cCB7XG4gIGNvbnN0IGNvbnRyb2xzOiB7IFtrZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbCB9ID0ge307XG4gIGZvciAoY29uc3QgaWQgaW4gZm9ybUl0ZW0ub3B0aW9uSXRlbU1hcCkge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZm9ybUl0ZW0ub3B0aW9uSXRlbU1hcCwgaWQpKSB7XG4gICAgICBjb25zdCBzdWJJdGVtID0gZm9ybUl0ZW0ub3B0aW9uSXRlbU1hcFtpZF0gYXMgRm9ybUl0ZW1JbXBsPHVua25vd24+O1xuICAgICAgY29uc3QgY29udHJvbCA9IGRldGVybWluZVNlcmlhbGl6ZUZ1bmN0aW9uVG9Vc2Uoc3ViSXRlbSwgbWFuYWdlclNlcnZpY2UsIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwsIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3IpO1xuICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgY29udHJvbHNbc3ViSXRlbS5pbnN0YW5jZUlkXSA9IGNvbnRyb2w7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29udHJvbHNbZm9ybUl0ZW0uaW5zdGFuY2VJZF0gPSBzZXJpYWxpemVGb3JtSXRlbShmb3JtSXRlbSwgbWFuYWdlclNlcnZpY2UpO1xuICBjb25zdCBncm91cCA9IGZvcm1JdGVtLnJlcXVpcmVkID8gbmV3IEZvcm1Hcm91cChjb250cm9scywgVmFsaWRhdG9ycy5yZXF1aXJlZCkgOiBuZXcgRm9ybUdyb3VwKGNvbnRyb2xzKTtcbiAgaWYgKGZvcm1JdGVtLmRpc2FibGVkKSB7XG4gICAgZ3JvdXAuZGlzYWJsZSh7IG9ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICB9XG4gIHJldHVybiBncm91cDtcbn1cblxuLyoqXG4gKiBCdWlsZCBGb3JtQ29udHJvbHMgZm9yIGEgVGFibGVJdGVtXG4gKiBAcGFyYW0gaXRlbSBUYWJsZUl0ZW0gcmVxdWlyaW5nIEZvcm1Db250cm9sc1xuICogQHBhcmFtIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwgQ29uZGl0aW9uYWwgZnVuY3Rpb24gZm9yIGN1c3RvbSBhbnkgRm9ybUl0ZW1zXG4gKiBAcGFyYW0gY3VzdG9tQ29udHJvbEdlbmVyYXRvciBGb3JtQ29udHJvbCBnZW5lcmF0b3IgZm9yIGN1c3RvbSBhbnkgRm9ybUl0ZW1zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVUYWJsZUl0ZW0oXG4gIGl0ZW06IFRhYmxlSXRlbSxcbiAgbWFuYWdlclNlcnZpY2U6IE10bmFXZk1hbmFnZXJTZXJ2aWNlLFxuICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsOiAoaXRlbTogRm9ybUl0ZW0pID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZSxcbiAgY3VzdG9tQ29udHJvbEdlbmVyYXRvcj86IChpdGVtOiBGb3JtSXRlbSkgPT4gQWJzdHJhY3RDb250cm9sIHwgbnVsbFxuKTogRm9ybUdyb3VwIHtcbiAgY29uc3QgdGFibGVDb250cm9sOiB7IFtrZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbCB9ID0ge307XG4gIGZvciAoY29uc3Qgcm93IG9mIGl0ZW0udGFibGVSb3dzKSB7XG4gICAgZm9yIChjb25zdCByb3dJdGVtIG9mIHJvdy5pdGVtcy5maWx0ZXIoKGkpID0+ICEhaSkpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBkZXRlcm1pbmVTZXJpYWxpemVGdW5jdGlvblRvVXNlKFxuICAgICAgICByb3dJdGVtIGFzIEZvcm1JdGVtSW1wbDx1bmtub3duPixcbiAgICAgICAgbWFuYWdlclNlcnZpY2UsXG4gICAgICAgIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwsXG4gICAgICAgIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3JcbiAgICAgICk7XG4gICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICB0YWJsZUNvbnRyb2xbcm93SXRlbS5pbnN0YW5jZUlkXSA9IGNvbnRyb2w7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IGdyb3VwID0gaXRlbS5yZXF1aXJlZCA/IG5ldyBGb3JtR3JvdXAodGFibGVDb250cm9sLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSA6IG5ldyBGb3JtR3JvdXAodGFibGVDb250cm9sKTtcbiAgaWYgKGl0ZW0uZGlzYWJsZWQpIHtcbiAgICBncm91cC5kaXNhYmxlKHsgb25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIH1cbiAgcmV0dXJuIGdyb3VwO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGFwcHJvcHJpYXRlIGZ1bmN0aW9uIGZvciB0aGUgY2FsbGVyIHRvIHVzZS5cbiAqXG4gKiBAcGFyYW0gZm9ybUl0ZW0gRm9ybUl0ZW0gcmVxdWlyaW5nIHNlcmlhbGl6YXRpb25cbiAqIEBwYXJhbSBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsIENvbmRpdGlvbmFsIGZvciBhIGN1c3RvbSBGb3JtSXRlbVxuICogQHBhcmFtIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3IgU2VyaWFsaXplciBmb3IgYSBjdXN0b20gRm9ybUl0ZW1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVybWluZVNlcmlhbGl6ZUZ1bmN0aW9uVG9Vc2UoXG4gIGZvcm1JdGVtOiBGb3JtSXRlbUltcGw8dW5rbm93bj4gfCBXZWJGb3JtLFxuICBtYW5hZ2VyU2VydmljZTogTXRuYVdmTWFuYWdlclNlcnZpY2UsXG4gIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlLFxuICBjdXN0b21Db250cm9sR2VuZXJhdG9yPzogKGl0ZW06IEZvcm1JdGVtKSA9PiBBYnN0cmFjdENvbnRyb2wgfCBudWxsXG4pOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsIHtcbiAgaWYgKGlzRm9ybShmb3JtSXRlbSkgfHwgaXNSZXBlYXRhYmxlSXRlbShmb3JtSXRlbSkgfHwgaXNTZWN0aW9uKGZvcm1JdGVtKSB8fCBpc0Zvcm1JdGVtR3JvdXBJbXBsKGZvcm1JdGVtKSkge1xuICAgIHJldHVybiBzZXJpYWxpemVGb3JtSXRlbXMoZm9ybUl0ZW0sIG1hbmFnZXJTZXJ2aWNlLCBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsLCBjdXN0b21Db250cm9sR2VuZXJhdG9yKTtcbiAgfSBlbHNlIGlmIChpc1RhYmxlSXRlbShmb3JtSXRlbSkpIHtcbiAgICByZXR1cm4gc2VyaWFsaXplVGFibGVJdGVtKGZvcm1JdGVtLCBtYW5hZ2VyU2VydmljZSwgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCwgY3VzdG9tQ29udHJvbEdlbmVyYXRvcik7XG4gIH0gZWxzZSBpZiAoY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbChmb3JtSXRlbSkgJiYgISFjdXN0b21Db250cm9sR2VuZXJhdG9yKSB7XG4gICAgcmV0dXJuIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3IoZm9ybUl0ZW0pO1xuICB9IGVsc2UgaWYgKGhhc05lc3RlZEZvcm1JdGVtcyhmb3JtSXRlbSkpIHtcbiAgICByZXR1cm4gc2VyaWFsaXplTmVzdGVkT3B0aW9uRm9ybUl0ZW1zKGZvcm1JdGVtIGFzIE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+PiwgbWFuYWdlclNlcnZpY2UpO1xuICB9IGVsc2UgaWYgKGlzT2Zmc2V0RGF0ZVJhbmdlSXRlbShmb3JtSXRlbSkgfHwgaXNZZWFyUXVhcnRlclJhbmdlSXRlbShmb3JtSXRlbSkpIHtcbiAgICByZXR1cm4gc2VyaWFsaXplUmFuZ2VJdGVtKGZvcm1JdGVtKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc2VyaWFsaXplRm9ybUl0ZW0oZm9ybUl0ZW0sIG1hbmFnZXJTZXJ2aWNlKTtcbiAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhIEZvcm1Hcm91cCBmb3IgYSByYW5nZSBpdGVtXG4gKiBAcGFyYW0gZm9ybUl0ZW0gRm9ybUl0ZW0gZm9yIGEgRGF0ZVJhbmdlIG9mIERhdGUgfCBZZWFyUXVhcnRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplUmFuZ2VJdGVtKGZvcm1JdGVtOiBGb3JtSXRlbUltcGw8RGF0ZVJhbmdlPERhdGUgfCBZZWFyUXVhcnRlcj4+KTogRm9ybUdyb3VwIHtcbiAgY29uc3QgdmFsaWRhdG9ycyA9IG5ldyBBcnJheTxWYWxpZGF0b3JGbj4oKTtcbiAgaWYgKGZvcm1JdGVtLnJlcXVpcmVkKSB7XG4gICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICB9XG4gIGNvbnN0IGdyb3VwID0gbmV3IEZvcm1Hcm91cChcbiAgICB7XG4gICAgICBzdGFydDogbmV3IEZvcm1Db250cm9sKGZvcm1JdGVtLnZhbHVlID8gZm9ybUl0ZW0udmFsdWUuc3RhcnQgOiBudWxsKSxcbiAgICAgIGVuZDogbmV3IEZvcm1Db250cm9sKGZvcm1JdGVtLnZhbHVlID8gZm9ybUl0ZW0udmFsdWUuZW5kIDogbnVsbCksXG4gICAgfSxcbiAgICBWYWxpZGF0b3JzLmNvbXBvc2UodmFsaWRhdG9ycylcbiAgKTtcbiAgaWYgKGZvcm1JdGVtLmRpc2FibGVkKSB7XG4gICAgZ3JvdXAuZGlzYWJsZSh7IG9ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICB9XG4gIHJldHVybiBncm91cDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgVmFsaWRhdG9yIHdpdGggYSBudW1lcmljIHZhbHVlIGZvciBhIEZvcm1JdGVtO1xuICogUmV0dXJucyBhcyBhbiBhcnJheSBvZiBsZW5ndGggMSBvciAwXG4gKiBAcGFyYW0gcGFyYW0wIGB0eXBlYCAtIHR5cGUgb2YgdmFsaWRhdG9yLCBlLmcuICdtaW5MZW5ndGgnO1xuICogYHZhbHVlYCAtIHBhcmFtZXRlciBmb3IgdGhlIHZhbGlkYXRvciwgZS5nLiAnbWluTGVuZ3RoKHZhbHVlKSdcbiAqL1xuZnVuY3Rpb24gZ2V0TnVtZXJpY1ZhbGlkYXRvcih0eXBlOiBWYWxpZGF0b3JXaXRoTnVtYmVyVHlwZSwgdmFsdWU6IG51bWJlcik6IFZhbGlkYXRvckZuW10ge1xuICByZXR1cm4gIWlzTnVsbE9yVW5kZWZpbmVkKHZhbHVlKSA/IFtWYWxpZGF0b3JzW3R5cGVdKHZhbHVlKV0gOiBbXTtcbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8vI3JlZ2lvbiBNdG5hRm9ybSB2YWx1ZSBpbnNlcnRpb25cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGFycmF5IG9mIEZvcm1pdGVtcyB3aXRoIG5ldyB2YWx1ZXMgaW5zZXJ0ZWQuXG4gKlxuICogQHBhcmFtIHNlY3Rpb24gVGhlIG9sZCBGb3JtIG9yIEZvcm0gU2VjdGlvblxuICogQHBhcmFtIG5nRm9ybVZhbHVlIG5nRm9ybSBKU09OIHZhbHVlc1xuICogQHBhcmFtIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwgYm9vbGVhbiBmdW5jdGlvbiBmb3IgYW55IGN1c3RvbSBGb3JtSXRlbXNcbiAqIEBwYXJhbSBjdXN0b21Gb3JtSXRlbUJ1aWxkZXIgZnVuY3Rpb24gdG8gaGFuZGxlIGN1c3RvbSBGb3JtSXRlbXNcbiAqIEByZXR1cm5zIG5ldyBGb3JtSXRlbSBhcnJheVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0Rm9ybUl0ZW1WYWx1ZXMoXG4gIHNlY3Rpb246IFdlYkZvcm0gfCBGb3JtSXRlbUdyb3VwIHwgUmVwZWF0YWJsZUl0ZW0sXG4gIG5nRm9ybVZhbHVlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgZGlzYWJsZWRTdGF0ZTogeyBbaW5zdGFuY2VJZDogc3RyaW5nXTogYm9vbGVhbiB9LFxuICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsOiAoaXRlbTogRm9ybUl0ZW0pID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZSxcbiAgY3VzdG9tRm9ybUl0ZW1CdWlsZGVyPzogKFxuICAgIHNlY3Rpb246IFdlYkZvcm0gfCBGb3JtSXRlbUdyb3VwIHwgUmVwZWF0YWJsZUl0ZW0gfCB1bmRlZmluZWQsXG4gICAgaXRlbTogRm9ybUl0ZW0sXG4gICAgcmZWYWx1ZTogdW5rbm93bixcbiAgICBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH1cbiAgKSA9PiBWYWx1ZUl0ZW08dW5rbm93bj4gfCBudWxsXG4pOiBBcnJheTxGb3JtSXRlbT4ge1xuICByZXR1cm4gc2VjdGlvbi5pdGVtc1xuICAgIC5tYXAoKGl0ZW0pID0+XG4gICAgICBkZXRlcm1pbmVJbnNlcnRGdW5jdGlvblRvVXNlKFxuICAgICAgICBpdGVtLFxuICAgICAgICBuZ0Zvcm1WYWx1ZVtpdGVtLmluc3RhbmNlSWRdLFxuICAgICAgICBkaXNhYmxlZFN0YXRlLFxuICAgICAgICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsLFxuICAgICAgICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXIsXG4gICAgICAgIHNlY3Rpb25cbiAgICAgIClcbiAgICApXG4gICAgLmZpbHRlcihpc1ByZXNlbnQpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBjb3BpZWQgVGFibGVJdGVtLCB3aXRoIGVhY2ggcm93IEZvcm1JdGVtIGhhdmluZyBuZXcgaW5zZXJ0ZWQgdmFsdWVzLlxuICogQHBhcmFtIGl0ZW0gVGFibGVJdGVtIHRvIGluc2VydCB2YWx1ZXNcbiAqIEBwYXJhbSBuZ0Zvcm1WYWx1ZSBuZ0Zvcm0gdmFsdWUgb2YgdGhlIFRhYmxlSXRlbVxuICogQHBhcmFtIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwgYm9vbGVhbiBmdW5jdGlvbiBmb3IgYW55IGN1c3RvbSBGb3JtSXRlbVxuICogQHBhcmFtIGN1c3RvbUZvcm1JdGVtQnVpbGRlciBmdW5jdGlvbiB0byBoYW5kbGUgY3VzdG9tIEZvcm1JdGVtIHZhbHVlIGluc2VydGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0VGFibGVJdGVtVmFsdWVzKFxuICBpdGVtOiBUYWJsZUl0ZW0sXG4gIG5nRm9ybVZhbHVlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgZGlzYWJsZWRTdGF0ZTogeyBbaW5zdGFuY2VJZDogc3RyaW5nXTogYm9vbGVhbiB9LFxuICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsOiAoaXRlbTogRm9ybUl0ZW0pID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZSxcbiAgY3VzdG9tRm9ybUl0ZW1CdWlsZGVyPzogKFxuICAgIHNlY3Rpb246IFdlYkZvcm0gfCBGb3JtSXRlbUdyb3VwIHwgUmVwZWF0YWJsZUl0ZW0gfCB1bmRlZmluZWQsXG4gICAgaXRlbTogRm9ybUl0ZW0sXG4gICAgcmZWYWx1ZTogdW5rbm93bixcbiAgICBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH1cbiAgKSA9PiBWYWx1ZUl0ZW08dW5rbm93bj4gfCBudWxsXG4pOiBUYWJsZUl0ZW0ge1xuICBjb25zdCB0YWJsZVJvd3MgPSBpdGVtLnRhYmxlUm93cy5tYXAoKHJvdzogVGFibGVSb3dJdGVtKSA9PiAoe1xuICAgIC4uLnJvdyxcbiAgICBpdGVtczogcm93Lml0ZW1zXG4gICAgICAuZmlsdGVyKGlzUHJlc2VudClcbiAgICAgIC5tYXAoKGZvcm1JdGVtKSA9PiB7XG4gICAgICAgIHJldHVybiBkZXRlcm1pbmVJbnNlcnRGdW5jdGlvblRvVXNlKFxuICAgICAgICAgIGZvcm1JdGVtLFxuICAgICAgICAgIG5nRm9ybVZhbHVlW2Zvcm1JdGVtLmluc3RhbmNlSWRdLFxuICAgICAgICAgIGRpc2FibGVkU3RhdGUsXG4gICAgICAgICAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCxcbiAgICAgICAgICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXJcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKGlzUHJlc2VudCksXG4gIH0pKTtcbiAgcmV0dXJuIHsgLi4uaXRlbSwgdGFibGVSb3dzLCBkaXNhYmxlZDogX2lzRGlzYWJsZWQoaXRlbSwgZGlzYWJsZWRTdGF0ZSkgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgbmV3IEZvcm1JdGVtIGFmdGVyIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZSBmdW5jdGlvbiB0byB1c2UuXG4gKiBAcGFyYW0gZm9ybUl0ZW0gRm9ybUl0ZW0gcmVxdWlyaW5nIHZhbHVlIGluc2VydGlvblxuICogQHBhcmFtIG5nRm9ybVZhbHVlIG5nRm9ybSB2YWx1ZVxuICogQHBhcmFtIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwgQ29uZGl0aW9uYWwgZm9yIGEgY3VzdG9tIEZvcm1JdGVtXG4gKiBAcGFyYW0gY3VzdG9tRm9ybUl0ZW1CdWlsZGVyIFZhbHVlIGluc2VydGlvbiBmdW5jdGlvbiBmb3IgYSBjdXN0b20gRm9ybUl0ZW1cbiAqIEBwYXJhbSBkaXNhYmxlZFN0YXRlIE1hcCBvZiBpdGVtcycgZGlzYWJsZWQgc3RhdGVcbiAqIEBwYXJhbSBwYXJlbnQgUGFyZW50IG9mIHRoZSBGb3JtSXRlbSwgdXNlZCB0byBwYXNzIHRvIHRoZSBjdXN0b21Gb3JtSXRlbUJ1aWxkZXJcbiAqL1xuZnVuY3Rpb24gZGV0ZXJtaW5lSW5zZXJ0RnVuY3Rpb25Ub1VzZShcbiAgZm9ybUl0ZW06IEZvcm1JdGVtLFxuICBuZ0Zvcm1WYWx1ZTogdW5rbm93bixcbiAgZGlzYWJsZWRTdGF0ZTogeyBbaW5zdGFuY2VJZDogc3RyaW5nXTogYm9vbGVhbiB9LFxuICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsOiAoaXRlbTogRm9ybUl0ZW0pID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZSxcbiAgY3VzdG9tRm9ybUl0ZW1CdWlsZGVyPzogKFxuICAgIHNlY3Rpb246IFdlYkZvcm0gfCBGb3JtSXRlbUdyb3VwIHwgUmVwZWF0YWJsZUl0ZW0gfCB1bmRlZmluZWQsXG4gICAgaXRlbTogRm9ybUl0ZW0sXG4gICAgcmZWYWx1ZTogdW5rbm93bixcbiAgICBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH1cbiAgKSA9PiBWYWx1ZUl0ZW08dW5rbm93bj4gfCBudWxsLFxuICBwYXJlbnQ/OiBXZWJGb3JtIHwgRm9ybUl0ZW1Hcm91cCB8IFJlcGVhdGFibGVJdGVtXG4pOiBGb3JtSXRlbSB8IG51bGwge1xuICBpZiAoaXNTZWN0aW9uKGZvcm1JdGVtKSB8fCBpc0Zvcm1JdGVtR3JvdXBJbXBsKGZvcm1JdGVtKSB8fCBpc1JlcGVhdGFibGVJdGVtKGZvcm1JdGVtKSkge1xuICAgIGNvbnN0IGl0ZW1zID0gaW5zZXJ0Rm9ybUl0ZW1WYWx1ZXMoXG4gICAgICBmb3JtSXRlbSxcbiAgICAgIG5nRm9ybVZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgZGlzYWJsZWRTdGF0ZSxcbiAgICAgIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwsXG4gICAgICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXJcbiAgICApO1xuICAgIHJldHVybiB7IC4uLmZvcm1JdGVtLCBpdGVtcywgZGlzYWJsZWQ6IF9pc0Rpc2FibGVkKGZvcm1JdGVtLCBkaXNhYmxlZFN0YXRlKSB9IGFzIEZvcm1JdGVtR3JvdXAgfCBSZXBlYXRhYmxlSXRlbTtcbiAgfSBlbHNlIGlmIChpc1RhYmxlSXRlbShmb3JtSXRlbSkpIHtcbiAgICByZXR1cm4gaW5zZXJ0VGFibGVJdGVtVmFsdWVzKFxuICAgICAgZm9ybUl0ZW0sXG4gICAgICBuZ0Zvcm1WYWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAgIGRpc2FibGVkU3RhdGUsXG4gICAgICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsLFxuICAgICAgY3VzdG9tRm9ybUl0ZW1CdWlsZGVyXG4gICAgKTtcbiAgfSBlbHNlIGlmIChjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsKGZvcm1JdGVtKSAmJiAhIWN1c3RvbUZvcm1JdGVtQnVpbGRlcikge1xuICAgIHJldHVybiBjdXN0b21Gb3JtSXRlbUJ1aWxkZXIocGFyZW50LCBmb3JtSXRlbSwgbmdGb3JtVmFsdWUsIGRpc2FibGVkU3RhdGUpO1xuICB9IGVsc2UgaWYgKGhhc05lc3RlZEZvcm1JdGVtcyhmb3JtSXRlbSkpIHtcbiAgICByZXR1cm4gaW5zZXJ0TmVzdGVkRm9ybUl0ZW1WYWx1ZXMoXG4gICAgICBmb3JtSXRlbSBhcyBPcHRpb25Hcm91cEl0ZW1JbXBsPE9wdGlvbjx1bmtub3duPj4sXG4gICAgICBuZ0Zvcm1WYWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAgIGRpc2FibGVkU3RhdGUsXG4gICAgICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsLFxuICAgICAgY3VzdG9tRm9ybUl0ZW1CdWlsZGVyXG4gICAgKTtcbiAgfSBlbHNlIGlmIChpc09mZnNldERhdGVSYW5nZUl0ZW0oZm9ybUl0ZW0pIHx8IGlzWWVhclF1YXJ0ZXJSYW5nZUl0ZW0oZm9ybUl0ZW0pKSB7XG4gICAgY29uc3Qgc3RhcnQgPSBpc1R5cGU8eyBzdGFydDogWWVhclF1YXJ0ZXIgfCBEYXRlIH0+KG5nRm9ybVZhbHVlLCAnc3RhcnQnKSA/IG5nRm9ybVZhbHVlLnN0YXJ0IDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGVuZCA9IGlzVHlwZTx7IGVuZDogWWVhclF1YXJ0ZXIgfCBEYXRlIH0+KG5nRm9ybVZhbHVlLCAnZW5kJykgPyBuZ0Zvcm1WYWx1ZS5lbmQgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHsgLi4uZm9ybUl0ZW0sIHZhbHVlOiB7IHN0YXJ0LCBlbmQgfSwgZGlzYWJsZWQ6IF9pc0Rpc2FibGVkKGZvcm1JdGVtLCBkaXNhYmxlZFN0YXRlKSB9IGFzIEZvcm1JdGVtSW1wbDxcbiAgICAgIERhdGVSYW5nZTxEYXRlIHwgWWVhclF1YXJ0ZXI+XG4gICAgPjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uZm9ybUl0ZW0sXG4gICAgICB2YWx1ZTogZmluZEl0ZW1WYWx1ZShmb3JtSXRlbSwgbmdGb3JtVmFsdWUpLFxuICAgICAgZGlzYWJsZWQ6IF9pc0Rpc2FibGVkKGZvcm1JdGVtIGFzIEZvcm1JdGVtSW1wbDx1bmtub3duPiwgZGlzYWJsZWRTdGF0ZSksXG4gICAgfSBhcyBGb3JtSXRlbTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgbmdGb3JtIHZhbHVlIGZvciBhIEZvcm1JdGVtLlxuICpcbiAqIEBwYXJhbSBmb3JtSXRlbSBGb3JtSXRlbSByZXF1aXJpbmcgYSB2YWx1ZVxuICogQHBhcmFtIG5nRm9ybVZhbHVlIG5nRm9ybSB2YWx1ZVxuICovXG5mdW5jdGlvbiBmaW5kSXRlbVZhbHVlKGZvcm1JdGVtOiBGb3JtSXRlbSwgbmdGb3JtVmFsdWU6IHVua25vd24pOiB1bmtub3duIHtcbiAgY29uc3QgaXRlbUlkID0gZm9ybUl0ZW0uaXRlbUlkLnNwbGl0KCcuJykucG9wKCk7XG4gIHN3aXRjaCAoaXRlbUlkPy50b1VwcGVyQ2FzZSgpKSB7XG4gICAgLy8gRklYTUU6IGNhbiB3ZSBwdXQgdGhlc2UgSURzIGluIGNvbnN0YW50cyBhbmQgcmVmZXIgdG8gdGhlbSBpbnN0ZWFkP1xuICAgIGNhc2UgJ0RBVEVJVEVNJzpcbiAgICAgIHJldHVybiAhIW5nRm9ybVZhbHVlICYmIHR5cGVvZiBuZ0Zvcm1WYWx1ZSAhPT0gJ3N0cmluZycgPyAobmdGb3JtVmFsdWUgYXMgTW9tZW50KS50b0lTT1N0cmluZygpIDogKG5nRm9ybVZhbHVlIGFzIHN0cmluZyk7XG4gICAgY2FzZSAnQ0hFQ0tCT1hJVEVNJzpcbiAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQobmdGb3JtVmFsdWUpICYmIEFycmF5LmlzQXJyYXkobmdGb3JtVmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IGFyciA9IG5nRm9ybVZhbHVlIGFzIEFycmF5PGJvb2xlYW4+O1xuICAgICAgICByZXR1cm4gKGZvcm1JdGVtIGFzIENoZWNrYm94SXRlbSkub3B0aW9ucy5maWx0ZXIoKG8sIGluZGV4KSA9PiAhIWFycltpbmRleF0pLm1hcCgobykgPT4gby5vcHRpb24uaWQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtdO1xuICAgIGNhc2UgJ0lOVEVSTkFUSU9OQUxJWkVEUEFSQUdSQVBIQU5TV0VSSVRFTSc6XG4gICAgY2FzZSAnSU5URVJOQVRJT05BTElaRURTSE9SVEFOU1dFUklURU0nOiB7XG4gICAgICBjb25zdCBsYW5ndWFnZXMgPVxuICAgICAgICBpdGVtSWQ/LnRvVXBwZXJDYXNlKCkgPT09ICdJTlRFUk5BVElPTkFMSVpFRFBBUkFHUkFQSEFOU1dFUklURU0nXG4gICAgICAgICAgPyAoZm9ybUl0ZW0gYXMgSW50ZXJuYXRpb25hbGl6ZWRQYXJhZ3JhcGhBbnN3ZXJJdGVtKS5sYW5ndWFnZVRhZ3NcbiAgICAgICAgICA6IChmb3JtSXRlbSBhcyBJbnRlcm5hdGlvbmFsaXplZFNob3J0QW5zd2VySXRlbSkubGFuZ3VhZ2VUYWdzO1xuXG4gICAgICBjb25zdCB2YWx1ZSA9IGxhbmd1YWdlcy5yZWR1Y2UoKHZhbHVlOiBJbnRlcm5hdGlvbmFsaXplZFN0cmluZ1tdLCBsYW5ndWFnZSkgPT4ge1xuICAgICAgICBpZiAobmdGb3JtVmFsdWUgJiYgdHlwZW9mIG5nRm9ybVZhbHVlID09PSAnb2JqZWN0JyAmJiBsYW5ndWFnZSBpbiBuZ0Zvcm1WYWx1ZSkge1xuICAgICAgICAgIGNvbnN0IGlucHV0ID0gKG5nRm9ybVZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtsYW5ndWFnZV07XG4gICAgICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgICAgICB2YWx1ZS5wdXNoKHsgdmFsdWU6IGlucHV0IGFzIHN0cmluZywgZmFjZXRJZDogbGFuZ3VhZ2UgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0sIFtdKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBuZ0Zvcm1WYWx1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnNlcnROZXN0ZWRGb3JtSXRlbVZhbHVlcyhcbiAgZm9ybUl0ZW06IE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+PixcbiAgbmdGb3JtVmFsdWU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH0sXG4gIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlLFxuICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXI/OiAoXG4gICAgc2VjdGlvbjogV2ViRm9ybSB8IEZvcm1JdGVtR3JvdXAgfCBSZXBlYXRhYmxlSXRlbSB8IHVuZGVmaW5lZCxcbiAgICBpdGVtOiBGb3JtSXRlbSxcbiAgICByZlZhbHVlOiB1bmtub3duLFxuICAgIGRpc2FibGVkU3RhdGU6IHsgW2luc3RhbmNlSWQ6IHN0cmluZ106IGJvb2xlYW4gfVxuICApID0+IFZhbHVlSXRlbTx1bmtub3duPiB8IG51bGxcbik6IEZvcm1JdGVtIHtcbiAgY29uc3Qgb3B0aW9uSXRlbU1hcDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgZm9yIChjb25zdCBpZCBpbiBmb3JtSXRlbS5vcHRpb25JdGVtTWFwKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmb3JtSXRlbS5vcHRpb25JdGVtTWFwLCBpZCkpIHtcbiAgICAgIGNvbnN0IHN1Ykl0ZW0gPSBmb3JtSXRlbS5vcHRpb25JdGVtTWFwW2lkXTtcbiAgICAgIG9wdGlvbkl0ZW1NYXBbaWRdID0gZGV0ZXJtaW5lSW5zZXJ0RnVuY3Rpb25Ub1VzZShcbiAgICAgICAgc3ViSXRlbSxcbiAgICAgICAgbmdGb3JtVmFsdWVbc3ViSXRlbS5pbnN0YW5jZUlkXSxcbiAgICAgICAgZGlzYWJsZWRTdGF0ZSxcbiAgICAgICAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCxcbiAgICAgICAgY3VzdG9tRm9ybUl0ZW1CdWlsZGVyXG4gICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLmZvcm1JdGVtLFxuICAgIG9wdGlvbkl0ZW1NYXAsXG4gICAgdmFsdWU6IGZpbmRJdGVtVmFsdWUoZm9ybUl0ZW0sIG5nRm9ybVZhbHVlW2Zvcm1JdGVtLmluc3RhbmNlSWRdKSxcbiAgICBkaXNhYmxlZDogX2lzRGlzYWJsZWQoZm9ybUl0ZW0sIGRpc2FibGVkU3RhdGUpLFxuICB9IGFzIE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+Pjtcbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiBhIEZvcm1JdGVtIGhhcyBhbiBPcHRpb25JdGVtTWFwIHdpdGggYXQgbGVhc3QgMSBpdGVtLCB3aGljaCByZXF1aXJlIHRoZWlyIG93biBGb3JtQ29udHJvbChzKVxuICogQHBhcmFtIGZvcm1JdGVtIEZvcm1JdGVtIHRvIGNoZWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNOZXN0ZWRGb3JtSXRlbXMoZm9ybUl0ZW06IHVua25vd24pOiBmb3JtSXRlbSBpcyB7IG9wdGlvbkl0ZW1NYXA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0ge1xuICByZXR1cm4gKFxuICAgIGlzVHlwZTx7XG4gICAgICBvcHRpb25JdGVtTWFwOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICB9Pihmb3JtSXRlbSwgJ29wdGlvbkl0ZW1NYXAnKSAmJiBPYmplY3Qua2V5cyhmb3JtSXRlbS5vcHRpb25JdGVtTWFwKS5sZW5ndGggPiAwXG4gICk7XG59XG5cbi8qKlxuICogRnVuY3Rpb24gZm9yIHZhbGlkYXRpbmcgbWluL21heCBzZWxlY3Rpb25zIGxpbWl0c1xuICogQHBhcmFtIHR5cGVDaGVjayBXaGljaCBsaW1pdCB0byB2YWxpZGF0ZS4gJ01JTicgfCAnTUFYJ1xuICogQHBhcmFtIGxpbWl0IHVwcGVyIG9yIGxvd2VyIGxpbWl0IHRvIGNoZWNrIGFnYWluc3RcbiAqL1xuZnVuY3Rpb24gbnVtQ2hlY2tib3hlc1ZhbGlkYXRvcih0eXBlQ2hlY2s6ICdNSU4nIHwgJ01BWCcsIGxpbWl0ID0gMSk6IFZhbGlkYXRvckZuIHtcbiAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICBsZXQgdG90YWxTZWxlY3RlZCA9IDA7XG4gICAgaWYgKGlzRm9ybUFycmF5KGNvbnRyb2wpKSB7XG4gICAgICB0b3RhbFNlbGVjdGVkID0gY29udHJvbC5jb250cm9scy5tYXAoKGMpID0+IGMudmFsdWUpLnJlZHVjZSgodG90YWwsIG5leHQpID0+IChuZXh0ID8gdG90YWwgKyBuZXh0IDogdG90YWwpLCAwKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHR5cGVDaGVjaykge1xuICAgICAgY2FzZSAnTUlOJzpcbiAgICAgICAgcmV0dXJuIHRvdGFsU2VsZWN0ZWQgPj0gbGltaXQgPyBudWxsIDogeyBtaW5TZWxlY3RlZDogYFNlbGVjdCBhdCBsZWFzdCAke2xpbWl0fWAgfTtcbiAgICAgIGNhc2UgJ01BWCc6XG4gICAgICAgIHJldHVybiB0b3RhbFNlbGVjdGVkIDw9IGxpbWl0ID8gbnVsbCA6IHsgbWF4U2VsZWN0ZWQ6IGBTZWxlY3Qgbm8gbW9yZSB0aGFuICR7bGltaXR9YCB9O1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNGb3JtQXJyYXkoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogY29udHJvbCBpcyBGb3JtQXJyYXkge1xuICByZXR1cm4gaXNUeXBlPEZvcm1BcnJheT4oY29udHJvbCwgJ2NvbnRyb2xzJyk7XG59XG5cbmZ1bmN0aW9uIF9pc0Rpc2FibGVkKGl0ZW06IENvbmRpdGlvbmFsSXRlbSwgZGlzYWJsZWRTdGF0ZTogeyBbaWQ6IHN0cmluZ106IGJvb2xlYW4gfSk6IGJvb2xlYW4ge1xuICBjb25zdCBkaXNhYmxlZCA9IGRpc2FibGVkU3RhdGVbaXRlbS5pbnN0YW5jZUlkXTtcbiAgcmV0dXJuIGlzTnVsbE9yVW5kZWZpbmVkKGRpc2FibGVkKSA/IGl0ZW0uZGlzYWJsZWQgOiBkaXNhYmxlZDtcbn1cblxuZnVuY3Rpb24gd2hvbGVOdW1iZXJQYXR0ZXJuKCk6IFZhbGlkYXRvckZuIHtcbiAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGNvbnRyb2wudmFsdWUpIHx8IGlzRW1wdHlTdHJpbmcoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB3aG9sZU51bWJlci50ZXN0KGNvbnRyb2wudmFsdWUpID8gbnVsbCA6IHsgd2hvbGVOdW1iZXI6IHRydWUgfTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gbnVtZXJpY2FsVmFsdWVDaGVjaygpOiBWYWxpZGF0b3JGbiB7XG4gIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgIGlmIChpc051bGxPclVuZGVmaW5lZChjb250cm9sLnZhbHVlKSB8fCBpc0VtcHR5U3RyaW5nKGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG51bU9ubHlXaXRob3V0Q29tbWEudGVzdChjb250cm9sLnZhbHVlKSB8fCBudW1Pbmx5V2l0aENvbW1hLnRlc3QoY29udHJvbC52YWx1ZSkgPyBudWxsIDogeyBub25EaWdpdDogdHJ1ZSB9O1xuICB9O1xufVxuXG5mdW5jdGlvbiBwb3NpdGl2ZU51bWJlclBhdHRlcm4oKTogVmFsaWRhdG9yRm4ge1xuICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoY29udHJvbC52YWx1ZSkgfHwgaXNFbXB0eVN0cmluZyhjb250cm9sLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBwb3NPbmx5LnRlc3QoY29udHJvbC52YWx1ZSkgPyBudWxsIDogeyBwb3NpdGl2ZTogdHJ1ZSB9O1xuICB9O1xufVxuXG4vKipcbiAqIFRoaXMgd29ya3MgYXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgYW5ndWxhciAnbWluJy8nbWF4JyBWYWxpZGF0b3JzLiBVc2luZyB0aGUgYnVpbHQtaW4gdmFsaWRhdG9yc1xuICogYXBwZWFycyB0byB0YWtlIHByZWNlZGVuY2Ugb3ZlciBjdXN0b20gdmFsaWRhdG9ycywgcmVnYXJkbGVzcyBvZiBvcmRlciBpbiB0aGUgYXJyYXkuIFVzaW5nIHRoaXMgZnVuY3Rpb25cbiAqIGVuc3VyZXMgdmFsaWRhdG9ycyBzZXQgYmVmb3JlIHRoaXMgb25lIG1haW50YWluIHByaW9yaXR5LiBGb3IgaW5zdGFuY2UsIHRoZSBpbnB1dCB2YWx1ZSBmYWlsaW5nIG51bWVyaWNhbCB2YWxpZGF0aW9uXG4gKiBpcyBtb3JlIGltcG9ydGFudCB0aGFuIHRoZSB2YWx1ZSBiZWluZyB3aXRoaW4gbWluLW1heCByYW5nZS5cbiAqL1xuZnVuY3Rpb24gbnVtVmFsdWVMaW1pdCh0eXBlOiAnbWluJyB8ICdtYXgnLCBsaW1pdDogbnVtYmVyKTogVmFsaWRhdG9yRm4ge1xuICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoY29udHJvbC52YWx1ZSkgfHwgaXNFbXB0eVN0cmluZyhjb250cm9sLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gcGFyc2VGbG9hdChjb250cm9sLnZhbHVlKTtcbiAgICByZXR1cm4gIWlzTmFOKHZhbHVlKSAmJiAodHlwZSA9PT0gJ21pbicgPyB2YWx1ZSA8IGxpbWl0IDogdmFsdWUgPiBsaW1pdClcbiAgICAgID8ge1xuICAgICAgICAgIFt0eXBlXToge1xuICAgICAgICAgICAgW3R5cGVdOiBsaW1pdCxcbiAgICAgICAgICAgIGFjdHVhbDogY29udHJvbC52YWx1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICA6IG51bGw7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzRW1wdHlTdHJpbmcodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgIXZhbHVlLmxlbmd0aDtcbn1cbiJdfQ==
403
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXplci11dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2ViLWZvcm0tYW5ndWxhci9zcmMvbGliL3V0aWxpdGllcy9zZXJpYWxpemVyLXV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFtQixTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBaUMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFL0gsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUNMLGdCQUFnQixFQUloQixzQkFBc0IsRUFNdEIsNkJBQTZCLEVBQzdCLHlCQUF5QixFQUd6QixNQUFNLEVBQ04sbUJBQW1CLEVBQ25CLHFCQUFxQixFQUNyQixnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsc0JBQXNCLEVBR3RCLHdCQUF3QixFQUd4QixvQkFBb0IsRUFLcEIsMkJBQTJCLEdBRzVCLE1BQU0sbUJBQW1CLENBQUM7QUFHM0IsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzlDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBRXJHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU0xRCxnRkFBZ0Y7QUFDaEYsTUFBTSxtQkFBbUIsR0FBRyxpQkFBaUIsQ0FBQztBQUM5QyxnR0FBZ0c7QUFDaEcsTUFBTSxnQkFBZ0IsR0FBRyw4QkFBOEIsQ0FBQztBQUN4RCw2RUFBNkU7QUFDN0UsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDO0FBQzFCLDRGQUE0RjtBQUM1RixNQUFNLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQztBQUV2QyxnQ0FBZ0M7QUFFaEM7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENB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RUFBRSxDQUFDO0lBQ2pFLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsYUFBYSxDQUFDLElBQW1CLEVBQUUsS0FBYTtJQUN2RCxPQUFPLENBQUMsT0FBd0IsRUFBMkIsRUFBRTtRQUMzRCxJQUFJLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3BFLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ3RFLENBQUMsQ0FBQztnQkFDRSxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUNOLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSztvQkFDYixNQUFNLEVBQUUsT0FBTyxDQUFDLEtBQUs7aUJBQ3RCO2FBQ0Y7WUFDSCxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ1gsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLEtBQWM7SUFDbkMsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3BELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJbnRlcm5hdGlvbmFsaXplZFN0cmluZyB9IGZyb20gJ0BtdG5hL2NvcmUtaTE4bi10cyc7XG5pbXBvcnQgeyBpc051bGxPclVuZGVmaW5lZCwgaXNQcmVzZW50LCBpc1R5cGUgfSBmcm9tICdAbXRuYS9jb3JlLXRzJztcbmltcG9ydCB7XG4gIENIRUNLQk9YX0lURU1fSUQsXG4gIENoZWNrYm94SXRlbSxcbiAgQ29uZGl0aW9uYWxJdGVtLFxuICBEYXRlUmFuZ2UsXG4gIERFQ0lNQUxfQU5TV0VSX0lURU1fSUQsXG4gIERlY2ltYWxBbnN3ZXJJdGVtLFxuICBGb3JtIGFzIFdlYkZvcm0sXG4gIEZvcm1JdGVtLFxuICBGb3JtSXRlbUdyb3VwLFxuICBGb3JtSXRlbUltcGwsXG4gIEkxOE5fUEFSQUdSQVBIX0FOU1dFUl9JVEVNX0lELFxuICBJMThOX1NIT1JUX0FOU1dFUl9JVEVNX0lELFxuICBJbnRlcm5hdGlvbmFsaXplZFBhcmFncmFwaEFuc3dlckl0ZW0sXG4gIEludGVybmF0aW9uYWxpemVkU2hvcnRBbnN3ZXJJdGVtLFxuICBpc0Zvcm0sXG4gIGlzRm9ybUl0ZW1Hcm91cEltcGwsXG4gIGlzT2Zmc2V0RGF0ZVJhbmdlSXRlbSxcbiAgaXNSZXBlYXRhYmxlSXRlbSxcbiAgaXNTZWN0aW9uLFxuICBpc1RhYmxlSXRlbSxcbiAgaXNXaG9sZU51bWJlckl0ZW0sXG4gIGlzWWVhclF1YXJ0ZXJSYW5nZUl0ZW0sXG4gIE9wdGlvbixcbiAgT3B0aW9uR3JvdXBJdGVtSW1wbCxcbiAgUEFSQUdSQVBIX0FOU1dFUl9JVEVNX0lELFxuICBQYXJhZ3JhcGhBbnN3ZXJJdGVtLFxuICBSZXBlYXRhYmxlSXRlbSxcbiAgU0hPUlRfQU5TV0VSX0lURU1fSUQsXG4gIFNob3J0QW5zd2VySXRlbSxcbiAgVGFibGVJdGVtLFxuICBUYWJsZVJvd0l0ZW0sXG4gIFZhbHVlSXRlbSxcbiAgV0hPTEVfTlVNQkVSX0FOU1dFUl9JVEVNX0lELFxuICBXaG9sZU51bWJlckFuc3dlckl0ZW0sXG4gIFllYXJRdWFydGVyLFxufSBmcm9tICdAbXRuYS93ZWItZm9ybS10cyc7XG5pbXBvcnQgeyBNb21lbnQgfSBmcm9tICdtb21lbnQnO1xuXG5pbXBvcnQgeyBpc1Byb2dyZXNzaXZlRm9ybSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBpc1Byb2dyZXNzaXZlRm9ybVNlY3Rpb24gfSBmcm9tICcuLi9tb2RlbHMvcHJvZ3Jlc3NpdmUtZm9ybS9wcm9ncmVzc2l2ZS1mb3JtLXNlY3Rpb24ubW9kZWwnO1xuaW1wb3J0IHsgTXRuYVdmTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mb3JtLW1hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyB2YWxpZGF0aW9uUmVzdWx0VmFsaWRhdG9yIH0gZnJvbSAnLi4vdmFsaWRhdG9ycyc7XG5cbi8qKiBUeXBlcyBvZiBWYWxpZGF0b3JzIHRoYXQgY2FuIGJlIHNldCBvbiBhIEZvcm1Db250cm9sICovXG5leHBvcnQgdHlwZSBWYWxpZGF0b3JUeXBlID0gJ3JlcXVpcmVkJyB8ICdyZXF1aXJlZFRydWUnIHwgJ2VtYWlsJztcbmV4cG9ydCB0eXBlIFZhbGlkYXRvcldpdGhOdW1iZXJUeXBlID0gJ21pbkxlbmd0aCcgfCAnbWF4TGVuZ3RoJyB8ICdtaW4nIHwgJ21heCc7XG5cbi8qKiBSZWdFeCB0byB2YWxpZGF0ZSBudW1iZXIgaXRlbXMgY29udGFpbiBvbmx5IG5lZ2F0aXZlLCBkaWdpdHMsIG9yIGRlY2ltYWxzICovXG5jb25zdCBudW1Pbmx5V2l0aG91dENvbW1hID0gL14tP1xcZCsoXFwuXFxkKik/JC87XG4vKiogUmVnRXggdG8gdmFsaWRhdGUgbnVtYmVyIGl0ZW1zIGNvbnRhaW4gb25seSBuZWdhdGl2ZSwgZGlnaXRzLCBvciBkZWNpbWFscyBpbiBjb21tYSBmb3JtYXQgKi9cbmNvbnN0IG51bU9ubHlXaXRoQ29tbWEgPSAvXi0/XFxkezEsM30oLFxcZHszfSkqKFxcLlxcZCopPyQvO1xuLyoqIFJlZ0V4IHRvIHZhbGlkYXRlICdwb3NpdGl2ZSBvbmx5JyBpdGVtIGNvbmFpbnMgbm9uLW5lZ2F0aXZlIGNoYXJhY3RlcnMgKi9cbmNvbnN0IHBvc09ubHkgPSAvXlteLV0qJC87XG4vKiogUmVnRXggdG8gdmFsaWRhdGUgJ3dob2xlIG51bWJlcicgaXRlbSBjb250YWlucyBvbmx5IG5lZ2F0aXZlLCBkaWdpdHMsIG9yIGNvbW1hIGZvcm1hdCAqL1xuY29uc3Qgd2hvbGVOdW1iZXIgPSAvXi0/XFxkKygsXFxkezN9KSokLztcblxuLy8jcmVnaW9uIEZvcm1Db250cm9sIEdlbmVyYXRpb25cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBuZXcgRm9ybUdyb3VwIHdpdGggRm9ybUNvbnRyb2xzICYgcG9zc2libGUgbmVzdGVkIEZvcm1Hcm91cHNcbiAqIEBwYXJhbSBmb3JtSXRlbSBXZWJGb3JtLCBTZWN0aW9uLCBHcm91cCwgb3IgUmVwZWF0YWJsZUl0ZW0gdXNlZCB0byBjcmVhdGUgYSBGb3JtR3JvdXBcbiAqIEBwYXJhbSBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsIGJvb2xlYW4gZnVuY3Rpb24gZm9yIGFueSBjdXN0b20gRm9ybUl0ZW1zXG4gKiBAcGFyYW0gY3VzdG9tQ29udHJvbEdlbmVyYXRvciBGb3JtQ29udHJvbCBnZW5lcmF0b3IgZnVuY3Rpb24gZm9yIGFueSBjdXN0b20gRm9ybUl0ZW1zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVGb3JtSXRlbXMoXG4gIGZvcm1JdGVtOiBXZWJGb3JtIHwgRm9ybUl0ZW1Hcm91cCB8IFJlcGVhdGFibGVJdGVtLFxuICBtYW5hZ2VyU2VydmljZTogTXRuYVdmTWFuYWdlclNlcnZpY2UsXG4gIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlLFxuICBjdXN0b21Db250cm9sR2VuZXJhdG9yPzogKGl0ZW06IEZvcm1JdGVtKSA9PiBBYnN0cmFjdENvbnRyb2wgfCBudWxsXG4pOiBGb3JtR3JvdXAge1xuICBjb25zdCBmb3JtOiB7IFtrZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbCB9ID0ge307XG5cbiAgZm9yIChjb25zdCBpdGVtIG9mIGZvcm1JdGVtLml0ZW1zKSB7XG4gICAgY29uc3QgY29udHJvbCA9IGRldGVybWluZVNlcmlhbGl6ZUZ1bmN0aW9uVG9Vc2UoXG4gICAgICBpdGVtIGFzIEZvcm1JdGVtSW1wbDx1bmtub3duPixcbiAgICAgIG1hbmFnZXJTZXJ2aWNlLFxuICAgICAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCxcbiAgICAgIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3JcbiAgICApO1xuICAgIGlmIChjb250cm9sKSB7XG4gICAgICBmb3JtW2l0ZW0uaW5zdGFuY2VJZF0gPSBjb250cm9sO1xuICAgIH1cbiAgfVxuICBjb25zdCByZXF1aXJlZCA9IGlzRm9ybShmb3JtSXRlbSkgPyB0cnVlIDogZm9ybUl0ZW0ucmVxdWlyZWQ7XG4gIGNvbnN0IGdyb3VwID0gcmVxdWlyZWQgPyBuZXcgRm9ybUdyb3VwKGZvcm0sIFZhbGlkYXRvcnMucmVxdWlyZWQpIDogbmV3IEZvcm1Hcm91cChmb3JtKTtcbiAgaWYgKCdkaXNhYmxlZCcgaW4gZm9ybUl0ZW0gJiYgZm9ybUl0ZW0uZGlzYWJsZWQpIHtcbiAgICBncm91cC5kaXNhYmxlKHsgb25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIH1cbiAgcmV0dXJuIGdyb3VwO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSB0YWlsb3JlZCBGb3JtQ29udHJvbCB3aXRoIHZhbGlkYXRvcnMgZm9yIGEgRm9ybUl0ZW1cbiAqIEBwYXJhbSBmb3JtSXRlbSBUaGUgRm9ybUl0ZW0gcmVxdWVzdGluZyBhIHRhaWxvcmVkIEZvcm1Db250cm9sXG4gKiBAaW50ZXJuYWwgQ3JlYXRpbmcgdGhlIGZvcm0gY29udHJvbCBhbmQgdGhlbiBjYWxsaW5nIHNldFZhbGlkYXRvcnMgZm9yY2UgYSB2YWxpZGF0aW9uIHBhc3MsXG4gKiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTk2MjIjaXNzdWVjb21tZW50LTM0MTU0Nzg4NFxuICogQmV0dGVyIHRvIGdhdGhlciB0aGUgdmFsaWRhdG9ycyBhbmQgcHV0IHRoZW0gaW4gdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBmb3JtIGNvbnRyb2wuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVGb3JtSXRlbShmb3JtSXRlbTogRm9ybUl0ZW1JbXBsPHVua25vd24+LCBtYW5hZ2VyU2VydmljZTogTXRuYVdmTWFuYWdlclNlcnZpY2UpOiBBYnN0cmFjdENvbnRyb2wge1xuICBjb25zdCB2YWxpZGF0b3JzID0gbmV3IEFycmF5PFZhbGlkYXRvckZuPih2YWxpZGF0aW9uUmVzdWx0VmFsaWRhdG9yKGZvcm1JdGVtLmluc3RhbmNlSWQsIG1hbmFnZXJTZXJ2aWNlKSk7XG4gIGlmIChmb3JtSXRlbS5yZXF1aXJlZCkge1xuICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgfVxuICBzd2l0Y2ggKGZvcm1JdGVtLml0ZW1JZCkge1xuICAgIGNhc2UgQ0hFQ0tCT1hfSVRFTV9JRDoge1xuICAgICAgY29uc3QgY2hlY2tib3hJdGVtID0gZm9ybUl0ZW0gYXMgQ2hlY2tib3hJdGVtO1xuICAgICAgY29uc3QgdmFsdWUgPSBjaGVja2JveEl0ZW0udmFsdWUgfHwgW107XG4gICAgICB2YWxpZGF0b3JzLnB1c2gobnVtQ2hlY2tib3hlc1ZhbGlkYXRvcignTUlOJywgY2hlY2tib3hJdGVtLm1pblNlbGVjdGlvbnMpLCBudW1DaGVja2JveGVzVmFsaWRhdG9yKCdNQVgnLCBjaGVja2JveEl0ZW0ubWF4U2VsZWN0aW9ucykpO1xuICAgICAgY29uc3QgYXJyID0gbmV3IEZvcm1BcnJheShcbiAgICAgICAgY2hlY2tib3hJdGVtLm9wdGlvbnMubWFwKFxuICAgICAgICAgIChvKSA9PlxuICAgICAgICAgICAgbmV3IEZvcm1Db250cm9sKHtcbiAgICAgICAgICAgICAgdmFsdWU6IG8uc2VsZWN0ZWQgfHwgdmFsdWUuc29tZSgodikgPT4gdiA9PT0gby5vcHRpb24uaWQpLFxuICAgICAgICAgICAgICBkaXNhYmxlZDogY2hlY2tib3hJdGVtLmRpc2FibGVkLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKSxcbiAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKHZhbGlkYXRvcnMpXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFycjtcbiAgICB9XG4gICAgY2FzZSBERUNJTUFMX0FOU1dFUl9JVEVNX0lEOlxuICAgIGNhc2UgV0hPTEVfTlVNQkVSX0FOU1dFUl9JVEVNX0lEOiB7XG4gICAgICBjb25zdCBpdGVtID0gZm9ybUl0ZW0gYXMgRGVjaW1hbEFuc3dlckl0ZW0gfCBXaG9sZU51bWJlckFuc3dlckl0ZW07XG4gICAgICB2YWxpZGF0b3JzLnB1c2gobnVtZXJpY2FsVmFsdWVDaGVjaygpKTtcbiAgICAgIGlmIChpc1dob2xlTnVtYmVySXRlbShpdGVtKSkge1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2god2hvbGVOdW1iZXJQYXR0ZXJuKCkpO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW0ucG9zaXRpdmVPbmx5KSB7XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChwb3NpdGl2ZU51bWJlclBhdHRlcm4oKSk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZW0ubWluVmFsdWUpKSB7XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChudW1WYWx1ZUxpbWl0KCdtaW4nLCBpdGVtLm1pblZhbHVlKSk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZW0ubWF4VmFsdWUpKSB7XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChudW1WYWx1ZUxpbWl0KCdtYXgnLCBpdGVtLm1heFZhbHVlKSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBQQVJBR1JBUEhfQU5TV0VSX0lURU1fSUQ6XG4gICAgY2FzZSBTSE9SVF9BTlNXRVJfSVRFTV9JRDoge1xuICAgICAgY29uc3Qgc2hvcnRBbnN3ZXJJdGVtID0gZm9ybUl0ZW0gYXMgU2hvcnRBbnN3ZXJJdGVtIHwgUGFyYWdyYXBoQW5zd2VySXRlbTtcbiAgICAgIHZhbGlkYXRvcnMucHVzaCguLi5nZXROdW1lcmljVmFsaWRhdG9yKCdtaW5MZW5ndGgnLCBzaG9ydEFuc3dlckl0ZW0ubWluQ2hhckNvdW50KSk7XG4gICAgICB2YWxpZGF0b3JzLnB1c2goLi4uZ2V0TnVtZXJpY1ZhbGlkYXRvcignbWF4TGVuZ3RoJywgc2hvcnRBbnN3ZXJJdGVtLm1heENoYXJDb3VudCkpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgSTE4Tl9QQVJBR1JBUEhfQU5TV0VSX0lURU1fSUQ6XG4gICAgY2FzZSBJMThOX1NIT1JUX0FOU1dFUl9JVEVNX0lEOiB7XG4gICAgICBjb25zdCBpMThuSXRlbSA9IGZvcm1JdGVtIGFzIEludGVybmF0aW9uYWxpemVkUGFyYWdyYXBoQW5zd2VySXRlbSB8IEludGVybmF0aW9uYWxpemVkU2hvcnRBbnN3ZXJJdGVtO1xuICAgICAgY29uc3QgZ3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9LCBWYWxpZGF0b3JzLmNvbXBvc2UodmFsaWRhdG9ycykpO1xuICAgICAgZm9yIChjb25zdCBsYW5ndWFnZSBvZiBpMThuSXRlbS5sYW5ndWFnZVRhZ3MpIHtcbiAgICAgICAgLy8gRklYTUUgaWYgdGhlcmUgaXMgbm90aGlnbiB0aGVyZSBpbiB0aGUgdmFsdWUgc2hvdWxkIEkgc2V0IGEgbmV3IGludGVybmF0aW9uYWxpemVkIHN0cmluZz9cbiAgICAgICAgZ3JvdXAuY29udHJvbHNbbGFuZ3VhZ2VdID0gbmV3IEZvcm1Db250cm9sKGZvcm1JdGVtLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChpMThuSXRlbS5kaXNhYmxlZCkge1xuICAgICAgICBncm91cC5kaXNhYmxlKHsgb25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZ3JvdXA7XG4gICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6IGZvcm1JdGVtLnZhbHVlLCBkaXNhYmxlZDogISFmb3JtSXRlbS5kaXNhYmxlZCB9LCBWYWxpZGF0b3JzLmNvbXBvc2UodmFsaWRhdG9ycykpO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBjb250cm9scyBmb3IgYW55IGZvcm0gaXRlbXMgbmVzdGVkIGluc2lkZSBhIHBhcmVudCBpdGVtcyBvcHRpb25zXG4gKiBAcGFyYW0gZm9ybUl0ZW0gVGhlIEZvcm1JdGVtIHdpdGggYW4gJ29wdGlvbnMnIHByb3BlcnR5XG4gKiBAcGFyYW0gY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCBjb25kaXRpb25hbCBmdW5jdGlvbiBmcm9tIHBhcmVudCAnc2VyaWFsaXplRm9ybUl0ZW1zJyBmdW5jdGlvblxuICogQHBhcmFtIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3IgRm9ybUNvbnRyb2wgZ2VuZXJhdG9yIGZyb20gcGFyZW50ICdzZXJpYWxpemVGb3JtSXRlbXMnIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVOZXN0ZWRPcHRpb25Gb3JtSXRlbXMoXG4gIGZvcm1JdGVtOiBPcHRpb25Hcm91cEl0ZW1JbXBsPE9wdGlvbjx1bmtub3duPj4sXG4gIG1hbmFnZXJTZXJ2aWNlOiBNdG5hV2ZNYW5hZ2VyU2VydmljZSxcbiAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbDogKGl0ZW06IEZvcm1JdGVtKSA9PiBib29sZWFuID0gKCkgPT4gZmFsc2UsXG4gIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3I/OiAoaXRlbTogRm9ybUl0ZW0pID0+IEFic3RyYWN0Q29udHJvbCB8IG51bGxcbik6IEZvcm1Hcm91cCB7XG4gIGNvbnN0IGNvbnRyb2xzOiB7IFtrZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbCB9ID0ge307XG4gIGZvciAoY29uc3QgaWQgaW4gZm9ybUl0ZW0ub3B0aW9uSXRlbU1hcCkge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZm9ybUl0ZW0ub3B0aW9uSXRlbU1hcCwgaWQpKSB7XG4gICAgICBjb25zdCBzdWJJdGVtID0gZm9ybUl0ZW0ub3B0aW9uSXRlbU1hcFtpZF0gYXMgRm9ybUl0ZW1JbXBsPHVua25vd24+O1xuICAgICAgY29uc3QgY29udHJvbCA9IGRldGVybWluZVNlcmlhbGl6ZUZ1bmN0aW9uVG9Vc2Uoc3ViSXRlbSwgbWFuYWdlclNlcnZpY2UsIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwsIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3IpO1xuICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgY29udHJvbHNbc3ViSXRlbS5pbnN0YW5jZUlkXSA9IGNvbnRyb2w7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29udHJvbHNbZm9ybUl0ZW0uaW5zdGFuY2VJZF0gPSBzZXJpYWxpemVGb3JtSXRlbShmb3JtSXRlbSwgbWFuYWdlclNlcnZpY2UpO1xuICBjb25zdCBncm91cCA9IGZvcm1JdGVtLnJlcXVpcmVkID8gbmV3IEZvcm1Hcm91cChjb250cm9scywgVmFsaWRhdG9ycy5yZXF1aXJlZCkgOiBuZXcgRm9ybUdyb3VwKGNvbnRyb2xzKTtcbiAgaWYgKGZvcm1JdGVtLmRpc2FibGVkKSB7XG4gICAgZ3JvdXAuZGlzYWJsZSh7IG9ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICB9XG4gIHJldHVybiBncm91cDtcbn1cblxuLyoqXG4gKiBCdWlsZCBGb3JtQ29udHJvbHMgZm9yIGEgVGFibGVJdGVtXG4gKiBAcGFyYW0gaXRlbSBUYWJsZUl0ZW0gcmVxdWlyaW5nIEZvcm1Db250cm9sc1xuICogQHBhcmFtIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwgQ29uZGl0aW9uYWwgZnVuY3Rpb24gZm9yIGN1c3RvbSBhbnkgRm9ybUl0ZW1zXG4gKiBAcGFyYW0gY3VzdG9tQ29udHJvbEdlbmVyYXRvciBGb3JtQ29udHJvbCBnZW5lcmF0b3IgZm9yIGN1c3RvbSBhbnkgRm9ybUl0ZW1zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVUYWJsZUl0ZW0oXG4gIGl0ZW06IFRhYmxlSXRlbSxcbiAgbWFuYWdlclNlcnZpY2U6IE10bmFXZk1hbmFnZXJTZXJ2aWNlLFxuICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsOiAoaXRlbTogRm9ybUl0ZW0pID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZSxcbiAgY3VzdG9tQ29udHJvbEdlbmVyYXRvcj86IChpdGVtOiBGb3JtSXRlbSkgPT4gQWJzdHJhY3RDb250cm9sIHwgbnVsbFxuKTogRm9ybUdyb3VwIHtcbiAgY29uc3QgdGFibGVDb250cm9sOiB7IFtrZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbCB9ID0ge307XG4gIGZvciAoY29uc3Qgcm93IG9mIGl0ZW0udGFibGVSb3dzKSB7XG4gICAgZm9yIChjb25zdCByb3dJdGVtIG9mIHJvdy5pdGVtcy5maWx0ZXIoKGkpID0+ICEhaSkpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBkZXRlcm1pbmVTZXJpYWxpemVGdW5jdGlvblRvVXNlKFxuICAgICAgICByb3dJdGVtIGFzIEZvcm1JdGVtSW1wbDx1bmtub3duPixcbiAgICAgICAgbWFuYWdlclNlcnZpY2UsXG4gICAgICAgIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwsXG4gICAgICAgIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3JcbiAgICAgICk7XG4gICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICB0YWJsZUNvbnRyb2xbcm93SXRlbS5pbnN0YW5jZUlkXSA9IGNvbnRyb2w7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IGdyb3VwID0gaXRlbS5yZXF1aXJlZCA/IG5ldyBGb3JtR3JvdXAodGFibGVDb250cm9sLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSA6IG5ldyBGb3JtR3JvdXAodGFibGVDb250cm9sKTtcbiAgaWYgKGl0ZW0uZGlzYWJsZWQpIHtcbiAgICBncm91cC5kaXNhYmxlKHsgb25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIH1cbiAgcmV0dXJuIGdyb3VwO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGFwcHJvcHJpYXRlIGZ1bmN0aW9uIGZvciB0aGUgY2FsbGVyIHRvIHVzZS5cbiAqXG4gKiBAcGFyYW0gZm9ybUl0ZW0gRm9ybUl0ZW0gcmVxdWlyaW5nIHNlcmlhbGl6YXRpb25cbiAqIEBwYXJhbSBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsIENvbmRpdGlvbmFsIGZvciBhIGN1c3RvbSBGb3JtSXRlbVxuICogQHBhcmFtIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3IgU2VyaWFsaXplciBmb3IgYSBjdXN0b20gRm9ybUl0ZW1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVybWluZVNlcmlhbGl6ZUZ1bmN0aW9uVG9Vc2UoXG4gIGZvcm1JdGVtOiBGb3JtSXRlbUltcGw8dW5rbm93bj4gfCBXZWJGb3JtLFxuICBtYW5hZ2VyU2VydmljZTogTXRuYVdmTWFuYWdlclNlcnZpY2UsXG4gIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlLFxuICBjdXN0b21Db250cm9sR2VuZXJhdG9yPzogKGl0ZW06IEZvcm1JdGVtKSA9PiBBYnN0cmFjdENvbnRyb2wgfCBudWxsXG4pOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsIHtcbiAgaWYgKFxuICAgIGlzRm9ybShmb3JtSXRlbSkgfHxcbiAgICBpc1Byb2dyZXNzaXZlRm9ybShmb3JtSXRlbSkgfHxcbiAgICBpc1JlcGVhdGFibGVJdGVtKGZvcm1JdGVtKSB8fFxuICAgIGlzU2VjdGlvbihmb3JtSXRlbSkgfHxcbiAgICBpc1Byb2dyZXNzaXZlRm9ybVNlY3Rpb24oZm9ybUl0ZW0pIHx8XG4gICAgaXNGb3JtSXRlbUdyb3VwSW1wbChmb3JtSXRlbSlcbiAgKSB7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZUZvcm1JdGVtcyhmb3JtSXRlbSwgbWFuYWdlclNlcnZpY2UsIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwsIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3IpO1xuICB9IGVsc2UgaWYgKGlzVGFibGVJdGVtKGZvcm1JdGVtKSkge1xuICAgIHJldHVybiBzZXJpYWxpemVUYWJsZUl0ZW0oZm9ybUl0ZW0sIG1hbmFnZXJTZXJ2aWNlLCBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsLCBjdXN0b21Db250cm9sR2VuZXJhdG9yKTtcbiAgfSBlbHNlIGlmIChjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsKGZvcm1JdGVtKSAmJiAhIWN1c3RvbUNvbnRyb2xHZW5lcmF0b3IpIHtcbiAgICByZXR1cm4gY3VzdG9tQ29udHJvbEdlbmVyYXRvcihmb3JtSXRlbSk7XG4gIH0gZWxzZSBpZiAoaGFzTmVzdGVkRm9ybUl0ZW1zKGZvcm1JdGVtKSkge1xuICAgIHJldHVybiBzZXJpYWxpemVOZXN0ZWRPcHRpb25Gb3JtSXRlbXMoZm9ybUl0ZW0gYXMgT3B0aW9uR3JvdXBJdGVtSW1wbDxPcHRpb248dW5rbm93bj4+LCBtYW5hZ2VyU2VydmljZSk7XG4gIH0gZWxzZSBpZiAoaXNPZmZzZXREYXRlUmFuZ2VJdGVtKGZvcm1JdGVtKSB8fCBpc1llYXJRdWFydGVyUmFuZ2VJdGVtKGZvcm1JdGVtKSkge1xuICAgIHJldHVybiBzZXJpYWxpemVSYW5nZUl0ZW0oZm9ybUl0ZW0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzZXJpYWxpemVGb3JtSXRlbShmb3JtSXRlbSwgbWFuYWdlclNlcnZpY2UpO1xuICB9XG59XG5cbi8qKlxuICogQnVpbGRzIGEgRm9ybUdyb3VwIGZvciBhIHJhbmdlIGl0ZW1cbiAqIEBwYXJhbSBmb3JtSXRlbSBGb3JtSXRlbSBmb3IgYSBEYXRlUmFuZ2Ugb2YgRGF0ZSB8IFllYXJRdWFydGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVSYW5nZUl0ZW0oZm9ybUl0ZW06IEZvcm1JdGVtSW1wbDxEYXRlUmFuZ2U8RGF0ZSB8IFllYXJRdWFydGVyPj4pOiBGb3JtR3JvdXAge1xuICBjb25zdCB2YWxpZGF0b3JzID0gbmV3IEFycmF5PFZhbGlkYXRvckZuPigpO1xuICBpZiAoZm9ybUl0ZW0ucmVxdWlyZWQpIHtcbiAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gIH1cbiAgY29uc3QgZ3JvdXAgPSBuZXcgRm9ybUdyb3VwKFxuICAgIHtcbiAgICAgIHN0YXJ0OiBuZXcgRm9ybUNvbnRyb2woZm9ybUl0ZW0udmFsdWUgPyBmb3JtSXRlbS52YWx1ZS5zdGFydCA6IG51bGwpLFxuICAgICAgZW5kOiBuZXcgRm9ybUNvbnRyb2woZm9ybUl0ZW0udmFsdWUgPyBmb3JtSXRlbS52YWx1ZS5lbmQgOiBudWxsKSxcbiAgICB9LFxuICAgIFZhbGlkYXRvcnMuY29tcG9zZSh2YWxpZGF0b3JzKVxuICApO1xuICBpZiAoZm9ybUl0ZW0uZGlzYWJsZWQpIHtcbiAgICBncm91cC5kaXNhYmxlKHsgb25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIH1cbiAgcmV0dXJuIGdyb3VwO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBWYWxpZGF0b3Igd2l0aCBhIG51bWVyaWMgdmFsdWUgZm9yIGEgRm9ybUl0ZW07XG4gKiBSZXR1cm5zIGFzIGFuIGFycmF5IG9mIGxlbmd0aCAxIG9yIDBcbiAqIEBwYXJhbSBwYXJhbTAgYHR5cGVgIC0gdHlwZSBvZiB2YWxpZGF0b3IsIGUuZy4gJ21pbkxlbmd0aCc7XG4gKiBgdmFsdWVgIC0gcGFyYW1ldGVyIGZvciB0aGUgdmFsaWRhdG9yLCBlLmcuICdtaW5MZW5ndGgodmFsdWUpJ1xuICovXG5mdW5jdGlvbiBnZXROdW1lcmljVmFsaWRhdG9yKHR5cGU6IFZhbGlkYXRvcldpdGhOdW1iZXJUeXBlLCB2YWx1ZTogbnVtYmVyKTogVmFsaWRhdG9yRm5bXSB7XG4gIHJldHVybiAhaXNOdWxsT3JVbmRlZmluZWQodmFsdWUpID8gW1ZhbGlkYXRvcnNbdHlwZV0odmFsdWUpXSA6IFtdO1xufVxuXG4vLyNlbmRyZWdpb25cblxuLy8jcmVnaW9uIE10bmFGb3JtIHZhbHVlIGluc2VydGlvblxuXG4vKipcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgRm9ybWl0ZW1zIHdpdGggbmV3IHZhbHVlcyBpbnNlcnRlZC5cbiAqXG4gKiBAcGFyYW0gc2VjdGlvbiBUaGUgb2xkIEZvcm0gb3IgRm9ybSBTZWN0aW9uXG4gKiBAcGFyYW0gbmdGb3JtVmFsdWUgbmdGb3JtIEpTT04gdmFsdWVzXG4gKiBAcGFyYW0gY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCBib29sZWFuIGZ1bmN0aW9uIGZvciBhbnkgY3VzdG9tIEZvcm1JdGVtc1xuICogQHBhcmFtIGN1c3RvbUZvcm1JdGVtQnVpbGRlciBmdW5jdGlvbiB0byBoYW5kbGUgY3VzdG9tIEZvcm1JdGVtc1xuICogQHJldHVybnMgbmV3IEZvcm1JdGVtIGFycmF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRGb3JtSXRlbVZhbHVlcyhcbiAgc2VjdGlvbjogV2ViRm9ybSB8IEZvcm1JdGVtR3JvdXAgfCBSZXBlYXRhYmxlSXRlbSxcbiAgbmdGb3JtVmFsdWU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH0sXG4gIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlLFxuICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXI/OiAoXG4gICAgc2VjdGlvbjogV2ViRm9ybSB8IEZvcm1JdGVtR3JvdXAgfCBSZXBlYXRhYmxlSXRlbSB8IHVuZGVmaW5lZCxcbiAgICBpdGVtOiBGb3JtSXRlbSxcbiAgICByZlZhbHVlOiB1bmtub3duLFxuICAgIGRpc2FibGVkU3RhdGU6IHsgW2luc3RhbmNlSWQ6IHN0cmluZ106IGJvb2xlYW4gfVxuICApID0+IFZhbHVlSXRlbTx1bmtub3duPiB8IG51bGxcbik6IEFycmF5PEZvcm1JdGVtPiB7XG4gIHJldHVybiBzZWN0aW9uLml0ZW1zXG4gICAgLm1hcCgoaXRlbSkgPT5cbiAgICAgIGRldGVybWluZUluc2VydEZ1bmN0aW9uVG9Vc2UoXG4gICAgICAgIGl0ZW0sXG4gICAgICAgIG5nRm9ybVZhbHVlW2l0ZW0uaW5zdGFuY2VJZF0sXG4gICAgICAgIGRpc2FibGVkU3RhdGUsXG4gICAgICAgIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwsXG4gICAgICAgIGN1c3RvbUZvcm1JdGVtQnVpbGRlcixcbiAgICAgICAgc2VjdGlvblxuICAgICAgKVxuICAgIClcbiAgICAuZmlsdGVyKGlzUHJlc2VudCk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGNvcGllZCBUYWJsZUl0ZW0sIHdpdGggZWFjaCByb3cgRm9ybUl0ZW0gaGF2aW5nIG5ldyBpbnNlcnRlZCB2YWx1ZXMuXG4gKiBAcGFyYW0gaXRlbSBUYWJsZUl0ZW0gdG8gaW5zZXJ0IHZhbHVlc1xuICogQHBhcmFtIG5nRm9ybVZhbHVlIG5nRm9ybSB2YWx1ZSBvZiB0aGUgVGFibGVJdGVtXG4gKiBAcGFyYW0gY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCBib29sZWFuIGZ1bmN0aW9uIGZvciBhbnkgY3VzdG9tIEZvcm1JdGVtXG4gKiBAcGFyYW0gY3VzdG9tRm9ybUl0ZW1CdWlsZGVyIGZ1bmN0aW9uIHRvIGhhbmRsZSBjdXN0b20gRm9ybUl0ZW0gdmFsdWUgaW5zZXJ0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRUYWJsZUl0ZW1WYWx1ZXMoXG4gIGl0ZW06IFRhYmxlSXRlbSxcbiAgbmdGb3JtVmFsdWU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH0sXG4gIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlLFxuICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXI/OiAoXG4gICAgc2VjdGlvbjogV2ViRm9ybSB8IEZvcm1JdGVtR3JvdXAgfCBSZXBlYXRhYmxlSXRlbSB8IHVuZGVmaW5lZCxcbiAgICBpdGVtOiBGb3JtSXRlbSxcbiAgICByZlZhbHVlOiB1bmtub3duLFxuICAgIGRpc2FibGVkU3RhdGU6IHsgW2luc3RhbmNlSWQ6IHN0cmluZ106IGJvb2xlYW4gfVxuICApID0+IFZhbHVlSXRlbTx1bmtub3duPiB8IG51bGxcbik6IFRhYmxlSXRlbSB7XG4gIGNvbnN0IHRhYmxlUm93cyA9IGl0ZW0udGFibGVSb3dzLm1hcCgocm93OiBUYWJsZVJvd0l0ZW0pID0+ICh7XG4gICAgLi4ucm93LFxuICAgIGl0ZW1zOiByb3cuaXRlbXNcbiAgICAgIC5maWx0ZXIoaXNQcmVzZW50KVxuICAgICAgLm1hcCgoZm9ybUl0ZW0pID0+IHtcbiAgICAgICAgcmV0dXJuIGRldGVybWluZUluc2VydEZ1bmN0aW9uVG9Vc2UoXG4gICAgICAgICAgZm9ybUl0ZW0sXG4gICAgICAgICAgbmdGb3JtVmFsdWVbZm9ybUl0ZW0uaW5zdGFuY2VJZF0sXG4gICAgICAgICAgZGlzYWJsZWRTdGF0ZSxcbiAgICAgICAgICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsLFxuICAgICAgICAgIGN1c3RvbUZvcm1JdGVtQnVpbGRlclxuICAgICAgICApO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoaXNQcmVzZW50KSxcbiAgfSkpO1xuICByZXR1cm4geyAuLi5pdGVtLCB0YWJsZVJvd3MsIGRpc2FibGVkOiBfaXNEaXNhYmxlZChpdGVtLCBkaXNhYmxlZFN0YXRlKSB9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBuZXcgRm9ybUl0ZW0gYWZ0ZXIgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlIGZ1bmN0aW9uIHRvIHVzZS5cbiAqIEBwYXJhbSBmb3JtSXRlbSBGb3JtSXRlbSByZXF1aXJpbmcgdmFsdWUgaW5zZXJ0aW9uXG4gKiBAcGFyYW0gbmdGb3JtVmFsdWUgbmdGb3JtIHZhbHVlXG4gKiBAcGFyYW0gY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCBDb25kaXRpb25hbCBmb3IgYSBjdXN0b20gRm9ybUl0ZW1cbiAqIEBwYXJhbSBjdXN0b21Gb3JtSXRlbUJ1aWxkZXIgVmFsdWUgaW5zZXJ0aW9uIGZ1bmN0aW9uIGZvciBhIGN1c3RvbSBGb3JtSXRlbVxuICogQHBhcmFtIGRpc2FibGVkU3RhdGUgTWFwIG9mIGl0ZW1zJyBkaXNhYmxlZCBzdGF0ZVxuICogQHBhcmFtIHBhcmVudCBQYXJlbnQgb2YgdGhlIEZvcm1JdGVtLCB1c2VkIHRvIHBhc3MgdG8gdGhlIGN1c3RvbUZvcm1JdGVtQnVpbGRlclxuICovXG5mdW5jdGlvbiBkZXRlcm1pbmVJbnNlcnRGdW5jdGlvblRvVXNlKFxuICBmb3JtSXRlbTogRm9ybUl0ZW0sXG4gIG5nRm9ybVZhbHVlOiB1bmtub3duLFxuICBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH0sXG4gIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlLFxuICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXI/OiAoXG4gICAgc2VjdGlvbjogV2ViRm9ybSB8IEZvcm1JdGVtR3JvdXAgfCBSZXBlYXRhYmxlSXRlbSB8IHVuZGVmaW5lZCxcbiAgICBpdGVtOiBGb3JtSXRlbSxcbiAgICByZlZhbHVlOiB1bmtub3duLFxuICAgIGRpc2FibGVkU3RhdGU6IHsgW2luc3RhbmNlSWQ6IHN0cmluZ106IGJvb2xlYW4gfVxuICApID0+IFZhbHVlSXRlbTx1bmtub3duPiB8IG51bGwsXG4gIHBhcmVudD86IFdlYkZvcm0gfCBGb3JtSXRlbUdyb3VwIHwgUmVwZWF0YWJsZUl0ZW1cbik6IEZvcm1JdGVtIHwgbnVsbCB7XG4gIGlmIChpc1NlY3Rpb24oZm9ybUl0ZW0pIHx8IGlzUHJvZ3Jlc3NpdmVGb3JtU2VjdGlvbihmb3JtSXRlbSkgfHwgaXNGb3JtSXRlbUdyb3VwSW1wbChmb3JtSXRlbSkgfHwgaXNSZXBlYXRhYmxlSXRlbShmb3JtSXRlbSkpIHtcbiAgICBjb25zdCBpdGVtcyA9IGluc2VydEZvcm1JdGVtVmFsdWVzKFxuICAgICAgZm9ybUl0ZW0sXG4gICAgICBuZ0Zvcm1WYWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAgIGRpc2FibGVkU3RhdGUsXG4gICAgICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsLFxuICAgICAgY3VzdG9tRm9ybUl0ZW1CdWlsZGVyXG4gICAgKTtcbiAgICByZXR1cm4geyAuLi5mb3JtSXRlbSwgaXRlbXMsIGRpc2FibGVkOiBfaXNEaXNhYmxlZChmb3JtSXRlbSwgZGlzYWJsZWRTdGF0ZSkgfSBhcyBGb3JtSXRlbUdyb3VwIHwgUmVwZWF0YWJsZUl0ZW07XG4gIH0gZWxzZSBpZiAoaXNUYWJsZUl0ZW0oZm9ybUl0ZW0pKSB7XG4gICAgcmV0dXJuIGluc2VydFRhYmxlSXRlbVZhbHVlcyhcbiAgICAgIGZvcm1JdGVtLFxuICAgICAgbmdGb3JtVmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgICBkaXNhYmxlZFN0YXRlLFxuICAgICAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCxcbiAgICAgIGN1c3RvbUZvcm1JdGVtQnVpbGRlclxuICAgICk7XG4gIH0gZWxzZSBpZiAoY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbChmb3JtSXRlbSkgJiYgISFjdXN0b21Gb3JtSXRlbUJ1aWxkZXIpIHtcbiAgICByZXR1cm4gY3VzdG9tRm9ybUl0ZW1CdWlsZGVyKHBhcmVudCwgZm9ybUl0ZW0sIG5nRm9ybVZhbHVlLCBkaXNhYmxlZFN0YXRlKTtcbiAgfSBlbHNlIGlmIChoYXNOZXN0ZWRGb3JtSXRlbXMoZm9ybUl0ZW0pKSB7XG4gICAgcmV0dXJuIGluc2VydE5lc3RlZEZvcm1JdGVtVmFsdWVzKFxuICAgICAgZm9ybUl0ZW0gYXMgT3B0aW9uR3JvdXBJdGVtSW1wbDxPcHRpb248dW5rbm93bj4+LFxuICAgICAgbmdGb3JtVmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgICBkaXNhYmxlZFN0YXRlLFxuICAgICAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCxcbiAgICAgIGN1c3RvbUZvcm1JdGVtQnVpbGRlclxuICAgICk7XG4gIH0gZWxzZSBpZiAoaXNPZmZzZXREYXRlUmFuZ2VJdGVtKGZvcm1JdGVtKSB8fCBpc1llYXJRdWFydGVyUmFuZ2VJdGVtKGZvcm1JdGVtKSkge1xuICAgIGNvbnN0IHN0YXJ0ID0gaXNUeXBlPHsgc3RhcnQ6IFllYXJRdWFydGVyIHwgRGF0ZSB9PihuZ0Zvcm1WYWx1ZSwgJ3N0YXJ0JykgPyBuZ0Zvcm1WYWx1ZS5zdGFydCA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBlbmQgPSBpc1R5cGU8eyBlbmQ6IFllYXJRdWFydGVyIHwgRGF0ZSB9PihuZ0Zvcm1WYWx1ZSwgJ2VuZCcpID8gbmdGb3JtVmFsdWUuZW5kIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiB7IC4uLmZvcm1JdGVtLCB2YWx1ZTogeyBzdGFydCwgZW5kIH0sIGRpc2FibGVkOiBfaXNEaXNhYmxlZChmb3JtSXRlbSwgZGlzYWJsZWRTdGF0ZSkgfSBhcyBGb3JtSXRlbUltcGw8XG4gICAgICBEYXRlUmFuZ2U8RGF0ZSB8IFllYXJRdWFydGVyPlxuICAgID47XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmZvcm1JdGVtLFxuICAgICAgdmFsdWU6IGZpbmRJdGVtVmFsdWUoZm9ybUl0ZW0sIG5nRm9ybVZhbHVlKSxcbiAgICAgIGRpc2FibGVkOiBfaXNEaXNhYmxlZChmb3JtSXRlbSBhcyBGb3JtSXRlbUltcGw8dW5rbm93bj4sIGRpc2FibGVkU3RhdGUpLFxuICAgIH0gYXMgRm9ybUl0ZW07XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIG5nRm9ybSB2YWx1ZSBmb3IgYSBGb3JtSXRlbS5cbiAqXG4gKiBAcGFyYW0gZm9ybUl0ZW0gRm9ybUl0ZW0gcmVxdWlyaW5nIGEgdmFsdWVcbiAqIEBwYXJhbSBuZ0Zvcm1WYWx1ZSBuZ0Zvcm0gdmFsdWVcbiAqL1xuZnVuY3Rpb24gZmluZEl0ZW1WYWx1ZShmb3JtSXRlbTogRm9ybUl0ZW0sIG5nRm9ybVZhbHVlOiB1bmtub3duKTogdW5rbm93biB7XG4gIGNvbnN0IGl0ZW1JZCA9IGZvcm1JdGVtLml0ZW1JZC5zcGxpdCgnLicpLnBvcCgpO1xuICBzd2l0Y2ggKGl0ZW1JZD8udG9VcHBlckNhc2UoKSkge1xuICAgIC8vIEZJWE1FOiBjYW4gd2UgcHV0IHRoZXNlIElEcyBpbiBjb25zdGFudHMgYW5kIHJlZmVyIHRvIHRoZW0gaW5zdGVhZD9cbiAgICBjYXNlICdEQVRFSVRFTSc6XG4gICAgICByZXR1cm4gISFuZ0Zvcm1WYWx1ZSAmJiB0eXBlb2YgbmdGb3JtVmFsdWUgIT09ICdzdHJpbmcnID8gKG5nRm9ybVZhbHVlIGFzIE1vbWVudCkudG9JU09TdHJpbmcoKSA6IChuZ0Zvcm1WYWx1ZSBhcyBzdHJpbmcpO1xuICAgIGNhc2UgJ0NIRUNLQk9YSVRFTSc6XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKG5nRm9ybVZhbHVlKSAmJiBBcnJheS5pc0FycmF5KG5nRm9ybVZhbHVlKSkge1xuICAgICAgICBjb25zdCBhcnIgPSBuZ0Zvcm1WYWx1ZSBhcyBBcnJheTxib29sZWFuPjtcbiAgICAgICAgcmV0dXJuIChmb3JtSXRlbSBhcyBDaGVja2JveEl0ZW0pLm9wdGlvbnMuZmlsdGVyKChvLCBpbmRleCkgPT4gISFhcnJbaW5kZXhdKS5tYXAoKG8pID0+IG8ub3B0aW9uLmlkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXTtcbiAgICBjYXNlICdJTlRFUk5BVElPTkFMSVpFRFBBUkFHUkFQSEFOU1dFUklURU0nOlxuICAgIGNhc2UgJ0lOVEVSTkFUSU9OQUxJWkVEU0hPUlRBTlNXRVJJVEVNJzoge1xuICAgICAgY29uc3QgbGFuZ3VhZ2VzID1cbiAgICAgICAgaXRlbUlkPy50b1VwcGVyQ2FzZSgpID09PSAnSU5URVJOQVRJT05BTElaRURQQVJBR1JBUEhBTlNXRVJJVEVNJ1xuICAgICAgICAgID8gKGZvcm1JdGVtIGFzIEludGVybmF0aW9uYWxpemVkUGFyYWdyYXBoQW5zd2VySXRlbSkubGFuZ3VhZ2VUYWdzXG4gICAgICAgICAgOiAoZm9ybUl0ZW0gYXMgSW50ZXJuYXRpb25hbGl6ZWRTaG9ydEFuc3dlckl0ZW0pLmxhbmd1YWdlVGFncztcblxuICAgICAgY29uc3QgdmFsdWUgPSBsYW5ndWFnZXMucmVkdWNlKCh2YWx1ZTogSW50ZXJuYXRpb25hbGl6ZWRTdHJpbmdbXSwgbGFuZ3VhZ2UpID0+IHtcbiAgICAgICAgaWYgKG5nRm9ybVZhbHVlICYmIHR5cGVvZiBuZ0Zvcm1WYWx1ZSA9PT0gJ29iamVjdCcgJiYgbGFuZ3VhZ2UgaW4gbmdGb3JtVmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBpbnB1dCA9IChuZ0Zvcm1WYWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbbGFuZ3VhZ2VdO1xuICAgICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgICAgdmFsdWUucHVzaCh7IHZhbHVlOiBpbnB1dCBhcyBzdHJpbmcsIGZhY2V0SWQ6IGxhbmd1YWdlIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9LCBbXSk7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbmdGb3JtVmFsdWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5zZXJ0TmVzdGVkRm9ybUl0ZW1WYWx1ZXMoXG4gIGZvcm1JdGVtOiBPcHRpb25Hcm91cEl0ZW1JbXBsPE9wdGlvbjx1bmtub3duPj4sXG4gIG5nRm9ybVZhbHVlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgZGlzYWJsZWRTdGF0ZTogeyBbaW5zdGFuY2VJZDogc3RyaW5nXTogYm9vbGVhbiB9LFxuICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsOiAoaXRlbTogRm9ybUl0ZW0pID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZSxcbiAgY3VzdG9tRm9ybUl0ZW1CdWlsZGVyPzogKFxuICAgIHNlY3Rpb246IFdlYkZvcm0gfCBGb3JtSXRlbUdyb3VwIHwgUmVwZWF0YWJsZUl0ZW0gfCB1bmRlZmluZWQsXG4gICAgaXRlbTogRm9ybUl0ZW0sXG4gICAgcmZWYWx1ZTogdW5rbm93bixcbiAgICBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH1cbiAgKSA9PiBWYWx1ZUl0ZW08dW5rbm93bj4gfCBudWxsXG4pOiBGb3JtSXRlbSB7XG4gIGNvbnN0IG9wdGlvbkl0ZW1NYXA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gIGZvciAoY29uc3QgaWQgaW4gZm9ybUl0ZW0ub3B0aW9uSXRlbU1hcCkge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZm9ybUl0ZW0ub3B0aW9uSXRlbU1hcCwgaWQpKSB7XG4gICAgICBjb25zdCBzdWJJdGVtID0gZm9ybUl0ZW0ub3B0aW9uSXRlbU1hcFtpZF07XG4gICAgICBvcHRpb25JdGVtTWFwW2lkXSA9IGRldGVybWluZUluc2VydEZ1bmN0aW9uVG9Vc2UoXG4gICAgICAgIHN1Ykl0ZW0sXG4gICAgICAgIG5nRm9ybVZhbHVlW3N1Ykl0ZW0uaW5zdGFuY2VJZF0sXG4gICAgICAgIGRpc2FibGVkU3RhdGUsXG4gICAgICAgIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwsXG4gICAgICAgIGN1c3RvbUZvcm1JdGVtQnVpbGRlclxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5mb3JtSXRlbSxcbiAgICBvcHRpb25JdGVtTWFwLFxuICAgIHZhbHVlOiBmaW5kSXRlbVZhbHVlKGZvcm1JdGVtLCBuZ0Zvcm1WYWx1ZVtmb3JtSXRlbS5pbnN0YW5jZUlkXSksXG4gICAgZGlzYWJsZWQ6IF9pc0Rpc2FibGVkKGZvcm1JdGVtLCBkaXNhYmxlZFN0YXRlKSxcbiAgfSBhcyBPcHRpb25Hcm91cEl0ZW1JbXBsPE9wdGlvbjx1bmtub3duPj47XG59XG5cbi8vI2VuZHJlZ2lvblxuXG4vKipcbiAqIERldGVybWluZXMgaWYgYSBGb3JtSXRlbSBoYXMgYW4gT3B0aW9uSXRlbU1hcCB3aXRoIGF0IGxlYXN0IDEgaXRlbSwgd2hpY2ggcmVxdWlyZSB0aGVpciBvd24gRm9ybUNvbnRyb2wocylcbiAqIEBwYXJhbSBmb3JtSXRlbSBGb3JtSXRlbSB0byBjaGVja1xuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzTmVzdGVkRm9ybUl0ZW1zKGZvcm1JdGVtOiB1bmtub3duKTogZm9ybUl0ZW0gaXMgeyBvcHRpb25JdGVtTWFwOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9IHtcbiAgcmV0dXJuIChcbiAgICBpc1R5cGU8e1xuICAgICAgb3B0aW9uSXRlbU1hcDogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgfT4oZm9ybUl0ZW0sICdvcHRpb25JdGVtTWFwJykgJiYgT2JqZWN0LmtleXMoZm9ybUl0ZW0ub3B0aW9uSXRlbU1hcCkubGVuZ3RoID4gMFxuICApO1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIGZvciB2YWxpZGF0aW5nIG1pbi9tYXggc2VsZWN0aW9ucyBsaW1pdHNcbiAqIEBwYXJhbSB0eXBlQ2hlY2sgV2hpY2ggbGltaXQgdG8gdmFsaWRhdGUuICdNSU4nIHwgJ01BWCdcbiAqIEBwYXJhbSBsaW1pdCB1cHBlciBvciBsb3dlciBsaW1pdCB0byBjaGVjayBhZ2FpbnN0XG4gKi9cbmZ1bmN0aW9uIG51bUNoZWNrYm94ZXNWYWxpZGF0b3IodHlwZUNoZWNrOiAnTUlOJyB8ICdNQVgnLCBsaW1pdCA9IDEpOiBWYWxpZGF0b3JGbiB7XG4gIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XG4gICAgbGV0IHRvdGFsU2VsZWN0ZWQgPSAwO1xuICAgIGlmIChpc0Zvcm1BcnJheShjb250cm9sKSkge1xuICAgICAgdG90YWxTZWxlY3RlZCA9IGNvbnRyb2wuY29udHJvbHMubWFwKChjKSA9PiBjLnZhbHVlKS5yZWR1Y2UoKHRvdGFsLCBuZXh0KSA9PiAobmV4dCA/IHRvdGFsICsgbmV4dCA6IHRvdGFsKSwgMCk7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0eXBlQ2hlY2spIHtcbiAgICAgIGNhc2UgJ01JTic6XG4gICAgICAgIHJldHVybiB0b3RhbFNlbGVjdGVkID49IGxpbWl0ID8gbnVsbCA6IHsgbWluU2VsZWN0ZWQ6ICRsb2NhbGl6ZWBTZWxlY3QgYXQgbGVhc3QgJHtsaW1pdH1gIH07XG4gICAgICBjYXNlICdNQVgnOlxuICAgICAgICByZXR1cm4gdG90YWxTZWxlY3RlZCA8PSBsaW1pdCA/IG51bGwgOiB7IG1heFNlbGVjdGVkOiAkbG9jYWxpemVgU2VsZWN0IG5vIG1vcmUgdGhhbiAke2xpbWl0fWAgfTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzRm9ybUFycmF5KGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IGNvbnRyb2wgaXMgRm9ybUFycmF5IHtcbiAgcmV0dXJuIGlzVHlwZTxGb3JtQXJyYXk+KGNvbnRyb2wsICdjb250cm9scycpO1xufVxuXG5mdW5jdGlvbiBfaXNEaXNhYmxlZChpdGVtOiBDb25kaXRpb25hbEl0ZW0sIGRpc2FibGVkU3RhdGU6IHsgW2lkOiBzdHJpbmddOiBib29sZWFuIH0pOiBib29sZWFuIHtcbiAgY29uc3QgZGlzYWJsZWQgPSBkaXNhYmxlZFN0YXRlW2l0ZW0uaW5zdGFuY2VJZF07XG4gIHJldHVybiBpc051bGxPclVuZGVmaW5lZChkaXNhYmxlZCkgPyBpdGVtLmRpc2FibGVkIDogZGlzYWJsZWQ7XG59XG5cbmZ1bmN0aW9uIHdob2xlTnVtYmVyUGF0dGVybigpOiBWYWxpZGF0b3JGbiB7XG4gIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgIGlmIChpc051bGxPclVuZGVmaW5lZChjb250cm9sLnZhbHVlKSB8fCBpc0VtcHR5U3RyaW5nKGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gd2hvbGVOdW1iZXIudGVzdChjb250cm9sLnZhbHVlKSA/IG51bGwgOiB7IHdob2xlTnVtYmVyOiB0cnVlIH07XG4gIH07XG59XG5cbmZ1bmN0aW9uIG51bWVyaWNhbFZhbHVlQ2hlY2soKTogVmFsaWRhdG9yRm4ge1xuICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoY29udHJvbC52YWx1ZSkgfHwgaXNFbXB0eVN0cmluZyhjb250cm9sLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBudW1Pbmx5V2l0aG91dENvbW1hLnRlc3QoY29udHJvbC52YWx1ZSkgfHwgbnVtT25seVdpdGhDb21tYS50ZXN0KGNvbnRyb2wudmFsdWUpID8gbnVsbCA6IHsgbm9uRGlnaXQ6IHRydWUgfTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcG9zaXRpdmVOdW1iZXJQYXR0ZXJuKCk6IFZhbGlkYXRvckZuIHtcbiAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGNvbnRyb2wudmFsdWUpIHx8IGlzRW1wdHlTdHJpbmcoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gcG9zT25seS50ZXN0KGNvbnRyb2wudmFsdWUpID8gbnVsbCA6IHsgcG9zaXRpdmU6IHRydWUgfTtcbiAgfTtcbn1cblxuLyoqXG4gKiBUaGlzIHdvcmtzIGFzIGEgY29tYmluYXRpb24gb2YgdGhlIGFuZ3VsYXIgJ21pbicvJ21heCcgVmFsaWRhdG9ycy4gVXNpbmcgdGhlIGJ1aWx0LWluIHZhbGlkYXRvcnNcbiAqIGFwcGVhcnMgdG8gdGFrZSBwcmVjZWRlbmNlIG92ZXIgY3VzdG9tIHZhbGlkYXRvcnMsIHJlZ2FyZGxlc3Mgb2Ygb3JkZXIgaW4gdGhlIGFycmF5LiBVc2luZyB0aGlzIGZ1bmN0aW9uXG4gKiBlbnN1cmVzIHZhbGlkYXRvcnMgc2V0IGJlZm9yZSB0aGlzIG9uZSBtYWludGFpbiBwcmlvcml0eS4gRm9yIGluc3RhbmNlLCB0aGUgaW5wdXQgdmFsdWUgZmFpbGluZyBudW1lcmljYWwgdmFsaWRhdGlvblxuICogaXMgbW9yZSBpbXBvcnRhbnQgdGhhbiB0aGUgdmFsdWUgYmVpbmcgd2l0aGluIG1pbi1tYXggcmFuZ2UuXG4gKi9cbmZ1bmN0aW9uIG51bVZhbHVlTGltaXQodHlwZTogJ21pbicgfCAnbWF4JywgbGltaXQ6IG51bWJlcik6IFZhbGlkYXRvckZuIHtcbiAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGNvbnRyb2wudmFsdWUpIHx8IGlzRW1wdHlTdHJpbmcoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlRmxvYXQoY29udHJvbC52YWx1ZSk7XG4gICAgcmV0dXJuICFpc05hTih2YWx1ZSkgJiYgKHR5cGUgPT09ICdtaW4nID8gdmFsdWUgPCBsaW1pdCA6IHZhbHVlID4gbGltaXQpXG4gICAgICA/IHtcbiAgICAgICAgICBbdHlwZV06IHtcbiAgICAgICAgICAgIFt0eXBlXTogbGltaXQsXG4gICAgICAgICAgICBhY3R1YWw6IGNvbnRyb2wudmFsdWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfVxuICAgICAgOiBudWxsO1xuICB9O1xufVxuXG5mdW5jdGlvbiBpc0VtcHR5U3RyaW5nKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmICF2YWx1ZS5sZW5ndGg7XG59XG4iXX0=
@@ -35,4 +35,4 @@ export function updateStepStatus(instanceId, step, status, form) {
35
35
  // There were no server side validation errors, just update the status
36
36
  return Object.assign(Object.assign({}, step), { status });
37
37
  }
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLXN0ZXAtc3RhdHVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2ViLWZvcm0tYW5ndWxhci9zcmMvbGliL3V0aWxpdGllcy91cGRhdGUtc3RlcC1zdGF0dXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUl2QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFaEQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLFVBQWtCLEVBQUUsSUFBYyxFQUFFLE1BQW9CLEVBQUUsSUFBVzs7SUFDcEcsSUFBSSxVQUFVLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRTtRQUNsQyw4Q0FBOEM7UUFDOUMsMEJBQTBCO1FBQzFCLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRCwyREFBMkQ7SUFDM0QsSUFBSSxNQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxnQkFBZ0IsMENBQUUseUJBQXlCLENBQUMsTUFBTSxFQUFFO1FBQzVELDZDQUE2QztRQUM3QyxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNsRCxJQUFJLE1BQU0sQ0FBZ0IsS0FBSyxFQUFFLE9BQU8sQ0FBQyxFQUFFO1lBQ3pDLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLHlCQUF5QixFQUFFO2dCQUNuRSxNQUFNLGFBQWEsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDcEQsZ0RBQWdEO2dCQUNoRCxzQkFBc0I7Z0JBQ3RCLElBQUksYUFBYSxFQUFFO29CQUNqQix1Q0FBWSxJQUFJLEtBQUUsTUFBTSxFQUFFLE9BQU8sSUFBRztpQkFDckM7YUFDRjtTQUNGO0tBQ0Y7SUFFRCxzRUFBc0U7SUFDdEUsdUNBQVksSUFBSSxLQUFFLE1BQU0sSUFBRztBQUM3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2lyY2xlU3RhdHVzIH0gZnJvbSAnQG10bmEvY29yZS1hbmd1bGFyJztcbmltcG9ydCB7IGlzVHlwZSB9IGZyb20gJ0BtdG5hL2NvcmUtdHMnO1xuaW1wb3J0IHsgRm9ybSwgRm9ybUl0ZW1Hcm91cCB9IGZyb20gJ0BtdG5hL3dlYi1mb3JtLXRzJztcblxuaW1wb3J0IHsgRm9ybVN0ZXAgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgZmluZEZvcm1JdGVtIH0gZnJvbSAnLi9maW5kLWZvcm0taXRlbSc7XG5cbi8qKlxuICogVXBkYXRlIGEge0BsaW5rIEZvcm1TdGVwfSdzIGBzdGF0dXNgLlxuICogVGhlIHNlcnZlciBzaWRlIGZvcm0gdmFsaWRhdGlvbiBlcnJvcnMgd2lsbCB0cnVtcCB0aGUgcHJvdmlkZWQgYHN0YXR1c2AuXG4gKlxuICogQHBhcmFtIGluc3RhbmNlSWQgdGhlIGluc3RhbmNlSWQgb2YgdGhlIHN0ZXAgdG8gdXBkYXRlLCBvdGhlcndpc2UgcmV0dXJuIHRoZSBvcmlnaW5hbCBzdGVwXG4gKiBAcGFyYW0gc3RlcCAgdGhlIHN0ZXAgdG8gY2hlY2tcbiAqIEBwYXJhbSBzdGF0dXMgdGhlIG5ldyBzdGF0dXMgdG8gYXBwbHkgdG8gdGhlIHN0ZXBcbiAqIEBwYXJhbSBmb3JtIHRoZSBjb250YWluaW5nIGZvcm1cbiAqIEByZXR1cm5zIGFuIHVwZGF0ZWQgc3RlcCB3aXRoIHRoZSBjb3JyZWN0IHN0YXR1c1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RlcFN0YXR1cyhpbnN0YW5jZUlkOiBzdHJpbmcsIHN0ZXA6IEZvcm1TdGVwLCBzdGF0dXM6IENpcmNsZVN0YXR1cywgZm9ybT86IEZvcm0pOiBGb3JtU3RlcCB7XG4gIGlmIChpbnN0YW5jZUlkICE9PSBzdGVwLmluc3RhbmNlSWQpIHtcbiAgICAvLyBUaGVzZSBhcmVuJ3QgdGhlIGRyb2lkcyB5b3UncmUgbG9va2luZyBmb3IuXG4gICAgLy8gUmV0dXJuIHVubW9kaWZpZWQgc3RlcC5cbiAgICByZXR1cm4gc3RlcDtcbiAgfVxuXG4gIC8vIEEgc2VydmVyIHZhbGlkYXRpb24gZXJyb3Igd2lsbCB0cnVtcCB0aGUgcHJvdmlkZWQgc3RhdHVzXG4gIGlmIChmb3JtPy52YWxpZGF0aW9uUmVzdWx0Py5mb3JtSXRlbVZhbGlkYXRpb25SZXN1bHRzLmxlbmd0aCkge1xuICAgIC8vIEdldCB0aGUgRm9ybUdyb3VwIHRoYXQgcmVwcmVzZW50cyB0aGUgc3RlcFxuICAgIGNvbnN0IGdyb3VwID0gZmluZEZvcm1JdGVtKHN0ZXAuaW5zdGFuY2VJZCwgZm9ybSk7XG4gICAgaWYgKGlzVHlwZTxGb3JtSXRlbUdyb3VwPihncm91cCwgJ2l0ZW1zJykpIHtcbiAgICAgIGZvciAoY29uc3QgZXJyb3Igb2YgZm9ybS52YWxpZGF0aW9uUmVzdWx0LmZvcm1JdGVtVmFsaWRhdGlvblJlc3VsdHMpIHtcbiAgICAgICAgY29uc3QgaXRlbVdpdGhFcnJvciA9IGZpbmRGb3JtSXRlbShlcnJvci5pZCwgZ3JvdXApO1xuICAgICAgICAvLyBJZiB0aGUgaW52YWxpZCBpdGVtIGlzIHdpdGhpbiB0aGUgc3RlcCBncm91cCxcbiAgICAgICAgLy8gc2hvdyBhbiBlcnJvciBzdGF0ZVxuICAgICAgICBpZiAoaXRlbVdpdGhFcnJvcikge1xuICAgICAgICAgIHJldHVybiB7IC4uLnN0ZXAsIHN0YXR1czogJ0VSUk9SJyB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlcmUgd2VyZSBubyBzZXJ2ZXIgc2lkZSB2YWxpZGF0aW9uIGVycm9ycywganVzdCB1cGRhdGUgdGhlIHN0YXR1c1xuICByZXR1cm4geyAuLi5zdGVwLCBzdGF0dXMgfTtcbn1cbiJdfQ==
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLXN0ZXAtc3RhdHVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2ViLWZvcm0tYW5ndWxhci9zcmMvbGliL3V0aWxpdGllcy91cGRhdGUtc3RlcC1zdGF0dXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUl2QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFaEQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUM5QixVQUFrQixFQUNsQixJQUFjLEVBQ2QsTUFBb0IsRUFDcEIsSUFBK0M7O0lBRS9DLElBQUksVUFBVSxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDbEMsOENBQThDO1FBQzlDLDBCQUEwQjtRQUMxQixPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQsMkRBQTJEO0lBQzNELElBQUksTUFBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsZ0JBQWdCLDBDQUFFLHlCQUF5QixDQUFDLE1BQU0sRUFBRTtRQUM1RCw2Q0FBNkM7UUFDN0MsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEQsSUFBSSxNQUFNLENBQWdCLEtBQUssRUFBRSxPQUFPLENBQUMsRUFBRTtZQUN6QyxLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyx5QkFBeUIsRUFBRTtnQkFDbkUsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3BELGdEQUFnRDtnQkFDaEQsc0JBQXNCO2dCQUN0QixJQUFJLGFBQWEsRUFBRTtvQkFDakIsdUNBQVksSUFBSSxLQUFFLE1BQU0sRUFBRSxPQUFPLElBQUc7aUJBQ3JDO2FBQ0Y7U0FDRjtLQUNGO0lBRUQsc0VBQXNFO0lBQ3RFLHVDQUFZLElBQUksS0FBRSxNQUFNLElBQUc7QUFDN0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENpcmNsZVN0YXR1cyB9IGZyb20gJ0BtdG5hL2NvcmUtYW5ndWxhcic7XG5pbXBvcnQgeyBpc1R5cGUgfSBmcm9tICdAbXRuYS9jb3JlLXRzJztcbmltcG9ydCB7IEZvcm0sIEZvcm1JdGVtR3JvdXAgfSBmcm9tICdAbXRuYS93ZWItZm9ybS10cyc7XG5cbmltcG9ydCB7IEZvcm1TdGVwLCBQcm9ncmVzc2l2ZUZvcm0gfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgZmluZEZvcm1JdGVtIH0gZnJvbSAnLi9maW5kLWZvcm0taXRlbSc7XG5cbi8qKlxuICogVXBkYXRlIGEge0BsaW5rIEZvcm1TdGVwfSdzIGBzdGF0dXNgLlxuICogVGhlIHNlcnZlciBzaWRlIGZvcm0gdmFsaWRhdGlvbiBlcnJvcnMgd2lsbCB0cnVtcCB0aGUgcHJvdmlkZWQgYHN0YXR1c2AuXG4gKlxuICogQHBhcmFtIGluc3RhbmNlSWQgdGhlIGluc3RhbmNlSWQgb2YgdGhlIHN0ZXAgdG8gdXBkYXRlLCBvdGhlcndpc2UgcmV0dXJuIHRoZSBvcmlnaW5hbCBzdGVwXG4gKiBAcGFyYW0gc3RlcCAgdGhlIHN0ZXAgdG8gY2hlY2tcbiAqIEBwYXJhbSBzdGF0dXMgdGhlIG5ldyBzdGF0dXMgdG8gYXBwbHkgdG8gdGhlIHN0ZXBcbiAqIEBwYXJhbSBmb3JtIHRoZSBjb250YWluaW5nIGZvcm1cbiAqIEByZXR1cm5zIGFuIHVwZGF0ZWQgc3RlcCB3aXRoIHRoZSBjb3JyZWN0IHN0YXR1c1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RlcFN0YXR1cyhcbiAgaW5zdGFuY2VJZDogc3RyaW5nLFxuICBzdGVwOiBGb3JtU3RlcCxcbiAgc3RhdHVzOiBDaXJjbGVTdGF0dXMsXG4gIGZvcm06IEZvcm0gfCBQcm9ncmVzc2l2ZUZvcm0gfCBudWxsIHwgdW5kZWZpbmVkXG4pOiBGb3JtU3RlcCB7XG4gIGlmIChpbnN0YW5jZUlkICE9PSBzdGVwLmluc3RhbmNlSWQpIHtcbiAgICAvLyBUaGVzZSBhcmVuJ3QgdGhlIGRyb2lkcyB5b3UncmUgbG9va2luZyBmb3IuXG4gICAgLy8gUmV0dXJuIHVubW9kaWZpZWQgc3RlcC5cbiAgICByZXR1cm4gc3RlcDtcbiAgfVxuXG4gIC8vIEEgc2VydmVyIHZhbGlkYXRpb24gZXJyb3Igd2lsbCB0cnVtcCB0aGUgcHJvdmlkZWQgc3RhdHVzXG4gIGlmIChmb3JtPy52YWxpZGF0aW9uUmVzdWx0Py5mb3JtSXRlbVZhbGlkYXRpb25SZXN1bHRzLmxlbmd0aCkge1xuICAgIC8vIEdldCB0aGUgRm9ybUdyb3VwIHRoYXQgcmVwcmVzZW50cyB0aGUgc3RlcFxuICAgIGNvbnN0IGdyb3VwID0gZmluZEZvcm1JdGVtKHN0ZXAuaW5zdGFuY2VJZCwgZm9ybSk7XG4gICAgaWYgKGlzVHlwZTxGb3JtSXRlbUdyb3VwPihncm91cCwgJ2l0ZW1zJykpIHtcbiAgICAgIGZvciAoY29uc3QgZXJyb3Igb2YgZm9ybS52YWxpZGF0aW9uUmVzdWx0LmZvcm1JdGVtVmFsaWRhdGlvblJlc3VsdHMpIHtcbiAgICAgICAgY29uc3QgaXRlbVdpdGhFcnJvciA9IGZpbmRGb3JtSXRlbShlcnJvci5pZCwgZ3JvdXApO1xuICAgICAgICAvLyBJZiB0aGUgaW52YWxpZCBpdGVtIGlzIHdpdGhpbiB0aGUgc3RlcCBncm91cCxcbiAgICAgICAgLy8gc2hvdyBhbiBlcnJvciBzdGF0ZVxuICAgICAgICBpZiAoaXRlbVdpdGhFcnJvcikge1xuICAgICAgICAgIHJldHVybiB7IC4uLnN0ZXAsIHN0YXR1czogJ0VSUk9SJyB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlcmUgd2VyZSBubyBzZXJ2ZXIgc2lkZSB2YWxpZGF0aW9uIGVycm9ycywganVzdCB1cGRhdGUgdGhlIHN0YXR1c1xuICByZXR1cm4geyAuLi5zdGVwLCBzdGF0dXMgfTtcbn1cbiJdfQ==
@@ -1,8 +1,7 @@
1
1
  export * from './lib/components/index';
2
- export * from './lib/directives/index';
3
2
  export * from './lib/models/index';
4
3
  export * from './lib/pipes/index';
5
4
  export * from './lib/services/index';
6
5
  export * from './lib/utilities/index';
7
6
  export * from './lib/validators/index';
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3dlYi1mb3JtLWFuZ3VsYXIvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyx3QkFBd0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9pbmRleCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcGlwZXMvaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbGl0aWVzL2luZGV4JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZhbGlkYXRvcnMvaW5kZXgnO1xuIl19
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3dlYi1mb3JtLWFuZ3VsYXIvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsd0JBQXdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2luZGV4JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9pbmRleCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9waXBlcy9pbmRleCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9pbmRleCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlsaXRpZXMvaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdmFsaWRhdG9ycy9pbmRleCc7XG4iXX0=