@seniorsistemas/angular-components 17.9.5 → 17.9.7

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 (112) hide show
  1. package/bundles/seniorsistemas-angular-components.umd.js +385 -149
  2. package/bundles/seniorsistemas-angular-components.umd.js.map +1 -1
  3. package/bundles/seniorsistemas-angular-components.umd.min.js +2 -2
  4. package/bundles/seniorsistemas-angular-components.umd.min.js.map +1 -1
  5. package/components/custom-fields/custom-fields.component.d.ts +1 -0
  6. package/components/dynamic-form/components/dynamic-field/dynamic-field.component.d.ts +0 -1
  7. package/components/dynamic-form/components/field-label/field-label.component.d.ts +6 -0
  8. package/components/dynamic-form/components/field-label/field-label.module.d.ts +2 -0
  9. package/components/dynamic-form/components/fields/autocomplete/autocomplete-field.component.d.ts +7 -0
  10. package/components/dynamic-form/components/fields/bignumber/bignumber-field.component.d.ts +5 -2
  11. package/components/dynamic-form/components/fields/calendar/calendar-field.component.d.ts +9 -2
  12. package/components/dynamic-form/components/fields/chips/chips-field.component.d.ts +7 -1
  13. package/components/dynamic-form/components/fields/country-phone-picker/country-phone-picker-field.component.d.ts +7 -0
  14. package/components/dynamic-form/components/fields/currency/currency-field.component.d.ts +6 -3
  15. package/components/dynamic-form/components/fields/file-upload/file-upload.component.d.ts +10 -0
  16. package/components/dynamic-form/components/fields/number/number-field.component.d.ts +7 -2
  17. package/components/dynamic-form/components/fields/password/password-field.component.d.ts +6 -2
  18. package/components/dynamic-form/components/fields/text/text-field.component.d.ts +6 -2
  19. package/components/dynamic-form/components/fields/text-area/text-area-field.component.d.ts +5 -0
  20. package/components/dynamic-form/components/fields/text-area-ia/text-area-ia-field.component.d.ts +2 -1
  21. package/components/dynamic-form/configurations/fields/field.d.ts +2 -0
  22. package/components/dynamic-form/configurations/form-field.d.ts +1 -0
  23. package/components/dynamic-form/dynamic-form.component.d.ts +0 -1
  24. package/components/dynamic-form/dynamic-form.directive.d.ts +0 -1
  25. package/components/info-sign/info-sign.directive.d.ts +4 -2
  26. package/components/locale/index.d.ts +1 -0
  27. package/components/tooltip/tooltip.directive.d.ts +1 -0
  28. package/esm2015/components/custom-fields/custom-fields.component.js +8 -2
  29. package/esm2015/components/dynamic-form/components/dynamic-field/dynamic-field.component.js +2 -5
  30. package/esm2015/components/dynamic-form/components/field-label/field-label.component.js +24 -0
  31. package/esm2015/components/dynamic-form/components/field-label/field-label.module.js +19 -0
  32. package/esm2015/components/dynamic-form/components/fields/autocomplete/autocomplete-field.component.js +18 -3
  33. package/esm2015/components/dynamic-form/components/fields/bignumber/bignumber-field.component.js +13 -5
  34. package/esm2015/components/dynamic-form/components/fields/bignumber/bignumber-field.module.js +3 -1
  35. package/esm2015/components/dynamic-form/components/fields/boolean/boolean-field.component.js +2 -2
  36. package/esm2015/components/dynamic-form/components/fields/calendar/calendar-field.component.js +19 -5
  37. package/esm2015/components/dynamic-form/components/fields/chips/chips-field.component.js +16 -5
  38. package/esm2015/components/dynamic-form/components/fields/country-phone-picker/country-phone-picker-field.component.js +18 -3
  39. package/esm2015/components/dynamic-form/components/fields/currency/currency-field.component.js +14 -6
  40. package/esm2015/components/dynamic-form/components/fields/currency/currency-field.module.js +12 -2
  41. package/esm2015/components/dynamic-form/components/fields/file-upload/file-upload.component.js +36 -3
  42. package/esm2015/components/dynamic-form/components/fields/lookup/lookup-field.component.js +2 -2
  43. package/esm2015/components/dynamic-form/components/fields/number/number-field.component.js +17 -5
  44. package/esm2015/components/dynamic-form/components/fields/number/number-field.module.js +3 -1
  45. package/esm2015/components/dynamic-form/components/fields/password/password-field.component.js +14 -4
  46. package/esm2015/components/dynamic-form/components/fields/password/password-field.module.js +3 -1
  47. package/esm2015/components/dynamic-form/components/fields/profile-picture/profile-picture-field.component.js +2 -2
  48. package/esm2015/components/dynamic-form/components/fields/profile-picture/profile-picture-field.module.js +3 -1
  49. package/esm2015/components/dynamic-form/components/fields/radio-button/radio-button-field.component.js +2 -2
  50. package/esm2015/components/dynamic-form/components/fields/select/select-field.component.js +2 -2
  51. package/esm2015/components/dynamic-form/components/fields/slider/slider-field.component.js +2 -2
  52. package/esm2015/components/dynamic-form/components/fields/text/text-field.component.js +15 -5
  53. package/esm2015/components/dynamic-form/components/fields/text/text-field.module.js +3 -1
  54. package/esm2015/components/dynamic-form/components/fields/text-area/text-area-field.component.js +15 -3
  55. package/esm2015/components/dynamic-form/components/fields/text-area-ia/text-area-ia-field.component.js +6 -3
  56. package/esm2015/components/dynamic-form/components/grid/row/row.component.js +1 -9
  57. package/esm2015/components/dynamic-form/configurations/fields/field.js +2 -1
  58. package/esm2015/components/dynamic-form/configurations/form-field.js +1 -1
  59. package/esm2015/components/dynamic-form/dynamic-form.component.js +2 -5
  60. package/esm2015/components/dynamic-form/dynamic-form.directive.js +1 -4
  61. package/esm2015/components/dynamic-form/dynamic-form.module.js +3 -1
  62. package/esm2015/components/info-sign/info-sign.directive.js +14 -8
  63. package/esm2015/components/locale/index.js +2 -1
  64. package/esm2015/components/locale/services/numeric.service.js +4 -3
  65. package/esm2015/components/tooltip/tooltip.directive.js +33 -2
  66. package/esm2015/seniorsistemas-angular-components.js +86 -84
  67. package/esm5/components/custom-fields/custom-fields.component.js +9 -2
  68. package/esm5/components/dynamic-form/components/dynamic-field/dynamic-field.component.js +2 -5
  69. package/esm5/components/dynamic-form/components/field-label/field-label.component.js +25 -0
  70. package/esm5/components/dynamic-form/components/field-label/field-label.module.js +22 -0
  71. package/esm5/components/dynamic-form/components/fields/autocomplete/autocomplete-field.component.js +17 -4
  72. package/esm5/components/dynamic-form/components/fields/bignumber/bignumber-field.component.js +13 -5
  73. package/esm5/components/dynamic-form/components/fields/bignumber/bignumber-field.module.js +3 -1
  74. package/esm5/components/dynamic-form/components/fields/boolean/boolean-field.component.js +2 -2
  75. package/esm5/components/dynamic-form/components/fields/calendar/calendar-field.component.js +19 -5
  76. package/esm5/components/dynamic-form/components/fields/chips/chips-field.component.js +16 -5
  77. package/esm5/components/dynamic-form/components/fields/country-phone-picker/country-phone-picker-field.component.js +17 -4
  78. package/esm5/components/dynamic-form/components/fields/currency/currency-field.component.js +14 -6
  79. package/esm5/components/dynamic-form/components/fields/currency/currency-field.module.js +12 -2
  80. package/esm5/components/dynamic-form/components/fields/file-upload/file-upload.component.js +37 -5
  81. package/esm5/components/dynamic-form/components/fields/lookup/lookup-field.component.js +2 -2
  82. package/esm5/components/dynamic-form/components/fields/number/number-field.component.js +17 -5
  83. package/esm5/components/dynamic-form/components/fields/number/number-field.module.js +3 -1
  84. package/esm5/components/dynamic-form/components/fields/password/password-field.component.js +14 -4
  85. package/esm5/components/dynamic-form/components/fields/password/password-field.module.js +3 -1
  86. package/esm5/components/dynamic-form/components/fields/profile-picture/profile-picture-field.component.js +2 -2
  87. package/esm5/components/dynamic-form/components/fields/profile-picture/profile-picture-field.module.js +3 -1
  88. package/esm5/components/dynamic-form/components/fields/radio-button/radio-button-field.component.js +2 -2
  89. package/esm5/components/dynamic-form/components/fields/select/select-field.component.js +2 -2
  90. package/esm5/components/dynamic-form/components/fields/slider/slider-field.component.js +2 -2
  91. package/esm5/components/dynamic-form/components/fields/text/text-field.component.js +15 -5
  92. package/esm5/components/dynamic-form/components/fields/text/text-field.module.js +3 -1
  93. package/esm5/components/dynamic-form/components/fields/text-area/text-area-field.component.js +14 -4
  94. package/esm5/components/dynamic-form/components/fields/text-area-ia/text-area-ia-field.component.js +6 -3
  95. package/esm5/components/dynamic-form/components/grid/row/row.component.js +2 -2
  96. package/esm5/components/dynamic-form/configurations/fields/field.js +2 -1
  97. package/esm5/components/dynamic-form/configurations/form-field.js +1 -1
  98. package/esm5/components/dynamic-form/dynamic-form.component.js +2 -5
  99. package/esm5/components/dynamic-form/dynamic-form.directive.js +1 -4
  100. package/esm5/components/dynamic-form/dynamic-form.module.js +3 -1
  101. package/esm5/components/info-sign/info-sign.directive.js +14 -8
  102. package/esm5/components/locale/index.js +2 -1
  103. package/esm5/components/locale/services/numeric.service.js +4 -3
  104. package/esm5/components/tooltip/tooltip.directive.js +40 -8
  105. package/esm5/seniorsistemas-angular-components.js +86 -84
  106. package/fesm2015/seniorsistemas-angular-components.js +290 -64
  107. package/fesm2015/seniorsistemas-angular-components.js.map +1 -1
  108. package/fesm5/seniorsistemas-angular-components.js +301 -68
  109. package/fesm5/seniorsistemas-angular-components.js.map +1 -1
  110. package/package.json +1 -1
  111. package/seniorsistemas-angular-components.d.ts +85 -83
  112. package/seniorsistemas-angular-components.metadata.json +1 -1
@@ -123,6 +123,7 @@ let CustomFieldsComponent = CustomFieldsComponent_1 = class CustomFieldsComponen
123
123
  this.formGroup.patchValue(this.parseValuesForFields(this.value));
124
124
  this.ready = true;
125
125
  });
126
+ this.addDisplayTimeInfoSignToFields();
126
127
  }
127
128
  ngAfterViewInit() {
128
129
  this.enableOrDisableFields(this.disableFields);
@@ -526,6 +527,11 @@ let CustomFieldsComponent = CustomFieldsComponent_1 = class CustomFieldsComponen
526
527
  getTranslateLabel(label) {
527
528
  return this.translateService.instant(`${this.domain}.${this.service}.${label}`);
528
529
  }
530
+ addDisplayTimeInfoSignToFields() {
531
+ this.fields.forEach((field) => {
532
+ field.displayTimeInfoSign = this.displayTimeInfoSign;
533
+ });
534
+ }
529
535
  };
530
536
  CustomFieldsComponent.ctorParameters = () => [
531
537
  { type: CustomFieldsService },
@@ -576,7 +582,7 @@ __decorate([
576
582
  CustomFieldsComponent = CustomFieldsComponent_1 = __decorate([
577
583
  Component({
578
584
  selector: "s-custom-fields",
579
- template: "<s-dynamic-form [fields]=\"fields\"\n [form]=\"formGroup\"\n [errorMessages]=\"{pattern: invalidErrorLabel, required: requiredErrorMessage}\"\n [displayTimeInfoSign]=\"displayTimeInfoSign\"></s-dynamic-form>",
585
+ template: "<s-dynamic-form [fields]=\"fields\"\n [form]=\"formGroup\"\n [errorMessages]=\"{\n pattern: invalidErrorLabel,\n required: requiredErrorMessage}\">\n</s-dynamic-form>",
580
586
  providers: [
581
587
  {
582
588
  provide: NG_VALUE_ACCESSOR,
@@ -599,4 +605,4 @@ function isUploading(file) {
599
605
  function errorOnUpload(file) {
600
606
  return () => (file.error ? { uploadError: true } : null);
601
607
  }
602
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWZpZWxkcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9jdXN0b20tZmllbGRzL2N1c3RvbS1maWVsZHMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFxQixhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RSxPQUFPLEVBQ0gsU0FBUyxFQUVULEtBQUssRUFLTCxRQUFRLEdBR1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNILGdCQUFnQixFQUNoQixvQkFBb0IsRUFDcEIsU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1QsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsV0FBVyxFQUNYLFVBQVUsR0FDYixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLFNBQVMsTUFBTSxjQUFjLENBQUM7QUFDckMsT0FBTyxLQUFLLE9BQU8sTUFBTSxRQUFRLENBQUM7QUFDbEMsT0FBTyxFQUErQixPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHMUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxv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QUksQ0FBQyxDQUFDO0FBQ25FLENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxJQUFhO0lBQ2hDLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwRXZlbnRUeXBlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5pbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgU2ltcGxlQ2hhbmdlLFxuICAgIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICAgIENvbnRyb2xDb250YWluZXIsXG4gICAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gICAgRm9ybUFycmF5LFxuICAgIEZvcm1Db250cm9sLFxuICAgIEZvcm1Hcm91cCxcbiAgICBOR19WQUxJREFUT1JTLFxuICAgIE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgIFZhbGlkYXRvcixcbiAgICBWYWxpZGF0b3JGbixcbiAgICBWYWxpZGF0b3JzLFxufSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gXCJAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSBcImJpZ251bWJlci5qc1wiO1xuaW1wb3J0ICogYXMgbW9tZW50XyBmcm9tIFwibW9tZW50XCI7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QsIGZvcmtKb2luLCBvZiwgdGhyb3dFcnJvciB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaW5hbGl6ZSwgdGFrZVVudGlsIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBGaWVsZFR5cGUsIEZvcm1GaWVsZCwgTnVtYmVyRmllbGQgfSBmcm9tIFwiLi4vZHluYW1pYy1mb3JtL2luZGV4XCI7XG5pbXBvcnQgeyBGaWxlRHRvIH0gZnJvbSBcIi4uL2ZpbGUtdXBsb2FkL2luZGV4XCI7XG5pbXBvcnQgeyBMb2NhbGVPcHRpb25zIH0gZnJvbSBcIi4uL2xvY2FsZVwiO1xuaW1wb3J0IHsgTG9jYWxlU2VydmljZSB9IGZyb20gXCIuLi9sb2NhbGUvbG9jYWxlLnNlcnZpY2VcIjtcbmltcG9ydCB7IEN1c3RvbUZpZWxkc1NlcnZpY2UgfSBmcm9tIFwiLi9jdXN0b20tZmllbGRzLnNlcnZpY2VcIjtcbmltcG9ydCB7IE51bWJlckZpZWxkQ29tcG9uZW50IH0gZnJvbSBcIi4uL2R5bmFtaWMtZm9ybS9jb21wb25lbnRzL2ZpZWxkc1wiO1xuXG5lbnVtIEN1c3RvbUZpZWxkVHlwZSB7XG4gICAgU3RyaW5nID0gXCJTdHJpbmdcIixcbiAgICBCb29sZWFuID0gXCJCb29sZWFuXCIsXG4gICAgSW50ZWdlciA9IFwiSW50ZWdlclwiLFxuICAgIERvdWJsZSA9IFwiRG91YmxlXCIsXG4gICAgRGF0ZSA9IFwiRGF0ZVwiLFxuICAgIERhdGVUaW1lID0gXCJEYXRlVGltZVwiLFxuICAgIExvY2FsRGF0ZVRpbWUgPSBcIkxvY2FsRGF0ZVRpbWVcIixcbiAgICBUaW1lID0gXCJUaW1lXCIsXG4gICAgTW9uZXkgPSBcIk1vbmV5XCIsXG4gICAgQmxvYiA9IFwiQmxvYlwiLFxuICAgIEJpbmFyeSA9IFwiQmluYXJ5XCIsXG4gICAgQW55ID0gXCJBbnlcIixcbiAgICBFbnVtID0gXCJFbnVtXCIsXG59XG5cbmNvbnN0IG1vbWVudCA9IG1vbWVudF87IC8vIEBIQUNLIE5lY2Vzc2FyeSBiZWNhdXNlIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9yb2xsdXAvcm9sbHVwL2lzc3Vlcy82NzBcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6IFwicy1jdXN0b20tZmllbGRzXCIsXG4gICAgdGVtcGxhdGVVcmw6IFwiLi9jdXN0b20tZmllbGRzLmNvbXBvbmVudC5odG1sXCIsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IEN1c3RvbUZpZWxkc0NvbXBvbmVudCxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IEN1c3RvbUZpZWxkc0NvbXBvbmVudCxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIEN1c3RvbUZpZWxkc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yLCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRvbWFpbjogc3RyaW5nO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNlcnZpY2U6IHN0cmluZztcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBlbnRpdHk6IHN0cmluZztcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpbnZhbGlkRXJyb3JMYWJlbCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFwicGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmludmFsaWRfdmFsdWVcIik7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZW50aXR5T2JqZWN0OiBhbnk7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY3VzdG9tRmllbGRzRW5kcG9pbnQgPSBcInBsYXRmb3JtL2ZpZWxkX2N1c3RvbWl6YXRpb24vcXVlcmllcy9nZXRFbnRpdHlcIjtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBmaWxlTG9jYXRpb25FbmRwb2ludCA9IFwicGxhdGZvcm0vZmllbGRfY3VzdG9taXphdGlvbi9hY3Rpb25zL3JlcXVlc3RVcGxvYWRcIjtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyByZXF1ZXN0QWNjZXNzRW5kcG9pbnQgPSBcInBsYXRmb3JtL2ZpZWxkX2N1c3RvbWl6YXRpb24vYWN0aW9ucy9yZXF1ZXN0QWNjZXNzXCI7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmVxdWlyZWRFcnJvck1lc3NhZ2U6IHN0cmluZztcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkaXNwbGF5VGltZUluZm9TaWduOiBudW1iZXI7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2hvd0ZpbGVVcGxvYWREYXRlOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmVhZHkkOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj47XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGlzYWJsZUZpZWxkczogYm9vbGVhbjtcbiAgICBwdWJsaWMgZmllbGRzOiBGb3JtRmllbGRbXSA9IFtdO1xuICAgIHB1YmxpYyBmb3JtR3JvdXA6IEZvcm1Hcm91cDtcbiAgICBwcml2YXRlIHJlYWR5ID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBvbkNoYW5nZTogYW55O1xuICAgIHByaXZhdGUgb25Ub3VjaGVkOiBhbnk7XG4gICAgcHJpdmF0ZSB2YWx1ZTogYW55O1xuICAgIHByaXZhdGUgbmdVc3Vic2NyaWJlOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBwcml2YXRlIHVwbG9hZENhbmNlbGVkOiBib29sZWFuO1xuICAgIHByaXZhdGUgaGFzQmxvYjogYm9vbGVhbjtcbiAgICBwcml2YXRlIGhhc1VwbG9hZGVkOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgY3VzdG9tRmllbGRzU2VydmljZTogQ3VzdG9tRmllbGRzU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBsb2NhbGVTZXJ2aWNlOiBMb2NhbGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgY29udHJvbENvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lclxuICAgICkge31cblxuICAgIGdldCBwYXJlbnRGb3JtKCk6IEZvcm1Hcm91cCB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xDb250YWluZXIuY29udHJvbCBhcyBGb3JtR3JvdXA7XG4gICAgfVxuXG4gICAgZ2V0IHBhcmVudENvbnRyb2woKTogRm9ybUNvbnRyb2wge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnRGb3JtLmdldChcImN1c3RvbVwiKSBhcyBGb3JtQ29udHJvbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICghdGhpcy5kb21haW4pIHRocm93IG5ldyBFcnJvcihcIllvdSBuZWVkIHRvIHNwZWNpZnkgdGhlIGN1c3RvbS1maWVsZHMgZG9tYWluIVwiKTtcbiAgICAgICAgaWYgKCF0aGlzLnNlcnZpY2UpIHRocm93IG5ldyBFcnJvcihcIllvdSBuZWVkIHRvIHNwZWNpZnkgdGhlIGN1c3RvbS1maWVsZHMgc2VydmljZSFcIik7XG4gICAgICAgIGlmICghdGhpcy5lbnRpdHkpIHRocm93IG5ldyBFcnJvcihcIllvdSBuZWVkIHRvIHNwZWNpZnkgdGhlIGN1c3RvbS1maWVsZHMgZW50aXR5IVwiKTtcblxuICAgICAgICB0aGlzLmZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xuICAgICAgICBjb25zdCBvYnNlcnZhYmxlcyA9IFt0aGlzLmdldEN1c3RvbUZpZWxkcygpLCB0aGlzLmxvY2FsZVNlcnZpY2UuZ2V0KCldO1xuICAgICAgICBmb3JrSm9pbihvYnNlcnZhYmxlcylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVXN1YnNjcmliZSksXG4gICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudENvbnRyb2w/Lm1hcmtBc1ByaXN0aW5lKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHkkKSB0aGlzLnJlYWR5JC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55W10pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBbY3VzdG9tRmllbGRzUmVzcG9uc2UsIGxvY2FsZU9wdGlvbnNdID0gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVmYXVsdHM6IGFueSA9IHt9O1xuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5TdHJpbmddID0ge307XG4gICAgICAgICAgICAgICAgZGVmYXVsdHNbQ3VzdG9tRmllbGRUeXBlLkJvb2xlYW5dID0geyBkZWZhdWx0VmFsdWU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgZGVmYXVsdHNbQ3VzdG9tRmllbGRUeXBlLkludGVnZXJdID0ge307XG4gICAgICAgICAgICAgICAgZGVmYXVsdHNbQ3VzdG9tRmllbGRUeXBlLkRvdWJsZV0gPSB7IGRlZmF1bHRNYXNrOiBcIlwiIH07XG4gICAgICAgICAgICAgICAgZGVmYXVsdHNbQ3VzdG9tRmllbGRUeXBlLk1vbmV5XSA9IHt9O1xuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5EYXRlXSA9IHt9O1xuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5EYXRlVGltZV0gPSB7fTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuTG9jYWxEYXRlVGltZV0gPSB7fTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuVGltZV0gPSB7fTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuQmxvYl0gPSB7fTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuRW51bV0gPSB7fTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuQmluYXJ5XSA9IHt9O1xuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5BbnldID0ge307XG5cbiAgICAgICAgICAgICAgICBpZiAoIWN1c3RvbUZpZWxkc1Jlc3BvbnNlIHx8ICFjdXN0b21GaWVsZHNSZXNwb25zZS5lbnRpdHlfKSByZXR1cm47XG4gICAgICAgICAgICAgICAgY29uc3QgeyBhY3RpdmUsIGZpZWxkcyB9ID0gY3VzdG9tRmllbGRzUmVzcG9uc2UuZW50aXR5XztcbiAgICAgICAgICAgICAgICBpZiAoIWFjdGl2ZSkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgZmllbGRzXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGZpZWxkOiBhbnkpID0+IGZpZWxkLmN1c3RvbWl6YWJsZSAmJiBmaWVsZC5jdXN0b21pemF0aW9uICYmIGZpZWxkLmN1c3RvbWl6YXRpb24uYWN0aXZlKVxuICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybUZpZWxkID0gdGhpcy5nZXRGb3JtRmllbGQoZmllbGQsIGxvY2FsZU9wdGlvbnMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZFR5cGUgPSBmaWVsZC50eXBlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gQ3VzdG9tRmllbGRUeXBlLkJsb2IgJiYgdGhpcy52YWx1ZSAmJiB0aGlzLnZhbHVlW2Zvcm1GaWVsZC5uYW1lXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUJsb2JUb0ZpbGVVcGxvYWQoZm9ybUZpZWxkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyB2YWxpZGF0aW9uUmVnZXggfSA9IGZpZWxkLmN1c3RvbWl6YXRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFzSXNUeXBlcyA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21GaWVsZFR5cGUuQm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21GaWVsZFR5cGUuTW9uZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tRmllbGRUeXBlLkRhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tRmllbGRUeXBlLkRhdGVUaW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbUZpZWxkVHlwZS5Mb2NhbERhdGVUaW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbUZpZWxkVHlwZS5UaW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdG9ycyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRpb25SZWdleCAmJiAhYXNJc1R5cGVzLmluY2x1ZGVzKGZpZWxkVHlwZSkpIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4odmFsaWRhdGlvblJlZ2V4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGRUeXBlID09PSBDdXN0b21GaWVsZFR5cGUuSW50ZWdlciAmJiAhZm9ybUZpZWxkLm1hc2spIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4oL15cXC0/XFxkKiQvKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3JtRmllbGQucmVxdWlyZWQ/LigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sID0gbmV3IEZvcm1Db250cm9sKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6IGRlZmF1bHRzW2ZpZWxkVHlwZV0uZGVmYXVsdFZhbHVlLCBkaXNhYmxlZDogdGhpcy5mb3JtR3JvdXAuZGlzYWJsZWQgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5hZGRDb250cm9sKGZvcm1GaWVsZC5uYW1lLCBjb250cm9sKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWVsZHMucHVzaChmb3JtRmllbGQpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlRmllbGRDdXN0b21pemF0aW9uKGZpZWxkcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh0aGlzLnBhcnNlVmFsdWVzRm9yRmllbGRzKHRoaXMudmFsdWUpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZW5hYmxlT3JEaXNhYmxlRmllbGRzKHRoaXMuZGlzYWJsZUZpZWxkcyk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlcy5kaXNhYmxlRmllbGRzKSB7XG4gICAgICAgICAgICB0aGlzLmVuYWJsZU9yRGlzYWJsZUZpZWxkcyhjaGFuZ2VzLmRpc2FibGVGaWVsZHMuY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5uZ1VzdWJzY3JpYmUubmV4dCgpO1xuICAgICAgICB0aGlzLm5nVXN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBGdW5jdGlvbikge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbkNoYW5nZSh0aGlzLnBhcnNlRmllbGRzVmFsdWVzKCkpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IEZ1bmN0aW9uKSB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuICAgICAgICBpZiAodGhpcy5yZWFkeSkge1xuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLnBhcnNlVmFsdWVzRm9yRmllbGRzKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUobmV3VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVGaWxlc0lmU2V0Rm9ybVZhbHVlc0FmdGVySW5pdCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh2YWx1ZSB8fCB7fSk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgICAgIGlmIChpc0Rpc2FibGVkKSB0aGlzLmZvcm1Hcm91cC5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgZWxzZSB0aGlzLmZvcm1Hcm91cC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDdXN0b21GaWVsZHMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgaWYgKHRoaXMuZW50aXR5T2JqZWN0ICYmIHRoaXMuZW50aXR5T2JqZWN0LmVudGl0eV8pIHtcbiAgICAgICAgICAgIHJldHVybiBvZih0aGlzLmVudGl0eU9iamVjdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tRmllbGRzU2VydmljZS5nZXRDdXN0b21GaWVsZHModGhpcy5kb21haW4sIHRoaXMuc2VydmljZSwgdGhpcy5lbnRpdHksIHRoaXMuY3VzdG9tRmllbGRzRW5kcG9pbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyB2YWxpZGF0ZSgpIHtcbiAgICAgICAgY29uc3QgZXJyb3JzOiBhbnkgPSB7fTtcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5mb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGVycm9yczogY29udHJvbEVycm9ycyB9ID0gdGhpcy5mb3JtR3JvdXAuZ2V0KGZpZWxkKTtcbiAgICAgICAgICAgIGlmIChjb250cm9sRXJyb3JzKSBlcnJvcnNbZmllbGRdID0gY29udHJvbEVycm9ycztcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbmFibGVPckRpc2FibGVGaWVsZHMoZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1Hcm91cCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBjb250cm9sTmFtZSBvZiBPYmplY3Qua2V5cyh0aGlzLmZvcm1Hcm91cC52YWx1ZSkpIHtcbiAgICAgICAgICAgIGRpc2FibGVkID8gdGhpcy5mb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lKS5kaXNhYmxlKCkgOiB0aGlzLmZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWUpLmVuYWJsZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFuRmllbGRzKCkge1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5yZXNldCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFyc2VWYWx1ZXNGb3JGaWVsZHModmFsdWVzOiBhbnkpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVmFsdWVzID0geyAuLi52YWx1ZXMgfTtcblxuICAgICAgICB0aGlzLmZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyB0eXBlLCBuYW1lIH0gPSBmaWVsZDtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdmFsdWVzICYmIHZhbHVlc1tuYW1lXTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUcmF0YW1lbnRvIGV4Y2x1c2l2byBwYXJhIGNhbXBvcyBib29sZWFuIHF1ZSB0ZW0gbyBzdGF0dXMgRW1wdHlcbiAgICAgICAgICAgICAqIEVzc2EgY29uZGljaW9uYWwgbmVjZXNzaXRhIGVzdGFyIGFudGVzIGRvIGlmICghdmFsdWUpIHJldHVybjtcbiAgICAgICAgICAgICAqIFBvaXMgZWxhIHRlbSB1bSBzdGF0dXMgcXVlIHVzYSBudWxsIG5vIHZhbG9yIGRvIGNhbXBvIHJhZGlvIGJvb2xlYW5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5Cb29sZWFuKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNTdHJpbmcgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCI7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm90VmFsaWQgPSAhaXNTdHJpbmcgJiYgdHlwZW9mIHZhbHVlICE9PSBcImJvb2xlYW5cIjtcbiAgICAgICAgICAgICAgICBpZiAobm90VmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWVzW25hbWVdID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBDb25kaWNpb25hbCBwYXJhIGNhbXBvcyBxdWUgcmV0b3JuYW0gc3RyaW5nIGRlIGJvb2xlbiBkbyBiYWNrYW5kXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1N0cmluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWVzW25hbWVdID0gdmFsdWUgPT09IFwidHJ1ZVwiID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWVzW25hbWVdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdmFsdWUpIHJldHVybjtcblxuICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGUuRGF0ZTpcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWVzW25hbWVdID0gbW9tZW50KHZhbHVlKS50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGUuRGF0ZVRpbWU6XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlc1tuYW1lXSA9IG1vbWVudCh2YWx1ZSkudG9EYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlLkxvY2FsRGF0ZVRpbWU6XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlc1tuYW1lXSA9IG1vbWVudCh2YWx1ZSwgXCJZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTXCIpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkVHlwZS5UaW1lOlxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZXNbbmFtZV0gPSBtb21lbnQodmFsdWUsIFwiSEg6bW06c3NcIikudG9EYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcGFyc2VkVmFsdWVzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFsZ3VtYXMgZXF1aXBlcyBzw7Mgc2V0YW0gdmFsb3Igbm8gZm9ybXVsw6FyaW8sIGFww7NzIG8gY2FycmVnYW1lbnRvIGRhIHRlbGFcbiAgICAgKiBDb21vIMOpIGJlbSBwYWRyw6NvIGlzc28sIGZvaSBuZWNlc3PDoXJpbyBjcmlhciBlc3NlIG3DqXRvZG8gcGFyYSBnZXJhciBvIGZpbGVcbiAgICAgKiBhcMOzcyBzZXRhciBvIHZhbG9yIG5vIGZvcm11bMOhcmlvXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVGaWxlc0lmU2V0Rm9ybVZhbHVlc0FmdGVySW5pdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmhhc1VwbG9hZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGZpZWxkOiBGb3JtRmllbGQpID0+IGZpZWxkLnR5cGUgPT09IEZpZWxkVHlwZS5CbG9iKVxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5mb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpLnZhbHVlKSB0aGlzLmNyZWF0ZUJsb2JUb0ZpbGVVcGxvYWQoZmllbGQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYXJzZUZpZWxkc1ZhbHVlcygpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVmFsdWVzOiBhbnkgPSB7fTtcblxuICAgICAgICB0aGlzLmZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyB0eXBlLCBuYW1lLCBtYXNrLCBzY2FsZSB9ID0gZmllbGQ7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLmZvcm1Hcm91cC5nZXQobmFtZSkudmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEZpZWxkVHlwZS5OdW1iZXI6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFzaykgdmFsdWUgPSBuZXcgQmlnTnVtYmVyKHZhbHVlKS50b0ZpeGVkKHNjYWxlIGFzIG51bWJlcikudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEZpZWxkVHlwZS5EYXRlOlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBtb21lbnQodmFsdWUpLmZvcm1hdChcIllZWVktTU0tRERcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGUuRGF0ZVRpbWU6XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGUuTG9jYWxEYXRlVGltZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbW9tZW50KHZhbHVlKS5mb3JtYXQoXCJZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlLlRpbWU6XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG1vbWVudCh2YWx1ZSkuZm9ybWF0KFwiSEg6bW06c3NcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiAhTnVtYmVyLmlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzVHlwZU51bWJlck9yRW51bSh0eXBlKSkge1xuICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlc1tuYW1lXSA9IGZpZWxkLm11bHRpcGxlID8gW10gOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5oYXNCbG9iKSBwYXJzZWRWYWx1ZXNbXCJmaWVsZEN1c3RvbWl6YXRpb25cIl0gPSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJmaWVsZEN1c3RvbWl6YXRpb25cIikudmFsdWU7XG4gICAgICAgIHJldHVybiBwYXJzZWRWYWx1ZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1R5cGVOdW1iZXJPckVudW0odHlwZTogRmllbGRUeXBlKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IG51bWJlck9yRW51bSA9IFtGaWVsZFR5cGUuTnVtYmVyLCBGaWVsZFR5cGUuRW51bV07XG4gICAgICAgIHJldHVybiBudW1iZXJPckVudW0uaW5jbHVkZXModHlwZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGb3JtRmllbGQoZmllbGQ6IGFueSwgbG9jYWxlT3B0aW9uczogTG9jYWxlT3B0aW9ucyk6IEZvcm1GaWVsZCB7XG4gICAgICAgIGxldCBwYXJhbWV0ZXJzO1xuXG4gICAgICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBDdXN0b21GaWVsZFR5cGUuQmxvYjpcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0gdGhpcy5nZXRCbG9iUGFyYW1ldGVycygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBDdXN0b21GaWVsZFR5cGUuQm9vbGVhbjpcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0gdGhpcy5nZXRCb29sZWFuUGFyYW1ldGVycygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIkVudW1lcmF0aW9uXCI6XG4gICAgICAgICAgICBjYXNlIEN1c3RvbUZpZWxkVHlwZS5FbnVtOlxuICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSBGaWVsZFR5cGUuRW51bTtcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0gdGhpcy5nZXRFbnVtUGFyYW1ldGVycyhmaWVsZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEN1c3RvbUZpZWxkVHlwZS5Nb25leTpcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuQ3VzdG9tLFxuICAgICAgICAgICAgICAgICAgICBDdXN0b21GaWVsZENvbXBvbmVudENsYXNzOiBOdW1iZXJGaWVsZENvbXBvbmVudCxcbiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tRmllbGRDbGFzczogTnVtYmVyRmllbGQsXG4gICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbjogMTUsXG4gICAgICAgICAgICAgICAgICAgIHNjYWxlOiAyLFxuICAgICAgICAgICAgICAgICAgICBsZWZ0QWRkb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBsb2NhbGVPcHRpb25zPy5udW1iZXI/LmN1cnJlbmN5U3ltYm9sID8/IFwiUiRcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBDdXN0b21GaWVsZFR5cGUuRG91YmxlOlxuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5DdXN0b20sXG4gICAgICAgICAgICAgICAgICAgIEN1c3RvbUZpZWxkQ29tcG9uZW50Q2xhc3M6IE51bWJlckZpZWxkQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICBDdXN0b21GaWVsZENsYXNzOiBOdW1iZXJGaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uOiAxNSxcbiAgICAgICAgICAgICAgICAgICAgc2NhbGU6IDIsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ3VzdG9tRmllbGRUeXBlLkludGVnZXI6XG4gICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkN1c3RvbSxcbiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tRmllbGRDb21wb25lbnRDbGFzczogTnVtYmVyRmllbGRDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgICAgIEN1c3RvbUZpZWxkQ2xhc3M6IE51bWJlckZpZWxkLFxuICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb246IDE1LFxuICAgICAgICAgICAgICAgICAgICBzY2FsZTogMCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgbmFtZTogZmllbGQuaWQsXG4gICAgICAgICAgICBsYWJlbDogZmllbGQuY3VzdG9taXphdGlvbi5sYWJlbCxcbiAgICAgICAgICAgIHRvb2x0aXA6IGZpZWxkLmN1c3RvbWl6YXRpb24udG9vbHRpcCxcbiAgICAgICAgICAgIGluZm9TaWduOiBmaWVsZC5jdXN0b21pemF0aW9uLmluZm9TaWduLFxuICAgICAgICAgICAgdHlwZTogZmllbGQudHlwZSxcbiAgICAgICAgICAgIG1hc2s6IGZpZWxkLmN1c3RvbWl6YXRpb24ubWFzayxcbiAgICAgICAgICAgIHJlcXVpcmVkOiAoKSA9PiBmaWVsZC5jdXN0b21pemF0aW9uLm1hbmRhdG9yeSxcbiAgICAgICAgICAgIGNhbGVuZGFyT3B0aW9uczogbG9jYWxlT3B0aW9ucy5jYWxlbmRhcixcbiAgICAgICAgICAgIGN1cnJlbmN5T3B0aW9uczogbG9jYWxlT3B0aW9ucy5udW1iZXIsXG4gICAgICAgICAgICAuLi5wYXJhbWV0ZXJzLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEVudW1QYXJhbWV0ZXJzKGZpZWxkOiBhbnkpOiBvYmplY3Qge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2hvd0NsZWFyOiB0cnVlLFxuICAgICAgICAgICAgbXVsdGlwbGU6IGZpZWxkLmN1c3RvbWl6YXRpb24uY3VzdG9tRW51bWVyYXRpb24ubXVsdGlwbGUsXG4gICAgICAgICAgICBvcHRpb25zOiBmaWVsZC5jdXN0b21pemF0aW9uLmN1c3RvbUVudW1lcmF0aW9uLnZhbHVlcy5tYXAoKGU6IGFueSkgPT4gKHsgbGFiZWw6IGUudmFsdWUsIHZhbHVlOiBlLmtleSB9KSksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRCb29sZWFuUGFyYW1ldGVycygpOiBvYmplY3Qge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgb3B0aW9uc0xhYmVsOiB7XG4gICAgICAgICAgICAgICAgdHJ1ZTogdGhpcy5nZXRUcmFuc2xhdGVMYWJlbChgdHJ1ZV9sYWJlbGApLFxuICAgICAgICAgICAgICAgIGZhbHNlOiB0aGlzLmdldFRyYW5zbGF0ZUxhYmVsKGBmYWxzZV9sYWJlbGApLFxuICAgICAgICAgICAgICAgIGVtcHR5OiB0aGlzLmdldFRyYW5zbGF0ZUxhYmVsKGBlbXB0eV9sYWJlbGApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEJsb2JQYXJhbWV0ZXJzKCk6IG9iamVjdCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzaXplOiB7XG4gICAgICAgICAgICAgICAgc206IDEyLFxuICAgICAgICAgICAgICAgIG1kOiAxMixcbiAgICAgICAgICAgICAgICBsZzogMTIsXG4gICAgICAgICAgICAgICAgeGw6IDEyLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjY2VwdDogXCJpbWFnZS8qLCBhcHBsaWNhdGlvbi8qLCB0ZXh0LypcIixcbiAgICAgICAgICAgIGNob29zZUxhYmVsOiB0aGlzLmdldFRyYW5zbGF0ZUxhYmVsKGBjaG9vc2VfbGFiZWxgKSxcbiAgICAgICAgICAgIHJlbW92ZUxhYmVsOiB0aGlzLmdldFRyYW5zbGF0ZUxhYmVsKGByZW1vdmVfbGFiZWxgKSxcbiAgICAgICAgICAgIGNhbmNlbExhYmVsOiB0aGlzLmdldFRyYW5zbGF0ZUxhYmVsKGBjYW5jZWxfbGFiZWxgKSxcbiAgICAgICAgICAgIHN1Y2Nlc3NUb29sdGlwOiB0aGlzLmdldFRyYW5zbGF0ZUxhYmVsKGBzdWNjZXNzX3Rvb2x0aXBgKSxcbiAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgICAgICAgIG9uVXBsb2FkRmlsZTogKGV2ZW50OiB7IGZpbGVzOiBGaWxlRHRvW10gfSwgZm9ybWZpZWxkOiBGb3JtRmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc1VwbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZEZpbGUoZXZlbnQsIGZvcm1maWVsZCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25SZW1vdmVGaWxlOiAoZXZlbnQ6IHsgZmlsZTogRmlsZUR0byB9LCBmb3JtZmllbGQ6IEZvcm1GaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRmlsZShldmVudCwgZm9ybWZpZWxkKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkNhbmNlbFVwbG9hZDogKGV2ZW50OiBudW1iZXIsIGZvcm1maWVsZDogRm9ybUZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYW5jZWxVcGxvYWQoZXZlbnQsIGZvcm1maWVsZCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25Eb3dubG9hZEZpbGU6IChldmVudDogeyBpbmRleDogbnVtYmVyOyBhbmNob3I6IEVsZW1lbnRSZWYgfSwgZm9ybWZpZWxkOiBGb3JtRmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRvd25sb2FkRmlsZShldmVudCwgZm9ybWZpZWxkKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzaG93RmlsZVVwbG9hZERhdGU6IHRoaXMuc2hvd0ZpbGVVcGxvYWREYXRlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIMOJIG5lY2Vzc8OhcmlvIGNyaWFyIG8gZmllbGRDdXN0b21pemF0aW9uIHF1YW5kbyBow6EgdW0gQmxvYiBuYSBlbnRpZGFkZSBwYXJhIGdlcmFyIG9cbiAgICAgKiBjb20gb3MgZmllbGRzIGluc2VyaWRvcyBlIGRlbGV0YWRvcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZUZpZWxkQ3VzdG9taXphdGlvbihmaWVsZHM6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGFzQmxvYiA9ICEhZmllbGRzLmZpbHRlcigoZmllbGQ6IGFueSkgPT4gZmllbGQudHlwZSA9PT0gQ3VzdG9tRmllbGRUeXBlLkJsb2IpLmxlbmd0aDtcbiAgICAgICAgaWYgKHRoaXMuaGFzQmxvYikge1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuYWRkQ29udHJvbChcbiAgICAgICAgICAgICAgICBcImZpZWxkQ3VzdG9taXphdGlvblwiLFxuICAgICAgICAgICAgICAgIG5ldyBGb3JtQXJyYXkoW1xuICAgICAgICAgICAgICAgICAgICBuZXcgRm9ybUdyb3VwKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbjogbmV3IEZvcm1Db250cm9sKHRoaXMuZG9tYWluKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2U6IG5ldyBGb3JtQ29udHJvbCh0aGlzLnNlcnZpY2UpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiBuZXcgRm9ybUNvbnRyb2wodGhpcy5lbnRpdHkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9EZWxldGU6IG5ldyBGb3JtQ29udHJvbCh7IHZhbHVlOiB7fSwgZGlzYWJsZWQ6IGZhbHNlIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9JbnNlcnQ6IG5ldyBGb3JtQ29udHJvbCh7IHZhbHVlOiB7fSwgZGlzYWJsZWQ6IGZhbHNlIH0pLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlQmxvYlRvRmlsZVVwbG9hZChmaWVsZDogRm9ybUZpZWxkKSB7XG4gICAgICAgIGNvbnN0IG9iamVjdElkID0gdGhpcy52YWx1ZVtmaWVsZC5uYW1lXSA/IHRoaXMudmFsdWVbZmllbGQubmFtZV0gOiB0aGlzLmZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSkudmFsdWU7XG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gb2JqZWN0SWQuc3Vic3RyaW5nKG9iamVjdElkLmxhc3RJbmRleE9mKFwiL1wiKSArIDEpO1xuICAgICAgICBjb25zdCBmaWxlOiBQYXJ0aWFsPEZpbGVEdG8+ID0geyBuYW1lOiBmaWxlTmFtZSwgb2JqZWN0SWQsIHNhdmVkRmlsZTogdHJ1ZSB9O1xuICAgICAgICBmaWVsZC5maWxlcyA9IFtmaWxlIGFzIEZpbGVEdG9dO1xuICAgIH1cblxuICAgIHByaXZhdGUgZG93bmxvYWRGaWxlKGV2ZW50OiB7IGluZGV4OiBudW1iZXI7IGFuY2hvcjogRWxlbWVudFJlZiB9LCBmaWVsZDogRm9ybUZpZWxkKSB7XG4gICAgICAgIGNvbnN0IHsgaW5kZXgsIGFuY2hvciB9ID0gZXZlbnQ7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRGaWxlID0gZmllbGQuZmlsZXNbaW5kZXhdO1xuICAgICAgICBpZiAoY3VycmVudEZpbGUub2JqZWN0VVJMKSB7XG4gICAgICAgICAgICBhbmNob3IubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdXN0b21GaWVsZHNTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLnJlcXVlc3RBY2Nlc3MoY3VycmVudEZpbGUub2JqZWN0SWQsIHRoaXMucmVxdWVzdEFjY2Vzc0VuZHBvaW50KVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVXN1YnNjcmliZSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZGF0YTogeyBmaWxlTmFtZTogc3RyaW5nOyB1cmk6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZmlsZU5hbWUsIHVyaSB9ID0gZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXN0b21GaWVsZHNTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAuZ2V0RmlsZSh1cmkpXG4gICAgICAgICAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1VzdWJzY3JpYmUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoYmxvYjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3RmlsZSA9IDxGaWxlRHRvPm5ldyBGaWxlKFtibG9iXSwgZmlsZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0ZpbGUub2JqZWN0VVJMID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFVybCh1cmkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvci5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZShcImhyZWZcIiwgdXJpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdGaWxlLm9iamVjdElkID0gY3VycmVudEZpbGUub2JqZWN0SWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RmlsZS5zYXZlZEZpbGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmZpbGVzW2luZGV4XSA9IG5ld0ZpbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuZmlsZXMgPSBbLi4uZmllbGQuZmlsZXNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvci5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBsb2FkRmlsZShldmVudDogeyBmaWxlczogRmlsZUR0b1tdIH0sIGZvcm1GaWVsZDogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgZmlsZXMgfSA9IGV2ZW50O1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuZmllbGRzLmZpbmQoKHJlY29yZDogRm9ybUZpZWxkKSA9PiByZWNvcmQubmFtZSA9PT0gZm9ybUZpZWxkLm5hbWUpO1xuXG4gICAgICAgIC8vIFNlIG9jb3JyZXIgdW0gdXBsb2FkLCBqw6EgZXhpc3RpbmRvIHVtIGFycXVpdm8gY29tIHVwbG9hZCBmZWl0by4gw4kgbmVjZXNzw6FyaW8gZXhjbHVpciBvIG1lc21vLlxuICAgICAgICBpZiAoZmllbGQuZmlsZXMgJiYgZmllbGQuZmlsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUZpbGUoeyBmaWxlOiBmaWVsZC5maWxlc1swXSB9LCBmaWVsZCk7XG4gICAgICAgIH1cbiAgICAgICAgZmllbGQuZmlsZXMgPSBmaWxlcztcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlID0gZmlsZXNbaV07XG4gICAgICAgICAgICBpZiAoIWZpbGUuc2F2ZWRGaWxlICYmICFmaWxlLnByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgZmlsZS5pc1VwbG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpLnNldFZhbGlkYXRvcnMoaXNVcGxvYWRpbmcoZmlsZSkpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXN0b21GaWVsZHNTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgIC5nZXRGaWxlTG9jYXRpb25VcmwoXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluOiB0aGlzLmRvbWFpbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlOiB0aGlzLnNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5TmFtZTogdGhpcy5lbnRpdHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGZpZWxkLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVMb2NhdGlvbkVuZHBvaW50XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1VzdWJzY3JpYmUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YodGhpcy5kZWZhbHRDYXRjaEVycm9yKGZpZWxkLCBlcnIsIGkpKSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgbG9jYXRpb24sIHZlcnNpb24sIG9iamVjdElkIH0gPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUub2JqZWN0SWQgPSBvYmplY3RJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVbXCJ1cGxvYWRTdWJzY3JpYmVcIl0gPSB0aGlzLmN1c3RvbUZpZWxkc1NlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudXBsb2FkVGVtcEZpbGUobG9jYXRpb24sIGZpbGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVXN1YnNjcmliZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHRoaXMuZGVmYWx0Q2F0Y2hFcnJvcihmaWVsZCwgZXJyLCBpKSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLmlzVXBsb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyB0eXBlIH0gPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnVwbG9hZENhbmNlbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5VcGxvYWRQcm9ncmVzcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLnByb2dyZXNzID0gTWF0aC5yb3VuZChyZXNwb25zZS5sb2FkZWQgLyByZXNwb25zZS50b3RhbCkgKiAxMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5vYmplY3RVUkwgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB7IG9iamVjdElkLCBuYW1lOiBmaWxlLm5hbWUsIHZlcnNpb246IGZpbGUudmVyc2lvbiB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvSW5zZXJ0ID0gdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmllbGRDdXN0b21pemF0aW9uXCIpLnZhbHVlWzBdLnRvSW5zZXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcImZpZWxkQ3VzdG9taXphdGlvblwiKS52YWx1ZVswXS50b0luc2VydCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udG9JbnNlcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWVsZC5uYW1lXTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSkuc2V0VmFsdWUoYCR7ZmlsZS5vYmplY3RJZH0vJHtmaWxlLm5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpLmNsZWFyVmFsaWRhdG9ycygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuZmlsZXMgPSBbZmlsZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy51cGxvYWRDYW5jZWxlZCAmJiB0eXBlID09PSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlKSB0aGlzLnVwbG9hZENhbmNlbGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5maWxlcyA9IFtmaWxlXTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZUZpbGUoZXZlbnQ6IHsgZmlsZTogRmlsZUR0byB9LCBmb3JtRmllbGQ6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IGZpbGUgfSA9IGV2ZW50O1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuZmllbGRzLmZpbmQoKHJlY29yZDogRm9ybUZpZWxkKSA9PiByZWNvcmQubmFtZSA9PT0gZm9ybUZpZWxkLm5hbWUpO1xuICAgICAgICBmaWVsZC5maWxlcyA9IFtdO1xuICAgICAgICBpZiAoZmlsZS5vYmplY3RJZCkge1xuICAgICAgICAgICAgLy8gUXVhbmRvIMOpIHVtIGFycXVpdm8gasOhIHNhbHZvIG8gb2JqZWN0SWQgasOhIMOpIG5vIGZvcm1hdG8gXCJvYmplY3RJZC9uYW1lXCJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmlsZS5zYXZlZEZpbGUgPyBgJHtmaWxlLm9iamVjdElkfWAgOiBgJHtmaWxlLm9iamVjdElkfS8ke2ZpbGUubmFtZX1gO1xuICAgICAgICAgICAgY29uc3QgdG9EZWxldGUgPSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJmaWVsZEN1c3RvbWl6YXRpb25cIikudmFsdWVbMF0udG9EZWxldGU7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmllbGRDdXN0b21pemF0aW9uXCIpLnZhbHVlWzBdLnRvSW5zZXJ0W2ZpZWxkLm5hbWVdO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmllbGRDdXN0b21pemF0aW9uXCIpLnZhbHVlWzBdLnRvRGVsZXRlID0ge1xuICAgICAgICAgICAgICAgIC4uLnRvRGVsZXRlLFxuICAgICAgICAgICAgICAgIFtmaWVsZC5uYW1lXTogWy4uLih0b0RlbGV0ZVtmaWVsZC5uYW1lXSB8fCBbXSksIHZhbHVlXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSkuY2xlYXJWYWxpZGF0b3JzKCk7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKS5zZXRWYWx1ZShcIlwiKTtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbmNlbFVwbG9hZChpbmRleDogbnVtYmVyLCBmb3JtRmllbGQ6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLnVwbG9hZENhbmNlbGVkID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmZpZWxkcy5maW5kKChyZWNvcmQ6IEZvcm1GaWVsZCkgPT4gcmVjb3JkLm5hbWUgPT09IGZvcm1GaWVsZC5uYW1lKTtcbiAgICAgICAgZmllbGQuZmlsZXNbaW5kZXhdW1widXBsb2FkU3Vic2NyaWJlXCJdLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGZpZWxkLmZpbGVzID0gW107XG4gICAgICAgIGRlbGV0ZSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJmaWVsZEN1c3RvbWl6YXRpb25cIikudmFsdWVbMF0udG9JbnNlcnRbZmllbGQubmFtZV07XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKS5jbGVhclZhbGlkYXRvcnMoKTtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpLnNldFZhbHVlKFwiXCIpO1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSkudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVmYWx0Q2F0Y2hFcnJvcihmaWVsZDogRm9ybUZpZWxkLCBlcnI6IEh0dHBFcnJvclJlc3BvbnNlLCBpbmRleDogbnVtYmVyKTogT2JzZXJ2YWJsZTxuZXZlcj4ge1xuICAgICAgICBjb25zdCB7IGZpbGVzIH0gPSBmaWVsZDtcbiAgICAgICAgZmlsZXNbaW5kZXhdLmVycm9yID0gZXJyO1xuICAgICAgICBmaWxlc1tpbmRleF0uaXNVcGxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgZmllbGQuZmlsZXMgPSBbLi4uZmlsZXNdO1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSkuc2V0VmFsaWRhdG9ycyhbZXJyb3JPblVwbG9hZChmaWxlc1tpbmRleF0pXSk7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKG5ldyBFcnJvcihcImVycm9yIGluIHVwbG9hZCBmaWxlLiBEZXRhaWxzOiBcIiArIGVyci5tZXNzYWdlKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUcmFuc2xhdGVMYWJlbChsYWJlbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGAke3RoaXMuZG9tYWlufS4ke3RoaXMuc2VydmljZX0uJHtsYWJlbH1gKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGlzVXBsb2FkaW5nKGZpbGU6IEZpbGVEdG8pOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuICgpID0+IChmaWxlLmlzVXBsb2FkaW5nID8geyBpc1VwbG9hZGluZzogdHJ1ZSB9IDogbnVsbCk7XG59XG5cbmZ1bmN0aW9uIGVycm9yT25VcGxvYWQoZmlsZTogRmlsZUR0byk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKCkgPT4gKGZpbGUuZXJyb3IgPyB7IHVwbG9hZEVycm9yOiB0cnVlIH0gOiBudWxsKTtcbn1cbiJdfQ==
608
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWZpZWxkcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9jdXN0b20tZmllbGRzL2N1c3RvbS1maWVsZHMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFxQixhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RSxPQUFPLEVBQ0gsU0FBUyxFQUVULEtBQUssRUFLTCxRQUFRLEdBR1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNILGdCQUFnQixFQUNoQixvQkFBb0IsRUFDcEIsU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1QsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsV0FBVyxFQUNYLFVBQVUsR0FDYixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLFNBQVMsTUFBTSxjQUFjLENBQUM7QUFDckMsT0FBTyxLQUFLLE9BQU8sTUFBTSxRQUFRLENBQUM7QUFDbEMsT0FBTyxFQUErQixPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHMUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxv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LFFBQVEsRUFBRSxDQUFBO0dBM0NOLHFCQUFxQixDQTRsQmpDO1NBNWxCWSxxQkFBcUI7QUE4bEJsQyxTQUFTLFdBQVcsQ0FBQyxJQUFhO0lBQzlCLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkUsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLElBQWE7SUFDaEMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UsIEh0dHBFdmVudFR5cGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBTaW1wbGVDaGFuZ2UsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7XG4gICAgQ29udHJvbENvbnRhaW5lcixcbiAgICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgICBGb3JtQXJyYXksXG4gICAgRm9ybUNvbnRyb2wsXG4gICAgRm9ybUdyb3VwLFxuICAgIE5HX1ZBTElEQVRPUlMsXG4gICAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgVmFsaWRhdG9yLFxuICAgIFZhbGlkYXRvckZuLFxuICAgIFZhbGlkYXRvcnMsXG59IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tIFwiYmlnbnVtYmVyLmpzXCI7XG5pbXBvcnQgKiBhcyBtb21lbnRfIGZyb20gXCJtb21lbnRcIjtcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgZm9ya0pvaW4sIG9mLCB0aHJvd0Vycm9yIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpbmFsaXplLCB0YWtlVW50aWwgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IEZpZWxkVHlwZSwgRm9ybUZpZWxkLCBOdW1iZXJGaWVsZCB9IGZyb20gXCIuLi9keW5hbWljLWZvcm0vaW5kZXhcIjtcbmltcG9ydCB7IEZpbGVEdG8gfSBmcm9tIFwiLi4vZmlsZS11cGxvYWQvaW5kZXhcIjtcbmltcG9ydCB7IExvY2FsZU9wdGlvbnMgfSBmcm9tIFwiLi4vbG9jYWxlXCI7XG5pbXBvcnQgeyBMb2NhbGVTZXJ2aWNlIH0gZnJvbSBcIi4uL2xvY2FsZS9sb2NhbGUuc2VydmljZVwiO1xuaW1wb3J0IHsgQ3VzdG9tRmllbGRzU2VydmljZSB9IGZyb20gXCIuL2N1c3RvbS1maWVsZHMuc2VydmljZVwiO1xuaW1wb3J0IHsgTnVtYmVyRmllbGRDb21wb25lbnQgfSBmcm9tIFwiLi4vZHluYW1pYy1mb3JtL2NvbXBvbmVudHMvZmllbGRzXCI7XG5cbmVudW0gQ3VzdG9tRmllbGRUeXBlIHtcbiAgICBTdHJpbmcgPSBcIlN0cmluZ1wiLFxuICAgIEJvb2xlYW4gPSBcIkJvb2xlYW5cIixcbiAgICBJbnRlZ2VyID0gXCJJbnRlZ2VyXCIsXG4gICAgRG91YmxlID0gXCJEb3VibGVcIixcbiAgICBEYXRlID0gXCJEYXRlXCIsXG4gICAgRGF0ZVRpbWUgPSBcIkRhdGVUaW1lXCIsXG4gICAgTG9jYWxEYXRlVGltZSA9IFwiTG9jYWxEYXRlVGltZVwiLFxuICAgIFRpbWUgPSBcIlRpbWVcIixcbiAgICBNb25leSA9IFwiTW9uZXlcIixcbiAgICBCbG9iID0gXCJCbG9iXCIsXG4gICAgQmluYXJ5ID0gXCJCaW5hcnlcIixcbiAgICBBbnkgPSBcIkFueVwiLFxuICAgIEVudW0gPSBcIkVudW1cIixcbn1cblxuY29uc3QgbW9tZW50ID0gbW9tZW50XzsgLy8gQEhBQ0sgTmVjZXNzYXJ5IGJlY2F1c2Ugb2YgaHR0cHM6Ly9naXRodWIuY29tL3JvbGx1cC9yb2xsdXAvaXNzdWVzLzY3MFxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogXCJzLWN1c3RvbS1maWVsZHNcIixcbiAgICB0ZW1wbGF0ZVVybDogXCIuL2N1c3RvbS1maWVsZHMuY29tcG9uZW50Lmh0bWxcIixcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogQ3VzdG9tRmllbGRzQ29tcG9uZW50LFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogQ3VzdG9tRmllbGRzQ29tcG9uZW50LFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQ3VzdG9tRmllbGRzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3IsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZG9tYWluOiBzdHJpbmc7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2VydmljZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGVudGl0eTogc3RyaW5nO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGludmFsaWRFcnJvckxhYmVsID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXCJwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuaW52YWxpZF92YWx1ZVwiKTtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBlbnRpdHlPYmplY3Q6IGFueTtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjdXN0b21GaWVsZHNFbmRwb2ludCA9IFwicGxhdGZvcm0vZmllbGRfY3VzdG9taXphdGlvbi9xdWVyaWVzL2dldEVudGl0eVwiO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGZpbGVMb2NhdGlvbkVuZHBvaW50ID0gXCJwbGF0Zm9ybS9maWVsZF9jdXN0b21pemF0aW9uL2FjdGlvbnMvcmVxdWVzdFVwbG9hZFwiO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJlcXVlc3RBY2Nlc3NFbmRwb2ludCA9IFwicGxhdGZvcm0vZmllbGRfY3VzdG9taXphdGlvbi9hY3Rpb25zL3JlcXVlc3RBY2Nlc3NcIjtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyByZXF1aXJlZEVycm9yTWVzc2FnZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRpc3BsYXlUaW1lSW5mb1NpZ246IG51bWJlcjtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzaG93RmlsZVVwbG9hZERhdGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyByZWFkeSQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkaXNhYmxlRmllbGRzOiBib29sZWFuO1xuICAgIHB1YmxpYyBmaWVsZHM6IEZvcm1GaWVsZFtdID0gW107XG4gICAgcHVibGljIGZvcm1Hcm91cDogRm9ybUdyb3VwO1xuICAgIHByaXZhdGUgcmVhZHkgPSBmYWxzZTtcbiAgICBwcml2YXRlIG9uQ2hhbmdlOiBhbnk7XG4gICAgcHJpdmF0ZSBvblRvdWNoZWQ6IGFueTtcbiAgICBwcml2YXRlIHZhbHVlOiBhbnk7XG4gICAgcHJpdmF0ZSBuZ1VzdWJzY3JpYmU6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIHByaXZhdGUgdXBsb2FkQ2FuY2VsZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBoYXNCbG9iOiBib29sZWFuO1xuICAgIHByaXZhdGUgaGFzVXBsb2FkZWQ6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBjdXN0b21GaWVsZHNTZXJ2aWNlOiBDdXN0b21GaWVsZHNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGxvY2FsZVNlcnZpY2U6IExvY2FsZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBjb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyXG4gICAgKSB7fVxuXG4gICAgZ2V0IHBhcmVudEZvcm0oKTogRm9ybUdyb3VwIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbENvbnRhaW5lci5jb250cm9sIGFzIEZvcm1Hcm91cDtcbiAgICB9XG5cbiAgICBnZXQgcGFyZW50Q29udHJvbCgpOiBGb3JtQ29udHJvbCB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudEZvcm0uZ2V0KFwiY3VzdG9tXCIpIGFzIEZvcm1Db250cm9sO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRvbWFpbikgdGhyb3cgbmV3IEVycm9yKFwiWW91IG5lZWQgdG8gc3BlY2lmeSB0aGUgY3VzdG9tLWZpZWxkcyBkb21haW4hXCIpO1xuICAgICAgICBpZiAoIXRoaXMuc2VydmljZSkgdGhyb3cgbmV3IEVycm9yKFwiWW91IG5lZWQgdG8gc3BlY2lmeSB0aGUgY3VzdG9tLWZpZWxkcyBzZXJ2aWNlIVwiKTtcbiAgICAgICAgaWYgKCF0aGlzLmVudGl0eSkgdGhyb3cgbmV3IEVycm9yKFwiWW91IG5lZWQgdG8gc3BlY2lmeSB0aGUgY3VzdG9tLWZpZWxkcyBlbnRpdHkhXCIpO1xuXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gICAgICAgIGNvbnN0IG9ic2VydmFibGVzID0gW3RoaXMuZ2V0Q3VzdG9tRmllbGRzKCksIHRoaXMubG9jYWxlU2VydmljZS5nZXQoKV07XG4gICAgICAgIGZvcmtKb2luKG9ic2VydmFibGVzKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVc3Vic2NyaWJlKSxcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Q29udHJvbD8ubWFya0FzUHJpc3RpbmUoKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkeSQpIHRoaXMucmVhZHkkLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnlbXSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IFtjdXN0b21GaWVsZHNSZXNwb25zZSwgbG9jYWxlT3B0aW9uc10gPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWZhdWx0czogYW55ID0ge307XG4gICAgICAgICAgICAgICAgZGVmYXVsdHNbQ3VzdG9tRmllbGRUeXBlLlN0cmluZ10gPSB7fTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuQm9vbGVhbl0gPSB7IGRlZmF1bHRWYWx1ZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuSW50ZWdlcl0gPSB7fTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuRG91YmxlXSA9IHsgZGVmYXVsdE1hc2s6IFwiXCIgfTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuTW9uZXldID0ge307XG4gICAgICAgICAgICAgICAgZGVmYXVsdHNbQ3VzdG9tRmllbGRUeXBlLkRhdGVdID0ge307XG4gICAgICAgICAgICAgICAgZGVmYXVsdHNbQ3VzdG9tRmllbGRUeXBlLkRhdGVUaW1lXSA9IHt9O1xuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5Mb2NhbERhdGVUaW1lXSA9IHt9O1xuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5UaW1lXSA9IHt9O1xuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5CbG9iXSA9IHt9O1xuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5FbnVtXSA9IHt9O1xuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5CaW5hcnldID0ge307XG4gICAgICAgICAgICAgICAgZGVmYXVsdHNbQ3VzdG9tRmllbGRUeXBlLkFueV0gPSB7fTtcblxuICAgICAgICAgICAgICAgIGlmICghY3VzdG9tRmllbGRzUmVzcG9uc2UgfHwgIWN1c3RvbUZpZWxkc1Jlc3BvbnNlLmVudGl0eV8pIHJldHVybjtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGFjdGl2ZSwgZmllbGRzIH0gPSBjdXN0b21GaWVsZHNSZXNwb25zZS5lbnRpdHlfO1xuICAgICAgICAgICAgICAgIGlmICghYWN0aXZlKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICBmaWVsZHNcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoZmllbGQ6IGFueSkgPT4gZmllbGQuY3VzdG9taXphYmxlICYmIGZpZWxkLmN1c3RvbWl6YXRpb24gJiYgZmllbGQuY3VzdG9taXphdGlvbi5hY3RpdmUpXG4gICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtRmllbGQgPSB0aGlzLmdldEZvcm1GaWVsZChmaWVsZCwgbG9jYWxlT3B0aW9ucyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IGZpZWxkLnR5cGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSBDdXN0b21GaWVsZFR5cGUuQmxvYiAmJiB0aGlzLnZhbHVlICYmIHRoaXMudmFsdWVbZm9ybUZpZWxkLm5hbWVdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlQmxvYlRvRmlsZVVwbG9hZChmb3JtRmllbGQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHZhbGlkYXRpb25SZWdleCB9ID0gZmllbGQuY3VzdG9taXphdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXNJc1R5cGVzID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbUZpZWxkVHlwZS5Cb29sZWFuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbUZpZWxkVHlwZS5Nb25leSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21GaWVsZFR5cGUuRGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21GaWVsZFR5cGUuRGF0ZVRpbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tRmllbGRUeXBlLkxvY2FsRGF0ZVRpbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tRmllbGRUeXBlLlRpbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0b3JzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGlvblJlZ2V4ICYmICFhc0lzVHlwZXMuaW5jbHVkZXMoZmllbGRUeXBlKSkgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucGF0dGVybih2YWxpZGF0aW9uUmVnZXgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZFR5cGUgPT09IEN1c3RvbUZpZWxkVHlwZS5JbnRlZ2VyICYmICFmb3JtRmllbGQubWFzaykgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucGF0dGVybigvXlxcLT9cXGQqJC8pKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1GaWVsZC5yZXF1aXJlZD8uKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogZGVmYXVsdHNbZmllbGRUeXBlXS5kZWZhdWx0VmFsdWUsIGRpc2FibGVkOiB0aGlzLmZvcm1Hcm91cC5kaXNhYmxlZCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnNcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmFkZENvbnRyb2woZm9ybUZpZWxkLm5hbWUsIGNvbnRyb2wpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpZWxkcy5wdXNoKGZvcm1GaWVsZCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVGaWVsZEN1c3RvbWl6YXRpb24oZmllbGRzKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHRoaXMucGFyc2VWYWx1ZXNGb3JGaWVsZHModGhpcy52YWx1ZSkpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVhZHkgPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5hZGREaXNwbGF5VGltZUluZm9TaWduVG9GaWVsZHMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVuYWJsZU9yRGlzYWJsZUZpZWxkcyh0aGlzLmRpc2FibGVGaWVsZHMpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMuZGlzYWJsZUZpZWxkcykge1xuICAgICAgICAgICAgdGhpcy5lbmFibGVPckRpc2FibGVGaWVsZHMoY2hhbmdlcy5kaXNhYmxlRmllbGRzLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMubmdVc3Vic2NyaWJlLm5leHQoKTtcbiAgICAgICAgdGhpcy5uZ1VzdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogRnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHRoaXMub25DaGFuZ2UodGhpcy5wYXJzZUZpZWxkc1ZhbHVlcygpKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBGdW5jdGlvbikge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMucmVhZHkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5wYXJzZVZhbHVlc0ZvckZpZWxkcyh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlRmlsZXNJZlNldEZvcm1WYWx1ZXNBZnRlckluaXQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUodmFsdWUgfHwge30pO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbikge1xuICAgICAgICBpZiAoaXNEaXNhYmxlZCkgdGhpcy5mb3JtR3JvdXAuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIGVsc2UgdGhpcy5mb3JtR3JvdXAuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q3VzdG9tRmllbGRzKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGlmICh0aGlzLmVudGl0eU9iamVjdCAmJiB0aGlzLmVudGl0eU9iamVjdC5lbnRpdHlfKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YodGhpcy5lbnRpdHlPYmplY3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmN1c3RvbUZpZWxkc1NlcnZpY2UuZ2V0Q3VzdG9tRmllbGRzKHRoaXMuZG9tYWluLCB0aGlzLnNlcnZpY2UsIHRoaXMuZW50aXR5LCB0aGlzLmN1c3RvbUZpZWxkc0VuZHBvaW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdmFsaWRhdGUoKSB7XG4gICAgICAgIGNvbnN0IGVycm9yczogYW55ID0ge307XG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBlcnJvcnM6IGNvbnRyb2xFcnJvcnMgfSA9IHRoaXMuZm9ybUdyb3VwLmdldChmaWVsZCk7XG4gICAgICAgICAgICBpZiAoY29udHJvbEVycm9ycykgZXJyb3JzW2ZpZWxkXSA9IGNvbnRyb2xFcnJvcnM7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZXJyb3JzO1xuICAgIH1cblxuICAgIHByaXZhdGUgZW5hYmxlT3JEaXNhYmxlRmllbGRzKGRpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5mb3JtR3JvdXApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgY29udHJvbE5hbWUgb2YgT2JqZWN0LmtleXModGhpcy5mb3JtR3JvdXAudmFsdWUpKSB7XG4gICAgICAgICAgICBkaXNhYmxlZCA/IHRoaXMuZm9ybUdyb3VwLmdldChjb250cm9sTmFtZSkuZGlzYWJsZSgpIDogdGhpcy5mb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lKS5lbmFibGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhbkZpZWxkcygpIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAucmVzZXQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhcnNlVmFsdWVzRm9yRmllbGRzKHZhbHVlczogYW55KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFZhbHVlcyA9IHsgLi4udmFsdWVzIH07XG5cbiAgICAgICAgdGhpcy5maWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgdHlwZSwgbmFtZSB9ID0gZmllbGQ7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHZhbHVlcyAmJiB2YWx1ZXNbbmFtZV07XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVHJhdGFtZW50byBleGNsdXNpdm8gcGFyYSBjYW1wb3MgYm9vbGVhbiBxdWUgdGVtIG8gc3RhdHVzIEVtcHR5XG4gICAgICAgICAgICAgKiBFc3NhIGNvbmRpY2lvbmFsIG5lY2Vzc2l0YSBlc3RhciBhbnRlcyBkbyBpZiAoIXZhbHVlKSByZXR1cm47XG4gICAgICAgICAgICAgKiBQb2lzIGVsYSB0ZW0gdW0gc3RhdHVzIHF1ZSB1c2EgbnVsbCBubyB2YWxvciBkbyBjYW1wbyByYWRpbyBib29sZWFuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmICh0eXBlID09PSBGaWVsZFR5cGUuQm9vbGVhbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzU3RyaW5nID0gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vdFZhbGlkID0gIWlzU3RyaW5nICYmIHR5cGVvZiB2YWx1ZSAhPT0gXCJib29sZWFuXCI7XG4gICAgICAgICAgICAgICAgaWYgKG5vdFZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlc1tuYW1lXSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ29uZGljaW9uYWwgcGFyYSBjYW1wb3MgcXVlIHJldG9ybmFtIHN0cmluZyBkZSBib29sZW4gZG8gYmFja2FuZFxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNTdHJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlc1tuYW1lXSA9IHZhbHVlID09PSBcInRydWVcIiA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm47XG5cbiAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlLkRhdGU6XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlc1tuYW1lXSA9IG1vbWVudCh2YWx1ZSkudG9EYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlLkRhdGVUaW1lOlxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZXNbbmFtZV0gPSBtb21lbnQodmFsdWUpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkVHlwZS5Mb2NhbERhdGVUaW1lOlxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZXNbbmFtZV0gPSBtb21lbnQodmFsdWUsIFwiWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1wiKS50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGUuVGltZTpcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWVzW25hbWVdID0gbW9tZW50KHZhbHVlLCBcIkhIOm1tOnNzXCIpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHBhcnNlZFZhbHVlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbGd1bWFzIGVxdWlwZXMgc8OzIHNldGFtIHZhbG9yIG5vIGZvcm11bMOhcmlvLCBhcMOzcyBvIGNhcnJlZ2FtZW50byBkYSB0ZWxhXG4gICAgICogQ29tbyDDqSBiZW0gcGFkcsOjbyBpc3NvLCBmb2kgbmVjZXNzw6FyaW8gY3JpYXIgZXNzZSBtw6l0b2RvIHBhcmEgZ2VyYXIgbyBmaWxlXG4gICAgICogYXDDs3Mgc2V0YXIgbyB2YWxvciBubyBmb3JtdWzDoXJpb1xuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlRmlsZXNJZlNldEZvcm1WYWx1ZXNBZnRlckluaXQoKSB7XG4gICAgICAgIGlmICghdGhpcy5oYXNVcGxvYWRlZCkge1xuICAgICAgICAgICAgdGhpcy5maWVsZHNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChmaWVsZDogRm9ybUZpZWxkKSA9PiBmaWVsZC50eXBlID09PSBGaWVsZFR5cGUuQmxvYilcbiAgICAgICAgICAgICAgICAuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKS52YWx1ZSkgdGhpcy5jcmVhdGVCbG9iVG9GaWxlVXBsb2FkKGZpZWxkKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcGFyc2VGaWVsZHNWYWx1ZXMoKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFZhbHVlczogYW55ID0ge307XG5cbiAgICAgICAgdGhpcy5maWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgdHlwZSwgbmFtZSwgbWFzaywgc2NhbGUgfSA9IGZpZWxkO1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5mb3JtR3JvdXAuZ2V0KG5hbWUpLnZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGUuTnVtYmVyOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hc2spIHZhbHVlID0gbmV3IEJpZ051bWJlcih2YWx1ZSkudG9GaXhlZChzY2FsZSBhcyBudW1iZXIpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGUuRGF0ZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbW9tZW50KHZhbHVlKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlLkRhdGVUaW1lOlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBtb21lbnQodmFsdWUpLmZvcm1hdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlLkxvY2FsRGF0ZVRpbWU6XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG1vbWVudCh2YWx1ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEZpZWxkVHlwZS5UaW1lOlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBtb21lbnQodmFsdWUpLmZvcm1hdChcIkhIOm1tOnNzXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgIU51bWJlci5pc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZXNbbmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1R5cGVOdW1iZXJPckVudW0odHlwZSkpIHtcbiAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZXNbbmFtZV0gPSBmaWVsZC5tdWx0aXBsZSA/IFtdIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuaGFzQmxvYikgcGFyc2VkVmFsdWVzW1wiZmllbGRDdXN0b21pemF0aW9uXCJdID0gdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmllbGRDdXN0b21pemF0aW9uXCIpLnZhbHVlO1xuICAgICAgICByZXR1cm4gcGFyc2VkVmFsdWVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNUeXBlTnVtYmVyT3JFbnVtKHR5cGU6IEZpZWxkVHlwZSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBudW1iZXJPckVudW0gPSBbRmllbGRUeXBlLk51bWJlciwgRmllbGRUeXBlLkVudW1dO1xuICAgICAgICByZXR1cm4gbnVtYmVyT3JFbnVtLmluY2x1ZGVzKHR5cGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Rm9ybUZpZWxkKGZpZWxkOiBhbnksIGxvY2FsZU9wdGlvbnM6IExvY2FsZU9wdGlvbnMpOiBGb3JtRmllbGQge1xuICAgICAgICBsZXQgcGFyYW1ldGVycztcblxuICAgICAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQ3VzdG9tRmllbGRUeXBlLkJsb2I6XG4gICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IHRoaXMuZ2V0QmxvYlBhcmFtZXRlcnMoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ3VzdG9tRmllbGRUeXBlLkJvb2xlYW46XG4gICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IHRoaXMuZ2V0Qm9vbGVhblBhcmFtZXRlcnMoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJFbnVtZXJhdGlvblwiOlxuICAgICAgICAgICAgY2FzZSBDdXN0b21GaWVsZFR5cGUuRW51bTpcbiAgICAgICAgICAgICAgICBmaWVsZC50eXBlID0gRmllbGRUeXBlLkVudW07XG4gICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IHRoaXMuZ2V0RW51bVBhcmFtZXRlcnMoZmllbGQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBDdXN0b21GaWVsZFR5cGUuTW9uZXk6XG4gICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkN1c3RvbSxcbiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tRmllbGRDb21wb25lbnRDbGFzczogTnVtYmVyRmllbGRDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgICAgIEN1c3RvbUZpZWxkQ2xhc3M6IE51bWJlckZpZWxkLFxuICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb246IDE1LFxuICAgICAgICAgICAgICAgICAgICBzY2FsZTogMixcbiAgICAgICAgICAgICAgICAgICAgbGVmdEFkZG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogbG9jYWxlT3B0aW9ucz8ubnVtYmVyPy5jdXJyZW5jeVN5bWJvbCA/PyBcIlIkXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ3VzdG9tRmllbGRUeXBlLkRvdWJsZTpcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuQ3VzdG9tLFxuICAgICAgICAgICAgICAgICAgICBDdXN0b21GaWVsZENvbXBvbmVudENsYXNzOiBOdW1iZXJGaWVsZENvbXBvbmVudCxcbiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tRmllbGRDbGFzczogTnVtYmVyRmllbGQsXG4gICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbjogMTUsXG4gICAgICAgICAgICAgICAgICAgIHNjYWxlOiAyLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEN1c3RvbUZpZWxkVHlwZS5JbnRlZ2VyOlxuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5DdXN0b20sXG4gICAgICAgICAgICAgICAgICAgIEN1c3RvbUZpZWxkQ29tcG9uZW50Q2xhc3M6IE51bWJlckZpZWxkQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICBDdXN0b21GaWVsZENsYXNzOiBOdW1iZXJGaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uOiAxNSxcbiAgICAgICAgICAgICAgICAgICAgc2NhbGU6IDAsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgIG5hbWU6IGZpZWxkLmlkLFxuICAgICAgICAgICAgbGFiZWw6IGZpZWxkLmN1c3RvbWl6YXRpb24ubGFiZWwsXG4gICAgICAgICAgICB0b29sdGlwOiBmaWVsZC5jdXN0b21pemF0aW9uLnRvb2x0aXAsXG4gICAgICAgICAgICBpbmZvU2lnbjogZmllbGQuY3VzdG9taXphdGlvbi5pbmZvU2lnbixcbiAgICAgICAgICAgIHR5cGU6IGZpZWxkLnR5cGUsXG4gICAgICAgICAgICBtYXNrOiBmaWVsZC5jdXN0b21pemF0aW9uLm1hc2ssXG4gICAgICAgICAgICByZXF1aXJlZDogKCkgPT4gZmllbGQuY3VzdG9taXphdGlvbi5tYW5kYXRvcnksXG4gICAgICAgICAgICBjYWxlbmRhck9wdGlvbnM6IGxvY2FsZU9wdGlvbnMuY2FsZW5kYXIsXG4gICAgICAgICAgICBjdXJyZW5jeU9wdGlvbnM6IGxvY2FsZU9wdGlvbnMubnVtYmVyLFxuICAgICAgICAgICAgLi4ucGFyYW1ldGVycyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFbnVtUGFyYW1ldGVycyhmaWVsZDogYW55KTogb2JqZWN0IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNob3dDbGVhcjogdHJ1ZSxcbiAgICAgICAgICAgIG11bHRpcGxlOiBmaWVsZC5jdXN0b21pemF0aW9uLmN1c3RvbUVudW1lcmF0aW9uLm11bHRpcGxlLFxuICAgICAgICAgICAgb3B0aW9uczogZmllbGQuY3VzdG9taXphdGlvbi5jdXN0b21FbnVtZXJhdGlvbi52YWx1ZXMubWFwKChlOiBhbnkpID0+ICh7IGxhYmVsOiBlLnZhbHVlLCB2YWx1ZTogZS5rZXkgfSkpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Qm9vbGVhblBhcmFtZXRlcnMoKTogb2JqZWN0IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG9wdGlvbnNMYWJlbDoge1xuICAgICAgICAgICAgICAgIHRydWU6IHRoaXMuZ2V0VHJhbnNsYXRlTGFiZWwoYHRydWVfbGFiZWxgKSxcbiAgICAgICAgICAgICAgICBmYWxzZTogdGhpcy5nZXRUcmFuc2xhdGVMYWJlbChgZmFsc2VfbGFiZWxgKSxcbiAgICAgICAgICAgICAgICBlbXB0eTogdGhpcy5nZXRUcmFuc2xhdGVMYWJlbChgZW1wdHlfbGFiZWxgKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRCbG9iUGFyYW1ldGVycygpOiBvYmplY3Qge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2l6ZToge1xuICAgICAgICAgICAgICAgIHNtOiAxMixcbiAgICAgICAgICAgICAgICBtZDogMTIsXG4gICAgICAgICAgICAgICAgbGc6IDEyLFxuICAgICAgICAgICAgICAgIHhsOiAxMixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhY2NlcHQ6IFwiaW1hZ2UvKiwgYXBwbGljYXRpb24vKiwgdGV4dC8qXCIsXG4gICAgICAgICAgICBjaG9vc2VMYWJlbDogdGhpcy5nZXRUcmFuc2xhdGVMYWJlbChgY2hvb3NlX2xhYmVsYCksXG4gICAgICAgICAgICByZW1vdmVMYWJlbDogdGhpcy5nZXRUcmFuc2xhdGVMYWJlbChgcmVtb3ZlX2xhYmVsYCksXG4gICAgICAgICAgICBjYW5jZWxMYWJlbDogdGhpcy5nZXRUcmFuc2xhdGVMYWJlbChgY2FuY2VsX2xhYmVsYCksXG4gICAgICAgICAgICBzdWNjZXNzVG9vbHRpcDogdGhpcy5nZXRUcmFuc2xhdGVMYWJlbChgc3VjY2Vzc190b29sdGlwYCksXG4gICAgICAgICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICAgICAgICBvblVwbG9hZEZpbGU6IChldmVudDogeyBmaWxlczogRmlsZUR0b1tdIH0sIGZvcm1maWVsZDogRm9ybUZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYXNVcGxvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy51cGxvYWRGaWxlKGV2ZW50LCBmb3JtZmllbGQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uUmVtb3ZlRmlsZTogKGV2ZW50OiB7IGZpbGU6IEZpbGVEdG8gfSwgZm9ybWZpZWxkOiBGb3JtRmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUZpbGUoZXZlbnQsIGZvcm1maWVsZCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25DYW5jZWxVcGxvYWQ6IChldmVudDogbnVtYmVyLCBmb3JtZmllbGQ6IEZvcm1GaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsVXBsb2FkKGV2ZW50LCBmb3JtZmllbGQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uRG93bmxvYWRGaWxlOiAoZXZlbnQ6IHsgaW5kZXg6IG51bWJlcjsgYW5jaG9yOiBFbGVtZW50UmVmIH0sIGZvcm1maWVsZDogRm9ybUZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kb3dubG9hZEZpbGUoZXZlbnQsIGZvcm1maWVsZCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2hvd0ZpbGVVcGxvYWREYXRlOiB0aGlzLnNob3dGaWxlVXBsb2FkRGF0ZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDDiSBuZWNlc3PDoXJpbyBjcmlhciBvIGZpZWxkQ3VzdG9taXphdGlvbiBxdWFuZG8gaMOhIHVtIEJsb2IgbmEgZW50aWRhZGUgcGFyYSBnZXJhciBvXG4gICAgICogY29tIG9zIGZpZWxkcyBpbnNlcmlkb3MgZSBkZWxldGFkb3MuXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVGaWVsZEN1c3RvbWl6YXRpb24oZmllbGRzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLmhhc0Jsb2IgPSAhIWZpZWxkcy5maWx0ZXIoKGZpZWxkOiBhbnkpID0+IGZpZWxkLnR5cGUgPT09IEN1c3RvbUZpZWxkVHlwZS5CbG9iKS5sZW5ndGg7XG4gICAgICAgIGlmICh0aGlzLmhhc0Jsb2IpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmFkZENvbnRyb2woXG4gICAgICAgICAgICAgICAgXCJmaWVsZEN1c3RvbWl6YXRpb25cIixcbiAgICAgICAgICAgICAgICBuZXcgRm9ybUFycmF5KFtcbiAgICAgICAgICAgICAgICAgICAgbmV3IEZvcm1Hcm91cCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb21haW46IG5ldyBGb3JtQ29udHJvbCh0aGlzLmRvbWFpbiksXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlOiBuZXcgRm9ybUNvbnRyb2wodGhpcy5zZXJ2aWNlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogbmV3IEZvcm1Db250cm9sKHRoaXMuZW50aXR5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvRGVsZXRlOiBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZToge30sIGRpc2FibGVkOiBmYWxzZSB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvSW5zZXJ0OiBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZToge30sIGRpc2FibGVkOiBmYWxzZSB9KSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUJsb2JUb0ZpbGVVcGxvYWQoZmllbGQ6IEZvcm1GaWVsZCkge1xuICAgICAgICBjb25zdCBvYmplY3RJZCA9IHRoaXMudmFsdWVbZmllbGQubmFtZV0gPyB0aGlzLnZhbHVlW2ZpZWxkLm5hbWVdIDogdGhpcy5mb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpLnZhbHVlO1xuICAgICAgICBjb25zdCBmaWxlTmFtZSA9IG9iamVjdElkLnN1YnN0cmluZyhvYmplY3RJZC5sYXN0SW5kZXhPZihcIi9cIikgKyAxKTtcbiAgICAgICAgY29uc3QgZmlsZTogUGFydGlhbDxGaWxlRHRvPiA9IHsgbmFtZTogZmlsZU5hbWUsIG9iamVjdElkLCBzYXZlZEZpbGU6IHRydWUgfTtcbiAgICAgICAgZmllbGQuZmlsZXMgPSBbZmlsZSBhcyBGaWxlRHRvXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRvd25sb2FkRmlsZShldmVudDogeyBpbmRleDogbnVtYmVyOyBhbmNob3I6IEVsZW1lbnRSZWYgfSwgZmllbGQ6IEZvcm1GaWVsZCkge1xuICAgICAgICBjb25zdCB7IGluZGV4LCBhbmNob3IgfSA9IGV2ZW50O1xuICAgICAgICBjb25zdCBjdXJyZW50RmlsZSA9IGZpZWxkLmZpbGVzW2luZGV4XTtcbiAgICAgICAgaWYgKGN1cnJlbnRGaWxlLm9iamVjdFVSTCkge1xuICAgICAgICAgICAgYW5jaG9yLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tRmllbGRzU2VydmljZVxuICAgICAgICAgICAgICAgIC5yZXF1ZXN0QWNjZXNzKGN1cnJlbnRGaWxlLm9iamVjdElkLCB0aGlzLnJlcXVlc3RBY2Nlc3NFbmRwb2ludClcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1VzdWJzY3JpYmUpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IHsgZmlsZU5hbWU6IHN0cmluZzsgdXJpOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGZpbGVOYW1lLCB1cmkgfSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tRmllbGRzU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAgICAgLmdldEZpbGUodXJpKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVc3Vic2NyaWJlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGJsb2I6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0ZpbGUgPSA8RmlsZUR0bz5uZXcgRmlsZShbYmxvYl0sIGZpbGVOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdGaWxlLm9iamVjdFVSTCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwodXJpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3IubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsIHVyaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RmlsZS5vYmplY3RJZCA9IGN1cnJlbnRGaWxlLm9iamVjdElkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0ZpbGUuc2F2ZWRGaWxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5maWxlc1tpbmRleF0gPSBuZXdGaWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmZpbGVzID0gWy4uLmZpZWxkLmZpbGVzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3IubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwbG9hZEZpbGUoZXZlbnQ6IHsgZmlsZXM6IEZpbGVEdG9bXSB9LCBmb3JtRmllbGQ6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IGZpbGVzIH0gPSBldmVudDtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmZpZWxkcy5maW5kKChyZWNvcmQ6IEZvcm1GaWVsZCkgPT4gcmVjb3JkLm5hbWUgPT09IGZvcm1GaWVsZC5uYW1lKTtcblxuICAgICAgICAvLyBTZSBvY29ycmVyIHVtIHVwbG9hZCwgasOhIGV4aXN0aW5kbyB1bSBhcnF1aXZvIGNvbSB1cGxvYWQgZmVpdG8uIMOJIG5lY2Vzc8OhcmlvIGV4Y2x1aXIgbyBtZXNtby5cbiAgICAgICAgaWYgKGZpZWxkLmZpbGVzICYmIGZpZWxkLmZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVGaWxlKHsgZmlsZTogZmllbGQuZmlsZXNbMF0gfSwgZmllbGQpO1xuICAgICAgICB9XG4gICAgICAgIGZpZWxkLmZpbGVzID0gZmlsZXM7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGZpbGVzW2ldO1xuICAgICAgICAgICAgaWYgKCFmaWxlLnNhdmVkRmlsZSAmJiAhZmlsZS5wcm9ncmVzcykge1xuICAgICAgICAgICAgICAgIGZpbGUuaXNVcGxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKS5zZXRWYWxpZGF0b3JzKGlzVXBsb2FkaW5nKGZpbGUpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSkudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tRmllbGRzU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAuZ2V0RmlsZUxvY2F0aW9uVXJsKFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbjogdGhpcy5kb21haW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZTogdGhpcy5zZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eU5hbWU6IHRoaXMuZW50aXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBmaWVsZC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlTG9jYXRpb25FbmRwb2ludFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVc3Vic2NyaWJlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHRoaXMuZGVmYWx0Q2F0Y2hFcnJvcihmaWVsZCwgZXJyLCBpKSkpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGxvY2F0aW9uLCB2ZXJzaW9uLCBvYmplY3RJZCB9ID0gZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUudmVyc2lvbiA9IHZlcnNpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlLm9iamVjdElkID0gb2JqZWN0SWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlW1widXBsb2FkU3Vic2NyaWJlXCJdID0gdGhpcy5jdXN0b21GaWVsZHNTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnVwbG9hZFRlbXBGaWxlKGxvY2F0aW9uLCBmaWxlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1VzdWJzY3JpYmUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZih0aGlzLmRlZmFsdENhdGNoRXJyb3IoZmllbGQsIGVyciwgaSkpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5pc1VwbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgdHlwZSB9ID0gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy51cGxvYWRDYW5jZWxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3MpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5wcm9ncmVzcyA9IE1hdGgucm91bmQocmVzcG9uc2UubG9hZGVkIC8gcmVzcG9uc2UudG90YWwpICogMTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUub2JqZWN0VVJMID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFVybChVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0geyBvYmplY3RJZCwgbmFtZTogZmlsZS5uYW1lLCB2ZXJzaW9uOiBmaWxlLnZlcnNpb24gfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0b0luc2VydCA9IHRoaXMuZm9ybUdyb3VwLmdldChcImZpZWxkQ3VzdG9taXphdGlvblwiKS52YWx1ZVswXS50b0luc2VydDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJmaWVsZEN1c3RvbWl6YXRpb25cIikudmFsdWVbMF0udG9JbnNlcnQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRvSW5zZXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmllbGQubmFtZV06IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpLnNldFZhbHVlKGAke2ZpbGUub2JqZWN0SWR9LyR7ZmlsZS5uYW1lfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKS5jbGVhclZhbGlkYXRvcnMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSkudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmZpbGVzID0gW2ZpbGVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudXBsb2FkQ2FuY2VsZWQgJiYgdHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5SZXNwb25zZSkgdGhpcy51cGxvYWRDYW5jZWxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuZmlsZXMgPSBbZmlsZV07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVGaWxlKGV2ZW50OiB7IGZpbGU6IEZpbGVEdG8gfSwgZm9ybUZpZWxkOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBmaWxlIH0gPSBldmVudDtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmZpZWxkcy5maW5kKChyZWNvcmQ6IEZvcm1GaWVsZCkgPT4gcmVjb3JkLm5hbWUgPT09IGZvcm1GaWVsZC5uYW1lKTtcbiAgICAgICAgZmllbGQuZmlsZXMgPSBbXTtcbiAgICAgICAgaWYgKGZpbGUub2JqZWN0SWQpIHtcbiAgICAgICAgICAgIC8vIFF1YW5kbyDDqSB1bSBhcnF1aXZvIGrDoSBzYWx2byBvIG9iamVjdElkIGrDoSDDqSBubyBmb3JtYXRvIFwib2JqZWN0SWQvbmFtZVwiXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbGUuc2F2ZWRGaWxlID8gYCR7ZmlsZS5vYmplY3RJZH1gIDogYCR7ZmlsZS5vYmplY3RJZH0vJHtmaWxlLm5hbWV9YDtcbiAgICAgICAgICAgIGNvbnN0IHRvRGVsZXRlID0gdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmllbGRDdXN0b21pemF0aW9uXCIpLnZhbHVlWzBdLnRvRGVsZXRlO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuZm9ybUdyb3VwLmdldChcImZpZWxkQ3VzdG9taXphdGlvblwiKS52YWx1ZVswXS50b0luc2VydFtmaWVsZC5uYW1lXTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcImZpZWxkQ3VzdG9taXphdGlvblwiKS52YWx1ZVswXS50b0RlbGV0ZSA9IHtcbiAgICAgICAgICAgICAgICAuLi50b0RlbGV0ZSxcbiAgICAgICAgICAgICAgICBbZmllbGQubmFtZV06IFsuLi4odG9EZWxldGVbZmllbGQubmFtZV0gfHwgW10pLCB2YWx1ZV0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpLmNsZWFyVmFsaWRhdG9ycygpO1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSkuc2V0VmFsdWUoXCJcIik7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYW5jZWxVcGxvYWQoaW5kZXg6IG51bWJlciwgZm9ybUZpZWxkOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51cGxvYWRDYW5jZWxlZCA9IHRydWU7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5maWVsZHMuZmluZCgocmVjb3JkOiBGb3JtRmllbGQpID0+IHJlY29yZC5uYW1lID09PSBmb3JtRmllbGQubmFtZSk7XG4gICAgICAgIGZpZWxkLmZpbGVzW2luZGV4XVtcInVwbG9hZFN1YnNjcmliZVwiXS51bnN1YnNjcmliZSgpO1xuICAgICAgICBmaWVsZC5maWxlcyA9IFtdO1xuICAgICAgICBkZWxldGUgdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmllbGRDdXN0b21pemF0aW9uXCIpLnZhbHVlWzBdLnRvSW5zZXJ0W2ZpZWxkLm5hbWVdO1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSkuY2xlYXJWYWxpZGF0b3JzKCk7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKS5zZXRWYWx1ZShcIlwiKTtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlZmFsdENhdGNoRXJyb3IoZmllbGQ6IEZvcm1GaWVsZCwgZXJyOiBIdHRwRXJyb3JSZXNwb25zZSwgaW5kZXg6IG51bWJlcik6IE9ic2VydmFibGU8bmV2ZXI+IHtcbiAgICAgICAgY29uc3QgeyBmaWxlcyB9ID0gZmllbGQ7XG4gICAgICAgIGZpbGVzW2luZGV4XS5lcnJvciA9IGVycjtcbiAgICAgICAgZmlsZXNbaW5kZXhdLmlzVXBsb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIGZpZWxkLmZpbGVzID0gWy4uLmZpbGVzXTtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpLnNldFZhbGlkYXRvcnMoW2Vycm9yT25VcGxvYWQoZmlsZXNbaW5kZXhdKV0pO1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSkudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihuZXcgRXJyb3IoXCJlcnJvciBpbiB1cGxvYWQgZmlsZS4gRGV0YWlsczogXCIgKyBlcnIubWVzc2FnZSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VHJhbnNsYXRlTGFiZWwobGFiZWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgJHt0aGlzLmRvbWFpbn0uJHt0aGlzLnNlcnZpY2V9LiR7bGFiZWx9YCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGREaXNwbGF5VGltZUluZm9TaWduVG9GaWVsZHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICBmaWVsZC5kaXNwbGF5VGltZUluZm9TaWduID0gdGhpcy5kaXNwbGF5VGltZUluZm9TaWduO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGlzVXBsb2FkaW5nKGZpbGU6IEZpbGVEdG8pOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuICgpID0+IChmaWxlLmlzVXBsb2FkaW5nID8geyBpc1VwbG9hZGluZzogdHJ1ZSB9IDogbnVsbCk7XG59XG5cbmZ1bmN0aW9uIGVycm9yT25VcGxvYWQoZmlsZTogRmlsZUR0byk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKCkgPT4gKGZpbGUuZXJyb3IgPyB7IHVwbG9hZEVycm9yOiB0cnVlIH0gOiBudWxsKTtcbn1cbiJdfQ==
@@ -23,14 +23,11 @@ __decorate([
23
23
  __decorate([
24
24
  Input()
25
25
  ], DynamicFieldComponent.prototype, "errorMessages", void 0);
26
- __decorate([
27
- Input()
28
- ], DynamicFieldComponent.prototype, "displayTimeInfoSign", void 0);
29
26
  DynamicFieldComponent = __decorate([
30
27
  Component({
31
28
  selector: "s-dynamic-field",
32
- template: "<div class=\"ui-fluid\" [formGroup]=\"form\">\n <div class=\"ui-g\">\n <ng-container *ngFor=\"let field of fields\">\n <div\n *ngIf=\"!field.visible || field.visible()\"\n [ngClass]=\"field.gridClass\"\n >\n <span *ngIf=\"field.label\">\n <label\n *sInfoSign=\"\n field.infoSign;\n displayTime: displayTimeInfoSign\n \"\n [for]=\"field.name\"\n [ngClass]=\"{ required: field.required() }\"\n >\n {{ field.label }}\n </label>\n </span>\n\n <ng-container\n *sDynamicForm=\"{\n id: id,\n config: field,\n group: form\n }\"\n ></ng-container>\n\n <s-control-errors\n [form]=\"form\"\n [control]=\"form.controls[field.name]\"\n [errorMessages]=\"getErrorMessages(field.errorMessages)\"\n ></s-control-errors>\n\n <ng-container *ngIf=\"field.footer\">\n <ng-container *ngIf=\"field.footer.help\">\n <span\n *ngIf=\"\n field.footer.help.visible({\n abstractControl: form.controls[field.name],\n formField: field\n })\n \"\n style=\"color: #888b99\"\n >\n {{ field.footer.help.text }}\n </span>\n </ng-container>\n\n <ng-container *ngIf=\"field.footer.link\">\n <div\n *ngIf=\"\n field.footer.link.visible({\n abstractControl: form.controls[field.name],\n formField: field\n })\n \"\n class=\"ui-g\"\n style=\"margin-left: -10px\"\n >\n <s-button\n [label]=\"field.footer.link.label\"\n priority=\"link\"\n (onClick)=\"\n field.footer.link.onClick({\n abstractControl:\n form.controls[field.name],\n formField: field\n })\n \"\n [auxiliary]=\"true\"\n ></s-button>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-template\n *ngIf=\"field?.bottomTemplate\"\n [ngTemplateOutlet]=\"field.bottomTemplate\"\n ></ng-template>\n </div>\n </ng-container>\n </div>\n</div>\n"
29
+ template: "<div class=\"ui-fluid\" [formGroup]=\"form\">\n <div class=\"ui-g\">\n <ng-container *ngFor=\"let field of fields\">\n <div\n *ngIf=\"!field.visible || field.visible()\"\n [ngClass]=\"field.gridClass\">\n\n <ng-container\n *sDynamicForm=\"{\n id: id,\n config: field,\n group: form\n }\"\n ></ng-container>\n\n <s-control-errors\n [form]=\"form\"\n [control]=\"form.controls[field.name]\"\n [errorMessages]=\"getErrorMessages(field.errorMessages)\"\n ></s-control-errors>\n\n <ng-container *ngIf=\"field.footer\">\n <ng-container *ngIf=\"field.footer.help\">\n <span\n *ngIf=\"\n field.footer.help.visible({\n abstractControl: form.controls[field.name],\n formField: field\n })\n \"\n style=\"color: #888b99\"\n >\n {{ field.footer.help.text }}\n </span>\n </ng-container>\n\n <ng-container *ngIf=\"field.footer.link\">\n <div\n *ngIf=\"\n field.footer.link.visible({\n abstractControl: form.controls[field.name],\n formField: field\n })\n \"\n class=\"ui-g\"\n style=\"margin-left: -10px\"\n >\n <s-button\n [label]=\"field.footer.link.label\"\n priority=\"link\"\n (onClick)=\"\n field.footer.link.onClick({\n abstractControl:\n form.controls[field.name],\n formField: field\n })\n \"\n [auxiliary]=\"true\"\n ></s-button>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-template\n *ngIf=\"field?.bottomTemplate\"\n [ngTemplateOutlet]=\"field.bottomTemplate\"\n ></ng-template>\n </div>\n </ng-container>\n </div>\n</div>\n"
33
30
  })
34
31
  ], DynamicFieldComponent);
35
32
  export { DynamicFieldComponent };
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9keW5hbWljLWZvcm0vY29tcG9uZW50cy9keW5hbWljLWZpZWxkL2R5bmFtaWMtZmllbGQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVFqRCxJQUFhLHFCQUFxQixHQUFsQyxNQUFhLHFCQUFxQjtJQWdCdkIsZ0JBQWdCLENBQUMsYUFBa0I7UUFDdEMsSUFBSSxhQUFhO1lBQ2IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztnQkFDakMsQ0FBQyxpQ0FBTSxJQUFJLENBQUMsYUFBYSxHQUFLLGFBQWEsRUFBRSxFQUM3QyxDQUFDLGlDQUFNLElBQUksQ0FBQyxhQUFhLEdBQUssYUFBYSxDQUFFLENBQUM7UUFDdEQsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzlCLENBQUM7SUFFTSxVQUFVLENBQUMsS0FBVTtRQUN4QixPQUFPLEtBQUssWUFBWSxRQUFRLENBQUM7SUFDckMsQ0FBQztDQUNKLENBQUE7QUF6Qkc7SUFEQyxLQUFLLEVBQUU7aURBQ1U7QUFHbEI7SUFEQyxLQUFLLEVBQUU7cURBQ21CO0FBRzNCO0lBREMsS0FBSyxFQUFFO21EQUNlO0FBR3ZCO0lBREMsS0FBSyxFQUFFOzREQUNtQjtBQUczQjtJQURDLEtBQUssRUFBRTtrRUFDMkI7QUFkMUIscUJBQXFCO0lBSmpDLFNBQVMsQ0FBQztRQUNQLFFBQVEsRUFBRSxpQkFBaUI7UUFDM0IscTJHQUE2QztLQUNoRCxDQUFDO0dBQ1cscUJBQXFCLENBMkJqQztTQTNCWSxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgRm9ybUZpZWxkIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ3VyYXRpb25zL2Zvcm0tZmllbGRcIjtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6IFwicy1keW5hbWljLWZpZWxkXCIsXG4gICAgdGVtcGxhdGVVcmw6IFwiLi9keW5hbWljLWZpZWxkLmNvbXBvbmVudC5odG1sXCIsXG59KVxuZXhwb3J0IGNsYXNzIER5bmFtaWNGaWVsZENvbXBvbmVudCB7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaWQ6IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGZpZWxkczogRm9ybUZpZWxkW107XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBmb3JtOiBGb3JtR3JvdXA7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBlcnJvck1lc3NhZ2VzPzogYW55O1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGlzcGxheVRpbWVJbmZvU2lnbjogbnVtYmVyO1xuXG4gICAgcHVibGljIGdldEVycm9yTWVzc2FnZXMoZXJyb3JNZXNzYWdlczogYW55KSB7XG4gICAgICAgIGlmIChlcnJvck1lc3NhZ2VzKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNGdW5jdGlvbihlcnJvck1lc3NhZ2VzKVxuICAgICAgICAgICAgICAgID8geyAuLi50aGlzLmVycm9yTWVzc2FnZXMsIC4uLmVycm9yTWVzc2FnZXMoKSB9XG4gICAgICAgICAgICAgICAgOiB7IC4uLnRoaXMuZXJyb3JNZXNzYWdlcywgLi4uZXJyb3JNZXNzYWdlcyB9O1xuICAgICAgICByZXR1cm4gdGhpcy5lcnJvck1lc3NhZ2VzO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0Z1bmN0aW9uKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRnVuY3Rpb247XG4gICAgfVxufVxuIl19
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9keW5hbWljLWZvcm0vY29tcG9uZW50cy9keW5hbWljLWZpZWxkL2R5bmFtaWMtZmllbGQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVFqRCxJQUFhLHFCQUFxQixHQUFsQyxNQUFhLHFCQUFxQjtJQWF2QixnQkFBZ0IsQ0FBQyxhQUFrQjtRQUN0QyxJQUFJLGFBQWE7WUFDYixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO2dCQUNqQyxDQUFDLGlDQUFNLElBQUksQ0FBQyxhQUFhLEdBQUssYUFBYSxFQUFFLEVBQzdDLENBQUMsaUNBQU0sSUFBSSxDQUFDLGFBQWEsR0FBSyxhQUFhLENBQUUsQ0FBQztRQUN0RCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDOUIsQ0FBQztJQUVNLFVBQVUsQ0FBQyxLQUFVO1FBQ3hCLE9BQU8sS0FBSyxZQUFZLFFBQVEsQ0FBQztJQUNyQyxDQUFDO0NBQ0osQ0FBQTtBQXRCRztJQURDLEtBQUssRUFBRTtpREFDVTtBQUdsQjtJQURDLEtBQUssRUFBRTtxREFDbUI7QUFHM0I7SUFEQyxLQUFLLEVBQUU7bURBQ2U7QUFHdkI7SUFEQyxLQUFLLEVBQUU7NERBQ21CO0FBWGxCLHFCQUFxQjtJQUpqQyxTQUFTLENBQUM7UUFDUCxRQUFRLEVBQUUsaUJBQWlCO1FBQzNCLGszRkFBNkM7S0FDaEQsQ0FBQztHQUNXLHFCQUFxQixDQXdCakM7U0F4QlkscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IEZvcm1GaWVsZCB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy9mb3JtLWZpZWxkXCI7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiBcInMtZHluYW1pYy1maWVsZFwiLFxuICAgIHRlbXBsYXRlVXJsOiBcIi4vZHluYW1pYy1maWVsZC5jb21wb25lbnQuaHRtbFwiLFxufSlcbmV4cG9ydCBjbGFzcyBEeW5hbWljRmllbGRDb21wb25lbnQge1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGlkOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBmaWVsZHM6IEZvcm1GaWVsZFtdO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZm9ybTogRm9ybUdyb3VwO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZXJyb3JNZXNzYWdlcz86IGFueTtcblxuICAgIHB1YmxpYyBnZXRFcnJvck1lc3NhZ2VzKGVycm9yTWVzc2FnZXM6IGFueSkge1xuICAgICAgICBpZiAoZXJyb3JNZXNzYWdlcylcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzRnVuY3Rpb24oZXJyb3JNZXNzYWdlcylcbiAgICAgICAgICAgICAgICA/IHsgLi4udGhpcy5lcnJvck1lc3NhZ2VzLCAuLi5lcnJvck1lc3NhZ2VzKCkgfVxuICAgICAgICAgICAgICAgIDogeyAuLi50aGlzLmVycm9yTWVzc2FnZXMsIC4uLmVycm9yTWVzc2FnZXMgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JNZXNzYWdlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNGdW5jdGlvbih2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEZ1bmN0aW9uO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,24 @@
1
+ import { __decorate } from "tslib";
2
+ import { Component, Input } from "@angular/core";
3
+ let FieldLabelComponent = class FieldLabelComponent {
4
+ constructor() {
5
+ this.displayTimeInfoSign = 5000;
6
+ }
7
+ };
8
+ __decorate([
9
+ Input()
10
+ ], FieldLabelComponent.prototype, "field", void 0);
11
+ __decorate([
12
+ Input()
13
+ ], FieldLabelComponent.prototype, "displayTimeInfoSign", void 0);
14
+ __decorate([
15
+ Input()
16
+ ], FieldLabelComponent.prototype, "fieldContainerRef", void 0);
17
+ FieldLabelComponent = __decorate([
18
+ Component({
19
+ selector: 's-field-label',
20
+ template: "<span *ngIf=\"field.label\">\n <label\n *sInfoSign=\"\n field.infoSign;\n displayTime: field.displayTimeInfoSign;\n focusedInputRef: fieldContainerRef\n \"\n [for]=\"field.name\"\n [ngClass]=\"{ required: field.required() }\">\n {{ field.label }}\n </label>\n</span>\n"
21
+ })
22
+ ], FieldLabelComponent);
23
+ export { FieldLabelComponent };
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtbGFiZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvZHluYW1pYy1mb3JtL2NvbXBvbmVudHMvZmllbGQtbGFiZWwvZmllbGQtbGFiZWwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVFqRCxJQUFhLG1CQUFtQixHQUFoQyxNQUFhLG1CQUFtQjtJQUFoQztRQUtXLHdCQUFtQixHQUFXLElBQUksQ0FBQztJQUk5QyxDQUFDO0NBQUEsQ0FBQTtBQVBHO0lBREMsS0FBSyxFQUFFO2tEQUNnQjtBQUd4QjtJQURDLEtBQUssRUFBRTtnRUFDa0M7QUFHMUM7SUFEQyxLQUFLLEVBQUU7OERBQzhCO0FBUjdCLG1CQUFtQjtJQUovQixTQUFTLENBQUM7UUFDUCxRQUFRLEVBQUUsZUFBZTtRQUN6QixrV0FBMkM7S0FDOUMsQ0FBQztHQUNXLG1CQUFtQixDQVMvQjtTQVRZLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5pbXBvcnQgeyBUZXh0RmllbGQgfSBmcm9tIFwiLi4vLi4vY29uZmlndXJhdGlvbnMvZmllbGRzXCI7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncy1maWVsZC1sYWJlbCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ZpZWxkLWxhYmVsLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgRmllbGRMYWJlbENvbXBvbmVudCB7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZmllbGQ6IFRleHRGaWVsZDtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRpc3BsYXlUaW1lSW5mb1NpZ246IG51bWJlciA9IDUwMDA7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBmaWVsZENvbnRhaW5lclJlZjogSFRNTEVsZW1lbnQ7XG59Il19
@@ -0,0 +1,19 @@
1
+ import { __decorate } from "tslib";
2
+ import { NgModule } from "@angular/core";
3
+ import { CommonModule } from "@angular/common";
4
+ import { FieldLabelComponent } from "./field-label.component";
5
+ import { InfoSignModule } from "../../../info-sign";
6
+ let FieldLabelModule = class FieldLabelModule {
7
+ };
8
+ FieldLabelModule = __decorate([
9
+ NgModule({
10
+ imports: [
11
+ CommonModule,
12
+ InfoSignModule
13
+ ],
14
+ declarations: [FieldLabelComponent],
15
+ exports: [FieldLabelComponent],
16
+ })
17
+ ], FieldLabelModule);
18
+ export { FieldLabelModule };
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtbGFiZWwubW9kdWxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvZHluYW1pYy1mb3JtL2NvbXBvbmVudHMvZmllbGQtbGFiZWwvZmllbGQtbGFiZWwubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFVcEQsSUFBYSxnQkFBZ0IsR0FBN0IsTUFBYSxnQkFBZ0I7Q0FBRyxDQUFBO0FBQW5CLGdCQUFnQjtJQVI1QixRQUFRLENBQUM7UUFDTixPQUFPLEVBQUU7WUFDTCxZQUFZO1lBQ1osY0FBYztTQUNqQjtRQUNELFlBQVksRUFBRSxDQUFDLG1CQUFtQixDQUFDO1FBQ25DLE9BQU8sRUFBRSxDQUFDLG1CQUFtQixDQUFDO0tBQ2pDLENBQUM7R0FDVyxnQkFBZ0IsQ0FBRztTQUFuQixnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5cbmltcG9ydCB7IEZpZWxkTGFiZWxDb21wb25lbnQgfSBmcm9tIFwiLi9maWVsZC1sYWJlbC5jb21wb25lbnRcIjtcbmltcG9ydCB7IEluZm9TaWduTW9kdWxlIH0gZnJvbSBcIi4uLy4uLy4uL2luZm8tc2lnblwiO1xuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBJbmZvU2lnbk1vZHVsZVxuICAgIF0sXG4gICAgZGVjbGFyYXRpb25zOiBbRmllbGRMYWJlbENvbXBvbmVudF0sXG4gICAgZXhwb3J0czogW0ZpZWxkTGFiZWxDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBGaWVsZExhYmVsTW9kdWxlIHt9XG4iXX0=
@@ -1,7 +1,22 @@
1
1
  import { __decorate } from "tslib";
2
- import { Component, Input } from "@angular/core";
2
+ import { ChangeDetectorRef, Component, ElementRef, Input, ViewChild } from "@angular/core";
3
3
  let AutocompleteFieldComponent = class AutocompleteFieldComponent {
4
+ constructor(changeDetectorRef, elementRef) {
5
+ this.changeDetectorRef = changeDetectorRef;
6
+ this.elementRef = elementRef;
7
+ }
8
+ ngAfterViewInit() {
9
+ this.setInputRef();
10
+ this.changeDetectorRef.detectChanges();
11
+ }
12
+ setInputRef() {
13
+ this.inputRef = this.elementRef.nativeElement.querySelector('input');
14
+ }
4
15
  };
16
+ AutocompleteFieldComponent.ctorParameters = () => [
17
+ { type: ChangeDetectorRef },
18
+ { type: ElementRef }
19
+ ];
5
20
  __decorate([
6
21
  Input()
7
22
  ], AutocompleteFieldComponent.prototype, "field", void 0);
@@ -10,8 +25,8 @@ __decorate([
10
25
  ], AutocompleteFieldComponent.prototype, "formControl", void 0);
11
26
  AutocompleteFieldComponent = __decorate([
12
27
  Component({
13
- template: "<div\n [sTooltip]=\"field.tooltip\"\n tooltipPosition=\"top\"\n [showDelay]=\"500\">\n <s-lookup\n [id]=\"(field.id || field.name)\"\n [multiple]=\"field.multiple\"\n [formControl]=\"formControl\"\n [placeholder]=\"field.placeholder\"\n [lookupSuggestions]=\"field.suggestions\"\n [dataKey]=\"field.dataKey\"\n (onLookupRequest)=\"field.onSearch($event)\"\n [lookupDisplayField]=\"field.displayField\"\n [showSearch]=\"false\"\n [lookupAppendTo]=\"field.appendTo\"\n (onSelect)=\"field.onSelect ? field.onSelect($event) : null\"\n (onUnselect)=\"field.onUnselect ? field.onUnselect($event) : null\"\n (onClear)=\"field.onClear ? field.onClear($event) : null\"\n (onBlur)=\"field.onBlur ? field.onBlur($event) : null\"\n [lookupEmptyMessage]=\"field.emptyMessage\">\n </s-lookup>\n</div>\n"
28
+ template: "<s-field-label *ngIf=\"inputRef\" [field]=\"field\"\n [fieldContainerRef]=\"inputRef\"></s-field-label>\n \n<div\n [sTooltip]=\"field.tooltip\"\n tooltipPosition=\"top\"\n [showDelay]=\"500\">\n <s-lookup\n [id]=\"(field.id || field.name)\"\n [multiple]=\"field.multiple\"\n [formControl]=\"formControl\"\n [placeholder]=\"field.placeholder\"\n [lookupSuggestions]=\"field.suggestions\"\n [dataKey]=\"field.dataKey\"\n (onLookupRequest)=\"field.onSearch($event)\"\n [lookupDisplayField]=\"field.displayField\"\n [showSearch]=\"false\"\n [lookupAppendTo]=\"field.appendTo\"\n (onSelect)=\"field.onSelect ? field.onSelect($event) : null\"\n (onUnselect)=\"field.onUnselect ? field.onUnselect($event) : null\"\n (onClear)=\"field.onClear ? field.onClear($event) : null\"\n (onBlur)=\"field.onBlur ? field.onBlur($event) : null\"\n [lookupEmptyMessage]=\"field.emptyMessage\">\n </s-lookup>\n</div>\n"
14
29
  })
15
30
  ], AutocompleteFieldComponent);
16
31
  export { AutocompleteFieldComponent };
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb21wb25lbnRzL2R5bmFtaWMtZm9ybS9jb21wb25lbnRzL2ZpZWxkcy9hdXRvY29tcGxldGUvYXV0b2NvbXBsZXRlLWZpZWxkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFRakQsSUFBYSwwQkFBMEIsR0FBdkMsTUFBYSwwQkFBMEI7Q0FLdEMsQ0FBQTtBQUhHO0lBREMsS0FBSyxFQUFFO3lEQUN3QjtBQUVoQztJQURDLEtBQUssRUFBRTsrREFDd0I7QUFKdkIsMEJBQTBCO0lBSHRDLFNBQVMsQ0FBQztRQUNQLHc1QkFBZ0Q7S0FDbkQsQ0FBQztHQUNXLDBCQUEwQixDQUt0QztTQUxZLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IEF1dG9jb21wbGV0ZUZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZ3VyYXRpb25zL2ZpZWxkcy9hdXRvY29tcGxldGUtZmllbGRcIjtcbmltcG9ydCB7IEJhc2VGaWVsZENvbXBvbmVudENvbmZpZyB9IGZyb20gXCIuLi9iYXNlLWZpZWxkLWNvbXBvbmVudFwiO1xuXG5AQ29tcG9uZW50KHtcbiAgICB0ZW1wbGF0ZVVybDogXCJhdXRvY29tcGxldGUtZmllbGQuY29tcG9uZW50Lmh0bWxcIixcbn0pXG5leHBvcnQgY2xhc3MgQXV0b2NvbXBsZXRlRmllbGRDb21wb25lbnQgaW1wbGVtZW50cyBCYXNlRmllbGRDb21wb25lbnRDb25maWcge1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGZpZWxkOiBBdXRvY29tcGxldGVGaWVsZDtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBmb3JtQ29udHJvbDogRm9ybUNvbnRyb2w7XG59XG4iXX0=
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb21wb25lbnRzL2R5bmFtaWMtZm9ybS9jb21wb25lbnRzL2ZpZWxkcy9hdXRvY29tcGxldGUvYXV0b2NvbXBsZXRlLWZpZWxkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVEzRixJQUFhLDBCQUEwQixHQUF2QyxNQUFhLDBCQUEwQjtJQVFuQyxZQUE2QixpQkFBb0MsRUFDcEMsVUFBc0I7UUFEdEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxlQUFVLEdBQVYsVUFBVSxDQUFZO0lBQ2hELENBQUM7SUFFRyxlQUFlO1FBQ2xCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVPLFdBQVc7UUFDZixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN6RSxDQUFDO0NBQ0osQ0FBQTs7WUFabUQsaUJBQWlCO1lBQ3hCLFVBQVU7O0FBUG5EO0lBREMsS0FBSyxFQUFFO3lEQUN3QjtBQUVoQztJQURDLEtBQUssRUFBRTsrREFDd0I7QUFKdkIsMEJBQTBCO0lBSHRDLFNBQVMsQ0FBQztRQUNQLDBnQ0FBZ0Q7S0FDbkQsQ0FBQztHQUNXLDBCQUEwQixDQW9CdEM7U0FwQlksMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIFZpZXdDaGlsZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgQXV0b2NvbXBsZXRlRmllbGQgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlndXJhdGlvbnMvZmllbGRzL2F1dG9jb21wbGV0ZS1maWVsZFwiO1xuaW1wb3J0IHsgQmFzZUZpZWxkQ29tcG9uZW50Q29uZmlnIH0gZnJvbSBcIi4uL2Jhc2UtZmllbGQtY29tcG9uZW50XCI7XG5cbkBDb21wb25lbnQoe1xuICAgIHRlbXBsYXRlVXJsOiBcImF1dG9jb21wbGV0ZS1maWVsZC5jb21wb25lbnQuaHRtbFwiLFxufSlcbmV4cG9ydCBjbGFzcyBBdXRvY29tcGxldGVGaWVsZENvbXBvbmVudCBpbXBsZW1lbnRzIEJhc2VGaWVsZENvbXBvbmVudENvbmZpZyB7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZmllbGQ6IEF1dG9jb21wbGV0ZUZpZWxkO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGZvcm1Db250cm9sOiBGb3JtQ29udHJvbDtcblxuICAgIHB1YmxpYyBpbnB1dFJlZjogRWxlbWVudFJlZjtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZjogRWxlbWVudFJlZlxuICAgICkge31cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0SW5wdXRSZWYoKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRJbnB1dFJlZigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbnB1dFJlZiA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XG4gICAgfVxufVxuIl19
@@ -1,14 +1,15 @@
1
1
  import { __decorate } from "tslib";
2
- import { Component, EventEmitter, Input, Output, ViewEncapsulation } from "@angular/core";
2
+ import { ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output, ViewChild, ViewEncapsulation } from "@angular/core";
3
3
  import { Subject } from "rxjs";
4
4
  import { first, takeUntil } from "rxjs/operators";
5
5
  import { BaseFieldComponent } from "../base-field-component";
6
6
  import { FieldType } from "../../../configurations/field-type";
7
7
  import { LocaleService } from "../../../../locale/locale.service";
8
8
  let BignumberFieldComponent = class BignumberFieldComponent extends BaseFieldComponent {
9
- constructor(localeService) {
9
+ constructor(localeService, changeDetectorRef) {
10
10
  super();
11
11
  this.localeService = localeService;
12
+ this.changeDetectorRef = changeDetectorRef;
12
13
  this.onInput = new EventEmitter();
13
14
  this.onFocus = new EventEmitter();
14
15
  this.onComplete = new EventEmitter();
@@ -66,9 +67,13 @@ let BignumberFieldComponent = class BignumberFieldComponent extends BaseFieldCom
66
67
  },
67
68
  });
68
69
  }
70
+ ngAfterViewInit() {
71
+ this.changeDetectorRef.detectChanges();
72
+ }
69
73
  };
70
74
  BignumberFieldComponent.ctorParameters = () => [
71
- { type: LocaleService }
75
+ { type: LocaleService },
76
+ { type: ChangeDetectorRef }
72
77
  ];
73
78
  __decorate([
74
79
  Input()
@@ -85,12 +90,15 @@ __decorate([
85
90
  __decorate([
86
91
  Output()
87
92
  ], BignumberFieldComponent.prototype, "onComplete", void 0);
93
+ __decorate([
94
+ ViewChild('inputRef')
95
+ ], BignumberFieldComponent.prototype, "inputRef", void 0);
88
96
  BignumberFieldComponent = __decorate([
89
97
  Component({
90
- template: "<p-inputMask\n *ngIf=\"field.mask; else noMask\"\n type=\"text\"\n [inputId]=\"(field.id || field.name)\"\n [name]=\"field.name\"\n [mask]=\"isFunction(field.mask) ? field.mask() : field.mask\"\n [placeholder]=\"field.placeholder\"\n slotChar=\"_\"\n [sTooltip]=\"field.tooltip\"\n tooltipPosition=\"top\"\n [showDelay]=\"500\"\n styleClass=\"mousetrap\"\n (onBlur)=\"field.onBlur ? field.onBlur($event) : null\"\n (onFocus)=\"onFocus.next($event)\"\n (onComplete)=\"onComplete.next($event)\"\n (onInput)=\"onInput.next($event)\"\n [formControl]=\"formControl\"\n [autoClear]=\"field.autoClear\">\n</p-inputMask>\n\n<ng-template #noMask>\n <ng-container>\n <div class=\"ui-inputgroup\">\n <ng-container *ngIf=\"field.leftAddon\">\n <span *ngIf=\"field.leftAddon.callback\" class=\"addon-button addon-button--left\">\n <s-button\n [label]=\"field.leftAddon.label\"\n [iconClass]=\"field.leftAddon.icon\"\n [priority]=\"field.leftAddon.priority\"\n [disabled]=\"isFunction(field.leftAddon.disabled) ? field.leftAddon.disabled() : field.leftAddon.disabled\"\n (onClick)=\"field.leftAddon.callback()\">\n </s-button>\n </span>\n <span *ngIf=\"!field.leftAddon.callback\" class=\"ui-inputgroup-addon\">\n <span *ngIf=\"field.leftAddon.label\">{{field.leftAddon.label}}</span>\n <span *ngIf=\"!field.leftAddon.label\" [ngClass]=\"field.leftAddon.icon\"></span>\n </span>\n </ng-container>\n\n <input\n [id]=\"(field.id || field.name)\"\n type=\"text\"\n [name]=\"field.name\"\n sBignumberInput\n [allowNegative]=\"field.allowNegative\"\n [precision]=\"isFunction(field.precision) ? trigger(field.precision) : field.precision\"\n [scale]=\"isFunction(field.scale) ? trigger(field.scale) : field.scale\"\n [decimalSeparator]=\"field.numberLocaleOptions.decimalSeparator\"\n [thousandsSeparator]=\"field.numberLocaleOptions.thousandsSeparator\"\n [alignTo]=\"field.alignTo\"\n [sTooltip]=\"field.tooltip\"\n tooltipPosition=\"top\"\n [placeholder]=\"field.placeholder\"\n [showDelay]=\"500\"\n pInputText\n [autocomplete]=\"field.browserAutocomplete ? 'on' : 'off'\"\n [ngClass]=\"'mousetrap'\"\n (blur)=\"field.onBlur ? field.onBlur($event) : null\"\n (focus)=\"onFocus.next($event)\"\n [formControl]=\"formControl\" />\n <ng-container *ngIf=\"field.rightAddon\">\n <span *ngIf=\"field.rightAddon.callback\" class=\"addon-button addon-button--right\">\n <s-button\n [label]=\"field.rightAddon.label\"\n [iconClass]=\"field.rightAddon.icon\"\n [priority]=\"field.rightAddon.priority\"\n [disabled]=\"isFunction(field.rightAddon.disabled) ? field.rightAddon.disabled() : field.rightAddon.disabled\"\n (onClick)=\"field.rightAddon.callback()\">\n </s-button>\n </span>\n <span *ngIf=\"!field.rightAddon.callback\" class=\"ui-inputgroup-addon\">\n <span *ngIf=\"field.rightAddon.label\">{{field.rightAddon.label}}</span>\n <span *ngIf=\"!field.rightAddon.label\" [ngClass]=\"field.rightAddon.icon\"></span>\n </span>\n </ng-container>\n </div>\n </ng-container>\n</ng-template>\n",
98
+ template: "<s-field-label *ngIf=\"inputRef\" [field]=\"field\"\n [fieldContainerRef]=\"inputRef?.nativeElement\"></s-field-label>\n \n<p-inputMask #inputRef\n *ngIf=\"field.mask; else noMask\"\n type=\"text\"\n [inputId]=\"(field.id || field.name)\"\n [name]=\"field.name\"\n [mask]=\"isFunction(field.mask) ? field.mask() : field.mask\"\n [placeholder]=\"field.placeholder\"\n slotChar=\"_\"\n [sTooltip]=\"field.tooltip\"\n tooltipPosition=\"top\"\n [showDelay]=\"500\"\n styleClass=\"mousetrap\"\n (onBlur)=\"field.onBlur ? field.onBlur($event) : null\"\n (onFocus)=\"onFocus.next($event)\"\n (onComplete)=\"onComplete.next($event)\"\n (onInput)=\"onInput.next($event)\"\n [formControl]=\"formControl\"\n [autoClear]=\"field.autoClear\">\n</p-inputMask>\n\n<ng-template #noMask>\n <ng-container>\n <div class=\"ui-inputgroup\">\n <ng-container *ngIf=\"field.leftAddon\">\n <span *ngIf=\"field.leftAddon.callback\" class=\"addon-button addon-button--left\">\n <s-button\n [label]=\"field.leftAddon.label\"\n [iconClass]=\"field.leftAddon.icon\"\n [priority]=\"field.leftAddon.priority\"\n [disabled]=\"isFunction(field.leftAddon.disabled) ? field.leftAddon.disabled() : field.leftAddon.disabled\"\n (onClick)=\"field.leftAddon.callback()\">\n </s-button>\n </span>\n <span *ngIf=\"!field.leftAddon.callback\" class=\"ui-inputgroup-addon\">\n <span *ngIf=\"field.leftAddon.label\">{{field.leftAddon.label}}</span>\n <span *ngIf=\"!field.leftAddon.label\" [ngClass]=\"field.leftAddon.icon\"></span>\n </span>\n </ng-container>\n\n <input #inputRef\n [id]=\"(field.id || field.name)\"\n type=\"text\"\n [name]=\"field.name\"\n sBignumberInput\n [allowNegative]=\"field.allowNegative\"\n [precision]=\"isFunction(field.precision) ? trigger(field.precision) : field.precision\"\n [scale]=\"isFunction(field.scale) ? trigger(field.scale) : field.scale\"\n [decimalSeparator]=\"field.numberLocaleOptions.decimalSeparator\"\n [thousandsSeparator]=\"field.numberLocaleOptions.thousandsSeparator\"\n [alignTo]=\"field.alignTo\"\n [sTooltip]=\"field.tooltip\"\n tooltipPosition=\"top\"\n [placeholder]=\"field.placeholder\"\n [showDelay]=\"500\"\n pInputText\n [autocomplete]=\"field.browserAutocomplete ? 'on' : 'off'\"\n [ngClass]=\"'mousetrap'\"\n (blur)=\"field.onBlur ? field.onBlur($event) : null\"\n (focus)=\"onFocus.next($event)\"\n [formControl]=\"formControl\" />\n <ng-container *ngIf=\"field.rightAddon\">\n <span *ngIf=\"field.rightAddon.callback\" class=\"addon-button addon-button--right\">\n <s-button\n [label]=\"field.rightAddon.label\"\n [iconClass]=\"field.rightAddon.icon\"\n [priority]=\"field.rightAddon.priority\"\n [disabled]=\"isFunction(field.rightAddon.disabled) ? field.rightAddon.disabled() : field.rightAddon.disabled\"\n (onClick)=\"field.rightAddon.callback()\">\n </s-button>\n </span>\n <span *ngIf=\"!field.rightAddon.callback\" class=\"ui-inputgroup-addon\">\n <span *ngIf=\"field.rightAddon.label\">{{field.rightAddon.label}}</span>\n <span *ngIf=\"!field.rightAddon.label\" [ngClass]=\"field.rightAddon.icon\"></span>\n </span>\n </ng-container>\n </div>\n </ng-container>\n</ng-template>\n",
91
99
  encapsulation: ViewEncapsulation.None,
92
100
  styles: ["s-number-field.ng-dirty.ng-invalid .ui-inputtext{border-color:#c13018}s-number-field.ng-dirty.ng-invalid .ui-inputtext:hover{border-color:#e44328}.addon-button{border:1px solid #c1c1cc}.addon-button s-button .s-button-with-text,.addon-button s-button button{height:100%;min-width:40px!important}.addon-button--left{border-radius:5px 0 0 5px;border-right:none}.addon-button--left s-button button{border-bottom-right-radius:0;border-top-right-radius:0}.addon-button--right{border-left:none;border-radius:0 5px 5px 0}.addon-button--right s-button button{border-bottom-left-radius:0;border-top-left-radius:0}"]
93
101
  })
94
102
  ], BignumberFieldComponent);
95
103
  export { BignumberFieldComponent };
96
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlnbnVtYmVyLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb21wb25lbnRzL2R5bmFtaWMtZm9ybS9jb21wb25lbnRzL2ZpZWxkcy9iaWdudW1iZXIvYmlnbnVtYmVyLWZpZWxkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHN0csT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxELE9BQU8sRUFBRSxrQkFBa0IsRUFBNEIsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFL0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBT2xFLElBQWEsdUJBQXVCLEdBQXBDLE1BQWEsdUJBQXdCLFNBQVEsa0JBQWtCO0lBZTNELFlBQTZCLGFBQTRCO1FBQ3JELEtBQUssRUFBRSxDQUFDO1FBRGlCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBUmxELFlBQU8sR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVoRCxZQUFPLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFaEQsZUFBVSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRWxELGtCQUFhLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUl0QyxDQUFDO0lBRU0sUUFBUTtRQUNYLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV2QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxD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QyxJQUFJLEtBQUssU0FBUyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUk7aUJBQzVHLENBQUMsQ0FBQTthQUFBO1NBQ1QsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztDQUNKLENBQUE7O1lBdEUrQyxhQUFhOztBQWJ6RDtJQURDLEtBQUssRUFBRTtzREFDcUI7QUFFN0I7SUFEQyxLQUFLLEVBQUU7NERBQ3dCO0FBR2hDO0lBREMsTUFBTSxFQUFFO3dEQUM4QztBQUV2RDtJQURDLE1BQU0sRUFBRTt3REFDOEM7QUFFdkQ7SUFEQyxNQUFNLEVBQUU7MkRBQ2lEO0FBWGpELHVCQUF1QjtJQUxuQyxTQUFTLENBQUM7UUFDUCxtMEhBQTZDO1FBRTdDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJOztLQUN4QyxDQUFDO0dBQ1csdUJBQXVCLENBcUZuQztTQXJGWSx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5cbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgZmlyc3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuXG5pbXBvcnQgeyBCYXNlRmllbGRDb21wb25lbnQsIEJhc2VGaWVsZENvbXBvbmVudENvbmZpZyB9IGZyb20gXCIuLi9iYXNlLWZpZWxkLWNvbXBvbmVudFwiO1xuaW1wb3J0IHsgRmllbGRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZ3VyYXRpb25zL2ZpZWxkLXR5cGVcIjtcbmltcG9ydCB7IEJpZ251bWJlckZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZ3VyYXRpb25zL2ZpZWxkcy9iaWdudW1iZXItZmllbGRcIjtcbmltcG9ydCB7IExvY2FsZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbG9jYWxlL2xvY2FsZS5zZXJ2aWNlXCI7XG5cbkBDb21wb25lbnQoe1xuICAgIHRlbXBsYXRlVXJsOiBcImJpZ251bWJlci1maWVsZC5jb21wb25lbnQuaHRtbFwiLFxuICAgIHN0eWxlVXJsczogW1wiLi9iaWdudW1iZXItZmllbGQuY29tcG9uZW50LnNjc3NcIl0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgQmlnbnVtYmVyRmllbGRDb21wb25lbnQgZXh0ZW5kcyBCYXNlRmllbGRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQmFzZUZpZWxkQ29tcG9uZW50Q29uZmlnIHtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBmaWVsZDogQmlnbnVtYmVyRmllbGQ7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZm9ybUNvbnRyb2w6IEZvcm1Db250cm9sO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG9uSW5wdXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvbkZvY3VzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb25Db21wbGV0ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBwcml2YXRlIG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBsb2NhbGVTZXJ2aWNlOiBMb2NhbGVTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLm9uTG9jYWxlU2VydmljZSgpO1xuXG4gICAgICAgIHRoaXMub25Gb2N1cy5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKGV2ZW50OiBGb2N1c0V2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5maWVsZC5vbkZvY3VzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWVsZC5vbkZvY3VzKGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5vbklucHV0LnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZmllbGQub25JbnB1dCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmllbGQub25JbnB1dChldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMub25Db21wbGV0ZS5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZpZWxkLm9uQ29tcGxldGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpZWxkLm9uQ29tcGxldGUoZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgICAgIHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmllbGRUeXBlKCkge1xuICAgICAgICByZXR1cm4gRmllbGRUeXBlO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25Mb2NhbGVTZXJ2aWNlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmxvY2FsZVNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRMb2NhbGUoKVxuICAgICAgICAgICAgLnBpcGUoZmlyc3QoKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmZpZWxkLm51bWJlckxvY2FsZU9wdGlvbnM/LmRlY2ltYWxTZXBhcmF0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmllbGQubnVtYmVyTG9jYWxlT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmZpZWxkLm51bWJlckxvY2FsZU9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjaW1hbFNlcGFyYXRvcjogdGhpcy5sb2NhbGVTZXJ2aWNlLmdldERlY2ltYWxTZXBhcmF0b3IoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZmllbGQubnVtYmVyTG9jYWxlT3B0aW9ucz8udGhvdXNhbmRzU2VwYXJhdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpZWxkLm51bWJlckxvY2FsZU9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5maWVsZC5udW1iZXJMb2NhbGVPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRob3VzYW5kc1NlcGFyYXRvcjogdGhpcy5sb2NhbGVTZXJ2aWNlLmdldEdyb3VwaW5nU2VwYXJhdG9yKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmZpZWxkLm51bWJlckxvY2FsZU9wdGlvbnM/LmN1cnJlbmN5U3ltYm9sKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpZWxkLm51bWJlckxvY2FsZU9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5maWVsZC5udW1iZXJMb2NhbGVPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5U3ltYm9sOiB0aGlzLmZpZWxkLnR5cGUgPT09IEZpZWxkVHlwZS5JbnRlZ2VyIHx8IHRoaXMuZmllbGQudHlwZSA9PT0gRmllbGRUeXBlLkRvdWJsZSA/IFwiXCIgOiBcIlIkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogKCkgPT5cbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuZmllbGQubnVtYmVyTG9jYWxlT3B0aW9ucyA9IHRoaXMuZmllbGQubnVtYmVyTG9jYWxlT3B0aW9ucyA/PyB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aG91c2FuZHNTZXBhcmF0b3I6IFwiLlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVjaW1hbFNlcGFyYXRvcjogXCIsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW5jeVN5bWJvbDogdGhpcy5maWVsZC50eXBlID09PSBGaWVsZFR5cGUuSW50ZWdlciB8fCB0aGlzLmZpZWxkLnR5cGUgPT09IEZpZWxkVHlwZS5Eb3VibGUgPyBcIlwiIDogXCJSJFwiLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlnbnVtYmVyLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb21wb25lbnRzL2R5bmFtaWMtZm9ybS9jb21wb25lbnRzL2ZpZWxkcy9iaWdudW1iZXIvYmlnbnVtYmVyLWZpZWxkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHdkosT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxELE9BQU8sRUFBRSxrQkFBa0IsRUFBNEIsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFL0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBT2xFLElBQWEsdUJBQXVCLEdBQXBDLE1BQWEsdUJBQXdCLFNBQVEsa0JBQWtCO0lBaUIzRCxZQUE2QixhQUE0QixFQUM1QixpQkFBb0M7UUFFN0QsS0FBSyxFQUFFLENBQUM7UUFIaUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQVgxRCxZQUFPLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFaEQsWUFBTyxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRWhELGVBQVUsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUlsRCxrQkFBYSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFNdEMsQ0FBQztJQUVNLFFBQVE7UUFDWCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtZQUM3RSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFO2dCQUNwQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUM3QjtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ3RFLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzdCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7WUFDekUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRTtnQkFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDaEM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxXQUFXO1FBQ2QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFXLFNBQVM7UUFDaEIsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUVPLGVBQWU7UUFDbkIsSUFBSSxDQUFDLGFBQWE7YUFDYixTQUFTLEVBQUU7YUFDWCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDYixTQUFTLENBQUM7WUFDUCxJQUFJLEVBQUUsR0FBRyxFQUFFOztnQkFDUCxJQUFJLFFBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsMENBQUUsZ0JBQWdCLENBQUEsRUFBRTtvQkFDbkQsSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsbUNBQ3ZCLElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLEtBQ2pDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLEVBQUUsR0FDN0QsQ0FBQztpQkFDTDtnQkFFRCxJQUFJLFFBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsMENBQUUsa0JBQWtCLENBQUEsRUFBRTtvQkFDckQsSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsbUNBQ3ZCLElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLEtBQ2pDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLEVBQUUsR0FDaEUsQ0FBQztpQkFDTDtnQkFFRCxJQUFJLFFBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsMENBQUUsY0FBYyxDQUFBLEVBQUU7b0JBQ2pELElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLG1DQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixLQUNqQyxjQUFjLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksR0FDNUcsQ0FBQztpQkFDTDtZQUNMLENBQUM7WUFDRCxLQUFLLEVBQUUsR0FBRyxFQUFFOztnQkFDUixPQUFBLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsU0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixtQ0FBSTtvQkFDaEUsa0JBQWtCLEVBQUUsR0FBRztvQkFDdkIsZ0JBQWdCLEVBQUUsR0FBRztvQkFDckIsY0FBYyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJO2lCQUM1RyxDQUFDLENBQUE7YUFBQTtTQUNULENBQUMsQ0FBQztJQUNYLENBQUM7SUFFTSxlQUFlO1FBQ2xCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0NBQ0osQ0FBQTs7WUE1RStDLGFBQWE7WUFDVCxpQkFBaUI7O0FBaEJqRTtJQURDLEtBQUssRUFBRTtzREFDcUI7QUFFN0I7SUFEQyxLQUFLLEVBQUU7NERBQ3dCO0FBR2hDO0lBREMsTUFBTSxFQUFFO3dEQUM4QztBQUV2RDtJQURDLE1BQU0sRUFBRTt3REFDOEM7QUFFdkQ7SUFEQyxNQUFNLEVBQUU7MkRBQ2lEO0FBRW5DO0lBQXRCLFNBQVMsQ0FBQyxVQUFVLENBQUM7eURBQXNCO0FBYm5DLHVCQUF1QjtJQUxuQyxTQUFTLENBQUM7UUFDUCx3OUhBQTZDO1FBRTdDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJOztLQUN4QyxDQUFDO0dBQ1csdUJBQXVCLENBNkZuQztTQTdGWSx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5cbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgZmlyc3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuXG5pbXBvcnQgeyBCYXNlRmllbGRDb21wb25lbnQsIEJhc2VGaWVsZENvbXBvbmVudENvbmZpZyB9IGZyb20gXCIuLi9iYXNlLWZpZWxkLWNvbXBvbmVudFwiO1xuaW1wb3J0IHsgRmllbGRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZ3VyYXRpb25zL2ZpZWxkLXR5cGVcIjtcbmltcG9ydCB7IEJpZ251bWJlckZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZ3VyYXRpb25zL2ZpZWxkcy9iaWdudW1iZXItZmllbGRcIjtcbmltcG9ydCB7IExvY2FsZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbG9jYWxlL2xvY2FsZS5zZXJ2aWNlXCI7XG5cbkBDb21wb25lbnQoe1xuICAgIHRlbXBsYXRlVXJsOiBcImJpZ251bWJlci1maWVsZC5jb21wb25lbnQuaHRtbFwiLFxuICAgIHN0eWxlVXJsczogW1wiLi9iaWdudW1iZXItZmllbGQuY29tcG9uZW50LnNjc3NcIl0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgQmlnbnVtYmVyRmllbGRDb21wb25lbnQgZXh0ZW5kcyBCYXNlRmllbGRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQmFzZUZpZWxkQ29tcG9uZW50Q29uZmlnIHtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBmaWVsZDogQmlnbnVtYmVyRmllbGQ7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZm9ybUNvbnRyb2w6IEZvcm1Db250cm9sO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG9uSW5wdXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvbkZvY3VzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb25Db21wbGV0ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAVmlld0NoaWxkKCdpbnB1dFJlZicpIGlucHV0UmVmOiBFbGVtZW50UmVmO1xuXG4gICAgcHJpdmF0ZSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3QoKTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgbG9jYWxlU2VydmljZTogTG9jYWxlU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5vbkxvY2FsZVNlcnZpY2UoKTtcblxuICAgICAgICB0aGlzLm9uRm9jdXMucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKChldmVudDogRm9jdXNFdmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZmllbGQub25Gb2N1cykge1xuICAgICAgICAgICAgICAgIHRoaXMuZmllbGQub25Gb2N1cyhldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMub25JbnB1dC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZpZWxkLm9uSW5wdXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpZWxkLm9uSW5wdXQoZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm9uQ29tcGxldGUucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5maWVsZC5vbkNvbXBsZXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWVsZC5vbkNvbXBsZXRlKGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpZWxkVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIEZpZWxkVHlwZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uTG9jYWxlU2VydmljZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb2NhbGVTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0TG9jYWxlKClcbiAgICAgICAgICAgIC5waXBlKGZpcnN0KCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5maWVsZC5udW1iZXJMb2NhbGVPcHRpb25zPy5kZWNpbWFsU2VwYXJhdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpZWxkLm51bWJlckxvY2FsZU9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5maWVsZC5udW1iZXJMb2NhbGVPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2ltYWxTZXBhcmF0b3I6IHRoaXMubG9jYWxlU2VydmljZS5nZXREZWNpbWFsU2VwYXJhdG9yKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmZpZWxkLm51bWJlckxvY2FsZU9wdGlvbnM/LnRob3VzYW5kc1NlcGFyYXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWVsZC5udW1iZXJMb2NhbGVPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuZmllbGQubnVtYmVyTG9jYWxlT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aG91c2FuZHNTZXBhcmF0b3I6IHRoaXMubG9jYWxlU2VydmljZS5nZXRHcm91cGluZ1NlcGFyYXRvcigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5maWVsZC5udW1iZXJMb2NhbGVPcHRpb25zPy5jdXJyZW5jeVN5bWJvbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWVsZC5udW1iZXJMb2NhbGVPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuZmllbGQubnVtYmVyTG9jYWxlT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW5jeVN5bWJvbDogdGhpcy5maWVsZC50eXBlID09PSBGaWVsZFR5cGUuSW50ZWdlciB8fCB0aGlzLmZpZWxkLnR5cGUgPT09IEZpZWxkVHlwZS5Eb3VibGUgPyBcIlwiIDogXCJSJFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6ICgpID0+XG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmZpZWxkLm51bWJlckxvY2FsZU9wdGlvbnMgPSB0aGlzLmZpZWxkLm51bWJlckxvY2FsZU9wdGlvbnMgPz8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhvdXNhbmRzU2VwYXJhdG9yOiBcIi5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlY2ltYWxTZXBhcmF0b3I6IFwiLFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVuY3lTeW1ib2w6IHRoaXMuZmllbGQudHlwZSA9PT0gRmllbGRUeXBlLkludGVnZXIgfHwgdGhpcy5maWVsZC50eXBlID09PSBGaWVsZFR5cGUuRG91YmxlID8gXCJcIiA6IFwiUiRcIixcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG59XG4iXX0=