@messaia/cdk 13.3.6 → 14.0.0-rc01

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 (201) hide show
  1. package/esm2020/lib/base/base.module.mjs +15 -17
  2. package/esm2020/lib/base/components/base.component.mjs +3 -3
  3. package/esm2020/lib/base/components/dynamic-table-config-dialog.comnponent.mjs +7 -11
  4. package/esm2020/lib/base/components/generic-form-base.component.mjs +3 -3
  5. package/esm2020/lib/base/components/generic-form.component.mjs +3 -3
  6. package/esm2020/lib/base/components/generic-list.component.mjs +3 -3
  7. package/esm2020/lib/base/components/generic-reactive-form.component.mjs +3 -3
  8. package/esm2020/lib/base/interceptors/base.interceptor.mjs +3 -3
  9. package/esm2020/lib/base/interceptors/caching-interceptor.mjs +3 -3
  10. package/esm2020/lib/base/interceptors/loading.interceptor.mjs +3 -3
  11. package/esm2020/lib/base/services/file.service.mjs +3 -3
  12. package/esm2020/lib/base/services/loading-screen.service.mjs +3 -3
  13. package/esm2020/lib/base/services/print.service.mjs +3 -3
  14. package/esm2020/lib/chips/chips.module.mjs +9 -11
  15. package/esm2020/lib/chips/components/chips.component.mjs +12 -12
  16. package/esm2020/lib/chips/directives/autocomplete-option.directive.mjs +3 -3
  17. package/esm2020/lib/chips/directives/chip.directive.mjs +3 -3
  18. package/esm2020/lib/common/common.module.mjs +5 -5
  19. package/esm2020/lib/common/directives/disable-control.directive.mjs +3 -3
  20. package/esm2020/lib/common/functions/utils.mjs +3 -3
  21. package/esm2020/lib/common/helpers/app-storage.mjs +3 -3
  22. package/esm2020/lib/common/helpers/dynamic-builder.mjs +3 -3
  23. package/esm2020/lib/common/helpers/dynamic-component-compiler.mjs +3 -3
  24. package/esm2020/lib/common/models/app-setting.mjs +3 -3
  25. package/esm2020/lib/common/pipes/data-source.pipe.mjs +3 -3
  26. package/esm2020/lib/common/pipes/enum.pipe.mjs +3 -3
  27. package/esm2020/lib/common/pipes/file-size.pipe.mjs +3 -3
  28. package/esm2020/lib/common/pipes/filter.pipe.mjs +3 -3
  29. package/esm2020/lib/common/pipes/first-letter.mjs +3 -3
  30. package/esm2020/lib/common/pipes/keys.mjs +3 -3
  31. package/esm2020/lib/common/pipes/month-name.pipe.mjs +3 -3
  32. package/esm2020/lib/common/pipes/only-number.mjs +3 -3
  33. package/esm2020/lib/common/pipes/order.pipe.mjs +3 -3
  34. package/esm2020/lib/common/pipes/placeholder.pipe.mjs +3 -3
  35. package/esm2020/lib/common/pipes/safe-html.pipe.mjs +3 -3
  36. package/esm2020/lib/common/pipes/time.pipe.mjs +3 -3
  37. package/esm2020/lib/common/pipes/titlecase.pipe.mjs +3 -3
  38. package/esm2020/lib/common/pipes/truncate.pipe.mjs +3 -3
  39. package/esm2020/lib/common/pipes/values.mjs +3 -3
  40. package/esm2020/lib/common/services/base.service.mjs +3 -3
  41. package/esm2020/lib/common/services/enum.service.mjs +3 -3
  42. package/esm2020/lib/dialogs/alert-dialog/alert-dialog.component.mjs +5 -5
  43. package/esm2020/lib/dialogs/confirm-dialog/confirm-dialog.component.mjs +5 -5
  44. package/esm2020/lib/dialogs/dialog.component.mjs +12 -12
  45. package/esm2020/lib/dialogs/dialogs.module.mjs +10 -12
  46. package/esm2020/lib/dialogs/prompt-dialog/prompt-dialog.component.mjs +9 -9
  47. package/esm2020/lib/dialogs/services/dialog.service.mjs +3 -3
  48. package/esm2020/lib/file/file-input.component.mjs +12 -23
  49. package/esm2020/lib/file/file.module.mjs +9 -11
  50. package/esm2020/lib/form-validators/directives/base-directive.mjs +3 -3
  51. package/esm2020/lib/form-validators/directives/control-host.directive.mjs +3 -3
  52. package/esm2020/lib/form-validators/directives/html-control-template.directive.mjs +3 -3
  53. package/esm2020/lib/form-validators/directives/rx-form.directive.mjs +3 -3
  54. package/esm2020/lib/form-validators/directives/template-validations/async-validation.directive.mjs +3 -3
  55. package/esm2020/lib/form-validators/directives/template-validations/base-validator.directive.mjs +3 -3
  56. package/esm2020/lib/form-validators/directives/template-validations/control-expression-process.mjs +3 -3
  57. package/esm2020/lib/form-validators/directives/template-validations/file-control.directive.mjs +3 -3
  58. package/esm2020/lib/form-validators/directives/template-validations/image-file-control.directive.mjs +3 -3
  59. package/esm2020/lib/form-validators/directives/template-validations/rxformcontrol.directive.mjs +3 -3
  60. package/esm2020/lib/form-validators/domain/element-processor/decimal.provider.mjs +3 -3
  61. package/esm2020/lib/form-validators/models/interface/i-abstract-control.mjs +1 -1
  62. package/esm2020/lib/form-validators/services/form-control.mjs +28 -26
  63. package/esm2020/lib/form-validators/services/reactive-form.module.mjs +9 -9
  64. package/esm2020/lib/form-validators/services/rx-form-builder.mjs +17 -17
  65. package/esm2020/lib/form-validators/services/typed-form-builder.mjs +3 -3
  66. package/esm2020/lib/forms/components/generic-form/generic-form.component.mjs +34 -34
  67. package/esm2020/lib/forms/directives/mat-form-field-editor.directive.mjs +21 -10
  68. package/esm2020/lib/forms/directives/mat-form-field-readonly.directive.mjs +3 -3
  69. package/esm2020/lib/forms/forms.module.mjs +21 -23
  70. package/esm2020/lib/forms/helpers/abstract-mat-form-field.mjs +29 -11
  71. package/esm2020/lib/forms/helpers/value-accessor-base.mjs +3 -3
  72. package/esm2020/lib/forms/validators/equal-validator.directive.mjs +3 -3
  73. package/esm2020/lib/forms/validators/native-element-injector.directive.mjs +3 -3
  74. package/esm2020/lib/forms/validators/unique-validator-directive.mjs +3 -3
  75. package/esm2020/lib/http/http.module.mjs +5 -7
  76. package/esm2020/lib/layout/dynamic-menu/dynamic-menu.component.mjs +7 -7
  77. package/esm2020/lib/layout/form-toolbar/form-toolbar.component.mjs +8 -8
  78. package/esm2020/lib/layout/form-toolbar-menu/form-toolbar-menu.component.mjs +7 -7
  79. package/esm2020/lib/layout/layout-card-over/layout-card-over.component.mjs +7 -7
  80. package/esm2020/lib/layout/layout-footer/layout-footer.component.mjs +3 -3
  81. package/esm2020/lib/layout/layout-manage-list/layout-manage-list.component.mjs +10 -10
  82. package/esm2020/lib/layout/layout-manage-list/layout-manage-list.directives.mjs +9 -9
  83. package/esm2020/lib/layout/layout-nav/layout-nav.component.mjs +9 -9
  84. package/esm2020/lib/layout/layout-nav-list/layout-nav-list.component.mjs +8 -8
  85. package/esm2020/lib/layout/layout-nav-list/layout-nav-list.directives.mjs +9 -9
  86. package/esm2020/lib/layout/layout-toggle.class.mjs +3 -3
  87. package/esm2020/lib/layout/layout.component.mjs +3 -3
  88. package/esm2020/lib/layout/layout.directives.mjs +9 -9
  89. package/esm2020/lib/layout/layout.module.mjs +15 -17
  90. package/esm2020/lib/layout/list-toolbar/list-toolbar.component.mjs +9 -9
  91. package/esm2020/lib/layout/navigation-drawer/navigation-drawer.component.mjs +13 -13
  92. package/esm2020/lib/media/directives/media-toggle.directive.mjs +3 -3
  93. package/esm2020/lib/media/media.module.mjs +6 -8
  94. package/esm2020/lib/media/services/media.service.mjs +3 -3
  95. package/esm2020/lib/menu/components/menu.component.mjs +10 -10
  96. package/esm2020/lib/menu/menu.module.mjs +8 -10
  97. package/esm2020/lib/menu/services/menu-items.service.mjs +3 -3
  98. package/esm2020/lib/menu/services/menu.resolve.mjs +6 -6
  99. package/esm2020/lib/menu/services/menu.service.mjs +3 -3
  100. package/esm2020/lib/search/search.module.mjs +9 -11
  101. package/esm2020/lib/search/vd-search-box/vd-search-box.component.mjs +8 -8
  102. package/esm2020/lib/search/vd-search-input/vd-search-input.component.mjs +7 -7
  103. package/esm2020/lib/select/components/select.component.mjs +7 -7
  104. package/esm2020/lib/select/directives/vd-select-option.directive.mjs +3 -3
  105. package/esm2020/lib/select/directives/vd-select-trigger.directive.mjs +3 -3
  106. package/esm2020/lib/select/select.module.mjs +9 -11
  107. package/esm2020/lib/table/components/dynamic-table/dynamic-table.component.mjs +24 -24
  108. package/esm2020/lib/table/components/filter-clear.component.mjs +4 -4
  109. package/esm2020/lib/table/components/filter-date.component.mjs +11 -11
  110. package/esm2020/lib/table/components/filter-input.component.mjs +10 -10
  111. package/esm2020/lib/table/components/filter-select.component.mjs +16 -37
  112. package/esm2020/lib/table/directives/data-source-filter.directive.mjs +3 -3
  113. package/esm2020/lib/table/paginator-intl.mjs +3 -3
  114. package/esm2020/lib/table/table.module.mjs +26 -28
  115. package/fesm2015/messaia-cdk.mjs +803 -833
  116. package/fesm2015/messaia-cdk.mjs.map +1 -1
  117. package/fesm2020/messaia-cdk.mjs +803 -833
  118. package/fesm2020/messaia-cdk.mjs.map +1 -1
  119. package/{messaia-cdk.d.ts → index.d.ts} +0 -0
  120. package/lib/base/components/base.component.d.ts +1 -1
  121. package/lib/base/components/dynamic-table-config-dialog.comnponent.d.ts +1 -1
  122. package/lib/base/components/generic-form-base.component.d.ts +1 -1
  123. package/lib/base/components/generic-form.component.d.ts +1 -1
  124. package/lib/base/components/generic-list.component.d.ts +1 -1
  125. package/lib/base/components/generic-reactive-form.component.d.ts +1 -1
  126. package/lib/chips/components/chips.component.d.ts +1 -1
  127. package/lib/chips/directives/autocomplete-option.directive.d.ts +1 -1
  128. package/lib/chips/directives/chip.directive.d.ts +1 -1
  129. package/lib/common/directives/disable-control.directive.d.ts +1 -1
  130. package/lib/common/functions/utils.d.ts +1 -1
  131. package/lib/common/helpers/app-storage.d.ts +1 -1
  132. package/lib/common/pipes/data-source.pipe.d.ts +1 -1
  133. package/lib/common/pipes/enum.pipe.d.ts +1 -1
  134. package/lib/common/pipes/file-size.pipe.d.ts +1 -1
  135. package/lib/common/pipes/filter.pipe.d.ts +1 -1
  136. package/lib/common/pipes/first-letter.d.ts +1 -1
  137. package/lib/common/pipes/keys.d.ts +1 -1
  138. package/lib/common/pipes/month-name.pipe.d.ts +1 -1
  139. package/lib/common/pipes/only-number.d.ts +1 -1
  140. package/lib/common/pipes/order.pipe.d.ts +1 -1
  141. package/lib/common/pipes/placeholder.pipe.d.ts +1 -1
  142. package/lib/common/pipes/safe-html.pipe.d.ts +1 -1
  143. package/lib/common/pipes/time.pipe.d.ts +1 -1
  144. package/lib/common/pipes/titlecase.pipe.d.ts +1 -1
  145. package/lib/common/pipes/truncate.pipe.d.ts +1 -1
  146. package/lib/common/pipes/values.d.ts +1 -1
  147. package/lib/dialogs/alert-dialog/alert-dialog.component.d.ts +1 -1
  148. package/lib/dialogs/confirm-dialog/confirm-dialog.component.d.ts +1 -1
  149. package/lib/dialogs/dialog.component.d.ts +4 -4
  150. package/lib/dialogs/prompt-dialog/prompt-dialog.component.d.ts +1 -1
  151. package/lib/file/file-input.component.d.ts +1 -1
  152. package/lib/form-validators/directives/base-directive.d.ts +1 -1
  153. package/lib/form-validators/directives/control-host.directive.d.ts +1 -1
  154. package/lib/form-validators/directives/html-control-template.directive.d.ts +1 -1
  155. package/lib/form-validators/directives/rx-form.directive.d.ts +1 -1
  156. package/lib/form-validators/directives/template-validations/async-validation.directive.d.ts +1 -1
  157. package/lib/form-validators/directives/template-validations/base-validator.directive.d.ts +1 -1
  158. package/lib/form-validators/directives/template-validations/control-expression-process.d.ts +1 -1
  159. package/lib/form-validators/directives/template-validations/file-control.directive.d.ts +1 -1
  160. package/lib/form-validators/directives/template-validations/image-file-control.directive.d.ts +1 -1
  161. package/lib/form-validators/directives/template-validations/rxformcontrol.directive.d.ts +1 -1
  162. package/lib/form-validators/models/interface/i-abstract-control.d.ts +1 -1
  163. package/lib/form-validators/services/form-control.d.ts +12 -9
  164. package/lib/form-validators/services/rx-form-builder.d.ts +5 -5
  165. package/lib/forms/components/generic-form/generic-form.component.d.ts +5 -5
  166. package/lib/forms/directives/mat-form-field-editor.directive.d.ts +21 -18
  167. package/lib/forms/directives/mat-form-field-readonly.directive.d.ts +1 -1
  168. package/lib/forms/helpers/abstract-mat-form-field.d.ts +22 -13
  169. package/lib/forms/helpers/value-accessor-base.d.ts +1 -1
  170. package/lib/forms/validators/equal-validator.directive.d.ts +1 -1
  171. package/lib/forms/validators/native-element-injector.directive.d.ts +1 -1
  172. package/lib/forms/validators/unique-validator-directive.d.ts +1 -1
  173. package/lib/layout/dynamic-menu/dynamic-menu.component.d.ts +1 -1
  174. package/lib/layout/form-toolbar/form-toolbar.component.d.ts +1 -1
  175. package/lib/layout/form-toolbar-menu/form-toolbar-menu.component.d.ts +1 -1
  176. package/lib/layout/layout-card-over/layout-card-over.component.d.ts +1 -1
  177. package/lib/layout/layout-footer/layout-footer.component.d.ts +1 -1
  178. package/lib/layout/layout-manage-list/layout-manage-list.component.d.ts +1 -1
  179. package/lib/layout/layout-manage-list/layout-manage-list.directives.d.ts +3 -3
  180. package/lib/layout/layout-nav/layout-nav.component.d.ts +1 -1
  181. package/lib/layout/layout-nav-list/layout-nav-list.component.d.ts +1 -1
  182. package/lib/layout/layout-nav-list/layout-nav-list.directives.d.ts +3 -3
  183. package/lib/layout/layout-toggle.class.d.ts +1 -1
  184. package/lib/layout/layout.component.d.ts +1 -1
  185. package/lib/layout/layout.directives.d.ts +3 -3
  186. package/lib/layout/list-toolbar/list-toolbar.component.d.ts +1 -1
  187. package/lib/layout/navigation-drawer/navigation-drawer.component.d.ts +3 -3
  188. package/lib/media/directives/media-toggle.directive.d.ts +1 -1
  189. package/lib/menu/components/menu.component.d.ts +1 -1
  190. package/lib/search/vd-search-box/vd-search-box.component.d.ts +1 -1
  191. package/lib/search/vd-search-input/vd-search-input.component.d.ts +1 -1
  192. package/lib/select/components/select.component.d.ts +1 -1
  193. package/lib/select/directives/vd-select-option.directive.d.ts +1 -1
  194. package/lib/select/directives/vd-select-trigger.directive.d.ts +1 -1
  195. package/lib/table/components/dynamic-table/dynamic-table.component.d.ts +1 -1
  196. package/lib/table/components/filter-clear.component.d.ts +1 -1
  197. package/lib/table/components/filter-date.component.d.ts +1 -1
  198. package/lib/table/components/filter-input.component.d.ts +1 -1
  199. package/lib/table/components/filter-select.component.d.ts +2 -2
  200. package/lib/table/directives/data-source-filter.directive.d.ts +1 -1
  201. package/package.json +3 -3
@@ -1,21 +1,21 @@
1
1
  import { Injectable } from "@angular/core";
2
- import { FormGroup, FormArray, FormControl, FormBuilder } from "@angular/forms";
3
- import { BaseFormBuilder } from './base-form-builder';
4
- import { ReactiveFormConfig } from '../util/reactive-form-config';
2
+ import { FormArray, FormBuilder, FormControl, FormGroup } from "@angular/forms";
3
+ import { ARRAY_PROPERTY, BOOLEAN, FUNCTION_STRING, MODEL, NUMBER, OBJECT_PROPERTY, OBJECT_STRING, PROPERTY, RX_WEB_VALIDATOR, STRING } from "../const";
4
+ import { APP_VALIDATORS } from '../const/app-validators.const';
5
5
  import { defaultContainer } from '../core/defaultContainer';
6
- import { FormBuilderConfiguration } from "../models";
7
- import { ARRAY_PROPERTY, OBJECT_PROPERTY, PROPERTY, FUNCTION_STRING, OBJECT_STRING, RX_WEB_VALIDATOR, NUMBER, BOOLEAN, STRING, MODEL } from "../const";
8
6
  import { AnnotationTypes } from "../core/validator.static";
7
+ import { FormBuilderConfiguration } from "../models";
8
+ import { andValidator } from '../reactive-form-validators/and.validator';
9
9
  import { conditionalChangeValidator } from "../reactive-form-validators/conditional-change.validator";
10
+ import { notValidator } from '../reactive-form-validators/not.validator';
11
+ import { orValidator } from '../reactive-form-validators/or.validator';
10
12
  import { Linq } from '../util/linq';
11
- import { APP_VALIDATORS } from '../const/app-validators.const';
13
+ import { ReactiveFormConfig } from '../util/reactive-form-config';
14
+ import { RegexValidator } from "../util/regex-validator";
15
+ import { BaseFormBuilder } from './base-form-builder';
12
16
  import { RxFormControl } from './form-control';
13
- import { RxFormGroup } from './rx-form-group';
14
17
  import { RxFormArray } from './rx-form-array';
15
- import { andValidator } from '../reactive-form-validators/and.validator';
16
- import { orValidator } from '../reactive-form-validators/or.validator';
17
- import { notValidator } from '../reactive-form-validators/not.validator';
18
- import { RegexValidator } from "../util/regex-validator";
18
+ import { RxFormGroup } from './rx-form-group';
19
19
  import * as i0 from "@angular/core";
20
20
  const LOGICAL_VALIDATORS = { and: andValidator, or: orValidator, not: notValidator };
21
21
  const ASYNC = "async";
@@ -190,7 +190,7 @@ export class RxFormBuilder extends BaseFormBuilder {
190
190
  return json;
191
191
  }
192
192
  control(value, validators, asyncValidators) {
193
- return new RxFormControl(value, validators, asyncValidators, {}, {}, '', []);
193
+ return new RxFormControl(value, { validators: validators, asyncValidators: asyncValidators }, {}, {}, '', []);
194
194
  }
195
195
  array(values, validatorConfig) {
196
196
  let formArray = this.group({ temp: values }, validatorConfig).get("temp");
@@ -413,7 +413,7 @@ export class RxFormBuilder extends BaseFormBuilder {
413
413
  abstractControlOptions = this.getAbstractControlOptions(property.name, formBuilderConfiguration, abstractControlOptions);
414
414
  if (property.updateOn && !abstractControlOptions.updateOn)
415
415
  abstractControlOptions.updateOn = property.updateOn;
416
- formGroupObject[property.name] = new RxFormControl(sanitizeValue, abstractControlOptions, [], json.entityObject, Object.assign({}, json.entityObject), property.name, instanceContainer.sanitizers[property.name]);
416
+ formGroupObject[property.name] = new RxFormControl(sanitizeValue, abstractControlOptions, json.entityObject, Object.assign({}, json.entityObject), property.name, instanceContainer.sanitizers[property.name]);
417
417
  this.isNested = false;
418
418
  }
419
419
  else
@@ -551,9 +551,9 @@ export class RxFormBuilder extends BaseFormBuilder {
551
551
  });
552
552
  }
553
553
  }
554
- /** @nocollapse */ RxFormBuilder.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: RxFormBuilder, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
555
- /** @nocollapse */ RxFormBuilder.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: RxFormBuilder });
556
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: RxFormBuilder, decorators: [{
554
+ /** @nocollapse */ RxFormBuilder.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: RxFormBuilder, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
555
+ /** @nocollapse */ RxFormBuilder.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: RxFormBuilder });
556
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: RxFormBuilder, decorators: [{
557
557
  type: Injectable
558
558
  }], ctorParameters: function () { return []; } });
559
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicngtZm9ybS1idWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3NyYy9saWIvZm9ybS12YWxpZGF0b3JzL3NlcnZpY2VzL3J4LWZvcm0tYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBaUMsV0FBVyxFQUEwQixNQUFNLGdCQUFnQixDQUFBO0FBRXRJLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQTtBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUc1RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBR3RKLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUN0RyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ25DLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQTtBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FB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QUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQSxDQUFDLENBQUM7WUFDNUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ1AsS0FBSyxHQUFHLENBQUMsQ0FBQztnQkFDVixJQUFJLFFBQVEsSUFBSSxDQUFDLEVBQUU7b0JBQ2YsSUFBSSxVQUFVO3dCQUNWLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDekMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTt3QkFDckQsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQzVDO2lCQUNKO2dCQUNELFFBQVEsR0FBRyxDQUFDLENBQUM7WUFDakIsQ0FBQztTQUNKLENBQUMsQ0FBQTtJQUNOLENBQUM7OzZIQXJqQlEsYUFBYTtpSUFBYixhQUFhOzJGQUFiLGFBQWE7a0JBRHpCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIFZhbGlkYXRvckZuLCBBc3luY1ZhbGlkYXRvckZuLCBGb3JtQnVpbGRlciwgQWJzdHJhY3RDb250cm9sT3B0aW9ucyB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiXHJcbmltcG9ydCB7IFR5cGUgfSBmcm9tIFwiLi4vdXRpbFwiXHJcbmltcG9ydCB7IEJhc2VGb3JtQnVpbGRlciB9IGZyb20gJy4vYmFzZS1mb3JtLWJ1aWxkZXInO1xyXG5cclxuaW1wb3J0IHsgUmVhY3RpdmVGb3JtQ29uZmlnIH0gZnJvbSAnLi4vdXRpbC9yZWFjdGl2ZS1mb3JtLWNvbmZpZydcclxuaW1wb3J0IHsgZGVmYXVsdENvbnRhaW5lciB9IGZyb20gJy4uL2NvcmUvZGVmYXVsdENvbnRhaW5lcic7XHJcbmltcG9ydCB7IERlY29yYXRvckNvbmZpZ3VyYXRpb24sIEluc3RhbmNlQ29udGFpbmVyLCBQcm9wZXJ0eUluZm8gfSBmcm9tICcuLi9jb3JlL3ZhbGlkYXRvci5pbnRlcmZhY2UnO1xyXG5cclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uIH0gZnJvbSBcIi4uL21vZGVsc1wiXHJcbmltcG9ydCB7IEFSUkFZX1BST1BFUlRZLCBPQkpFQ1RfUFJPUEVSVFksIFBST1BFUlRZLCBGVU5DVElPTl9TVFJJTkcsIE9CSkVDVF9TVFJJTkcsIFJYX1dFQl9WQUxJREFUT1IsIE5VTUJFUiwgQk9PTEVBTiwgU1RSSU5HLCBNT0RFTCB9IGZyb20gXCIuLi9jb25zdFwiXHJcbmltcG9ydCB7IFByb3BWYWxpZGF0aW9uQ29uZmlnIH0gZnJvbSBcIi4uL21vZGVscy9wcm9wLXZhbGlkYXRpb24tY29uZmlnXCI7XHJcblxyXG5pbXBvcnQgeyBBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiLi4vY29yZS92YWxpZGF0b3Iuc3RhdGljXCI7XHJcbmltcG9ydCB7IGNvbmRpdGlvbmFsQ2hhbmdlVmFsaWRhdG9yIH0gZnJvbSBcIi4uL3JlYWN0aXZlLWZvcm0tdmFsaWRhdG9ycy9jb25kaXRpb25hbC1jaGFuZ2UudmFsaWRhdG9yXCI7XHJcbmltcG9ydCB7IExpbnEgfSBmcm9tICcuLi91dGlsL2xpbnEnXHJcbmltcG9ydCB7IEFQUF9WQUxJREFUT1JTIH0gZnJvbSAnLi4vY29uc3QvYXBwLXZhbGlkYXRvcnMuY29uc3QnXHJcbmltcG9ydCB7IFJ4Rm9ybUNvbnRyb2wgfSBmcm9tICcuL2Zvcm0tY29udHJvbCc7XHJcbmltcG9ydCB7IFJ4Rm9ybUdyb3VwIH0gZnJvbSAnLi9yeC1mb3JtLWdyb3VwJ1xyXG5pbXBvcnQgeyBSeEZvcm1BcnJheSB9IGZyb20gJy4vcngtZm9ybS1hcnJheSc7XHJcbmltcG9ydCB7IGFuZFZhbGlkYXRvciB9IGZyb20gJy4uL3JlYWN0aXZlLWZvcm0tdmFsaWRhdG9ycy9hbmQudmFsaWRhdG9yJ1xyXG5pbXBvcnQgeyBvclZhbGlkYXRvciB9IGZyb20gJy4uL3JlYWN0aXZlLWZvcm0tdmFsaWRhdG9ycy9vci52YWxpZGF0b3InXHJcbmltcG9ydCB7IG5vdFZhbGlkYXRvciB9IGZyb20gJy4uL3JlYWN0aXZlLWZvcm0tdmFsaWRhdG9ycy9ub3QudmFsaWRhdG9yJ1xyXG5pbXBvcnQgeyBBcHBGb3JtR3JvdXAgfSBmcm9tICcuLi9tb2RlbHMvaW50ZXJmYWNlL2ktZm9ybS1ncm91cCdcclxuaW1wb3J0IHsgUmVnZXhWYWxpZGF0b3IgfSBmcm9tIFwiLi4vdXRpbC9yZWdleC12YWxpZGF0b3JcIjtcclxuaW1wb3J0IHsgZ2V0SW5zdGFuY2UgfSBmcm9tIFwiLi4vdXRpbC9pbnN0YW5jZS1wcm92aWRlci5mdW5jdGlvblwiO1xyXG5pbXBvcnQgeyBJQWJzdHJhY3RDb250cm9sIH0gZnJvbSBcIi4uL21vZGVscy9pbnRlcmZhY2UvaS1hYnN0cmFjdC1jb250cm9sXCJcclxuY29uc3QgTE9HSUNBTF9WQUxJREFUT1JTOiB7IFtrZXk6IHN0cmluZ106IEZ1bmN0aW9uIH0gPSB7IGFuZDogYW5kVmFsaWRhdG9yLCBvcjogb3JWYWxpZGF0b3IsIG5vdDogbm90VmFsaWRhdG9yIH1cclxuY29uc3QgQVNZTkM6IHN0cmluZyA9IFwiYXN5bmNcIlxyXG5jb25zdCBFTlRJVFlfT0JKRUNUOiBzdHJpbmcgPSBcImVudGl0eU9iamVjdFwiO1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBSeEZvcm1CdWlsZGVyIGV4dGVuZHMgQmFzZUZvcm1CdWlsZGVyIHtcclxuICAgIHByaXZhdGUgbmVzdGVkUHJvcDogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBjb25kaXRpb25hbE9iamVjdFByb3BzOiBhbnlbXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBjb25kaXRpb25hbFZhbGlkYXRpb25JbnN0YW5jZTogYW55ID0ge307XHJcbiAgICBwcml2YXRlIGJ1aWxkZXJDb25maWd1cmF0aW9uQ29uZGl0aW9uYWxPYmplY3RQcm9wczogYW55W10gPSBbXTtcclxuICAgIHByaXZhdGUgZm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XHJcbiAgICBwcml2YXRlIGN1cnJlbnRGb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3I6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcclxuICAgIHByaXZhdGUgaXNOZXN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgaXNHcm91cENhbGxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBpc05lc3RlZEJpbmRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBnZXRJbnN0YW5jZUNvbnRhaW5lcihpbnN0YW5jZUZ1bmM6IGFueSwgZW50aXR5T2JqZWN0OiBhbnkpOiBJbnN0YW5jZUNvbnRhaW5lciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5zdGFjZVByb3ZpZGVyKGluc3RhbmNlRnVuYywgZW50aXR5T2JqZWN0KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldFZhbHVlKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBvYmplY3Q6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGZvciAodmFyIGNvbCBpbiBvYmplY3QpIHtcclxuICAgICAgICAgICAgdmFyIGNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KFtjb2xdKTtcclxuICAgICAgICAgICAgY29udHJvbC5zZXRWYWx1ZShvYmplY3RbY29sXSk7XHJcbiAgICAgICAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGV4dHJhY3RFeHByZXNzaW9ucyhmb21yQnVpbGRlckNvbmZpZ3VyYXRpb246IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbik6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nW10gfSB7XHJcbiAgICAgICAgaWYgKGZvbXJCdWlsZGVyQ29uZmlndXJhdGlvbiAmJiBmb21yQnVpbGRlckNvbmZpZ3VyYXRpb24uZHluYW1pY1ZhbGlkYXRpb24pIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZm9tckJ1aWxkZXJDb25maWd1cmF0aW9uLmR5bmFtaWNWYWxpZGF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBkZWNvcmF0b3IgaW4gZm9tckJ1aWxkZXJDb25maWd1cmF0aW9uLmR5bmFtaWNWYWxpZGF0aW9uW3Byb3BlcnR5XSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmb21yQnVpbGRlckNvbmZpZ3VyYXRpb24uZHluYW1pY1ZhbGlkYXRpb25bcHJvcGVydHldW2RlY29yYXRvcl0uY29uZGl0aW9uYWxFeHByZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2x1bW5zID0gTGlucS5leHByZXNzaW9uQ29sdW1ucyhmb21yQnVpbGRlckNvbmZpZ3VyYXRpb24uZHluYW1pY1ZhbGlkYXRpb25bcHJvcGVydHldW2RlY29yYXRvcl0uY29uZGl0aW9uYWxFeHByZXNzaW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbnRhaW5lci5hZGRDaGFuZ2VWYWxpZGF0aW9uKHRoaXMuY29uZGl0aW9uYWxWYWxpZGF0aW9uSW5zdGFuY2UsIHByb3BlcnR5LCBjb2x1bW5zKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGRBc3luY1ZhbGlkYXRpb24ocHJvcGVydHk6IFByb3BlcnR5SW5mbywgcHJvcGVydHlWYWxpZGF0b3JzOiBEZWNvcmF0b3JDb25maWd1cmF0aW9uW10sIHByb3BWYWxpZGF0aW9uQ29uZmlnOiBQcm9wVmFsaWRhdGlvbkNvbmZpZykge1xyXG4gICAgICAgIGxldCBhc3luY1ZhbGlkYXRvcnMgPSBbXTtcclxuICAgICAgICBpZiAocHJvcGVydHlWYWxpZGF0b3JzKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHByb3BlcnR5VmFsaWRhdG9yIG9mIHByb3BlcnR5VmFsaWRhdG9ycykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5VmFsaWRhdG9yLmlzQXN5bmMpXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlWYWxpZGF0b3IuY29uZmlnLmZvckVhY2godCA9PiB7IGFzeW5jVmFsaWRhdG9ycy5wdXNoKHQpIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwcm9wVmFsaWRhdGlvbkNvbmZpZyAmJiBwcm9wVmFsaWRhdGlvbkNvbmZpZ1tBU1lOQ10pIHtcclxuICAgICAgICAgICAgcHJvcFZhbGlkYXRpb25Db25maWdbQVNZTkNdLmZvckVhY2godCA9PiB7IGFzeW5jVmFsaWRhdG9ycy5wdXNoKHQpIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhc3luY1ZhbGlkYXRvcnM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGRGb3JtQ29udHJvbChwcm9wZXJ0eTogUHJvcGVydHlJbmZvLCBwcm9wZXJ0eVZhbGlkYXRvcnM6IERlY29yYXRvckNvbmZpZ3VyYXRpb25bXSwgcHJvcFZhbGlkYXRpb25Db25maWc6IFByb3BWYWxpZGF0aW9uQ29uZmlnLCBpbnN0YW5jZTogSW5zdGFuY2VDb250YWluZXIsIGVudGl0eTogYW55KSB7XHJcbiAgICAgICAgbGV0IHZhbGlkYXRvcnMgPSBbXTtcclxuICAgICAgICBsZXQgY29sdW1ucyA9IFtdO1xyXG4gICAgICAgIGlmICgoaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHMgJiYgaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHNbcHJvcGVydHkubmFtZV0pIHx8ICh0aGlzLmNvbmRpdGlvbmFsVmFsaWRhdGlvbkluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzICYmIHRoaXMuY29uZGl0aW9uYWxWYWxpZGF0aW9uSW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHNbcHJvcGVydHkubmFtZV0pKSB7XHJcbiAgICAgICAgICAgIGxldCBwcm9wcyA9IFtdO1xyXG4gICAgICAgICAgICBpZiAoKGluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzICYmIGluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzW3Byb3BlcnR5Lm5hbWVdKSlcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzW3Byb3BlcnR5Lm5hbWVdLmZvckVhY2godCA9PiBwcm9wcy5wdXNoKHQpKVxyXG4gICAgICAgICAgICBpZiAodGhpcy5jb25kaXRpb25hbFZhbGlkYXRpb25JbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wcyAmJiB0aGlzLmNvbmRpdGlvbmFsVmFsaWRhdGlvbkluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzW3Byb3BlcnR5Lm5hbWVdKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb25hbFZhbGlkYXRpb25JbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1twcm9wZXJ0eS5uYW1lXS5mb3JFYWNoKHQgPT4gcHJvcHMucHVzaCh0KSk7XHJcbiAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChjb25kaXRpb25hbENoYW5nZVZhbGlkYXRvcihwcm9wcykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jb25kaXRpb25hbE9iamVjdFByb3BzLmxlbmd0aCA+IDAgfHwgdGhpcy5idWlsZGVyQ29uZmlndXJhdGlvbkNvbmRpdGlvbmFsT2JqZWN0UHJvcHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgcHJvcENvbmRpdGlvbnMgPSBbXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uYWxPYmplY3RQcm9wcylcclxuICAgICAgICAgICAgICAgIHByb3BDb25kaXRpb25zID0gdGhpcy5jb25kaXRpb25hbE9iamVjdFByb3BzLmZpbHRlcih0ID0+IHQucHJvcE5hbWUgPT0gcHJvcGVydHkubmFtZSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmJ1aWxkZXJDb25maWd1cmF0aW9uQ29uZGl0aW9uYWxPYmplY3RQcm9wcylcclxuICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRlckNvbmZpZ3VyYXRpb25Db25kaXRpb25hbE9iamVjdFByb3BzLmZpbHRlcih0ID0+IHQucHJvcE5hbWUgPT0gcHJvcGVydHkubmFtZSkuZm9yRWFjaCh0ID0+IHByb3BDb25kaXRpb25zLnB1c2godCkpO1xyXG4gICAgICAgICAgICBwcm9wQ29uZGl0aW9ucy5mb3JFYWNoKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHQucmVmZXJlbmNlUHJvcE5hbWUgJiYgY29sdW1ucy5pbmRleE9mKHQucmVmZXJlbmNlUHJvcE5hbWUpID09IC0xKVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaCh0LnJlZmVyZW5jZVByb3BOYW1lKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgaWYgKGNvbHVtbnMubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChjb25kaXRpb25hbENoYW5nZVZhbGlkYXRvcihjb2x1bW5zKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IHByb3BlcnR5VmFsaWRhdG9yIG9mIHByb3BlcnR5VmFsaWRhdG9ycykge1xyXG4gICAgICAgICAgICBpZiAoIXByb3BlcnR5VmFsaWRhdG9yLmlzQXN5bmMpXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHByb3BlcnR5VmFsaWRhdG9yLmFubm90YXRpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBbm5vdGF0aW9uVHlwZXMucnVsZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKEFQUF9WQUxJREFUT1JTW3Byb3BlcnR5VmFsaWRhdG9yLmFubm90YXRpb25UeXBlXShwcm9wZXJ0eVZhbGlkYXRvci5jb25maWcsIGVudGl0eSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQW5ub3RhdGlvblR5cGVzLmFuZDpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIEFubm90YXRpb25UeXBlcy5vcjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIEFubm90YXRpb25UeXBlcy5ub3Q6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChMT0dJQ0FMX1ZBTElEQVRPUlNbcHJvcGVydHlWYWxpZGF0b3IuYW5ub3RhdGlvblR5cGVdKHByb3BlcnR5VmFsaWRhdG9yLmNvbmZpZykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChBUFBfVkFMSURBVE9SU1twcm9wZXJ0eVZhbGlkYXRvci5hbm5vdGF0aW9uVHlwZV0ocHJvcGVydHlWYWxpZGF0b3IuY29uZmlnKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwcm9wVmFsaWRhdGlvbkNvbmZpZylcclxuICAgICAgICAgICAgdGhpcy5hZGRpdGlvbmFsVmFsaWRhdGlvbih2YWxpZGF0b3JzLCBwcm9wVmFsaWRhdGlvbkNvbmZpZyk7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcltwcm9wZXJ0eS5uYW1lXSlcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Rm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yW3Byb3BlcnR5Lm5hbWVdLmZvckVhY2godCA9PiB7IHZhbGlkYXRvcnMucHVzaCh0KTsgfSlcclxuICAgICAgICByZXR1cm4gdmFsaWRhdG9ycztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFkZGl0aW9uYWxWYWxpZGF0aW9uKHZhbGlkYXRpb25zOiBhbnlbXSwgcHJvcFZhbGlkYXRpb25Db25maWc6IFByb3BWYWxpZGF0aW9uQ29uZmlnIHwgYW55KSB7XHJcbiAgICAgICAgZm9yICh2YXIgY29sIGluIEFubm90YXRpb25UeXBlcykge1xyXG4gICAgICAgICAgICBpZiAocHJvcFZhbGlkYXRpb25Db25maWdbQW5ub3RhdGlvblR5cGVzW2NvbF1dICYmIGNvbCAhPSBcImN1c3RvbVwiKSB7XHJcbiAgICAgICAgICAgICAgICB2YWxpZGF0aW9ucy5wdXNoKEFQUF9WQUxJREFUT1JTW0Fubm90YXRpb25UeXBlc1tjb2xdXShwcm9wVmFsaWRhdGlvbkNvbmZpZ1tBbm5vdGF0aW9uVHlwZXNbY29sXV0pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChjb2wgPT0gQW5ub3RhdGlvblR5cGVzLmN1c3RvbSAmJiBwcm9wVmFsaWRhdGlvbkNvbmZpZ1tBbm5vdGF0aW9uVHlwZXNbY29sXV0pXHJcbiAgICAgICAgICAgICAgICB2YWxpZGF0aW9ucy5wdXNoKHByb3BWYWxpZGF0aW9uQ29uZmlnW2NvbF0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEVudGl0eTxUPihvYmplY3Q6IFQsIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbjogRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBwcm9wZXJ0eU5hbWU6IHN0cmluZywgaXNTYW1lT2JqZWN0Q29uc3RydWN0b3I6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIGlmIChmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24gJiYgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmdlbmVyaWNFbnRpdGllcyAmJiBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uZ2VuZXJpY0VudGl0aWVzW3Byb3BlcnR5TmFtZV0pXHJcbiAgICAgICAgICAgIHJldHVybiBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uZ2VuZXJpY0VudGl0aWVzW3Byb3BlcnR5TmFtZV07XHJcbiAgICAgICAgcmV0dXJuIGlzU2FtZU9iamVjdENvbnN0cnVjdG9yID8gb2JqZWN0LmNvbnN0cnVjdG9yIDogdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0T2JqZWN0UHJvcGVydHlJbnN0YW5jZShvYmplY3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIHByb3BlcnR5SW5mbzogUHJvcGVydHlJbmZvLCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb246IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbikge1xyXG4gICAgICAgIGlmIChwcm9wZXJ0eUluZm8ucHJvcGVydHlUeXBlID09IE9CSkVDVF9QUk9QRVJUWSAmJiBvYmplY3RbcHJvcGVydHlJbmZvLm5hbWVdKVxyXG4gICAgICAgICAgICByZXR1cm4gb2JqZWN0W3Byb3BlcnR5SW5mby5uYW1lXS5jb25zdHJ1Y3RvcjtcclxuICAgICAgICBlbHNlIGlmIChwcm9wZXJ0eUluZm8ucHJvcGVydHlUeXBlID09IEFSUkFZX1BST1BFUlRZICYmIG9iamVjdFtwcm9wZXJ0eUluZm8ubmFtZV0gJiYgb2JqZWN0W3Byb3BlcnR5SW5mby5uYW1lXS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICByZXR1cm4gb2JqZWN0W3Byb3BlcnR5SW5mby5uYW1lXVswXS5jb25zdHJ1Y3RvcjtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRFbnRpdHkob2JqZWN0LCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIHByb3BlcnR5SW5mby5uYW1lKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNoZWNrT2JqZWN0UHJvcEFkZGl0aW9uYWxWYWxpZGF0aW9uPFQ+KGluc3RhbmNlQ29udGFpbmVyOiBJbnN0YW5jZUNvbnRhaW5lciwgb2JqZWN0OiBULCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb246IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbikge1xyXG4gICAgICAgIHZhciBwcm9wcyA9IGluc3RhbmNlQ29udGFpbmVyLnByb3BlcnRpZXMuZmlsdGVyKHQgPT4gdC5wcm9wZXJ0eVR5cGUgPT0gT0JKRUNUX1BST1BFUlRZIHx8IHQucHJvcGVydHlUeXBlID09IEFSUkFZX1BST1BFUlRZKVxyXG4gICAgICAgIHByb3BzLmZvckVhY2godCA9PiB7XHJcbiAgICAgICAgICAgIGxldCBlbnRpdHkgPSB0LmVudGl0eTtcclxuICAgICAgICAgICAgaWYgKCF0LmVudGl0eSlcclxuICAgICAgICAgICAgICAgIGVudGl0eSA9IHRoaXMuZ2V0T2JqZWN0UHJvcGVydHlJbnN0YW5jZShvYmplY3QsIHQsIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbilcclxuICAgICAgICAgICAgaWYgKGVudGl0eSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGluc3RhbmNlID0gdGhpcy5nZXRJbnN0YW5jZUNvbnRhaW5lcihlbnRpdHksIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9wID0gaW5zdGFuY2VDb250YWluZXIucHJvcGVydGllcy5maWx0ZXIodCA9PiB0Lm5hbWUgPT0ga2V5KVswXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3ApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaW5zdGFuY2VDb250YWluZXIuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VDb250YWluZXIuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHMgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaW5zdGFuY2VDb250YWluZXIuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHNba2V5XSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZUNvbnRhaW5lci5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1trZXldID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1trZXldLmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQucHJvcGVydHlUeXBlICE9IEFSUkFZX1BST1BFUlRZKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZUNvbnRhaW5lci5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1trZXldLnB1c2goW3QubmFtZSwgeF0uam9pbignLicpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VDb250YWluZXIuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHNba2V5XS5wdXNoKFt0Lm5hbWUsIHhdLmpvaW4oJ1tdJykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRPYmplY3QobW9kZWw6IGFueSB8IHsgW2tleTogc3RyaW5nXTogYW55IH0sIGVudGl0eU9iamVjdD86IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbj86IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbik6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xyXG4gICAgICAgIGxldCBqc29uOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgbW9kZWwgPT0gRlVOQ1RJT05fU1RSSU5HKVxyXG4gICAgICAgICAgICBqc29uLm1vZGVsID0gbW9kZWw7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgbW9kZWwgPT0gRlVOQ1RJT05fU1RSSU5HICYmIChlbnRpdHlPYmplY3QgaW5zdGFuY2VvZiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pKSB7XHJcbiAgICAgICAgICAgIGpzb24uZW50aXR5T2JqZWN0ID0gdGhpcy5jcmVhdGVDbGFzc09iamVjdChqc29uLm1vZGVsLCBlbnRpdHlPYmplY3QpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbnRpdHlPYmplY3QgJiYgIShlbnRpdHlPYmplY3QgaW5zdGFuY2VvZiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pKVxyXG4gICAgICAgICAgICBqc29uLmVudGl0eU9iamVjdCA9IGVudGl0eU9iamVjdDtcclxuXHJcbiAgICAgICAgaWYgKGVudGl0eU9iamVjdCBpbnN0YW5jZW9mIEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiAmJiAhZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKVxyXG4gICAgICAgICAgICBqc29uLmZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiA9IGVudGl0eU9iamVjdDtcclxuICAgICAgICBlbHNlIGlmICghKGVudGl0eU9iamVjdCBpbnN0YW5jZW9mIEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbikgJiYgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKSB7XHJcbiAgICAgICAgICAgIGpzb24uZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uID0gZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uO1xyXG4gICAgICAgICAgICBqc29uLmVudGl0eU9iamVjdCA9IHRoaXMuY3JlYXRlQ2xhc3NPYmplY3QoanNvbi5tb2RlbCwganNvbi5mb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIGpzb24uZW50aXR5T2JqZWN0KVxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmICghZW50aXR5T2JqZWN0KSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kZWwgPT0gT0JKRUNUX1NUUklORylcclxuICAgICAgICAgICAgICAgIGpzb24ubW9kZWwgPSBtb2RlbC5jb25zdHJ1Y3RvcjtcclxuICAgICAgICAgICAganNvbi5lbnRpdHlPYmplY3QgPSB0aGlzLmNyZWF0ZUNsYXNzT2JqZWN0KGpzb24ubW9kZWwsIGpzb24uZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBtb2RlbClcclxuICAgICAgICB9IGVsc2UgaWYgKG1vZGVsICYmIChlbnRpdHlPYmplY3QgaW5zdGFuY2VvZiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pICYmICh0eXBlb2YgbW9kZWwgPT0gT0JKRUNUX1NUUklORykpIHtcclxuICAgICAgICAgICAganNvbltNT0RFTF0gPSBtb2RlbC5jb25zdHJ1Y3RvcjtcclxuICAgICAgICAgICAganNvbltFTlRJVFlfT0JKRUNUXSA9IHRoaXMuY3JlYXRlQ2xhc3NPYmplY3QoanNvbi5tb2RlbCwganNvbi5mb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIG1vZGVsKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4ganNvbjtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIGNvbnRyb2wodmFsdWU/OiBhbnksIHZhbGlkYXRvcnM/OiBWYWxpZGF0b3JGbltdLCBhc3luY1ZhbGlkYXRvcnM/OiBBc3luY1ZhbGlkYXRvckZuW10pOiBJQWJzdHJhY3RDb250cm9sIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJ4Rm9ybUNvbnRyb2wodmFsdWUsIHZhbGlkYXRvcnMsIGFzeW5jVmFsaWRhdG9ycywge30sIHt9LCAnJywgW10pO1xyXG4gICAgfVxyXG5cclxuICAgIGFycmF5KHZhbHVlczogW3sgW2tleTogc3RyaW5nXTogYW55IH1dLCB2YWxpZGF0b3JDb25maWc/OiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgICBsZXQgZm9ybUFycmF5ID0gdGhpcy5ncm91cCh7IHRlbXA6IHZhbHVlcyB9LCB2YWxpZGF0b3JDb25maWcpLmdldChcInRlbXBcIikgYXMgRm9ybUFycmF5O1xyXG4gICAgICAgIHZhciBmb3JtQnVpbGRlciA9IG5ldyBGb3JtQnVpbGRlcigpO1xyXG4gICAgICAgIHJldHVybiBmb3JtQnVpbGRlci5hcnJheShmb3JtQXJyYXkuY29udHJvbHMpO1xyXG4gICAgfVxyXG5cclxuICAgIGdyb3VwKGdyb3VwT2JqZWN0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCB2YWxpZGF0b3JDb25maWc/OiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pOiBGb3JtR3JvdXAge1xyXG4gICAgICAgIGxldCBtb2RlbEluc3RhbmNlID0gc3VwZXIuY3JlYXRlSW5zdGFuY2UoKTtcclxuICAgICAgICBsZXQgZW50aXR5T2JqZWN0ID0ge307XHJcbiAgICAgICAgdGhpcy5mb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3IgPSB7fTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRGb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3IgPSB0aGlzLmZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcjtcclxuICAgICAgICB0aGlzLmNyZWF0ZVZhbGlkYXRvckZvcm1Hcm91cChncm91cE9iamVjdCwgZW50aXR5T2JqZWN0LCBtb2RlbEluc3RhbmNlLCB2YWxpZGF0b3JDb25maWcpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvciA9IHRoaXMuZm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yO1xyXG4gICAgICAgIHRoaXMuaXNHcm91cENhbGxlZCA9IHRydWU7XHJcbiAgICAgICAgbGV0IGZvcm1Hcm91cCA9IHRoaXMuZm9ybUdyb3VwKG1vZGVsSW5zdGFuY2UuY29uc3RydWN0b3IsIGVudGl0eU9iamVjdCwgdmFsaWRhdG9yQ29uZmlnKTtcclxuICAgICAgICB0aGlzLmlzR3JvdXBDYWxsZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvciA9IHt9O1xyXG4gICAgICAgIHRoaXMuY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvciA9IHRoaXMuZm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yO1xyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yID0ge307XHJcbiAgICAgICAgcmV0dXJuIGZvcm1Hcm91cDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFwcGx5QWxsUHJvcFZhbGlkYXRvcihwcm9wTmFtZTogc3RyaW5nLCB2YWxpZGF0b3JDb25maWc6IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiwgbW9kZWxJbnN0YW5jZTogYW55KSB7XHJcbiAgICAgICAgaWYgKHZhbGlkYXRvckNvbmZpZyAmJiB2YWxpZGF0b3JDb25maWcuYXBwbHlBbGxQcm9wcykge1xyXG4gICAgICAgICAgICBpZiAoISh2YWxpZGF0b3JDb25maWcuZXhjbHVkZVByb3BzICYmIHZhbGlkYXRvckNvbmZpZy5leGNsdWRlUHJvcHMubGVuZ3RoID4gMCAmJiB2YWxpZGF0b3JDb25maWcuZXhjbHVkZVByb3BzLmluZGV4T2YocHJvcE5hbWUpID09IC0xKSkge1xyXG4gICAgICAgICAgICAgICAgdmFsaWRhdG9yQ29uZmlnLmFwcGx5QWxsUHJvcHMuZm9yRWFjaCgodDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQubmFtZSA9PSBSWF9XRUJfVkFMSURBVE9SKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHQocHJvcE5hbWUsIG1vZGVsSW5zdGFuY2UpXHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRGb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3JbcHJvcE5hbWVdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Rm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yW3Byb3BOYW1lXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRGb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3JbcHJvcE5hbWVdLnB1c2godClcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZHluYW1pY1ZhbGlkYXRpb25Qcm9wQ2hlY2socHJvcE5hbWU6IHN0cmluZywgdmFsaWRhdG9yQ29uZmlnOiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgICByZXR1cm4gKHZhbGlkYXRvckNvbmZpZyA9PSB1bmRlZmluZWQpID8gdHJ1ZSA6ICghdmFsaWRhdG9yQ29uZmlnLmR5bmFtaWNWYWxpZGF0aW9uQ29uZmlndXJhdGlvblByb3BlcnR5TmFtZSkgPyB0cnVlIDogdmFsaWRhdG9yQ29uZmlnLmR5bmFtaWNWYWxpZGF0aW9uQ29uZmlndXJhdGlvblByb3BlcnR5TmFtZSA9PSBwcm9wTmFtZSA/IGZhbHNlIDogdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzTm90T2JqZWN0KHZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT0gT0JKRUNUX1NUUklORztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyZWF0ZVZhbGlkYXRvckZvcm1Hcm91cChncm91cE9iamVjdDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgZW50aXR5T2JqZWN0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBtb2RlbEluc3RhbmNlOiBhbnksIHZhbGlkYXRvckNvbmZpZzogRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKSB7XHJcbiAgICAgICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gZ3JvdXBPYmplY3QpIHtcclxuXHJcbiAgICAgICAgICAgIHZhciBwcm9wID0gZ3JvdXBPYmplY3RbcHJvcE5hbWVdO1xyXG4gICAgICAgICAgICBpZiAocHJvcCBpbnN0YW5jZW9mIEFycmF5ICYmIHByb3AubGVuZ3RoID4gMCAmJiB0aGlzLmlzTm90T2JqZWN0KHByb3BbMF0pKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcHJvcFZhbGlkYXRvcnMgPSAocHJvcC5sZW5ndGggPiAxICYmIHByb3BbMV0gaW5zdGFuY2VvZiBBcnJheSkgPyBwcm9wWzFdIDogKHByb3AubGVuZ3RoID09IDIpID8gW3Byb3BbMV1dIDogW107XHJcbiAgICAgICAgICAgICAgICBsZXQgcHJvcGVydHlBZGRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wVmFsaWRhdG9ycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wVmFsaWRhdG9yc1tpXS5uYW1lID09IFJYX1dFQl9WQUxJREFUT1IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcFZhbGlkYXRvcnNbaV0ocHJvcE5hbWUsIG1vZGVsSW5zdGFuY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUFkZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jdXJyZW50Rm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yW3Byb3BOYW1lXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcltwcm9wTmFtZV0gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Rm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yW3Byb3BOYW1lXS5wdXNoKHByb3BWYWxpZGF0b3JzW2ldKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHlBZGRlZClcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29udGFpbmVyLmluaXRQcm9wZXJ0eU9iamVjdChwcm9wTmFtZSwgUFJPUEVSVFksIHVuZGVmaW5lZCwgdHlwZW9mIG1vZGVsSW5zdGFuY2UgPT0gT0JKRUNUX1NUUklORyA/IG1vZGVsSW5zdGFuY2UgOiB7IGNvbnN0cnVjdG9yOiBtb2RlbEluc3RhbmNlIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hcHBseUFsbFByb3BWYWxpZGF0b3IocHJvcE5hbWUsIHZhbGlkYXRvckNvbmZpZywgbW9kZWxJbnN0YW5jZSlcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wID09PSBudWxsIHx8IHByb3AgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgcHJvcCA9PSBTVFJJTkcgfHwgdHlwZW9mIHByb3AgPT0gTlVNQkVSIHx8IHR5cGVvZiBwcm9wID09IEJPT0xFQU4gfHwgcHJvcCBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHRDb250YWluZXIuaW5pdFByb3BlcnR5T2JqZWN0KHByb3BOYW1lLCBQUk9QRVJUWSwgdW5kZWZpbmVkLCB0eXBlb2YgbW9kZWxJbnN0YW5jZSA9PSBPQkpFQ1RfU1RSSU5HID8gbW9kZWxJbnN0YW5jZSA6IHsgY29uc3RydWN0b3I6IG1vZGVsSW5zdGFuY2UgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGx5QWxsUHJvcFZhbGlkYXRvcihwcm9wTmFtZSwgdmFsaWRhdG9yQ29uZmlnLCBtb2RlbEluc3RhbmNlKVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3AgaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb3AgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbnRpdHlPYmplY3RbcHJvcE5hbWVdID0gcHJvcDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByb3BNb2RlbEluc3RhbmNlID0gc3VwZXIuY3JlYXRlSW5zdGFuY2UoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZGVsSW5zdGFuY2UgPT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RlbEluc3RhbmNlLmNvbnN0cnVjdG9yID0gbW9kZWxJbnN0YW5jZTtcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29udGFpbmVyLmluaXRQcm9wZXJ0eU9iamVjdChwcm9wTmFtZSwgQVJSQVlfUFJPUEVSVFksIHByb3BNb2RlbEluc3RhbmNlLmNvbnN0cnVjdG9yLCBtb2RlbEluc3RhbmNlKTtcclxuICAgICAgICAgICAgICAgICAgICBlbnRpdHlPYmplY3RbcHJvcE5hbWVdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgcm93IG9mIHByb3ApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGpPYmplY3QgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5T2JqZWN0W3Byb3BOYW1lXS5wdXNoKGpPYmplY3QpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlVmFsaWRhdG9yRm9ybUdyb3VwKHJvdywgak9iamVjdCwgcHJvcE1vZGVsSW5zdGFuY2UuY29uc3RydWN0b3IsIHZhbGlkYXRvckNvbmZpZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHByb3AgPT0gT0JKRUNUX1NUUklORyAmJiAhKHByb3AgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCB8fCBwcm9wIGluc3RhbmNlb2YgUnhGb3JtQ29udHJvbCkpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgZm9ybUdyb3VwOiBhbnkgPSAocHJvcCBpbnN0YW5jZW9mIEZvcm1BcnJheSkgPyBwcm9wLmNvbnRyb2xzWzBdIDogcHJvcFxyXG4gICAgICAgICAgICAgICAgaWYgKCFmb3JtR3JvdXAubW9kZWwgJiYgKHByb3AgaW5zdGFuY2VvZiBGb3JtR3JvdXAgfHwgcHJvcCBpbnN0YW5jZW9mIFJ4Rm9ybUdyb3VwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cCA9IHRoaXMuZ3JvdXAoZm9ybUdyb3VwLmNvbnRyb2xzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChwcm9wIGluc3RhbmNlb2YgRm9ybUdyb3VwIHx8IHByb3AgaW5zdGFuY2VvZiBSeEZvcm1Hcm91cCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVudGl0eU9iamVjdFtwcm9wTmFtZV0gPSBwcm9wO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDb250YWluZXIuaW5pdFByb3BlcnR5T2JqZWN0KHByb3BOYW1lLCBPQkpFQ1RfUFJPUEVSVFksIGZvcm1Hcm91cC5tb2RlbCwgbW9kZWxJbnN0YW5jZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHByb3AgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbnRpdHlPYmplY3RbcHJvcE5hbWVdID0gcHJvcDtcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29udGFpbmVyLmluaXRQcm9wZXJ0eU9iamVjdChwcm9wTmFtZSwgQVJSQVlfUFJPUEVSVFksIGZvcm1Hcm91cC5tb2RlbCwgbW9kZWxJbnN0YW5jZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmR5bmFtaWNWYWxpZGF0aW9uUHJvcENoZWNrKHByb3BOYW1lLCB2YWxpZGF0b3JDb25maWcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yW3Byb3BOYW1lXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRGb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3IgPSB0aGlzLmZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcltwcm9wTmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcm9wTW9kZWxJbnN0YW5jZSA9IHN1cGVyLmNyZWF0ZUluc3RhbmNlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eU9iamVjdFtwcm9wTmFtZV0gPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5T2JqZWN0W3Byb3BOYW1lXS5jb25zdHJ1Y3RvciA9IHByb3BNb2RlbEluc3RhbmNlLmNvbnN0cnVjdG9yO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29udGFpbmVyLmluaXRQcm9wZXJ0eU9iamVjdChwcm9wTmFtZSwgT0JKRUNUX1BST1BFUlRZLCBlbnRpdHlPYmplY3RbcHJvcE5hbWVdLmNvbnN0cnVjdG9yLCBtb2RlbEluc3RhbmNlLmNvbnN0cnVjdG9yID09IEZ1bmN0aW9uID8geyBjb25zdHJ1Y3RvcjogbW9kZWxJbnN0YW5jZSB9IDogbW9kZWxJbnN0YW5jZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvYmplY3RWYWxpZGF0aW9uQ29uZmlnID0gdGhpcy5nZXRWYWxpZGF0b3JDb25maWcodmFsaWRhdG9yQ29uZmlnLCBncm91cE9iamVjdCwgcHJvcE5hbWUgKyBcIi5cIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVWYWxpZGF0b3JGb3JtR3JvdXAoZ3JvdXBPYmplY3RbcHJvcE5hbWVdLCBlbnRpdHlPYmplY3RbcHJvcE5hbWVdLCBlbnRpdHlPYmplY3RbcHJvcE5hbWVdLmNvbnN0cnVjdG9yLCBvYmplY3RWYWxpZGF0aW9uQ29uZmlnKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgZW50aXR5T2JqZWN0W3Byb3BOYW1lXSA9IGdyb3VwT2JqZWN0W3Byb3BOYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wID09IFNUUklORyB8fCB0eXBlb2YgcHJvcCA9PSBOVU1CRVIgfHwgdHlwZW9mIHByb3AgPT0gQk9PTEVBTiB8fCBwcm9wIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgZW50aXR5T2JqZWN0W3Byb3BOYW1lXSA9IHByb3BcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICgocHJvcCAmJiBwcm9wLmxlbmd0aCA+IDAgJiYgdGhpcy5pc05vdE9iamVjdChwcm9wWzBdKSAmJiAhKHByb3AgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCB8fCBwcm9wIGluc3RhbmNlb2YgUnhGb3JtQ29udHJvbCkgJiYgIShwcm9wIGluc3RhbmNlb2YgRm9ybUFycmF5KSkpIHtcclxuICAgICAgICAgICAgICAgIGVudGl0eU9iamVjdFtwcm9wTmFtZV0gPSBwcm9wWzBdXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xyXG4gICAgICAgICAgICAgICAgZW50aXR5T2JqZWN0W3Byb3BOYW1lXSA9IHByb3BcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wgfHwgcHJvcCBpbnN0YW5jZW9mIFJ4Rm9ybUNvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgIGVudGl0eU9iamVjdFtwcm9wTmFtZV0gPSBwcm9wXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0Q29udGFpbmVyLmluaXRQcm9wZXJ0eU9iamVjdChwcm9wTmFtZSwgUFJPUEVSVFksIHVuZGVmaW5lZCwgbW9kZWxJbnN0YW5jZS5jb25zdHJ1Y3RvciA/IG1vZGVsSW5zdGFuY2UgOiB7IGNvbnN0cnVjdG9yOiBtb2RlbEluc3RhbmNlIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0VmFsaWRhdG9yQ29uZmlnKHZhbGlkYXRvckNvbmZpZzogRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBlbnRpdHlPYmplY3Q6IGFueSwgcm9vdFByb3BlcnR5TmFtZTogc3RyaW5nLCBhcnJheVByb3BlcnR5TmFtZT86IHN0cmluZyk6IGFueSB7XHJcbiAgICAgICAgbGV0IGV4Y2x1ZGVQcm9wcyA9IFtdO1xyXG4gICAgICAgIGxldCBpbmNsdWRlUHJvcHMgPSBbXTtcclxuICAgICAgICBsZXQgaWdub3JlVW5kZWZpbmVkUHJvcHMgPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKCF2YWxpZGF0b3JDb25maWcpIHJldHVybiB7fTtcclxuXHJcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvblByb3BzID0gdGhpcy5nZXRPYmplY3RGb3JQcm9wZXJ0eSh2YWxpZGF0b3JDb25maWcuZHluYW1pY1ZhbGlkYXRpb24sIHJvb3RQcm9wZXJ0eU5hbWUsIGFycmF5UHJvcGVydHlOYW1lKTtcclxuICAgICAgICBjb25zdCBhYnN0cmFjdENvbnRyb2xPcHRpb25zID0gdGhpcy5nZXRPYmplY3RGb3JQcm9wZXJ0eSh2YWxpZGF0b3JDb25maWcuYWJzdHJhY3RDb250cm9sT3B0aW9ucywgcm9vdFByb3BlcnR5TmFtZSwgYXJyYXlQcm9wZXJ0eU5hbWUpO1xyXG5cclxuICAgICAgICBpZiAodmFsaWRhdG9yQ29uZmlnLmV4Y2x1ZGVQcm9wcylcclxuICAgICAgICAgICAgZXhjbHVkZVByb3BzID0gdGhpcy5nZXRQcm9wcyh2YWxpZGF0b3JDb25maWcuZXhjbHVkZVByb3BzLCByb290UHJvcGVydHlOYW1lKTtcclxuICAgICAgICBpZiAodmFsaWRhdG9yQ29uZmlnLmluY2x1ZGVQcm9wcylcclxuICAgICAgICAgICAgaW5jbHVkZVByb3BzID0gdGhpcy5nZXRQcm9wcyh2YWxpZGF0b3JDb25maWcuaW5jbHVkZVByb3BzLCByb290UHJvcGVydHlOYW1lKTtcclxuICAgICAgICBpZiAodmFsaWRhdG9yQ29uZmlnLmlnbm9yZVVuZGVmaW5lZFByb3BzKVxyXG4gICAgICAgICAgICBpZ25vcmVVbmRlZmluZWRQcm9wcyA9IHRoaXMuZ2V0UHJvcHModmFsaWRhdG9yQ29uZmlnLmlnbm9yZVVuZGVmaW5lZFByb3BzLCByb290UHJvcGVydHlOYW1lLCB0cnVlKTtcclxuICAgICAgICBpZiAoIU9iamVjdC5rZXlzKGFic3RyYWN0Q29udHJvbE9wdGlvbnMpLmxlbmd0aCAmJiByb290UHJvcGVydHlOYW1lLmVuZHNXaXRoKCcuJykgJiYgdmFsaWRhdG9yQ29uZmlnLmFic3RyYWN0Q29udHJvbE9wdGlvbnMgJiYgdmFsaWRhdG9yQ29uZmlnLmFic3RyYWN0Q29udHJvbE9wdGlvbnNbcm9vdFByb3BlcnR5TmFtZS5zdWJzdHJpbmcoMCwgcm9vdFByb3BlcnR5TmFtZS5sZW5ndGggLSAxKV0pXHJcbiAgICAgICAgICAgIGFic3RyYWN0Q29udHJvbE9wdGlvbnNbJ2dsb2JhbCddID0gdmFsaWRhdG9yQ29uZmlnLmFic3RyYWN0Q29udHJvbE9wdGlvbnNbcm9vdFByb3BlcnR5TmFtZS5zdWJzdHJpbmcoMCwgcm9vdFByb3BlcnR5TmFtZS5sZW5ndGggLSAxKV07XHJcblxyXG4gICAgICAgIGNvbnN0IGR5bmFtaWNWYWxpZGF0aW9uID0gKHZhbGlkYXRvckNvbmZpZy5keW5hbWljVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb25Qcm9wZXJ0eU5hbWUgJiYgZW50aXR5T2JqZWN0W3ZhbGlkYXRvckNvbmZpZy5keW5hbWljVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb25Qcm9wZXJ0eU5hbWVdKSA/IGVudGl0eU9iamVjdFt2YWxpZGF0b3JDb25maWcuZHluYW1pY1ZhbGlkYXRpb25Db25maWd1cmF0aW9uUHJvcGVydHlOYW1lXSA6IHZhbGlkYXRpb25Qcm9wcztcclxuICAgICAgICByZXR1cm4geyBpZ25vcmVVbmRlZmluZWRQcm9wczogaWdub3JlVW5kZWZpbmVkUHJvcHMsIGluY2x1ZGVQcm9wczogaW5jbHVkZVByb3BzLCBkeW5hbWljVmFsaWRhdGlvbjogZHluYW1pY1ZhbGlkYXRpb24sIGV4Y2x1ZGVQcm9wczogZXhjbHVkZVByb3BzLCBhYnN0cmFjdENvbnRyb2xPcHRpb25zOiBhYnN0cmFjdENvbnRyb2xPcHRpb25zIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldE9iamVjdEZvclByb3BlcnR5PFQ+KHJvb3RPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogVCB9LCByb290UHJvcGVydHlOYW1lOiBzdHJpbmcsIGFycmF5UHJvcGVydHlOYW1lPzogc3RyaW5nKTogeyBba2V5OiBzdHJpbmddOiBUIH0ge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdDogeyBba2V5OiBzdHJpbmddOiBUIH0gPSB7fTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgcHJvcE5hbWUgaW4gcm9vdE9iamVjdCkge1xyXG4gICAgICAgICAgICBpZiAoIXByb3BOYW1lLnN0YXJ0c1dpdGgocm9vdFByb3BlcnR5TmFtZSkgJiYgKCFhcnJheVByb3BlcnR5TmFtZSB8fCAhcHJvcE5hbWUuc3RhcnRzV2l0aChhcnJheVByb3BlcnR5TmFtZSkpKVxyXG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBsZXQgc3BsaXRQcm9wID0gcHJvcE5hbWUuc3BsaXQoXCIuXCIsIDIpWzFdO1xyXG4gICAgICAgICAgICBpZiAoIXNwbGl0UHJvcClcclxuICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgcmVzdWx0W3NwbGl0UHJvcF0gPSByb290T2JqZWN0W3Byb3BOYW1lXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRQcm9wcyhwcm9wZXJ0aWVzOiBzdHJpbmdbXSwgcm9vdFByb3BlcnR5TmFtZTogc3RyaW5nLCBpc0lnbm9yZVByb3A6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIGxldCBwcm9wczogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBwcm9wIG9mIHByb3BlcnRpZXMpIHtcclxuICAgICAgICAgICAgaWYgKHByb3AuaW5kZXhPZihyb290UHJvcGVydHlOYW1lKSAhPSAtMSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHNwbGl0UHJvcHMgPSBwcm9wLnNwbGl0KFwiLlwiKTtcclxuICAgICAgICAgICAgICAgIGlmIChzcGxpdFByb3BzLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMucHVzaChzcGxpdFByb3BzWzFdKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3BsaXRQcm9wcy5sZW5ndGggPiAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3BsaXRQcm9wcy5zcGxpY2UoMCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMucHVzaChzcGxpdFByb3BzLmpvaW4oXCIuXCIpKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc0lnbm9yZVByb3AgJiYgcHJvcGVydGllcy5maWx0ZXIoeCA9PiB4ID09IHJvb3RQcm9wZXJ0eU5hbWUucmVwbGFjZSgnLicsICcnKSkubGVuZ3RoID09IDEpXHJcbiAgICAgICAgICAgIHByb3BzLnB1c2goJzpzZWxmOicpO1xyXG5cclxuICAgICAgICByZXR1cm4gcHJvcHM7XHJcbiAgICB9XHJcblxyXG4gICAgZm9ybUdyb3VwPFQ+KG1vZGVsOiBUeXBlPFQ+IHwgeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgZW50aXR5T2JqZWN0PzogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiwgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uPzogRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKTogUnhGb3JtR3JvdXAgfCBGb3JtR3JvdXAgfCBBcHBGb3JtR3JvdXA8VD4ge1xyXG4gICAgICAgIGxldCBqc29uID0gdGhpcy5nZXRPYmplY3QobW9kZWwsIGVudGl0eU9iamVjdCwgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKTtcclxuICAgICAgICBtb2RlbCA9IGpzb24ubW9kZWw7XHJcbiAgICAgICAgZW50aXR5T2JqZWN0ID0ganNvbi5lbnRpdHlPYmplY3Q7XHJcbiAgICAgICAgaWYgKGVudGl0eU9iamVjdC5jb25zdHJ1Y3RvciAhPSBtb2RlbCAmJiAhdGhpcy5pc0dyb3VwQ2FsbGVkKSB7XHJcbiAgICAgICAgICAgIGVudGl0eU9iamVjdCA9IGpzb24uZW50aXR5T2JqZWN0ID0gdGhpcy51cGRhdGVPYmplY3QobW9kZWwsIGpzb24uZW50aXR5T2JqZWN0LCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24gPSBqc29uLmZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbjtcclxuICAgICAgICBpZiAoZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKVxyXG4gICAgICAgICAgICB0aGlzLmV4dHJhY3RFeHByZXNzaW9ucyhmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pO1xyXG4gICAgICAgIGxldCBpbnN0YW5jZUNvbnRhaW5lcjogSW5zdGFuY2VDb250YWluZXIgPSB0aGlzLmdldEluc3RhbmNlQ29udGFpbmVyKG1vZGVsLCBlbnRpdHlPYmplY3QpO1xyXG4gICAgICAgIHRoaXMuY2hlY2tPYmplY3RQcm9wQWRkaXRpb25hbFZhbGlkYXRpb24oaW5zdGFuY2VDb250YWluZXIsIGVudGl0eU9iamVjdCwgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKTtcclxuICAgICAgICBsZXQgZm9ybUdyb3VwT2JqZWN0ID0ge307XHJcbiAgICAgICAgbGV0IGV4dGVuZGVkUHJvcGVydGllcyA9IHt9O1xyXG4gICAgICAgIGxldCBmb3JtQ2hpbGRHcm91cCA9IHVuZGVmaW5lZDtcclxuICAgICAgICBsZXQgZm9ybUFycmF5R3JvdXAgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdmFyIGFkZGl0aW9uYWxWYWxpZGF0aW9uczogeyBba2V5OiBzdHJpbmddOiBQcm9wVmFsaWRhdGlvbkNvbmZpZyB9ID0ge307XHJcbiAgICAgICAgaW5zdGFuY2VDb250YWluZXIucHJvcGVydGllcy5mb3JFYWNoKHByb3BlcnR5ID0+IHtcclxuICAgICAgICAgICAgbGV0IGlzSW5jbHVkZVByb3AgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmV4Y2x1ZGVQcm9wcyAmJiBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uZXhjbHVkZVByb3BzLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgICAgICAgICAgaXNJbmNsdWRlUHJvcCA9IGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5leGNsdWRlUHJvcHMuaW5kZXhPZihwcm9wZXJ0eS5uYW1lKSA9PSAtMVxyXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5keW5hbWljVmFsaWRhdGlvbilcclxuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsVmFsaWRhdGlvbnMgPSBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uZHluYW1pY1ZhbGlkYXRpb247XHJcbiAgICAgICAgICAgICAgICBpZiAoZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmluY2x1ZGVQcm9wcyAmJiBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uaW5jbHVkZVByb3BzLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgICAgICAgICAgaXNJbmNsdWRlUHJvcCA9IGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5pbmNsdWRlUHJvcHMuaW5kZXhPZihwcm9wZXJ0eS5uYW1lKSAhPSAtMVxyXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5pZ25vcmVVbmRlZmluZWRQcm9wcyAmJiBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uaWdub3JlVW5kZWZpbmVkUHJvcHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlzSW5jbHVkZVByb3AgPSAhKHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PSBQUk9QRVJUWSAmJiAhUmVnZXhWYWxpZGF0b3IuaXNOb3RCbGFuayhqc29uLmVudGl0eU9iamVjdFtwcm9wZXJ0eS5uYW1lXSkgJiYgKGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5pZ25vcmVVbmRlZmluZWRQcm9wcy5pbmRleE9mKHByb3BlcnR5Lm5hbWUpICE9PSAtMSB8fCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uaWdub3JlVW5kZWZpbmVkUHJvcHMuaW5kZXhPZihcIjpzZWxmOlwiKSAhPT0gLTEpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5pZ25vcmUpXHJcbiAgICAgICAgICAgICAgICBpc0luY2x1ZGVQcm9wID0gIXByb3BlcnR5Lmlnbm9yZS5jYWxsKGpzb24uZW50aXR5T2JqZWN0LCBqc29uLmVudGl0eU9iamVjdCk7XHJcbiAgICAgICAgICAgIGlmIChpc0luY2x1ZGVQcm9wKSB7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHByb3BlcnR5LnByb3BlcnR5VHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgUFJPUEVSVFk6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGVudGl0eU9iamVjdFtwcm9wZXJ0eS5uYW1lXSBpbnN0YW5jZW9mIEZvcm1Db250cm9sIHx8IGVudGl0eU9iamVjdFtwcm9wZXJ0eS5uYW1lXSBpbnN0YW5jZW9mIFJ4Rm9ybUNvbnRyb2wpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcHJvcGVydHlWYWxpZGF0b3JzID0gaW5zdGFuY2VDb250YWluZXIucHJvcGVydHlBbm5vdGF0aW9ucy5maWx0ZXIodCA9PiB0LnByb3BlcnR5TmFtZSA9PSBwcm9wZXJ0eS5uYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzYW5pdGl6ZVZhbHVlID0gc3VwZXIuc2FuaXRpemVWYWx1ZShpbnN0YW5jZUNvbnRhaW5lciwgcHJvcGVydHkubmFtZSwgc3VwZXIuZ2V0RGVmYXVsdFZhbHVlKHByb3BlcnR5LCBlbnRpdHlPYmplY3RbcHJvcGVydHkubmFtZV0sIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiksIGpzb24uZW50aXR5T2JqZWN0LCBPYmplY3QuYXNzaWduKHt9LCBqc29uLmVudGl0eU9iamVjdCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudGl0eU9iamVjdFtwcm9wZXJ0eS5uYW1lXSA9PT0gdW5kZWZpbmVkICYmIHNhbml0aXplVmFsdWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5T2JqZWN0W3Byb3BlcnR5Lm5hbWVdID0gc2FuaXRpemVWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWxpZGF0b3JzID0gdGhpcy5hZGRGb3JtQ29udHJvbChwcm9wZXJ0eSwgcHJvcGVydHlWYWxpZGF0b3JzLCBhZGRpdGlvbmFsVmFsaWRhdGlvbnNbcHJvcGVydHkubmFtZV0sIGluc3RhbmNlQ29udGFpbmVyLCBlbnRpdHlPYmplY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFic3RyYWN0Q29udHJvbE9wdGlvbnM6IEFic3RyYWN0Q29udHJvbE9wdGlvbnMgPSB7IHZhbGlkYXRvcnM6IHZhbGlkYXRvcnMsIGFzeW5jVmFsaWRhdG9yczogdGhpcy5hZGRBc3luY1ZhbGlkYXRpb24ocHJvcGVydHksIHByb3BlcnR5VmFsaWRhdG9ycywgYWRkaXRpb25hbFZhbGlkYXRpb25zW3Byb3BlcnR5Lm5hbWVdKSB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzdHJhY3RDb250cm9sT3B0aW9ucyA9IHRoaXMuZ2V0QWJzdHJhY3RDb250cm9sT3B0aW9ucyhwcm9wZXJ0eS5uYW1lLCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIGFic3RyYWN0Q29udHJvbE9wdGlvbnMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkudXBkYXRlT24gJiYgIWFic3RyYWN0Q29udHJvbE9wdGlvbnMudXBkYXRlT24pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzdHJhY3RDb250cm9sT3B0aW9ucy51cGRhdGVPbiA9IHByb3BlcnR5LnVwZGF0ZU9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwT2JqZWN0W3Byb3BlcnR5Lm5hbWVdID0gbmV3IFJ4Rm9ybUNvbnRyb2woc2FuaXRpemVWYWx1ZSwgYWJzdHJhY3RDb250cm9sT3B0aW9ucywgW10sIGpzb24uZW50aXR5T2JqZWN0LCBPYmplY3QuYXNzaWduKHt9LCBqc29uLmVudGl0eU9iamVjdCksIHByb3BlcnR5Lm5hbWUsIGluc3RhbmNlQ29udGFpbmVyLnNhbml0aXplcnNbcHJvcGVydHkubmFtZV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc05lc3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cE9iamVjdFtwcm9wZXJ0eS5uYW1lXSA9IHN1cGVyLmdldERlZmF1bHRWYWx1ZShwcm9wZXJ0eSwgZW50aXR5T2JqZWN0W3Byb3BlcnR5Lm5hbWVdLCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRlbmRlZFByb3BlcnRpZXNbcHJvcGVydHkubmFtZV0gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIE9CSkVDVF9QUk9QRVJUWTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9iamVjdFZhbHVlID0gZW50aXR5T2JqZWN0W3Byb3BlcnR5Lm5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0VmFsdWUgJiYgb2JqZWN0VmFsdWUgaW5zdGFuY2VvZiBPYmplY3QgJiYgIShvYmplY3RWYWx1ZSBpbnN0YW5jZW9mIEZvcm1Hcm91cCB8fCBvYmplY3RWYWx1ZSBpbnN0YW5jZW9mIFJ4Rm9ybUdyb3VwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc05lc3RlZEJpbmRpbmcgPSB0aGlzLmlzTmVzdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZUNvbnRhaW5lciAmJiBpbnN0YW5jZUNvbnRhaW5lci5jb25kaXRpb25hbE9iamVjdFByb3BzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uYWxPYmplY3RQcm9wcyA9IGluc3RhbmNlQ29udGFpbmVyLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMuZmlsdGVyKHQgPT4gdC5vYmplY3RQcm9wTmFtZSA9PSBwcm9wZXJ0eS5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uYWxWYWxpZGF0aW9uSW5zdGFuY2UgJiYgdGhpcy5jb25kaXRpb25hbFZhbGlkYXRpb25JbnN0YW5jZS5jb25kaXRpb25hbE9iamVjdFByb3BzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRlckNvbmZpZ3VyYXRpb25Db25kaXRpb25hbE9iamVjdFByb3BzID0gdGhpcy5jb25kaXRpb25hbFZhbGlkYXRpb25JbnN0YW5jZS5jb25kaXRpb25hbE9iamVjdFByb3BzLmZpbHRlcih0ID0+IHQub2JqZWN0UHJvcE5hbWUgPT0gcHJvcGVydHkubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5mb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3JbcHJvcGVydHkubmFtZV0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Rm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yID0gdGhpcy5mb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3JbcHJvcGVydHkubmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgb2JqZWN0VmFsaWRhdGlvbkNvbmZpZyA9IHRoaXMuZ2V0VmFsaWRhdG9yQ29uZmlnKGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiwgb2JqZWN0VmFsdWUsIGAke3Byb3BlcnR5Lm5hbWV9LmApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZW50aXR5ID0gcHJvcGVydHkuZW50aXR5UHJvdmlkZXIgPyBwcm9wZXJ0eS5lbnRpdHlQcm92aWRlci5jYWxsKGVudGl0eU9iamVjdCkgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBPYmplY3RbcHJvcGVydHkubmFtZV0gPSB0aGlzLmZvcm1Hcm91cChlbnRpdHkgfHwgcHJvcGVydHkuZW50aXR5IHx8IHRoaXMuZ2V0RW50aXR5KG9iamVjdFZhbHVlLCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIHByb3BlcnR5Lm5hbWUsIHRydWUpLCBvYmplY3RWYWx1ZSwgb2JqZWN0VmFsaWRhdGlvbkNvbmZpZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRlckNvbmZpZ3VyYXRpb25Db25kaXRpb25hbE9iamVjdFByb3BzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTmVzdGVkQmluZGluZyA9IHRoaXMuaXNOZXN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvYmplY3RWYWx1ZSBpbnN0YW5jZW9mIEZvcm1Hcm91cCB8fCBvYmplY3RWYWx1ZSBpbnN0YW5jZW9mIFJ4Rm9ybUdyb3VwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwT2JqZWN0W3Byb3BlcnR5Lm5hbWVdID0gb2JqZWN0VmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQVJSQVlfUFJPUEVSVFk6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnJheU9iamVjdFZhbHVlID0gZW50aXR5T2JqZWN0W3Byb3BlcnR5Lm5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJyYXlPYmplY3RWYWx1ZSAmJiBhcnJheU9iamVjdFZhbHVlIGluc3RhbmNlb2YgQXJyYXkgJiYgIShhcnJheU9iamVjdFZhbHVlIGluc3RhbmNlb2YgRm9ybUFycmF5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc05lc3RlZEJpbmRpbmcgPSB0aGlzLmlzTmVzdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3JtQXJyYXlHcm91cCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlbnRpdHkgPSBwcm9wZXJ0eS5lbnRpdHlQcm92aWRlciA/IHByb3BlcnR5LmVudGl0eVByb3ZpZGVyLmNhbGwoZW50aXR5T2JqZWN0KSA6IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvYmplY3RWYWxpZGF0aW9uQ29uZmlnID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHN1Yk9iamVjdCBvZiBhcnJheU9iamVjdFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlQ29udGFpbmVyICYmIGluc3RhbmNlQ29udGFpbmVyLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uYWxPYmplY3RQcm9wcyA9IGluc3RhbmNlQ29udGFpbmVyLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMuZmlsdGVyKHQgPT4gdC5vYmplY3RQcm9wTmFtZSA9PSBwcm9wZXJ0eS5uYW1lICYmIHQuYXJyYXlJbmRleCA9PSBpbmRleClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb25kaXRpb25hbFZhbGlkYXRpb25JbnN0YW5jZSAmJiB0aGlzLmNvbmRpdGlvbmFsVmFsaWRhdGlvbkluc3RhbmNlLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRlckNvbmZpZ3VyYXRpb25Db25kaXRpb25hbE9iamVjdFByb3BzID0gdGhpcy5jb25kaXRpb25hbFZhbGlkYXRpb25JbnN0YW5jZS5jb25kaXRpb25hbE9iamVjdFByb3BzLmZpbHRlcih0ID0+IHQub2JqZWN0UHJvcE5hbWUgPT0gcHJvcGVydHkubmFtZSAmJiB0LmFycmF5SW5kZXggPT0gaW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcltwcm9wZXJ0eS5uYW1lXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Rm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yID0gdGhpcy5mb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3JbcHJvcGVydHkubmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0VmFsaWRhdGlvbkNvbmZpZyA9IHRoaXMuZ2V0VmFsaWRhdG9yQ29uZmlnKGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiwgc3ViT2JqZWN0LCBgJHtwcm9wZXJ0eS5uYW1lfS5gLCBgJHtwcm9wZXJ0eS5uYW1lfVske2luZGV4fV0uYClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQXJyYXlHcm91cC5wdXNoKHRoaXMuZm9ybUdyb3VwKGVudGl0eSB8fCBwcm9wZXJ0eS5lbnRpdHkgfHwgdGhpcy5nZXRFbnRpdHkoc3ViT2JqZWN0LCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIHByb3BlcnR5Lm5hbWUsIHRydWUpLCBzdWJPYmplY3QsIG9iamVjdFZhbGlkYXRpb25Db25maWcpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uYWxPYmplY3RQcm9wcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRlckNvbmZpZ3VyYXRpb25Db25kaXRpb25hbE9iamVjdFByb3BzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYWJzdHJhY3RDb250cm9sT3B0aW9ucyA9IHRoaXMuZ2V0QWJzdHJhY3RDb250cm9sT3B0aW9ucyhwcm9wZXJ0eS5uYW1lLCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24gLCB7IH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBPYmplY3RbcHJvcGVydHkubmFtZV0gPSBuZXcgUnhGb3JtQXJyYXkoYXJyYXlPYmplY3RWYWx1ZSwgZm9ybUFycmF5R3JvdXAsIGFic3RyYWN0Q29udHJvbE9wdGlvbnMsIG51bGwsIHByb3BlcnR5LmFycmF5Q29uZmlnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSZWFjdGl2ZUZvcm1Db25maWcuYXV0b0luc3RhbmNlUHVzaCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5T2JqZWN0VmFsdWUucHVzaCA9IChpbnN0YW5jZTogYW55W10pOiBudW1iZXIgPT4geyBsZXQgZm9ybUdyb3VwID0gdGhpcy5mb3JtR3JvdXAoaW5zdGFuY2UuY29uc3RydWN0b3IsIGluc3RhbmNlLCBvYmplY3RWYWxpZGF0aW9uQ29uZmlnKTsgZm9ybUdyb3VwT2JqZWN0W3Byb3BlcnR5Lm5hbWVdLnB1c2goZm9ybUdyb3VwLCB7IGlzQWRkZWRJbnN0YW5jZTogdHJ1ZSB9KTsgcmV0dXJuIDA7IH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlPYmplY3RWYWx1ZS5zcGxpY2UgPSAoc3RhcnQsIGRlbGV0ZUNvdW50KTogYW55W10gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZW5kID0gKHN0YXJ0ICsgZGVsZXRlQ291bnQpIC0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBPYmplY3RbcHJvcGVydHkubmFtZV0ucmVtb3ZlQXQoaSwgeyBpc1JlbW92ZWRJbnN0YW5jZTogdHJ1ZSB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc05lc3RlZEJpbmRpbmcgPSB0aGlzLmlzTmVzdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJyYXlPYmplY3RWYWx1ZSBpbnN0YW5jZW9mIEZvcm1BcnJheSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cE9iamVjdFtwcm9wZXJ0eS5uYW1lXSA9IGFycmF5T2JqZWN0VmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByb3BlcnR5LmFycmF5Q29uZmlnICYmIHByb3BlcnR5LmFycmF5Q29uZmlnLmNyZWF0ZUJsYW5rKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwT2JqZWN0W3Byb3BlcnR5Lm5hbWVdID0gbmV3IFJ4Rm9ybUFycmF5KFtdLCBbXSwgbnVsbCwgbnVsbCwgcHJvcGVydHkuYXJyYXlDb25maWcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzTmVzdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uYWxWYWxpZGF0aW9uSW5zdGFuY2UgPSB7fTtcclxuICAgICAgICAgICAgdGhpcy5idWlsZGVyQ29uZmlndXJhdGlvbkNvbmRpdGlvbmFsT2JqZWN0UHJvcHMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGFic3RyYWN0Q29udHJvbE9wdGlvbnM6IEFic3RyYWN0Q29udHJvbE9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtdLFxyXG4gICAgICAgICAgICBhc3luY1ZhbGlkYXRvcnM6IFtdLFxyXG4gICAgICAgICAgICB1cGRhdGVPbjogZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uICYmIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5hYnN0cmFjdENvbnRyb2xPcHRpb25zICYmIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5hYnN0cmFjdENvbnRyb2xPcHRpb25zWydnbG9iYWwnXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5hYnN0cmFjdENvbnRyb2xPcHRpb25zWydnbG9iYWwnXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICBhYnN0cmFjdENvbnRyb2xPcHRpb25zID0gdGhpcy5nZXRBYnN0cmFjdENvbnRyb2xPcHRpb25zKFwiZ2xvYmFsXCIsIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiwgYWJzdHJhY3RDb250cm9sT3B0aW9ucyk7XHJcbiAgICAgICAgbGV0IGZvcm1Hcm91cCA9IG5ldyBSeEZvcm1Hcm91cChqc29uLm1vZGVsLCBqc29uLmVudGl0eU9iamVjdCwgZm9ybUdyb3VwT2JqZWN0LCBhYnN0cmFjdENvbnRyb2xPcHRpb25zKTtcclxuICAgICAgICBpZiAoZGVmYXVsdENvbnRhaW5lci5pc0V4cGVyaW1lbnRhbCkge1xyXG4gICAgICAgICAgICBqc29uLmVudGl0eU9iamVjdFtcImZvcm1Hcm91cFwiXSA9IGZvcm1Hcm91cDtcclxuICAgICAgICAgICAgdGhpcy5vdmVycmlkZVByb3BlcnRpZXMoZm9ybUdyb3VwLCBqc29uLmVudGl0eU9iamVjdCwgZXh0ZW5kZWRQcm9wZXJ0aWVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzTmVzdGVkQmluZGluZyAmJiAhdGhpcy5pc0dyb3VwQ2FsbGVkKVxyXG4gICAgICAgICAgICBmb3JtR3JvdXAucmVmcmVzaERpc2FibGUoKTtcclxuICAgICAgICByZXR1cm4gZm9ybUdyb3VwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG92ZXJyaWRlUHJvcGVydGllcyhmb3JtR3JvdXA6IFJ4Rm9ybUdyb3VwLCBlbnRpdHlPYmplY3Q6IGFueSwgcHJvcGVydGllczogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0pIHtcclxuICAgICAgICBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKS5mb3JFYWNoKHQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm92ZXJyaWRlUHJvcChlbnRpdHlPYmplY3QsIHQsIGZvcm1Hcm91cCk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0QWJzdHJhY3RDb250cm9sT3B0aW9ucyhuYW1lOiBzdHJpbmcsIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbjogRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBhYnN0cmFjdENvbnRyb2xPcHRpb25zOiBBYnN0cmFjdENvbnRyb2xPcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiAmJiBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uYWJzdHJhY3RDb250cm9sT3B0aW9ucyAmJiBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uYWJzdHJhY3RDb250cm9sT3B0aW9uc1tuYW1lXSlcclxuICAgICAgICAgICAgYWJzdHJhY3RDb250cm9sT3B0aW9ucy51cGRhdGVPbiA9IGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5hYnN0cmFjdENvbnRyb2xPcHRpb25zW25hbWVdO1xyXG5cclxuICAgICAgICBjb25zdCBjb250cm9sT3B0aW9ucyA9IGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiA/IGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5iYXNlQWJzdHJhY3RDb250cm9sT3B0aW9ucyA6IG51bGw7XHJcbiAgICAgICAgaWYgKGNvbnRyb2xPcHRpb25zICYmIGNvbnRyb2xPcHRpb25zW25hbWVdKSB7XHJcbiAgICAgICAgICAgIGlmIChjb250cm9sT3B0aW9uc1tuYW1lXS51cGRhdGVPbilcclxuICAgICAgICAgICAgICAgIGFic3RyYWN0Q29udHJvbE9wdGlvbnMudXBkYXRlT24gPSBjb250cm9sT3B0aW9uc1tuYW1lXS51cGRhdGVPbjtcclxuICAgICAgICAgICAgaWYgKGNvbnRyb2xPcHRpb25zW25hbWVdLnZhbGlkYXRvcnMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbnRyb2xPcHRpb25zW25hbWVdLnZhbGlkYXRvcnMpKVxyXG4gICAgICAgICAgICAgICAgICAgICg8VmFsaWRhdG9yRm5bXT5jb250cm9sT3B0aW9uc1tuYW1lXS52YWxpZGF0b3JzKS5mb3JFYWNoKHZhbGlkYXRvciA9PiAoPFZhbGlkYXRvckZuW10+YWJzdHJhY3RDb250cm9sT3B0aW9ucy52YWxpZGF0b3JzKS5wdXNoKHZhbGlkYXRvcikpXHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgKDxWYWxpZGF0b3JGbltdPmFic3RyYWN0Q29udHJvbE9wdGlvbnMudmFsaWRhdG9ycykucHVzaCg8VmFsaWRhdG9yRm4+Y29udHJvbE9wdGlvbnNbbmFtZV0udmFsaWRhdG9ycyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjb250cm9sT3B0aW9uc1tuYW1lXS5hc3luY1ZhbGlkYXRvcnMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbnRyb2xPcHRpb25zW25hbWVdLmFzeW5jVmFsaWRhdG9ycykpXHJcbiAgICAgICAgICAgICAgICAgICAgKDxWYWxpZGF0b3JGbltdPmNvbnRyb2xPcHRpb25zW25hbWVdLmFzeW5jVmFsaWRhdG9ycykuZm9yRWFjaCh2YWxpZGF0b3IgPT4gKDxWYWxpZGF0b3JGbltdPmFic3RyYWN0Q29udHJvbE9wdGlvbnMuYXN5bmNWYWxpZGF0b3JzKS5wdXNoKHZhbGlkYXRvcikpXHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgKDxWYWxpZGF0b3JGbltdPmFic3RyYWN0Q29udHJvbE9wdGlvbnMuYXN5bmNWYWxpZGF0b3JzKS5wdXNoKDxWYWxpZGF0b3JGbj5jb250cm9sT3B0aW9uc1tuYW1lXS52YWxpZGF0b3JzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYWJzdHJhY3RDb250cm9sT3B0aW9ucztcclxuICAgIH1cclxuICAgIHByaXZhdGUgb3ZlcnJpZGVQcm9wKGVudGl0eU9iamVjdDogYW55LCBwcm9wTmFtZTogc3RyaW5nLCBmb3JtR3JvdXA6IFJ4Rm9ybUdyb3VwKSB7XHJcbiAgICAgICAgbGV0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdC5nZXRQcm90b3R5cGVPZihlbnRpdHlPYmplY3QpLCBwcm9wTmFtZSk7XHJcbiAgICAgICAgbGV0IHZhbHVlID0gZW50aXR5T2JqZWN0W3Byb3BOYW1lXTtcclxuICAgICAgICBsZXQgb2xkVmFsdWUgPSBudWxsO1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbnRpdHlPYmplY3QsIHByb3BOYW1lLCB7XHJcbiAgICAgICAgICAgIGdldDogKCkgPT4geyByZXR1cm4gZGVzY3JpcHRvciA/IGRlc2NyaXB0b3IuZ2V0LmNhbGwoZW50aXR5T2JqZWN0KSA6IHZhbHVlIH0sXHJcbiAgICAgICAgICAgIHNldDogKHYpID0+IHtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gdjtcclxuICAgICAgICAgICAgICAgIGlmIChvbGRWYWx1ZSAhPSB2KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0LmNhbGwoZW50aXR5T2JqZWN0LCB2KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWZvcm1Hcm91cC5jaGFuZ2luZyAmJiBmb3JtR3JvdXAuY29udHJvbHNbcHJvcE5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1twcm9wTmFtZV0uc2V0VmFsdWUodik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgb2xkVmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxufVxyXG4iXX0=
559
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicngtZm9ybS1idWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3NyYy9saWIvZm9ybS12YWxpZGF0b3JzL3NlcnZpY2VzL3J4LWZvcm0tYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBNEMsU0FBUyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkksT0FBTyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3ZKLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBSXJELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUN0RyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDekUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRXZFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFD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QUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUEsQ0FBQyxDQUFDO1lBQzVFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNQLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQ1YsSUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO29CQUNmLElBQUksVUFBVTt3QkFDVixVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ3pDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUU7d0JBQ3JELFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUM1QztpQkFDSjtnQkFDRCxRQUFRLEdBQUcsQ0FBQyxDQUFDO1lBQ2pCLENBQUM7U0FDSixDQUFDLENBQUE7SUFDTixDQUFDOzs2SEFuakJRLGFBQWE7aUlBQWIsYUFBYTsyRkFBYixhQUFhO2tCQUR6QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbE9wdGlvbnMsIEFzeW5jVmFsaWRhdG9yRm4sIEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvckZuIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IEFSUkFZX1BST1BFUlRZLCBCT09MRUFOLCBGVU5DVElPTl9TVFJJTkcsIE1PREVMLCBOVU1CRVIsIE9CSkVDVF9QUk9QRVJUWSwgT0JKRUNUX1NUUklORywgUFJPUEVSVFksIFJYX1dFQl9WQUxJREFUT1IsIFNUUklORyB9IGZyb20gXCIuLi9jb25zdFwiO1xyXG5pbXBvcnQgeyBBUFBfVkFMSURBVE9SUyB9IGZyb20gJy4uL2NvbnN0L2FwcC12YWxpZGF0b3JzLmNvbnN0JztcclxuaW1wb3J0IHsgZGVmYXVsdENvbnRhaW5lciB9IGZyb20gJy4uL2NvcmUvZGVmYXVsdENvbnRhaW5lcic7XHJcbmltcG9ydCB7IERlY29yYXRvckNvbmZpZ3VyYXRpb24sIEluc3RhbmNlQ29udGFpbmVyLCBQcm9wZXJ0eUluZm8gfSBmcm9tICcuLi9jb3JlL3ZhbGlkYXRvci5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiLi4vY29yZS92YWxpZGF0b3Iuc3RhdGljXCI7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi9tb2RlbHNcIjtcclxuaW1wb3J0IHsgSUFic3RyYWN0Q29udHJvbCB9IGZyb20gXCIuLi9tb2RlbHMvaW50ZXJmYWNlL2ktYWJzdHJhY3QtY29udHJvbFwiO1xyXG5pbXBvcnQgeyBBcHBGb3JtR3JvdXAgfSBmcm9tICcuLi9tb2RlbHMvaW50ZXJmYWNlL2ktZm9ybS1ncm91cCc7XHJcbmltcG9ydCB7IFByb3BWYWxpZGF0aW9uQ29uZmlnIH0gZnJvbSBcIi4uL21vZGVscy9wcm9wLXZhbGlkYXRpb24tY29uZmlnXCI7XHJcbmltcG9ydCB7IGFuZFZhbGlkYXRvciB9IGZyb20gJy4uL3JlYWN0aXZlLWZvcm0tdmFsaWRhdG9ycy9hbmQudmFsaWRhdG9yJztcclxuaW1wb3J0IHsgY29uZGl0aW9uYWxDaGFuZ2VWYWxpZGF0b3IgfSBmcm9tIFwiLi4vcmVhY3RpdmUtZm9ybS12YWxpZGF0b3JzL2NvbmRpdGlvbmFsLWNoYW5nZS52YWxpZGF0b3JcIjtcclxuaW1wb3J0IHsgbm90VmFsaWRhdG9yIH0gZnJvbSAnLi4vcmVhY3RpdmUtZm9ybS12YWxpZGF0b3JzL25vdC52YWxpZGF0b3InO1xyXG5pbXBvcnQgeyBvclZhbGlkYXRvciB9IGZyb20gJy4uL3JlYWN0aXZlLWZvcm0tdmFsaWRhdG9ycy9vci52YWxpZGF0b3InO1xyXG5pbXBvcnQgeyBUeXBlIH0gZnJvbSBcIi4uL3V0aWxcIjtcclxuaW1wb3J0IHsgTGlucSB9IGZyb20gJy4uL3V0aWwvbGlucSc7XHJcbmltcG9ydCB7IFJlYWN0aXZlRm9ybUNvbmZpZyB9IGZyb20gJy4uL3V0aWwvcmVhY3RpdmUtZm9ybS1jb25maWcnO1xyXG5pbXBvcnQgeyBSZWdleFZhbGlkYXRvciB9IGZyb20gXCIuLi91dGlsL3JlZ2V4LXZhbGlkYXRvclwiO1xyXG5pbXBvcnQgeyBCYXNlRm9ybUJ1aWxkZXIgfSBmcm9tICcuL2Jhc2UtZm9ybS1idWlsZGVyJztcclxuaW1wb3J0IHsgUnhGb3JtQ29udHJvbCB9IGZyb20gJy4vZm9ybS1jb250cm9sJztcclxuaW1wb3J0IHsgUnhGb3JtQXJyYXkgfSBmcm9tICcuL3J4LWZvcm0tYXJyYXknO1xyXG5pbXBvcnQgeyBSeEZvcm1Hcm91cCB9IGZyb20gJy4vcngtZm9ybS1ncm91cCc7XHJcblxyXG5cclxuXHJcbmNvbnN0IExPR0lDQUxfVkFMSURBVE9SUzogeyBba2V5OiBzdHJpbmddOiBGdW5jdGlvbiB9ID0geyBhbmQ6IGFuZFZhbGlkYXRvciwgb3I6IG9yVmFsaWRhdG9yLCBub3Q6IG5vdFZhbGlkYXRvciB9XHJcbmNvbnN0IEFTWU5DOiBzdHJpbmcgPSBcImFzeW5jXCJcclxuY29uc3QgRU5USVRZX09CSkVDVDogc3RyaW5nID0gXCJlbnRpdHlPYmplY3RcIjtcclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgUnhGb3JtQnVpbGRlciBleHRlbmRzIEJhc2VGb3JtQnVpbGRlciB7XHJcbiAgICBwcml2YXRlIG5lc3RlZFByb3A6IHN0cmluZztcclxuICAgIHByaXZhdGUgY29uZGl0aW9uYWxPYmplY3RQcm9wczogYW55W10gPSBbXTtcclxuICAgIHByaXZhdGUgY29uZGl0aW9uYWxWYWxpZGF0aW9uSW5zdGFuY2U6IGFueSA9IHt9O1xyXG4gICAgcHJpdmF0ZSBidWlsZGVyQ29uZmlndXJhdGlvbkNvbmRpdGlvbmFsT2JqZWN0UHJvcHM6IGFueVtdID0gW107XHJcbiAgICBwcml2YXRlIGZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcjogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xyXG4gICAgcHJpdmF0ZSBjdXJyZW50Rm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XHJcbiAgICBwcml2YXRlIGlzTmVzdGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGlzR3JvdXBDYWxsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgaXNOZXN0ZWRCaW5kaW5nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIHByaXZhdGUgZ2V0SW5zdGFuY2VDb250YWluZXIoaW5zdGFuY2VGdW5jOiBhbnksIGVudGl0eU9iamVjdDogYW55KTogSW5zdGFuY2VDb250YWluZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmluc3RhY2VQcm92aWRlcihpbnN0YW5jZUZ1bmMsIGVudGl0eU9iamVjdCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRWYWx1ZShmb3JtR3JvdXA6IEZvcm1Hcm91cCwgb2JqZWN0OiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBmb3IgKHZhciBjb2wgaW4gb2JqZWN0KSB7XHJcbiAgICAgICAgICAgIHZhciBjb250cm9sID0gZm9ybUdyb3VwLmdldChbY29sXSk7XHJcbiAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsdWUob2JqZWN0W2NvbF0pO1xyXG4gICAgICAgICAgICBjb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBleHRyYWN0RXhwcmVzc2lvbnMoZm9tckJ1aWxkZXJDb25maWd1cmF0aW9uOiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIH0ge1xyXG4gICAgICAgIGlmIChmb21yQnVpbGRlckNvbmZpZ3VyYXRpb24gJiYgZm9tckJ1aWxkZXJDb25maWd1cmF0aW9uLmR5bmFtaWNWYWxpZGF0aW9uKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGZvbXJCdWlsZGVyQ29uZmlndXJhdGlvbi5keW5hbWljVmFsaWRhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgZGVjb3JhdG9yIGluIGZvbXJCdWlsZGVyQ29uZmlndXJhdGlvbi5keW5hbWljVmFsaWRhdGlvbltwcm9wZXJ0eV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZm9tckJ1aWxkZXJDb25maWd1cmF0aW9uLmR5bmFtaWNWYWxpZGF0aW9uW3Byb3BlcnR5XVtkZWNvcmF0b3JdLmNvbmRpdGlvbmFsRXhwcmVzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29sdW1ucyA9IExpbnEuZXhwcmVzc2lvbkNvbHVtbnMoZm9tckJ1aWxkZXJDb25maWd1cmF0aW9uLmR5bmFtaWNWYWxpZGF0aW9uW3Byb3BlcnR5XVtkZWNvcmF0b3JdLmNvbmRpdGlvbmFsRXhwcmVzc2lvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDb250YWluZXIuYWRkQ2hhbmdlVmFsaWRhdGlvbih0aGlzLmNvbmRpdGlvbmFsVmFsaWRhdGlvbkluc3RhbmNlLCBwcm9wZXJ0eSwgY29sdW1ucyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYWRkQXN5bmNWYWxpZGF0aW9uKHByb3BlcnR5OiBQcm9wZXJ0eUluZm8sIHByb3BlcnR5VmFsaWRhdG9yczogRGVjb3JhdG9yQ29uZmlndXJhdGlvbltdLCBwcm9wVmFsaWRhdGlvbkNvbmZpZzogUHJvcFZhbGlkYXRpb25Db25maWcpIHtcclxuICAgICAgICBsZXQgYXN5bmNWYWxpZGF0b3JzID0gW107XHJcbiAgICAgICAgaWYgKHByb3BlcnR5VmFsaWRhdG9ycykge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBwcm9wZXJ0eVZhbGlkYXRvciBvZiBwcm9wZXJ0eVZhbGlkYXRvcnMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eVZhbGlkYXRvci5pc0FzeW5jKVxyXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5VmFsaWRhdG9yLmNvbmZpZy5mb3JFYWNoKHQgPT4geyBhc3luY1ZhbGlkYXRvcnMucHVzaCh0KSB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocHJvcFZhbGlkYXRpb25Db25maWcgJiYgcHJvcFZhbGlkYXRpb25Db25maWdbQVNZTkNdKSB7XHJcbiAgICAgICAgICAgIHByb3BWYWxpZGF0aW9uQ29uZmlnW0FTWU5DXS5mb3JFYWNoKHQgPT4geyBhc3luY1ZhbGlkYXRvcnMucHVzaCh0KSB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXN5bmNWYWxpZGF0b3JzO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYWRkRm9ybUNvbnRyb2wocHJvcGVydHk6IFByb3BlcnR5SW5mbywgcHJvcGVydHlWYWxpZGF0b3JzOiBEZWNvcmF0b3JDb25maWd1cmF0aW9uW10sIHByb3BWYWxpZGF0aW9uQ29uZmlnOiBQcm9wVmFsaWRhdGlvbkNvbmZpZywgaW5zdGFuY2U6IEluc3RhbmNlQ29udGFpbmVyLCBlbnRpdHk6IGFueSkge1xyXG4gICAgICAgIGxldCB2YWxpZGF0b3JzID0gW107XHJcbiAgICAgICAgbGV0IGNvbHVtbnMgPSBbXTtcclxuICAgICAgICBpZiAoKGluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzICYmIGluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzW3Byb3BlcnR5Lm5hbWVdKSB8fCAodGhpcy5jb25kaXRpb25hbFZhbGlkYXRpb25JbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wcyAmJiB0aGlzLmNvbmRpdGlvbmFsVmFsaWRhdGlvbkluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzW3Byb3BlcnR5Lm5hbWVdKSkge1xyXG4gICAgICAgICAgICBsZXQgcHJvcHMgPSBbXTtcclxuICAgICAgICAgICAgaWYgKChpbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wcyAmJiBpbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1twcm9wZXJ0eS5uYW1lXSkpXHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1twcm9wZXJ0eS5uYW1lXS5mb3JFYWNoKHQgPT4gcHJvcHMucHVzaCh0KSlcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uYWxWYWxpZGF0aW9uSW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHMgJiYgdGhpcy5jb25kaXRpb25hbFZhbGlkYXRpb25JbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1twcm9wZXJ0eS5uYW1lXSlcclxuICAgICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uYWxWYWxpZGF0aW9uSW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHNbcHJvcGVydHkubmFtZV0uZm9yRWFjaCh0ID0+IHByb3BzLnB1c2godCkpO1xyXG4gICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goY29uZGl0aW9uYWxDaGFuZ2VWYWxpZGF0b3IocHJvcHMpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uYWxPYmplY3RQcm9wcy5sZW5ndGggPiAwIHx8IHRoaXMuYnVpbGRlckNvbmZpZ3VyYXRpb25Db25kaXRpb25hbE9iamVjdFByb3BzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgbGV0IHByb3BDb25kaXRpb25zID0gW107XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMpXHJcbiAgICAgICAgICAgICAgICBwcm9wQ29uZGl0aW9ucyA9IHRoaXMuY29uZGl0aW9uYWxPYmplY3RQcm9wcy5maWx0ZXIodCA9PiB0LnByb3BOYW1lID09IHByb3BlcnR5Lm5hbWUpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5idWlsZGVyQ29uZmlndXJhdGlvbkNvbmRpdGlvbmFsT2JqZWN0UHJvcHMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkZXJDb25maWd1cmF0aW9uQ29uZGl0aW9uYWxPYmplY3RQcm9wcy5maWx0ZXIodCA9PiB0LnByb3BOYW1lID09IHByb3BlcnR5Lm5hbWUpLmZvckVhY2godCA9PiBwcm9wQ29uZGl0aW9ucy5wdXNoKHQpKTtcclxuICAgICAgICAgICAgcHJvcENvbmRpdGlvbnMuZm9yRWFjaCh0ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0LnJlZmVyZW5jZVByb3BOYW1lICYmIGNvbHVtbnMuaW5kZXhPZih0LnJlZmVyZW5jZVByb3BOYW1lKSA9PSAtMSlcclxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zLnB1c2godC5yZWZlcmVuY2VQcm9wTmFtZSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGlmIChjb2x1bW5zLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goY29uZGl0aW9uYWxDaGFuZ2VWYWxpZGF0b3IoY29sdW1ucykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBwcm9wZXJ0eVZhbGlkYXRvciBvZiBwcm9wZXJ0eVZhbGlkYXRvcnMpIHtcclxuICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eVZhbGlkYXRvci5pc0FzeW5jKVxyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChwcm9wZXJ0eVZhbGlkYXRvci5hbm5vdGF0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQW5ub3RhdGlvblR5cGVzLnJ1bGU6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChBUFBfVkFMSURBVE9SU1twcm9wZXJ0eVZhbGlkYXRvci5hbm5vdGF0aW9uVHlwZV0ocHJvcGVydHlWYWxpZGF0b3IuY29uZmlnLCBlbnRpdHkpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIEFubm90YXRpb25UeXBlcy5hbmQ6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBbm5vdGF0aW9uVHlwZXMub3I6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBbm5vdGF0aW9uVHlwZXMubm90OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goTE9HSUNBTF9WQUxJREFUT1JTW3Byb3BlcnR5VmFsaWRhdG9yLmFubm90YXRpb25UeXBlXShwcm9wZXJ0eVZhbGlkYXRvci5jb25maWcpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goQVBQX1ZBTElEQVRPUlNbcHJvcGVydHlWYWxpZGF0b3IuYW5ub3RhdGlvblR5cGVdKHByb3BlcnR5VmFsaWRhdG9yLmNvbmZpZykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocHJvcFZhbGlkYXRpb25Db25maWcpXHJcbiAgICAgICAgICAgIHRoaXMuYWRkaXRpb25hbFZhbGlkYXRpb24odmFsaWRhdG9ycywgcHJvcFZhbGlkYXRpb25Db25maWcpO1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRGb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3JbcHJvcGVydHkubmFtZV0pXHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcltwcm9wZXJ0eS5uYW1lXS5mb3JFYWNoKHQgPT4geyB2YWxpZGF0b3JzLnB1c2godCk7IH0pXHJcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRvcnM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGRpdGlvbmFsVmFsaWRhdGlvbih2YWxpZGF0aW9uczogYW55W10sIHByb3BWYWxpZGF0aW9uQ29uZmlnOiBQcm9wVmFsaWRhdGlvbkNvbmZpZyB8IGFueSkge1xyXG4gICAgICAgIGZvciAodmFyIGNvbCBpbiBBbm5vdGF0aW9uVHlwZXMpIHtcclxuICAgICAgICAgICAgaWYgKHByb3BWYWxpZGF0aW9uQ29uZmlnW0Fubm90YXRpb25UeXBlc1tjb2xdXSAmJiBjb2wgIT0gXCJjdXN0b21cIikge1xyXG4gICAgICAgICAgICAgICAgdmFsaWRhdGlvbnMucHVzaChBUFBfVkFMSURBVE9SU1tBbm5vdGF0aW9uVHlwZXNbY29sXV0ocHJvcFZhbGlkYXRpb25Db25maWdbQW5ub3RhdGlvblR5cGVzW2NvbF1dKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoY29sID09IEFubm90YXRpb25UeXBlcy5jdXN0b20gJiYgcHJvcFZhbGlkYXRpb25Db25maWdbQW5ub3RhdGlvblR5cGVzW2NvbF1dKVxyXG4gICAgICAgICAgICAgICAgdmFsaWRhdGlvbnMucHVzaChwcm9wVmFsaWRhdGlvbkNvbmZpZ1tjb2xdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRFbnRpdHk8VD4ob2JqZWN0OiBULCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb246IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiwgcHJvcGVydHlOYW1lOiBzdHJpbmcsIGlzU2FtZU9iamVjdENvbnN0cnVjdG9yOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICBpZiAoZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uICYmIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5nZW5lcmljRW50aXRpZXMgJiYgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmdlbmVyaWNFbnRpdGllc1twcm9wZXJ0eU5hbWVdKVxyXG4gICAgICAgICAgICByZXR1cm4gZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmdlbmVyaWNFbnRpdGllc1twcm9wZXJ0eU5hbWVdO1xyXG4gICAgICAgIHJldHVybiBpc1NhbWVPYmplY3RDb25zdHJ1Y3RvciA/IG9iamVjdC5jb25zdHJ1Y3RvciA6IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldE9iamVjdFByb3BlcnR5SW5zdGFuY2Uob2JqZWN0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBwcm9wZXJ0eUluZm86IFByb3BlcnR5SW5mbywgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uOiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgICBpZiAocHJvcGVydHlJbmZvLnByb3BlcnR5VHlwZSA9PSBPQkpFQ1RfUFJPUEVSVFkgJiYgb2JqZWN0W3Byb3BlcnR5SW5mby5uYW1lXSlcclxuICAgICAgICAgICAgcmV0dXJuIG9iamVjdFtwcm9wZXJ0eUluZm8ubmFtZV0uY29uc3RydWN0b3I7XHJcbiAgICAgICAgZWxzZSBpZiAocHJvcGVydHlJbmZvLnByb3BlcnR5VHlwZSA9PSBBUlJBWV9QUk9QRVJUWSAmJiBvYmplY3RbcHJvcGVydHlJbmZvLm5hbWVdICYmIG9iamVjdFtwcm9wZXJ0eUluZm8ubmFtZV0ubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgcmV0dXJuIG9iamVjdFtwcm9wZXJ0eUluZm8ubmFtZV1bMF0uY29uc3RydWN0b3I7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RW50aXR5KG9iamVjdCwgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBwcm9wZXJ0eUluZm8ubmFtZSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjaGVja09iamVjdFByb3BBZGRpdGlvbmFsVmFsaWRhdGlvbjxUPihpbnN0YW5jZUNvbnRhaW5lcjogSW5zdGFuY2VDb250YWluZXIsIG9iamVjdDogVCwgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uOiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgICB2YXIgcHJvcHMgPSBpbnN0YW5jZUNvbnRhaW5lci5wcm9wZXJ0aWVzLmZpbHRlcih0ID0+IHQucHJvcGVydHlUeXBlID09IE9CSkVDVF9QUk9QRVJUWSB8fCB0LnByb3BlcnR5VHlwZSA9PSBBUlJBWV9QUk9QRVJUWSlcclxuICAgICAgICBwcm9wcy5mb3JFYWNoKHQgPT4ge1xyXG4gICAgICAgICAgICBsZXQgZW50aXR5ID0gdC5lbnRpdHk7XHJcbiAgICAgICAgICAgIGlmICghdC5lbnRpdHkpXHJcbiAgICAgICAgICAgICAgICBlbnRpdHkgPSB0aGlzLmdldE9iamVjdFByb3BlcnR5SW5zdGFuY2Uob2JqZWN0LCB0LCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pXHJcbiAgICAgICAgICAgIGlmIChlbnRpdHkpIHtcclxuICAgICAgICAgICAgICAgIGxldCBpbnN0YW5jZSA9IHRoaXMuZ2V0SW5zdGFuY2VDb250YWluZXIoZW50aXR5LCBudWxsKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBpbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvcCA9IGluc3RhbmNlQ29udGFpbmVyLnByb3BlcnRpZXMuZmlsdGVyKHQgPT4gdC5uYW1lID09IGtleSlbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWluc3RhbmNlQ29udGFpbmVyLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlQ29udGFpbmVyLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWluc3RhbmNlQ29udGFpbmVyLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzW2tleV0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VDb250YWluZXIuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHNba2V5XSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHNba2V5XS5mb3JFYWNoKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0LnByb3BlcnR5VHlwZSAhPSBBUlJBWV9QUk9QRVJUWSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VDb250YWluZXIuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHNba2V5XS5wdXNoKFt0Lm5hbWUsIHhdLmpvaW4oJy4nKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlQ29udGFpbmVyLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzW2tleV0ucHVzaChbdC5uYW1lLCB4XS5qb2luKCdbXScpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0T2JqZWN0KG1vZGVsOiBhbnkgfCB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBlbnRpdHlPYmplY3Q/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24/OiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcclxuICAgICAgICBsZXQganNvbjogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG1vZGVsID09IEZVTkNUSU9OX1NUUklORylcclxuICAgICAgICAgICAganNvbi5tb2RlbCA9IG1vZGVsO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG1vZGVsID09IEZVTkNUSU9OX1NUUklORyAmJiAoZW50aXR5T2JqZWN0IGluc3RhbmNlb2YgRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKSkge1xyXG4gICAgICAgICAgICBqc29uLmVudGl0eU9iamVjdCA9IHRoaXMuY3JlYXRlQ2xhc3NPYmplY3QoanNvbi5tb2RlbCwgZW50aXR5T2JqZWN0KVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZW50aXR5T2JqZWN0ICYmICEoZW50aXR5T2JqZWN0IGluc3RhbmNlb2YgRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKSlcclxuICAgICAgICAgICAganNvbi5lbnRpdHlPYmplY3QgPSBlbnRpdHlPYmplY3Q7XHJcblxyXG4gICAgICAgIGlmIChlbnRpdHlPYmplY3QgaW5zdGFuY2VvZiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24gJiYgIWZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbilcclxuICAgICAgICAgICAganNvbi5mb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24gPSBlbnRpdHlPYmplY3Q7XHJcbiAgICAgICAgZWxzZSBpZiAoIShlbnRpdHlPYmplY3QgaW5zdGFuY2VvZiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pICYmIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbikge1xyXG4gICAgICAgICAgICBqc29uLmZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiA9IGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbjtcclxuICAgICAgICAgICAganNvbi5lbnRpdHlPYmplY3QgPSB0aGlzLmNyZWF0ZUNsYXNzT2JqZWN0KGpzb24ubW9kZWwsIGpzb24uZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBqc29uLmVudGl0eU9iamVjdClcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiAoIWVudGl0eU9iamVjdCkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIG1vZGVsID09IE9CSkVDVF9TVFJJTkcpXHJcbiAgICAgICAgICAgICAgICBqc29uLm1vZGVsID0gbW9kZWwuY29uc3RydWN0b3I7XHJcbiAgICAgICAgICAgIGpzb24uZW50aXR5T2JqZWN0ID0gdGhpcy5jcmVhdGVDbGFzc09iamVjdChqc29uLm1vZGVsLCBqc29uLmZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiwgbW9kZWwpXHJcbiAgICAgICAgfSBlbHNlIGlmIChtb2RlbCAmJiAoZW50aXR5T2JqZWN0IGluc3RhbmNlb2YgRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKSAmJiAodHlwZW9mIG1vZGVsID09IE9CSkVDVF9TVFJJTkcpKSB7XHJcbiAgICAgICAgICAgIGpzb25bTU9ERUxdID0gbW9kZWwuY29uc3RydWN0b3I7XHJcbiAgICAgICAgICAgIGpzb25bRU5USVRZX09CSkVDVF0gPSB0aGlzLmNyZWF0ZUNsYXNzT2JqZWN0KGpzb24ubW9kZWwsIGpzb24uZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBtb2RlbClcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGpzb247XHJcbiAgICB9XHJcblxyXG4gICAgY29udHJvbCh2YWx1ZT86IGFueSwgdmFsaWRhdG9ycz86IFZhbGlkYXRvckZuW10sIGFzeW5jVmFsaWRhdG9ycz86IEFzeW5jVmFsaWRhdG9yRm5bXSk6IElBYnN0cmFjdENvbnRyb2wge1xyXG4gICAgICAgIHJldHVybiBuZXcgUnhGb3JtQ29udHJvbCh2YWx1ZSwgeyB2YWxpZGF0b3JzOiB2YWxpZGF0b3JzLCBhc3luY1ZhbGlkYXRvcnM6IGFzeW5jVmFsaWRhdG9ycyB9LCB7fSwge30sICcnLCBbXSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXJyYXkodmFsdWVzOiBbeyBba2V5OiBzdHJpbmddOiBhbnkgfV0sIHZhbGlkYXRvckNvbmZpZz86IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbikge1xyXG4gICAgICAgIGxldCBmb3JtQXJyYXkgPSB0aGlzLmdyb3VwKHsgdGVtcDogdmFsdWVzIH0sIHZhbGlkYXRvckNvbmZpZykuZ2V0KFwidGVtcFwiKSBhcyBGb3JtQXJyYXk7XHJcbiAgICAgICAgdmFyIGZvcm1CdWlsZGVyID0gbmV3IEZvcm1CdWlsZGVyKCk7XHJcbiAgICAgICAgcmV0dXJuIGZvcm1CdWlsZGVyLmFycmF5KGZvcm1BcnJheS5jb250cm9scyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ3JvdXAoZ3JvdXBPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIHZhbGlkYXRvckNvbmZpZz86IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbik6IEZvcm1Hcm91cCB7XHJcbiAgICAgICAgbGV0IG1vZGVsSW5zdGFuY2UgPSBzdXBlci5jcmVhdGVJbnN0YW5jZSgpO1xyXG4gICAgICAgIGxldCBlbnRpdHlPYmplY3QgPSB7fTtcclxuICAgICAgICB0aGlzLmZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvciA9IHt9O1xyXG4gICAgICAgIHRoaXMuY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvciA9IHRoaXMuZm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlVmFsaWRhdG9yRm9ybUdyb3VwKGdyb3VwT2JqZWN0LCBlbnRpdHlPYmplY3QsIG1vZGVsSW5zdGFuY2UsIHZhbGlkYXRvckNvbmZpZyk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Rm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yID0gdGhpcy5mb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3I7XHJcbiAgICAgICAgdGhpcy5pc0dyb3VwQ2FsbGVkID0gdHJ1ZTtcclxuICAgICAgICBsZXQgZm9ybUdyb3VwID0gdGhpcy5mb3JtR3JvdXAobW9kZWxJbnN0YW5jZS5jb25zdHJ1Y3RvciwgZW50aXR5T2JqZWN0LCB2YWxpZGF0b3JDb25maWcpO1xyXG4gICAgICAgIHRoaXMuaXNHcm91cENhbGxlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yID0ge307XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Rm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yID0gdGhpcy5mb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3I7XHJcbiAgICAgICAgdGhpcy5mb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3IgPSB7fTtcclxuICAgICAgICByZXR1cm4gZm9ybUdyb3VwO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXBwbHlBbGxQcm9wVmFsaWRhdG9yKHByb3BOYW1lOiBzdHJpbmcsIHZhbGlkYXRvckNvbmZpZzogRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBtb2RlbEluc3RhbmNlOiBhbnkpIHtcclxuICAgICAgICBpZiAodmFsaWRhdG9yQ29uZmlnICYmIHZhbGlkYXRvckNvbmZpZy5hcHBseUFsbFByb3BzKSB7XHJcbiAgICAgICAgICAgIGlmICghKHZhbGlkYXRvckNvbmZpZy5leGNsdWRlUHJvcHMgJiYgdmFsaWRhdG9yQ29uZmlnLmV4Y2x1ZGVQcm9wcy5sZW5ndGggPiAwICYmIHZhbGlkYXRvckNvbmZpZy5leGNsdWRlUHJvcHMuaW5kZXhPZihwcm9wTmFtZSkgPT0gLTEpKSB7XHJcbiAgICAgICAgICAgICAgICB2YWxpZGF0b3JDb25maWcuYXBwbHlBbGxQcm9wcy5mb3JFYWNoKCh0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodC5uYW1lID09IFJYX1dFQl9WQUxJREFUT1IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdChwcm9wTmFtZSwgbW9kZWxJbnN0YW5jZSlcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcltwcm9wTmFtZV0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRGb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3JbcHJvcE5hbWVdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcltwcm9wTmFtZV0ucHVzaCh0KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkeW5hbWljVmFsaWRhdGlvblByb3BDaGVjayhwcm9wTmFtZTogc3RyaW5nLCB2YWxpZGF0b3JDb25maWc6IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbikge1xyXG4gICAgICAgIHJldHVybiAodmFsaWRhdG9yQ29uZmlnID09IHVuZGVmaW5lZCkgPyB0cnVlIDogKCF2YWxpZGF0b3JDb25maWcuZHluYW1pY1ZhbGlkYXRpb25Db25maWd1cmF0aW9uUHJvcGVydHlOYW1lKSA/IHRydWUgOiB2YWxpZGF0b3JDb25maWcuZHluYW1pY1ZhbGlkYXRpb25Db25maWd1cmF0aW9uUHJvcGVydHlOYW1lID09IHByb3BOYW1lID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNOb3RPYmplY3QodmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8IHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPSBPQkpFQ1RfU1RSSU5HO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY3JlYXRlVmFsaWRhdG9yRm9ybUdyb3VwKGdyb3VwT2JqZWN0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBlbnRpdHlPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIG1vZGVsSW5zdGFuY2U6IGFueSwgdmFsaWRhdG9yQ29uZmlnOiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBncm91cE9iamVjdCkge1xyXG5cclxuICAgICAgICAgICAgdmFyIHByb3AgPSBncm91cE9iamVjdFtwcm9wTmFtZV07XHJcbiAgICAgICAgICAgIGlmIChwcm9wIGluc3RhbmNlb2YgQXJyYXkgJiYgcHJvcC5sZW5ndGggPiAwICYmIHRoaXMuaXNOb3RPYmplY3QocHJvcFswXSkpIHtcclxuICAgICAgICAgICAgICAgIGxldCBwcm9wVmFsaWRhdG9ycyA9IChwcm9wLmxlbmd0aCA+IDEgJiYgcHJvcFsxXSBpbnN0YW5jZW9mIEFycmF5KSA/IHByb3BbMV0gOiAocHJvcC5sZW5ndGggPT0gMikgPyBbcHJvcFsxXV0gOiBbXTtcclxuICAgICAgICAgICAgICAgIGxldCBwcm9wZXJ0eUFkZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BWYWxpZGF0b3JzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BWYWxpZGF0b3JzW2ldLm5hbWUgPT0gUlhfV0VCX1ZBTElEQVRPUikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wVmFsaWRhdG9yc1tpXShwcm9wTmFtZSwgbW9kZWxJbnN0YW5jZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5QWRkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRGb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3JbcHJvcE5hbWVdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Rm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yW3Byb3BOYW1lXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRGb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3JbcHJvcE5hbWVdLnB1c2gocHJvcFZhbGlkYXRvcnNbaV0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eUFkZGVkKVxyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDb250YWluZXIuaW5pdFByb3BlcnR5T2JqZWN0KHByb3BOYW1lLCBQUk9QRVJUWSwgdW5kZWZpbmVkLCB0eXBlb2YgbW9kZWxJbnN0YW5jZSA9PSBPQkpFQ1RfU1RSSU5HID8gbW9kZWxJbnN0YW5jZSA6IHsgY29uc3RydWN0b3I6IG1vZGVsSW5zdGFuY2UgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGx5QWxsUHJvcFZhbGlkYXRvcihwcm9wTmFtZSwgdmFsaWRhdG9yQ29uZmlnLCBtb2RlbEluc3RhbmNlKVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3AgPT09IG51bGwgfHwgcHJvcCA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBwcm9wID09IFNUUklORyB8fCB0eXBlb2YgcHJvcCA9PSBOVU1CRVIgfHwgdHlwZW9mIHByb3AgPT0gQk9PTEVBTiB8fCBwcm9wIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdENvbnRhaW5lci5pbml0UHJvcGVydHlPYmplY3QocHJvcE5hbWUsIFBST1BFUlRZLCB1bmRlZmluZWQsIHR5cGVvZiBtb2RlbEluc3RhbmNlID09IE9CSkVDVF9TVFJJTkcgPyBtb2RlbEluc3RhbmNlIDogeyBjb25zdHJ1Y3RvcjogbW9kZWxJbnN0YW5jZSB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlBbGxQcm9wVmFsaWRhdG9yKHByb3BOYW1lLCB2YWxpZGF0b3JDb25maWcsIG1vZGVsSW5zdGFuY2UpXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcCBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvcCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVudGl0eU9iamVjdFtwcm9wTmFtZV0gPSBwcm9wO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcHJvcE1vZGVsSW5zdGFuY2UgPSBzdXBlci5jcmVhdGVJbnN0YW5jZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kZWxJbnN0YW5jZSA9PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsSW5zdGFuY2UuY29uc3RydWN0b3IgPSBtb2RlbEluc3RhbmNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDb250YWluZXIuaW5pdFByb3BlcnR5T2JqZWN0KHByb3BOYW1lLCBBUlJBWV9QUk9QRVJUWSwgcHJvcE1vZGVsSW5zdGFuY2UuY29uc3RydWN0b3IsIG1vZGVsSW5zdGFuY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVudGl0eU9iamVjdFtwcm9wTmFtZV0gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCByb3cgb2YgcHJvcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgak9iamVjdCA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlPYmplY3RbcHJvcE5hbWVdLnB1c2goak9iamVjdClcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVWYWxpZGF0b3JGb3JtR3JvdXAocm93LCBqT2JqZWN0LCBwcm9wTW9kZWxJbnN0YW5jZS5jb25zdHJ1Y3RvciwgdmFsaWRhdG9yQ29uZmlnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcHJvcCA9PSBPQkpFQ1RfU1RSSU5HICYmICEocHJvcCBpbnN0YW5jZW9mIEZvcm1Db250cm9sIHx8IHByb3AgaW5zdGFuY2VvZiBSeEZvcm1Db250cm9sKSkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBmb3JtR3JvdXA6IGFueSA9IChwcm9wIGluc3RhbmNlb2YgRm9ybUFycmF5KSA/IHByb3AuY29udHJvbHNbMF0gOiBwcm9wXHJcbiAgICAgICAgICAgICAgICBpZiAoIWZvcm1Hcm91cC5tb2RlbCAmJiAocHJvcCBpbnN0YW5jZW9mIEZvcm1Hcm91cCB8fCBwcm9wIGluc3RhbmNlb2YgUnhGb3JtR3JvdXApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwID0gdGhpcy5ncm91cChmb3JtR3JvdXAuY29udHJvbHMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHByb3AgaW5zdGFuY2VvZiBGb3JtR3JvdXAgfHwgcHJvcCBpbnN0YW5jZW9mIFJ4Rm9ybUdyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5T2JqZWN0W3Byb3BOYW1lXSA9IHByb3A7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbnRhaW5lci5pbml0UHJvcGVydHlPYmplY3QocHJvcE5hbWUsIE9CSkVDVF9QUk9QRVJUWSwgZm9ybUdyb3VwLm1vZGVsLCBtb2RlbEluc3RhbmNlKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVudGl0eU9iamVjdFtwcm9wTmFtZV0gPSBwcm9wO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDb250YWluZXIuaW5pdFByb3BlcnR5T2JqZWN0KHByb3BOYW1lLCBBUlJBWV9QUk9QRVJUWSwgZm9ybUdyb3VwLm1vZGVsLCBtb2RlbEluc3RhbmNlKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZHluYW1pY1ZhbGlkYXRpb25Qcm9wQ2hlY2socHJvcE5hbWUsIHZhbGlkYXRvckNvbmZpZykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3JbcHJvcE5hbWVdID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvciA9IHRoaXMuZm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yW3Byb3BOYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByb3BNb2RlbEluc3RhbmNlID0gc3VwZXIuY3JlYXRlSW5zdGFuY2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5T2JqZWN0W3Byb3BOYW1lXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlPYmplY3RbcHJvcE5hbWVdLmNvbnN0cnVjdG9yID0gcHJvcE1vZGVsSW5zdGFuY2UuY29uc3RydWN0b3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDb250YWluZXIuaW5pdFByb3BlcnR5T2JqZWN0KHByb3BOYW1lLCBPQkpFQ1RfUFJPUEVSVFksIGVudGl0eU9iamVjdFtwcm9wTmFtZV0uY29uc3RydWN0b3IsIG1vZGVsSW5zdGFuY2UuY29uc3RydWN0b3IgPT0gRnVuY3Rpb24gPyB7IGNvbnN0cnVjdG9yOiBtb2RlbEluc3RhbmNlIH0gOiBtb2RlbEluc3RhbmNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9iamVjdFZhbGlkYXRpb25Db25maWcgPSB0aGlzLmdldFZhbGlkYXRvckNvbmZpZyh2YWxpZGF0b3JDb25maWcsIGdyb3VwT2JqZWN0LCBwcm9wTmFtZSArIFwiLlwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVZhbGlkYXRvckZvcm1Hcm91cChncm91cE9iamVjdFtwcm9wTmFtZV0sIGVudGl0eU9iamVjdFtwcm9wTmFtZV0sIGVudGl0eU9iamVjdFtwcm9wTmFtZV0uY29uc3RydWN0b3IsIG9iamVjdFZhbGlkYXRpb25Db25maWcpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBlbnRpdHlPYmplY3RbcHJvcE5hbWVdID0gZ3JvdXBPYmplY3RbcHJvcE5hbWVdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHByb3AgPT0gU1RSSU5HIHx8IHR5cGVvZiBwcm9wID09IE5VTUJFUiB8fCB0eXBlb2YgcHJvcCA9PSBCT09MRUFOIHx8IHByb3AgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgICAgICAgICBlbnRpdHlPYmplY3RbcHJvcE5hbWVdID0gcHJvcFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKChwcm9wICYmIHByb3AubGVuZ3RoID4gMCAmJiB0aGlzLmlzTm90T2JqZWN0KHByb3BbMF0pICYmICEocHJvcCBpbnN0YW5jZW9mIEZvcm1Db250cm9sIHx8IHByb3AgaW5zdGFuY2VvZiBSeEZvcm1Db250cm9sKSAmJiAhKHByb3AgaW5zdGFuY2VvZiBGb3JtQXJyYXkpKSkge1xyXG4gICAgICAgICAgICAgICAgZW50aXR5T2JqZWN0W3Byb3BOYW1lXSA9IHByb3BbMF1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICBlbnRpdHlPYmplY3RbcHJvcE5hbWVdID0gcHJvcFxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3AgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCB8fCBwcm9wIGluc3RhbmNlb2YgUnhGb3JtQ29udHJvbCkge1xyXG4gICAgICAgICAgICAgICAgZW50aXR5T2JqZWN0W3Byb3BOYW1lXSA9IHByb3BcclxuICAgICAgICAgICAgICAgIGRlZmF1bHRDb250YWluZXIuaW5pdFByb3BlcnR5T2JqZWN0KHByb3BOYW1lLCBQUk9QRVJUWSwgdW5kZWZpbmVkLCBtb2RlbEluc3RhbmNlLmNvbnN0cnVjdG9yID8gbW9kZWxJbnN0YW5jZSA6IHsgY29uc3RydWN0b3I6IG1vZGVsSW5zdGFuY2UgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRWYWxpZGF0b3JDb25maWcodmFsaWRhdG9yQ29uZmlnOiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIGVudGl0eU9iamVjdDogYW55LCByb290UHJvcGVydHlOYW1lOiBzdHJpbmcsIGFycmF5UHJvcGVydHlOYW1lPzogc3RyaW5nKTogYW55IHtcclxuICAgICAgICBsZXQgZXhjbHVkZVByb3BzID0gW107XHJcbiAgICAgICAgbGV0IGluY2x1ZGVQcm9wcyA9IFtdO1xyXG4gICAgICAgIGxldCBpZ25vcmVVbmRlZmluZWRQcm9wcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiAoIXZhbGlkYXRvckNvbmZpZykgcmV0dXJuIHt9O1xyXG5cclxuICAgICAgICBjb25zdCB2YWxpZGF0aW9uUHJvcHMgPSB0aGlzLmdldE9iamVjdEZvclByb3BlcnR5KHZhbGlkYXRvckNvbmZpZy5keW5hbWljVmFsaWRhdGlvbiwgcm9vdFByb3BlcnR5TmFtZSwgYXJyYXlQcm9wZXJ0eU5hbWUpO1xyXG4gICAgICAgIGNvbnN0IGFic3RyYWN0Q29udHJvbE9wdGlvbnMgPSB0aGlzLmdldE9iamVjdEZvclByb3BlcnR5KHZhbGlkYXRvckNvbmZpZy5hYnN0cmFjdENvbnRyb2xPcHRpb25zLCByb290UHJvcGVydHlOYW1lLCBhcnJheVByb3BlcnR5TmFtZSk7XHJcblxyXG4gICAgICAgIGlmICh2YWxpZGF0b3JDb25maWcuZXhjbHVkZVByb3BzKVxyXG4gICAgICAgICAgICBleGNsdWRlUHJvcHMgPSB0aGlzLmdldFByb3BzKHZhbGlkYXRvckNvbmZpZy5leGNsdWRlUHJvcHMsIHJvb3RQcm9wZXJ0eU5hbWUpO1xyXG4gICAgICAgIGlmICh2YWxpZGF0b3JDb25maWcuaW5jbHVkZVByb3BzKVxyXG4gICAgICAgICAgICBpbmNsdWRlUHJvcHMgPSB0aGlzLmdldFByb3BzKHZhbGlkYXRvckNvbmZpZy5pbmNsdWRlUHJvcHMsIHJvb3RQcm9wZXJ0eU5hbWUpO1xyXG4gICAgICAgIGlmICh2YWxpZGF0b3JDb25maWcuaWdub3JlVW5kZWZpbmVkUHJvcHMpXHJcbiAgICAgICAgICAgIGlnbm9yZVVuZGVmaW5lZFByb3BzID0gdGhpcy5nZXRQcm9wcyh2YWxpZGF0b3JDb25maWcuaWdub3JlVW5kZWZpbmVkUHJvcHMsIHJvb3RQcm9wZXJ0eU5hbWUsIHRydWUpO1xyXG4gICAgICAgIGlmICghT2JqZWN0LmtleXMoYWJzdHJhY3RDb250cm9sT3B0aW9ucykubGVuZ3RoICYmIHJvb3RQcm9wZXJ0eU5hbWUuZW5kc1dpdGgoJy4nKSAmJiB2YWxpZGF0b3JDb25maWcuYWJzdHJhY3RDb250cm9sT3B0aW9ucyAmJiB2YWxpZGF0b3JDb25maWcuYWJzdHJhY3RDb250cm9sT3B0aW9uc1tyb290UHJvcGVydHlOYW1lLnN1YnN0cmluZygwLCByb290UHJvcGVydHlOYW1lLmxlbmd0aCAtIDEpXSlcclxuICAgICAgICAgICAgYWJzdHJhY3RDb250cm9sT3B0aW9uc1snZ2xvYmFsJ10gPSB2YWxpZGF0b3JDb25maWcuYWJzdHJhY3RDb250cm9sT3B0aW9uc1tyb290UHJvcGVydHlOYW1lLnN1YnN0cmluZygwLCByb290UHJvcGVydHlOYW1lLmxlbmd0aCAtIDEpXTtcclxuXHJcbiAgICAgICAgY29uc3QgZHluYW1pY1ZhbGlkYXRpb24gPSAodmFsaWRhdG9yQ29uZmlnLmR5bmFtaWNWYWxpZGF0aW9uQ29uZmlndXJhdGlvblByb3BlcnR5TmFtZSAmJiBlbnRpdHlPYmplY3RbdmFsaWRhdG9yQ29uZmlnLmR5bmFtaWNWYWxpZGF0aW9uQ29uZmlndXJhdGlvblByb3BlcnR5TmFtZV0pID8gZW50aXR5T2JqZWN0W3ZhbGlkYXRvckNvbmZpZy5keW5hbWljVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb25Qcm9wZXJ0eU5hbWVdIDogdmFsaWRhdGlvblByb3BzO1xyXG4gICAgICAgIHJldHVybiB7IGlnbm9yZVVuZGVmaW5lZFByb3BzOiBpZ25vcmVVbmRlZmluZWRQcm9wcywgaW5jbHVkZVByb3BzOiBpbmNsdWRlUHJvcHMsIGR5bmFtaWNWYWxpZGF0aW9uOiBkeW5hbWljVmFsaWRhdGlvbiwgZXhjbHVkZVByb3BzOiBleGNsdWRlUHJvcHMsIGFic3RyYWN0Q29udHJvbE9wdGlvbnM6IGFic3RyYWN0Q29udHJvbE9wdGlvbnMgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0T2JqZWN0Rm9yUHJvcGVydHk8VD4ocm9vdE9iamVjdDogeyBba2V5OiBzdHJpbmddOiBUIH0sIHJvb3RQcm9wZXJ0eU5hbWU6IHN0cmluZywgYXJyYXlQcm9wZXJ0eU5hbWU/OiBzdHJpbmcpOiB7IFtrZXk6IHN0cmluZ106IFQgfSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0OiB7IFtrZXk6IHN0cmluZ106IFQgfSA9IHt9O1xyXG5cclxuICAgICAgICBmb3IgKGxldCBwcm9wTmFtZSBpbiByb290T2JqZWN0KSB7XHJcbiAgICAgICAgICAgIGlmICghcHJvcE5hbWUuc3RhcnRzV2l0aChyb290UHJvcGVydHlOYW1lKSAmJiAoIWFycmF5UHJvcGVydHlOYW1lIHx8ICFwcm9wTmFtZS5zdGFydHNXaXRoKGFycmF5UHJvcGVydHlOYW1lKSkpXHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgbGV0IHNwbGl0UHJvcCA9IHByb3BOYW1lLnNwbGl0KFwiLlwiLCAyKVsxXTtcclxuICAgICAgICAgICAgaWYgKCFzcGxpdFByb3ApXHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgcmVzdWx0W3NwbGl0UHJvcF0gPSByb290T2JqZWN0W3Byb3BOYW1lXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRQcm9wcyhwcm9wZXJ0aWVzOiBzdHJpbmdbXSwgcm9vdFByb3BlcnR5TmFtZTogc3RyaW5nLCBpc0lnbm9yZVByb3A6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIGxldCBwcm9wczogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBwcm9wIG9mIHByb3BlcnRpZXMpIHtcclxuICAgICAgICAgICAgaWYgKHByb3AuaW5kZXhPZihyb290UHJvcGVydHlOYW1lKSAhPSAtMSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHNwbGl0UHJvcHMgPSBwcm9wLnNwbGl0KFwiLlwiKTtcclxuICAgICAgICAgICAgICAgIGlmIChzcGxpdFByb3BzLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMucHVzaChzcGxpdFByb3BzWzFdKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3BsaXRQcm9wcy5sZW5ndGggPiAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3BsaXRQcm9wcy5zcGxpY2UoMCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMucHVzaChzcGxpdFByb3BzLmpvaW4oXCIuXCIpKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc0lnbm9yZVByb3AgJiYgcHJvcGVydGllcy5maWx0ZXIoeCA9PiB4ID09IHJvb3RQcm9wZXJ0eU5hbWUucmVwbGFjZSgnLicsICcnKSkubGVuZ3RoID09IDEpXHJcbiAgICAgICAgICAgIHByb3BzLnB1c2goJzpzZWxmOicpO1xyXG5cclxuICAgICAgICByZXR1cm4gcHJvcHM7XHJcbiAgICB9XHJcblxyXG4gICAgZm9ybUdyb3VwPFQ+KG1vZGVsOiBUeXBlPFQ+IHwgeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgZW50aXR5T2JqZWN0PzogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiwgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uPzogRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKTogUnhGb3JtR3JvdXAgfCBGb3JtR3JvdXAgfCBBcHBGb3JtR3JvdXA8VD4ge1xyXG4gICAgICAgIGxldCBqc29uID0gdGhpcy5nZXRPYmplY3QobW9kZWwsIGVudGl0eU9iamVjdCwgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKTtcclxuICAgICAgICBtb2RlbCA9IGpzb24ubW9kZWw7XHJcbiAgICAgICAgZW50aXR5T2JqZWN0ID0ganNvbi5lbnRpdHlPYmplY3Q7XHJcbiAgICAgICAgaWYgKGVudGl0eU9iamVjdC5jb25zdHJ1Y3RvciAhPSBtb2RlbCAmJiAhdGhpcy5pc0dyb3VwQ2FsbGVkKSB7XHJcbiAgICAgICAgICAgIGVudGl0eU9iamVjdCA9IGpzb24uZW50aXR5T2JqZWN0ID0gdGhpcy51cGRhdGVPYmplY3QobW9kZWwsIGpzb24uZW50aXR5T2JqZWN0LCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24gPSBqc29uLmZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbjtcclxuICAgICAgICBpZiAoZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKVxyXG4gICAgICAgICAgICB0aGlzLmV4dHJhY3RFeHByZXNzaW9ucyhmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pO1xyXG4gICAgICAgIGxldCBpbnN0YW5jZUNvbnRhaW5lcjogSW5zdGFuY2VDb250YWluZXIgPSB0aGlzLmdldEluc3RhbmNlQ29udGFpbmVyKG1vZGVsLCBlbnRpdHlPYmplY3QpO1xyXG4gICAgICAgIHRoaXMuY2hlY2tPYmplY3RQcm9wQWRkaXRpb25hbFZhbGlkYXRpb24oaW5zdGFuY2VDb250YWluZXIsIGVudGl0eU9iamVjdCwgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKTtcclxuICAgICAgICBsZXQgZm9ybUdyb3VwT2JqZWN0ID0ge307XHJcbiAgICAgICAgbGV0IGV4dGVuZGVkUHJvcGVydGllcyA9IHt9O1xyXG4gICAgICAgIGxldCBmb3JtQ2hpbGRHcm91cCA9IHVuZGVmaW5lZDtcclxuICAgICAgICBsZXQgZm9ybUFycmF5R3JvdXAgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdmFyIGFkZGl0aW9uYWxWYWxpZGF0aW9uczogeyBba2V5OiBzdHJpbmddOiBQcm9wVmFsaWRhdGlvbkNvbmZpZyB9ID0ge307XHJcbiAgICAgICAgaW5zdGFuY2VDb250YWluZXIucHJvcGVydGllcy5mb3JFYWNoKHByb3BlcnR5ID0+IHtcclxuICAgICAgICAgICAgbGV0IGlzSW5jbHVkZVByb3AgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmV4Y2x1ZGVQcm9wcyAmJiBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uZXhjbHVkZVByb3BzLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgICAgICAgICAgaXNJbmNsdWRlUHJvcCA9IGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5leGNsdWRlUHJvcHMuaW5kZXhPZihwcm9wZXJ0eS5uYW1lKSA9PSAtMVxyXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5keW5hbWljVmFsaWRhdGlvbilcclxuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsVmFsaWRhdGlvbnMgPSBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uZHluYW1pY1ZhbGlkYXRpb247XHJcbiAgICAgICAgICAgICAgICBpZiAoZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmluY2x1ZGVQcm9wcyAmJiBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uaW5jbHVkZVByb3BzLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgICAgICAgICAgaXNJbmNsdWRlUHJvcCA9IGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5pbmNsdWRlUHJvcHMuaW5kZXhPZihwcm9wZXJ0eS5uYW1lKSAhPSAtMVxyXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5pZ25vcmVVbmRlZmluZWRQcm9wcyAmJiBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uaWdub3JlVW5kZWZpbmVkUHJvcHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlzSW5jbHVkZVByb3AgPSAhKHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PSBQUk9QRVJUWSAmJiAhUmVnZXhWYWxpZGF0b3IuaXNOb3RCbGFuayhqc29uLmVudGl0eU9iamVjdFtwcm9wZXJ0eS5uYW1lXSkgJiYgKGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5pZ25vcmVVbmRlZmluZWRQcm9wcy5pbmRleE9mKHByb3BlcnR5Lm5hbWUpICE9PSAtMSB8fCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uaWdub3JlVW5kZWZpbmVkUHJvcHMuaW5kZXhPZihcIjpzZWxmOlwiKSAhPT0gLTEpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5pZ25vcmUpXHJcbiAgICAgICAgICAgICAgICBpc0luY2x1ZGVQcm9wID0gIXByb3BlcnR5Lmlnbm9yZS5jYWxsKGpzb24uZW50aXR5T2JqZWN0LCBqc29uLmVudGl0eU9iamVjdCk7XHJcbiAgICAgICAgICAgIGlmIChpc0luY2x1ZGVQcm9wKSB7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHByb3BlcnR5LnByb3BlcnR5VHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgUFJPUEVSVFk6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGVudGl0eU9iamVjdFtwcm9wZXJ0eS5uYW1lXSBpbnN0YW5jZW9mIEZvcm1Db250cm9sIHx8IGVudGl0eU9iamVjdFtwcm9wZXJ0eS5uYW1lXSBpbnN0YW5jZW9mIFJ4Rm9ybUNvbnRyb2wpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcHJvcGVydHlWYWxpZGF0b3JzID0gaW5zdGFuY2VDb250YWluZXIucHJvcGVydHlBbm5vdGF0aW9ucy5maWx0ZXIodCA9PiB0LnByb3BlcnR5TmFtZSA9PSBwcm9wZXJ0eS5uYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzYW5pdGl6ZVZhbHVlID0gc3VwZXIuc2FuaXRpemVWYWx1ZShpbnN0YW5jZUNvbnRhaW5lciwgcHJvcGVydHkubmFtZSwgc3VwZXIuZ2V0RGVmYXVsdFZhbHVlKHByb3BlcnR5LCBlbnRpdHlPYmplY3RbcHJvcGVydHkubmFtZV0sIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiksIGpzb24uZW50aXR5T2JqZWN0LCBPYmplY3QuYXNzaWduKHt9LCBqc29uLmVudGl0eU9iamVjdCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudGl0eU9iamVjdFtwcm9wZXJ0eS5uYW1lXSA9PT0gdW5kZWZpbmVkICYmIHNhbml0aXplVmFsdWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5T2JqZWN0W3Byb3BlcnR5Lm5hbWVdID0gc2FuaXRpemVWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWxpZGF0b3JzID0gdGhpcy5hZGRGb3JtQ29udHJvbChwcm9wZXJ0eSwgcHJvcGVydHlWYWxpZGF0b3JzLCBhZGRpdGlvbmFsVmFsaWRhdGlvbnNbcHJvcGVydHkubmFtZV0sIGluc3RhbmNlQ29udGFpbmVyLCBlbnRpdHlPYmplY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFic3RyYWN0Q29udHJvbE9wdGlvbnM6IEFic3RyYWN0Q29udHJvbE9wdGlvbnMgPSB7IHZhbGlkYXRvcnM6IHZhbGlkYXRvcnMsIGFzeW5jVmFsaWRhdG9yczogdGhpcy5hZGRBc3luY1ZhbGlkYXRpb24ocHJvcGVydHksIHByb3BlcnR5VmFsaWRhdG9ycywgYWRkaXRpb25hbFZhbGlkYXRpb25zW3Byb3BlcnR5Lm5hbWVdKSB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzdHJhY3RDb250cm9sT3B0aW9ucyA9IHRoaXMuZ2V0QWJzdHJhY3RDb250cm9sT3B0aW9ucyhwcm9wZXJ0eS5uYW1lLCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIGFic3RyYWN0Q29udHJvbE9wdGlvbnMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkudXBkYXRlT24gJiYgIWFic3RyYWN0Q29udHJvbE9wdGlvbnMudXBkYXRlT24pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzdHJhY3RDb250cm9sT3B0aW9ucy51cGRhdGVPbiA9IHByb3BlcnR5LnVwZGF0ZU9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwT2JqZWN0W3Byb3BlcnR5Lm5hbWVdID0gbmV3IFJ4Rm9ybUNvbnRyb2woc2FuaXRpemVWYWx1ZSwgYWJzdHJhY3RDb250cm9sT3B0aW9ucywganNvbi5lbnRpdHlPYmplY3QsIE9iamVjdC5hc3NpZ24oe30sIGpzb24uZW50aXR5T2JqZWN0KSwgcHJvcGVydHkubmFtZSwgaW5zdGFuY2VDb250YWluZXIuc2FuaXRpemVyc1twcm9wZXJ0eS5uYW1lXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTmVzdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwT2JqZWN0W3Byb3BlcnR5Lm5hbWVdID0gc3VwZXIuZ2V0RGVmYXVsdFZhbHVlKHByb3BlcnR5LCBlbnRpdHlPYmplY3RbcHJvcGVydHkubmFtZV0sIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZGVkUHJvcGVydGllc1twcm9wZXJ0eS5uYW1lXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgT0JKRUNUX1BST1BFUlRZOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgb2JqZWN0VmFsdWUgPSBlbnRpdHlPYmplY3RbcHJvcGVydHkubmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3RWYWx1ZSAmJiBvYmplY3RWYWx1ZSBpbnN0YW5jZW9mIE9iamVjdCAmJiAhKG9iamVjdFZhbHVlIGluc3RhbmNlb2YgRm9ybUdyb3VwIHx8IG9iamVjdFZhbHVlIGluc3RhbmNlb2YgUnhGb3JtR3JvdXApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTmVzdGVkQmluZGluZyA9IHRoaXMuaXNOZXN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlQ29udGFpbmVyICYmIGluc3RhbmNlQ29udGFpbmVyLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb25hbE9iamVjdFByb3BzID0gaW5zdGFuY2VDb250YWluZXIuY29uZGl0aW9uYWxPYmplY3RQcm9wcy5maWx0ZXIodCA9PiB0Lm9iamVjdFByb3BOYW1lID09IHByb3BlcnR5Lm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb25kaXRpb25hbFZhbGlkYXRpb25JbnN0YW5jZSAmJiB0aGlzLmNvbmRpdGlvbmFsVmFsaWRhdGlvbkluc3RhbmNlLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZGVyQ29uZmlndXJhdGlvbkNvbmRpdGlvbmFsT2JqZWN0UHJvcHMgPSB0aGlzLmNvbmRpdGlvbmFsVmFsaWRhdGlvbkluc3RhbmNlLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMuZmlsdGVyKHQgPT4gdC5vYmplY3RQcm9wTmFtZSA9PSBwcm9wZXJ0eS5uYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcltwcm9wZXJ0eS5uYW1lXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRGb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3IgPSB0aGlzLmZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcltwcm9wZXJ0eS5uYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvYmplY3RWYWxpZGF0aW9uQ29uZmlnID0gdGhpcy5nZXRWYWxpZGF0b3JDb25maWcoZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBvYmplY3RWYWx1ZSwgYCR7cHJvcGVydHkubmFtZX0uYClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlbnRpdHkgPSBwcm9wZXJ0eS5lbnRpdHlQcm92aWRlciA/IHByb3BlcnR5LmVudGl0eVByb3ZpZGVyLmNhbGwoZW50aXR5T2JqZWN0KSA6IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cE9iamVjdFtwcm9wZXJ0eS5uYW1lXSA9IHRoaXMuZm9ybUdyb3VwKGVudGl0eSB8fCBwcm9wZXJ0eS5lbnRpdHkgfHwgdGhpcy5nZXRFbnRpdHkob2JqZWN0VmFsdWUsIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiwgcHJvcGVydHkubmFtZSwgdHJ1ZSksIG9iamVjdFZhbHVlLCBvYmplY3RWYWxpZGF0aW9uQ29uZmlnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uYWxPYmplY3RQcm9wcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZGVyQ29uZmlndXJhdGlvbkNvbmRpdGlvbmFsT2JqZWN0UHJvcHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNOZXN0ZWRCaW5kaW5nID0gdGhpcy5pc05lc3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9iamVjdFZhbHVlIGluc3RhbmNlb2YgRm9ybUdyb3VwIHx8IG9iamVjdFZhbHVlIGluc3RhbmNlb2YgUnhGb3JtR3JvdXApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBPYmplY3RbcHJvcGVydHkubmFtZV0gPSBvYmplY3RWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBUlJBWV9QUk9QRVJUWTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFycmF5T2JqZWN0VmFsdWUgPSBlbnRpdHlPYmplY3RbcHJvcGVydHkubmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcnJheU9iamVjdFZhbHVlICYmIGFycmF5T2JqZWN0VmFsdWUgaW5zdGFuY2VvZiBBcnJheSAmJiAhKGFycmF5T2JqZWN0VmFsdWUgaW5zdGFuY2VvZiBGb3JtQXJyYXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTmVzdGVkQmluZGluZyA9IHRoaXMuaXNOZXN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvcm1BcnJheUdyb3VwID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGVudGl0eSA9IHByb3BlcnR5LmVudGl0eVByb3ZpZGVyID8gcHJvcGVydHkuZW50aXR5UHJvdmlkZXIuY2FsbChlbnRpdHlPYmplY3QpIDogdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9iamVjdFZhbGlkYXRpb25Db25maWcgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgc3ViT2JqZWN0IG9mIGFycmF5T2JqZWN0VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2VDb250YWluZXIgJiYgaW5zdGFuY2VDb250YWluZXIuY29uZGl0aW9uYWxPYmplY3RQcm9wcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb25hbE9iamVjdFByb3BzID0gaW5zdGFuY2VDb250YWluZXIuY29uZGl0aW9uYWxPYmplY3RQcm9wcy5maWx0ZXIodCA9PiB0Lm9iamVjdFByb3BOYW1lID09IHByb3BlcnR5Lm5hbWUgJiYgdC5hcnJheUluZGV4ID09IGluZGV4KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbmRpdGlvbmFsVmFsaWRhdGlvbkluc3RhbmNlICYmIHRoaXMuY29uZGl0aW9uYWxWYWxpZGF0aW9uSW5zdGFuY2UuY29uZGl0aW9uYWxPYmplY3RQcm9wcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZGVyQ29uZmlndXJhdGlvbkNvbmRpdGlvbmFsT2JqZWN0UHJvcHMgPSB0aGlzLmNvbmRpdGlvbmFsVmFsaWRhdGlvbkluc3RhbmNlLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMuZmlsdGVyKHQgPT4gdC5vYmplY3RQcm9wTmFtZSA9PSBwcm9wZXJ0eS5uYW1lICYmIHQuYXJyYXlJbmRleCA9PSBpbmRleCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yW3Byb3BlcnR5Lm5hbWVdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRGb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3IgPSB0aGlzLmZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcltwcm9wZXJ0eS5uYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RWYWxpZGF0aW9uQ29uZmlnID0gdGhpcy5nZXRWYWxpZGF0b3JDb25maWcoZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBzdWJPYmplY3QsIGAke3Byb3BlcnR5Lm5hbWV9LmAsIGAke3Byb3BlcnR5Lm5hbWV9WyR7aW5kZXh9XS5gKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1BcnJheUdyb3VwLnB1c2godGhpcy5mb3JtR3JvdXAoZW50aXR5IHx8IHByb3BlcnR5LmVudGl0eSB8fCB0aGlzLmdldEVudGl0eShzdWJPYmplY3QsIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiwgcHJvcGVydHkubmFtZSwgdHJ1ZSksIHN1Yk9iamVjdCwgb2JqZWN0VmFsaWRhdGlvbkNvbmZpZykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Kys7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb25hbE9iamVjdFByb3BzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZGVyQ29uZmlndXJhdGlvbkNvbmRpdGlvbmFsT2JqZWN0UHJvcHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhYnN0cmFjdENvbnRyb2xPcHRpb25zID0gdGhpcy5nZXRBYnN0cmFjdENvbnRyb2xPcHRpb25zKHByb3BlcnR5Lm5hbWUsIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiwge30pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBPYmplY3RbcHJvcGVydHkubmFtZV0gPSBuZXcgUnhGb3JtQXJyYXkoYXJyYXlPYmplY3RWYWx1ZSwgZm9ybUFycmF5R3JvdXAsIGFic3RyYWN0Q29udHJvbE9wdGlvbnMsIG51bGwsIHByb3BlcnR5LmFycmF5Q29uZmlnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSZWFjdGl2ZUZvcm1Db25maWcuYXV0b0luc3RhbmNlUHVzaCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5T2JqZWN0VmFsdWUucHVzaCA9IChpbnN0YW5jZTogYW55W10pOiBudW1iZXIgPT4geyBsZXQgZm9ybUdyb3VwID0gdGhpcy5mb3JtR3JvdXAoaW5zdGFuY2UuY29uc3RydWN0b3IsIGluc3RhbmNlLCBvYmplY3RWYWxpZGF0aW9uQ29uZmlnKTsgZm9ybUdyb3VwT2JqZWN0W3Byb3BlcnR5Lm5hbWVdLnB1c2goZm9ybUdyb3VwLCB7IGlzQWRkZWRJbnN0YW5jZTogdHJ1ZSB9KTsgcmV0dXJuIDA7IH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlPYmplY3RWYWx1ZS5zcGxpY2UgPSAoc3RhcnQsIGRlbGV0ZUNvdW50KTogYW55W10gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZW5kID0gKHN0YXJ0ICsgZGVsZXRlQ291bnQpIC0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBPYmplY3RbcHJvcGVydHkubmFtZV0ucmVtb3ZlQXQoaSwgeyBpc1JlbW92ZWRJbnN0YW5jZTogdHJ1ZSB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc05lc3RlZEJpbmRpbmcgPSB0aGlzLmlzTmVzdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJyYXlPYmplY3RWYWx1ZSBpbnN0YW5jZW9mIEZvcm1BcnJheSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cE9iamVjdFtwcm9wZXJ0eS5uYW1lXSA9IGFycmF5T2JqZWN0VmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByb3BlcnR5LmFycmF5Q29uZmlnICYmIHByb3BlcnR5LmFycmF5Q29uZmlnLmNyZWF0ZUJsYW5rKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwT2JqZWN0W3Byb3BlcnR5Lm5hbWVdID0gbmV3IFJ4Rm9ybUFycmF5KFtdLCBbXSwgbnVsbCwgbnVsbCwgcHJvcGVydHkuYXJyYXlDb25maWcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzTmVzdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uYWxWYWxpZGF0aW9uSW5zdGFuY2UgPSB7fTtcclxuICAgICAgICAgICAgdGhpcy5idWlsZGVyQ29uZmlndXJhdGlvbkNvbmRpdGlvbmFsT2JqZWN0UHJvcHMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGFic3RyYWN0Q29udHJvbE9wdGlvbnM6IEFic3RyYWN0Q29udHJvbE9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtdLFxyXG4gICAgICAgICAgICBhc3luY1ZhbGlkYXRvcnM6IFtdLFxyXG4gICAgICAgICAgICB1cGRhdGVPbjogZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uICYmIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5hYnN0cmFjdENvbnRyb2xPcHRpb25zICYmIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5hYnN0cmFjdENvbnRyb2xPcHRpb25zWydnbG9iYWwnXVxyXG4gICAgICAgICAgICAgICAgPyBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uYWJzdHJhY3RDb250cm9sT3B0aW9uc1snZ2xvYmFsJ11cclxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXHJcbiAgICAgICAgfTtcclxuICAgICAgICBhYnN0cmFjdENvbnRyb2xPcHRpb25zID0gdGhpcy5nZXRBYnN0cmFjdENvbnRyb2xPcHRpb25zKFwiZ2xvYmFsXCIsIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiwgYWJzdHJhY3RDb250cm9sT3B0aW9ucyk7XHJcbiAgICAgICAgbGV0IGZvcm1Hcm91cCA9IG5ldyBSeEZvcm1Hcm91cChqc29uLm1vZGVsLCBqc29uLmVudGl0eU9iamVjdCwgZm9ybUdyb3VwT2JqZWN0LCBhYnN0cmFjdENvbnRyb2xPcHRpb25zKTtcclxuICAgICAgICBpZiAoZGVmYXVsdENvbnRhaW5lci5pc0V4cGVyaW1lbnRhbCkge1xyXG4gICAgICAgICAgICBqc29uLmVudGl0eU9iamVjdFtcImZvcm1Hcm91cFwiXSA9IGZvcm1Hcm91cDtcclxuICAgICAgICAgICAgdGhpcy5vdmVycmlkZVByb3BlcnRpZXMoZm9ybUdyb3VwLCBqc29uLmVudGl0eU9iamVjdCwgZXh0ZW5kZWRQcm9wZXJ0aWVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzTmVzdGVkQmluZGluZyAmJiAhdGhpcy5pc0dyb3VwQ2FsbGVkKVxyXG4gICAgICAgICAgICBmb3JtR3JvdXAucmVmcmVzaERpc2FibGUoKTtcclxuICAgICAgICByZXR1cm4gZm9ybUdyb3VwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG92ZXJyaWRlUHJvcGVydGllcyhmb3JtR3JvdXA6IFJ4Rm9ybUdyb3VwLCBlbnRpdHlPYmplY3Q6IGFueSwgcHJvcGVydGllczogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0pIHtcclxuICAgICAgICBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKS5mb3JFYWNoKHQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm92ZXJyaWRlUHJvcChlbnRpdHlPYmplY3QsIHQsIGZvcm1Hcm91cCk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0QWJzdHJhY3RDb250cm9sT3B0aW9ucyhuYW1lOiBzdHJpbmcsIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbjogRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBhYnN0cmFjdENvbnRyb2xPcHRpb25zOiBBYnN0cmFjdENvbnRyb2xPcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiAmJiBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uYWJzdHJhY3RDb250cm9sT3B0aW9ucyAmJiBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uYWJzdHJhY3RDb250cm9sT3B0aW9uc1tuYW1lXSlcclxuICAgICAgICAgICAgYWJzdHJhY3RDb250cm9sT3B0aW9ucy51cGRhdGVPbiA9IGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5hYnN0cmFjdENvbnRyb2xPcHRpb25zW25hbWVdO1xyXG5cclxuICAgICAgICBjb25zdCBjb250cm9sT3B0aW9ucyA9IGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiA/IGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5iYXNlQWJzdHJhY3RDb250cm9sT3B0aW9ucyA6IG51bGw7XHJcbiAgICAgICAgaWYgKGNvbnRyb2xPcHRpb25zICYmIGNvbnRyb2xPcHRpb25zW25hbWVdKSB7XHJcbiAgICAgICAgICAgIGlmIChjb250cm9sT3B0aW9uc1tuYW1lXS51cGRhdGVPbilcclxuICAgICAgICAgICAgICAgIGFic3RyYWN0Q29udHJvbE9wdGlvbnMudXBkYXRlT24gPSBjb250cm9sT3B0aW9uc1tuYW1lXS51cGRhdGVPbjtcclxuICAgICAgICAgICAgaWYgKGNvbnRyb2xPcHRpb25zW25hbWVdLnZhbGlkYXRvcnMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbnRyb2xPcHRpb25zW25hbWVdLnZhbGlkYXRvcnMpKVxyXG4gICAgICAgICAgICAgICAgICAgICg8VmFsaWRhdG9yRm5bXT5jb250cm9sT3B0aW9uc1tuYW1lXS52YWxpZGF0b3JzKS5mb3JFYWNoKHZhbGlkYXRvciA9PiAoPFZhbGlkYXRvckZuW10+YWJzdHJhY3RDb250cm9sT3B0aW9ucy52YWxpZGF0b3JzKS5wdXNoKHZhbGlkYXRvcikpXHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgKDxWYWxpZGF0b3JGbltdPmFic3RyYWN0Q29udHJvbE9wdGlvbnMudmFsaWRhdG9ycykucHVzaCg8VmFsaWRhdG9yRm4+Y29udHJvbE9wdGlvbnNbbmFtZV0udmFsaWRhdG9ycyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjb250cm9sT3B0aW9uc1tuYW1lXS5hc3luY1ZhbGlkYXRvcnMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbnRyb2xPcHRpb25zW25hbWVdLmFzeW5jVmFsaWRhdG9ycykpXHJcbiAgICAgICAgICAgICAgICAgICAgKDxWYWxpZGF0b3JGbltdPmNvbnRyb2xPcHRpb25zW25hbWVdLmFzeW5jVmFsaWRhdG9ycykuZm9yRWFjaCh2YWxpZGF0b3IgPT4gKDxWYWxpZGF0b3JGbltdPmFic3RyYWN0Q29udHJvbE9wdGlvbnMuYXN5bmNWYWxpZGF0b3JzKS5wdXNoKHZhbGlkYXRvcikpXHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgKDxWYWxpZGF0b3JGbltdPmFic3RyYWN0Q29udHJvbE9wdGlvbnMuYXN5bmNWYWxpZGF0b3JzKS5wdXNoKDxWYWxpZGF0b3JGbj5jb250cm9sT3B0aW9uc1tuYW1lXS52YWxpZGF0b3JzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYWJzdHJhY3RDb250cm9sT3B0aW9ucztcclxuICAgIH1cclxuICAgIHByaXZhdGUgb3ZlcnJpZGVQcm9wKGVudGl0eU9iamVjdDogYW55LCBwcm9wTmFtZTogc3RyaW5nLCBmb3JtR3JvdXA6IFJ4Rm9ybUdyb3VwKSB7XHJcbiAgICAgICAgbGV0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdC5nZXRQcm90b3R5cGVPZihlbnRpdHlPYmplY3QpLCBwcm9wTmFtZSk7XHJcbiAgICAgICAgbGV0IHZhbHVlID0gZW50aXR5T2JqZWN0W3Byb3BOYW1lXTtcclxuICAgICAgICBsZXQgb2xkVmFsdWUgPSBudWxsO1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbnRpdHlPYmplY3QsIHByb3BOYW1lLCB7XHJcbiAgICAgICAgICAgIGdldDogKCkgPT4geyByZXR1cm4gZGVzY3JpcHRvciA/IGRlc2NyaXB0b3IuZ2V0LmNhbGwoZW50aXR5T2JqZWN0KSA6IHZhbHVlIH0sXHJcbiAgICAgICAgICAgIHNldDogKHYpID0+IHtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gdjtcclxuICAgICAgICAgICAgICAgIGlmIChvbGRWYWx1ZSAhPSB2KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0LmNhbGwoZW50aXR5T2JqZWN0LCB2KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWZvcm1Hcm91cC5jaGFuZ2luZyAmJiBmb3JtR3JvdXAuY29udHJvbHNbcHJvcE5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1twcm9wTmFtZV0uc2V0VmFsdWUodik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgb2xkVmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -15,9 +15,9 @@ export class TypedFormBuilder {
15
15
  return this.formBuilder.group(controlsConfig, options);
16
16
  }
17
17
  }
18
- /** @nocollapse */ TypedFormBuilder.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: TypedFormBuilder, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
19
- /** @nocollapse */ TypedFormBuilder.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: TypedFormBuilder });
20
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: TypedFormBuilder, decorators: [{
18
+ /** @nocollapse */ TypedFormBuilder.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: TypedFormBuilder, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
19
+ /** @nocollapse */ TypedFormBuilder.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: TypedFormBuilder });
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: TypedFormBuilder, decorators: [{
21
21
  type: Injectable
22
22
  }], ctorParameters: function () { return []; } });
23
23
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWQtZm9ybS1idWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3NyYy9saWIvZm9ybS12YWxpZGF0b3JzL3NlcnZpY2VzL3R5cGVkLWZvcm0tYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFxQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFJcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFM0MsTUFBTSxPQUFPLGdCQUFnQjtJQUd6QjtRQUNJLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVELEtBQUssQ0FBSSxjQUVSLEVBQUUsT0FFSztRQUNKLElBQUksWUFBWSxHQUFZLE9BQU8sSUFBUyxFQUFFLENBQUM7UUFDL0MsSUFBSSxPQUFPLGNBQWMsSUFBSSxlQUFlO1lBQ3hDLE9BQU8sQ0FBQyxDQUFDLFlBQVksSUFBSSxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQWtCLENBQUMsQ0FBQyxDQUFlLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUUsQ0FBQyxhQUFrQixDQUFDO1FBQ3ZSLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFELENBQUM7O2dJQWpCUSxnQkFBZ0I7b0lBQWhCLGdCQUFnQjsyRkFBaEIsZ0JBQWdCO2tCQUQ1QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgQWJzdHJhY3RDb250cm9sT3B0aW9ucyB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBSeEZvcm1CdWlsZGVyIH0gZnJvbSBcIi4vcngtZm9ybS1idWlsZGVyXCI7XHJcbmltcG9ydCB7IEZVTkNUSU9OX1NUUklORyB9IGZyb20gXCIuLi9jb25zdC9hcHAuY29uc3RcIlxyXG5pbXBvcnQgeyBPcHRpb25zIH0gZnJvbSBcIi4uL21vZGVscy9pbnRlcmZhY2Uvb3B0aW9uc1wiXHJcbmltcG9ydCB7IFJ4Rm9ybUdyb3VwIH0gZnJvbSBcIi4vcngtZm9ybS1ncm91cFwiO1xyXG5pbXBvcnQgeyBJRm9ybUdyb3VwIH0gZnJvbSBcIi4uL21vZGVscy9pbnRlcmZhY2UvaS1mb3JtLWdyb3VwXCI7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBUeXBlZEZvcm1CdWlsZGVyIHtcclxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyO1xyXG4gICAgcHJpdmF0ZSByeEZvcm1CdWlsZGVyOiBSeEZvcm1CdWlsZGVyO1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtQnVpbGRlciA9IG5ldyBGb3JtQnVpbGRlcigpO1xyXG4gICAgICAgIHRoaXMucnhGb3JtQnVpbGRlciA9IG5ldyBSeEZvcm1CdWlsZGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ3JvdXA8VD4oY29udHJvbHNDb25maWc6IHtcclxuICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XHJcbiAgICB9LCBvcHRpb25zPzogQWJzdHJhY3RDb250cm9sT3B0aW9ucyB8IHtcclxuICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XHJcbiAgICB9IHwgbnVsbCk6IEZvcm1Hcm91cCB8IFQge1xyXG4gICAgICAgIGxldCBwYXJhbU9wdGlvbnMgPSA8T3B0aW9ucz5vcHRpb25zIHx8IDxhbnk+e307XHJcbiAgICAgICAgaWYgKHR5cGVvZiBjb250cm9sc0NvbmZpZyA9PSBGVU5DVElPTl9TVFJJTkcpXHJcbiAgICAgICAgICAgIHJldHVybiAhKHBhcmFtT3B0aW9ucyAmJiBwYXJhbU9wdGlvbnMuaXNJbnN0YW5jZSkgPyB0aGlzLnJ4Rm9ybUJ1aWxkZXIuZm9ybUdyb3VwKGNvbnRyb2xzQ29uZmlnLCBwYXJhbU9wdGlvbnMuZGF0YSwgcGFyYW1PcHRpb25zLmNvbmZpZykgYXMgSUZvcm1Hcm91cDxUPiA6ICg8UnhGb3JtR3JvdXA+dGhpcy5yeEZvcm1CdWlsZGVyLmZvcm1Hcm91cChjb250cm9sc0NvbmZpZywgcGFyYW1PcHRpb25zLmRhdGEsIHBhcmFtT3B0aW9ucy5jb25maWcpKS5tb2RlbEluc3RhbmNlIGFzIFQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoY29udHJvbHNDb25maWcsb3B0aW9ucyk7XHJcbiAgICB9XHJcbn0iXX0=